A documentação para modify-syntax-entry
diz o seguinte:
(modify-syntax-entry CHAR NEWENTRY &optional SYNTAX-TABLE)
...
The first character of NEWENTRY should be one of the following:
...
/ character-quote. @ inherit from parent table.
| generic string fence. ! generic comment fence.
O que é uma cerca e quando eu usaria uma? Não consigo encontrar nada no manual de informações.
syntax-highlighting
syntax-table
Wilfred Hughes
fonte
fonte
M-x report-emacs-bug
."
só pode ser rescindido por outro"
. No entanto, quando umasyntax-propertize
função personalizada é usada para reconhecer uma sequência, isso não é possível. Em vez disso, você pode marcar os pontos finais de seqüências de caracteres e comentários usando|
e!
, respectivamente. (A documentação diz que essas classes de sintaxe principalmente deve ser usado quando se utiliza asyntax-table
propriedade de texto, que é o que um personalizadossyntax-propertize
conjuntos de funções.)Respostas:
Eles estão documentados no manual, mas não usam a palavra “fence”. Os caracteres
!
e|
são listados como "delimitadores de comentários genéricos" e "delimitadores de cadeias genéricas" na referência de classe de sintaxe .Esses caracteres foram introduzidos no Emacs 20.1. Citando o arquivo NEWS:
Não consigo encontrar nenhum uso
!
nos modos Emacs padrão. Existem vários usos de|
. O caso de uso pretendido são idiomas que possuem literais que usam delimitadores que não sejam os delimitadores de seqüência de caracteres comuns, geralmente configurados por sobreposições adicionadas pelo bloqueio de fonte com base no contexto. Por exemplo, em perl, uma correspondência de expressão regular pode ser escrita/REGEXP/
,m/REGEXP/
oum~REGEXP~
oum[REGEXP]
ou qualquer número de variações. Uma string literal pode ser escrita'STRING'
, mas tambémq'STRING'
,q~STRING~
,q[STRING]
, etc. Quando o bloqueio da fonte reconhece tais construções, ele define os caracteres de aspas (/
//
ou'
/'
ou~
/~
ou[
/]
nos exemplos que dei) à sintaxe genérica do delimitador de string. Mesmo que um delimitador habitual de string esteja presente (por exemploq[foo"bar]
), esse delimitador será considerado uma parte comum da string, não a terminará.Admito que não vejo um benefício definitivo - por exemplo, o modo CPerl faz algumas coisas muito sofisticadas e não usa esse recurso.
fonte
!
para destacar=begin
...=end
blocos.Retirado da sintaxe.h:
Assumindo que os códigos de sintaxe e as classes de sintaxe regex se referem à mesma coisa, eu tenho uso manchado de
|
emcc-awk.el
que utiliza"\\s|"
para destacar delimitadores de cordas desequilibradas.fonte
python-syntax-stringify
,ruby-syntax-propertize-percent-literal
e outros . Não vejo como isso difereSstring
daqui.