Saya telah menulis mode sederhana untuk menangani JSON. Ia menggunakan mesin turunan untuk menggunakan kembali sebagian besar kode json-mode. Namun satu tambahan adalah Anda dapat memasukkan elisp ke dalam teks JSON yang dievaluasi pada waktu pengiriman JSON. Sebagai contoh kutipan dari json terlihat seperti ini:
{
"parameters": {
"IRC_USER": "stsquad",
"PUB_KEY": `(format "\"%s\"" (s-trim (shell-command-to-string "cat ~/.ssh/id_rsa.pub")))`
}
}
Saat ini penyorotan sintaks dari teks ini rusak karena sintaks JSON hightlighter get's dilemparkan oleh elisp. Saya ingin mengatur tabel sintaks bersarang sehingga elisp dikenali dengan benar sebagai elisp ketika di dalam karakter escape (saya telah memilih `dalam kasus ini). Saya mengerti Anda dapat bergabung dengan char-tables (dari mana sintaks-tables dibuat) dengan sesuatu seperti:
(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.")
Tapi saya tidak mengerti bagaimana saya bisa memodifikasi tabel sintaks untuk mulai menggunakan tabel sintaks anak (elisp) sementara di antara karakter escape?