commit f7845aa23ac840f0496e857269a3bf76cb85b5c0 Author: Skylar Hill Date: Mon Apr 15 11:26:13 2024 -0500 Initial commit diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f87a19f --- /dev/null +++ b/LICENSE @@ -0,0 +1,16 @@ +MIT No Attribution + +Copyright 2024 Skylar Hill + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/hex0-mode.el b/hex0-mode.el new file mode 100644 index 0000000..1a59798 --- /dev/null +++ b/hex0-mode.el @@ -0,0 +1,61 @@ +;;; hex0-mode.el --- Major mode to add syntax highlighting to hex0. +;;; +;;; MIT No Attribution +;;; +;;; Copyright 2024 Skylar Hill +;;; +;;; Permission is hereby granted, free of charge, to any person obtaining a copy of this +;;; software and associated documentation files (the "Software"), to deal in the Software +;;; without restriction, including without limitation the rights to use, copy, modify, +;;; merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +;;; permit persons to whom the Software is furnished to do so. +;;; +;;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +;;; INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +;;; PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +;;; HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +;;; OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +;;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +;;; +;;; Commentary: +;;; +;;; TODO Make that big regexp for x86 assembly instructions actually match +;;; inside comments, where they actually appear. Right now, the syntax table +;;; entries for the comments overrides the font-lock keywords. +;;; +;;; Code: +(defvar hex0-mode-hook nil) + +(defvar hex0-mode-map + (make-keymap) + "Keymap for hex0 major mode.") + +;;;###autoload +(add-to-list 'auto-mode-alist '("\\.hex0\\'" . hex0-mode)) + +(defconst hex0-font-lock-keywords + (list + '("\\<\\([0-9a-fA-F]\\{2\\}\\)\\>" . font-lock-variable-name-face) + '("\\<\\(a\\(?:a[adms]\\|d[cd]\\|nd\\|rpl\\)\\|b\\(?:ound\\|s\\(?:wap\\|[fr]\\)\\|t[crs]?\\)\\|c\\(?:all\\|bw\\|dq\\|l\\(?:ts\\|[cdi]\\)\\|m\\(?:p\\(?:s\\|xchg\\)\\|[cp]\\)\\|wde?\\)\\|d\\(?:a[as]\\|ec\\|iv\\)\\|e\\(?:nter\\|sc\\)\\|fwait\\|hlt\\|i\\(?:div\\|mul\\|n\\(?:to\\|v\\(?:d\\|lpg\\)\\|[cst]\\)?\\|retd?\\)\\|j\\(?:ae\\|be\\|cxz\\|ecxz\\|ge\\|le\\|mp\\|n\\(?:[abgl]e\\|[abceglopsz]\\)\\|p[eo]\\|[abceglopsz]\\)\\|l\\(?:a\\(?:hf\\|r\\)\\|ds\\|e\\(?:ave\\|[as]\\)\\|fs\\|g\\(?:dt\\|s\\)\\|idt\\|ldt\\|msw\\|o\\(?:ck\\|ds\\|op\\(?:n[ez]\\|[ez]\\)?\\)\\|s[ls]\\|tr\\)\\|m\\(?:ov\\(?:sx?\\|zx\\)?\\|ul\\)\\|n\\(?:eg\\|o[pt]\\)\\|o\\(?:r\\|uts?\\)\\|p\\(?:op\\(?:[af]d\\|[af]\\)?\\|ush\\(?:[af]d\\|[af]\\)?\\)\\|r\\(?:c[lr]\\|e\\(?:p\\(?:n[ez]\\|[ez]\\)\\|tf\\|[pt]\\)\\|o[lr]\\)\\|s\\(?:a\\(?:hf\\|[lr]\\)\\|bb\\|cas\\|et\\(?:ae\\|be\\|ge\\|le\\|n\\(?:[agl]e\\|[abceglopsz]\\)\\|p[eo]\\|[bceglopsz]\\)\\|gdt\\|h\\(?:[lr]d\\|[lr]\\)\\|idt\\|ldt\\|msw\\|t\\(?:os\\|[cdir]\\)\\|ub\\)\\|test\\|ver[rw]\\|w\\(?:ait\\|binv\\)\\|x\\(?:chg\\|latb?\\|or\\)\\)\\>". font-lock-builtin-face))) + +(defvar hex0-mode-syntax-table + (let ((st (make-syntax-table))) + (modify-syntax-entry ?\; "<" st) + ;; (modify-syntax-entry ?# "<" st) + (modify-syntax-entry ?\n ">" st) + st) + "Syntax table in hex0-mode.") + +(defun hex0-mode () + "Major mode to add syntax highlighting to hex0 code." + (interactive) + (kill-all-local-variables) + (set-syntax-table hex0-mode-syntax-table) + (use-local-map hex0-mode-map) + (set (make-local-variable 'font-lock-defaults) '(hex0-font-lock-keywords)) + (setq major-mode 'hex0-mode) + (setq mode-name "hex0") + (run-hooks 'hex0-mode-hook)) + +(provide 'hex0-mode) +;;; hex0-mode.el ends here