elisp – ¿Cómo detectar si está dentro de un par emparejado?

Pregunta:

P: ¿hay alguna forma general de detectar si el punto está dentro de un par de caracteres coincidentes?

Es decir: ¿existe una función de predicado general (o algo) que pueda determinar si el punto está entre un par coincidente o algunos caracteres elegidos arbitrariamente? Estoy pensando en una que evaluar a t en, por ejemplo, los siguientes escenarios, con ! refiriéndose al punto:

"!"   (quotes in general)
``!'' (LaTeX quotes)
$!$   (LaTeX math)
(!)   (lisp parens)
*!*   (org emphasis)

Editar : syntax-ppss parece ser un buen punto de partida, pero no me queda claro cómo se adaptaría a pares coincidentes de varios caracteres (por ejemplo, las “ comillas LaTeX '', o incluso <b>html tags</b> coincidentes <b>html tags</b> ). Me pregunto si hay una solución general o si requeriría un analizador especialmente diseñado.

Respuesta:

syntax-ppss podría ser de ayuda aquí. Devuelve una lista que también tiene estos elementos:

  • elemento 0: profundidad en parens
  • elemento 3: no nulo si está dentro de una cadena

Podrías usarlo así:

(or (> (nth 0 (syntax-ppss)) 0)
    (nth 3 (syntax-ppss)))

Con una tabla de sintaxis configurada correctamente en el búfer (para cadenas y parens coincidentes), la función debería hacer lo que espera. Si no es posible utilizar la tabla de sintaxis del modo, puede recurrir a la with-syntax-table .

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım