メジャーモードを作成する場合、「文字列内のポイントはどこにあるのか?」「コメントにポイントがありますか?」
ほとんどの主要なモードは、プログラミング言語を解析しようとするようです。例えば:
python-syntax-content
呼び出しsyntax-ppss
haskell-fill-paragraph
呼び出しsyntax-ppss
とre-search-forward
c-in-comment-line-prefix-p
ポイントを移動して呼び出しますlooking-at
sp-point-in-comment
呼び出しますsyntax-ppss
が、コメント区切りにあるかどうかもチェックします
ただし、これが機能しない場合もあります。org-modeバッファでは、ソースブロック内のコメントはこれらのアプローチでは正しく検出されません。
バッファはすでにハイライトされたコメントを表示しているので、それも無意味に見えます。
代わりに、ポイントで面を単に検査することができます:
(defun wh--get-faces (pos)
"Get all the font faces at POS."
(remq nil
(list
(get-char-property pos 'read-face-name)
(get-char-property pos 'face)
(plist-get (text-properties-at pos) 'face))))
(defun wh-string-p (pos)
"Return non-nil if POS is inside a string."
(memq 'font-lock-string-face (wh--get-faces pos)))
なぜメジャーモードはこれを行わないのですか?バッファはすでにフォント化されているので、これはより高速で、より堅牢で、必要なコードが少ないと思います。
font-lock-mode
か?(私があなたがするべきだと思うわけではありません。)