gedit의 경우 일부 자연어 작업을 수행하기 위해 만든 마크업 유사 언어에 대한 사용자 정의 구문 강조 표시기를 만들고 있으므로 키워드를 만들 필요가 없으므로 간단한 키워드부터 시작하겠다고 생각했습니다. .
XML로 다음을 정의했습니다.
<language id="foo" _name="Foo" version="2.0" _section="Source">
<metadata>
<property name="mimetypes">text/x-c;text/x-csrc;image/x-xpixmap</property>
<property name="globs">*.foo</property>
</metadata>
<styles>
<style id="operator" _name="Operator" map-to="def:keyword" />
<style id="member" _name="Member" map-to="def:type" />
</styles>
<definitions>
<context id="members" style-ref="member">
<keyword>ref</keyword>
<keyword>alt</keyword>
<keyword>pos</keyword>
<keyword>num</keyword>
</context>
<context id="operators" style-ref="operator">
<keyword>#</keyword>
<keyword>$</keyword>
<keyword>@</keyword>
<keyword>[</keyword>
<keyword>]</keyword>
<keyword>:</keyword>
<keyword>=</keyword>
<keyword>:?</keyword>
<keyword>&</keyword>
</context>
<!--Main context-->
<context id="opal" class="no-spell-check">
<include>
<context ref="members" />
<context ref="operators" />
</include>
</context>
</definitions>
</language>
구문 강조가 발생하지만 특정 이상한 조건에서만 발생합니다. 특히 operators
강조 표시를 방지하려면 컨텍스트의 모든 키워드 앞에 키워드가 아닌 문자가 와야 합니다.
이를 처리하기 위해 정규식을 사용해야 합니까, 아니면 XML을 엉망으로 만들고 있습니까? 그리고 members
키워드 강조표시에는 왜 문제가 없나요?