О тэгах DSL
Устройство тэгов
Тэги — это структурные и семантические элементы, которые определяют внешний вид или функциональное значение фрагментов текста.
Каждый тэг включает в себя два дескриптора: открывающий и закрывающий. Открывающий дескриптор обозначает начало зоны действия тэга, закрывающий — окончание зоны действия тэга. Открывающий дескриптор состоит из имени тэга в обрамлении квадратных скобок. Имя тэга — это последовательность латинских букв, которая является, как правило, сокращением английского названия той функции, которую тэг выполняет. Например: [i] — от англ. italic (наклонное начертание), [com] — от англ. comment (комментарий) или [m2] — от англ. margin (поле страницы). Цифры, присоединённые к имени справа, называются расширением имени. В закрывающем дескрипторе к имени тэга прибавляется косая черта: [/i], [/com] и [/m] соответственно. Функция тэга — присваивание определённого свойства тексту, находящемуся в зоне его действия.
В примере на иллюстрации текст «кому-либо, чему-либо» будет отображаться в наклонном начертании, поскольку именно это свойство присваивает ему обрамляющий тэг [i]. Пара дескрипторов вместе с находящимся между ними содержимым составляют т.н. область тэга.
Некоторые тэги в DSL располагают атрибутами, а те, в свою очередь, набором допустимых значений:
В данном примере тэг [lang] (языковой разметки) используется с двумя разными атрибутами: id и name. Допустимыми значениями атрибута id являются числовые коды языков, а атрибута name — английские названия языков.
Метасимволы и литералы
Не все символы в тексте DSL одинаково воспринимаются словарной программой. Некоторые из них служат для неё сигналом к выполнению определённых действий. На основе этого признака все символы делятся на две группы: литералы и метасимволы.
Литералы — это простые символы без дополнительного значения. Такие символы адресованы более к пользователю, чем к программе, следовательно программа перенаправляет их в окно словарной карточки, где они отображаются «как есть». Латинский корень littera (буква) указывает в данном случае на буквальность значения.
Метасимволы — это символы с дополнительным значением, подающие программе сигнал к выполнению определённых операций. Встретив такой символ, программа воспринимает его как адресованный к самой себе, а не к пользователю, следовательно его перенаправление для отображения уже не требуется. Греческая приставка μετα- указывает в данном случае на переносность значения.
Для того, чтобы отобразить метасимвол в окне словарной карточки, его необходимо экранировать, т.е. поставить перед ним обратную косую черту \. Например, чтобы отобразить в карточке метасимвол @, в DSL понадобится сделать такую запись: \@.
Для литерального отображения квадратных скобок, помимо экранирования можно также их удваивать: [[…]]. При удваивании за квадратными скобками не должны следовать тэги. Так, например, запись [[[t] вызовет ошибку при компилировании. Для корректной обработки этого примера необходимо записать его [[ [t] или \[[t].
Список метасимволов, употребляемых в DSL
В теле статей и заголовках метасимволами являются: | ||
[ ] | квадратные скобки | |
@ | знак «эт» | |
# | знак номера, «решётка» | |
\ | обратная косая черта | |
~ | тильда | |
^ | циркумфлекс, «крышка» | |
<< >> | двойные угловые скобки, при этом одинарные воспринимаются как литералы |
|
{{ }} | двойные фигурные скобки, при этом одинарные воспринимаются как литералы только в теле статей |
|
В заголовках метасимволами также являются: (при этом в теле статей воспринимаются как литералы) |
||
( ) | круглые скобки | |
{ } | фигурные скобки |
Общий синтаксис
Имена тэгов должны писаться в нижнем регистре. Например, [ref] — правильно, а [REF] — неправильно.
Не допускается размещение одинаковых тэгов в зоне действия друг друга. Т.е. запись типа [b][b]strong[/b][/b] является неправильной и будет отвергнута компилятором при конвертации.
Шесть тэгов в DSL стандартно выделяются цветом: помет [p], вспомогательной части [*], ударений ['] и ссылок << >>, [ref], [url]. Цвет для их отображения выбирается только в диалоге настроек Lingvo, и изменить его на уровне DSL при помощи специального тэга цвета [c] невозможно.