(defvar geiriadur-mode-hook nil) (defvar geiriadur-mode-map (let ((geiriadur-mode-map (make-sparse-keymap))) (define-key geiriadur-mode-map (kbd "C-j") 'newline-and-indent) (define-key geiriadur-mode-map (kbd "C-c C-c") 'geiriadur-make-translation) (define-key geiriadur-mode-map (kbd "C-c C-d") 'geiriadur-make-form) (define-key geiriadur-mode-map (kbd "C-c C-r") 'geiriadur-make-comment) geiriadur-mode-map) "Keymap for Geiriadur major mode") (add-to-list 'auto-mode-alist '("\\.utf8\\'" . geiriadur-mode)) (defconst geiriadur-font-lock-keywords-1 (list ;'("\\(\\[ [^]]* \\]\\)" . font-lock-variable-name-face) ;'("\\(( [^)]* )\\)" . font-lock-keyword-face) '("\\(<< [^>]* >>\\)" . font-lock-string-face) '("\\({{ [^|]* | [^}]* }}\\)" . font-lock-constant-face) ;font-lock-comment-face) '("\\(< [^>]* >\\)" . font-lock-type-face) '("\\({ [^}]* }\\)" . font-lock-builtin-face)) "Minimal highlighting expressions for Geiriadur mode") (defvar geiriadur-font-lock-keywords geiriadur-font-lock-keywords-1 "Default highlighting expressions for Geiriadur mode") (defun geiriadur-indent-line () "Indent current line as Geiriadur code." (interactive) (beginning-of-line) (if (looking-at "^[ \t]*<<") (indent-line-to default-tab-width)) (if (looking-at "^[ \t]*{{") (indent-line-to (* 2 default-tab-width)))) (defun geiriadur-make-translation (start end) "Makes selection a translation." (interactive "r") (goto-char end) (insert " >>") (if (looking-at "[,;]") (delete-char 1)) (goto-char start) (insert " << ") (indent-line-to default-tab-width)) (defun geiriadur-make-form (start end) "Makes selection a translation." (interactive "r") (goto-char end) (insert " }") (if (looking-at "[,;)]") (delete-char 1)) (goto-char start) (insert "{ ")) (defun geiriadur-make-comment (start end) "Makes selection a comment." (interactive "r") (goto-char end) (insert " }}") (if (looking-at ";") (delete-char 1)) (goto-char start) (insert " {{ ")) (define-derived-mode geiriadur-mode fundamental-mode "Geiriadur" "Major mode for editing Geiriadur input files." (set (make-local-variable 'font-lock-defaults) '(geiriadur-font-lock-keywords)) (set (make-local-variable 'indent-line-function) 'geiriadur-indent-line)) (provide 'geiriadur-mode)