opascal-modeの文字列の構文強調表示文字列が正しくない

私は自分のプロジェクトを FreePascal に書いて、 opascal-mode を使って書きます。私は、このモードでは '\' は完全な文字列ではないと考えているので、その後のすべてのコードが文字列としてハイライト表示されるという問題があります。 バックスラッシュをエスケープ文字として解析しようとしないopascal-modeを変更する(またはフックを追加する)方法はありますか? FreePascalでは、文字列はバックスラッシュをエスケープ文字としてサポートしていません。

私はGNU Emacs 24.5.1を使用しています。これは、opascal-modeで実行すると、 '\' の後ろのすべてをハイライト表示するサンプルコードです。

// 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:これは@ JeanPierreの修正を実装した後の〜/ .emacs の固定設定です

;; 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
追加された 編集された
ビュー: 3
これは、構文テーブル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,