syntaxis-highlighting strings onjuist voor strings in opascal-mode

Ik schrijf mijn projecten in FreePascal en gebruik opascal-mode om het te schrijven. Ik heb een probleem dat deze modus denkt dat '\' geen volledige tekenreeks is, en daarom wordt alle onderliggende code gemarkeerd als een tekenreeks. Hoe kan ik de opascal-modus wijzigen (of een haak toevoegen) waarin het niet probeert de backslash te ontleden als een escape-teken? In FreePascal ondersteunen reeksen backslash geen escape-teken.

Ik gebruik GNU Emacs 24.5.1 en dit is een voorbeeldcode die bij uitvoering in de opascal-modus alles na de '\' onjuist weergeeft:

// 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.

Ik heb geprobeerd te rommelen met modify-syntax-entry , maar niets dat ik probeerde werkte.


EDIT: dit is de vaste configuratie in ~/.emacs nadat ik @ JeanPierre's oplossing heb geïmplementeerd

;; 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
Dit zou een lettertype-lock-probleem zijn in plaats van syntax-tabel één. Ik weet niet hoe de markering in deze modus is geïmplementeerd, maar ik zou zoeken naar de bron van de modus: de lettertypen-vergrendelingsregels zouden de plaats zijn om te beginnen.
toegevoegd de auteur Yann Trevin, de bron

1 antwoord

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
toegevoegd
dat is perfect! het werkte als een charme. Bedankt!
toegevoegd de auteur Philip Derbeko, de bron