Ao escrever um modo principal, geralmente é útil saber 'é um ponto em uma string?' 'é ponto em um comentário?'.
A maioria dos principais modos parece tentar analisar a linguagem de programação. Por exemplo:
python-syntax-content
chamadassyntax-ppss
haskell-fill-paragraph
chamadassyntax-ppss
ere-search-forward
c-in-comment-line-prefix-p
move apontar e chamalooking-at
sp-point-in-comment
chama,syntax-ppss
mas também verifica se está em um delimitador de comentários
No entanto, isso não funciona em alguns casos. Nos buffers de modo organizacional, os comentários nos blocos de origem não são detectados corretamente por essas abordagens.
Também parece inútil, pois o buffer já está mostrando comentários destacados .
Em vez disso, você pode simplesmente inspecionar as faces no momento:
(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)))
Por que os principais modos não fazem isso? O buffer já está com fonte, então eu esperaria que isso fosse mais rápido, mais robusto e exigisse menos código.
font-lock-mode
? (Não que eu acho que você deveria.)