-
-
Notifications
You must be signed in to change notification settings - Fork 12
/
evalfilter.el
104 lines (85 loc) · 2.12 KB
/
evalfilter.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
;;; evalfilter.el --- mode for editing evalfilter scripts
;; Copyright (C) 2022 Steve Kemp
;; Author: Steve Kemp <steve@steve.fi>
;; Keywords: languages
;; Version: 1.0
;;; Commentary:
;; Provides support for editing scripts with full support for
;; font-locking, but no special keybindings, or indentation handling.
;;;; Enabling:
;; Add the following to your .emacs file
;; (require 'evalfilter)
;; (setq auto-mode-alist (append '(("\\.evalfilter$" . evalfilter-mode)) auto-mode-alist)))
;;; Code:
(defvar evalfilter-constants
'("true"
"false"
"nil"))
(defvar evalfilter-keywords
'(
"case"
"default"
"else"
"for"
"foreach"
"function"
"if"
"in"
"local"
"return"
"switch"
"while"
))
;; The language-core and functions from the standard-library.
(defvar evalfilter-functions
'(
"between"
"day"
"float"
"getenv"
"hour"
"int"
"keys"
"len"
"lower"
"match"
"max"
"min"
"minute"
"month"
"now"
"panic"
"printf"
"print"
"reverse"
"seconds"
"sort"
"split"
"sprintf"
"string"
"time"
"trim"
"type"
"upper"
"weekday"
"year"
))
(defvar evalfilter-font-lock-defaults
`((
("\"\\.\\*\\?" . font-lock-string-face)
(";\\|,\\|=" . font-lock-keyword-face)
( ,(regexp-opt evalfilter-keywords 'words) . font-lock-builtin-face)
( ,(regexp-opt evalfilter-constants 'words) . font-lock-constant-face)
( ,(regexp-opt evalfilter-functions 'words) . font-lock-function-name-face)
)))
(define-derived-mode evalfilter-mode fundamental-mode "evalfilter script"
"evalfilter-mode is a major mode for editing evalfilter scripts"
(setq font-lock-defaults evalfilter-font-lock-defaults)
;; Comment handler for single & multi-line modes
(modify-syntax-entry ?\/ ". 124b" evalfilter-mode-syntax-table)
(modify-syntax-entry ?\* ". 23n" evalfilter-mode-syntax-table)
;; Comment ender for single-line comments.
(modify-syntax-entry ?\n "> b" evalfilter-mode-syntax-table)
(modify-syntax-entry ?\r "> b" evalfilter-mode-syntax-table)
)
(provide 'evalfilter)