Tôi đã viết một chế độ đơn giản để xử lý JSON. Nó sử dụng các máy móc có nguồn gốc để sử dụng lại hầu hết mã của chế độ json. Tuy nhiên, một bổ sung là bạn có thể chèn elisp vào văn bản JSON được đánh giá tại thời điểm gửi JSON. Ví dụ, một đoạn trích của json trông như thế này:
{
"parameters": {
"IRC_USER": "stsquad",
"PUB_KEY": `(format "\"%s\"" (s-trim (shell-command-to-string "cat ~/.ssh/id_rsa.pub")))`
}
}
Hiện tại cú pháp tô sáng cú pháp của văn bản này đã bị phá vỡ khi cú pháp JSON hightllight bị ném bởi elisp. Tôi muốn thiết lập một bảng cú pháp lồng nhau để elisp được nhận dạng đúng là elisp khi bên trong các ký tự thoát (tôi đã chọn `trong trường hợp này). Tôi hiểu rằng bạn có thể tham gia các bảng char (bảng cú pháp được xây dựng từ đó) với một cái gì đó như:
(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.")
Nhưng tôi không hiểu làm thế nào tôi có thể sửa đổi bảng cú pháp để bắt đầu sử dụng bảng cú pháp con (elisp) trong khi giữa các ký tự thoát?