Так уж получилось, что я работаю в Linux (да и не я один) – и поэтому часто работаю в очень простом и на мой взгляд очень удобном консольном редакторе Nano. Nano очень хорош и поддерживает посветку синтаксиса для многих языков программирования, однако в списке поддерживаемых языков Icon нет. Конечно, это печально, но отсутствие готовой подсветки синтаксиса Icon не мешает созданию собственной… Так вот и возникла идея создания своего файла подсветки.
В Сети, к сожалению, практически нет информации по созданию файлов подсветки для Nano, однако, имеется целый комплект файлов подсветок для других языков и еще ценное упоминание о том, что Nano использует цветовое выделение для регулярных выражений.
Именно, это и стало поворотным моментом для создания подсветки, в совокупности с чтением мануала Nano на английском (кстати, больше всего полезной информации оказалось в вики моего Linux. Да здравствует Gentoo!)
Вот в общем-то все предисловие, ну а теперь скриншоты цветового выделения выражений Icon:
А теперь, как установить подсветку синтаксиса в Nano. Для этого необходимо поместить файл icon.nanorc (собственно описание подсветки, которое нужно поместить в этот обычный текстовый файл будет дано чуть ниже) в /usr/share/nano/ (для чего нужны root права в системе), после чего нужно в домашней директории создать файл .nanorc:
touch ~/.nanorc
В который дописываем следующее:
Сохраняем – и все, можно пользоваться, для чего достаточно открыть любой *.icn файл.
И вот описание самой подсветки, которое нужно поместить в файл icon.nanorc:
[accordion][panel intro=”Под катом”]
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)”
[/panel][/accordion]