xref: /Universal-ctags/misc/ctags-optlib-mode.el (revision 3d350729ad7844f0b1e04ba27458bd51cbb633f9)
1*3d350729SMasatake YAMATO;;
2*3d350729SMasatake YAMATO;;  Copyright (c) 2019, Red Hat, Inc.
3*3d350729SMasatake YAMATO;;  Copyright (c) 2019, Masatake YAMATO
4*3d350729SMasatake YAMATO;;
5*3d350729SMasatake YAMATO;;  Author: Masatake YAMATO <yamato@redhat.com>
6*3d350729SMasatake YAMATO;;
7*3d350729SMasatake YAMATO;; This program is free software; you can redistribute it and/or
8*3d350729SMasatake YAMATO;; modify it under the terms of the GNU General Public License
9*3d350729SMasatake YAMATO;; as published by the Free Software Foundation; either version 2
10*3d350729SMasatake YAMATO;; of the License, or (at your option) any later version.
11*3d350729SMasatake YAMATO;;
12*3d350729SMasatake YAMATO;; This program is distributed in the hope that it will be useful,
13*3d350729SMasatake YAMATO;; but WITHOUT ANY WARRANTY; without even the implied warranty of
14*3d350729SMasatake YAMATO;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15*3d350729SMasatake YAMATO;; GNU General Public License for more details.
16*3d350729SMasatake YAMATO;;
17*3d350729SMasatake YAMATO;; You should have received a copy of the GNU General Public License
18*3d350729SMasatake YAMATO;; along with this program; if not, write to the Free Software
19*3d350729SMasatake YAMATO;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
20*3d350729SMasatake YAMATO;; USA.
21*3d350729SMasatake YAMATO
22*3d350729SMasatake YAMATO(require 'generic)
23*3d350729SMasatake YAMATO
24*3d350729SMasatake YAMATO(defun ctags-optlib-mode-setup-function ()
25*3d350729SMasatake YAMATO  (let ((st (syntax-table)))
26*3d350729SMasatake YAMATO    (modify-syntax-entry ?\' " " st)
27*3d350729SMasatake YAMATO    (modify-syntax-entry ?\" " " st)))
28*3d350729SMasatake YAMATO
29*3d350729SMasatake YAMATO(define-generic-mode ctags-optlib-mode
30*3d350729SMasatake YAMATO  '(?#)
31*3d350729SMasatake YAMATO  nil
32*3d350729SMasatake YAMATO  '(;;
33*3d350729SMasatake YAMATO    ;; Language
34*3d350729SMasatake YAMATO    ;;
35*3d350729SMasatake YAMATO    ("^--\\(langdef\\)=\\([a-zA-Z0-9]+\\)"
36*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
37*3d350729SMasatake YAMATO     (2 font-lock-type-face t))
38*3d350729SMasatake YAMATO    ("^--\\(map\\)-\\([a-zA-Z0-9]+\\)=.*"
39*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
40*3d350729SMasatake YAMATO     (2 font-lock-type-face t))
41*3d350729SMasatake YAMATO    ("--\\(alias\\)-\\([a-zA-Z0-9]+\\)=.*"
42*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
43*3d350729SMasatake YAMATO     (2 font-lock-type-face t))
44*3d350729SMasatake YAMATO    ;;
45*3d350729SMasatake YAMATO    ;; Kinds
46*3d350729SMasatake YAMATO    ;;
47*3d350729SMasatake YAMATO    ("^--\\(kinddef\\)-\\([^=]+\\)=\\([a-zA-Z]\\),\\([a-zA-Z0-9]+\\),\\(.*\\)$"
48*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
49*3d350729SMasatake YAMATO     (2 font-lock-type-face t)
50*3d350729SMasatake YAMATO     (3 font-lock-constant-face t)
51*3d350729SMasatake YAMATO     (4 font-lock-variable-name-face t)
52*3d350729SMasatake YAMATO     (5 font-lock-doc-face t))
53*3d350729SMasatake YAMATO    ("^--\\(kinds\\)-\\([^=]+\\)=[+-]?\\([a-zA-Z]+\\)"
54*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
55*3d350729SMasatake YAMATO     (2 font-lock-type-face t)
56*3d350729SMasatake YAMATO     (3 font-lock-constant-face t))
57*3d350729SMasatake YAMATO    ;;
58*3d350729SMasatake YAMATO    ;; Singe line regex
59*3d350729SMasatake YAMATO    ;;
60*3d350729SMasatake YAMATO    ("^--\\(regex\\)-\\([^=]+\\)="
61*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
62*3d350729SMasatake YAMATO     (2 font-lock-type-face t))
63*3d350729SMasatake YAMATO    ;;
64*3d350729SMasatake YAMATO    ;; Mline regex
65*3d350729SMasatake YAMATO    ;;
66*3d350729SMasatake YAMATO    ("^--\\(mline-regex\\)-\\([^=]+\\)="
67*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
68*3d350729SMasatake YAMATO     (2 font-lock-type-face t))
69*3d350729SMasatake YAMATO    ;;
70*3d350729SMasatake YAMATO    ;; Mtable regex
71*3d350729SMasatake YAMATO    ;;
72*3d350729SMasatake YAMATO    ("^--\\(_tabledef\\)-\\([^=]+\\)=\\([a-zA-Z0-9_]+\\)"
73*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
74*3d350729SMasatake YAMATO     (2 font-lock-type-face t)
75*3d350729SMasatake YAMATO     (3 font-lock-function-name-face t)
76*3d350729SMasatake YAMATO     )
77*3d350729SMasatake YAMATO    ("^--\\(_mtable-regex\\)-\\([^=]+\\)=\\([a-zA-Z0-9_]+\\)/\\(.*\\)$"
78*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
79*3d350729SMasatake YAMATO     (2 font-lock-type-face t)
80*3d350729SMasatake YAMATO     (3 font-lock-function-name-face t)
81*3d350729SMasatake YAMATO     (4 nil t))
82*3d350729SMasatake YAMATO    ("^--\\(_mtable-extend\\)-\\([^=]+\\)=\\([a-zA-Z0-9_]+\\)\\+\\([a-zA-Z0-9_]+\\)"
83*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
84*3d350729SMasatake YAMATO     (2 font-lock-type-face t)
85*3d350729SMasatake YAMATO     (3 font-lock-function-name-face t)
86*3d350729SMasatake YAMATO     (4 font-lock-function-name-face t))
87*3d350729SMasatake YAMATO    ;;
88*3d350729SMasatake YAMATO    ;; Fields
89*3d350729SMasatake YAMATO    ;;
90*3d350729SMasatake YAMATO    ("^--\\(_fielddef\\)-\\([a-zA-Z0-9]+\\)=\\([a-zA-Z0-9]+\\),\\(.*\\)$"
91*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
92*3d350729SMasatake YAMATO     (2 font-lock-type-face t)
93*3d350729SMasatake YAMATO     (3 font-lock-variable-name-face t)
94*3d350729SMasatake YAMATO     (4 font-lock-doc-face t))
95*3d350729SMasatake YAMATO    ("^--\\(fields\\)-\\([a-zA-Z0-9]+\\)=.?{\\([a-zA-Z0-9]+\\)}"
96*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
97*3d350729SMasatake YAMATO     (2 font-lock-type-face t)
98*3d350729SMasatake YAMATO     (3 font-lock-variable-name-face t))
99*3d350729SMasatake YAMATO    ;;
100*3d350729SMasatake YAMATO    ;; Roles
101*3d350729SMasatake YAMATO    ;;
102*3d350729SMasatake YAMATO    ("^--\\(_roledef\\)-\\([a-zA-Z0-9]+\\)=\\([a-zA-Z]\\)\\.\\([a-zA-Z0-9]+\\),\\(.*\\)$"
103*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
104*3d350729SMasatake YAMATO     (2 font-lock-type-face t)
105*3d350729SMasatake YAMATO     (3 font-lock-constant-face t)
106*3d350729SMasatake YAMATO     (4 font-lock-constant-face t)
107*3d350729SMasatake YAMATO     (5 font-lock-doc-face t))
108*3d350729SMasatake YAMATO    ;;
109*3d350729SMasatake YAMATO    ;; Extras
110*3d350729SMasatake YAMATO    ;;
111*3d350729SMasatake YAMATO    ("^--\\(_extradef\\)-\\([a-zA-Z0-9]+\\)=\\([a-zA-Z0-9]+\\),\\(.*\\)$"
112*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
113*3d350729SMasatake YAMATO     (2 font-lock-type-face t)
114*3d350729SMasatake YAMATO     (3 font-lock-variable-name-face t)
115*3d350729SMasatake YAMATO     (4 font-lock-doc-face t))
116*3d350729SMasatake YAMATO    ("^--\\(extras\\)-\\([a-zA-Z0-9]+\\)=.?{\\([a-zA-Z0-9]+\\)}"
117*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
118*3d350729SMasatake YAMATO     (2 font-lock-type-face t)
119*3d350729SMasatake YAMATO     (3 font-lock-variable-name-face t))
120*3d350729SMasatake YAMATO    ;;
121*3d350729SMasatake YAMATO    ;; Flags
122*3d350729SMasatake YAMATO    ;;
123*3d350729SMasatake YAMATO    (".*{\\(tenter\\|tjump\\)=\\([a-zA-Z0-9_]+\\)}"
124*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
125*3d350729SMasatake YAMATO     (2 font-lock-function-name-face t))
126*3d350729SMasatake YAMATO    (".*{\\(tenter\\)=\\([a-zA-Z0-9_]+\\)\\(,\\([a-zA-Z0-9_]+\\)\\)}"
127*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
128*3d350729SMasatake YAMATO     (2 font-lock-function-name-face t)
129*3d350729SMasatake YAMATO     (4 font-lock-function-name-face t))
130*3d350729SMasatake YAMATO    ("{\\(_field\\)=\\([a-zA-Z0-9_]+\\):[^}]+}"
131*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
132*3d350729SMasatake YAMATO     (2 font-lock-variable-name-face t))
133*3d350729SMasatake YAMATO    ("{\\(_role\\)=\\([a-zA-Z0-9_]+\\)}"
134*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
135*3d350729SMasatake YAMATO     (2 font-lock-constant-face t))
136*3d350729SMasatake YAMATO    ("{\\(_extra\\)=\\([a-zA-Z0-9_]+\\)}"
137*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
138*3d350729SMasatake YAMATO     (2 font-lock-variable-name-face t))
139*3d350729SMasatake YAMATO    ("{\\(base\\)=\\([a-zA-Z0-9]+\\)}"
140*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
141*3d350729SMasatake YAMATO     (2 font-lock-type-face t))
142*3d350729SMasatake YAMATO    ("{\\(_advanceTo\\)=[0-9]+\\(start\\|end\\)}"
143*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
144*3d350729SMasatake YAMATO     (2 font-lock-builtin-face t))
145*3d350729SMasatake YAMATO    ("{\\(scope\\)=\\(pop\\|ref\\|set\\|push\\|clear\\)}"
146*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t)
147*3d350729SMasatake YAMATO     (2 font-lock-builtin-face t))
148*3d350729SMasatake YAMATO    ("{\\(icase\\|exclusive\\|tleave\\|placeholder\\|tquit\\|mgroup\\|dedicated\\|shared\\|_trace\\)[^}]*}"
149*3d350729SMasatake YAMATO     (1 font-lock-keyword-face t))
150*3d350729SMasatake YAMATO    ("/\\([a-zA-Z]\\)/"
151*3d350729SMasatake YAMATO     (1 font-lock-constant-face t))
152*3d350729SMasatake YAMATO    )
153*3d350729SMasatake YAMATO  '("\\.ctags\\'")
154*3d350729SMasatake YAMATO  '(ctags-optlib-mode-setup-function)
155*3d350729SMasatake YAMATO  "Mode for editing .ctags optlib parser file")
156*3d350729SMasatake YAMATO
157*3d350729SMasatake YAMATO(provide 'ctags-optlib-mode)
158