summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--contrib/emacs/mintage-mode.el26
-rw-r--r--contrib/vim/syntax/mintage.vim (renamed from contrib/syntax/mintage.vim)1
2 files changed, 27 insertions, 0 deletions
diff --git a/contrib/emacs/mintage-mode.el b/contrib/emacs/mintage-mode.el
new file mode 100644
index 0000000..8cfe036
--- /dev/null
+++ b/contrib/emacs/mintage-mode.el
@@ -0,0 +1,26 @@
+;;; mintage-mode.el --- Major mode for mintage data files -*- lexical-binding: t; -*-
+
+(defconst mintage--number (rx (or digit ?.)))
+(defconst mintage--string (rx "\"" (*? (not "\"")) "\""))
+(defconst mintage--unknown (rx ??))
+(defconst mintage--comment (rx bol (* space) ?# (* any)))
+(defconst mintage--year (rx bol (= 4 digit) (? ?- (+ (not space)))))
+
+(defun mintage--font-lock-keywords ()
+ `((,mintage--year . font-lock-constant-face)
+ (,mintage--number . 'font-lock-number-face)
+ (,mintage--string . font-lock-string-face)
+ (,mintage--comment . font-lock-comment-face)
+ (,mintage--unknown . font-lock-warning-face)))
+
+;;;###autoload
+(add-to-list 'auto-mode-alist (cons "mintages/[a-z]\\{2\\}\\'" 'mintage-mode))
+
+;;;###autoload
+(define-derived-mode mintage-mode conf-mode "Mintage"
+ "Major mode for editing euro-cash.eu mintage files"
+ (setq comment-start "#"
+ comment-end "")
+ (setq font-lock-defaults '(mintage--font-lock-keywords)))
+
+(provide 'mintage-mode)
diff --git a/contrib/syntax/mintage.vim b/contrib/vim/syntax/mintage.vim
index 6327f61..2b03b41 100644
--- a/contrib/syntax/mintage.vim
+++ b/contrib/vim/syntax/mintage.vim
@@ -8,5 +8,6 @@ syntax match Number /[0-9.]\+/
syntax match Identifier /\v\d{4}(-\S+)?/
syntax match String /"[^"]\{-}"/
+
" ‘Todo’ is semantically a better syntax group, but it looks bad
syntax match Error /?/