1
<appendix id="highlight">
10
<othercredit role="translator"
18
>lisiane@conectiva.com.br</email
28
>Trabalhando com Realce de Sintaxe</title>
30
<sect1 id="highlight-overview">
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>
40
><imagedata format="PNG" fileref="highlighted.png"/></imageobject>
43
>Uma função Perl, representada com realce de sintaxe.</phrase
47
>Uma função Perl, representada com realce de sintaxe.</para>
53
><imagedata format="PNG" fileref="unhighlighted.png"/></imageobject>
56
>A mesma função Perl, sem realce de sintaxe.</phrase
60
>A mesma função Perl, sem realce de sintaxe.</para
65
>Dos dois exemplos, qual é o mais fácil de ler?</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>
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
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 & Tipos de Arquivo</link
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>
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 & Tipos de Arquivo</link
99
> da <link linkend="config-dialog"
100
>Janela de Configuração</link
106
<sect1 id="katehighlight-system">
109
>O Sistema de Realce de Sintaxe do &kate;</title>
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>
114
<sect2 id="katehighlight-howitworks">
117
>Como funciona</title>
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>
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>
126
>As definições de sintaxe usadas pelo sistema de realce de sintaxe do &kate; são arquivos &XML; que contém <itemizedlist>
129
>Regras para a detecção do texto inteiro, organizado em blocos de contexto</para
133
>Listas de palavras-chave</para
137
>Definições de Item de Estilo</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>
147
<sect2 id="highlight-system-rules">
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>
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>
160
>Os contextos poderão ser gerados dinamicamente, para permitir a utilização de dados específicos das instâncias nas regras.</para>
164
<sect2 id="highlight-context-styles-keywords">
166
>Estilos de Contexto e Palavras-Chave</title>
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>
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>
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>
179
<sect2 id="kate-highlight-system-default-styles">
181
>Estilos Padrão</title>
184
>Se você abrir um arquivo de código em C++, um arquivo de &Java; e um documento em <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>
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>
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>
202
<sect1 id="katehighlight-xml-format">
204
>O Formato &XML; de Definição de Realce</title>
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>
214
>A definição formal, mais conhecida por <acronym
216
>, é guardada no arquivo <filename
217
>language.dtd</filename
218
>, o qual deve estar instalado no seu sistema na pasta <filename
221
>/share/apps/katepart/syntax</filename
226
>Seções principais dos arquivos de Definições de Realce do &kate;</title>
230
>Um arquivo de realce contém um cabeçalho que define a versão do XML e o tipo de documento:</term>
233
><?xml version="1.0" encoding="UTF-8"?>
234
<!DOCTYPE language SYSTEM "language.dtd">
241
>A raiz do arquivo de definição é o elemento <userinput
243
>. Os atributos disponíveis são:</term>
247
>Atributos necessários:</para>
251
> define o nome da linguagem. Ele aparece nos respectivos menus e janelas.</para>
255
> indica a categoria.</para>
258
>extensions</userinput
259
> define as extensões dos arquivos, como por exemplo "*.cpp;*.h"</para>
262
>Atributos opcionais:</para>
266
> associa os arquivos com base no Tipo &MIME;.</para>
270
> indica a versão atual do arquivo de definição.</para>
273
>kateversion</userinput
274
> indica a última versão suportada pelo &kate;.</para>
277
>casesensitive</userinput
278
> define se as palavras-chave fazem distinção entre maiúsculas e minúsculas.</para>
282
> é necessário se outro arquivo de definições de realce usar as mesmas extensões. Ganhará o que tiver maior prioridade.</para>
286
> contém o nome do autor e o seu endereço de e-mail.</para>
290
> contém a licença, que é normalmente a LGPL, a Artistic, a GPL, entre outras.</para>
294
> define se o nome deverá aparecer nos menus do &kate;.</para>
296
>Assim, a próxima linha parece-se com o seguinte:</para>
298
><language name="C++" version="1.00" kateversion="2.4" section="Sources" extensions="*.cpp;*.h" />
306
>A seguir vem o elemento <userinput
307
>highlighting</userinput
308
>, que contém o elemento opcional <userinput
310
> e os elementos obrigatórios <userinput
313
>itemDatas</userinput
317
>O elemento <userinput
319
> contém uma lista de palavras-chave. Neste caso, as palavras-chave são a <emphasis
323
>.Você poderá adicionar tantas listas quanto desejar.</para>
325
>O elemento <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
331
> e uma regra que detecta aspas e muda o contexto para <emphasis
333
> (cadeia de caracteres). Para aprender mais sobre as regras, leia o próximo capítulo.</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
340
>Normal Text</emphasis
341
> (Texto Normal), <emphasis
343
> (Cadeia de Caracteres) e <emphasis
345
> (Palavra-Chave). </para>
347
><highlighting>
348
<list name="um_nome">
349
<item> class </item>
350
<item> const </item>
353
<context attribute="Normal Text" lineEndContext="#pop" name="Normal Text" >
354
<keyword attribute="Keyword" context="#stay" String="somename" />
355
<DetectChar attribute="String" context="string" char="&quot;" />
357
<context attribute="String" lineEndContext="#stay" name="string" >
358
<DetectChar attribute="String" context="#pop" char="&quot;" />
362
<itemData name="Normal Text" defStyleNum="dsNormal" />
363
<itemData name="Keyword" defStyleNum="dsKeyword" />
364
<itemData name="String" defStyleNum="dsString" />
366
</highlighting>
373
>A última parte de uma definição de realce é a seção opcional <userinput
375
>. Ela poderá conter informações sobre as palavras-chave, expansão/recolhimento de código, comentários e recuo.</term>
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
383
> com o atributo adicional <emphasis
385
>. Isto aplica-se se o usuário pressionar o atalho correspondente para <emphasis
386
>comentar/descomentar</emphasis
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>
395
<comment name="singleLine" start="#"/>
397
<keywords casesensitive="1"/>
409
<sect2 id="kate-highlight-sections">
411
>As Seções em Detalhe</title>
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>
418
>O elemento <userinput
420
> pertence ao grupo <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>
429
> o nome do contexto. As regras irão usar este nome para indicar o contexto para onde mudar, se a regra corresponder.</para>
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
435
> para não mudar de contexto (⪚, não fazer nada) ou o <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>
442
>lineBeginContext</userinput
443
> define o contexto, se for encontrado o início de uma linha. Padrão: #stay.</para>
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
452
>fallthroughContext</userinput
453
> define o próximo contexto, se nenhuma regra corresponder.</para>
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
468
>O elemento <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>
478
> define o nome do 'itemData'. Os contextos e regras irão usar este nome no seu atributo <emphasis
480
>, para referenciar um 'itemData'.</para>
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>
488
> define uma cor. Os formatos válidos são o '#rrggbb' ou '#rgb'.</para>
492
> define a cor da seleção.</para>
498
> (verdadeiro), irá colocar o texto em itálico.</para>
504
> (verdadeiro), irá colocar o texto em negrito.</para>
507
>underline</userinput
510
> (verdadeiro), irá colocar o texto sublinhado.</para>
513
>strikeout</userinput
516
> (verdadeiro), irá colocar o texto traçado.</para>
519
>spellChecking</userinput
522
>, o texto terá sua ortografia verificada, caso contrário ele será ignorado durante a verificação ortográfica.</para>
529
>O elemento <userinput
531
>, no grupo <userinput
533
>, define as propriedades das palavras-chave. Os atributos disponíveis são:</term>
538
>casesensitive</userinput
539
> poderá ser <emphasis
541
> (verdadeiro) ou <emphasis
543
> (falso). Se for <emphasis
545
>, todas as palavras-chave farão distinção entre maiúsculas e minúsculas</para>
548
>weakDeliminator</userinput
549
> é uma lista de caracteres que não irão atuar como separadores de palavras. Por exemplo, o ponto <userinput
551
> é um separador de palavras. Assuma que uma palavra-chave num <userinput
553
> contém um ponto; nesse caso, só irá corresponder se indicar que o ponto é um delimitador fraco.</para>
556
>additionalDeliminator</userinput
557
> define os delimitadores ou separadores adicionais.</para>
560
>wordWrapDeliminator</userinput
561
> define os caracteres após os quais poderá ocorrer uma mudança de linha.</para>
563
>Os delimitadores pré-definidos e de mudança de linha são os caracteres <userinput
564
>.():!+,-<=>%&*/;?[]^{|}~\</userinput
565
>, o espaço (<userinput
567
>) e a tabulação (<userinput
576
>O elemento <userinput
578
>, no grupo <userinput
580
>, define as propriedades dos comentários que são usadas nas opções <menuchoice
582
>Ferramentas</guimenu
584
>Comentar</guimenuitem
588
>Ferramentas</guimenu
590
>Descomentar</guimenuitem
592
>. Os atributos disponíveis são:</term>
598
> tanto poderá ser <emphasis
599
>singleLine</emphasis
602
>. Se escolher o <emphasis
604
>, serão necessários os atributos <emphasis
612
> define o texto usado para iniciar um comentário. No C++, este será o "/*".</para>
616
> define o texto usado para fechar um comentário. No C++, será o "*/".</para>
620
> deverá ser o nome do comentário multi-linhas que poderá expandir ou recolher. Assuma que tem o <emphasis
621
>beginRegion="Comment"</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>
633
>O elemento <userinput
635
>, no grupo <userinput
637
>, define as propriedades de dobragem/desdobramento do código. Os atributos disponíveis são:</term>
642
>indentationsensitive</userinput
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
654
>O elemento <userinput
655
>indentation</userinput
656
>, no grupo <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>
664
> é o nome do sistema de recuo. Os sistemas disponíveis atualmente são: <emphasis
665
>normal, cstyle, haskell, lilypond, lisp, python, ruby</emphasis
678
<sect2 id="kate-highlight-default-styles">
680
>Estilos Padrão Disponíveis</title>
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>
688
>Assim, aqui aparece somente a lista de estilos padrão disponíveis:</term>
693
>, usado para o texto normal.</para>
696
>dsKeyword</userinput
697
>, usado nas palavras-chave.</para>
700
>dsDataType</userinput
701
>, usado nos tipos de dados.</para>
705
>, usado nos valores decimais.</para>
709
>, usados nos valores com uma base diferente de 10.</para>
713
>, usado nos valores de ponto flutuante.</para>
717
>, usado para um caracter único.</para>
721
>, usado para conjuntos ou cadeias de caracteres.</para>
724
>dsComment</userinput
725
>, usado nos comentários.</para>
729
>, usado para outras coisas.</para>
733
>, usado nas mensagens de aviso.</para>
736
>dsFunction</userinput
737
>, usado nas chamadas a funções.</para>
740
>dsRegionMarker</userinput
741
>, usado nos marcadores de regiões.</para>
745
>, usado para realçar erros e sintaxes inválidas.</para>
754
<sect1 id="kate-highlight-rules-detailled">
756
>Regras de Detecção de Realce</title>
759
>Esta seção descreve as regras de detecção de sintaxe.</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
764
> definido pela regra aos caracteres correspondentes; uma regra poderá perguntar se o contexto atual será alterado.</para>
767
>As regras se parecem com isto:</para>
770
><NomeRegra attribute="(identificador)" context="(identifier|order)" [atributos específicos da regra] /></programlisting>
775
> identifica o estilo a usar para os caracteres correspondentes pelo nome ou índice; o <emphasis
777
> identifica, como esperado, o contexto a usar a partir daqui.</para>
782
> pode ser identificado por:</para>
788
>identificador</emphasis
789
>, que é o nome do outro contexto.</para>
795
> diz ao mecanismo para ficar no contexto atual (<userinput
797
>), ou voltar a usar um contexto usado anteriormente na string (<userinput
801
>Para voltar mais passos, a palavra-chave #pop pode ser repetida: <userinput
802
>#pop#pop#pop</userinput
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>
813
><NomedaRegra (atributos)>
814
<NomedaRegraFilha (atributos) />
821
>Os atributos específicos da regra variam e estão descritos nas seções a seguir.</para>
826
>Atributos comuns</title>
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
834
> são atributos obrigatórios, enquanto os outros são opcionais. </para>
840
>: Um atributo mapeia-se para um <emphasis
848
>: Indica o contexto para onde muda o sistema de realce, se a regra corresponder.</para>
853
>beginRegion</emphasis
854
>: Inicia um bloco de dobragem de código. Padrão: não definido.</para>
860
>: Fecha uma região de dobragem de código. Padrão: não definido.</para>
868
> (verdadeiro), o sistema de realce não irá processar o tamanho da correspondência. Padrão: <emphasis
875
>firstNonSpace</emphasis
876
>: Corresponder apenas se o texto for o primeiro não-espaço em branco da linha. Padrão: <emphasis
884
>: Corresponder apenas se a coluna corresponder. Padrão: não definido.</para>
890
>Regras dinâmicas</title>
892
>Algumas regras permitem o atributo opcional <userinput
894
>, do tipo booleano, cujo valor padrão é <emphasis
896
>. Se o 'dynamic' for <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
906
>, o texto de substituição <replaceable
908
> (em que o N é um número) será substituído pela captura correspondente a <replaceable
910
> na expressão regular de chamada. Num <userinput
912
>, a sequência de substituição deverá ser um número <replaceable
914
> que será substituído pelo primeiro caracter da captura <replaceable
916
> da expressão regular de chamada. Sempre que uma regra permitir este atributo, irá conter um <emphasis
917
>(dinâmico)</emphasis
924
>: poderá ser <emphasis
925
>(true|false)</emphasis
930
<sect2 id="highlighting-rules-in-detail">
932
>As Regras em Detalhes</title>
940
>Detecta um caractere específico. Comumente usado, por exemplo, para encontrar o final das strings citadas.</para>
942
><DetectChar char="(caracter)" (atributos comuns) (dinâmico) /></programlisting>
944
>O atributo <userinput
946
> define o caractere a ser procurado.</para>
955
>Detecta dois caracteres específicos, em uma ordem definida.</para>
957
><Detect2Chars char="(caracter)" char1="(caracter)" (atributos comuns) (dinâmico) /></programlisting>
959
>O atributo <userinput
961
> define o primeiro caractere a ser procurado, e o atributo <userinput
972
>Detecta um caractere de um conjunto de caracteres especificados.</para>
974
><AnyChar String="(string)" (atributos comuns) /></programlisting>
976
>O atributo <userinput
978
> define o conjunto de caracteres.</para>
987
>Detecta uma string exata.</para>
989
><StringDetect String="(string)" [insensitive="TRUE|FALSE;"] (atributos comuns) (dinâmico) /></programlisting>
991
>O atributo <userinput
993
> define a sequência a encontrar. O atributo <userinput
994
>insensitive</userinput
995
> é por padrão <userinput
997
> e é passado à função de comparação de cadeias de caracteres. Se o valor for <userinput
999
> a comparação não faz distinção entre maiúsculas e minúsculas.</para>
1005
>StringDetect</term>
1008
>Detecta um texto exato, mas obriga adicionalmente a que esteja rodeado por limites de palavras, como um ponto <userinput
1010
> ou um espaço em branco no início e no fim da palavra. Pense em <userinput
1011
>\b<texto>\b</userinput
1012
> em termos de uma expressão regular, só que é mais rápido que a regra <userinput
1016
><WordDetect String="(string)" [insensitive="TRUE|FALSE;"] (atributos comuns) (dinâmico) /></programlisting>
1018
>O atributo <userinput
1020
> define a sequência a encontrar. O atributo <userinput
1021
>insensitive</userinput
1022
> é por padrão <userinput
1024
> e é passado à função de comparação de cadeias de caracteres. Se o valor for <userinput
1026
> a comparação não faz distinção entre maiúsculas e minúsculas.</para>
1028
>Desde: Kate 3.5 (KDE 4.5)</para>
1037
>Procura por uma expressão regular.</para>
1039
><RegExpr String="(texto)" [insensitive="TRUE|FALSE;"] [minimal="TRUE|FALSE"] (atributos comuns) (dinâmico) /></programlisting>
1041
>O atributo <userinput
1043
> define a expressão regular.</para>
1046
>insensitive</userinput
1047
> é, por padrão, <userinput
1049
> e é passado ao motor de expressões regulares.</para>
1053
> é, por padrão, <userinput
1055
> e é passado ao motor de expressões regulares.</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
1059
>) indica que a regra deve ser coincidente somente no início da linha.</para>
1061
>Veja em <link linkend="regular-expressions"
1062
>Expressões Regulares</link
1063
> mais informações sobre o assunto.</para>
1072
>Detecta uma palavra-chave de uma lista especificada.</para>
1074
><keyword String="(nome da lista)" (atributos comuns) /></programlisting>
1076
>O atributo <userinput
1078
> identifica a lista de palavras-chave pelo nome. Uma lista com aquele nome, portanto, deve existir.</para>
1087
>Detecta um número inteiro.</para>
1090
><Int (atributos comuns) (dinâmico) /></programlisting
1093
>Esta regra não tem atributos específicos. As regras-filho são tipicamente usadas para detectar as combinações de <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
1099
> só permite a regra-filha <userinput
1100
>StringDetect</userinput
1103
>O exemplo a seguir faz correspondência com os números inteiros, seguidos do caracter 'L'. <programlisting
1104
><Int attribute="Decimal" context="#stay" >
1105
<StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/>
1118
>Detecta um número de ponto flutuante.</para>
1121
><Float (atributos comuns) /></programlisting
1124
>Esta regra não tem atributos específicos. O <userinput
1126
> é permitido como regra-filha e é tipicamente usada para detectar combinações; veja a regra <userinput
1128
> para mais referências.</para>
1137
>Detecta uma representação de um número octal.</para>
1140
><HlCOct (atributos comuns) /></programlisting
1143
>Esta regra não possui atributos específicos.</para>
1152
>Detecta uma representação de um número hexadecimal.</para>
1155
><HlCHex (atributos comuns) /></programlisting
1158
>Esta regra não possui atributos específicos.</para>
1164
>HlCStringChar</term>
1167
>Detecta um caractere de escape.</para>
1170
><HlCStringChar (atributos comuns) /></programlisting
1173
>Esta regra não possui atributos específicos.</para>
1176
>Corresponde a representações literais dos caracteres usados normalmente no código do programa como, por exemplo, o <userinput
1178
> (nova linha) ou o <userinput
1183
>Os seguintes caracteres irão corresponder se estiverem após uma barra invertida (<literal
1186
>abefnrtv"'?\</userinput
1187
>. Além disso, os números escapados em hexadecimal como, por exemplo, o <userinput
1189
> e os números octais escapados, como o <userinput
1191
>, irão corresponder.</para>
1201
>Detecta um caracter do C.</para>
1204
><HlCChar (atributos comuns) /></programlisting
1207
>Esta regra não possui atributos específicos.</para>
1210
>Corresponde aos caracteres em C colocados dentro de um tique (Exemplo: <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>
1222
>Detecta uma string com os caracteres de início e fim definidos.</para>
1224
><RangeDetect char="(caractere)" char1="(caractere)" (atributos comuns) /></programlisting>
1228
> define o caracter de início e o <userinput
1230
> o caracter que termina o intervalo.</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>
1238
>LineContinue</term>
1241
>Corresponde a uma barra invertida (<userinput
1243
>) no final da linha.</para>
1245
><LineContinue (atributos comuns) /></programlisting>
1247
>Esta regra não possui atributos específicos.</para>
1249
>Esta regra é útil para mudar de contexto no fim da linha, se o último caractere for uma barra invertida (<userinput
1251
>). Isto é necessário, por exemplo no C/C++, para continuar as macros ou cadeias de caracteres.</para>
1257
>IncludeRules</term>
1260
>Inclui as regras de outro contexto ou linguagem/arquivo.</para>
1262
><IncludeRules context="ligacao_contexto" [includeAttrib="true|false"] /></programlisting>
1265
>O atributo <userinput
1267
> define o contexto a incluir.</para>
1269
>Se for texto simples, inclui todas as regras definidas no contexto atual, como por exemplo: <programlisting
1270
><IncludeRules context="outroContexto" /></programlisting
1274
>Se o texto começar por <userinput
1276
>, o sistema de realce irá procurar outra definição de linguagem com o nome indicado, como por exemplo: <programlisting
1277
><IncludeRules context="##C++" /></programlisting
1280
>Se o atributo <userinput
1281
>includeAttrib</userinput
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>
1291
>DetectSpaces</term>
1294
>Detecta espaços em branco.</para>
1296
><DetectSpaces (atributos comuns) /></programlisting>
1299
>Esta regra não possui atributos específicos.</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>
1308
>DetectIdentifier</term>
1311
>Detecta os textos dos identificadores (como acontece na expressão regular: [a-zA-Z_][a-zA-Z0-9_]*).</para>
1313
><DetectIdentifier (atributos comuns) /></programlisting>
1316
>Esta regra não possui atributos específicos.</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>
1327
>Dicas & Truques</title>
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>
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
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
1347
> se for o primeiro caracter da linha. Uma solução baseada em expressões regulares seria semelhante à seguinte: <programlisting
1348
><RegExpr attribute="Macro" context="macro" String="^\s*#" /></programlisting
1349
> Você poderá obter o mesmo se usar: <programlisting
1350
><DetectChar attribute="Macro" context="macro" char="#" firstNonSpace="true" /></programlisting
1351
> Se quiser corresponder à expressão regular <userinput
1353
>, poderá usar ainda o <userinput
1354
>DetectChar</userinput
1355
> com o atributo <userinput
1356
>column="0"</userinput
1357
>. O atributo <userinput
1359
> conta com base no número de caracteres; assim, uma tabulação conta como se fosse apenas um caracter. </para>
1363
>Você poderá mudar de contextos sem processar os caracteres. Assuma que deseja mudar de contexto quando encontrar o texto <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
><Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" lookAhead="true" /></programlisting>
1374
>DetectSpaces</userinput
1375
> se você souber que irão ocorrer vários espaços em branco.</para>
1380
>DetectIdentifier</userinput
1381
> em vez da expressão regular <userinput
1382
>'[a-zA-Z_]\w*'</userinput
1387
>Use os estilos padrão sempre que puder. Desta forma, o usuário irá encontrar um ambiente familiar.</para>
1391
>Procure em outros arquivos XML para ver como as outras pessoas implementam as regras mais complicadas.</para>
1395
>Você poderá validar todos os arquivos XML se usar o comando <command
1396
>xmllint --dtdvalid language.dtd aMinhaSintaxe.xml</command
1401
>Se repetir algumas expressões regulares complexas com frequência, você poderá usar as <emphasis
1402
>ENTIDADES</emphasis
1403
>. Por exemplo:</para>
1405
><?xml version="1.0" encoding="UTF-8"?>
1406
<!DOCTYPE language SYSTEM "language.dtd"
1408
<!ENTITY referencia "[A-Za-z_:][\w.:_-]*">
1412
>Agora, você poderá usar o <emphasis
1413
>&referencia;</emphasis
1414
> em vez da expressão regular.</para>