La cadena de documentación de modify-syntax-entry
dice lo siguiente:
(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.
¿Qué es una cerca y cuándo usaría una? No puedo encontrar nada en el manual de información.
syntax-highlighting
syntax-table
Wilfred Hughes
fuente
fuente
M-x report-emacs-bug
."
solo puede ser terminado por otro"
. Sin embargo, cuandosyntax-propertize
se utiliza una función personalizada para reconocer una cadena, esto no es posible. En su lugar, puede marcar los puntos finales de cadenas y comentarios utilizando|
y!
, respectivamente. (La documentación dice que estas clases de sintaxis deben usarse principalmente cuando se usa lasyntax-table
propiedad de texto, que es lo que establece unasyntax-propertize
función personalizada .)Respuestas:
Están documentados en el manual, pero no utiliza la palabra "valla". Los caracteres
!
y|
se enumeran como "delimitadores de comentarios genéricos" y "delimitadores de cadena genéricos" en la referencia de clase de sintaxis .Estos personajes fueron introducidos en Emacs 20.1. Citando el archivo de NOTICIAS:
No puedo encontrar ningún uso
!
en los modos estándar de Emacs. Hay varios usos de|
. El caso de uso previsto son los idiomas que tienen literales que usan delimitadores distintos de los delimitadores de cadena habituales, generalmente establecidos a través de superposiciones agregadas por el bloqueo de fuente en función del contexto. Por ejemplo, en perl, se puede escribir una coincidencia de expresión regular/REGEXP/
,m/REGEXP/
om~REGEXP~
om[REGEXP]
o cualquier número de variaciones. Una cadena literal se puede escribir'STRING'
, sino tambiénq'STRING'
,q~STRING~
,q[STRING]
, etc. Cuando el bloqueo de fuente reconoce este tipo de construcciones, que establece los caracteres de comillas (/
//
o'
/'
o~
/~
o[
/]
en los ejemplos que di) a la sintaxis genérica delimitador de cadena. Incluso si está presente un delimitador de cadena habitual (por ejemploq[foo"bar]
), ese delimitador se considerará una parte ordinaria de la cadena, no terminará la cadena.Admito que no veo un beneficio definitivo; por ejemplo, el modo CPerl hace algunas cosas muy elegantes y no utiliza esta función.
fuente
!
para resaltar=begin
...=end
bloques.Tomado de la sintaxis.h:
Suponiendo que los códigos de sintaxis y las clases de sintaxis de expresiones regulares se refieren a la misma cosa, no tengo uso de manchado
|
encc-awk.el
que utiliza"\\s|"
para resaltar delimitadores de cadenas desequilibradas.fuente
python-syntax-stringify
,ruby-syntax-propertize-percent-literal
y en otros . Sin embargo, no veo cómo difiere deSstring
aquí.