微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

突出显示/解析另一个 PSI 元素内的 PSI 元素

如何解决突出显示/解析另一个 PSI 元素内的 PSI 元素

我开发了一个基于此 this tutorial自定义语言插件

我的插件使用如下格式解析键/值语言文件。值可以包含一些 HTML 标记,例如 <br>,<i>,<b>,<span>\n。所以我想将这些标签突出显示为绿色 PSI 元素(值)内的单独 PSI 元素(见图)。我怎样才能覆盖我的规则来获得这个?

#Section header

KEY1 = First<br>Value
KEY2 = Second\nValue

enter image description here

我使用的 Bnf 规则

lngFile ::= item_*

private item_ ::= (property|header|COMMENT|CRLF)

property ::= (KEY? SEParaTOR VALUE?) | KEY {
  mixin="someClass"
  implements="someClass"
  methods=[getKey getValue getName setName getNameIdentifier getPresentation]
}

header ::= HEADER {
  mixin="someClass"
  implements="someClass"
  methods=[getName setName getNameIdentifier getPresentation]
}

弹性

%%

%class LngLexer
%implements FlexLexer
%unicode
%function advance
%type IElementType
%eof{  return;
%eof}

CRLF=\R
WHITE_SPACE=[\ \n\t\f]
FirsT_VALUE_CHaraCTER=[^ \n\f\\] | "\\"{CRLF} | "\\".
VALUE_CHaraCTER=[^\n\f\\] | "\\"{CRLF} | "\\".
END_OF_LINE_COMMENT=("//")[^\r\n]*
HEADER=("#")[^\r\n]*
SEParaTOR=[:=]
KEY_CHaraCTER=[^:=\ \n\t\f\\] | "\\ "

%state WAITING_VALUE

%%

<YYINITIAL> {END_OF_LINE_COMMENT}                           { yybegin(YYINITIAL); return LngTypes.COMMENT; }

<YYINITIAL> {HEADER}                                        { yybegin(YYINITIAL); return LngTypes.HEADER; }

<YYINITIAL> {KEY_CHaraCTER}+                                { yybegin(YYINITIAL); return LngTypes.KEY; }

<YYINITIAL> {SEParaTOR}                                     { yybegin(WAITING_VALUE); return LngTypes.SEParaTOR; }

<WAITING_VALUE> {CRLF}({CRLF}|{WHITE_SPACE})+               { yybegin(YYINITIAL); return TokenType.WHITE_SPACE; }

<WAITING_VALUE> {WHITE_SPACE}+                              { yybegin(WAITING_VALUE); return TokenType.WHITE_SPACE; }

<WAITING_VALUE> {FirsT_VALUE_CHaraCTER}{VALUE_CHaraCTER}*   { yybegin(YYINITIAL); return LngTypes.VALUE; }

({CRLF}|{WHITE_SPACE})+                                     { yybegin(YYINITIAL); return TokenType.WHITE_SPACE; }

[^]                                                         { return TokenType.BAD_CHaraCTER; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。