update
This commit is contained in:
parent
55e62a7975
commit
290692570f
98
ztl-mode.el
98
ztl-mode.el
|
@ -1,74 +1,58 @@
|
|||
;;; ztl-mode.el --- Zongor's Transpiler Language (ZTL) mode for Emacs -*- lexical-binding: t; -*-
|
||||
;; Author: Zongor
|
||||
;; Version: 0.0.1
|
||||
|
||||
(defconst ztl-mode-hook nil
|
||||
"Hook for Zongor's Transpiler Language mode.")
|
||||
|
||||
(defconst ztl-file-extensions '(".ztl")
|
||||
"List of file extensions for Zongor's Transpiler Language.")
|
||||
|
||||
(defconst ztl-keywords
|
||||
'("fn" "to" "in" "is" "as" "use" "set" "if" "else" "for" "loop" "while"
|
||||
"push" "pop" "return" "const" "type" "this" "do" "end" "then" "result"
|
||||
"function" "eq" "ne" "mod" "not" "and" "or" "xor" "band" "bor" "bxor"
|
||||
"srl" "sll")
|
||||
"List of Zongor's Transpiler Language keywords.")
|
||||
|
||||
(defconst ztl-keywords-2
|
||||
'("char" "str" "f16" "f32" "f64" "f128")
|
||||
"List of Zongor's Transpiler Language secondary keywords.")
|
||||
|
||||
(defconst ztl-literals
|
||||
'("true" "false")
|
||||
"List of Zongor's Transpiler Language literals.")
|
||||
;;; ztl-mode.el --- Major mode for ZTL programs
|
||||
|
||||
;;;###autoload
|
||||
(define-derived-mode ztl-mode prog-mode "ZTL"
|
||||
"Major mode for editing Zongor's Transpiler Language (ZTL)."
|
||||
(add-to-list 'auto-mode-alist '("\\.ztl\\'" . ztl-mode))
|
||||
|
||||
;; File extension
|
||||
(setq auto-mode-alist
|
||||
(cons (cons ztl-file-extensions 'ztl-mode) auto-mode-alist))
|
||||
(defconst ztl-mode-syntax-table
|
||||
(let ((syn-table (make-syntax-table)))
|
||||
(modify-syntax-entry ?! "< b" syn-table) ; Line comment (extend to end of line)
|
||||
(modify-syntax-entry ?\[ "(]" syn-table)
|
||||
(modify-syntax-entry ?\] ")[" syn-table)
|
||||
(modify-syntax-entry ?\" "\"" syn-table)
|
||||
syn-table))
|
||||
|
||||
;; Comments
|
||||
(setq comment-start "!")
|
||||
(setq comment-end "")
|
||||
(defvar ztl-keywords
|
||||
'("fn" "to" "in" "is" "as" "use" "set" "if" "else" "for" "loop"
|
||||
"while" "push" "pop" "return" "const" "type" "this" "eq" "ne"
|
||||
"mod" "not" "and" "or" "xor" "band" "bor" "bxor" "srl" "sll"))
|
||||
|
||||
;; Font Lock
|
||||
(set (make-local-variable 'font-lock-defaults)
|
||||
'((ztl-font-lock-keywords)))
|
||||
(defvar ztl-types
|
||||
'("char" "str" "i8" "i16" "i32" "i64" "i128" "f8" "f16" "f32"
|
||||
"f64" "f128" "9p" "9pmsg"))
|
||||
|
||||
;; Whitespace
|
||||
(set (make-local-variable 'whitespace-line-column)
|
||||
80)
|
||||
(whitespace-mode 1))
|
||||
|
||||
(defconst ztl-font-lock-keywords
|
||||
(defvar ztl-font-lock-keywords
|
||||
`(
|
||||
;; Comments
|
||||
("^!.*" . font-lock-comment-face)
|
||||
("!!.*!!" . font-lock-comment-face)
|
||||
|
||||
;; Strings
|
||||
("\\(\"\\([^\\\\\"]\\\\?.*?\\)\"\\|'\\([^\\\\']\\\\?.*?\\)'\\)" 1 font-lock-string-face)
|
||||
|
||||
;; Operators
|
||||
(";" . font-lock-delimiter-face)
|
||||
("!.*$" 0 font-lock-comment-face)
|
||||
("!!\\(.*?\\)!!" 0 font-lock-comment-face)
|
||||
|
||||
;; Keywords
|
||||
,@(mapcar (lambda (kw) `(,kw . font-lock-keyword-face)) ztl-keywords)
|
||||
(,(concat "\\<" (regexp-opt ztl-keywords) "\\>") 0 font-lock-keyword-face)
|
||||
|
||||
;; Secondary keywords
|
||||
,@(mapcar (lambda (kw) `(,kw . font-lock-keyword-face)) ztl-keywords-2)
|
||||
;; Types
|
||||
(,(concat "\\<" (regexp-opt ztl-types) "\\>") 0 font-lock-type-face)
|
||||
|
||||
;; Literals
|
||||
,@(mapcar (lambda (lit) `(,lit . font-lock-builtin-face)) ztl-literals)
|
||||
;; Constants
|
||||
("\\_<\\(true\\|false\\)\\>" 1 font-lock-constant-face)
|
||||
|
||||
;; Structs (PascalCased)
|
||||
("\\_<\\([A-Z][a-zA-Z0-9_]+\\)\\>" 1 font-lock-type-face)
|
||||
|
||||
;; Function definitions
|
||||
("\\<\\([a-zA-Z_][a-zA-Z0-9_]*\\)\\s*(\\)" 1 font-lock-function-name-face)))
|
||||
("\\_<fn\\>\\s-+\\(\\w+\\)\\s-*(" (1 font-lock-function-name-face))
|
||||
|
||||
;; Example usage in .emacs or init.el:
|
||||
;; (add-to-list 'auto-mode-alist '("\\.ztl$" . ztl-mode))
|
||||
;; Function calls
|
||||
("\\_<\\(\\w+\\)\\s-*(\\>" (1 font-lock-function-name-face))
|
||||
))
|
||||
|
||||
(define-derived-mode ztl-mode prog-mode "ZTL"
|
||||
"Major mode for ZTL programming."
|
||||
:syntax-table ztl-mode-syntax-table
|
||||
(setq font-lock-multiline t)
|
||||
(setq-local comment-start "!! ")
|
||||
(setq-local comment-end "!!")
|
||||
(setq-local comment-start-skip "!!+\\s-*")
|
||||
(set (make-local-variable 'font-lock-defaults)
|
||||
'(ztl-font-lock-keywords)))
|
||||
|
||||
(provide 'ztl-mode)
|
||||
|
|
Loading…
Reference in New Issue