J'ai écrit un mode simple pour gérer JSON. Il utilise la machinerie dérivée pour réutiliser la plupart du code de json-mode. Cependant, un ajout est que vous pouvez insérer elisp dans le texte JSON qui est évalué au moment de la soumission JSON. Par exemple, un extrait du json ressemble à ceci:
{
"parameters": {
"IRC_USER": "stsquad",
"PUB_KEY": `(format "\"%s\"" (s-trim (shell-command-to-string "cat ~/.ssh/id_rsa.pub")))`
}
}
Actuellement, la mise en évidence de la syntaxe de ce texte est interrompue, car le surligneur de syntaxe JSON est lancé par l'elisp. Je voudrais configurer une table de syntaxe imbriquée pour que l'elisp soit correctement reconnu comme elisp à l'intérieur des caractères d'échappement (j'ai choisi `dans ce cas). Je comprends que vous pouvez joindre des tables de caractères (à partir desquelles les tables de syntaxe sont construites) avec quelque chose comme:
(defvar lava-mode-syntax-table
(let ((json-table (copy-syntax-table json-mode-syntax-table))
(elisp-table (copy-syntax-table lisp-mode-syntax-table)))
(set-char-table-parent elisp-table json-table)
(modify-syntax-entry ?` "(`" json-table)
(modify-syntax-entry ?` ")`" json-table)
json-table)
"LAVA Mode syntax table.
This is a combination of json-mode-syntax-table with an escape into
lisp-mode-syntax table for the embedded elisp.")
Mais je ne comprends pas comment modifier la table de syntaxe pour commencer à utiliser la table de syntaxe enfant (elisp) entre les caractères d'échappement?