emasc lisp新手。最近看到一个类似latex
的文档系统typst, 就想写个major mode试试。由于typst把代码和文档结合在一起,keyword样式有点不好搞。就想在大括号内内部样式能不能覆盖整体样式。这是一个typst文档的例子
#{
// 这里是代码
align(center)[
#block(text(weight: 700, 1.75em, title))
#v(1em, weak: true)
#date
]
}
= Introduction
这里是文档
这是我的部分代码,注释部分是chatgpt对我这个问题的解答,试了下没有效果
;; (defun typst-inner-face-match (limit)
;; (catch 'found
;; (while (re-search-forward "{\\([^}]*\\)}" limit t)
;; (let ((text-start (match-beginning 1))
;; (text-end (match-end 1)))
;; (when (and text-start text-end)
;; (set-match-data (list text-start text-end))
;; (throw 'found t))))
;; nil))
;; (defface typst-custom-face
;; '((t (:foreground "green")))
;; "Custom face for text inside braces."
;; :group 'markup-faces)
(defvar typst-font-lock-keywords
`((,(regexp-opt typst-global-keywords t) . font-lock-keyword-face)
("\\(#\\w+\\)[[(]" . '(1 font-lock-function-name-face))
;; (typst-inner-face-match . typst-custom-face)
)
"Minimal highlighting expressions for typst mode")
总的代码可以在github上看到:GitHub - Ziqi-Yang/typst-mode.el: An Emacs major mode for a markup-based typesetting system `typst`