Lisiane
Sztoltz

     lisiane@conectiva.com.br

Tradução

# Trabalhando com Realce de Sintaxe

## Visão geral

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.

Uma função perl, renderizada com realce de sintaxe.

Uma função perl, renderizada com realce de sintaxe.

A mesma função perl, sem realce de sintaxe.

A mesma função perl, sem realce de sintaxe.

Dos dois exemplos, qual é o mais fácil de ler?

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.

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 Documentos Modo de Realce de Sintaxe.

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 Realce de sintaxe do Diálogo de Configuração.

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.

Você pode carregar definições de realce de sintaxe atualizadas ou adicionai do site do &kate;, clicando no botão Carregar na Página de Realce do Diálogo de Configuração.

## O Sistema de Realce de Sintaxe do &kate;

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.

### Como Funciona

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.

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.

As definições de sintaxe usadas pelo sistema de realce do &kate; estão contidas em arquivos &XML;, contendo

- Regras para a detecção do texto inteiro, organizado em blocos de contexto

- Listas de Palavras-chave

- Definições de Item de Estilo

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.

### Regras

As regras de detecção são o coração do sistema de detecção de realce. Uma regra é uma string, caracter ou expressão regular 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.

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.

### Estilos de Contexto e Palavras-Chave

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.

Uma definição de sintaxe pode conter tantos estilos quanto forem necessários para cobrir os conceitos do formato no qual serão usados.

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.

### Estilos Padrão

Se você abrir um arquivo fonte do C++, &Java; e um documento HTML 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.

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.

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.

## O Formato &XML; de Definição de Realce

### Visão geral

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.

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

#### Componentes Principais das Definições de Realce do &kate;

A Seção Geral

  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.

Realce

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

  Tipos ItemDatas

    Contém elementos do tipo ItemDatas, cada um definindo um estilo.

  Listas de Palavras-chave - Keyword

    Cada lista possui um nome, e pode conter inúmeros itens.

  Tipo Context

    Contém contextos, que novamente contém as regras de detecção de sintaxe.

## Regras de Detecção de Realce

Esta seção descreve as regras de detecção de sintaxe.

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 attribute (atributo), definido pela regra, e uma regra pode pedir que o contexto atual seja trocado.

Os atributos atribute (atributo) e context (contexto) são comuns a todas as regras.

As regras se parecem com isto:

    <NomedaRegra attribute="(identificador)" context="(identificador|ordem)" [atributos específicos da regra] />

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

O attribute pode ser identificado pelo nome ou pelo índice, baseado no grupo ItemDatas.

O context pode ser identificado por:

- Um identificar, atualmente somente baseado em índice de zero no grupo de contextos.

- Uma ordem diz ao mecanismo para ficar no contexto atual (`#stay`), ou voltar a usar um contexto usado anteriormente na string (`#pop`).

  Para voltar mais passos, a palavra-chave #pop pode ser repetida: `#pop#pop#pop`

Algumas regras pode ter regras filha, 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:

    <NomedaRegra (atributos)>
      <NomedaRegraFilha (atributos) />
      ...
    </NomedaRegra>

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

### As Regras em Detalhes

DetectChar

  Detecta um caractere específico. Comumente usado, por exemplo, para encontrar o final das strings citadas.

      <DetectChar char="(caractere)" (atributos comuns) />

  O atributo `char` define o caractere a ser procurado.

Detect2Chars

  Detecta dois caracteres específicos, em uma ordem definida.

      <Detect2Chars char="(caractere)" char1="(caractere)" (atributos comuns) />

  O atributo `char` define o primeiro caractere a ser procurado, e o atributo `char1` o segundo.

AnyChar

  Detecta um caractere de um conjunto de caracteres especificados.

      <AnyChar String="(string)" (atributos comuns) />

  O atributo `String` define o conjunto de caracteres.

StringDetect

  Detecta uma string exata.

      <StringDetect String="(string)" [insensitive="TRUE|FALSE;"] (atributos comuns) />

  O atributo `String` define a string a ser procurada, e o atributo `insensitive` possui como padrão o valor`FALSE` e é o mecanismo alimentador da função de comparação de string. Se o valor for `TRUE`, a comparação não utilizará a diferenciação entre maiúsculas e minúsculas.

RegExpr

  Procura por uma expressão regular.

      <RegExpr String="(string)" [insensitive="TRUE|FALSE;"] [minimal="TRUE|FALSE"] (atributos comuns) />

  O atributo `String` define a expressão regular.

  O atributo `insensitive` possui como valor padrão `FALSE`, e é a base para o mecanismo de expressões regulares.

  `minimal` possui como valor padrão `FALSE` , e alimenta o mecanismo da expressão regular.

  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 (`^` ) indica que a regra deve ser coincidente somente no início da linha.

  Veja em Expressões Regulares mais informações sobre o assunto.

Keyword

  Detecta uma palavra-chave de uma lista especificada.

      <keyword String="(nome da lista)" (atributos comuns) />

  O atributo `String` identifica a lista de palavras-chave pelo nome. Uma lista com aquele nome, portanto, deve existir.

Int

  Detecta um número inteiro.

      <Int (atributos comuns) />

  Esta regra não possui atributos específicos. As regras-filha são tipicamente usadas para detectar combinação de `L` e `U` depois do número, indicando o tipo inteiro no código do programa.

Float

  Detecta um número de ponto flutuante.

      <Float (atributos comuns)
      />

  Esta regra não possui atributos específicos.

HlCOct

  Detecta uma representação de um número octal.

      <HlCOct (atributos comuns) />

  Esta regra não possui atributos específicos.

HlCHex

  Detecta uma representação de um número hexadecimal.

      <Int (atributos comuns) />

  Esta regra não possui atributos específicos.

HlCStringChar

  Detecta um caractere de escape.

      <HlCStringChar (atributos comuns)
      />

  Esta regra não possui atributos específicos.

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

  Os seguintes caracteres combinarão, se seguitem uma barra invertida (`\`): `abefnrtv"'?`. Adicionalmente, combinarão os números hexadecimais escapados, como por exemplo `\xff` e os números octais, como por exemplo `\033`.

RangeDetect

  Detecta uma string com os caracteres de início e fim definidos.

      <RangeDetect char="(caractere)"  char1="(caractere)" (atributos comuns) />

  Em `char` define-se o caractere de início do intervalo, e em `char2` o caractere de fim de intervalo.

  Ú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.

LineContinue

  Coincide com o final da linha.

      <LineContinue (atributos comuns) />

  Esta regra não possui atributos específicos.

  Esta regra é útil para trocar de contexto no final da linha.