Подсветка Gcode в Gedit

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Подсветка Gcode в Gedit

Сообщение Nick »

Несмотря на свою простоту Gedit (обычный "блокнот" в Gnome) имеет очень много функций. Одна из которых подсветка синтаксиса языков. В стандартный пакет включено около сотни различных языков программирования/форматирования/скриптовых языков/ файлов ini. Но к сожалению нет синтаксиса Gcode.

Порывшись в интернете, я не нашел ничего дельного поэтому поводу и решил написать сам.

Вот что получилось:
При использовании цветовой схемы "Oblivion":
0079 gedit gcode highlight.png (5600 просмотров) <a class='original' href='./download/file.php?id=616&mode=view' target=_blank>Загрузить оригинал (161.19 КБ)</a>

Как сделать себе такое же:

  1. Скачиваем этот файл :
    gcode.lang
    (7.38 КБ) 1109 скачиваний
  2. Cохраняем его в директорию "/usr/share/gtksourceview-2.0/language-specs/" (и/или /usr/share/gtksourceview-3.0/language-specs/). При необходимости посолить, т.е. перезапустить Gedit :).
  3. Чтобы поставить тему как на рисунке, заходим в Правка -> Параметры -> Шрифты и цвета и выбираем Oblivion.
ЗЫ Прямо перед тем как я закончил написание gcode.lang я наткнулся на один уже написанный на сайте wiki.linuxcnc.org. Но у наших версий есть отличия:
У меня разные G и M коды разделены по группам и отображаются по-разному: например коды общения с системой охлаждения - синим, коды остановки запуска и остановки станка - на красном фоне и т.д.
Аватара пользователя
DMexico
Опытный
Сообщения: 149
Зарегистрирован: 13 мар 2010, 21:39
Репутация: 7
Откуда: Киев
Контактная информация:

Re: Подсветка Gcode в Gedit

Сообщение DMexico »

Спасибо тебе Root за просвещение Gedit!
Скажите коллега: а подробности написания этого файла можете осветить?
Мнение автора может не совпадать с мнением редакции
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Подсветка Gcode в Gedit

Сообщение 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>
Примерно так...
vladimir74

Re: Подсветка Gcode в Gedit

Сообщение vladimir74 »

Вот отлично на днях лазил гедите пытался подсветку подобрать, а тут такое, спасибо...
Аватара пользователя
DMexico
Опытный
Сообщения: 149
Зарегистрирован: 13 мар 2010, 21:39
Репутация: 7
Откуда: Киев
Контактная информация:

Re: Подсветка Gcode в Gedit

Сообщение DMexico »

Хороша подсветка! :good:
Мнение автора может не совпадать с мнением редакции
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Подсветка Gcode в Gedit

Сообщение Nick »

В английской ветке есть такая же но с парой исправленных багов: Highlight Gcode in Gedit #1
Последняя версия в шапке.
sandman
Мастер
Сообщения: 257
Зарегистрирован: 31 мар 2011, 19:09
Репутация: 19
Откуда: Германия, Horb am Neckar
Контактная информация:

Re: Подсветка Gcode в Gedit

Сообщение sandman »

Cохраняем его в директорию "/usr/share/gtksourceview-2.0/language-specs/"
В 12.04 сохранять нужно в /usr/share/gtksourceview-3.0/language-specs/, иначе не работает...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Подсветка Gcode в Gedit

Сообщение Сергей Саныч »

Полезная вещь!
Можно еще repeat/endrepeat добавить (ну, это просто). И сделать, чтобы M30 правильно выделялось, а то сейчас примерно как M30 - пока еще не разобрался, как это сделать.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Подсветка Gcode в Gedit

Сообщение Nick »

Сейчас подредактируем...
У меня еще sub с буквенным названием тоже кривовато выходил...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Подсветка Gcode в Gedit

Сообщение Nick »

Итак все исправил, теперь именные O-коды отображаются правильно. M30 тоже.
Плюс теперь в конструкциях вида T123 F123 S123 выделяется не только буква, но и число стоящее за ней.

Обновленная версия в шапке.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Подсветка Gcode в Gedit

Сообщение 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
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Подсветка Gcode в Gedit

Сообщение 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
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Подсветка Gcode в Gedit

Сообщение nkp »

Nick писал(а):тогда уж добавить
ну здесь каждый может своими предпочтаниями руководствоваться...
наверно я себе ещё только выделял бы имя_сигнала...
(но тут уже надо regex пользовать)
Ответить

Вернуться в «LinuxCNC»