Страница 1 из 1
Подсветка Gcode в Gedit
Добавлено: 18 авг 2010, 12:36
Nick
Несмотря на свою простоту Gedit (обычный "блокнот" в Gnome) имеет очень много функций. Одна из которых подсветка синтаксиса языков. В стандартный пакет включено около сотни различных языков программирования/форматирования/скриптовых языков/ файлов ini. Но к сожалению нет синтаксиса Gcode.
Порывшись в интернете, я не нашел ничего дельного поэтому поводу и решил написать сам.
Вот что получилось:
При использовании цветовой схемы "Oblivion":
Как сделать себе такое же:
- Скачиваем этот файл :
- Cохраняем его в директорию "/usr/share/gtksourceview-2.0/language-specs/" (и/или /usr/share/gtksourceview-3.0/language-specs/). При необходимости посолить, т.е. перезапустить Gedit
.
- Чтобы поставить тему как на рисунке, заходим в Правка -> Параметры -> Шрифты и цвета и выбираем Oblivion.
ЗЫ Прямо перед тем как я закончил написание gcode.lang я наткнулся на один уже написанный на сайте
wiki.linuxcnc.org. Но у наших версий есть отличия:
У меня разные G и M коды разделены по группам и отображаются по-разному: например коды общения с системой охлаждения - синим, коды остановки запуска и остановки станка - на красном фоне и т.д.
Re: Подсветка Gcode в Gedit
Добавлено: 22 сен 2010, 23:14
DMexico
Спасибо тебе Root за просвещение Gedit!
Скажите коллега: а подробности написания этого файла можете осветить?
Re: Подсветка Gcode в Gedit
Добавлено: 23 сен 2010, 09:44
Nick
Да, конечно.
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>
Примерно так...
Re: Подсветка Gcode в Gedit
Добавлено: 25 май 2011, 09:24
vladimir74
Вот отлично на днях лазил гедите пытался подсветку подобрать, а тут такое, спасибо...
Re: Подсветка Gcode в Gedit
Добавлено: 29 июн 2012, 21:48
DMexico
Хороша подсветка!

Re: Подсветка Gcode в Gedit
Добавлено: 30 июн 2012, 01:18
Nick
В английской ветке есть такая же но с парой исправленных багов:
Highlight Gcode in Gedit #1
Последняя версия в шапке.
Re: Подсветка Gcode в Gedit
Добавлено: 30 июн 2012, 14:17
sandman
Cохраняем его в директорию "/usr/share/gtksourceview-2.0/language-specs/"
В 12.04 сохранять нужно в /usr/share/gtksourceview-3.0/language-specs/, иначе не работает...
Re: Подсветка Gcode в Gedit
Добавлено: 03 июл 2012, 06:51
Сергей Саныч
Полезная вещь!
Можно еще repeat/endrepeat добавить (ну, это просто). И сделать, чтобы M30 правильно выделялось, а то сейчас примерно как M30 - пока еще не разобрался, как это сделать.
Re: Подсветка Gcode в Gedit
Добавлено: 03 июл 2012, 10:43
Nick
Сейчас подредактируем...
У меня еще sub с буквенным названием тоже кривовато выходил...
Re: Подсветка Gcode в Gedit
Добавлено: 03 июл 2012, 11:04
Nick
Итак все исправил, теперь именные O-коды отображаются правильно. M30 тоже.
Плюс теперь в конструкциях вида T123 F123 S123 выделяется не только буква, но и число стоящее за ней.
Обновленная версия в шапке.
Re: Подсветка Gcode в Gedit
Добавлено: 08 июн 2014, 09:54
nkp
для файлов .hal можно подкорректировать подсветку в gedit...
Код: Выделить всё
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd">
<language name=".hal" version="1.0" _section="Others" mimetypes="hal">
<default-regex-options case-sensitive= "false"></default-regex-options>
<line-comment _name = "HAL Comment" style= "Comment">
<start-regex>#</start-regex>
</line-comment>
<keyword-list name = "Math Functions" style = "Function" case-sensitive="FALSE">
<keyword>net</keyword>
</keyword-list>
</language>
дополнить по желанию ...
сохранить в файл hal.lang в /usr/share/gtksourceview-2.0/language-specs
Re: Подсветка Gcode в Gedit
Добавлено: 09 июн 2014, 09:35
Nick
nkp писал(а):<keyword>net</keyword>
тогда уж добавить еще для
setp unlinkp loadrt loadusr unloadrt unloadusr и т.д.
О, вот список всех команд
Код: Выделить всё
loadrt, loadusr, waitusr, unload, lock, unlock, net, linkps, linksp,
unlinkp, newsig, delsig, setp, getp, ptype, sets, gets, stype,
addf, delf, show, list, save, status, start, stop, source, quit, exit
Re: Подсветка Gcode в Gedit
Добавлено: 09 июн 2014, 10:12
nkp
Nick писал(а):тогда уж добавить
ну здесь каждый может своими предпочтаниями руководствоваться...
наверно я себе ещё только выделял бы имя_сигнала...
(но тут уже надо regex пользовать)