Да, конечно.
Gedit для подсветки синтаксиса использует библиотеку gtksourceview-2.0.
Фактически файл состоит из описания стилей, описания конструкций (грамматики языка) и их связей.
Конструкции это регулярные выражения, или комбинации конструкций.
Сначала метадата - ассоциации, и описание комментариев языка.
Код: Выделить всё
<?xml version="1.0" encoding="UTF-8"?>
<language id="gcode" _name="Gcode" version="2.0" _section="Others">
<metadata>
<property name="mimetypes"></property>
<property name="globs">*.nc;*.ngc</property>
<property name="block-comment-start">(</property>
<property name="block-comment-end">)</property>
</metadata>
Потом описание стилей. Прописывается соответствие наших стилей стандартным. (Можно задавать собственные, но они не будут присутствовать в стандартных цветовых схемах.)
Код: Выделить всё
<styles>
<style id="comment" _name="Comment" map-to="def:comment"/>
...
</styles>
Делаем все регулярные выражения регистро-независимыми, т.е. не важно большими или маленькими буквами записан текст. (Также можно вставлять специальный ключ в каждое регулярное выражение.)
Код: Выделить всё
<default-regex-options case-sensitive="false"/>
Описание конструкций:
id - название контекста. Потом можно ссылаться на данный контекст, для обработки вложенных конструкций (например "#include" в Си будет отображаться не как комментарий, а как include).
style-ref - ссылка на стиль, которым будет отображаться контекст.
Далее описание:
Здесь например контекст должен начинаться с "(" и заканчиваться ")", \ нужен т.к. скобки это специальный символ в регулярных выражениях.
Честно говоря, я не совсем помню в чем разница между MATHC и KEYWORD, вроде оба поддерживают регулярные выражения.
Код: Выделить всё
<definitions>
<context id="block-comment" style-ref="comment">
<start>\(</start>
<end>\)</end>
<include>
<context ref="def:in-line-comment"/>
</include>
</context>
<context id="variable" style-ref="variable">
<match>#([0-9]+|<[a-zA-Z_0-9]+>)</match>
</context>
<context id="math" style-ref="math">
<keyword>ATAN|ABS|ACOS|ASIN|COS|EXP|FIX|FUP|ROUND|LN|SIN|SQRT|TAN|MOD|EQ|NE|GT|GE|LT|LE|AND|OR|XOR</keyword>
</context>
<context id="motion" style-ref="motion">
<keyword>G0?[01234]{1}</keyword>
<keyword>G8[0-3]</keyword>
<keyword>G(73|85|89|33(.1)?|76)</keyword>
...
</context>
...
В конце добавляем описанные контексты в наш главный контекст gcode.
Код: Выделить всё
<context id="gcode">
<include>
<context ref="block-comment" />
<context ref="variable" />
<context ref="math" />
...
</include>
</context>
</definitions>
</language>
Примерно так...