blob: d8b14ada615fd3c0121b04e779b39ad1b4f7d0cd (
plain)
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
|
;;; simple-mode.el --- Major mode for Simple source files -*- lexical-binding: t; -*-
(require 'cc-mode)
(defconst simple-mode-primitive-types
'("int" "i8" "i16" "i32" "i64" "u8" "u16" "u32" "u64"
"byte" "bool" "flt" "f32" "f64" "val" "var")
"Primitive and built-in type names in Simple.")
(defconst simple-mode-font-lock-keywords
`((,(regexp-opt simple-mode-primitive-types 'symbols) . font-lock-type-face)
(,(regexp-opt '("boolean" "long" "short" "char" "float" "double" "void") 'symbols) (0 nil t))
("\\_<new\\_>\\s-+\\(?:[[:alpha:]_][[:alnum:]_$]*\\.\\)*\\([[:alpha:]_][[:alnum:]_$]*\\)" (1 nil t)))
"Additional Simple keywords using Java's type face.")
(defun simple-mode-set-indentation ()
(setq-local c-basic-offset 4)
(setq-local indent-tabs-mode nil))
(define-derived-mode simple-mode java-mode "Simple"
"Major mode for Simple .smp source files."
(simple-mode-set-indentation)
(setq-local c-primitive-type-key
(concat "\\(" (regexp-opt simple-mode-primitive-types) "\\)"
"\\([^[:alnum:]_$]\\|$\\)"))
(setq-local font-lock-defaults
`((,@java-font-lock-keywords ,@simple-mode-font-lock-keywords)
nil nil ((?_ . "w") (?$ . "w"))
c-beginning-of-syntax
(font-lock-mark-block-function . c-mark-function)))
(setq-local font-lock-keywords nil)
(font-lock-set-defaults)
(font-lock-mode 1)
(font-lock-fontify-buffer))
(add-hook 'simple-mode-hook #'simple-mode-set-indentation)
(provide 'simple-mode)
;;; simple-mode.el ends here
|