<appendix id="highlight">
<appendixinfo>
<authorgroup>
<author
><personname
><firstname
></firstname
></personname
></author>
<othercredit role="translator"
><firstname
>Lisiane</firstname
> <surname
>Sztoltz</surname
><affiliation
><address
> <email
>lisiane@conectiva.com.br</email
></address
></affiliation
><contrib
>Tradução</contrib
></othercredit
> 
</authorgroup>
</appendixinfo>
<title
>Trabalhando com Realce de Sintaxe</title>

<sect1 id="highlight-overview">

<title
>Visão geral</title>

<para
>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>

<mediaobject>
<imageobject
><imagedata format="PNG" fileref="highlighted.png"/></imageobject>
<textobject
><phrase
>Uma função perl, renderizada com realce de sintaxe.</phrase
></textobject>
<caption
><para
>Uma função perl, renderizada com realce de sintaxe.</para>
</caption>
</mediaobject>

<mediaobject>
<imageobject
><imagedata format="PNG" fileref="unhighlighted.png"/></imageobject>
<textobject
><phrase
>A mesma função perl, sem realce de sintaxe.</phrase
></textobject>
<caption
><para
>A mesma função perl, sem realce de sintaxe.</para
></caption>
</mediaobject>

<para
>Dos dois exemplos, qual é o mais fácil de ler?</para>

<para
>O &kate; vem com um sistema flexível, configurável e capaz de fazer realce de sintaxe, e a distribuição padrão fornece definições para uma grande gama de linguagens de programação, marcação e linguagens de script, e ainda para outros formatos de arquivo de texto. Além disso, você pode fornecer suas próprias definições, em arquivos &XML; simples.</para>

<para
>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
><guimenu
>Documentos </guimenu
><guisubmenu
>Modo de Realce de Sintaxe</guisubmenu
></menuchoice
>. </para>

<para
>Os estilos e cores usados por cada definição de realce de sintaxe, bem como os tipos &MIME; a serem usados, pode ser configurados na página <link linkend= "config-dialog-editor-hl"
> Realce de sintaxe</link
> do <link linkend= "config-dialog"
>Diálogo de Configuração</link
>.</para>

<note>
<para
>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 freqüentemente você precise de um estilo raro para ver os 2% incorretos.</para>
</note>

<tip>
<para
>Você pode carregar definições de realce de sintaxe atualizadas ou adicionai do site do &kate;, clicando no botão <guibutton
>Carregar</guibutton
> na <link linkend="config-dialog-editor-hl"
>Página de Realce</link
> do <link linkend ="config-dialog"
>Diálogo de Configuração</link
>.</para>
</tip>

</sect1>

<sect1 id="katehighlight-system">

<title
>O Sistema de Realce de Sintaxe do &kate;</title>

<para
>Esta seção discutirá o mecanismo de realce de sintaxe do &kate; em mais detalhes. Esta seção é para aqueles que desejam saber sobre isso, ou se desejam modificar ou criar definições de sintaxe.</para>

<sect2 id="katehighlight-howitworks">

<title
>Como Funciona</title>

<para
>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>

<para
>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>

<para
>As definições de sintaxe usadas pelo sistema de realce do &kate; estão contidas em arquivos &XML;, contendo <itemizedlist>
<listitem
><para
>Regras para a detecção do texto inteiro, organizado em blocos de contexto</para
></listitem>
<listitem
><para
>Listas de Palavras-chave</para
></listitem>
<listitem
><para
>Definições de Item de Estilo</para
></listitem>
</itemizedlist>
</para>

<para
>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>

</sect2>

<sect2 id="highlight-system-rules">
<title
>Regras</title>

<para
>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"
>expressão  regular</link
> 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>

<para
>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 seqüências de algum caractere no texto podem ser tratadas de modo diferente, dependendo do contexto atual. </para>

</sect2>

<sect2 id="highlight-context-styles-keywords">
<title
>Estilos de Contexto e Palavras-Chave</title>

<para
>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>

<para
>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>

<para
>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>

</sect2>

<sect2 id="kate-highlight-system-default-styles">
<title
>Estilos Padrão</title>

<para
>Se você abrir um arquivo fonte do C++, &Java;  e um documento <acronym
> HTML</acronym
> no &kate;, verá que mesmo que os formatos sejam diferentes, a assim, diferentes palavras escolhidas para um tratamento especial, as cores usadas são as mesmas. Isto porque o &kate; possui uma lista de Estilos Padrão predefinida, que são empregadas pelas definições de sintaxe individuais.</para>

<para
>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>

<tip>
<para
>Todos os estilos de uma definição de sintaxe usam um dos estilos padrão. Poucas definições usam mais estilos adicionais, e assim, se você usar um formato freqüentemente, pode valer a pena lançar o diálogo de configuração, para ver se alguns conceitos estão usando o mesmo estilo. Por exemplo, existe somente um estilo padrão para strings, mas como a linguagem perl opera com dois tipos de strings, você pode melhorar o realce através da configuração do estilo para ser diferente.</para>
</tip>

</sect2>

</sect1>

<sect1 id="katehighlight-xml-format">
<title
>O Formato &XML; de Definição de Realce</title>

<sect2>
<title
>Visão geral</title>

<para
>Esta seção apresenta uma visão geral do formato &XML; de Definição de Realce. Serão descritos os componentes principais, seu gerenciamento e uso, e a seção dará detalhes das regras de detecção.</para>

<para
>A definição formal, conhecida como  <acronym
>DTD</acronym
>, é armazenada em um arquivo <filename
>language.dtd</filename
>, que deve estar instalado em seu sistema na pasta<filename
>$<envar
>KDEDIR</envar
>/share/apps/kate/syntax </filename
>.</para>

<variablelist>
<title
>Componentes Principais das Definições de Realce do &kate;</title>

<varlistentry>
<term
>A Seção Geral</term>
<listitem>
<para
>A Seção Geral contém informações sobre o formato do comentário da linguagem descrita, e define se as palavras-chaves devem ser sensíveis à maiúsculas.</para
> 
</listitem>
</varlistentry>

<varlistentry>
<term
>Realce</term>
<listitem>
<para
>A seção de Realce contém os dados necessários para analisar e renderizar o texto. Isto inclui:</para>

<variablelist>
<varlistentry>
<term
>Tipos ItemDatas</term>
<listitem
><para
>Contém elementos do tipo ItemDatas, cada um definindo um estilo.</para
></listitem
> 
</varlistentry>

<varlistentry>
<term
>Listas de Palavras-chave - Keyword</term>
<listitem>
<para
>Cada lista possui um nome, e pode conter inúmeros itens.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Tipo Context</term>
<listitem>
<para
>Contém contextos, que novamente contém as regras de detecção de sintaxe.</para>
</listitem>
</varlistentry>
</variablelist>

</listitem>
</varlistentry>

</variablelist>

</sect2>

</sect1>

<sect1 id="kate-highlight-rules-detailled">
<title
>Regras de Detecção de Realce</title>

<para
>Esta seção descreve as regras de detecção de sintaxe.</para>

<para
>Cada regra pode coincidir com zero ou mais caracteres, no início da string em que são pedidos para teste. Se a regra coincide, os caracteres relacionados são  atribuídos ao estilo <emphasis
>attribute</emphasis
> (atributo), definido pela regra, e uma regra pode pedir que o contexto atual seja trocado. </para>

<para
>Os atributos <emphasis
>atribute</emphasis
> (atributo) e <emphasis
>context </emphasis
> (contexto) são comuns a todas as regras.</para>

<para
>As regras se parecem com isto:</para>

<programlisting
>&lt;NomedaRegra attribute=&quot;(identificador)&quot; context=&quot;(identificador|ordem)&quot; [atributos específicos da regra] /&gt;</programlisting>

<para
>O item <emphasis
>attribute</emphasis
> identifica o estilo a ser usado para relacionar caracteres por nome ou índice, e o <emphasis
>context</emphasis
> identifica o contexto a ser usado daqui.</para>

<para
>O <emphasis
>attribute</emphasis
> pode ser identificado pelo nome ou pelo índice, baseado no grupo ItemDatas.</para>

<para
>O <emphasis
>context</emphasis
> pode ser identificado por:</para>

<itemizedlist>
<listitem>
<para
>Um <emphasis
>identificar</emphasis
>, atualmente somente baseado em índice de zero no grupo de contextos.</para>
</listitem>
<listitem>
<para
>Uma <emphasis
>ordem</emphasis
> diz ao mecanismo para ficar no contexto atual (<userinput
>#stay</userinput
>), ou voltar a usar um contexto usado anteriormente na string (<userinput
>#pop</userinput
>).</para
> 
<para
>Para voltar mais passos, a palavra-chave #pop pode ser repetida: <userinput
>#pop#pop#pop</userinput
></para
> 
</listitem>
</itemizedlist>

<para
>Algumas regras pode ter <emphasis
>regras filha</emphasis
>, que são então avaliadas se e somente se a regra-pai coincidir. A string inteira relacionada será fornecida ao atributo definido pela regra pai. Uma regra que possui regras-filha se parece com isto:</para>

<programlisting
>&lt;NomedaRegra (atributos)&gt;
  &lt;NomedaRegraFilha (atributos) /&gt;
  ...
&lt;/NomedaRegra&gt;
</programlisting>


<para
>Os atributos específicos da regra variam, e estão descritos na lista a seguir.</para
> 

<variablelist>
<title
>As Regras em Detalhes</title>

<varlistentry>
<term
>DetectChar</term>
<listitem>
<para
>Detecta um caractere específico. Comumente usado, por exemplo, para encontrar o final das strings citadas.</para
> 
<programlisting
>&lt;DetectChar char=&quot;(caractere)&quot; (atributos comuns) /&gt;</programlisting>
<para
>O atributo <userinput
>char</userinput
>  define o caractere a ser procurado.</para
> 
</listitem>
</varlistentry>

<varlistentry>
<term
>Detect2Chars</term>
<listitem>
<para
>Detecta dois caracteres específicos, em uma ordem definida.</para>
<programlisting
>&lt;Detect2Chars char=&quot;(caractere)&quot; char1=&quot;(caractere)&quot; (atributos comuns) /&gt;</programlisting>
<para
>O atributo <userinput
>char</userinput
> define o primeiro caractere a ser procurado, e o atributo <userinput
>char1</userinput
> o segundo.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>AnyChar</term>
<listitem>
<para
>Detecta um caractere de um conjunto de caracteres especificados.</para>
<programlisting
>&lt;AnyChar String=&quot;(string)&quot; (atributos comuns) /&gt;</programlisting>
<para
>O atributo <userinput
>String</userinput
> define o conjunto de caracteres.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>StringDetect</term>
<listitem>
<para
>Detecta uma string exata.</para>
<programlisting
>&lt;StringDetect String=&quot;(string)&quot; [insensitive=&quot;TRUE|FALSE;&quot;] (atributos comuns) /&gt;</programlisting>
<para
>O atributo <userinput
>String</userinput
> define a string a ser procurada, e o atributo <userinput
>insensitive</userinput
> possui como padrão o valor<userinput
>FALSE</userinput
> e é o mecanismo alimentador da função de comparação de string. Se o valor for <userinput
>TRUE</userinput
>, a comparação não utilizará a diferenciação entre maiúsculas e minúsculas.</para
> 
</listitem>
</varlistentry>

<varlistentry>
<term
>RegExpr</term>
<listitem>
<para
>Procura por uma expressão regular.</para>
<programlisting
>&lt;RegExpr String=&quot;(string)&quot; [insensitive=&quot;TRUE|FALSE;&quot;] [minimal=&quot;TRUE|FALSE&quot;] (atributos comuns) /&gt;</programlisting>
<para
>O atributo <userinput
>String</userinput
> define a  expressão regular.</para>
<para
>O atributo <userinput
>insensitive</userinput
> possui como valor padrão  <userinput
>FALSE</userinput
>, e é a base para o mecanismo de expressões regulares.</para>
<para
><userinput
>minimal</userinput
> possui como valor padrão <userinput
>FALSE </userinput
>, e alimenta o mecanismo da expressão regular.</para>
<para
>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
>^ </literal
>) indica que a regra deve ser coincidente somente no início da linha.</para>
<para
>Veja em <link linkend="regular-expressions"
>Expressões Regulares</link
> mais informações sobre o assunto.</para
> 
</listitem>
</varlistentry>

<varlistentry>
<term
>Keyword</term>
<listitem>
<para
>Detecta uma palavra-chave de uma lista especificada.</para>
<programlisting
>&lt;keyword String=&quot;(nome da lista)&quot; (atributos comuns) /&gt;</programlisting>
<para
>O atributo <userinput
>String</userinput
> identifica a lista de palavras-chave pelo nome. Uma lista com aquele nome, portanto, deve existir.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Int</term>
<listitem>
<para
>Detecta um número inteiro.</para>
<para
><programlisting
>&lt;Int (atributos comuns) /&gt;</programlisting
></para>
<para
>Esta regra não possui atributos específicos. As regras-filha são tipicamente usadas para detectar combinação de <userinput
>L</userinput
> e <userinput
>U </userinput
> depois do número, indicando o tipo inteiro no código do programa.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Float</term>
<listitem>
<para
>Detecta um número de ponto flutuante.</para>
<para
><programlisting
>&lt;Float (atributos comuns)
/&gt;</programlisting
></para
> 
<para
>Esta regra não possui atributos específicos.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>HlCOct</term>
<listitem>
<para
>Detecta uma representação de um número octal.</para>
<para
><programlisting
>&lt;HlCOct (atributos comuns) /&gt;</programlisting
></para>
<para
>Esta regra não possui atributos específicos.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>HlCHex</term>
<listitem>
<para
>Detecta uma representação de um número hexadecimal.</para>
<para
><programlisting
>&lt;Int (atributos comuns) /&gt;</programlisting
></para>
<para
>Esta regra não possui atributos específicos.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>HlCStringChar</term>
<listitem>
<para
>Detecta um caractere de escape.</para>
<para
><programlisting
>&lt;HlCStringChar (atributos comuns)
/&gt;</programlisting
></para>
<para
>Esta regra não possui atributos específicos.</para>

<para
>Ele procura representações de caracteres invisíveis comumente usados no código do programa, como por exemplo <userinput
>\n</userinput
> (nova linha) ou  <userinput
>\t</userinput
> (TAB).</para>

<para
>Os seguintes caracteres combinarão, se seguitem uma barra invertida (<literal
>\</literal
>): <userinput
>abefnrtv&quot;'?</userinput
>.  Adicionalmente, combinarão os números hexadecimais escapados, como por exemplo <userinput
>\xff</userinput
> e os números octais, como por exemplo <userinput
>\033</userinput
>. </para>

</listitem>
</varlistentry>

<varlistentry>
<term
>RangeDetect</term>
<listitem>
<para
>Detecta uma string com os caracteres de início e fim definidos.</para>
<programlisting
>&lt;RangeDetect char=&quot;(caractere)&quot;  char1=&quot;(caractere)&quot; (atributos comuns) /&gt;</programlisting>
<para
>Em <userinput
>char</userinput
> define-se o caractere de início do intervalo, e  em <userinput
>char2</userinput
> o caractere de fim de intervalo.</para>
<para
>Útil para detectar, por exemplo, pequenas strings em aspas, mas note que visto que o mecanismo hl funciona em uma linha por vez, isto não encontrará strings  sobre uma quebra de linha. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
>LineContinue</term>
<listitem>
<para
>Coincide com o final da linha.</para>
<programlisting
>&lt;LineContinue (atributos comuns) /&gt;</programlisting>
<para
>Esta regra não possui atributos específicos.</para>
<para
>Esta regra é útil para trocar de contexto no final da linha.</para>
</listitem>
</varlistentry>

</variablelist>

</sect1>

</appendix>
