-
Notifications
You must be signed in to change notification settings - Fork 4
/
full-tt-mode.el
72 lines (63 loc) · 2.91 KB
/
full-tt-mode.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
(defvar full-tt-mode-keywords
(concat "\\b\\(?:"
(regexp-opt (list "GET" "CALL" "SET" "DEFAULT" "INSERT" "INCLUDE"
"BLOCK" "END" "PROCESS" "WRAPPER" "IF" "UNLESS"
"ELSIF" "ELSE" "SWITCH" "CASE" "FOR" "FOREACH"
"WHILE" "FILTER" "USE" "MACRO" "PERL" "RAWPERL"
"TRY" "THROW" "CATCH" "FINAL" "LAST" "RETURN"
"STOP" "CLEAR" "META" "TAGS" "IN"))
"\\)\\b"))
(defvar full-tt-mode-vmethods
(regexp-opt (list "defined" "length" "repeat" "replace" "remove"
"match" "search" "split" "chunk" "substr" "list"
"hash " "size" "keys" "values" "items" "each"
"pairs " "list" "sort" "nsort" "import" "defined"
"exists" "delete " "size" "item" "first" "last"
"size" "max" "defined" "reverse" "join" "grep"
"sort" "nsort" "unshift" "shift" "pop" "unique"
"import" "merge" "slice" "splice" "hash")))
(defvar full-tt-mode-filters
(regexp-opt (list "format" "upper" "lower" "ucfirst" "lcfirst"
"trim" "collapse" "html" "html_entity" "html_para"
"html_break" "html_para_break" "html_line_break"
"uri" "url" "indent" "truncate" "repeat" "remove"
"replace" "redirect" "eval" "evaltt" "perl" "evalperl"
"stdout" "stderr" "null" "latex")))
(defvar full-tt-mode-font-lock-keywords nil)
(setq full-tt-mode-font-lock-keywords
`((,(format "\\(%s\\)" full-tt-mode-keywords)
(1 font-lock-keyword-face nil))
(,(format "[.]\\(%s\\)" full-tt-mode-vmethods)
(1 font-lock-constant-face nil))
("\\b\\([[:alnum:]_]+\\)[.]"
(1 font-lock-variable-name-face nil))
(,(format "|[[:space:]]*\\(%s\\)" full-tt-mode-filters)
(1 font-lock-type-face nil))
("|[[:space:]]*\\([[:alnum:]_+]+\\)"
(1 font-lock-function-name-face nil))
("\\(\\$[[:alnum:]_]+\\)"
(1 font-lock-variable-name-face nil))))
(defvar full-tt-mode-syntax-table)
(defvar full-tt-mode-mode-map)
(defvar full-tt-mode-hook)
(defun full-tt-mode-init-syntax nil
(modify-syntax-entry ?_ ".")
(modify-syntax-entry ?# "<")
(modify-syntax-entry ?\n ">")
(modify-syntax-entry ?\' "\""))
(define-derived-mode full-tt-mode fundamental-mode "Full TT"
"Major mode for editing Template Toolkit files.
\\{full-tt-mode-map}"
(interactive)
(full-tt-mode-init-syntax)
(setq font-lock-defaults '(full-tt-mode-font-lock-keywords nil nil)))
(ignore-errors (require 'mmm-mode))
(when (fboundp 'mmm-add-classes)
(mmm-add-classes
'((tt-mmm-mode
:submode full-tt-mode
:face mmm-output-submode-face
:front "\\[%[+-]?"
:back "[+-]?%\\]")))
(mmm-add-mode-ext-class 'html-mode "\\.tt2?" 'tt-mmm-mode))
(provide 'full-tt-mode)