~ubuntu-branches/ubuntu/saucy/kde-l10n-ptbr/saucy-proposed

« back to all changes in this revision

Viewing changes to docs/kde-runtime/kate/highlighting.docbook

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2012-01-24 20:43:54 UTC
  • mfrom: (1.12.11)
  • Revision ID: package-import@ubuntu.com-20120124204354-jwjjuq0ih8ur6ds0
Tags: 4:4.8.0-0ubuntu1
New upstream release

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
>Lisiane</firstname
 
13
> <surname
 
14
>Sztoltz</surname
 
15
><affiliation
 
16
><address
 
17
> <email
 
18
>lisiane@conectiva.com.br</email
 
19
></address
 
20
></affiliation
 
21
><contrib
 
22
>Tradução</contrib
 
23
></othercredit
 
24
 
25
</authorgroup>
 
26
</appendixinfo>
 
27
<title
 
28
>Trabalhando com Realce de Sintaxe</title>
 
29
 
 
30
<sect1 id="highlight-overview">
 
31
 
 
32
<title
 
33
>Visão geral</title>
 
34
 
 
35
<para
 
36
>O Realce de Sintaxe é o que faz com que o editor exiba automaticamente o texto em diferentes cores/estilos, dependendo da função da string em questão para o propósito do arquivo. No código-fonte do programa, por exemplo, declarações de controle pode ser renderizadas em negrito, enquanto tipos de dados e comentários ficam com cores diferentes do restante do texto. Isto aumenta consideravelmente a legibilidade do texto e assim, o autor pode ser mais eficiente e produtivo.</para>
 
37
 
 
38
<mediaobject>
 
39
<imageobject
 
40
><imagedata format="PNG" fileref="highlighted.png"/></imageobject>
 
41
<textobject
 
42
><phrase
 
43
>Uma função Perl, representada com realce de sintaxe.</phrase
 
44
></textobject>
 
45
<caption
 
46
><para
 
47
>Uma função Perl, representada com realce de sintaxe.</para>
 
48
</caption>
 
49
</mediaobject>
 
50
 
 
51
<mediaobject>
 
52
<imageobject
 
53
><imagedata format="PNG" fileref="unhighlighted.png"/></imageobject>
 
54
<textobject
 
55
><phrase
 
56
>A mesma função Perl, sem realce de sintaxe.</phrase
 
57
></textobject>
 
58
<caption
 
59
><para
 
60
>A mesma função Perl, sem realce de sintaxe.</para
 
61
></caption>
 
62
</mediaobject>
 
63
 
 
64
<para
 
65
>Dos dois exemplos, qual é o mais fácil de ler?</para>
 
66
 
 
67
<para
 
68
>O &kate; vem com um sistema flexível, configurável e capaz de fazer realce de sintaxe; a distribuição padrão oferece definições para um vasto conjunto de linguagens de programação, de manipulação e de 'scripting', bem como para outros formatos de texto. Além disso, você pode criar as suas próprias definições em arquivos &XML; simples.</para>
 
69
 
 
70
<para
 
71
>O &kate; detectará automaticamente regras de realce de sintaxe quando você abrir um arquivo, baseado no tipo &MIME; do arquivo, determinado pela extensão ou, se não existir, pelo conteúdo. Se você não conseguir, ajuste manualmente a sintaxe para o uso no menu <menuchoice
 
72
><guimenu
 
73
>Ferramentas</guimenu
 
74
><guisubmenu
 
75
>Realçar</guisubmenu
 
76
></menuchoice
 
77
>.</para>
 
78
 
 
79
<para
 
80
>Os estilos e cores usados por cada definição de realce de sintaxe podem ser configurados usando a página de <link linkend="prefcolors-highlighting-text-styles"
 
81
>Estilos de Realce de Texto</link
 
82
> da <link linkend="config-dialog"
 
83
>Janela de Configuração</link
 
84
>; por outro lado, os tipos &MIME; para os quais deve ser usada, podem ser configurados usando a página de <link linkend="pref-open-save-modes-filetypes"
 
85
>Modos &amp; Tipos de Arquivo</link
 
86
>.</para>
 
87
 
 
88
<note>
 
89
<para
 
90
>O realce de sintaxe existe para aumentar a legibilidade do texto correto, mas não se pode confiar nisto para validar seu texto. Marcar o texto para sintaxe é difícil, dependendo do formato que você está usando e, em alguns casos, os autores das regras de sintaxe ficarão orgulhosos se 98% do texto é renderizado corretamente, embora muito frequentemente você precise de um estilo raro para ver os 2% incorretos.</para>
 
91
</note>
 
92
 
 
93
<tip>
 
94
<para
 
95
>Você pode baixar as definições de sintaxe adicionais ou atualizadas na página Web do &kate; clicando no botão <guibutton
 
96
>Baixar Arquivos de Sintaxe...</guibutton
 
97
> na página <link linkend="pref-open-save-modes-filetypes"
 
98
>Modos &amp; Tipos de Arquivo</link
 
99
> da <link linkend="config-dialog"
 
100
>Janela de Configuração</link
 
101
>.</para>
 
102
</tip>
 
103
 
 
104
</sect1>
 
105
 
 
106
<sect1 id="katehighlight-system">
 
107
 
 
108
<title
 
109
>O Sistema de Realce de Sintaxe do &kate;</title>
 
110
 
 
111
<para
 
112
>Esta seção irá discutir o realce de sintaxe do &kate; em detalhes. É para você, caso deseje saber mais sobre esta funcionalidade ou se quiser criar ou alterar as definições de sintaxe.</para>
 
113
 
 
114
<sect2 id="katehighlight-howitworks">
 
115
 
 
116
<title
 
117
>Como funciona</title>
 
118
 
 
119
<para
 
120
>Sempre que você abrir um arquivo, uma das primeiras coisas que o editor &kate; faz é detectar qual definição de sintaxe deve ser usada para o arquivo. Ao ler o texto do arquivo, e enquanto você digita no arquivo, o sistema de realce de sintaxe analisará o texto usando as regras definidas pela definição de sintaxe, e marcará no texto onde contexto e estilos diferentes iniciarem e finalizarem.</para>
 
121
 
 
122
<para
 
123
>Quando você escrever no documento, o novo texto será analisado e marcado na hora, pois se você remover um caractere que está marcado como início ou fim de um contexto, o estilo em volta do texto modifica de acordo com ele.</para>
 
124
 
 
125
<para
 
126
>As definições de sintaxe usadas pelo sistema de realce de sintaxe do &kate; são arquivos &XML; que contém <itemizedlist>
 
127
<listitem
 
128
><para
 
129
>Regras para a detecção do texto inteiro, organizado em blocos de contexto</para
 
130
></listitem>
 
131
<listitem
 
132
><para
 
133
>Listas de palavras-chave</para
 
134
></listitem>
 
135
<listitem
 
136
><para
 
137
>Definições de Item de Estilo</para
 
138
></listitem>
 
139
</itemizedlist>
 
140
</para>
 
141
 
 
142
<para
 
143
>Ao analisar o texto, as regras de detecção serão avaliadas na ordem em que foram definidas, e se o início da string atual coincidir com uma regra, o contexto relacionado será usado. O ponto de partida no texto é movido para o ponto final no local onde aquela regra coincide, e um novo loop de regras inicia, começando no contexto configurado pela regra relacionada.</para>
 
144
 
 
145
</sect2>
 
146
 
 
147
<sect2 id="highlight-system-rules">
 
148
<title
 
149
>Regras</title>
 
150
 
 
151
<para
 
152
>As regras de detecção são o coração do sistema de detecção de realce. Uma regra é uma string, caracter ou <link linkend="regular-expressions"
 
153
>expressão regular</link
 
154
> em contraste com o texto sendo analisado. Ela contém informações sobre estilo a ser usado para a parte coincidente do texto, e pode trocar o contexto de funcionamento do sistema para um contexto explicitamente mencionado ou para um contexto usado anteriormente pelo texto.</para>
 
155
 
 
156
<para
 
157
>As regras são organizadas em grupos de contexto, sendo que este é usado pelos conceitos principais do texto dentro de um formato, como por exemplo strings dentro de aspas ou blocos de comentário do código-fonte de um programa. Isto garante que o sistema de realce não precisa ficar procurando todas as regras quando não for necessário, e também que sequências de algum caractere no texto podem ser tratadas de modo diferente, dependendo do contexto atual. </para>
 
158
 
 
159
<para
 
160
>Os contextos poderão ser gerados dinamicamente, para permitir a utilização de dados específicos das instâncias nas regras.</para>
 
161
 
 
162
</sect2>
 
163
 
 
164
<sect2 id="highlight-context-styles-keywords">
 
165
<title
 
166
>Estilos de Contexto e Palavras-Chave</title>
 
167
 
 
168
<para
 
169
>Em algumas linguagens de programação, os números inteiros são tratados diferentemente que números de ponto flutuante pelo compilador (o programa que converte o código-fonte para um binário executável), e podem existir caracteres que possuem significado especial dentro de uma string. Em tais casos, faz sentido renderizá-los de modo diferente dos outros, assim, são mais fáceis de identificar durante a leitura do texto. Mesmo que eles não sejam representados em contextos especiais, pode ser vistos no sistema de realce de sintaxe, e assim, podem ser marcados com uma renderização diferente.</para>
 
170
 
 
171
<para
 
172
>Uma definição de sintaxe pode conter tantos estilos quanto forem necessários para cobrir os conceitos do formato no qual serão usados.</para>
 
173
 
 
174
<para
 
175
>Em muitos formatos, existem listas de palavras, que representam um conceito específico; por exemplo, em linguagens de programação, as declaração de controle são um conceito, nomes de tipos de dados outro conceito, e funções pré-integradas na linguagem um terceiro conceito. O Sistema de Realce de Sintaxe do &kate; pode usar estas listas para detectar e marcar palavras no texto para enfatizar os conceitos dos formatos.</para>
 
176
 
 
177
</sect2>
 
178
 
 
179
<sect2 id="kate-highlight-system-default-styles">
 
180
<title
 
181
>Estilos Padrão</title>
 
182
 
 
183
<para
 
184
>Se você abrir um arquivo de código em C++, um arquivo de &Java; e um documento em <acronym
 
185
>HTML</acronym
 
186
> no &kate;, irá ver que, ainda que os formatos sejam diferentes e, por isso, sejam selecionadas palavras diferentes para um tratamento especial, as cores usadas são as mesmas. Isto deve-se ao fato do &kate; ter uma lista pré-definida de Estilos Padrão, os quais são usados pelas definições de sintaxe individuais.</para>
 
187
 
 
188
<para
 
189
>Isto faz com que fique mais fácil reconhecer conceitos similares em diferentes formatos. Comentários, por exemplo, estão presente na maioria das linguagens de programação, script e marcação, e quando são renderizados utilizando-se o mesmo estilo em todas as linguagens, você não precisa parar e pensar para identificá-los dentro do texto.</para>
 
190
 
 
191
<tip>
 
192
<para
 
193
>Todos os estilos de uma definição de sintaxe usam um dos estilos padrão. Algumas definições de sintaxe usam mais estilos além dos pré-definidos, por isso se você usar um formato frequentemente, pode ser útil abrir a janela de configuração para ver se alguns conceitos estão usando o mesmo estilo. Por exemplo, só existe um estilo padrão para as cadeias de caracteres, mas como a linguagem de programação Perl lida com dois tipos de cadeias de caracteres, você pode melhorar o realce se configurar esses dois tipos de uma forma ligeiramente diferente. Todos os <link linkend="kate-highlight-default-styles"
 
194
>estilos padrão disponíveis</link
 
195
> serão explicados mais tarde.</para>
 
196
</tip>
 
197
 
 
198
</sect2>
 
199
 
 
200
</sect1>
 
201
 
 
202
<sect1 id="katehighlight-xml-format">
 
203
<title
 
204
>O Formato &XML; de Definição de Realce</title>
 
205
 
 
206
<sect2>
 
207
<title
 
208
>Visão geral</title>
 
209
 
 
210
<para
 
211
>Esta seção é uma introdução ao formato &XML; de Definição de Realce. Baseado em um pequeno exemplo, ele irá descrever as componentes principais, bem como o seu significado e utilização. A próxima seção colocará em detalhes as regras de detecção.</para>
 
212
 
 
213
<para
 
214
>A definição formal, mais conhecida por <acronym
 
215
>DTD</acronym
 
216
>, é guardada no arquivo <filename
 
217
>language.dtd</filename
 
218
>, o qual deve estar instalado no seu sistema na pasta <filename
 
219
>$<envar
 
220
>KDEDIR</envar
 
221
>/share/apps/katepart/syntax</filename
 
222
>. </para>
 
223
 
 
224
<variablelist>
 
225
<title
 
226
>Seções principais dos arquivos de Definições de Realce do &kate;</title>
 
227
 
 
228
<varlistentry>
 
229
<term
 
230
>Um arquivo de realce contém um cabeçalho que define a versão do XML e o tipo de documento:</term>
 
231
<listitem>
 
232
<programlisting
 
233
>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
 
234
&lt;!DOCTYPE language SYSTEM &quot;language.dtd&quot;&gt;
 
235
</programlisting>
 
236
</listitem>
 
237
</varlistentry>
 
238
 
 
239
<varlistentry>
 
240
<term
 
241
>A raiz do arquivo de definição é o elemento <userinput
 
242
>language</userinput
 
243
>. Os atributos disponíveis são:</term>
 
244
 
 
245
<listitem>
 
246
<para
 
247
>Atributos necessários:</para>
 
248
<para
 
249
>O <userinput
 
250
>name</userinput
 
251
> define o nome da linguagem. Ele aparece nos respectivos menus e janelas.</para>
 
252
<para
 
253
>O <userinput
 
254
>section</userinput
 
255
> indica a categoria.</para>
 
256
<para
 
257
>O <userinput
 
258
>extensions</userinput
 
259
> define as extensões dos arquivos, como por exemplo &quot;*.cpp;*.h&quot;</para>
 
260
 
 
261
<para
 
262
>Atributos opcionais:</para>
 
263
<para
 
264
>O <userinput
 
265
>mimetype</userinput
 
266
> associa os arquivos com base no Tipo &MIME;.</para>
 
267
<para
 
268
>O <userinput
 
269
>version</userinput
 
270
> indica a versão atual do arquivo de definição.</para>
 
271
<para
 
272
>O <userinput
 
273
>kateversion</userinput
 
274
> indica a última versão suportada pelo &kate;.</para>
 
275
<para
 
276
>O <userinput
 
277
>casesensitive</userinput
 
278
> define se as palavras-chave fazem distinção entre maiúsculas e minúsculas.</para>
 
279
<para
 
280
>O <userinput
 
281
>priority</userinput
 
282
> é necessário se outro arquivo de definições de realce usar as mesmas extensões. Ganhará o que tiver maior prioridade.</para>
 
283
<para
 
284
>O <userinput
 
285
>author</userinput
 
286
> contém o nome do autor e o seu endereço de e-mail.</para>
 
287
<para
 
288
>O <userinput
 
289
>license</userinput
 
290
> contém a licença, que é normalmente a LGPL, a Artistic, a GPL, entre outras.</para>
 
291
<para
 
292
>O <userinput
 
293
>hidden</userinput
 
294
> define se o nome deverá aparecer nos menus do &kate;.</para>
 
295
<para
 
296
>Assim, a próxima linha parece-se com o seguinte:</para>
 
297
<programlisting
 
298
>&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;
 
299
</programlisting>
 
300
</listitem>
 
301
</varlistentry>
 
302
 
 
303
 
 
304
<varlistentry>
 
305
<term
 
306
>A seguir vem o elemento <userinput
 
307
>highlighting</userinput
 
308
>, que contém o elemento opcional <userinput
 
309
>list</userinput
 
310
> e os elementos obrigatórios <userinput
 
311
>contexts</userinput
 
312
> e <userinput
 
313
>itemDatas</userinput
 
314
>.</term>
 
315
<listitem>
 
316
<para
 
317
>O elemento <userinput
 
318
>list</userinput
 
319
> contém uma lista de palavras-chave. Neste caso, as palavras-chave são a <emphasis
 
320
>class</emphasis
 
321
> e a <emphasis
 
322
>const</emphasis
 
323
>.Você poderá adicionar tantas listas quanto desejar.</para>
 
324
<para
 
325
>O elemento <userinput
 
326
>contexts</userinput
 
327
> contém todos os contextos. O primeiro contexto é, por padrão, o início do realce. Existem duas regras no contexto <emphasis
 
328
>Normal Text</emphasis
 
329
> (Texto Normal), que correspondem à lista de palavras-chave com o nome <emphasis
 
330
>um_nome</emphasis
 
331
> e uma regra que detecta aspas e muda o contexto para <emphasis
 
332
>string</emphasis
 
333
> (cadeia de caracteres). Para aprender mais sobre as regras, leia o próximo capítulo.</para>
 
334
<para
 
335
>A terceira parte é o elemento <userinput
 
336
>itemDatas</userinput
 
337
>. Contém todas as cores e estilos de fonte necessários pelos contextos e regras. Neste exemplo, são usados o <userinput
 
338
>itemData</userinput
 
339
> de <emphasis
 
340
>Normal Text</emphasis
 
341
> (Texto Normal), <emphasis
 
342
>String</emphasis
 
343
> (Cadeia de Caracteres) e <emphasis
 
344
>Keyword</emphasis
 
345
> (Palavra-Chave). </para>
 
346
<programlisting
 
347
>&lt;highlighting&gt;
 
348
    &lt;list name=&quot;um_nome&quot;&gt;
 
349
      &lt;item&gt; class &lt;/item&gt;
 
350
      &lt;item&gt; const &lt;/item&gt;
 
351
    &lt;/list&gt;
 
352
    &lt;contexts&gt;
 
353
      &lt;context attribute=&quot;Normal Text&quot; lineEndContext=&quot;#pop&quot; name=&quot;Normal Text&quot; &gt;
 
354
        &lt;keyword attribute=&quot;Keyword&quot; context=&quot;#stay&quot; String=&quot;somename&quot; /&gt;
 
355
        &lt;DetectChar attribute=&quot;String&quot; context=&quot;string&quot; char=&quot;&amp;quot;&quot; /&gt;
 
356
      &lt;/context&gt;
 
357
      &lt;context attribute=&quot;String&quot; lineEndContext=&quot;#stay&quot; name=&quot;string&quot; &gt;
 
358
        &lt;DetectChar attribute=&quot;String&quot; context=&quot;#pop&quot; char=&quot;&amp;quot;&quot; /&gt;
 
359
      &lt;/context&gt;
 
360
    &lt;/contexts&gt;
 
361
    &lt;itemDatas&gt;
 
362
      &lt;itemData name=&quot;Normal Text&quot; defStyleNum=&quot;dsNormal&quot; /&gt;
 
363
      &lt;itemData name=&quot;Keyword&quot; defStyleNum=&quot;dsKeyword&quot; /&gt;
 
364
      &lt;itemData name=&quot;String&quot; defStyleNum=&quot;dsString&quot; /&gt;
 
365
    &lt;/itemDatas&gt;
 
366
  &lt;/highlighting&gt;
 
367
</programlisting>
 
368
</listitem>
 
369
</varlistentry>
 
370
 
 
371
<varlistentry>
 
372
<term
 
373
>A última parte de uma definição de realce é a seção opcional <userinput
 
374
>general</userinput
 
375
>. Ela poderá conter informações sobre as palavras-chave, expansão/recolhimento de código, comentários e recuo.</term>
 
376
 
 
377
<listitem>
 
378
<para
 
379
>A seção <userinput
 
380
>comment</userinput
 
381
> define com que texto é introduzido um comentário para uma única linha. Você poderá também definir comentários multi-linha, usando o <emphasis
 
382
>multiLine</emphasis
 
383
> com o atributo adicional <emphasis
 
384
>end</emphasis
 
385
>. Isto aplica-se se o usuário pressionar o atalho correspondente para <emphasis
 
386
>comentar/descomentar</emphasis
 
387
>.</para>
 
388
<para
 
389
>A seção <userinput
 
390
>keywords</userinput
 
391
> define se as listas de palavras-chave fazem distinção entre maiúsculas e minúsculas ou não. Os outros atributos serão explicados mais tarde.</para>
 
392
<programlisting
 
393
>&lt;general&gt;
 
394
    &lt;comments&gt;
 
395
      &lt;comment name="singleLine" start="#"/&gt;
 
396
    &lt;/comments&gt;
 
397
    &lt;keywords casesensitive="1"/&gt;
 
398
  &lt;/general&gt;
 
399
&lt;/language&gt;
 
400
</programlisting>
 
401
</listitem>
 
402
</varlistentry>
 
403
 
 
404
</variablelist>
 
405
 
 
406
 
 
407
</sect2>
 
408
 
 
409
<sect2 id="kate-highlight-sections">
 
410
<title
 
411
>As Seções em Detalhe</title>
 
412
<para
 
413
>Esta parte irá descrever todos os atributos disponíveis para o 'contexts', o 'itemDatas', o 'keywords', o 'comments', a expansão de código e o recuo.</para>
 
414
 
 
415
<variablelist>
 
416
<varlistentry>
 
417
<term
 
418
>O elemento <userinput
 
419
>context</userinput
 
420
> pertence ao grupo <userinput
 
421
>contexts</userinput
 
422
>. Um contexto, por si só, define as regras específicas do contexto, como o que deve acontecer se o sistema de realce chegar ao fim de uma linha. Os atributos disponíveis são:</term>
 
423
 
 
424
 
 
425
<listitem>
 
426
<para
 
427
><userinput
 
428
>name</userinput
 
429
> o nome do contexto. As regras irão usar este nome para indicar o contexto para onde mudar, se a regra corresponder.</para>
 
430
<para
 
431
>O <userinput
 
432
>lineEndContext</userinput
 
433
> define o contexto para onde o sistema de realce salta, se atingir o fim de uma linha. Poderá ser o nome de outro contexto, o <userinput
 
434
>#stay</userinput
 
435
> para não mudar de contexto (&eg;, não fazer nada) ou o <userinput
 
436
>#pop</userinput
 
437
> que fará com que saia deste contexto. É possível usar, por exemplo, <userinput
 
438
>#pop#pop#pop</userinput
 
439
> para sair de dentro de três contextos.</para>
 
440
<para
 
441
>O <userinput
 
442
>lineBeginContext</userinput
 
443
> define o contexto, se for encontrado o início de uma linha. Padrão: #stay.</para>
 
444
<para
 
445
>O <userinput
 
446
>fallthrough</userinput
 
447
> define se o sistema de realce salta para o contexto indicado em 'fallthroughContext' se não corresponder nenhuma regra. Padrão: <emphasis
 
448
>false</emphasis
 
449
>.</para>
 
450
<para
 
451
>O <userinput
 
452
>fallthroughContext</userinput
 
453
> define o próximo contexto, se nenhuma regra corresponder.</para>
 
454
<para
 
455
>O <userinput
 
456
>dynamic</userinput
 
457
>, se for <emphasis
 
458
>true</emphasis
 
459
> (verdadeiro), fará com que o contexto recorde os textos/sequências de substituição gravados pelas regras dinâmicas. Isto é necessário, por exemplo, para os documentos do HERE. Padrão: <emphasis
 
460
>false</emphasis
 
461
>.</para>
 
462
</listitem>
 
463
</varlistentry>
 
464
 
 
465
 
 
466
<varlistentry>
 
467
<term
 
468
>O elemento <userinput
 
469
>itemData</userinput
 
470
> está no grupo <userinput
 
471
>itemDatas</userinput
 
472
>. Define o estilo e as cores da fonte. Assim, é possível definir os seus próprios estilos e cores, contudo recomenda-se que use os estilos pré-definidos, para que o usuário veja sempre as mesmas cores que são usadas nas várias linguagens. Todavia, existem casos em que não existe outra forma e, assim, é necessário mudar os atributos de cores e tipos de fonte. Os atributos 'name' e 'defStyleNum' são obrigatórios, enquanto os outros são opcionais. Os atributos disponíveis são:</term>
 
473
 
 
474
<listitem>
 
475
<para
 
476
>O <userinput
 
477
>name</userinput
 
478
> define o nome do 'itemData'. Os contextos e regras irão usar este nome no seu atributo <emphasis
 
479
>attribute</emphasis
 
480
>, para referenciar um 'itemData'.</para>
 
481
<para
 
482
>O <userinput
 
483
>defStyleNum</userinput
 
484
> define qual o estilo padrão usar. Os estilos pré-definidos disponíveis são explicados mais tarde em detalhes.</para>
 
485
<para
 
486
>O <userinput
 
487
>color</userinput
 
488
> define uma cor. Os formatos válidos são o '#rrggbb' ou '#rgb'.</para>
 
489
<para
 
490
>O <userinput
 
491
>selColor</userinput
 
492
> define a cor da seleção.</para>
 
493
<para
 
494
>O <userinput
 
495
>italic</userinput
 
496
>, se for <emphasis
 
497
>true</emphasis
 
498
> (verdadeiro), irá colocar o texto em itálico.</para>
 
499
<para
 
500
>O <userinput
 
501
>bold</userinput
 
502
>, se for <emphasis
 
503
>true</emphasis
 
504
> (verdadeiro), irá colocar o texto em negrito.</para>
 
505
<para
 
506
>O <userinput
 
507
>underline</userinput
 
508
>, se for <emphasis
 
509
>true</emphasis
 
510
> (verdadeiro), irá colocar o texto sublinhado.</para>
 
511
<para
 
512
>O <userinput
 
513
>strikeout</userinput
 
514
>, se for <emphasis
 
515
>true</emphasis
 
516
> (verdadeiro), irá colocar o texto traçado.</para>
 
517
<para
 
518
>Se o <userinput
 
519
>spellChecking</userinput
 
520
> for <emphasis
 
521
>true</emphasis
 
522
>, o texto terá sua ortografia verificada, caso contrário ele será ignorado durante a verificação ortográfica.</para>
 
523
</listitem>
 
524
</varlistentry>
 
525
 
 
526
 
 
527
<varlistentry>
 
528
<term
 
529
>O elemento <userinput
 
530
>keywords</userinput
 
531
>, no grupo <userinput
 
532
>general</userinput
 
533
>, define as propriedades das palavras-chave. Os atributos disponíveis são:</term>
 
534
 
 
535
<listitem>
 
536
<para
 
537
>O <userinput
 
538
>casesensitive</userinput
 
539
> poderá ser <emphasis
 
540
>true</emphasis
 
541
> (verdadeiro) ou <emphasis
 
542
>false</emphasis
 
543
> (falso). Se for <emphasis
 
544
>true</emphasis
 
545
>, todas as palavras-chave farão distinção entre maiúsculas e minúsculas</para>
 
546
<para
 
547
>O <userinput
 
548
>weakDeliminator</userinput
 
549
> é uma lista de caracteres que não irão atuar como separadores de palavras. Por exemplo, o ponto <userinput
 
550
>'.'</userinput
 
551
> é um separador de palavras. Assuma que uma palavra-chave num <userinput
 
552
>list</userinput
 
553
> contém um ponto; nesse caso, só irá corresponder se indicar que o ponto é um delimitador fraco.</para>
 
554
<para
 
555
>O <userinput
 
556
>additionalDeliminator</userinput
 
557
> define os delimitadores ou separadores adicionais.</para>
 
558
<para
 
559
>O <userinput
 
560
>wordWrapDeliminator</userinput
 
561
> define os caracteres após os quais poderá ocorrer uma mudança de linha.</para>
 
562
<para
 
563
>Os delimitadores pré-definidos e de mudança de linha são os caracteres <userinput
 
564
>.():!+,-&lt;=&gt;%&amp;*/;?[]^{|}~\</userinput
 
565
>, o espaço (<userinput
 
566
>' '</userinput
 
567
>) e a tabulação (<userinput
 
568
>'\t'</userinput
 
569
>).</para>
 
570
</listitem>
 
571
</varlistentry>
 
572
 
 
573
 
 
574
<varlistentry>
 
575
<term
 
576
>O elemento <userinput
 
577
>comment</userinput
 
578
>, no grupo <userinput
 
579
>comments</userinput
 
580
>, define as propriedades dos comentários que são usadas nas opções <menuchoice
 
581
><guimenu
 
582
>Ferramentas</guimenu
 
583
><guimenuitem
 
584
>Comentar</guimenuitem
 
585
></menuchoice
 
586
> e <menuchoice
 
587
><guimenu
 
588
>Ferramentas</guimenu
 
589
><guimenuitem
 
590
>Descomentar</guimenuitem
 
591
></menuchoice
 
592
>. Os atributos disponíveis são:</term>
 
593
 
 
594
<listitem>
 
595
<para
 
596
>O <userinput
 
597
>name</userinput
 
598
> tanto poderá ser <emphasis
 
599
>singleLine</emphasis
 
600
> como <emphasis
 
601
>multiLine</emphasis
 
602
>. Se escolher o <emphasis
 
603
>multiLine</emphasis
 
604
>, serão necessários os atributos <emphasis
 
605
>end</emphasis
 
606
> e <emphasis
 
607
>region</emphasis
 
608
>.</para>
 
609
<para
 
610
>O <userinput
 
611
>start</userinput
 
612
> define o texto usado para iniciar um comentário. No C++, este será o &quot;/*&quot;.</para>
 
613
<para
 
614
>O <userinput
 
615
>end</userinput
 
616
> define o texto usado para fechar um comentário. No C++, será o &quot;*/&quot;.</para>
 
617
<para
 
618
>O <userinput
 
619
>region</userinput
 
620
> deverá ser o nome do comentário multi-linhas que poderá expandir ou recolher. Assuma que tem o <emphasis
 
621
>beginRegion="Comment"</emphasis
 
622
> ... <emphasis
 
623
>endRegion="Comment"</emphasis
 
624
> nas suas regras; nesse caso, deverá usar o <emphasis
 
625
>region="Comment"</emphasis
 
626
>. Desta forma, a remoção de comentários funciona, mesmo que não tenha selecionado todo o texto do comentário multi-linhas. O cursor só precisa estar dentro deste comentário.</para>
 
627
</listitem>
 
628
</varlistentry>
 
629
 
 
630
 
 
631
<varlistentry>
 
632
<term
 
633
>O elemento <userinput
 
634
>folding</userinput
 
635
>, no grupo <userinput
 
636
>general</userinput
 
637
>, define as propriedades de dobragem/desdobramento do código. Os atributos disponíveis são:</term>
 
638
 
 
639
<listitem>
 
640
<para
 
641
>O <userinput
 
642
>indentationsensitive</userinput
 
643
>, se for <emphasis
 
644
>true</emphasis
 
645
>, aplicará os marcadores de dobragem de código com base no recuo, como acontece na linguagem de programação Python. Normalmente você não terá que definir isto, uma vez que o valor padrão é <emphasis
 
646
>false</emphasis
 
647
>.</para>
 
648
</listitem>
 
649
</varlistentry>
 
650
 
 
651
 
 
652
<varlistentry>
 
653
<term
 
654
>O elemento <userinput
 
655
>indentation</userinput
 
656
>, no grupo <userinput
 
657
>general</userinput
 
658
>, define qual o sistema de recuo a usar; contudo, recomenda-se que omita este elemento, uma vez que o sistema de recuo será normalmente definido a partir de um Tipo de Arquivo ou através da adição da linha de modo no arquivo de texto. Se você indicar um sistema de recuo, todavia, irá obrigar o usuário a usar um sistema de recuo específico, o que poderá não ser o que ele quer. Os atributos disponíveis são:</term>
 
659
 
 
660
<listitem>
 
661
<para
 
662
>O <userinput
 
663
>mode</userinput
 
664
> é o nome do sistema de recuo. Os sistemas disponíveis atualmente são: <emphasis
 
665
>normal, cstyle, haskell, lilypond, lisp, python, ruby</emphasis
 
666
> e <emphasis
 
667
>xml</emphasis
 
668
>.</para>
 
669
</listitem>
 
670
</varlistentry>
 
671
 
 
672
 
 
673
</variablelist>
 
674
 
 
675
 
 
676
</sect2>
 
677
 
 
678
<sect2 id="kate-highlight-default-styles">
 
679
<title
 
680
>Estilos Padrão Disponíveis</title>
 
681
<para
 
682
>Os estilos padrão <link linkend="kate-highlight-system-default-styles"
 
683
>já foram explicados</link
 
684
>, em resumo: Os estilos padrão são os estilos de cores e fontes pré-definidos.</para>
 
685
<variablelist>
 
686
<varlistentry>
 
687
<term
 
688
>Assim, aqui aparece somente a lista de estilos padrão disponíveis:</term>
 
689
<listitem>
 
690
<para
 
691
><userinput
 
692
>dsNormal</userinput
 
693
>, usado para o texto normal.</para>
 
694
<para
 
695
><userinput
 
696
>dsKeyword</userinput
 
697
>, usado nas palavras-chave.</para>
 
698
<para
 
699
><userinput
 
700
>dsDataType</userinput
 
701
>, usado nos tipos de dados.</para>
 
702
<para
 
703
><userinput
 
704
>dsDecVal</userinput
 
705
>, usado nos valores decimais.</para>
 
706
<para
 
707
><userinput
 
708
>dsBaseN</userinput
 
709
>, usados nos valores com uma base diferente de 10.</para>
 
710
<para
 
711
><userinput
 
712
>dsFloat</userinput
 
713
>, usado nos valores de ponto flutuante.</para>
 
714
<para
 
715
><userinput
 
716
>dsChar</userinput
 
717
>, usado para um caracter único.</para>
 
718
<para
 
719
><userinput
 
720
>dsString</userinput
 
721
>, usado para conjuntos ou cadeias de caracteres.</para>
 
722
<para
 
723
><userinput
 
724
>dsComment</userinput
 
725
>, usado nos comentários.</para>
 
726
<para
 
727
><userinput
 
728
>dsOthers</userinput
 
729
>, usado para outras coisas.</para>
 
730
<para
 
731
><userinput
 
732
>dsAlert</userinput
 
733
>, usado nas mensagens de aviso.</para>
 
734
<para
 
735
><userinput
 
736
>dsFunction</userinput
 
737
>, usado nas chamadas a funções.</para>
 
738
<para
 
739
><userinput
 
740
>dsRegionMarker</userinput
 
741
>, usado nos marcadores de regiões.</para>
 
742
<para
 
743
><userinput
 
744
>dsError</userinput
 
745
>, usado para realçar erros e sintaxes inválidas.</para>
 
746
</listitem>
 
747
</varlistentry>
 
748
</variablelist>
 
749
 
 
750
</sect2>
 
751
 
 
752
</sect1>
 
753
 
 
754
<sect1 id="kate-highlight-rules-detailled">
 
755
<title
 
756
>Regras de Detecção de Realce</title>
 
757
 
 
758
<para
 
759
>Esta seção descreve as regras de detecção de sintaxe.</para>
 
760
 
 
761
<para
 
762
>Cada regra pode corresponder a zero ou mais caracteres no início do texto que é testado. Se a regra corresponder, é atribuído o estilo ou <emphasis
 
763
>atributo</emphasis
 
764
> definido pela regra aos caracteres correspondentes; uma regra poderá perguntar se o contexto atual será alterado.</para>
 
765
 
 
766
<para
 
767
>As regras se parecem com isto:</para>
 
768
 
 
769
<programlisting
 
770
>&lt;NomeRegra attribute=&quot;(identificador)&quot; context=&quot;(identifier|order)&quot; [atributos específicos da regra] /&gt;</programlisting>
 
771
 
 
772
<para
 
773
>O <emphasis
 
774
>attribute</emphasis
 
775
> identifica o estilo a usar para os caracteres correspondentes pelo nome ou índice; o <emphasis
 
776
>context</emphasis
 
777
> identifica, como esperado, o contexto a usar a partir daqui.</para>
 
778
 
 
779
<para
 
780
>O <emphasis
 
781
>context</emphasis
 
782
> pode ser identificado por:</para>
 
783
 
 
784
<itemizedlist>
 
785
<listitem>
 
786
<para
 
787
>Um <emphasis
 
788
>identificador</emphasis
 
789
>, que é o nome do outro contexto.</para>
 
790
</listitem>
 
791
<listitem>
 
792
<para
 
793
>Uma <emphasis
 
794
>ordem</emphasis
 
795
> diz ao mecanismo para ficar no contexto atual (<userinput
 
796
>#stay</userinput
 
797
>), ou voltar a usar um contexto usado anteriormente na string (<userinput
 
798
>#pop</userinput
 
799
>).</para>
 
800
<para
 
801
>Para voltar mais passos, a palavra-chave #pop pode ser repetida: <userinput
 
802
>#pop#pop#pop</userinput
 
803
></para>
 
804
</listitem>
 
805
</itemizedlist>
 
806
 
 
807
<para
 
808
>Algumas regras podem ter <emphasis
 
809
>regras-filhas</emphasis
 
810
>, as quais podem ser avaliadas se e só se a regra-mãe foi verificada. O texto inteiro verificado terá o atributo definido pela regra-mãe. Uma regra com regras-filhas se pareceria com a seguinte:</para>
 
811
 
 
812
<programlisting
 
813
>&lt;NomedaRegra (atributos)&gt;
 
814
  &lt;NomedaRegraFilha (atributos) /&gt;
 
815
  ...
 
816
&lt;/NomedaRegra&gt;
 
817
</programlisting>
 
818
 
 
819
 
 
820
<para
 
821
>Os atributos específicos da regra variam e estão descritos nas seções a seguir.</para>
 
822
 
 
823
 
 
824
<itemizedlist>
 
825
<title
 
826
>Atributos comuns</title>
 
827
<para
 
828
>Todas as regras possuem os seguintes atributos em comum e estão disponíveis sempre que os <userinput
 
829
>(atributos comuns)</userinput
 
830
> aparecerem. O <emphasis
 
831
>attribute</emphasis
 
832
> e o <emphasis
 
833
>context</emphasis
 
834
> são atributos obrigatórios, enquanto os outros são opcionais. </para>
 
835
 
 
836
<listitem>
 
837
<para
 
838
><emphasis
 
839
>attribute</emphasis
 
840
>: Um atributo mapeia-se para um <emphasis
 
841
>itemData</emphasis
 
842
> definido.</para>
 
843
</listitem>
 
844
<listitem>
 
845
<para
 
846
><emphasis
 
847
>context</emphasis
 
848
>: Indica o contexto para onde muda o sistema de realce, se a regra corresponder.</para>
 
849
</listitem>
 
850
<listitem>
 
851
<para
 
852
><emphasis
 
853
>beginRegion</emphasis
 
854
>: Inicia um bloco de dobragem de código. Padrão: não definido.</para>
 
855
</listitem>
 
856
<listitem>
 
857
<para
 
858
><emphasis
 
859
>endRegion</emphasis
 
860
>: Fecha uma região de dobragem de código. Padrão: não definido.</para>
 
861
</listitem>
 
862
<listitem>
 
863
<para
 
864
><emphasis
 
865
>lookAhead</emphasis
 
866
>: Se for <emphasis
 
867
>true</emphasis
 
868
> (verdadeiro), o sistema de realce não irá processar o tamanho da correspondência. Padrão: <emphasis
 
869
>false</emphasis
 
870
>.</para>
 
871
</listitem>
 
872
<listitem>
 
873
<para
 
874
><emphasis
 
875
>firstNonSpace</emphasis
 
876
>: Corresponder apenas se o texto for o primeiro não-espaço em branco da linha. Padrão: <emphasis
 
877
>false</emphasis
 
878
>.</para>
 
879
</listitem>
 
880
<listitem>
 
881
<para
 
882
><emphasis
 
883
>column</emphasis
 
884
>: Corresponder apenas se a coluna corresponder. Padrão: não definido.</para>
 
885
</listitem>
 
886
</itemizedlist>
 
887
 
 
888
<itemizedlist>
 
889
<title
 
890
>Regras dinâmicas</title>
 
891
<para
 
892
>Algumas regras permitem o atributo opcional <userinput
 
893
>dynamic</userinput
 
894
>, do tipo booleano, cujo valor padrão é <emphasis
 
895
>false</emphasis
 
896
>. Se o 'dynamic' for <emphasis
 
897
>true</emphasis
 
898
>, uma regra poderá usar sequências de substituição que representam o texto correspondente a uma <emphasis
 
899
>expressão regular</emphasis
 
900
> que mudou para o contexto atual, nos seus atributos <userinput
 
901
>string</userinput
 
902
> ou <userinput
 
903
>char</userinput
 
904
>. Num <userinput
 
905
>string</userinput
 
906
>, o texto de substituição <replaceable
 
907
>%N</replaceable
 
908
> (em que o N é um número) será substituído pela captura correspondente a <replaceable
 
909
>N</replaceable
 
910
> na expressão regular de chamada. Num <userinput
 
911
>char</userinput
 
912
>, a sequência de substituição deverá ser um número <replaceable
 
913
>N</replaceable
 
914
> que será substituído pelo primeiro caracter da captura <replaceable
 
915
>N</replaceable
 
916
> da expressão regular de chamada. Sempre que uma regra permitir este atributo, irá conter um <emphasis
 
917
>(dinâmico)</emphasis
 
918
>.</para>
 
919
 
 
920
<listitem>
 
921
<para
 
922
><emphasis
 
923
>dynamic</emphasis
 
924
>: poderá ser <emphasis
 
925
>(true|false)</emphasis
 
926
>.</para>
 
927
</listitem>
 
928
</itemizedlist>
 
929
 
 
930
<sect2 id="highlighting-rules-in-detail">
 
931
<title
 
932
>As Regras em Detalhes</title>
 
933
 
 
934
<variablelist>
 
935
<varlistentry>
 
936
<term
 
937
>DetectChar</term>
 
938
<listitem>
 
939
<para
 
940
>Detecta um caractere específico. Comumente usado, por exemplo, para encontrar o final das strings citadas.</para>
 
941
<programlisting
 
942
>&lt;DetectChar char=&quot;(caracter)&quot; (atributos comuns) (dinâmico) /&gt;</programlisting>
 
943
<para
 
944
>O atributo <userinput
 
945
>char</userinput
 
946
> define o caractere a ser procurado.</para>
 
947
</listitem>
 
948
</varlistentry>
 
949
 
 
950
<varlistentry>
 
951
<term
 
952
>Detect2Chars</term>
 
953
<listitem>
 
954
<para
 
955
>Detecta dois caracteres específicos, em uma ordem definida.</para>
 
956
<programlisting
 
957
>&lt;Detect2Chars char=&quot;(caracter)&quot; char1=&quot;(caracter)&quot; (atributos comuns) (dinâmico) /&gt;</programlisting>
 
958
<para
 
959
>O atributo <userinput
 
960
>char</userinput
 
961
> define o primeiro caractere a ser procurado, e o atributo <userinput
 
962
>char1</userinput
 
963
> o segundo.</para>
 
964
</listitem>
 
965
</varlistentry>
 
966
 
 
967
<varlistentry>
 
968
<term
 
969
>AnyChar</term>
 
970
<listitem>
 
971
<para
 
972
>Detecta um caractere de um conjunto de caracteres especificados.</para>
 
973
<programlisting
 
974
>&lt;AnyChar String=&quot;(string)&quot; (atributos comuns) /&gt;</programlisting>
 
975
<para
 
976
>O atributo <userinput
 
977
>String</userinput
 
978
> define o conjunto de caracteres.</para>
 
979
</listitem>
 
980
</varlistentry>
 
981
 
 
982
<varlistentry>
 
983
<term
 
984
>StringDetect</term>
 
985
<listitem>
 
986
<para
 
987
>Detecta uma string exata.</para>
 
988
<programlisting
 
989
>&lt;StringDetect String=&quot;(string)&quot; [insensitive=&quot;TRUE|FALSE;&quot;] (atributos comuns) (dinâmico) /&gt;</programlisting>
 
990
<para
 
991
>O atributo <userinput
 
992
>String</userinput
 
993
> define a sequência a encontrar. O atributo <userinput
 
994
>insensitive</userinput
 
995
> é por padrão <userinput
 
996
>false</userinput
 
997
> e é passado à função de comparação de cadeias de caracteres. Se o valor for <userinput
 
998
>true</userinput
 
999
> a comparação não faz distinção entre maiúsculas e minúsculas.</para>
 
1000
</listitem>
 
1001
</varlistentry>
 
1002
 
 
1003
<varlistentry>
 
1004
<term
 
1005
>StringDetect</term>
 
1006
<listitem>
 
1007
<para
 
1008
>Detecta um texto exato, mas obriga adicionalmente a que esteja rodeado por limites de palavras, como um ponto <userinput
 
1009
>'.'</userinput
 
1010
> ou um espaço em branco no início e no fim da palavra. Pense em <userinput
 
1011
>\b&lt;texto&gt;\b</userinput
 
1012
> em termos de uma expressão regular, só que é mais rápido que a regra <userinput
 
1013
>Exp Reg</userinput
 
1014
>.</para>
 
1015
<programlisting
 
1016
>&lt;WordDetect String=&quot;(string)&quot; [insensitive=&quot;TRUE|FALSE;&quot;] (atributos comuns) (dinâmico) /&gt;</programlisting>
 
1017
<para
 
1018
>O atributo <userinput
 
1019
>String</userinput
 
1020
> define a sequência a encontrar. O atributo <userinput
 
1021
>insensitive</userinput
 
1022
> é por padrão <userinput
 
1023
>false</userinput
 
1024
> e é passado à função de comparação de cadeias de caracteres. Se o valor for <userinput
 
1025
>true</userinput
 
1026
> a comparação não faz distinção entre maiúsculas e minúsculas.</para>
 
1027
<para
 
1028
>Desde: Kate 3.5 (KDE 4.5)</para>
 
1029
</listitem>
 
1030
</varlistentry>
 
1031
 
 
1032
<varlistentry>
 
1033
<term
 
1034
>RegExpr</term>
 
1035
<listitem>
 
1036
<para
 
1037
>Procura por uma expressão regular.</para>
 
1038
<programlisting
 
1039
>&lt;RegExpr String=&quot;(texto)&quot; [insensitive=&quot;TRUE|FALSE;&quot;] [minimal=&quot;TRUE|FALSE&quot;] (atributos comuns) (dinâmico) /&gt;</programlisting>
 
1040
<para
 
1041
>O atributo <userinput
 
1042
>String</userinput
 
1043
> define a expressão regular.</para>
 
1044
<para
 
1045
>O <userinput
 
1046
>insensitive</userinput
 
1047
> é, por padrão, <userinput
 
1048
>false</userinput
 
1049
> e é passado ao motor de expressões regulares.</para>
 
1050
<para
 
1051
>O <userinput
 
1052
>minimal</userinput
 
1053
> é, por padrão, <userinput
 
1054
>false</userinput
 
1055
> e é passado ao motor de expressões regulares.</para>
 
1056
<para
 
1057
>Pelo motivo que as regras estão sempre iniciando a busca no início da string atual, uma expressão regular iniciada com um acento circunflexo (<literal
 
1058
>^ </literal
 
1059
>) indica que a regra deve ser coincidente somente no início da linha.</para>
 
1060
<para
 
1061
>Veja em <link linkend="regular-expressions"
 
1062
>Expressões Regulares</link
 
1063
> mais informações sobre o assunto.</para>
 
1064
</listitem>
 
1065
</varlistentry>
 
1066
 
 
1067
<varlistentry>
 
1068
<term
 
1069
>keyword</term>
 
1070
<listitem>
 
1071
<para
 
1072
>Detecta uma palavra-chave de uma lista especificada.</para>
 
1073
<programlisting
 
1074
>&lt;keyword String=&quot;(nome da lista)&quot; (atributos comuns) /&gt;</programlisting>
 
1075
<para
 
1076
>O atributo <userinput
 
1077
>String</userinput
 
1078
> identifica a lista de palavras-chave pelo nome. Uma lista com aquele nome, portanto, deve existir.</para>
 
1079
</listitem>
 
1080
</varlistentry>
 
1081
 
 
1082
<varlistentry>
 
1083
<term
 
1084
>Int</term>
 
1085
<listitem>
 
1086
<para
 
1087
>Detecta um número inteiro.</para>
 
1088
<para
 
1089
><programlisting
 
1090
>&lt;Int (atributos comuns) (dinâmico) /&gt;</programlisting
 
1091
></para>
 
1092
<para
 
1093
>Esta regra não tem atributos específicos. As regras-filho são tipicamente usadas para detectar as combinações de <userinput
 
1094
>L</userinput
 
1095
> e <userinput
 
1096
>U</userinput
 
1097
> depois do número, o que indica o tipo inteiro no código do programa. De fato, todas as regras são permitidas como regras-filhas, contudo, o <acronym
 
1098
>DTD</acronym
 
1099
> só permite a regra-filha <userinput
 
1100
>StringDetect</userinput
 
1101
>.</para>
 
1102
<para
 
1103
>O exemplo a seguir faz correspondência com os números inteiros, seguidos do caracter 'L'. <programlisting
 
1104
>&lt;Int attribute="Decimal" context="#stay" &gt;
 
1105
  &lt;StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/&gt;
 
1106
&lt;/Int&gt;
 
1107
</programlisting
 
1108
></para>
 
1109
 
 
1110
</listitem>
 
1111
</varlistentry>
 
1112
 
 
1113
<varlistentry>
 
1114
<term
 
1115
>Float</term>
 
1116
<listitem>
 
1117
<para
 
1118
>Detecta um número de ponto flutuante.</para>
 
1119
<para
 
1120
><programlisting
 
1121
>&lt;Float (atributos comuns) /&gt;</programlisting
 
1122
></para>
 
1123
<para
 
1124
>Esta regra não tem atributos específicos. O <userinput
 
1125
>AnyChar</userinput
 
1126
> é permitido como regra-filha e é tipicamente usada para detectar combinações; veja a regra <userinput
 
1127
>Int</userinput
 
1128
> para mais referências.</para>
 
1129
</listitem>
 
1130
</varlistentry>
 
1131
 
 
1132
<varlistentry>
 
1133
<term
 
1134
>HlCOct</term>
 
1135
<listitem>
 
1136
<para
 
1137
>Detecta uma representação de um número octal.</para>
 
1138
<para
 
1139
><programlisting
 
1140
>&lt;HlCOct (atributos comuns) /&gt;</programlisting
 
1141
></para>
 
1142
<para
 
1143
>Esta regra não possui atributos específicos.</para>
 
1144
</listitem>
 
1145
</varlistentry>
 
1146
 
 
1147
<varlistentry>
 
1148
<term
 
1149
>HlCHex</term>
 
1150
<listitem>
 
1151
<para
 
1152
>Detecta uma representação de um número hexadecimal.</para>
 
1153
<para
 
1154
><programlisting
 
1155
>&lt;HlCHex (atributos comuns) /&gt;</programlisting
 
1156
></para>
 
1157
<para
 
1158
>Esta regra não possui atributos específicos.</para>
 
1159
</listitem>
 
1160
</varlistentry>
 
1161
 
 
1162
<varlistentry>
 
1163
<term
 
1164
>HlCStringChar</term>
 
1165
<listitem>
 
1166
<para
 
1167
>Detecta um caractere de escape.</para>
 
1168
<para
 
1169
><programlisting
 
1170
>&lt;HlCStringChar (atributos comuns) /&gt;</programlisting
 
1171
></para>
 
1172
<para
 
1173
>Esta regra não possui atributos específicos.</para>
 
1174
 
 
1175
<para
 
1176
>Corresponde a representações literais dos caracteres usados normalmente no código do programa como, por exemplo, o <userinput
 
1177
>\n</userinput
 
1178
> (nova linha) ou o <userinput
 
1179
>\t</userinput
 
1180
> (TAB).</para>
 
1181
 
 
1182
<para
 
1183
>Os seguintes caracteres irão corresponder se estiverem após uma barra invertida (<literal
 
1184
>\</literal
 
1185
>): <userinput
 
1186
>abefnrtv&quot;'?\</userinput
 
1187
>. Além disso, os números escapados em hexadecimal como, por exemplo, o <userinput
 
1188
>\xff</userinput
 
1189
> e os números octais escapados, como o <userinput
 
1190
>\033</userinput
 
1191
>, irão corresponder.</para>
 
1192
 
 
1193
</listitem>
 
1194
</varlistentry>
 
1195
 
 
1196
<varlistentry>
 
1197
<term
 
1198
>HlCChar</term>
 
1199
<listitem>
 
1200
<para
 
1201
>Detecta um caracter do C.</para>
 
1202
<para
 
1203
><programlisting
 
1204
>&lt;HlCChar (atributos comuns) /&gt;</programlisting
 
1205
></para>
 
1206
<para
 
1207
>Esta regra não possui atributos específicos.</para>
 
1208
 
 
1209
<para
 
1210
>Corresponde aos caracteres em C colocados dentro de um tique (Exemplo: <userinput
 
1211
>'c'</userinput
 
1212
>). Como tal, dentro dos tiques poderá existir um único caracter ou um caracter de escape. Veja o 'HlCStringChar' para ver as sequências de caracteres de escape correspondentes.</para>
 
1213
 
 
1214
</listitem>
 
1215
</varlistentry>
 
1216
 
 
1217
<varlistentry>
 
1218
<term
 
1219
>RangeDetect</term>
 
1220
<listitem>
 
1221
<para
 
1222
>Detecta uma string com os caracteres de início e fim definidos.</para>
 
1223
<programlisting
 
1224
>&lt;RangeDetect char=&quot;(caractere)&quot;  char1=&quot;(caractere)&quot; (atributos comuns) /&gt;</programlisting>
 
1225
<para
 
1226
>O <userinput
 
1227
>char</userinput
 
1228
> define o caracter de início e o <userinput
 
1229
>char1</userinput
 
1230
> o caracter que termina o intervalo.</para>
 
1231
<para
 
1232
>Útil para detectar, por exemplo, pequenas cadeias de caracteres entre aspas e semelhantes, mas repare que, uma vez que o motor de realce de sintaxe funciona com uma linha de cada vez, isto não irá encontrar as cadeias de caracteres que se prolonguem por mais de uma linha.</para>
 
1233
</listitem>
 
1234
</varlistentry>
 
1235
 
 
1236
<varlistentry>
 
1237
<term
 
1238
>LineContinue</term>
 
1239
<listitem>
 
1240
<para
 
1241
>Corresponde a uma barra invertida (<userinput
 
1242
>'\'</userinput
 
1243
>) no final da linha.</para>
 
1244
<programlisting
 
1245
>&lt;LineContinue (atributos comuns) /&gt;</programlisting>
 
1246
<para
 
1247
>Esta regra não possui atributos específicos.</para>
 
1248
<para
 
1249
>Esta regra é útil para mudar de contexto no fim da linha, se o último caractere for uma barra invertida (<userinput
 
1250
>'\'</userinput
 
1251
>). Isto é necessário, por exemplo no C/C++, para continuar as macros ou cadeias de caracteres.</para>
 
1252
</listitem>
 
1253
</varlistentry>
 
1254
 
 
1255
<varlistentry>
 
1256
<term
 
1257
>IncludeRules</term>
 
1258
<listitem>
 
1259
<para
 
1260
>Inclui as regras de outro contexto ou linguagem/arquivo.</para>
 
1261
<programlisting
 
1262
>&lt;IncludeRules context=&quot;ligacao_contexto&quot; [includeAttrib=&quot;true|false&quot;] /&gt;</programlisting>
 
1263
 
 
1264
<para
 
1265
>O atributo <userinput
 
1266
>context</userinput
 
1267
> define o contexto a incluir.</para>
 
1268
<para
 
1269
>Se for texto simples, inclui todas as regras definidas no contexto atual, como por exemplo: <programlisting
 
1270
>&lt;IncludeRules context=&quot;outroContexto&quot; /&gt;</programlisting
 
1271
></para>
 
1272
 
 
1273
<para
 
1274
>Se o texto começar por <userinput
 
1275
>##</userinput
 
1276
>, o sistema de realce irá procurar outra definição de linguagem com o nome indicado, como por exemplo: <programlisting
 
1277
>&lt;IncludeRules context=&quot;##C++&quot; /&gt;</programlisting
 
1278
></para>
 
1279
<para
 
1280
>Se o atributo <userinput
 
1281
>includeAttrib</userinput
 
1282
> for <emphasis
 
1283
>true</emphasis
 
1284
>, muda o atributo de destino para o da origem. Isto é necessário para fazer, por exemplo, funcionar os comentários, se o texto correspondente ao contexto incluído for de um realce diferente do contexto-anfitrião. </para>
 
1285
</listitem>
 
1286
</varlistentry>
 
1287
 
 
1288
 
 
1289
<varlistentry>
 
1290
<term
 
1291
>DetectSpaces</term>
 
1292
<listitem>
 
1293
<para
 
1294
>Detecta espaços em branco.</para>
 
1295
<programlisting
 
1296
>&lt;DetectSpaces (atributos comuns) /&gt;</programlisting>
 
1297
 
 
1298
<para
 
1299
>Esta regra não possui atributos específicos.</para>
 
1300
<para
 
1301
>Use esta regra se souber que poderão existir vários espaços em branco à frente como, por exemplo, no início das linhas recuadas. Esta regra irá ignorar todos os espaços em branco, em vez de testar várias regras e ignorar uma de cada vez, devido a uma falta de correspondência.</para>
 
1302
</listitem>
 
1303
</varlistentry>
 
1304
 
 
1305
 
 
1306
<varlistentry>
 
1307
<term
 
1308
>DetectIdentifier</term>
 
1309
<listitem>
 
1310
<para
 
1311
>Detecta os textos dos identificadores (como acontece na expressão regular: [a-zA-Z_][a-zA-Z0-9_]*).</para>
 
1312
<programlisting
 
1313
>&lt;DetectIdentifier (atributos comuns) /&gt;</programlisting>
 
1314
 
 
1315
<para
 
1316
>Esta regra não possui atributos específicos.</para>
 
1317
<para
 
1318
>Use esta regra para ignorar uma sequência de caracteres de palavras de uma vez, em vez de testar com várias regras e ignorar uma de cada vez, por falta de correspondência.</para>
 
1319
</listitem>
 
1320
</varlistentry>
 
1321
 
 
1322
</variablelist>
 
1323
</sect2>
 
1324
 
 
1325
<sect2>
 
1326
<title
 
1327
>Dicas &amp; Truques</title>
 
1328
 
 
1329
<itemizedlist>
 
1330
<para
 
1331
>Logo que tenha compreendido como funciona a mudança de contexto, será fácil de criar definições de realce. Ainda que você deva verificar com cuidado a regra que escolher, dependendo da situação, as expressões regulares são muito poderosas, só que são lentas em comparação com as outras regras. Assim, você poderá considerar útil as seguintes dicas. </para>
 
1332
 
 
1333
<listitem>
 
1334
<para
 
1335
>Se você só corresponder com 2 caracteres, use o <userinput
 
1336
>Detect2Chars</userinput
 
1337
> em vez do <userinput
 
1338
>StringDetect</userinput
 
1339
>. O mesmo aplica-se ao <userinput
 
1340
>DetectChar</userinput
 
1341
>.</para>
 
1342
</listitem>
 
1343
<listitem>
 
1344
<para
 
1345
>As expressões regulares são fáceis de usar mas, normalmente, existe outra forma muito mais rápida de obter o mesmo resultado. Assuma que só deseja corresponder com o caracter <userinput
 
1346
>'#'</userinput
 
1347
> se for o primeiro caracter da linha. Uma solução baseada em expressões regulares seria semelhante à seguinte: <programlisting
 
1348
>&lt;RegExpr attribute=&quot;Macro&quot; context=&quot;macro&quot; String=&quot;^\s*#&quot; /&gt;</programlisting
 
1349
> Você poderá obter o mesmo se usar: <programlisting
 
1350
>&lt;DetectChar attribute=&quot;Macro&quot; context=&quot;macro&quot; char=&quot;#&quot; firstNonSpace=&quot;true&quot; /&gt;</programlisting
 
1351
> Se quiser corresponder à expressão regular <userinput
 
1352
>'^#'</userinput
 
1353
>, poderá usar ainda o <userinput
 
1354
>DetectChar</userinput
 
1355
> com o atributo <userinput
 
1356
>column=&quot;0&quot;</userinput
 
1357
>. O atributo <userinput
 
1358
>column</userinput
 
1359
> conta com base no número de caracteres; assim, uma tabulação conta como se fosse apenas um caracter. </para>
 
1360
</listitem>
 
1361
<listitem>
 
1362
<para
 
1363
>Você poderá mudar de contextos sem processar os caracteres. Assuma que deseja mudar de contexto quando encontrar o texto <userinput
 
1364
>*/</userinput
 
1365
>, mas necessita de processar essa sequência no próximo contexto. A regra abaixo irá corresponder e o atributo <userinput
 
1366
>lookAhead</userinput
 
1367
> fará com que o sistema de realce mantenha o texto correspondente no próximo contexto. <programlisting
 
1368
>&lt;Detect2Chars attribute=&quot;Comment&quot; context=&quot;#pop&quot; char=&quot;*&quot; char1=&quot;/&quot; lookAhead=&quot;true&quot; /&gt;</programlisting>
 
1369
</para>
 
1370
</listitem>
 
1371
<listitem>
 
1372
<para
 
1373
>Use o <userinput
 
1374
>DetectSpaces</userinput
 
1375
> se você souber que irão ocorrer vários espaços em branco.</para>
 
1376
</listitem>
 
1377
<listitem>
 
1378
<para
 
1379
>Use o <userinput
 
1380
>DetectIdentifier</userinput
 
1381
> em vez da expressão regular <userinput
 
1382
>'[a-zA-Z_]\w*'</userinput
 
1383
>.</para>
 
1384
</listitem>
 
1385
<listitem>
 
1386
<para
 
1387
>Use os estilos padrão sempre que puder. Desta forma, o usuário irá encontrar um ambiente familiar.</para>
 
1388
</listitem>
 
1389
<listitem>
 
1390
<para
 
1391
>Procure em outros arquivos XML para ver como as outras pessoas implementam as regras mais complicadas.</para>
 
1392
</listitem>
 
1393
<listitem>
 
1394
<para
 
1395
>Você poderá validar todos os arquivos XML se usar o comando <command
 
1396
>xmllint --dtdvalid language.dtd aMinhaSintaxe.xml</command
 
1397
>.</para>
 
1398
</listitem>
 
1399
<listitem>
 
1400
<para
 
1401
>Se repetir algumas expressões regulares complexas com frequência, você poderá usar as <emphasis
 
1402
>ENTIDADES</emphasis
 
1403
>. Por exemplo:</para>
 
1404
<programlisting
 
1405
>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
 
1406
&lt;!DOCTYPE language SYSTEM "language.dtd"
 
1407
[
 
1408
        &lt;!ENTITY referencia    "[A-Za-z_:][\w.:_-]*"&gt;
 
1409
]&gt;
 
1410
</programlisting>
 
1411
<para
 
1412
>Agora, você poderá usar o <emphasis
 
1413
>&amp;referencia;</emphasis
 
1414
> em vez da expressão regular.</para>
 
1415
</listitem>
 
1416
</itemizedlist>
 
1417
</sect2>
 
1418
 
 
1419
</sect1>
 
1420
 
 
1421
</appendix>