cadenas de resaltado de sintaxis incorrectamente para cadenas en modo opascal

Escribo mis proyectos en FreePascal y uso opascal-mode para escribirlo. Estoy teniendo el problema de que este modo cree que '\' no es una cadena completa y, por lo tanto, todo el código después de que esté resaltado como una cadena. ¿Cómo puedo cambiar el modo opascal (o agregar un gancho) en el que no intente analizar la barra invertida como un carácter de escape? En FreePascal, las cadenas no admiten la barra invertida como un personaje de escape.

Estoy usando GNU Emacs 24.5.1 y este es un código de ejemplo que cuando se ejecuta en modo opascal, resalta todo lo que aparece después del '\' de manera incorrecta:

// syntax_highlight.dpr                                                                                                                                                                                                

{$mode objfpc}{$H+}
program my_program;
uses Classes;

var newVal : char;

begin
  newVal := '\';//syntax highlight breaks here!                                                                                                                                                                                                       
  if newVal = '''' then begin                                                                                                                                                                                          
    writeln('single quote');                                                                                                                                                                                                    
  end else if newVal = '\' then begin
    writeln('backslash');
  end;
end.

He intentado perder el tiempo con modify-syntax-entry , pero nada de lo que intenté funcionó.


EDITAR: esta es la configuración fija en ~/.emacs después de haber implementado la corrección de @ JeanPierre

;; associate pascal files as opascal-mode                                                                                                                                                              
(add-to-list 'auto-mode-alist '("\\.pas$" . opascal-mode))
(let* ((pascal-files '(".pas" ".pp" ".inc" ".lpr" ".dpr"))
       (pascal-regexp (concat (regexp-opt pascal-files t) "\\'")))
  (add-to-list 'auto-mode-alist (cons pascal-regexp 'opascal-mode)))

;; don't escape backslashes in pascal    
(add-hook 'opascal-mode-hook
          (modify-syntax-entry ?\\ "."))
1
Esto sería un problema de bloqueo de fuente en lugar de una tabla de sintaxis. No sé cómo se implementó el resaltado en este modo, pero buscaría la fuente del modo: las reglas de bloqueo de fuente serían el lugar para comenzar.
agregado el autor Yann Trevin, fuente

1 Respuestas

C-h s (describe-syntax) shows that \ indeed has escape syntax. You can change it with the following:

(defun my/make-backslash-punctuation ()
  (modify-syntax-entry ?\\ "."))

(add-hook 'opascal-mode-hook #'my/make-backslash-punctuation)
1
agregado
¡Eso es perfecto! Funcionó a las mil maravillas. ¡Gracias!
agregado el autor Philip Derbeko, fuente