quinta-feira, 16 de abril de 2009

Definindo item com ou sem linha de continuação no arquivo de sintaxe

Vamos definir uma linha de um preprocessador.
Isto começa com um '#' na primeira coluna e segue até o final da linha. Uma
linha que termina com '\' faz a próxima linha ser uma linha de continuação.

O modo que você trata isso é permitindo o item de sintaxe conter um padrão de
continuação:
:syntax region xPreProc start=/^#/ end=/$/ contains=xLineContinue
:syntax match xLineContinue "\\$" contained
Neste caso, embora 'xPreProc' normalmente normalmente obtém um única linha, o
grupo contido nele (chamado de 'xLineContinue') permite-o ir para mais de uma
linha.
Por exemplo, ele irá localizar ambas dessas linhas:
#define SPAM spam spam spam \ ~
               bacon and spam ~
Neste caso, isto é o que você quer. Se não é isso que você quer, você pode pedir
para que a região esteja em uma única linha adicionando 'excludenl' para o
padrão contido.
Por exemplo, você quer colorir 'end' em 'xPreProc', mas somente no final da
linha.
Para evitar que 'xPreProc' continue na próxima linha, como 'xLineContinue' faz,
use 'excludenl' assim:
:syntax region xPreProc start=/^#/ end=/$/
        \ contains=xLineContinue,xPreProcEnd
:syntax match xPreProcEnd excludenl /end$/ contained
:syntax match xLineContinue "\\$" contained
'excludenl' deve ser posto antes do padrão. Desde que 'xLineContinue' não tem
'excludenl', um ocorrência dele estende 'xPreProc' para a próxima linha como
antes.

0 comentários:

Postar um comentário