Синтаксично виділити рядки неправильно для рядків в opascal-режимі

Я пишу свої проекти в FreePascal і використовую opascal-mode , щоб написати його. У мене виникла проблема, що в цьому режимі думка, що '\' не є повним рядком, а значить, весь код після нього виділений як рядок. Як змінити режим opascal (або додати гачок), в якому він не намагатиметься проаналізувати зворотну косу риску як вибуховий символ? У FreePascal рядки не підтримують зворотну косу риску як символ виходу.

Я використовую GNU Emacs 24.5.1, і це зразок коду, який, коли він запускається в opascal-режимі, підкреслює все після неправильного кодування '\' :

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

Я намагався поборотися за допомогою modify-syntax-entry , але нічого я не намагався працювати.


EDIT: це фіксована конфігурація в ~/.emacs після того, як я здійснив @ виправлення 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
Це буде проблема з блокуванням шрифтів, а не синтаксичним таблицевим. Я не знаю, як підсвічування впроваджено в цьому режимі, але я б шукати джерело режиму: правила для зафіксування шрифтів стануть місцем для початку.
додано Автор Yann Trevin, джерело

1 Відповіді

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
додано
це ідеально! це працювало як чарівність. Дякую!
додано Автор Philip Derbeko, джерело