tablegen-mode.el revision bdb41194dd4890dc1572d630d078708e095981f1
1bdb41194dd4890dc1572d630d078708e095981f1Misha Brukman;; Maintainer:  The LLVM team, http://llvm.cs.uiuc.edu/
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