From 28ef1d4fafaf3beda0379924b6413f262f0bafe4 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Sat, 1 Jul 2023 19:13:46 +1000 Subject: Change wiki mode to using font lock keywords --- emacs/.emacs.d/lisp/my/wiki.el | 55 ++++++++++++------------------------------ 1 file changed, 16 insertions(+), 39 deletions(-) (limited to 'emacs/.emacs.d/lisp/my/wiki.el') diff --git a/emacs/.emacs.d/lisp/my/wiki.el b/emacs/.emacs.d/lisp/my/wiki.el index 0ef52e3..2aace73 100644 --- a/emacs/.emacs.d/lisp/my/wiki.el +++ b/emacs/.emacs.d/lisp/my/wiki.el @@ -25,48 +25,25 @@ ;; A wikitext mode. ;;; Code: -(require 'parsec) +(require 'wiki-faces) + +(defvar wiki-font-lock-keywords + (list + (cons "^======.*======$" 'wiki-level-6) + (cons "^=====.*=====$" 'wiki-level-5) + (cons "^====.*====$" 'wiki-level-4) + (cons "^===.*===$" 'wiki-level-3) + (cons "^==.*==$" 'wiki-level-2) + (cons "^=.*=$" 'wiki-level-1) + )) -(defun wiki-file () - (parsec-many (wiki-block))) - -(defun wiki-block () - (parsec-or (wiki-header))) - -(defun wiki-header () - (let* ((marker (parsec-many-s (parsec-ch ?=))) - (raw-content - (string-trim - (parsec-many-till-s - (parsec-none-of ?\n) - (parsec-try - (parsec-and - (parsec-str marker) - (wiki-header-end))))))) - (list 'Header - (length marker) - (parsec-with-input raw-content - (wiki-inlines))))) - -(defun wiki-header-end () - (parsec-and - (parsec-many (wiki-space)) - (parsec-eol-or-eof))) - -(defun wiki-space () - (parsec-one-of ?\s ?\t)) - -(defun wiki-inlines () - (parsec-many (wiki-inline))) - -(defun wiki-inline () - (parsec-or (wiki-plain))) +(define-derived-mode wiki-mode text-mode "Wiki" + "A wikitext mode." -(defun wiki-plain () - (list 'Plain (parsec-many1-as-string (parsec-any-ch)))) + (setq-local comment-start "") -(define-derived-mode wiki-mode text-mode "Wiki" - "A wikitext mode.") + (setq-local font-lock-defaults '(wiki-font-lock-keywords t nil nil nil))) (provide 'wiki) ;;; wiki.el ends here -- cgit v1.2.3