Eu escrevi um modo simples para lidar com JSON. Ele usa o mecanismo derivado para reutilizar a maior parte do código do modo json. No entanto, uma adição é que você pode inserir elisp no texto JSON que é avaliado no momento do envio do JSON. Por exemplo, um trecho do json se parece com isso:
{
"parameters": {
"IRC_USER": "stsquad",
"PUB_KEY": `(format "\"%s\"" (s-trim (shell-command-to-string "cat ~/.ssh/id_rsa.pub")))`
}
}
Atualmente, o realce da sintaxe deste texto é interrompido à medida que o hightlighter da sintaxe JSON é lançado pelo elisp. Gostaria de configurar uma tabela de sintaxe aninhada para que o elisp seja reconhecido corretamente como elisp quando estiver dentro dos caracteres de escape (eu escolhi `neste caso). Eu entendo que você pode associar char-tables (das quais são criadas tabelas de sintaxe) com algo como:
(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.")
Mas não entendo como posso modificar a tabela de sintaxe para começar a usar a tabela de sintaxe filho (elisp) enquanto estiver entre os caracteres de escape?