Подсветка синтаксиса Icon для текстового редактора Nano

Так уж получилось, что я работаю в Linux (да и не я один) — и поэтому часто работаю в очень простом и на мой взгляд очень удобном консольном редакторе Nano. Nano очень хорош и поддерживает посветку синтаксиса для многих языков программирования, однако в списке поддерживаемых языков Icon нет. Конечно, это печально, но отсутствие готовой подсветки синтаксиса Icon не мешает созданию собственной… Так вот и возникла идея создания своего файла подсветки.

В Сети, к сожалению, практически нет информации по созданию файлов подсветки для Nano, однако, имеется целый комплект файлов подсветок для других языков и еще ценное упоминание о том, что Nano использует цветовое выделение для регулярных выражений.

Именно, это и стало поворотным моментом для создания подсветки, в совокупности с чтением мануала Nano на английском (кстати, больше всего полезной информации оказалось в вики моего Linux. Да здравствует Gentoo!)

Вот в общем-то все предисловие, ну а теперь скриншоты цветового выделения выражений Icon:

nano1_0_oА теперь, как установить подсветку синтаксиса в Nano. Для этого необходимо поместить файл icon.nanorc (собственно описание подсветки, которое нужно поместить в этот обычный текстовый файл будет дано чуть ниже) в /usr/share/nano/ (для чего нужны root права в системе), после чего нужно в домашней директории создать файл .nanorc:

touch ~/.nanorc

В который дописываем следующее:

nano2_0_oСохраняем — и все, можно пользоваться, для чего достаточно открыть любой *.icn файл.

И вот описание самой подсветки, которое нужно поместить в файл icon.nanorc:

Под катом

syntax «icon» «.\icn$»

#made by Baharew Oleg specially for IconDevelPack

#процедурные блоки и описания переменных
color green «\<(link|global|procedure|initial|static|record|local|end|return|suspend|invocable)\>»

#управляющие структуры
color blue «\<(break|case|of|default|create|every|do|fail|if|then|else|next|not|repeat|until|while|to)\>»
color blue «\<(main)\>»

#функции
color brightblue «\<(abs|acos|asin|atan|dtor|exp|cos|iand|icom|ior|ishift|ixor|log|rtod|sin|sqrt|tan)\>»
color brightblue «\<(any|bal|center|detab|entab|find|left|many|map|match|move|pos|repl|reverse|right|tab|trim|upto)\>»
color brightblue «\<(char|copy|cset|delete|get|image|insert|integer|list|member|numeric|ord|pop|pull|push|put|real)\>»
color brightblue «\<(seq|set|sort|sortf|string|table|type)\>»
color brightblue «\<(chdir|close|delay|display|exit|flush|function|getch|getche|getenv|kbhit|open|name|read|reads|remove|rename|)\>»
color brightblue «\<(seek|stop|system|variable|where|write|writes)\>»

#директивы препроцессора
color cyan «\<(\$define|\$else|\$endif|\$error|\$ifdef|\$ifndef|\$include|\$undef>)\>»

#строки и множества
color brightred «»(\\.|[^\»])*»»
color brightred «‘(\\.|[^\’])*'»

#комментарии
color yellow «#.*$»

# специальные ключевые слова и переменные
color magenta «(&ascii)|(&clock)|(&cset)|(&date)|(&dateline)|(&digits)|(&e)|(&errout)|(&fail)|(&host)|(&input)|(&letters)»
color magenta «(&lcase)|(&level)|(&main)|(&null)|(&output)|(&phi)|(&pi)|(&pos)|(&program)|(&random)|(&source)|(&subject)|(&time)»
color magenta «(&trace)|(&ucase)|(&version)|(&x)|(&y)|(&lpress)|(&rpress)»

Добавить комментарий