tablegen-mode.el revision 041b3f835682588cb63df7e609d726369dd6b7d3
19dce2b33807f47d794b0482313ae3fe0d275c833Reid Spencer;; Maintainer: The LLVM team, http://llvm.org/ 2bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman;; Description: Major mode for TableGen description files (part of LLVM project) 3d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling;; Updated: 2007-03-26 4d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling 5d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling(require 'comint) 6d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling(require 'custom) 7d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling(require 'ansi-color) 8bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 9bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman;; Create mode-specific tables. 10bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(defvar tablegen-mode-syntax-table nil 11bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman "Syntax table used while in TableGen mode.") 12bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 13d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling(defvar td-decorators-face 'td-decorators-face 14d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling "Face method decorators.") 15d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling(make-face 'td-decorators-face) 16d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling 17bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(defvar tablegen-font-lock-keywords 18d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling (let ((kw (mapconcat 'identity 19041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling '("class" "defm" "def" "field" "include" "in" 20d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling "let" "multiclass") 21d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling "\\|")) 22d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling (type-kw (mapconcat 'identity 23d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling '("bit" "bits" "code" "dag" "int" "list" "string") 24d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling "\\|")) 25d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling ) 26d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling (list 27d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling ;; Comments 28d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling '("\/\/" . font-lock-comment-face) 29d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling ;; Strings 30d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling '("\"[^\"]+\"" . font-lock-string-face) 31d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling ;; Hex constants 32d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling '("0x[0-9A-Fa-f]+" . font-lock-preprocessor-face) 33d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling ;; Binary constants 34d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling '("0b[01]+" . font-lock-preprocessor-face) 35d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling ;; Integer literals 36d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling '("[-]?[0-9]+" . font-lock-preprocessor-face) 37d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling ;; Floating point constants 38d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling '("[-+]?[0-9]+\.[0-9]*\([eE][-+]?[0-9]+\)?" . font-lock-preprocessor-face) 39d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling 40d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling '("^[ \t]*\\(@.+\\)" 1 'td-decorators-face) 41d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling ;; Keywords 42d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling (cons (concat "\\<\\(" kw "\\)\\>[ \n\t(]") 1) 43d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling 44d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling ;; Type keywords 45d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling (cons (concat "\\<\\(" type-kw "\\)[ \n\t(]") 1) 46d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling )) 47d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling "Additional expressions to highlight in TableGen mode.") 48d4eeb800439da892c73be63919eb7a289140ced6Bill Wendling(put 'tablegen-mode 'font-lock-defaults '(tablegen-font-lock-keywords)) 49bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 50bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman;; ---------------------- Syntax table --------------------------- 51bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman;; Shamelessly ripped from jasmin.el 52041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling;; URL: http://www.neilvandyke.org/jasmin-emacs/jasmin.el 53bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 54bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(if (not tablegen-mode-syntax-table) 55bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (progn 56bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (setq tablegen-mode-syntax-table (make-syntax-table)) 57041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling (mapcar (function 58041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling (lambda (n) 59041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling (modify-syntax-entry (aref n 0) 60041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling (aref n 1) 61041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling tablegen-mode-syntax-table))) 62bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman '( 63bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; whitespace (` ') 64bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\^m " "] 65bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\f " "] 66bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\n " "] 67bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\t " "] 68bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\ " "] 69bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; word constituents (`w') 70bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\% "w"] 71bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;;[?_ "w "] 72bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; comments 73bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\; "< "] 74bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman [?\n "> "] 75bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;;[?\r "> "] 76bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;;[?\^m "> "] 77bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; symbol constituents (`_') 78bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; punctuation (`.') 79bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; open paren (`(') 80041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling [?\( "("] 81041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling [?\[ "("] 82041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling [?\{ "("] 83041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling [?\< "("] 84bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; close paren (`)') 85041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling [?\) ")"] 86041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling [?\] ")"] 87041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling [?\} ")"] 88041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling [?\> ")"] 89bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ;; string quote ('"') 90041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling [?\" "\""] 91bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman )))) 92bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 93bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman;; --------------------- Abbrev table ----------------------------- 94bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 95bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(defvar tablegen-mode-abbrev-table nil 96bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman "Abbrev table used while in TableGen mode.") 97bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(define-abbrev-table 'tablegen-mode-abbrev-table ()) 98bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 99bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(defvar tablegen-mode-hook nil) 100bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(defvar tablegen-mode-map nil) ; Create a mode-specific keymap. 101bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 102bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(if (not tablegen-mode-map) 103bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman () ; Do not change the keymap if it is already set up. 104bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (setq tablegen-mode-map (make-sparse-keymap)) 105041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling (define-key tablegen-mode-map "\t" 'tab-to-tab-stop) 106bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (define-key tablegen-mode-map "\es" 'center-line) 107bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (define-key tablegen-mode-map "\eS" 'center-paragraph)) 108bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 109bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(defun tablegen-mode () 110bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman "Major mode for editing TableGen description files. 111bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman \\{tablegen-mode-map} 112bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman Runs tablegen-mode-hook on startup." 113bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (interactive) 114bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (kill-all-local-variables) 115bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (use-local-map tablegen-mode-map) ; Provides the local keymap. 116bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (setq major-mode 'tablegen-mode) 117bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 118041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling (make-local-variable 'font-lock-defaults) 119bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (setq major-mode 'tablegen-mode ; This is how describe-mode 120bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ; finds the doc string to print. 121041b3f835682588cb63df7e609d726369dd6b7d3Bill Wendling mode-name "TableGen" ; This name goes into the modeline. 122bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman font-lock-defaults `(tablegen-font-lock-keywords)) 123bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 124bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (setq local-abbrev-table tablegen-mode-abbrev-table) 125bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (set-syntax-table tablegen-mode-syntax-table) 126bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman (run-hooks 'tablegen-mode-hook)) ; Finally, this permits the user to 127bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman ; customize the mode with a hook. 128bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 129bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman;; Associate .td files with tablegen-mode 130bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(setq auto-mode-alist (append '(("\\.td$" . tablegen-mode)) auto-mode-alist)) 131bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman 132bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman(provide 'tablegen-mode) 133bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman;; end of tablegen-mode.el 134