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-faces.el | 77 ++++++++++++++++++++++++++++++++++++ emacs/.emacs.d/lisp/my/wiki.el | 55 ++++++++------------------ 2 files changed, 93 insertions(+), 39 deletions(-) create mode 100644 emacs/.emacs.d/lisp/my/wiki-faces.el (limited to 'emacs/.emacs.d/lisp') diff --git a/emacs/.emacs.d/lisp/my/wiki-faces.el b/emacs/.emacs.d/lisp/my/wiki-faces.el new file mode 100644 index 0000000..2c35722 --- /dev/null +++ b/emacs/.emacs.d/lisp/my/wiki-faces.el @@ -0,0 +1,77 @@ +;;; wiki-faces.el -- faces for wiki-mode -*- lexical-binding: t -*- + +;; Copyright (C) 2023 Free Software Foundation. + +;; Author: Yuchen Pei +;; Package-Requires: ((emacs "28.2")) + +;; This file is part of dotted. + +;; dotted is free software: you can redistribute it and/or modify it under +;; the terms of the GNU Affero General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; dotted is distributed in the hope that it will be useful, but WITHOUT +;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General +;; Public License for more details. + +;; You should have received a copy of the GNU Affero General Public +;; License along with dotted. If not, see . + +;;; Commentary: + +;; faces for wiki-mode. + +;;; Code: + +(defgroup wiki-faces nil + "Faces in wiki mode." + :tag "Wiki Faces" + :group 'wiki-appearance) + +(defface wiki-level-1 '((t :inherit outline-1)) + "Face used for level 1 headlines." + :group 'wiki-faces) + +(defvar wiki-level-1 'wiki-level-1 + "Face used for level 1 headlines.") + +(defface wiki-level-2 '((t :inherit outline-2)) + "Face used for level 2 headlines." + :group 'wiki-faces) + +(defvar wiki-level-2 'wiki-level-2 + "Face used for level 2 headlines.") + +(defface wiki-level-3 '((t :inherit outline-3)) + "Face used for level 3 headlines." + :group 'wiki-faces) + +(defvar wiki-level-3 'wiki-level-3 + "Face used for level 3 headlines.") + +(defface wiki-level-4 '((t :inherit outline-4)) + "Face used for level 4 headlines." + :group 'wiki-faces) + +(defvar wiki-level-4 'wiki-level-4 + "Face used for level 4 headlines.") + +(defface wiki-level-5 '((t :inherit outline-5)) + "Face used for level 5 headlines." + :group 'wiki-faces) + +(defvar wiki-level-5 'wiki-level-5 + "Face used for level 5 headlines.") + +(defface wiki-level-6 '((t :inherit outline-6)) + "Face used for level 6 headlines." + :group 'wiki-faces) + +(defvar wiki-level-6 'wiki-level-6 + "Face used for level 6 headlines.") + +(provide 'wiki-faces) +;;; wiki-faces.el ends here 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