tablegen-mode.el revision 9dce2b33807f47d794b0482313ae3fe0d275c833
19dce2b33807f47d794b0482313ae3fe0d275c833Reid Spencer;; Maintainer: The LLVM team, http://llvm.org/ 2bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman;; Description: Major mode for TableGen description files (part of LLVM project) 3bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman;; Updated: 2003-08-11 4bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 5bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman;; Create mode-specific tables. 6bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(defvar tablegen-mode-syntax-table nil 7bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman "Syntax table used while in TableGen mode.") 8bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 9bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(defvar tablegen-font-lock-keywords 10bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (list 11bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; Comments 12bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman '("\/\/.*" . font-lock-comment-face) 13bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; Strings 14bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman '("\"[^\"]+\"" . font-lock-string-face) 15bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; Hex constants 16bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman '("0x[0-9A-Fa-f]+" . font-lock-preprocessor-face) 17bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; Binary constants 18bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman '("0b[01]+" . font-lock-preprocessor-face) 19bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; Integer literals 20bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman '("[-]?[0-9]+" . font-lock-preprocessor-face) 21bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; Floating point constants 22bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman '("[-+]?[0-9]+\.[0-9]*\([eE][-+]?[0-9]+\)?" . font-lock-preprocessor-face) 23bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; Keywords 24bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman '("include\\|def\\|let\\|in\\|code\\|dag\\|field" . font-lock-keyword-face) 25bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; Types 26bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman '("class\\|int\\|string\\|list\\|bits?" . font-lock-type-face) 27bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ) 28bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman "Syntax highlighting for TableGen" 29bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ) 30bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 31bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman;; ---------------------- Syntax table --------------------------- 32bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman;; Shamelessly ripped from jasmin.el 33bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman;; URL: http://www.neilvandyke.org/jasmin-emacs/jasmin.el.html 34bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 35bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(if (not tablegen-mode-syntax-table) 36bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (progn 37bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (setq tablegen-mode-syntax-table (make-syntax-table)) 38bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (mapcar (function (lambda (n) 39bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (modify-syntax-entry (aref n 0) 40bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (aref n 1) 41bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman tablegen-mode-syntax-table))) 42bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman '( 43bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; whitespace (` ') 44bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\^m " "] 45bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\f " "] 46bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\n " "] 47bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\t " "] 48bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\ " "] 49bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; word constituents (`w') 50bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;;[?< "w"] 51bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;;[?> "w"] 52bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\% "w"] 53bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;;[?_ "w "] 54bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; comments 55bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\; "< "] 56bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\n "> "] 57bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;;[?\r "> "] 58bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;;[?\^m "> "] 59bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; symbol constituents (`_') 60bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; punctuation (`.') 61bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; open paren (`(') 62bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\( "("] 63bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\[ "("] 64bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\{ "("] 65bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; close paren (`)') 66bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\) ")"] 67bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\] ")"] 68bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\} ")"] 69bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; string quote ('"') 70bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\" "\""] 71bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman )))) 72bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 73bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman;; --------------------- Abbrev table ----------------------------- 74bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 75bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(defvar tablegen-mode-abbrev-table nil 76bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman "Abbrev table used while in TableGen mode.") 77bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(define-abbrev-table 'tablegen-mode-abbrev-table ()) 78bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 79bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(defvar tablegen-mode-hook nil) 80bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(defvar tablegen-mode-map nil) ; Create a mode-specific keymap. 81bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 82bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(if (not tablegen-mode-map) 83bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman () ; Do not change the keymap if it is already set up. 84bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (setq tablegen-mode-map (make-sparse-keymap)) 85bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (define-key tablegen-mode-map "\t" 'tab-to-tab-stop) 86bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (define-key tablegen-mode-map "\es" 'center-line) 87bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (define-key tablegen-mode-map "\eS" 'center-paragraph)) 88bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 89bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 90bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(defun tablegen-mode () 91bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman "Major mode for editing TableGen description files. 92bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman \\{tablegen-mode-map} 93bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman Runs tablegen-mode-hook on startup." 94bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (interactive) 95bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (kill-all-local-variables) 96bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (use-local-map tablegen-mode-map) ; Provides the local keymap. 97bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (setq major-mode 'tablegen-mode) 98bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 99bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (make-local-variable 'font-lock-defaults) 100bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (setq major-mode 'tablegen-mode ; This is how describe-mode 101bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ; finds the doc string to print. 102bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman mode-name "TableGen" ; This name goes into the modeline. 103bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman font-lock-defaults `(tablegen-font-lock-keywords)) 104bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 105bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (setq local-abbrev-table tablegen-mode-abbrev-table) 106bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (set-syntax-table tablegen-mode-syntax-table) 107bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (run-hooks 'tablegen-mode-hook)) ; Finally, this permits the user to 108bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ; customize the mode with a hook. 109bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 110bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman;; Associate .td files with tablegen-mode 111bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(setq auto-mode-alist (append '(("\\.td$" . tablegen-mode)) auto-mode-alist)) 112bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 113bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(provide 'tablegen-mode) 114bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman;; end of tablegen-mode.el 115