~ubuntu-branches/ubuntu/vivid/kde-l10n-ru/vivid-proposed

« back to all changes in this revision

Viewing changes to docs/applications/kate/highlighting.docbook

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2015-01-21 12:33:46 UTC
  • mfrom: (1.12.49)
  • Revision ID: package-import@ubuntu.com-20150121123346-vq9rr20o69s48yrm
Tags: 4:14.12.2-0ubuntu1
* New upstream release, first version from KDE Applications
* Revert install to /usr/share/locale/
* Add debian/overlapping files to remove files that are in plasma5

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<appendix id="highlight">
2
 
<appendixinfo>
3
 
<authorgroup>
4
 
<author
5
 
><personname
6
 
><firstname
7
 
></firstname
8
 
></personname
9
 
></author>
10
 
<othercredit role="translator"
11
 
><firstname
12
 
>Андрей</firstname
13
 
><surname
14
 
>Балагута</surname
15
 
><affiliation
16
 
><address
17
 
><email
18
 
>uj2@mail.ru</email
19
 
></address
20
 
></affiliation
21
 
><contrib
22
 
>Перевод на русский</contrib
23
 
></othercredit
24
 
><othercredit role="translator"
25
 
><firstname
26
 
>Алексей</firstname
27
 
><surname
28
 
>Опарин</surname
29
 
><affiliation
30
 
><address
31
 
><email
32
 
>opaleksej@yandex.ru</email
33
 
></address
34
 
></affiliation
35
 
><contrib
36
 
>Перевод на русский</contrib
37
 
></othercredit
38
 
39
 
</authorgroup>
40
 
</appendixinfo>
41
 
<title
42
 
>Подсветка синтаксиса</title>
43
 
 
44
 
<sect1 id="highlight-overview">
45
 
 
46
 
<title
47
 
>Обзор</title>
48
 
 
49
 
<para
50
 
>Синтаксическая подсветка позволяет отображать текст в редакторе разными цветами и стилями, таким образом отделяя одни синтаксические понятия от других. Например, в исходном тексте программы можно ключевые слова выделить полужирным шрифтом, а типы данных и комментарии отображать разными цветами, выделяя их из основного текста. Это улучшает читаемость документа и повышает продуктивность работы автора.</para>
51
 
 
52
 
<mediaobject>
53
 
<imageobject
54
 
><imagedata format="PNG" fileref="highlighted.png"/></imageobject>
55
 
<textobject
56
 
><phrase
57
 
>Функция Perl, отображенная с использованием синтаксической подсветки.</phrase
58
 
></textobject>
59
 
<caption
60
 
><para
61
 
>Функция Perl, отображенная с использованием синтаксической подсветки.</para>
62
 
</caption>
63
 
</mediaobject>
64
 
 
65
 
<mediaobject>
66
 
<imageobject
67
 
><imagedata format="PNG" fileref="unhighlighted.png"/></imageobject>
68
 
<textobject
69
 
><phrase
70
 
>Та же самая функция, но без подсветки.</phrase
71
 
></textobject>
72
 
<caption
73
 
><para
74
 
>Та же самая функция, но без подсветки.</para
75
 
></caption>
76
 
</mediaobject>
77
 
 
78
 
<para
79
 
>Какой из примеров легче читать?</para>
80
 
 
81
 
<para
82
 
>&kate; имеет гибкую, легко настраиваемую систему синтаксической подсветки, в стандартную поставку редактора входят правила подсветки синтаксиса для большого числа языков программирования, разметки и других текстовых форматов. Все определения хранятся в простых текстовых файлах в формате &XML;, поэтому вы можете свободно создавать собственные правила.</para>
83
 
 
84
 
<para
85
 
>При открытии файла &kate; автоматически подбирает правила подсветки, основываясь на &MIME;-типе (который, в свою очередь, определяется расширением файла) или содержании файла, если расширения нет. Если &kate; неправильно определил тип файла, выберите нужный режим подсветки вручную в меню <menuchoice
86
 
><guimenu
87
 
>Документ</guimenu
88
 
><guisubmenu
89
 
>Режим подсветки</guisubmenu
90
 
></menuchoice
91
 
>.</para>
92
 
 
93
 
<para
94
 
>Вы можете настроить стили и цвета доступных синтаксических определений на вкладке <link linkend="config-dialog-editor-appearance"
95
 
>Схемы</link
96
 
>диалога <link linkend="config-dialog"
97
 
>Настройка &kate;</link
98
 
> , а соответствующие им &MIME;-типы - на вкладке <link linkend="config-dialog-editor-highlighting"
99
 
>Подсветка</link
100
 
>.</para>
101
 
 
102
 
<note>
103
 
<para
104
 
>Синтаксическая подсветка улучшает читаемость корректно оформленного текста, но не факт, что текст некорректен, если он неправильно отображается системой подсветки. Синтаксическая разметка текста - достаточно сложный процесс, сложность которого зависит от формата файла, поэтому авторы синтаксических определений считают удачей, если 98% текста отображается корректно, но не стоит забывать об оставшихся 2%.</para>
105
 
</note>
106
 
 
107
 
<tip>
108
 
<para
109
 
>На сайте &kate; вы можете загрузить обновлённые или дополнительные правила синтаксической подсветки. Для этого нужно щёлкнуть на кнопке <guibutton
110
 
>Загрузить</guibutton
111
 
> на вкладке <link linkend="config-dialog-editor-highlighting"
112
 
>Подсветка</link
113
 
> диалога <link linkend="config-dialog"
114
 
>Настройка &kate;</link
115
 
>.</para>
116
 
</tip>
117
 
 
118
 
</sect1>
119
 
 
120
 
<sect1 id="katehighlight-system">
121
 
 
122
 
<title
123
 
>Система синтаксической подсветки &kate;</title>
124
 
 
125
 
<para
126
 
>В этом разделе подробно рассматривается механизм синтаксической подсветки &kate;. Прочитав его, вы сможете изменять существующие или создавать свои синтаксические определения.</para>
127
 
 
128
 
<sect2 id="katehighlight-howitworks">
129
 
 
130
 
<title
131
 
>Механизм работы</title>
132
 
 
133
 
<para
134
 
>Когда вы открываете файл, первое, что делает &kate; - определяет, какое синтаксическое определение использовать для него. При чтении и наборе система подсветки анализирует текст в редакторе, используя правила, указанные в синтаксическом определении, и помечает границы контекстов и стилей.</para>
135
 
 
136
 
<para
137
 
>При вводе система динамически анализирует текст, поэтому, если вы удалите символ, который был помечен как начало или конец контекста, стиль окружающего текста автоматически изменится.</para>
138
 
 
139
 
<para
140
 
>Синтаксические определения &kate; хранятся в &XML;-файлах. Они содержат: <itemizedlist>
141
 
<listitem
142
 
><para
143
 
>Правила определения роли текста, организованного в контекстные блоки</para
144
 
></listitem>
145
 
<listitem
146
 
><para
147
 
>Списки ключевых слов</para
148
 
></listitem>
149
 
<listitem
150
 
><para
151
 
>Определения стилей</para
152
 
></listitem>
153
 
</itemizedlist>
154
 
</para>
155
 
 
156
 
<para
157
 
>Система подсветки анализирует текст последовательно от начала до конца. Указатель анализатора перемещается от символа к символу, проверяя текст на соответствие правилам и помечая границы контекстов. Правила применяются к текущей строке в порядке их объявления, и при соответствии к ней применяется контекст, указанный в правиле. После этого указатель смещается на конец области соответствия и начинается новый цикл проверки правил, принадлежащих установленному контексту.</para>
158
 
 
159
 
</sect2>
160
 
 
161
 
<sect2 id="highlight-system-rules">
162
 
<title
163
 
>Правила</title>
164
 
 
165
 
<para
166
 
>Правила - это сердце системы подсветки. Правило может быть строкой, символом или <link linkend="regular-expressions"
167
 
>регулярным выражением</link
168
 
>, с которым сравнивается текст документа. Оно содержит информацию о стиле, который будет применен к тексту, если последний соответствует правилу. Оно может переключить текущий контекст системы на явно указанный или предыдущий контекст.</para>
169
 
 
170
 
<para
171
 
>Правила организованы в контекстные группы. Контекстная группа используется для определения главных понятий в формате, например, строка, заключенная в двойные кавычки, или блок комментария в исходном тексте программы. Такая организация правил позволяет предотвратить проверку правил, неприменимых к текущему контексту (правил из других контекстов). Эта структура делает систему подсветки более гибкой, позволяя определять одинаковые правила в разных контекстах, что делает возможным одинаковые последовательности символов отображать разными стилями в зависимости от контекста, в котором они находятся. </para>
172
 
 
173
 
<para
174
 
>Контексты могут образовываться динамически, чтобы сделать возможным использование правил, справедливых для данного момента.</para>
175
 
 
176
 
</sect2>
177
 
 
178
 
<sect2 id="highlight-context-styles-keywords">
179
 
<title
180
 
>Стили контекстов и ключевые слова</title>
181
 
 
182
 
<para
183
 
>В некоторых языках программирования целые и вещественные числа трактуются компилятором по-разному (компилятор - это программа, которая преобразует исходный текст программы в двоичный исполняемый файл). Синтаксис языка может определять символы, имеющие специальное значение, если они находятся в строке, заключенной в кавычки. В этих случаях есть смысл выделять их в тексте для более удобного чтения. Иногда бывает полезно выделять символы, не имеющие специального значения - это тоже под силу системе синтаксической подсветки &kate;.</para>
184
 
 
185
 
<para
186
 
>Синтаксическое определение может содержать столько стилей, сколько нужно для данного формата.</para>
187
 
 
188
 
<para
189
 
>Во многих форматах существуют списки слов, имеющих специальное значение. Например, в языках программирования такими словами будут являться управляющие операторы, названия типов данных и встроенные функции. Это концептуальные слова, поскольку они определяют саму суть синтаксиса. Система синтаксической подсветки &kate; использует списки подобных слов, чтобы подчеркнуть концептуальные элементы формата.</para>
190
 
 
191
 
</sect2>
192
 
 
193
 
<sect2 id="kate-highlight-system-default-styles">
194
 
<title
195
 
>Стили по умолчанию</title>
196
 
 
197
 
<para
198
 
>Если вы откроете файл исходного кода на C++, на &Java; или документ <acronym
199
 
>HTML</acronym
200
 
>, то увидите, что разные форматы отображаются в одних и тех же цветах. Дело в том, что &kate; содержит предустановленный набор стандартных стилей. Синтаксические определения по возможности используют этот набор.</para>
201
 
 
202
 
<para
203
 
>Это позволяет подобным образом отображать похожие концепции в различных форматах. Например, комментарии есть почти во всех языках программирования, разметки и скриптах.</para>
204
 
 
205
 
<tip>
206
 
<para
207
 
>Каждый стиль в синтаксическом определении основывается на одном из стандартных стилей. Поэтому, если вы часто используете какой-то формат с большим количеством стилей, следует проверить его конфигурацию на предмет их совпадения. Приведём небольшой пример. В &kate; определен всего один стандартный стиль для отображения строковых констант, но в языке программирования Perl существует два вида строк. Согласитесь, было бы гораздо лучше отображать их по разному - вы заходите в диалоговое окно настройки &kate; и изменяете соответствующие стили. Все <link linkend="kate-highlight-default-styles"
208
 
>доступные стандартные стили</link
209
 
> будут рассмотрены позже.</para>
210
 
</tip>
211
 
 
212
 
</sect2>
213
 
 
214
 
</sect1>
215
 
 
216
 
<sect1 id="katehighlight-xml-format">
217
 
<title
218
 
>&XML;-формат определения синтаксической подсветки</title>
219
 
 
220
 
<sect2>
221
 
<title
222
 
>Обзор</title>
223
 
 
224
 
<para
225
 
>В этом разделе вы познакомитесь с &XML;-форматом определения синтаксической подсветки. Вначале, на небольшом примере, будут кратко объяснены главные компоненты и их значение, затем мы более подробно остановимся на правилах подсветки.</para>
226
 
 
227
 
<para
228
 
>Формальное определение (<acronym
229
 
>DTD</acronym
230
 
>) находится в файле <filename
231
 
>language.dtd</filename
232
 
>, в каталоге <filename
233
 
>$<envar
234
 
>KDEDIR</envar
235
 
>/share/apps/katepart/syntax</filename
236
 
>. </para>
237
 
 
238
 
<variablelist>
239
 
<title
240
 
>Основные разделы файла определения синтаксической подсветки &kate;</title>
241
 
 
242
 
<varlistentry>
243
 
<term
244
 
>В заголовке файла подсветки указаны версия XML и тип документа:</term>
245
 
<listitem>
246
 
<programlisting
247
 
>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
248
 
&lt;!DOCTYPE language SYSTEM &quot;language.dtd&quot;&gt;
249
 
</programlisting>
250
 
</listitem>
251
 
</varlistentry>
252
 
 
253
 
<varlistentry>
254
 
<term
255
 
>Главная часть файла определений - элемент <userinput
256
 
>language</userinput
257
 
>. Доступные атрибуты:</term>
258
 
 
259
 
<listitem>
260
 
<para
261
 
>Необходимые атрибуты:</para>
262
 
<para
263
 
><userinput
264
 
>name</userinput
265
 
> определяет название языка. Впоследствии оно появляется во всех меню и диалогах.</para>
266
 
<para
267
 
><userinput
268
 
>section</userinput
269
 
> указывает категорию.</para>
270
 
<para
271
 
><userinput
272
 
>extensions</userinput
273
 
> определяет расширения файлов, вроде &quot;*.cpp;*.h&quot;</para>
274
 
 
275
 
<para
276
 
>Дополнительные атрибуты:</para>
277
 
<para
278
 
><userinput
279
 
>mimetype</userinput
280
 
> связывает файл с определенным типом &MIME;.</para>
281
 
<para
282
 
><userinput
283
 
>version</userinput
284
 
> указывает текущую версию файла определений.</para>
285
 
<para
286
 
><userinput
287
 
>kateversion</userinput
288
 
> указывает новейшую из поддерживаемых версий &kate;.</para>
289
 
<para
290
 
><userinput
291
 
>casesensitive</userinput
292
 
> определяет чувствительность ключевых слов к регистру.</para>
293
 
<para
294
 
><userinput
295
 
>priority</userinput
296
 
> определяет приоритет в случае использования разных правил подсветки. Действует правило с высшим приоритетом.</para>
297
 
<para
298
 
><userinput
299
 
>author</userinput
300
 
> содержит имя и email-адрес автора.</para>
301
 
<para
302
 
><userinput
303
 
>license</userinput
304
 
> содержит лицензию, обычно LGPL, Artistic, GPL и т.п.</para>
305
 
<para
306
 
><userinput
307
 
>hidden</userinput
308
 
> определяет, будет ли отображаться название в меню &kate;.</para>
309
 
<para
310
 
>Итак, следующая строка может быть примерно такой:</para>
311
 
<programlisting
312
 
>&lt;language name=&quot;C++&quot; version=&quot;1.00&quot; kateversion=&quot;2.4&quot; section=&quot;Sources&quot; extensions=&quot;*.cpp;*.h&quot; /&gt;
313
 
</programlisting>
314
 
</listitem>
315
 
</varlistentry>
316
 
 
317
 
 
318
 
<varlistentry>
319
 
<term
320
 
>Следующий элемент - <userinput
321
 
>highlighting</userinput
322
 
>, состоящий из необязательного <userinput
323
 
>list</userinput
324
 
> и обязательных - <userinput
325
 
>contexts</userinput
326
 
> и <userinput
327
 
>itemDatas</userinput
328
 
>.</term>
329
 
<listitem>
330
 
<para
331
 
>Элемент <userinput
332
 
>list</userinput
333
 
> содержит список ключевых слов. В нашем случае это <emphasis
334
 
>class</emphasis
335
 
> и <emphasis
336
 
>const</emphasis
337
 
>.Списков можете добавить, сколько хотите.</para>
338
 
<para
339
 
>Элемент <userinput
340
 
>contexts</userinput
341
 
> содержит все контексты. По умолчанию, подсветка начинается с первого контекста. В контексте <emphasis
342
 
>Normal Text</emphasis
343
 
> есть два правила, одно из которых проверяет наличие в тексте <emphasis
344
 
>слов</emphasis
345
 
>, соответствующих списку ключевых слов, другое определяет наличие кавычек и переключает контекст к <emphasis
346
 
>строковому</emphasis
347
 
> типу. Подробнее правила описаны в следующей главе.</para>
348
 
<para
349
 
>Элемент <userinput
350
 
>itemDatas</userinput
351
 
> содержит сведения о цветах и стилях, применяющихся в контекстах и правилах. В нашем примере <userinput
352
 
>itemData</userinput
353
 
> использует контексты <emphasis
354
 
>Normal Text</emphasis
355
 
>, <emphasis
356
 
>String</emphasis
357
 
> и <emphasis
358
 
>Keyword</emphasis
359
 
>. </para>
360
 
<programlisting
361
 
>&lt;highlighting&gt;
362
 
    &lt;list name=&quot;somename&quot;&gt;
363
 
      &lt;item&gt; class &lt;/item&gt;
364
 
      &lt;item&gt; const &lt;/item&gt;
365
 
    &lt;/list&gt;
366
 
    &lt;contexts&gt;
367
 
      &lt;context attribute=&quot;Normal Text&quot; lineEndContext=&quot;#pop&quot; name=&quot;Normal Text&quot; &gt;
368
 
        &lt;keyword attribute=&quot;Keyword&quot; context=&quot;#stay&quot; String=&quot;somename&quot; /&gt;
369
 
        &lt;DetectChar attribute=&quot;String&quot; context=&quot;string&quot; char=&quot;&amp;quot;&quot; /&gt;
370
 
      &lt;/context&gt;
371
 
      &lt;context attribute=&quot;String&quot; lineEndContext=&quot;#stay&quot; name=&quot;string&quot; &gt;
372
 
        &lt;DetectChar attribute=&quot;String&quot; context=&quot;#pop&quot; char=&quot;&amp;quot;&quot; /&gt;
373
 
      &lt;/context&gt;
374
 
    &lt;/contexts&gt;
375
 
    &lt;itemDatas&gt;
376
 
      &lt;itemData name=&quot;Normal Text&quot; defStyleNum=&quot;dsNormal&quot; /&gt;
377
 
      &lt;itemData name=&quot;Keyword&quot; defStyleNum=&quot;dsKeyword&quot; /&gt;
378
 
      &lt;itemData name=&quot;String&quot; defStyleNum=&quot;dsString&quot; /&gt;
379
 
    &lt;/itemDatas&gt;
380
 
  &lt;/highlighting&gt;
381
 
</programlisting>
382
 
</listitem>
383
 
</varlistentry>
384
 
 
385
 
<varlistentry>
386
 
<term
387
 
> Последня часть файла определения синтаксической подсветки - необязательный раздел <userinput
388
 
>general</userinput
389
 
>. Здесь могут содержаться сведения о ключевых словах, сворачивании блоков кода, комментариях и отступах.</term>
390
 
 
391
 
<listitem>
392
 
<para
393
 
>Раздел <userinput
394
 
>comment</userinput
395
 
> определяет, какой строкой вводится однострочный комментарий. Можно пользоваться также многострочными комментариями, используя <emphasis
396
 
>multiLine</emphasis
397
 
> с дополнительным атрибутом <emphasis
398
 
>end</emphasis
399
 
>. Это используется тогда, когда пользователь нажимает комбинацию клавиш, назначенную для действия <emphasis
400
 
>закомментировать/раскомментировать</emphasis
401
 
>.</para>
402
 
<para
403
 
>Секция <userinput
404
 
>keywords</userinput
405
 
> определяет чувствительность ключевых слов к регистру. Остальные атрибуты рассмотрим позднее.</para>
406
 
<programlisting
407
 
>&lt;general&gt;
408
 
    &lt;comments&gt;
409
 
      &lt;comment name="singleLine" start="#"/&gt;
410
 
    &lt;/comments&gt;
411
 
    &lt;keywords casesensitive="1"/&gt;
412
 
  &lt;/general&gt;
413
 
&lt;/language&gt;
414
 
</programlisting>
415
 
</listitem>
416
 
</varlistentry>
417
 
 
418
 
</variablelist>
419
 
 
420
 
 
421
 
</sect2>
422
 
 
423
 
<sect2 id="kate-highlight-sections">
424
 
<title
425
 
>Более подробно о разделах</title>
426
 
<para
427
 
>В этой части указаны все возможные атрибуты для контекстов, itemDatas, ключевых слов, комментариев, сворачивания кодов и отступов.</para>
428
 
 
429
 
<variablelist>
430
 
<varlistentry>
431
 
<term
432
 
>Элемент <userinput
433
 
>context</userinput
434
 
> относится к группе <userinput
435
 
>contexts</userinput
436
 
>. Контекстом определяются некоторые особые правила (например, что происходит при достижении подсвеченной структурой конца строки). Доступные атрибуты:</term>
437
 
 
438
 
 
439
 
<listitem>
440
 
<para
441
 
><userinput
442
 
>name</userinput
443
 
> - название контекста. Правила используют это название для переключения на указанный контекст.</para>
444
 
<para
445
 
><userinput
446
 
>lineEndContext</userinput
447
 
> определяет, на какой контекст подсвеченная структура переключается при достижении конца строки. Это может быть название другого контекста, <userinput
448
 
>#stay</userinput
449
 
>, если контекст не меняется (т.е. не делать ничего) или <userinput
450
 
>#pop</userinput
451
 
> для выхода из контекста. Например, набор <userinput
452
 
>#pop#pop#pop</userinput
453
 
> приведет к троекратному выходу из контекста.</para>
454
 
<para
455
 
><userinput
456
 
>lineBeginContext</userinput
457
 
> определяет контекст при достижении начала строки. По умолчанию: #stay.</para>
458
 
<para
459
 
><userinput
460
 
>fallthrough</userinput
461
 
> определяет поведение в случае переключения подсвеченной структуры на контекст, указанный в fallthroughContext, если не найдено соответствующее правило. По умолчанию: <emphasis
462
 
>false</emphasis
463
 
>.</para>
464
 
<para
465
 
><userinput
466
 
>fallthroughContext</userinput
467
 
> указывает следующий контекст, если не найдено соответствующее правило.</para>
468
 
<para
469
 
>Если <userinput
470
 
>dynamic</userinput
471
 
> имеет значение <emphasis
472
 
>true</emphasis
473
 
>, то контекст запоминает строки/метки-заполнители, сохранённые в динамических правилах. Это необходимо, например, для текущих документов. По умолчанию: <emphasis
474
 
>false</emphasis
475
 
>.</para>
476
 
</listitem>
477
 
</varlistentry>
478
 
 
479
 
 
480
 
<varlistentry>
481
 
<term
482
 
>Элемент <userinput
483
 
>itemData</userinput
484
 
> принадлежит группе <userinput
485
 
>itemDatas</userinput
486
 
>. Он определяет стиль и цвет шрифта, их можно устанавливать самому в тех случаях, когда это необходимо. И все же, рекомендуется придерживаться стандартных стилей, чтобы помочь пользователю свободно ориентироваться в любом языке . Название атрибута (name) и defStyleNum обязательны, остальные нет. Доступные атрибуты:</term>
487
 
 
488
 
<listitem>
489
 
<para
490
 
><userinput
491
 
>name</userinput
492
 
> даёт название itemData. Контексты и правила будут использовать это название при обращении к itemData в своих атрибутах <emphasis
493
 
>attribute</emphasis
494
 
>.</para>
495
 
<para
496
 
><userinput
497
 
>defStyleNum</userinput
498
 
> определяет стиль, используемый по умолчанию. Доступные стандартные стили будут детально описаны ниже.</para>
499
 
<para
500
 
><userinput
501
 
>color</userinput
502
 
> определяет цвет. Правильные форматы '#rrggbb' или '#rgb'.</para>
503
 
<para
504
 
><userinput
505
 
>selColor</userinput
506
 
> определяет цвет выделенного текста.</para>
507
 
<para
508
 
>Если <userinput
509
 
>italic</userinput
510
 
> имеет значение <emphasis
511
 
>true</emphasis
512
 
>, шрифт будет курсивным.</para>
513
 
<para
514
 
>Если <userinput
515
 
>bold</userinput
516
 
> имеет значение <emphasis
517
 
>true</emphasis
518
 
>, шрифт будет полужирным.</para>
519
 
<para
520
 
>Если <userinput
521
 
>underline</userinput
522
 
> имеет значение <emphasis
523
 
>true</emphasis
524
 
>, текст будет подчёркнут.</para>
525
 
<para
526
 
>Если <userinput
527
 
>strikeout</userinput
528
 
> имеет значение <emphasis
529
 
>true</emphasis
530
 
>, текст будет зачёркнут.</para>
531
 
</listitem>
532
 
</varlistentry>
533
 
 
534
 
 
535
 
<varlistentry>
536
 
<term
537
 
>Элемент <userinput
538
 
>keywords</userinput
539
 
> в группе <userinput
540
 
>general</userinput
541
 
> определяет свойства ключевых слов. Доступные атрибуты:</term>
542
 
 
543
 
<listitem>
544
 
<para
545
 
><userinput
546
 
>casesensitive</userinput
547
 
> может быть <emphasis
548
 
>true</emphasis
549
 
> или <emphasis
550
 
>false</emphasis
551
 
>. Если <emphasis
552
 
>true</emphasis
553
 
>, все ключевые слова будут проверяться на соответствие с учетом регистра</para>
554
 
<para
555
 
><userinput
556
 
>weakDeliminator</userinput
557
 
> - это группа знаков, которые не могут разделять слова. Например, точка <userinput
558
 
>'.'</userinput
559
 
> - разделитель слов. Если ключевое слово в <userinput
560
 
>list</userinput
561
 
> содержит точку, оно будет использовано по назначению только, если точка будет определена как "нетвердый разделитель" (weak delimiter).</para>
562
 
<para
563
 
><userinput
564
 
>additionalDeliminator</userinput
565
 
> определяют дополнительные разделители.</para>
566
 
<para
567
 
><userinput
568
 
>wordWrapDeliminator</userinput
569
 
> определяют символы, после которых может происходить перевод строки.</para>
570
 
<para
571
 
>По умолчанию разделителями слов и строк являются символы <userinput
572
 
>.():!+,-&lt;=&gt;%&amp;*/;?[]^{|}~\</userinput
573
 
>, пробел (<userinput
574
 
>' '</userinput
575
 
>) и табуляция (<userinput
576
 
>'\t'</userinput
577
 
>).</para>
578
 
</listitem>
579
 
</varlistentry>
580
 
 
581
 
 
582
 
<varlistentry>
583
 
<term
584
 
>Элемент <userinput
585
 
>comment</userinput
586
 
> в группе <userinput
587
 
>comments</userinput
588
 
> определяет свойства комментариев, которые используются в меню<menuchoice
589
 
><guimenu
590
 
>Сервис</guimenu
591
 
><guimenuitem
592
 
>Закомментировать</guimenuitem
593
 
></menuchoice
594
 
> и <menuchoice
595
 
><guimenu
596
 
>Сервис</guimenu
597
 
><guimenuitem
598
 
>Раскомментировать</guimenuitem
599
 
></menuchoice
600
 
>. Доступные атрибуты:</term>
601
 
 
602
 
<listitem>
603
 
<para
604
 
><userinput
605
 
>name</userinput
606
 
> может быть <emphasis
607
 
>singleLine</emphasis
608
 
> или <emphasis
609
 
>multiLine</emphasis
610
 
>. Если выбрать <emphasis
611
 
>multiLine</emphasis
612
 
>, то потребуются атрибуты <emphasis
613
 
>end</emphasis
614
 
> и <emphasis
615
 
>region</emphasis
616
 
>.</para>
617
 
<para
618
 
><userinput
619
 
>start</userinput
620
 
> указывает строку начала комментария. В C++ это может быть &quot;/*&quot;.</para>
621
 
<para
622
 
><userinput
623
 
>end</userinput
624
 
> указывает строку окончания комментария. В C++ это может быть &quot;*/&quot;.</para>
625
 
<para
626
 
><userinput
627
 
>region</userinput
628
 
> должно быть названием сворачиваемого многострочного комментария. Допустим, если в ваших правилах указано <emphasis
629
 
>beginRegion="Comment"</emphasis
630
 
> ... <emphasis
631
 
>endRegion="Comment"</emphasis
632
 
>, вы должны использовать <emphasis
633
 
>region="Comment"</emphasis
634
 
>. В этом случае раскомментирование будет действовать, даже если не будет выделен весь текст многострочного комментария. Достаточно будет просто поместить курсор в его пределы.</para>
635
 
</listitem>
636
 
</varlistentry>
637
 
 
638
 
 
639
 
<varlistentry>
640
 
<term
641
 
>Элемент <userinput
642
 
>folding</userinput
643
 
> в группе <userinput
644
 
>general</userinput
645
 
> определяет свойства сворачивания кода. Доступные атрибуты:</term>
646
 
 
647
 
<listitem>
648
 
<para
649
 
>Если <userinput
650
 
>indentationsensitive</userinput
651
 
> имеет значение <emphasis
652
 
>true</emphasis
653
 
>, то маркёры сворачивания кода будут располагаться с учетом отступов, как в языке сценариев Python. Чаще всего в этом нет необходимости, поэтому по умолчанию этот параметр определен как <emphasis
654
 
>false</emphasis
655
 
>.</para>
656
 
</listitem>
657
 
</varlistentry>
658
 
 
659
 
 
660
 
<varlistentry>
661
 
<term
662
 
>Элемент <userinput
663
 
>indentation</userinput
664
 
> в группе <userinput
665
 
>general</userinput
666
 
> определяет формат отступов, однако мы настоятельно рекомендуем не менять этот элемент, так как отступы обычно определяются типом файла или добавлением режимной строки в текстовый файл. Если вы всё-таки укажете способ отступа, он может оказаться навязанным пользователю, которому совсем не нужен. Доступные атрибуты:</term>
667
 
 
668
 
<listitem>
669
 
<para
670
 
><userinput
671
 
>mode</userinput
672
 
> - название формата отступов. Доступные форматы: <emphasis
673
 
>normal, cstyle, csands, xml, python</emphasis
674
 
> и <emphasis
675
 
>varindent</emphasis
676
 
>.</para>
677
 
</listitem>
678
 
</varlistentry>
679
 
 
680
 
 
681
 
</variablelist>
682
 
 
683
 
 
684
 
</sect2>
685
 
 
686
 
<sect2 id="kate-highlight-default-styles">
687
 
<title
688
 
>Стандартные стили</title>
689
 
<para
690
 
>Стандартные стили уже были кратко <link linkend="kate-highlight-system-default-styles"
691
 
>описаны</link
692
 
>: Стандартные стили предопределяют настройки цветов и шрифтов.</para>
693
 
<variablelist>
694
 
<varlistentry>
695
 
<term
696
 
>Здесь приведен только список доступных стандартных стилей:</term>
697
 
<listitem>
698
 
<para
699
 
><userinput
700
 
>dsNormal</userinput
701
 
>, для нормального текста.</para>
702
 
<para
703
 
><userinput
704
 
>dsKeyword</userinput
705
 
>, для ключевых слов.</para>
706
 
<para
707
 
><userinput
708
 
>dsDataType</userinput
709
 
>, для типов данных.</para>
710
 
<para
711
 
><userinput
712
 
>dsDecVal</userinput
713
 
>, для десятичных значений.</para>
714
 
<para
715
 
><userinput
716
 
>dsBaseN</userinput
717
 
>, для значений с основанием, отличным от10.</para>
718
 
<para
719
 
><userinput
720
 
>dsFloat</userinput
721
 
>, для значений с плавающей точкой.</para>
722
 
<para
723
 
><userinput
724
 
>dsChar</userinput
725
 
>, для символов.</para>
726
 
<para
727
 
><userinput
728
 
>dsString</userinput
729
 
>, для строк.</para>
730
 
<para
731
 
><userinput
732
 
>dsComment</userinput
733
 
>, для комментариев.</para>
734
 
<para
735
 
><userinput
736
 
>dsOthers</userinput
737
 
>, для всего остального.</para>
738
 
<para
739
 
><userinput
740
 
>dsAlert</userinput
741
 
>, для вывода предупреждений.</para>
742
 
<para
743
 
><userinput
744
 
>dsFunction</userinput
745
 
>, для вызова функций.</para>
746
 
<para
747
 
><userinput
748
 
>dsRegionMarker</userinput
749
 
>, для маркёров участков.</para>
750
 
<para
751
 
><userinput
752
 
>dsError</userinput
753
 
>, для подсветки ошибок и неверного синтаксиса.</para>
754
 
</listitem>
755
 
</varlistentry>
756
 
</variablelist>
757
 
 
758
 
</sect2>
759
 
 
760
 
</sect1>
761
 
 
762
 
<sect1 id="kate-highlight-rules-detailled">
763
 
<title
764
 
>Синтаксические правила</title>
765
 
 
766
 
<para
767
 
>В этом разделе описываются синтаксические правила.</para>
768
 
 
769
 
<para
770
 
>При анализе строки каждое правило может <quote
771
 
>запросить</quote
772
 
> на проверку любое количество символов (даже ноль). Если правило подходит, к соответствующим символам применяется стиль или <emphasis
773
 
>атрибут</emphasis
774
 
>, определённый в правиле. Применяемое правило также может запросить переключение текущего контекста.</para>
775
 
 
776
 
<para
777
 
>Правило выглядит примерно так:</para>
778
 
 
779
 
<programlisting
780
 
>&lt;RuleName attribute=&quot;(identifier)&quot; context=&quot;(identifier)&quot; [rule specific attributes] /&gt;</programlisting>
781
 
 
782
 
<para
783
 
>Параметр <emphasis
784
 
>attribute</emphasis
785
 
> указывает, какой стиль применить к  символам, соответствующим правилу. Параметр <emphasis
786
 
>context</emphasis
787
 
> определяет контекст, который будет установлен в случае применения правила.</para>
788
 
 
789
 
<para
790
 
>Параметр <emphasis
791
 
>context</emphasis
792
 
> может принимать следующие значения:</para>
793
 
 
794
 
<itemizedlist>
795
 
<listitem>
796
 
<para
797
 
><emphasis
798
 
>Идентификатор</emphasis
799
 
>, т.е. название контекста.</para>
800
 
</listitem>
801
 
<listitem>
802
 
<para
803
 
><emphasis
804
 
>order</emphasis
805
 
> предписывает системе подсветки не менять текущий контекст (<userinput
806
 
>#stay</userinput
807
 
>) или вернуться к предыдущему контексту (<userinput
808
 
>#pop</userinput
809
 
>).</para>
810
 
<para
811
 
>Чтобы вернуться назад на несколько контекстов, повторите нужное количество раз ключевое слово #pop: <userinput
812
 
>#pop#pop#pop</userinput
813
 
></para>
814
 
</listitem>
815
 
</itemizedlist>
816
 
 
817
 
<para
818
 
>Некоторые правила могут иметь <emphasis
819
 
>дочерние правила</emphasis
820
 
>, которые проверяются только в том случае, если текст соответствует родительскому правилу. Всей совпавшей строке будут присвоены атрибуты, определенные в родительском правиле. Вот пример правила с дочерними правилами:</para>
821
 
 
822
 
<programlisting
823
 
>&lt;RuleName (attributes)&gt;
824
 
  &lt;ChildRuleName (attributes) /&gt;
825
 
  ...
826
 
&lt;/RuleName&gt;
827
 
</programlisting>
828
 
 
829
 
 
830
 
<para
831
 
>Параметры конкретных видов правил описаны в следующих разделах.</para>
832
 
 
833
 
 
834
 
<itemizedlist>
835
 
<title
836
 
>Общие атрибуты</title>
837
 
<para
838
 
>У любого правила есть следующие атрибуты, <userinput
839
 
>(common attributes)</userinput
840
 
>, доступные всегда. <emphasis
841
 
>attribute</emphasis
842
 
> и <emphasis
843
 
>context</emphasis
844
 
> обязательны, остальные - нет. </para>
845
 
 
846
 
<listitem>
847
 
<para
848
 
><emphasis
849
 
>attribute</emphasis
850
 
>: Атрибут, описывающий определённые <emphasis
851
 
>itemData</emphasis
852
 
>.</para>
853
 
</listitem>
854
 
<listitem>
855
 
<para
856
 
><emphasis
857
 
>context</emphasis
858
 
>: Определяет контекст, на который происходит переключение в случае соответствия правилу.</para>
859
 
</listitem>
860
 
<listitem>
861
 
<para
862
 
><emphasis
863
 
>beginRegion</emphasis
864
 
>: Начало сворачиваемого блока кода. По умолчанию: не установлен (unset).</para>
865
 
</listitem>
866
 
<listitem>
867
 
<para
868
 
><emphasis
869
 
>endRegion</emphasis
870
 
>: Окончание сворачиваемого блока кода. По умолчанию: не установлен (unset).</para>
871
 
</listitem>
872
 
<listitem>
873
 
<para
874
 
>Если <emphasis
875
 
>lookAhead</emphasis
876
 
> имеет значение <emphasis
877
 
>true</emphasis
878
 
>, то система подсветки больше не будет обрабатывать соответствия. По умолчанию: <emphasis
879
 
>false</emphasis
880
 
>.</para>
881
 
</listitem>
882
 
<listitem>
883
 
<para
884
 
><emphasis
885
 
>firstNonSpace</emphasis
886
 
>: Соответствие, только если строка начинается не с пробела. По умолчанию: <emphasis
887
 
>false</emphasis
888
 
>.</para>
889
 
</listitem>
890
 
<listitem>
891
 
<para
892
 
><emphasis
893
 
>column</emphasis
894
 
>: Соответствие, только если соответствует номер столбца. По умолчанию: не установлено (unset).</para>
895
 
</listitem>
896
 
</itemizedlist>
897
 
 
898
 
<itemizedlist>
899
 
<title
900
 
>Динамические правила</title>
901
 
<para
902
 
>У некоторых правил есть необязательный атрибут <userinput
903
 
>dynamic</userinput
904
 
>, имеющий логическое значение (по умолчанию <emphasis
905
 
>false</emphasis
906
 
>). Если dynamic установить <emphasis
907
 
>true</emphasis
908
 
>, то правило может использовать метки-заполнители, заменяющие текст, соответствующий правилу <emphasis
909
 
>регулярного выражения</emphasis
910
 
>, переключенного к текущему контексту по своим атрибутам <userinput
911
 
>string</userinput
912
 
> или <userinput
913
 
>char</userinput
914
 
>. В атрибуте <userinput
915
 
>string</userinput
916
 
> метка-заполнитель <replaceable
917
 
>%N</replaceable
918
 
> (где N - цифра) будет заменена номером <replaceable
919
 
>N</replaceable
920
 
> найденного регулярного выражения. В атрибуте <userinput
921
 
>char</userinput
922
 
> метка-заполнитель должна быть цифрой <replaceable
923
 
>N</replaceable
924
 
>, и будет заменена первым символом <replaceable
925
 
>N</replaceable
926
 
> найденного регулярного выражения. Чтобы правило могло использовать эти атрибуты, оно должно содержать параметр <emphasis
927
 
>(dynamic)</emphasis
928
 
>.</para>
929
 
 
930
 
<listitem>
931
 
<para
932
 
><emphasis
933
 
>dynamic</emphasis
934
 
>: логический атрибут <emphasis
935
 
>(true|false)</emphasis
936
 
>.</para>
937
 
</listitem>
938
 
</itemizedlist>
939
 
 
940
 
<sect2 id="highlighting-rules-in-detail">
941
 
<title
942
 
>Более подробно о правилах</title>
943
 
 
944
 
<variablelist>
945
 
<varlistentry>
946
 
<term
947
 
>DetectChar</term>
948
 
<listitem>
949
 
<para
950
 
>Проверка на совпадение с одним определенным символом. Используется, например, для определения завершающего символа строки, заключённой в кавычки.</para>
951
 
<programlisting
952
 
>&lt;DetectChar char=&quot;(character)&quot; (common attributes) (dynamic) /&gt;</programlisting>
953
 
<para
954
 
>Параметр <userinput
955
 
>char</userinput
956
 
> определяет символ.</para>
957
 
</listitem>
958
 
</varlistentry>
959
 
 
960
 
<varlistentry>
961
 
<term
962
 
>Detect2Chars</term>
963
 
<listitem>
964
 
<para
965
 
>Проверка на совпадение с двумя символами в заданном порядке.</para>
966
 
<programlisting
967
 
>&lt;Detect2Chars char=&quot;(character)&quot; char1=&quot;(character)&quot; (common attributes) (dynamic) /&gt;</programlisting>
968
 
<para
969
 
>Параметр <userinput
970
 
>char</userinput
971
 
> определяет первый символ для проверки, <userinput
972
 
>char1</userinput
973
 
> - второй.</para>
974
 
</listitem>
975
 
</varlistentry>
976
 
 
977
 
<varlistentry>
978
 
<term
979
 
>AnyChar</term>
980
 
<listitem>
981
 
<para
982
 
>Проверка на совпадение с любым символом из заданного набора.</para>
983
 
<programlisting
984
 
>&lt;AnyChar String=&quot;(string)&quot; (common attributes) /&gt;</programlisting>
985
 
<para
986
 
>Параметр <userinput
987
 
>String</userinput
988
 
> содержит набор допустимых символов.</para>
989
 
</listitem>
990
 
</varlistentry>
991
 
 
992
 
<varlistentry>
993
 
<term
994
 
>StringDetect</term>
995
 
<listitem>
996
 
<para
997
 
>Проверка на совпадение со строкой.</para>
998
 
<programlisting
999
 
>&lt;StringDetect String=&quot;(string)&quot; [insensitive=&quot;true|false&quot;] (common attributes) (dynamic) /&gt;</programlisting>
1000
 
<para
1001
 
>Параметр <userinput
1002
 
>String</userinput
1003
 
> должен содержать строку, которую нужно проверить на соответствие. Атрибут <userinput
1004
 
>insensitive</userinput
1005
 
> по умолчанию имеет значение <userinput
1006
 
>false</userinput
1007
 
>, он влияет на сравнение строк. Если этот параметр установлен <userinput
1008
 
>true</userinput
1009
 
>, функция сравнения не будет учитывать регистр символов.</para>
1010
 
</listitem>
1011
 
</varlistentry>
1012
 
 
1013
 
<varlistentry>
1014
 
<term
1015
 
>RegExpr</term>
1016
 
<listitem>
1017
 
<para
1018
 
>Проверка на совпадение с регулярным выражением.</para>
1019
 
<programlisting
1020
 
>&lt;RegExpr String=&quot;(string)&quot; [insensitive=&quot;true|false&quot;] [minimal=&quot;true|false&quot;] (common attributes) (dynamic) /&gt;</programlisting>
1021
 
<para
1022
 
>Параметр <userinput
1023
 
>String</userinput
1024
 
> определяет регулярное выражение.</para>
1025
 
<para
1026
 
><userinput
1027
 
>insensitive</userinput
1028
 
> имеет то же значение, что и в предыдущем правиле; по умолчанию установлен <userinput
1029
 
>false</userinput
1030
 
>.</para>
1031
 
<para
1032
 
>Параметр <userinput
1033
 
>minimal</userinput
1034
 
> по умолчанию имеет значение <userinput
1035
 
>false</userinput
1036
 
> и передаётся функции обработки регулярных выражений.</para>
1037
 
<para
1038
 
>Символ перевода каретки (<literal
1039
 
>^</literal
1040
 
>) в начале регулярного выражения говорит о том, что данное правило будет применяться только к тем цепочкам символов, которые начинаются с новой строки.</para>
1041
 
<para
1042
 
>Более подробно регулярные выражения рассматриваются в разделе <link linkend="regular-expressions"
1043
 
><quote
1044
 
>Регулярные выражения</quote
1045
 
></link
1046
 
>.</para>
1047
 
</listitem>
1048
 
</varlistentry>
1049
 
 
1050
 
<varlistentry>
1051
 
<term
1052
 
>keyword</term>
1053
 
<listitem>
1054
 
<para
1055
 
>Проверка на ключевое слово из указанного списка.</para>
1056
 
<programlisting
1057
 
>&lt;keyword String=&quot;(list name)&quot; (common attributes) /&gt;</programlisting>
1058
 
<para
1059
 
>В параметре <userinput
1060
 
>String</userinput
1061
 
> нужно указать название списка ключевых слов. Этот список должен существовать.</para>
1062
 
</listitem>
1063
 
</varlistentry>
1064
 
 
1065
 
<varlistentry>
1066
 
<term
1067
 
>Int</term>
1068
 
<listitem>
1069
 
<para
1070
 
>Проверка на целое число.</para>
1071
 
<para
1072
 
><programlisting
1073
 
>&lt;Int (common attributes) (dynamic) /&gt;</programlisting
1074
 
></para>
1075
 
<para
1076
 
>Это правило не имеет своих параметров. Дочерние правила обычно используются для определения комбинаций символов <userinput
1077
 
>L</userinput
1078
 
> и <userinput
1079
 
>U</userinput
1080
 
> после числа, которые конкретизируют тип целой константы в коде программы. Вообще, все правила могут быть использованы в качестве дочерних, хотя <acronym
1081
 
>DTD</acronym
1082
 
> разрешает использовать в качестве дочернего только правило <userinput
1083
 
>StringDetect</userinput
1084
 
>.</para>
1085
 
<para
1086
 
>Пример проверки на целые числа, следующие за символом 'L'. <programlisting
1087
 
>&lt;Int attribute="Decimal" context="#stay" &gt;
1088
 
  &lt;StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/&gt;
1089
 
&lt;/Int&gt;
1090
 
</programlisting
1091
 
></para>
1092
 
 
1093
 
</listitem>
1094
 
</varlistentry>
1095
 
 
1096
 
<varlistentry>
1097
 
<term
1098
 
>Float</term>
1099
 
<listitem>
1100
 
<para
1101
 
>Проверка на число с плавающей точкой.</para>
1102
 
<para
1103
 
><programlisting
1104
 
>&lt;Float (common attributes) /&gt;</programlisting
1105
 
></para>
1106
 
<para
1107
 
>У этого правила нет особых атрибутов. <userinput
1108
 
>AnyChar</userinput
1109
 
> можно использовать как дочернее, обычно оно используется для проверки комбинаций. Для примера смотрите правило <userinput
1110
 
>Int</userinput
1111
 
>.</para>
1112
 
</listitem>
1113
 
</varlistentry>
1114
 
 
1115
 
<varlistentry>
1116
 
<term
1117
 
>HlCOct</term>
1118
 
<listitem>
1119
 
<para
1120
 
>Проверка на восьмеричное число (должно начинаться с нуля).</para>
1121
 
<para
1122
 
><programlisting
1123
 
>&lt;HlCOct (common attributes) /&gt;</programlisting
1124
 
></para>
1125
 
<para
1126
 
>У этого правила нет особых атрибутов.</para>
1127
 
</listitem>
1128
 
</varlistentry>
1129
 
 
1130
 
<varlistentry>
1131
 
<term
1132
 
>HlCHex</term>
1133
 
<listitem>
1134
 
<para
1135
 
>Проверка на шестнадцатеричное число (должно начинаться с символов <quote
1136
 
>0x</quote
1137
 
>).</para>
1138
 
<para
1139
 
><programlisting
1140
 
>&lt;HlCHex (common attributes) /&gt;</programlisting
1141
 
></para>
1142
 
<para
1143
 
>У этого правила нет особых атрибутов.</para>
1144
 
</listitem>
1145
 
</varlistentry>
1146
 
 
1147
 
<varlistentry>
1148
 
<term
1149
 
>HlCStringChar</term>
1150
 
<listitem>
1151
 
<para
1152
 
>Проверка на управляющий символ.</para>
1153
 
<para
1154
 
><programlisting
1155
 
>&lt;HlCStringChar (common attributes) /&gt;</programlisting
1156
 
></para>
1157
 
<para
1158
 
>У этого правила нет особых атрибутов.</para>
1159
 
 
1160
 
<para
1161
 
>Проверка на специальное представление символов, которое используется в языках программирования, например, <userinput
1162
 
>\n</userinput
1163
 
> (переход на новую строку) или <userinput
1164
 
>\t</userinput
1165
 
> (символ табуляции).</para>
1166
 
 
1167
 
<para
1168
 
>Следующие символы соответствуют правилу, если они вводятся после обратной черты (<literal
1169
 
>\</literal
1170
 
>): <userinput
1171
 
>abefnrtv&quot;'?\</userinput
1172
 
>. Также будут соответствовать шестнадцатеричные и восьмеричные числа, предварённые обратной чертой (например, <userinput
1173
 
>\xff</userinput
1174
 
> и <userinput
1175
 
>\033</userinput
1176
 
>).</para>
1177
 
 
1178
 
</listitem>
1179
 
</varlistentry>
1180
 
 
1181
 
<varlistentry>
1182
 
<term
1183
 
>HlCChar</term>
1184
 
<listitem>
1185
 
<para
1186
 
>Проверка на символ C.</para>
1187
 
<para
1188
 
><programlisting
1189
 
>&lt;HlCChar (common attributes) /&gt;</programlisting
1190
 
></para>
1191
 
<para
1192
 
>У этого правила нет особых атрибутов.</para>
1193
 
 
1194
 
<para
1195
 
>Правило находит символы C, заключенные в одинарные кавычки (например, <userinput
1196
 
>'c'</userinput
1197
 
>). Внутри одинарных кавычек может быть как одиночный символ, так и управляющая последовательность, более подробно ознакомиться с которыми можно в описании правила HlCStringChar.</para>
1198
 
 
1199
 
</listitem>
1200
 
</varlistentry>
1201
 
 
1202
 
<varlistentry>
1203
 
<term
1204
 
>RangeDetect</term>
1205
 
<listitem>
1206
 
<para
1207
 
>Проверка на строку, имеющую заданные начальный и конечный символы.</para>
1208
 
<programlisting
1209
 
>&lt;RangeDetect char=&quot;(character)&quot;  char1=&quot;(character)&quot; (common attributes) /&gt;</programlisting>
1210
 
<para
1211
 
><userinput
1212
 
>char</userinput
1213
 
> определяет символ, с которого начинается строка, а <userinput
1214
 
>char1</userinput
1215
 
> - которым она заканчивается.</para>
1216
 
<para
1217
 
>Это правило может быть использовано для поиска небольших строк, заключенных в кавычки, но, поскольку при проверке правила система подсветки работает с одной строкой, данное правило не сможет определить строку, разбитую символами перевода.</para>
1218
 
</listitem>
1219
 
</varlistentry>
1220
 
 
1221
 
<varlistentry>
1222
 
<term
1223
 
>LineContinue</term>
1224
 
<listitem>
1225
 
<para
1226
 
>Проверка на символ перевода строки.</para>
1227
 
<programlisting
1228
 
>&lt;LineContinue (common attributes) /&gt;</programlisting>
1229
 
<para
1230
 
>У этого правила нет особых атрибутов.</para>
1231
 
<para
1232
 
>Это правило может быть удобно для переключения контекста в конце строки, если последним знаком будет обратная черта (<userinput
1233
 
>'\'</userinput
1234
 
>). Это необходимо, например, в языках C/C++ для продолжения макросов и строк.</para>
1235
 
</listitem>
1236
 
</varlistentry>
1237
 
 
1238
 
<varlistentry>
1239
 
<term
1240
 
>IncludeRules</term>
1241
 
<listitem>
1242
 
<para
1243
 
>Включение правил из другого контекста или языка/файла.</para>
1244
 
<programlisting
1245
 
>&lt;IncludeRules context=&quot;contextlink&quot; [includeAttrib=&quot;true|false&quot;] /&gt;</programlisting>
1246
 
 
1247
 
<para
1248
 
>Атрибут <userinput
1249
 
>context</userinput
1250
 
> определяет контекст, из которого берётся правило.</para>
1251
 
<para
1252
 
>Если это простая строка, то включаются все правила из другого контекста, например: <programlisting
1253
 
>&lt;IncludeRules context=&quot;anotherContext&quot; /&gt;</programlisting
1254
 
></para>
1255
 
 
1256
 
<para
1257
 
>Если строка начинается с <userinput
1258
 
>##</userinput
1259
 
>, то система подсветки найдёт описание для другого языка с указанным названием, например: <programlisting
1260
 
>&lt;IncludeRules context=&quot;##C++&quot; /&gt;</programlisting
1261
 
></para>
1262
 
<para
1263
 
>Если <userinput
1264
 
>includeAttrib</userinput
1265
 
> выставить <emphasis
1266
 
>true</emphasis
1267
 
>, атрибут назначения должен быть таким же, как атрибут источника. Это необходимо, например, при вводе комментариев, если текст, соответствующий включаемому контексту, имеет иную подсветку, чем основной контекст. </para>
1268
 
</listitem>
1269
 
</varlistentry>
1270
 
 
1271
 
 
1272
 
<varlistentry>
1273
 
<term
1274
 
>DetectSpaces</term>
1275
 
<listitem>
1276
 
<para
1277
 
>Поиск пробелов.</para>
1278
 
<programlisting
1279
 
>&lt;DetectSpaces (common attributes) /&gt;</programlisting>
1280
 
 
1281
 
<para
1282
 
>У этого правила нет особых атрибутов.</para>
1283
 
<para
1284
 
>Используйте это правило, если вы уверены, что в тексте есть несколько пробелов подряд, например в начале строк с отступом. Это правило поможет пропустить все пробелы разом, вместо проверки каждого из них по нескольким параметрам.</para>
1285
 
</listitem>
1286
 
</varlistentry>
1287
 
 
1288
 
 
1289
 
<varlistentry>
1290
 
<term
1291
 
>DetectIdentifier</term>
1292
 
<listitem>
1293
 
<para
1294
 
>Поиск строк идентификаторов (таких как регулярные выражения: [a-zA-Z_][a-zA-Z0-9_]*).</para>
1295
 
<programlisting
1296
 
>&lt;DetectIdentifier (common attributes) /&gt;</programlisting>
1297
 
 
1298
 
<para
1299
 
>У этого правила нет особых атрибутов.</para>
1300
 
<para
1301
 
>Используйте это правило, чтобы пропустить все буквенные символы разом, вместо проверки каждого из них по нескольким параметрам.</para>
1302
 
</listitem>
1303
 
</varlistentry>
1304
 
 
1305
 
</variablelist>
1306
 
</sect2>
1307
 
 
1308
 
<sect2>
1309
 
<title
1310
 
>Подсказки &amp; Советы</title>
1311
 
 
1312
 
<itemizedlist>
1313
 
<para
1314
 
>Усвоив принцип действия переключения контекста, вы без труда сможете написать своё определение подсветки. Подумайте о том, в какой ситуации какое правило следует применить. Регулярные выражения - мощное средство, но, по сравнению с другими правилами, очень медленное. Поэтому стоит воспользоваться следующими советами. </para>
1315
 
 
1316
 
<listitem>
1317
 
<para
1318
 
>Проверяя на соответствие только пару символов, воспользуйтесь <userinput
1319
 
>Detect2Chars</userinput
1320
 
> вместо <userinput
1321
 
>StringDetect</userinput
1322
 
>. То же относится к <userinput
1323
 
>DetectChar</userinput
1324
 
>.</para>
1325
 
</listitem>
1326
 
<listitem>
1327
 
<para
1328
 
>Регулярные выражения несложны в использовании, но очень часто можно найти более быстрый способ. Допустим, вы ищете символ <userinput
1329
 
>'#'</userinput
1330
 
>, это первый символ строки. Решение с регулярным выражением будет выглядеть примерно так: <programlisting
1331
 
>&lt;RegExpr attribute=&quot;Macro&quot; context=&quot;macro&quot; String=&quot;^\s*#&quot; /&gt;</programlisting
1332
 
>. Этой же цели можно достичь значительно быстрее: <programlisting
1333
 
>&lt;DetectChar attribute=&quot;Macro&quot; context=&quot;macro&quot; char=&quot;#&quot; firstNonSpace=&quot;true&quot; /&gt;</programlisting
1334
 
>. Для поиска регулярного выражения <userinput
1335
 
>'^#'</userinput
1336
 
> можно применить <userinput
1337
 
>DetectChar</userinput
1338
 
> с атрибутом <userinput
1339
 
>column=&quot;0&quot;</userinput
1340
 
>. Отсчет для атрибута <userinput
1341
 
>column</userinput
1342
 
> идет посимвольно, поэтому знак табуляции для него - всего один символ. </para>
1343
 
</listitem>
1344
 
<listitem>
1345
 
<para
1346
 
>Можно переключать контексты без специальных символов. Допустим, вы хотите переключить контекст при достижении строки <userinput
1347
 
>*/</userinput
1348
 
>, но в новом контексте хотите продолжить обработку этой строки. Можно воспользоваться нижеследующим правилом, а атрибут <userinput
1349
 
>lookAhead</userinput
1350
 
> заставит систему подсветки сохранить найденную строку для нового контекста. <programlisting
1351
 
>&lt;Detect2Chars attribute=&quot;Comment&quot; context=&quot;#pop&quot; char=&quot;*&quot; char1=&quot;/&quot; lookAhead=&quot;true&quot; /&gt;</programlisting>
1352
 
</para>
1353
 
</listitem>
1354
 
<listitem>
1355
 
<para
1356
 
>Если известно, что в тексте много пробелов, воспользуйтесь <userinput
1357
 
>DetectSpaces</userinput
1358
 
>.</para>
1359
 
</listitem>
1360
 
<listitem>
1361
 
<para
1362
 
>Пользуйтесь <userinput
1363
 
>DetectIdentifier</userinput
1364
 
> вместо регулярного выражения <userinput
1365
 
>'[a-zA-Z_]\w*'</userinput
1366
 
>.</para>
1367
 
</listitem>
1368
 
<listitem>
1369
 
<para
1370
 
>Старайтесь использовать стандартные стили, это удобно для пользователя.</para>
1371
 
</listitem>
1372
 
<listitem>
1373
 
<para
1374
 
>Заглянув в другие XML-файлы, вы узнаете много нового о работе с правилами.</para>
1375
 
</listitem>
1376
 
<listitem>
1377
 
<para
1378
 
>Проверить правильность XML-файла можно командой <command
1379
 
>xmllint --dtdvalid language.dtd mySyntax.xml</command
1380
 
>.</para>
1381
 
</listitem>
1382
 
<listitem>
1383
 
<para
1384
 
>Если сложное регулярное выражение встречается часто, воспользуйтесь <emphasis
1385
 
>ENTITIES</emphasis
1386
 
>. Пример:</para>
1387
 
<programlisting
1388
 
>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
1389
 
&lt;!DOCTYPE language SYSTEM "language.dtd"
1390
 
[
1391
 
        &lt;!ENTITY myref    "[A-Za-z_:][\w.:_-]*"&gt;
1392
 
]&gt;
1393
 
</programlisting>
1394
 
<para
1395
 
>Теперь вместо регулярного выражения можно использовать <emphasis
1396
 
>&amp;myref;</emphasis
1397
 
>.</para>
1398
 
</listitem>
1399
 
</itemizedlist>
1400
 
</sect2>
1401
 
 
1402
 
</sect1>
1403
 
 
1404
 
</appendix>