This commit is contained in:
zongor 2025-04-19 20:32:58 -04:00
parent 55e62a7975
commit 245ffaed4b
1 changed files with 47 additions and 57 deletions

View File

@ -1,74 +1,64 @@
;;; ztl-mode.el --- Zongor's Transpiler Language (ZTL) mode for Emacs -*- lexical-binding: t; -*-
;;; Zongor's Transpiler Language (ZTL) mode for Emacs
;; Author: Zongor
;; Version: 0.0.1
(defconst ztl-mode-hook nil
"Hook for Zongor's Transpiler Language mode.")
;; Zongor's Transpiler Language (ZTL) mode for Emacs
;; Author: [Your Name]
;; Version: 1.0
(defconst ztl-file-extensions '(".ztl")
"List of file extensions for Zongor's Transpiler Language.")
(defconst ztl-mode-syntax-table
(let ((table (make-syntax-table)))
;; Comments start with '!' and end at the end of the line
(modify-syntax-entry ?! "<" table)
(modify-syntax-entry ?\n ">" table)
(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.")
;; Strings can be enclosed in single or double quotes
(modify-syntax-entry ?\" "\"" table)
(modify-syntax-entry ?\' "\"" table)
(defconst ztl-keywords-2
'("char" "str" "f16" "f32" "f64" "f128")
"List of Zongor's Transpiler Language secondary keywords.")
;; Operators
(modify-syntax-entry ?+ "." table)
(modify-syntax-entry ?- "." table)
(modify-syntax-entry ?* "." table)
(modify-syntax-entry ?/ "." table)
(modify-syntax-entry ?= "." table)
(defconst ztl-literals
'("true" "false")
"List of Zongor's Transpiler Language literals.")
;;;###autoload
(define-derived-mode ztl-mode prog-mode "ZTL"
"Major mode for editing Zongor's Transpiler Language (ZTL)."
;; File extension
(setq auto-mode-alist
(cons (cons ztl-file-extensions 'ztl-mode) auto-mode-alist))
;; Comments
(setq comment-start "!")
(setq comment-end "")
;; Font Lock
(set (make-local-variable 'font-lock-defaults)
'((ztl-font-lock-keywords)))
;; Brackets and parentheses
(modify-syntax-entry ?\( "()" table)
(modify-syntax-entry ?\) ")(" table)
(modify-syntax-entry ?\[ "[]" table)
(modify-syntax-entry ?\] "][" table)
;; Whitespace
(set (make-local-variable 'whitespace-line-column)
80)
(whitespace-mode 1))
(modify-syntax-entry ?\t " " table)
table))
(defconst ztl-font-lock-keywords
`(
;; Comments
("^!.*" . font-lock-comment-face)
("!!.*!!" . font-lock-comment-face)
;; Strings
("\\(\"\\([^\\\\\"]\\\\?.*?\\)\"\\|'\\([^\\\\']\\\\?.*?\\)'\\)" 1 font-lock-string-face)
;; Operators
(";" . font-lock-delimiter-face)
;; Keywords
,@(mapcar (lambda (kw) `(,kw . font-lock-keyword-face)) ztl-keywords)
;; Secondary keywords
,@(mapcar (lambda (kw) `(,kw . font-lock-keyword-face)) ztl-keywords-2)
,(rx symbol-word
(or "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" "char" "str" "f16" "f32"
"f64" "f128")
symbol-end)
;; Literals
,@(mapcar (lambda (lit) `(,lit . font-lock-builtin-face)) ztl-literals)
,(rx (or "true" "false") symbol-end)
;; Function definitions
("\\<\\([a-zA-Z_][a-zA-Z0-9_]*\\)\\s*(\\)" 1 font-lock-function-name-face)))
(,(rx symbol-start (one-or-more word-char) symbol-end whitespace (zero-or-more " ")) . font-lock-function-name-face))
)
;; Example usage in .emacs or init.el:
;; (add-to-list 'auto-mode-alist '("\\.ztl$" . ztl-mode))
(define-derived-mode ztl-mode prog-mode "ZTL"
"Major mode for editing Zongor's Transpiler Language (ZTL)."
;; Set the syntax table
(set-syntax-table ztl-mode-syntax-table)
;; Enable font lock
(font-lock-add-keywords 'ztl-mode ztl-font-lock-keywords))
;; Add to auto-mode-alist if needed
;;(add-to-list 'auto-mode-alist '("\\.ztl\\'" . ztl-mode))
(provide 'ztl-mode)