diff --git a/README.md b/README.md deleted file mode 100644 index ec77030..0000000 --- a/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# ztl-mode - -ZTL mode for Emacs \ No newline at end of file diff --git a/README.org b/README.org new file mode 100644 index 0000000..54684e8 --- /dev/null +++ b/README.org @@ -0,0 +1,7 @@ +#+OPTIONS: toc:nil + +* ztl-mode +:PROPERTIES: +:CUSTOM_ID: ztl-mode +:END: +ZTL mode for Emacs diff --git a/ztl-mode.el b/ztl-mode.el new file mode 100644 index 0000000..b2cddd1 --- /dev/null +++ b/ztl-mode.el @@ -0,0 +1,74 @@ +;;; 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.") + +;;;###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))) + + ;; Whitespace + (set (make-local-variable 'whitespace-line-column) + 80) + (whitespace-mode 1)) + +(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) + + ;; Literals + ,@(mapcar (lambda (lit) `(,lit . font-lock-builtin-face)) ztl-literals) + + ;; Function definitions + ("\\<\\([a-zA-Z_][a-zA-Z0-9_]*\\)\\s*(\\)" 1 font-lock-function-name-face))) + +;; Example usage in .emacs or init.el: +;; (add-to-list 'auto-mode-alist '("\\.ztl$" . ztl-mode)) + +(provide 'ztl-mode)