Подсветка синтаксиса (в cooledit)

Paul Sheer ([email protected]), “SYNTAX HIGHLIGHTING (in cooledit)”, public translation into Russian from English More about this translation.

Translate into another language.

Подсветка синтаксиса

Начиная с версии 3.6.0, cooledit умеет подсветку синтаксиса. Это означает, что ключевые слова и контексты (такие как комментарии, строковые константы и т.д.) будут подсвечены разными цветами. Этот раздел описывает формат файла ~/.cedit/syntax.

Файл ~/.cedit/syntax перечитывается при открытии каждого нового редактора. В файле содержатся правила подсвечивания, каждое из которых записано с новой строки, и которые определяют, какие из ключевых слов каким цветом подсвечиваются. Также файл разделён на секции, каждая из которых, начинается со строки с командой file и регулярным выражением следующим за ней. Регулярное выражение определяет имя файла к которому будет применён набор правил. Далее следует описание для отображения в заголовке редактора объясняющее тип файла пользователю. Третий параметр (необязательный) - регулярное выражение соответствующее первой строке текста из файла. Если любое из регулярных выражений, по имени или по первой строке, совпадёт, то правила будут загружены.

Секция оканчивается началом новой секции. Каждая секция разделена на контексты, а каждый контекст содержит правила. Контекст (context) - область текста, которой принадлежат особенный набор правил. Например, область комментариев в стиле C (например между /* и */.) имеет свой собственный цвет. Он является контекстом, не смотря на то, что он не имеет других правил внутри себя, т.к. возможно мы не хотим ничего подсвечивать внутри C комментария.

Простейшая секция для языка C может выглядеть так:

file .\*\\.c C\sProgram\sFile (#include|/\\\*)

wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ

# default colors

context default

keyword whole if 24

keyword whole else 24

keyword whole for 24

keyword whole while 24

keyword whole do 24

keyword whole switch 24

keyword whole case 24

keyword whole static 24

keyword whole extern 24

keyword { 14

keyword } 14

keyword '*' 6

# комментарии C

context /\* \*/ 22

# Директивы препроцессора C

context linestart # \n 18

keyword \\\n 24

# Строковые константы C

context " " 6

keyword %d 24

keyword %s 24

keyword %c 24

keyword \\" 24

Каждый контекст начинается со строки вида:

context [exclusive] [whole|wholeright|wholeleft] [linestart] delim [linestart] delim [foreground] [background]

Единственное исключение составляет первый контекст. Он должен начинаться со строки вида:

context default [foreground] [background]

иначе cooledit возвратит ошибку.

Параметр linestart определяет, что начало ограничителя (delim) должен совпадать с началом строки.

Параметр whole определяет, что ограничитель (delim) должен быть целым словом. Набор символов из которых может состоять слово могут быть изменены в любой точке файла с помощью команды wholechars. Команда wholechars в самом начале устанавливает набор в состояние по умолчанию и по этому может быть опущено.
Для того, чтобы определить, что слово должно быть целым только слева, можно использовать параметр wholeleft и соответственно справа - wholeright. Наборы символов для левого и правого направлений могут быть установлены отдельно с помощью следующей команды:

wholechars [left|right] characters

Параметр exclusive определяет подсветку между ограничителями (delim), исключая при этом сами ограничители (delim).

Каждое правило имеет вид:

keyword [whole|wholeright|wholeleft] [linestart] string foreground [background]

Контекст (context) или ключевое слово (keyword) обрабатываются так, что могут включать символы табуляции и пробелы. Для этого используются последовательности \t и \s. Новая строка и \ определяются последовательностями \n и \\ соответственно. Также, последовательность \* должна быть использована для определения символа *. Сам по себе символ * является метасимволом (wildcard) который определён как любое количество символов (>=0). Например,

keyword '*' 6

подсвечивает все односимвольные константы C зелёным цветом. Вы также могли использовать

keyword "*" 6

для расцвечивания строковых констант, исключая многострочные константы. Метасимволы могут использоваться совместно с контекстами в позиции первого или последнего символа.

Важно отметить значение строки:

keyword \\\n 24

Эта строка определяет ключевое слово (keyword) содержащее символ "\" и символ новой строки (\n). Так как ключевые слова (keyword) имеют более высокий приоритет чем разделители контестов, это ключевое слово (keyword) предотвращает завершение контекста в конце строки, если строка оканчивается символом "\". позволяя, таким образом, применять расцветку к дерективам С-препроцессора расположенным на нескольких строках.

Цвета пронумерованы от 0 до 26 и объяснены ниже в разделе ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ ПОВЕДЕНИЯ. Также Вы можете использовать именованные цвета определённые в /usr/lib/X11/rgb.txt, однако лишь однословные их определения. Лучше использовать численные представления, чтобы ограничить использование цветовой палитры.

Комментарии определяются символом "#" в начале строки.

Ввиду простоты реализации, есть некоторые затруднительные ситуации которые не будут обрабатываться корректно, но это мелкие раздражители. В большинстве своём, достаточно сложные ситуации могут быть обработаны с помощью этих простых правил. Неплохой идеей будет просмотреть несколько файлов с правилами для изучения изящных приёмов, которые Вы можете использовать применив немного воображения. Если Вы не можете решить проблему с помощью моих правил, а у Вас есть правило, которое Вы считаете будет полезным, пожалуйста напишите мне письмо с запросом на реализацию. Однако, не просите о поддержке регулярных выражений, т.к. это решительно невозможно.

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

Original (English): SYNTAX HIGHLIGHTING (in cooledit)

Translation: © styx, shkoda, smind .

translatedby.com crowd

Like this translation? Share it or bookmark!