1 <appendix id="highlight">
10 <othercredit role="translator"
22 >Перевод на русский</contrib
24 ><othercredit role="translator"
32 >opaleksej@yandex.ru</email
36 >Перевод на русский</contrib
42 >Подсветка синтаксиса</title>
44 <sect1 id="highlight-overview">
50 >Синтаксическая подсветка позволяет отображать текст в редакторе разными цветами и стилями, таким образом отделяя одни синтаксические понятия от других. Например, в исходном тексте программы можно ключевые слова выделить полужирным шрифтом, а типы данных и комментарии отображать разными цветами, выделяя их из основного текста. Это улучшает читаемость документа и повышает продуктивность работы автора.</para>
54 ><imagedata format="PNG" fileref="highlighted.png"/></imageobject>
57 >Функция Perl, отображенная с использованием синтаксической подсветки.</phrase
61 >Функция Perl, отображенная с использованием синтаксической подсветки.</para>
67 ><imagedata format="PNG" fileref="unhighlighted.png"/></imageobject>
70 >Та же самая функция, но без подсветки.</phrase
74 >Та же самая функция, но без подсветки.</para
79 >Какой из примеров легче читать?</para>
82 >&kate; имеет гибкую, легко настраиваемую систему синтаксической подсветки, в стандартную поставку редактора входят правила подсветки синтаксиса для большого числа языков программирования, разметки и других текстовых форматов. Все определения хранятся в простых текстовых файлах в формате &XML;, поэтому вы можете свободно создавать собственные правила.</para>
85 >При открытии файла &kate; автоматически подбирает правила подсветки, основываясь на &MIME;-типе (который, в свою очередь, определяется расширением файла) или содержании файла, если расширения нет. Если &kate; неправильно определил тип файла, выберите нужный режим подсветки вручную в меню <menuchoice
89 >Режим подсветки</guisubmenu
94 >Вы можете настроить стили и цвета доступных синтаксических определений на вкладке <link linkend="config-dialog-editor-appearance"
96 >диалога <link linkend="config-dialog"
97 >Настройка &kate;</link
98 > , а соответствующие им &MIME;-типы - на вкладке <link linkend="config-dialog-editor-highlighting"
104 >Синтаксическая подсветка улучшает читаемость корректно оформленного текста, но не факт, что текст некорректен, если он неправильно отображается системой подсветки. Синтаксическая разметка текста - достаточно сложный процесс, сложность которого зависит от формата файла, поэтому авторы синтаксических определений считают удачей, если 98% текста отображается корректно, но не стоит забывать об оставшихся 2%.</para>
109 >На сайте &kate; вы можете загрузить обновлённые или дополнительные правила синтаксической подсветки. Для этого нужно щёлкнуть на кнопке <guibutton
110 >Загрузить</guibutton
111 > на вкладке <link linkend="config-dialog-editor-highlighting"
113 > диалога <link linkend="config-dialog"
114 >Настройка &kate;</link
120 <sect1 id="katehighlight-system">
123 >Система синтаксической подсветки &kate;</title>
126 >В этом разделе подробно рассматривается механизм синтаксической подсветки &kate;. Прочитав его, вы сможете изменять существующие или создавать свои синтаксические определения.</para>
128 <sect2 id="katehighlight-howitworks">
131 >Механизм работы</title>
134 >Когда вы открываете файл, первое, что делает &kate; - определяет, какое синтаксическое определение использовать для него. При чтении и наборе система подсветки анализирует текст в редакторе, используя правила, указанные в синтаксическом определении, и помечает границы контекстов и стилей.</para>
137 >При вводе система динамически анализирует текст, поэтому, если вы удалите символ, который был помечен как начало или конец контекста, стиль окружающего текста автоматически изменится.</para>
140 >Синтаксические определения &kate; хранятся в &XML;-файлах. Они содержат: <itemizedlist>
143 >Правила определения роли текста, организованного в контекстные блоки</para
147 >Списки ключевых слов</para
151 >Определения стилей</para
157 >Система подсветки анализирует текст последовательно от начала до конца. Указатель анализатора перемещается от символа к символу, проверяя текст на соответствие правилам и помечая границы контекстов. Правила применяются к текущей строке в порядке их объявления, и при соответствии к ней применяется контекст, указанный в правиле. После этого указатель смещается на конец области соответствия и начинается новый цикл проверки правил, принадлежащих установленному контексту.</para>
161 <sect2 id="highlight-system-rules">
166 >Правила - это сердце системы подсветки. Правило может быть строкой, символом или <link linkend="regular-expressions"
167 >регулярным выражением</link
168 >, с которым сравнивается текст документа. Оно содержит информацию о стиле, который будет применен к тексту, если последний соответствует правилу. Оно может переключить текущий контекст системы на явно указанный или предыдущий контекст.</para>
171 >Правила организованы в контекстные группы. Контекстная группа используется для определения главных понятий в формате, например, строка, заключенная в двойные кавычки, или блок комментария в исходном тексте программы. Такая организация правил позволяет предотвратить проверку правил, неприменимых к текущему контексту (правил из других контекстов). Эта структура делает систему подсветки более гибкой, позволяя определять одинаковые правила в разных контекстах, что делает возможным одинаковые последовательности символов отображать разными стилями в зависимости от контекста, в котором они находятся. </para>
174 >Контексты могут образовываться динамически, чтобы сделать возможным использование правил, справедливых для данного момента.</para>
178 <sect2 id="highlight-context-styles-keywords">
180 >Стили контекстов и ключевые слова</title>
183 >В некоторых языках программирования целые и вещественные числа трактуются компилятором по-разному (компилятор - это программа, которая преобразует исходный текст программы в двоичный исполняемый файл). Синтаксис языка может определять символы, имеющие специальное значение, если они находятся в строке, заключенной в кавычки. В этих случаях есть смысл выделять их в тексте для более удобного чтения. Иногда бывает полезно выделять символы, не имеющие специального значения - это тоже под силу системе синтаксической подсветки &kate;.</para>
186 >Синтаксическое определение может содержать столько стилей, сколько нужно для данного формата.</para>
189 >Во многих форматах существуют списки слов, имеющих специальное значение. Например, в языках программирования такими словами будут являться управляющие операторы, названия типов данных и встроенные функции. Это концептуальные слова, поскольку они определяют саму суть синтаксиса. Система синтаксической подсветки &kate; использует списки подобных слов, чтобы подчеркнуть концептуальные элементы формата.</para>
193 <sect2 id="kate-highlight-system-default-styles">
195 >Стили по умолчанию</title>
198 >Если вы откроете файл исходного кода на C++, на &Java; или документ <acronym
200 >, то увидите, что разные форматы отображаются в одних и тех же цветах. Дело в том, что &kate; содержит предустановленный набор стандартных стилей. Синтаксические определения по возможности используют этот набор.</para>
203 >Это позволяет подобным образом отображать похожие концепции в различных форматах. Например, комментарии есть почти во всех языках программирования, разметки и скриптах.</para>
207 >Каждый стиль в синтаксическом определении основывается на одном из стандартных стилей. Поэтому, если вы часто используете какой-то формат с большим количеством стилей, следует проверить его конфигурацию на предмет их совпадения. Приведём небольшой пример. В &kate; определен всего один стандартный стиль для отображения строковых констант, но в языке программирования Perl существует два вида строк. Согласитесь, было бы гораздо лучше отображать их по разному - вы заходите в диалоговое окно настройки &kate; и изменяете соответствующие стили. Все <link linkend="kate-highlight-default-styles"
208 >доступные стандартные стили</link
209 > будут рассмотрены позже.</para>
216 <sect1 id="katehighlight-xml-format">
218 >&XML;-формат определения синтаксической подсветки</title>
225 >В этом разделе вы познакомитесь с &XML;-форматом определения синтаксической подсветки. Вначале, на небольшом примере, будут кратко объяснены главные компоненты и их значение, затем мы более подробно остановимся на правилах подсветки.</para>
228 >Формальное определение (<acronym
230 >) находится в файле <filename
231 >language.dtd</filename
232 >, в каталоге <filename
235 >/share/apps/katepart/syntax</filename
240 >Основные разделы файла определения синтаксической подсветки &kate;</title>
244 >В заголовке файла подсветки указаны версия XML и тип документа:</term>
247 ><?xml version="1.0" encoding="UTF-8"?>
248 <!DOCTYPE language SYSTEM "language.dtd">
255 >Главная часть файла определений - элемент <userinput
257 >. Доступные атрибуты:</term>
261 >Необходимые атрибуты:</para>
265 > определяет название языка. Впоследствии оно появляется во всех меню и диалогах.</para>
269 > указывает категорию.</para>
272 >extensions</userinput
273 > определяет расширения файлов, вроде "*.cpp;*.h"</para>
276 >Дополнительные атрибуты:</para>
280 > связывает файл с определенным типом &MIME;.</para>
284 > указывает текущую версию файла определений.</para>
287 >kateversion</userinput
288 > указывает новейшую из поддерживаемых версий &kate;.</para>
291 >casesensitive</userinput
292 > определяет чувствительность ключевых слов к регистру.</para>
296 > определяет приоритет в случае использования разных правил подсветки. Действует правило с высшим приоритетом.</para>
300 > содержит имя и email-адрес автора.</para>
304 > содержит лицензию, обычно LGPL, Artistic, GPL и т.п.</para>
308 > определяет, будет ли отображаться название в меню &kate;.</para>
310 >Итак, следующая строка может быть примерно такой:</para>
312 ><language name="C++" version="1.00" kateversion="2.4" section="Sources" extensions="*.cpp;*.h" />
320 >Следующий элемент - <userinput
321 >highlighting</userinput
322 >, состоящий из необязательного <userinput
324 > и обязательных - <userinput
327 >itemDatas</userinput
333 > содержит список ключевых слов. В нашем случае это <emphasis
337 >.Списков можете добавить, сколько хотите.</para>
341 > содержит все контексты. По умолчанию, подсветка начинается с первого контекста. В контексте <emphasis
342 >Normal Text</emphasis
343 > есть два правила, одно из которых проверяет наличие в тексте <emphasis
345 >, соответствующих списку ключевых слов, другое определяет наличие кавычек и переключает контекст к <emphasis
346 >строковому</emphasis
347 > типу. Подробнее правила описаны в следующей главе.</para>
350 >itemDatas</userinput
351 > содержит сведения о цветах и стилях, применяющихся в контекстах и правилах. В нашем примере <userinput
353 > использует контексты <emphasis
354 >Normal Text</emphasis
361 ><highlighting>
362 <list name="somename">
363 <item> class </item>
364 <item> const </item>
367 <context attribute="Normal Text" lineEndContext="#pop" name="Normal Text" >
368 <keyword attribute="Keyword" context="#stay" String="somename" />
369 <DetectChar attribute="String" context="string" char="&quot;" />
371 <context attribute="String" lineEndContext="#stay" name="string" >
372 <DetectChar attribute="String" context="#pop" char="&quot;" />
376 <itemData name="Normal Text" defStyleNum="dsNormal" />
377 <itemData name="Keyword" defStyleNum="dsKeyword" />
378 <itemData name="String" defStyleNum="dsString" />
380 </highlighting>
387 > Последня часть файла определения синтаксической подсветки - необязательный раздел <userinput
389 >. Здесь могут содержаться сведения о ключевых словах, сворачивании блоков кода, комментариях и отступах.</term>
395 > определяет, какой строкой вводится однострочный комментарий. Можно пользоваться также многострочными комментариями, используя <emphasis
397 > с дополнительным атрибутом <emphasis
399 >. Это используется тогда, когда пользователь нажимает комбинацию клавиш, назначенную для действия <emphasis
400 >закомментировать/раскомментировать</emphasis
405 > определяет чувствительность ключевых слов к регистру. Остальные атрибуты рассмотрим позднее.</para>
409 <comment name="singleLine" start="#"/>
411 <keywords casesensitive="1"/>
423 <sect2 id="kate-highlight-sections">
425 >Более подробно о разделах</title>
427 >В этой части указаны все возможные атрибуты для контекстов, itemDatas, ключевых слов, комментариев, сворачивания кодов и отступов.</para>
434 > относится к группе <userinput
436 >. Контекстом определяются некоторые особые правила (например, что происходит при достижении подсвеченной структурой конца строки). Доступные атрибуты:</term>
443 > - название контекста. Правила используют это название для переключения на указанный контекст.</para>
446 >lineEndContext</userinput
447 > определяет, на какой контекст подсвеченная структура переключается при достижении конца строки. Это может быть название другого контекста, <userinput
449 >, если контекст не меняется (т.е. не делать ничего) или <userinput
451 > для выхода из контекста. Например, набор <userinput
452 >#pop#pop#pop</userinput
453 > приведет к троекратному выходу из контекста.</para>
456 >lineBeginContext</userinput
457 > определяет контекст при достижении начала строки. По умолчанию: #stay.</para>
460 >fallthrough</userinput
461 > определяет поведение в случае переключения подсвеченной структуры на контекст, указанный в fallthroughContext, если не найдено соответствующее правило. По умолчанию: <emphasis
466 >fallthroughContext</userinput
467 > указывает следующий контекст, если не найдено соответствующее правило.</para>
471 > имеет значение <emphasis
473 >, то контекст запоминает строки/метки-заполнители, сохранённые в динамических правилах. Это необходимо, например, для текущих документов. По умолчанию: <emphasis
484 > принадлежит группе <userinput
485 >itemDatas</userinput
486 >. Он определяет стиль и цвет шрифта, их можно устанавливать самому в тех случаях, когда это необходимо. И все же, рекомендуется придерживаться стандартных стилей, чтобы помочь пользователю свободно ориентироваться в любом языке . Название атрибута (name) и defStyleNum обязательны, остальные нет. Доступные атрибуты:</term>
492 > даёт название itemData. Контексты и правила будут использовать это название при обращении к itemData в своих атрибутах <emphasis
497 >defStyleNum</userinput
498 > определяет стиль, используемый по умолчанию. Доступные стандартные стили будут детально описаны ниже.</para>
502 > определяет цвет. Правильные форматы '#rrggbb' или '#rgb'.</para>
506 > определяет цвет выделенного текста.</para>
510 > имеет значение <emphasis
512 >, шрифт будет курсивным.</para>
516 > имеет значение <emphasis
518 >, шрифт будет полужирным.</para>
521 >underline</userinput
522 > имеет значение <emphasis
524 >, текст будет подчёркнут.</para>
527 >strikeout</userinput
528 > имеет значение <emphasis
530 >, текст будет зачёркнут.</para>
539 > в группе <userinput
541 > определяет свойства ключевых слов. Доступные атрибуты:</term>
546 >casesensitive</userinput
547 > может быть <emphasis
553 >, все ключевые слова будут проверяться на соответствие с учетом регистра</para>
556 >weakDeliminator</userinput
557 > - это группа знаков, которые не могут разделять слова. Например, точка <userinput
559 > - разделитель слов. Если ключевое слово в <userinput
561 > содержит точку, оно будет использовано по назначению только, если точка будет определена как "нетвердый разделитель" (weak delimiter).</para>
564 >additionalDeliminator</userinput
565 > определяют дополнительные разделители.</para>
568 >wordWrapDeliminator</userinput
569 > определяют символы, после которых может происходить перевод строки.</para>
571 >По умолчанию разделителями слов и строк являются символы <userinput
572 >.():!+,-<=>%&*/;?[]^{|}~\</userinput
573 >, пробел (<userinput
575 >) и табуляция (<userinput
586 > в группе <userinput
588 > определяет свойства комментариев, которые используются в меню<menuchoice
592 >Закомментировать</guimenuitem
598 >Раскомментировать</guimenuitem
600 >. Доступные атрибуты:</term>
606 > может быть <emphasis
607 >singleLine</emphasis
610 >. Если выбрать <emphasis
612 >, то потребуются атрибуты <emphasis
620 > указывает строку начала комментария. В C++ это может быть "/*".</para>
624 > указывает строку окончания комментария. В C++ это может быть "*/".</para>
628 > должно быть названием сворачиваемого многострочного комментария. Допустим, если в ваших правилах указано <emphasis
629 >beginRegion="Comment"</emphasis
631 >endRegion="Comment"</emphasis
632 >, вы должны использовать <emphasis
633 >region="Comment"</emphasis
634 >. В этом случае раскомментирование будет действовать, даже если не будет выделен весь текст многострочного комментария. Достаточно будет просто поместить курсор в его пределы.</para>
643 > в группе <userinput
645 > определяет свойства сворачивания кода. Доступные атрибуты:</term>
650 >indentationsensitive</userinput
651 > имеет значение <emphasis
653 >, то маркёры сворачивания кода будут располагаться с учетом отступов, как в языке сценариев Python. Чаще всего в этом нет необходимости, поэтому по умолчанию этот параметр определен как <emphasis
663 >indentation</userinput
664 > в группе <userinput
666 > определяет формат отступов, однако мы настоятельно рекомендуем не менять этот элемент, так как отступы обычно определяются типом файла или добавлением режимной строки в текстовый файл. Если вы всё-таки укажете способ отступа, он может оказаться навязанным пользователю, которому совсем не нужен. Доступные атрибуты:</term>
672 > - название формата отступов. Доступные форматы: <emphasis
673 >normal, cstyle, csands, xml, python</emphasis
686 <sect2 id="kate-highlight-default-styles">
688 >Стандартные стили</title>
690 >Стандартные стили уже были кратко <link linkend="kate-highlight-system-default-styles"
692 >: Стандартные стили предопределяют настройки цветов и шрифтов.</para>
696 >Здесь приведен только список доступных стандартных стилей:</term>
701 >, для нормального текста.</para>
704 >dsKeyword</userinput
705 >, для ключевых слов.</para>
708 >dsDataType</userinput
709 >, для типов данных.</para>
713 >, для десятичных значений.</para>
717 >, для значений с основанием, отличным от10.</para>
721 >, для значений с плавающей точкой.</para>
725 >, для символов.</para>
732 >dsComment</userinput
733 >, для комментариев.</para>
737 >, для всего остального.</para>
741 >, для вывода предупреждений.</para>
744 >dsFunction</userinput
745 >, для вызова функций.</para>
748 >dsRegionMarker</userinput
749 >, для маркёров участков.</para>
753 >, для подсветки ошибок и неверного синтаксиса.</para>
762 <sect1 id="kate-highlight-rules-detailled">
764 >Синтаксические правила</title>
767 >В этом разделе описываются синтаксические правила.</para>
770 >При анализе строки каждое правило может <quote
772 > на проверку любое количество символов (даже ноль). Если правило подходит, к соответствующим символам применяется стиль или <emphasis
774 >, определённый в правиле. Применяемое правило также может запросить переключение текущего контекста.</para>
777 >Правило выглядит примерно так:</para>
780 ><RuleName attribute="(identifier)" context="(identifier)" [rule specific attributes] /></programlisting>
785 > указывает, какой стиль применить к символам, соответствующим правилу. Параметр <emphasis
787 > определяет контекст, который будет установлен в случае применения правила.</para>
792 > может принимать следующие значения:</para>
798 >Идентификатор</emphasis
799 >, т.е. название контекста.</para>
805 > предписывает системе подсветки не менять текущий контекст (<userinput
807 >) или вернуться к предыдущему контексту (<userinput
811 >Чтобы вернуться назад на несколько контекстов, повторите нужное количество раз ключевое слово #pop: <userinput
812 >#pop#pop#pop</userinput
818 >Некоторые правила могут иметь <emphasis
819 >дочерние правила</emphasis
820 >, которые проверяются только в том случае, если текст соответствует родительскому правилу. Всей совпавшей строке будут присвоены атрибуты, определенные в родительском правиле. Вот пример правила с дочерними правилами:</para>
823 ><RuleName (attributes)>
824 <ChildRuleName (attributes) />
831 >Параметры конкретных видов правил описаны в следующих разделах.</para>
836 >Общие атрибуты</title>
838 >У любого правила есть следующие атрибуты, <userinput
839 >(common attributes)</userinput
840 >, доступные всегда. <emphasis
844 > обязательны, остальные - нет. </para>
850 >: Атрибут, описывающий определённые <emphasis
858 >: Определяет контекст, на который происходит переключение в случае соответствия правилу.</para>
863 >beginRegion</emphasis
864 >: Начало сворачиваемого блока кода. По умолчанию: не установлен (unset).</para>
870 >: Окончание сворачиваемого блока кода. По умолчанию: не установлен (unset).</para>
876 > имеет значение <emphasis
878 >, то система подсветки больше не будет обрабатывать соответствия. По умолчанию: <emphasis
885 >firstNonSpace</emphasis
886 >: Соответствие, только если строка начинается не с пробела. По умолчанию: <emphasis
894 >: Соответствие, только если соответствует номер столбца. По умолчанию: не установлено (unset).</para>
900 >Динамические правила</title>
902 >У некоторых правил есть необязательный атрибут <userinput
904 >, имеющий логическое значение (по умолчанию <emphasis
906 >). Если dynamic установить <emphasis
908 >, то правило может использовать метки-заполнители, заменяющие текст, соответствующий правилу <emphasis
909 >регулярного выражения</emphasis
910 >, переключенного к текущему контексту по своим атрибутам <userinput
914 >. В атрибуте <userinput
916 > метка-заполнитель <replaceable
918 > (где N - цифра) будет заменена номером <replaceable
920 > найденного регулярного выражения. В атрибуте <userinput
922 > метка-заполнитель должна быть цифрой <replaceable
924 >, и будет заменена первым символом <replaceable
926 > найденного регулярного выражения. Чтобы правило могло использовать эти атрибуты, оно должно содержать параметр <emphasis
934 >: логический атрибут <emphasis
935 >(true|false)</emphasis
940 <sect2 id="highlighting-rules-in-detail">
942 >Более подробно о правилах</title>
950 >Проверка на совпадение с одним определенным символом. Используется, например, для определения завершающего символа строки, заключённой в кавычки.</para>
952 ><DetectChar char="(character)" (common attributes) (dynamic) /></programlisting>
956 > определяет символ.</para>
965 >Проверка на совпадение с двумя символами в заданном порядке.</para>
967 ><Detect2Chars char="(character)" char1="(character)" (common attributes) (dynamic) /></programlisting>
971 > определяет первый символ для проверки, <userinput
982 >Проверка на совпадение с любым символом из заданного набора.</para>
984 ><AnyChar String="(string)" (common attributes) /></programlisting>
988 > содержит набор допустимых символов.</para>
997 >Проверка на совпадение со строкой.</para>
999 ><StringDetect String="(string)" [insensitive="true|false"] (common attributes) (dynamic) /></programlisting>
1001 >Параметр <userinput
1003 > должен содержать строку, которую нужно проверить на соответствие. Атрибут <userinput
1004 >insensitive</userinput
1005 > по умолчанию имеет значение <userinput
1007 >, он влияет на сравнение строк. Если этот параметр установлен <userinput
1009 >, функция сравнения не будет учитывать регистр символов.</para>
1018 >Проверка на совпадение с регулярным выражением.</para>
1020 ><RegExpr String="(string)" [insensitive="true|false"] [minimal="true|false"] (common attributes) (dynamic) /></programlisting>
1022 >Параметр <userinput
1024 > определяет регулярное выражение.</para>
1027 >insensitive</userinput
1028 > имеет то же значение, что и в предыдущем правиле; по умолчанию установлен <userinput
1032 >Параметр <userinput
1034 > по умолчанию имеет значение <userinput
1036 > и передаётся функции обработки регулярных выражений.</para>
1038 >Символ перевода каретки (<literal
1040 >) в начале регулярного выражения говорит о том, что данное правило будет применяться только к тем цепочкам символов, которые начинаются с новой строки.</para>
1042 >Более подробно регулярные выражения рассматриваются в разделе <link linkend="regular-expressions"
1044 >Регулярные выражения</quote
1055 >Проверка на ключевое слово из указанного списка.</para>
1057 ><keyword String="(list name)" (common attributes) /></programlisting>
1059 >В параметре <userinput
1061 > нужно указать название списка ключевых слов. Этот список должен существовать.</para>
1070 >Проверка на целое число.</para>
1073 ><Int (common attributes) (dynamic) /></programlisting
1076 >Это правило не имеет своих параметров. Дочерние правила обычно используются для определения комбинаций символов <userinput
1080 > после числа, которые конкретизируют тип целой константы в коде программы. Вообще, все правила могут быть использованы в качестве дочерних, хотя <acronym
1082 > разрешает использовать в качестве дочернего только правило <userinput
1083 >StringDetect</userinput
1086 >Пример проверки на целые числа, следующие за символом 'L'. <programlisting
1087 ><Int attribute="Decimal" context="#stay" >
1088 <StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/>
1101 >Проверка на число с плавающей точкой.</para>
1104 ><Float (common attributes) /></programlisting
1107 >У этого правила нет особых атрибутов. <userinput
1109 > можно использовать как дочернее, обычно оно используется для проверки комбинаций. Для примера смотрите правило <userinput
1120 >Проверка на восьмеричное число (должно начинаться с нуля).</para>
1123 ><HlCOct (common attributes) /></programlisting
1126 >У этого правила нет особых атрибутов.</para>
1135 >Проверка на шестнадцатеричное число (должно начинаться с символов <quote
1140 ><HlCHex (common attributes) /></programlisting
1143 >У этого правила нет особых атрибутов.</para>
1149 >HlCStringChar</term>
1152 >Проверка на управляющий символ.</para>
1155 ><HlCStringChar (common attributes) /></programlisting
1158 >У этого правила нет особых атрибутов.</para>
1161 >Проверка на специальное представление символов, которое используется в языках программирования, например, <userinput
1163 > (переход на новую строку) или <userinput
1165 > (символ табуляции).</para>
1168 >Следующие символы соответствуют правилу, если они вводятся после обратной черты (<literal
1171 >abefnrtv"'?\</userinput
1172 >. Также будут соответствовать шестнадцатеричные и восьмеричные числа, предварённые обратной чертой (например, <userinput
1186 >Проверка на символ C.</para>
1189 ><HlCChar (common attributes) /></programlisting
1192 >У этого правила нет особых атрибутов.</para>
1195 >Правило находит символы C, заключенные в одинарные кавычки (например, <userinput
1197 >). Внутри одинарных кавычек может быть как одиночный символ, так и управляющая последовательность, более подробно ознакомиться с которыми можно в описании правила HlCStringChar.</para>
1207 >Проверка на строку, имеющую заданные начальный и конечный символы.</para>
1209 ><RangeDetect char="(character)" char1="(character)" (common attributes) /></programlisting>
1213 > определяет символ, с которого начинается строка, а <userinput
1215 > - которым она заканчивается.</para>
1217 >Это правило может быть использовано для поиска небольших строк, заключенных в кавычки, но, поскольку при проверке правила система подсветки работает с одной строкой, данное правило не сможет определить строку, разбитую символами перевода.</para>
1223 >LineContinue</term>
1226 >Проверка на символ перевода строки.</para>
1228 ><LineContinue (common attributes) /></programlisting>
1230 >У этого правила нет особых атрибутов.</para>
1232 >Это правило может быть удобно для переключения контекста в конце строки, если последним знаком будет обратная черта (<userinput
1234 >). Это необходимо, например, в языках C/C++ для продолжения макросов и строк.</para>
1240 >IncludeRules</term>
1243 >Включение правил из другого контекста или языка/файла.</para>
1245 ><IncludeRules context="contextlink" [includeAttrib="true|false"] /></programlisting>
1250 > определяет контекст, из которого берётся правило.</para>
1252 >Если это простая строка, то включаются все правила из другого контекста, например: <programlisting
1253 ><IncludeRules context="anotherContext" /></programlisting
1257 >Если строка начинается с <userinput
1259 >, то система подсветки найдёт описание для другого языка с указанным названием, например: <programlisting
1260 ><IncludeRules context="##C++" /></programlisting
1264 >includeAttrib</userinput
1265 > выставить <emphasis
1267 >, атрибут назначения должен быть таким же, как атрибут источника. Это необходимо, например, при вводе комментариев, если текст, соответствующий включаемому контексту, имеет иную подсветку, чем основной контекст. </para>
1274 >DetectSpaces</term>
1277 >Поиск пробелов.</para>
1279 ><DetectSpaces (common attributes) /></programlisting>
1282 >У этого правила нет особых атрибутов.</para>
1284 >Используйте это правило, если вы уверены, что в тексте есть несколько пробелов подряд, например в начале строк с отступом. Это правило поможет пропустить все пробелы разом, вместо проверки каждого из них по нескольким параметрам.</para>
1291 >DetectIdentifier</term>
1294 >Поиск строк идентификаторов (таких как регулярные выражения: [a-zA-Z_][a-zA-Z0-9_]*).</para>
1296 ><DetectIdentifier (common attributes) /></programlisting>
1299 >У этого правила нет особых атрибутов.</para>
1301 >Используйте это правило, чтобы пропустить все буквенные символы разом, вместо проверки каждого из них по нескольким параметрам.</para>
1310 >Подсказки & Советы</title>
1314 >Усвоив принцип действия переключения контекста, вы без труда сможете написать своё определение подсветки. Подумайте о том, в какой ситуации какое правило следует применить. Регулярные выражения - мощное средство, но, по сравнению с другими правилами, очень медленное. Поэтому стоит воспользоваться следующими советами. </para>
1318 >Проверяя на соответствие только пару символов, воспользуйтесь <userinput
1319 >Detect2Chars</userinput
1321 >StringDetect</userinput
1322 >. То же относится к <userinput
1323 >DetectChar</userinput
1328 >Регулярные выражения несложны в использовании, но очень часто можно найти более быстрый способ. Допустим, вы ищете символ <userinput
1330 >, это первый символ строки. Решение с регулярным выражением будет выглядеть примерно так: <programlisting
1331 ><RegExpr attribute="Macro" context="macro" String="^\s*#" /></programlisting
1332 >. Этой же цели можно достичь значительно быстрее: <programlisting
1333 ><DetectChar attribute="Macro" context="macro" char="#" firstNonSpace="true" /></programlisting
1334 >. Для поиска регулярного выражения <userinput
1336 > можно применить <userinput
1337 >DetectChar</userinput
1338 > с атрибутом <userinput
1339 >column="0"</userinput
1340 >. Отсчет для атрибута <userinput
1342 > идет посимвольно, поэтому знак табуляции для него - всего один символ. </para>
1346 >Можно переключать контексты без специальных символов. Допустим, вы хотите переключить контекст при достижении строки <userinput
1348 >, но в новом контексте хотите продолжить обработку этой строки. Можно воспользоваться нижеследующим правилом, а атрибут <userinput
1349 >lookAhead</userinput
1350 > заставит систему подсветки сохранить найденную строку для нового контекста. <programlisting
1351 ><Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" lookAhead="true" /></programlisting>
1356 >Если известно, что в тексте много пробелов, воспользуйтесь <userinput
1357 >DetectSpaces</userinput
1362 >Пользуйтесь <userinput
1363 >DetectIdentifier</userinput
1364 > вместо регулярного выражения <userinput
1365 >'[a-zA-Z_]\w*'</userinput
1370 >Старайтесь использовать стандартные стили, это удобно для пользователя.</para>
1374 >Заглянув в другие XML-файлы, вы узнаете много нового о работе с правилами.</para>
1378 >Проверить правильность XML-файла можно командой <command
1379 >xmllint --dtdvalid language.dtd mySyntax.xml</command
1384 >Если сложное регулярное выражение встречается часто, воспользуйтесь <emphasis
1388 ><?xml version="1.0" encoding="UTF-8"?>
1389 <!DOCTYPE language SYSTEM "language.dtd"
1391 <!ENTITY myref "[A-Za-z_:][\w.:_-]*">
1395 >Теперь вместо регулярного выражения можно использовать <emphasis
1396 >&myref;</emphasis