annotate lisp/progmodes/antlr-mode.el @ 103919:ab3de87ae5a3

(copyright-update): Save match-data across y-or-n-p, for safety.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Thu, 16 Jul 2009 02:01:31 +0000
parents 3b3c7e10cd97
children 5b25a52d36d3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 38100
diff changeset
1 ;;; antlr-mode.el --- major mode for ANTLR grammar files
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2
100908
a9dc0e7c3f2b Add 2009 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 98510
diff changeset
3 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
a9dc0e7c3f2b Add 2009 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 98510
diff changeset
4 ;; 2008, 2009 Free Software Foundation, Inc.
a9dc0e7c3f2b Add 2009 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 98510
diff changeset
5
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
6 ;; Author: Christoph.Wedler@sap.com
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
7 ;; Keywords: languages, ANTLR, code generator
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
8 ;; Version: (see `antlr-version' below)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
9 ;; X-URL: http://antlr-mode.sourceforge.net/
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
10
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
11 ;; This file is part of GNU Emacs.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
12
94673
52b7a8c22af5 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
13 ;; GNU Emacs is free software: you can redistribute it and/or modify
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
94673
52b7a8c22af5 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
15 ;; the Free Software Foundation, either version 3 of the License, or
52b7a8c22af5 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
16 ;; (at your option) any later version.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
17
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
21 ;; GNU General Public License for more details.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
22
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
94673
52b7a8c22af5 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
25
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
27
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
28 ;; The Emacs package ANTLR-Mode provides: syntax highlighting for ANTLR grammar
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
29 ;; files, automatic indentation, menus containing rule/token definitions and
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
30 ;; supported options and various other things like running ANTLR from within
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
31 ;; Emacs.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
32
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
33 ;; For details, check <http://antlr-mode.sourceforge.net/> or, if you prefer
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
34 ;; the manual style, follow all commands mentioned in the documentation of
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
35 ;; `antlr-mode'. ANTLR is a LL(k)-based recognition tool which generates
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
36 ;; lexers, parsers and tree transformers in Java, C++ or Sather and can be
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
37 ;; found at <http://www.antlr.org/>.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
38
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
39 ;; Bug fixes, bug reports, improvements, and suggestions for the newest version
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
40 ;; are strongly appreciated.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
41
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
42 ;; To-do/Wish-list:
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
43 ;;
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
44 ;; * Next Version [C-c C-w]. Produce HTML document with syntax highlighted
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
45 ;; and hyper-links (using htmlize).
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
46 ;; * Next Version [C-c C-u]. Insert/update special comments: each rule lists
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
47 ;; all rules which use the current rule. With font-lock update.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
48 ;; * Next Version. Make hiding much more customizable.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
49 ;; * Planned [C-c C-j]. Jump to generated coding.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
50 ;; * Planned. Further support for imenu, i.e., include entries for method
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
51 ;; definitions at beginning of grammar class.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
52 ;; * Planned [C-c C-p]. Pack/unpack rule/subrule & options (one/multi-line).
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
53 ;;
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
54 ;; * Probably. Show rules/dependencies for ANT like for Makefile (does ANT
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
55 ;; support vocabularies and grammar inheritance?), I have to look at
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
56 ;; jde-ant.el: http://jakarta.apache.org/ant/manual/OptionalTasks/antlr.html
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
57 ;; * Probably. Make `indent-region' faster, especially in actions. ELP
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
58 ;; profiling in a class init action shows half the time is spent in
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
59 ;; `antlr-next-rule', the other half in `c-guess-basic-syntax'.
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
60 ;; * Unlikely. Sather as generated language with syntax highlighting etc/.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
61 ;; Questions/problems: is sather-mode.el the standard mode for sather, is it
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
62 ;; still supported, what is its relationship to eiffel3.el? Requirement:
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
63 ;; this mode must not depend on a Sather mode.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
64 ;; * Unlikely. Faster syntax highlighting: sectionize the buffer into Antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
65 ;; and action code and run special highlighting functions on these regions.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
66 ;; Problems: code size, this mode would depend on font-lock internals.
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
67
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
68 ;;; Installation:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
69
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
70 ;; This file requires Emacs-20.3, XEmacs-20.4 or higher and package cc-mode.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
71
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
72 ;; If antlr-mode is not part of your distribution, put this file into your
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
73 ;; load-path and the following into your ~/.emacs:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
74 ;; (autoload 'antlr-mode "antlr-mode" nil t)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
75 ;; (setq auto-mode-alist (cons '("\\.g\\'" . antlr-mode) auto-mode-alist))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
76 ;; (add-hook 'speedbar-load-hook ; would be too late in antlr-mode.el
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
77 ;; (lambda () (speedbar-add-supported-extension ".g")))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
78
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
79 ;; I strongly recommend to use font-lock with a support mode like fast-lock,
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
80 ;; lazy-lock or better jit-lock (Emacs-21.1+) / lazy-shot (XEmacs).
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
81
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
82 ;; To customize, use menu item "Antlr" -> "Customize Antlr".
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
83
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
84 ;;; Code:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
85
87574
21fcd219fd6e * mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87170
diff changeset
86 (eval-when-compile
21fcd219fd6e * mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87170
diff changeset
87 (require 'cl))
21fcd219fd6e * mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87170
diff changeset
88
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
89 (require 'easymenu)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
90
87574
21fcd219fd6e * mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87170
diff changeset
91 ;; Just to get the rid of the byte compiler warning. The code for
21fcd219fd6e * mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87170
diff changeset
92 ;; this function and its friends are too complex for their own good.
21fcd219fd6e * mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87170
diff changeset
93 (declare-function cond-emacs-xemacs-macfn "antlr-mode" (args &optional msg))
21fcd219fd6e * mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87170
diff changeset
94
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
95 ;; General Emacs/XEmacs-compatibility compile-time macros
87574
21fcd219fd6e * mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87170
diff changeset
96 (eval-when-compile
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
97 (defmacro cond-emacs-xemacs (&rest args)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49554
diff changeset
98 (cond-emacs-xemacs-macfn
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
99 args "`cond-emacs-xemacs' must return exactly one element"))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
100 (defun cond-emacs-xemacs-macfn (args &optional msg)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
101 (if (atom args) args
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
102 (and (eq (car args) :@) (null msg) ; (:@ ...spliced...)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
103 (setq args (cdr args)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
104 msg "(:@ ....) must return exactly one element"))
85511
f873840f9fea * emulation/edt-mapper.el (function-key-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78487
diff changeset
105 (let ((ignore (if (featurep 'xemacs) :EMACS :XEMACS))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
106 (mode :BOTH) code)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
107 (while (consp args)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
108 (if (memq (car args) '(:EMACS :XEMACS :BOTH)) (setq mode (pop args)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
109 (if (atom args)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
110 (or args (error "Used selector %s without elements" mode))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
111 (or (eq ignore mode)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
112 (push (cond-emacs-xemacs-macfn (car args)) code))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
113 (pop args)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
114 (cond (msg (if (or args (cdr code)) (error msg) (car code)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
115 ((or (null args) (eq ignore mode)) (nreverse code))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
116 (t (nconc (nreverse code) args))))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
117 ;; Emacs/XEmacs-compatibility `defun': remove interactive "_" for Emacs, use
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
118 ;; existing functions when they are `fboundp', provide shortcuts if they are
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
119 ;; known to be defined in a specific Emacs branch (for short .elc)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
120 (defmacro defunx (name arglist &rest definition)
85511
f873840f9fea * emulation/edt-mapper.el (function-key-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78487
diff changeset
121 (let ((xemacsp (featurep 'xemacs)) reuses)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
122 (while (memq (car definition)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
123 '(:try :emacs-and-try :xemacs-and-try))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
124 (if (eq (pop definition) (if xemacsp :xemacs-and-try :emacs-and-try))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
125 (setq reuses (car definition)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
126 definition nil)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
127 (push (pop definition) reuses)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
128 (if (and reuses (symbolp reuses))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
129 `(defalias ',name ',reuses)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
130 (let* ((docstring (if (stringp (car definition)) (pop definition)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
131 (spec (and (not xemacsp)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
132 (eq (car-safe (car definition)) 'interactive)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
133 (null (cddar definition))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
134 (cadar definition))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
135 (if (and (stringp spec)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
136 (not (string-equal spec ""))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
137 (eq (aref spec 0) ?_))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
138 (setq definition
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
139 (cons (if (string-equal spec "_")
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
140 '(interactive)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
141 `(interactive ,(substring spec 1)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
142 (cdr definition))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
143 (if (null reuses)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
144 `(defun ,name ,arglist ,docstring
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
145 ,@(cond-emacs-xemacs-macfn definition))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
146 ;; no dynamic docstring in this case
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
147 `(eval-and-compile ; no warnings in Emacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
148 (defalias ',name
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
149 (cond ,@(mapcar (lambda (func) `((fboundp ',func) ',func))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
150 (nreverse reuses))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
151 (t ,(if definition
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
152 `(lambda ,arglist ,docstring
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
153 ,@(cond-emacs-xemacs-macfn definition))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
154 'ignore))))))))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
155 (defmacro ignore-errors-x (&rest body)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
156 (let ((specials '((scan-sexps . 4) (scan-lists . 5)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
157 spec nils)
85511
f873840f9fea * emulation/edt-mapper.el (function-key-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78487
diff changeset
158 (if (and (featurep 'xemacs)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
159 (null (cdr body)) (consp (car body))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
160 (setq spec (assq (caar body) specials))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
161 (>= (setq nils (- (cdr spec) (length (car body)))) 0))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
162 `(,@(car body) ,@(make-list nils nil) t)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
163 `(ignore-errors ,@body)))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
164
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
165 ;; More compile-time-macros
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
166 (eval-when-compile
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
167 (defmacro save-buffer-state-x (&rest body) ; similar to EMACS/lazy-lock.el
53418
af00346728dd (save-buffer-state-x): Use with-no-warnings.
Richard M. Stallman <rms@gnu.org>
parents: 52890
diff changeset
168 (let ((modified (with-no-warnings (gensym "save-buffer-state-x-modified-"))))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
169 `(let ((,modified (buffer-modified-p)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
170 (unwind-protect
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
171 (let ((buffer-undo-list t) (inhibit-read-only t)
85511
f873840f9fea * emulation/edt-mapper.el (function-key-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78487
diff changeset
172 ,@(unless (featurep 'xemacs)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
173 '((inhibit-point-motion-hooks t) deactivate-mark))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
174 before-change-functions after-change-functions
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
175 buffer-file-name buffer-file-truename)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
176 ,@body)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
177 (and (not ,modified) (buffer-modified-p)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
178 (set-buffer-modified-p nil)))))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
179 (put 'save-buffer-state-x 'lisp-indent-function 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
180
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
181 ;; get rid of byte-compile warnings
87574
21fcd219fd6e * mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87170
diff changeset
182 (eval-when-compile
21fcd219fd6e * mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87170
diff changeset
183 (require 'cc-mode))
21fcd219fd6e * mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87170
diff changeset
184
21fcd219fd6e * mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87170
diff changeset
185 (defvar outline-level)
21fcd219fd6e * mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87170
diff changeset
186 (defvar imenu-use-markers)
21fcd219fd6e * mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87170
diff changeset
187 (defvar imenu-create-index-function)
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
188
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
189 ;; We cannot use `c-forward-syntactic-ws' directly since it is a macro since
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
190 ;; cc-mode-5.30 => antlr-mode compiled with older cc-mode would fail (macro
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
191 ;; call) when used with newer cc-mode. Also, antlr-mode compiled with newer
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
192 ;; cc-mode would fail (undefined `c-forward-sws') when used with older cc-mode.
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
193 ;; Additional to the `defalias' below, we must set `antlr-c-forward-sws' to
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
194 ;; `c-forward-syntactic-ws' when `c-forward-sws' is not defined after requiring
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
195 ;; cc-mode.
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
196 (defalias 'antlr-c-forward-sws 'c-forward-sws)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
197
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
198
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
199 ;;;;##########################################################################
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
200 ;;;; Variables
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
201 ;;;;##########################################################################
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
202
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
203
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
204 (defgroup antlr nil
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
205 "Major mode for ANTLR grammar files."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
206 :group 'languages
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
207 :link '(emacs-commentary-link "antlr-mode.el")
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
208 :link '(url-link "http://antlr-mode.sourceforge.net/")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
209 :prefix "antlr-")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
210
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
211 (defconst antlr-version "2.2c"
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
212 "ANTLR major mode version number.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
213 Check <http://antlr-mode.sourceforge.net/> for the newest.")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
214
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
215
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
216 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
217 ;;; Controlling ANTLR's code generator (language option)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
218 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
219
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
220 (defvar antlr-language nil
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
221 "Major mode corresponding to ANTLR's \"language\" option.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
222 Set via `antlr-language-alist'. The only useful place to change this
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
223 buffer-local variable yourself is in `antlr-mode-hook' or in the \"local
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
224 variable list\" near the end of the file, see
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
225 `enable-local-variables'.")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
226
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
227 (defcustom antlr-language-alist
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
228 '((java-mode "Java" nil "\"Java\"" "Java")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
229 (c++-mode "C++" "\"Cpp\"" "Cpp"))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
230 "List of ANTLR's supported languages.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
231 Each element in this list looks like
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
232 \(MAJOR-MODE MODELINE-STRING OPTION-VALUE...)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
233
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
234 MAJOR-MODE, the major mode of the code in the grammar's actions, is the
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
235 value of `antlr-language' if the first group in the string matched by
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
236 REGEXP in `antlr-language-limit-n-regexp' is one of the OPTION-VALUEs.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
237 An OPTION-VALUE of nil denotes the fallback element. MODELINE-STRING is
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
238 also displayed in the modeline next to \"Antlr\"."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
239 :group 'antlr
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
240 :type '(repeat (group :value (java-mode "")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
241 (function :tag "Major mode")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
242 (string :tag "Modeline string")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
243 (repeat :tag "ANTLR language option" :inline t
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
244 (choice (const :tag "Default" nil)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
245 string )))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
246
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
247 (defcustom antlr-language-limit-n-regexp
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
248 '(8192 . "language[ \t]*=[ \t]*\\(\"?[A-Z][A-Za-z_]*\"?\\)")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
249 "Used to set a reasonable value for `antlr-language'.
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
250 Looks like \(LIMIT \. REGEXP). Search for REGEXP from the beginning of
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
251 the buffer to LIMIT and use the first group in the matched string to set
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
252 the language according to `antlr-language-alist'."
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
253 :group 'antlr
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
254 :type '(cons (choice :tag "Limit" (const :tag "No" nil) (integer :value 0))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
255 regexp))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
256
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
257
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
258 ;;;===========================================================================
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
259 ;;; Hide/Unhide, Indent/Tabs
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
260 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
261
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
262 (defcustom antlr-action-visibility 3
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
263 "Visibility of actions when command `antlr-hide-actions' is used.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
264 If nil, the actions with their surrounding braces are hidden. If a
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
265 number, do not hide the braces, only hide the contents if its length is
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
266 greater than this number."
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
267 :group 'antlr
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
268 :type '(choice (const :tag "Completely hidden" nil)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
269 (integer :tag "Hidden if longer than" :value 3)))
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
270
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
271 (defcustom antlr-indent-comment 'tab
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
272 "*Non-nil, if the indentation should touch lines in block comments.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
273 If nil, no continuation line of a block comment is changed. If t, they
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
274 are changed according to `c-indentation-line'. When not nil and not t,
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
275 they are only changed by \\[antlr-indent-command]."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
276 :group 'antlr
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
277 :type '(radio (const :tag "No" nil)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
278 (const :tag "Always" t)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
279 (sexp :tag "With TAB" :format "%t" :value tab)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
280
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
281 (defcustom antlr-tab-offset-alist
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
282 '((antlr-mode nil 4 nil)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
283 (java-mode "antlr" 4 nil))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
284 "Alist to determine whether to use ANTLR's convention for TABs.
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
285 Each element looks like \(MAJOR-MODE REGEXP TAB-WIDTH INDENT-TABS-MODE).
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
286 The first element whose MAJOR-MODE is nil or equal to `major-mode' and
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
287 whose REGEXP is nil or matches variable `buffer-file-name' is used to
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
288 set `tab-width' and `indent-tabs-mode'. This is useful to support both
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
289 ANTLR's and Java's indentation styles. Used by `antlr-set-tabs'."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
290 :group 'antlr
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
291 :type '(repeat (group :value (antlr-mode nil 8 nil)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
292 (choice (const :tag "All" nil)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
293 (function :tag "Major mode"))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
294 (choice (const :tag "All" nil) regexp)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
295 (integer :tag "Tab width")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
296 (boolean :tag "Indent-tabs-mode"))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
297
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
298 (defcustom antlr-indent-style "java"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
299 "*If non-nil, cc-mode indentation style used for `antlr-mode'.
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
300 See `c-set-style' and for details, where the most interesting part in
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
301 `c-style-alist' is the value of `c-basic-offset'."
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
302 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
303 :type '(choice (const nil) regexp))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
304
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
305 (defcustom antlr-indent-item-regexp
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
306 "[]}):;|&]" ; & is local ANTLR extension (SGML's and-connector)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
307 "Regexp matching lines which should be indented by one TAB less.
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
308 See `antlr-indent-line' and command \\[antlr-indent-command]."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
309 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
310 :type 'regexp)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
311
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
312 (defcustom antlr-indent-at-bol-alist
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
313 ;; eval-when-compile not usable with defcustom...
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
314 '((java-mode . "\\(package\\|import\\)\\>")
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
315 (c++-mode . "#\\(assert\\|cpu\\|define\\|endif\\|el\\(if\\|se\\)\\|i\\(dent\\|f\\(def\\|ndef\\)?\\|mport\\|nclude\\(_next\\)?\\)\\|line\\|machine\\|pragma\\|system\\|un\\(assert\\|def\\)\\|warning\\)\\>"))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
316 "Alist of regexps matching lines are indented at column 0.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
317 Each element in this list looks like (MODE . REGEXP) where MODE is a
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
318 function and REGEXP is a regular expression.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
319
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
320 If `antlr-language' equals to a MODE, the line starting at the first
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
321 non-whitespace is matched by the corresponding REGEXP, and the line is
75228
d1295af1285f (antlr-indent-at-bol-alist): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 70180
diff changeset
322 part of a header action, indent the line at column 0 instead according
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
323 to the normal rules of `antlr-indent-line'."
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
324 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
325 :type '(repeat (cons (function :tag "Major mode") regexp)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
326
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
327 ;; adopt indentation to cc-engine
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
328 (defvar antlr-disabling-cc-syntactic-symbols
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
329 '(statement-block-intro
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
330 defun-block-intro topmost-intro statement-case-intro member-init-intro
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
331 arglist-intro brace-list-intro knr-argdecl-intro inher-intro
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
332 objc-method-intro
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
333 block-close defun-close class-close brace-list-close arglist-close
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
334 inline-close extern-lang-close namespace-close))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
335
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
336
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
337 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
338 ;;; Options: customization
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
339 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
340
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
341 (defcustom antlr-options-use-submenus t
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
342 "*Non-nil, if the major mode menu should include option submenus.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
343 If nil, the menu just includes a command to insert options. Otherwise,
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
344 it includes four submenus to insert file/grammar/rule/subrule options."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
345 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
346 :type 'boolean)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
347
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
348 (defcustom antlr-tool-version 20701
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
349 "*The version number of the Antlr tool.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
350 The value is an integer of the form XYYZZ which stands for vX.YY.ZZ.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
351 This variable is used to warn about non-supported options and to supply
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
352 version correct option values when using \\[antlr-insert-option].
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
353
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
354 Don't use a number smaller than 20600 since the stored history of
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
355 Antlr's options starts with v2.06.00, see `antlr-options-alists'. You
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
356 can make this variable buffer-local."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
357 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
358 :type 'integer)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
359
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
360 (defcustom antlr-options-auto-colon t
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
361 "*Non-nil, if `:' is inserted with a rule or subrule options section.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
362 A `:' is only inserted if this value is non-nil, if a rule or subrule
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
363 option is inserted with \\[antlr-insert-option], if there was no rule or
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
364 subrule options section before, and if a `:' is not already present
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
365 after the section, ignoring whitespace, comments and the init action."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
366 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
367 :type 'boolean)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
368
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
369 (defcustom antlr-options-style nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
370 "List of symbols which determine the style of option values.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
371 If a style symbol is present, the corresponding option value is put into
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
372 quotes, i.e., represented as a string, otherwise it is represented as an
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
373 identifier.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
374
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
375 The only style symbol used in the default value of `antlr-options-alist'
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
376 is `language-as-string'. See also `antlr-read-value'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
377 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
378 :type '(repeat (symbol :tag "Style symbol")))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
379
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
380 (defcustom antlr-options-push-mark t
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
381 "*Non-nil, if inserting an option should set & push mark.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
382 If nil, never set mark when inserting an option with command
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
383 \\[antlr-insert-option]. If t, always set mark via `push-mark'. If a
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
384 number, only set mark if point was outside the options area before and
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
385 the number of lines between point and the insert position is greater
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
386 than this value. Otherwise, only set mark if point was outside the
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
387 options area before."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
388 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
389 :type '(radio (const :tag "No" nil)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
390 (const :tag "Always" t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
391 (integer :tag "Lines between" :value 10)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
392 (sexp :tag "If outside options" :format "%t" :value outside)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
393
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
394 (defcustom antlr-options-assign-string " = "
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
395 "*String containing `=' to use between option name and value.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
396 This string is only used if the option to insert did not exist before
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
397 or if there was no `=' after it. In other words, the spacing around an
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
398 existing `=' won't be changed when changing an option value."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
399 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
400 :type 'string)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
401
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
402
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
403 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
404 ;;; Options: definitions
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
405 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
406
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
407 (defvar antlr-options-headings '("file" "grammar" "rule" "subrule")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
408 "Headings for the four different option kinds.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
409 The standard value is (\"file\" \"grammar\" \"rule\" \"subrule\"). See
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
410 `antlr-options-alists'")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
411
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
412 (defvar antlr-options-alists
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
413 '(;; file options ----------------------------------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
414 (("language" antlr-language-option-extra
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
415 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
416 "Generated language: " language-as-string
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
417 (("Java") ("Cpp") ("HTML") ("Diagnostic")))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
418 (20700 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
419 "Generated language: " language-as-string
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
420 (("Java") ("Cpp") ("HTML") ("Diagnostic") ("Sather"))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
421 ("mangleLiteralPrefix" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
422 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
423 "Prefix for literals (default LITERAL_): " t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
424 ("namespace" antlr-c++-mode-extra
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
425 (20700 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
426 "Wrap generated C++ code in namespace: " t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
427 ("namespaceStd" antlr-c++-mode-extra
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
428 (20701 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
429 "Replace ANTLR_USE_NAMESPACE(std) by: " t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
430 ("namespaceAntlr" antlr-c++-mode-extra
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
431 (20701 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
432 "Replace ANTLR_USE_NAMESPACE(antlr) by: " t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
433 ("genHashLines" antlr-c++-mode-extra
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
434 (20701 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
435 "Include #line in generated C++ code? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
436 )
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
437 ;; grammar options --------------------------------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
438 (("k" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
439 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
440 "Lookahead depth: "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
441 ("importVocab" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
442 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
443 "Import vocabulary: "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
444 ("exportVocab" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
445 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
446 "Export vocabulary: "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
447 ("testLiterals" nil ; lexer only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
448 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
449 "Test each token against literals table? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
450 ("defaultErrorHandler" nil ; not for lexer
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
451 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
452 "Generate default exception handler for each rule? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
453 ("codeGenMakeSwitchThreshold" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
454 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
455 "Min number of alternatives for 'switch': "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
456 ("codeGenBitsetTestThreshold" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
457 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
458 "Min size of lookahead set for bitset test: "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
459 ("analyzerDebug" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
460 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
461 "Display debugging info during grammar analysis? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
462 ("codeGenDebug" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
463 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
464 "Display debugging info during code generation? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
465 ("buildAST" nil ; not for lexer
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
466 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
467 "Use automatic AST construction/transformation? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
468 ("ASTLabelType" nil ; not for lexer
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
469 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
470 "Class of user-defined AST node: " t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
471 ("charVocabulary" nil ; lexer only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
472 (20600 nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
473 "Insert character vocabulary"))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
474 ("interactive" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
475 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
476 "Generate interactive lexer/parser? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
477 ("caseSensitive" nil ; lexer only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
478 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
479 "Case significant when matching characters? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
480 ("caseSensitiveLiterals" nil ; lexer only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
481 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
482 "Case significant when testing literals table? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
483 ("classHeaderSuffix" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
484 (20600 nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
485 "Additional string for grammar class definition"))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
486 ("filter" nil ; lexer only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
487 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
488 "Skip rule (the name, true or false): "
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
489 antlr-grammar-tokens))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
490 ("namespace" antlr-c++-mode-extra
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
491 (20700 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
492 "Wrap generated C++ code for grammar in namespace: " t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
493 ("namespaceStd" antlr-c++-mode-extra
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
494 (20701 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
495 "Replace ANTLR_USE_NAMESPACE(std) by: " t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
496 ("namespaceAntlr" antlr-c++-mode-extra
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
497 (20701 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
498 "Replace ANTLR_USE_NAMESPACE(antlr) by: " t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
499 ("genHashLines" antlr-c++-mode-extra
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
500 (20701 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
501 "Include #line in generated C++ code? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
502 ;;; ("autoTokenDef" nil ; parser only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
503 ;;; (80000 antlr-read-boolean ; default: true
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
504 ;;; "Automatically define referenced token? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
505 ;;; ("keywordsMeltTo" nil ; parser only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
506 ;;; (80000 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
507 ;;; "Change non-matching keywords to token type: "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
508 )
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
509 ;; rule options ----------------------------------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
510 (("testLiterals" nil ; lexer only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
511 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
512 "Test this token against literals table? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
513 ("defaultErrorHandler" nil ; not for lexer
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
514 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
515 "Generate default exception handler for this rule? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
516 ("ignore" nil ; lexer only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
517 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
518 "In this rule, ignore tokens of type: " nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
519 antlr-grammar-tokens))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
520 ("paraphrase" nil ; lexer only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
521 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
522 "In messages, replace name of this token by: " t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
523 )
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
524 ;; subrule options -------------------------------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
525 (("warnWhenFollowAmbig" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
526 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
527 "Display warnings for ambiguities with FOLLOW? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
528 ("generateAmbigWarnings" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
529 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
530 "Display warnings for ambiguities? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
531 ("greedy" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
532 (20700 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
533 "Make this optional/loop subrule greedy? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
534 ))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
535 "Definitions for Antlr's options of all four different kinds.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
536
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
537 The value looks like \(FILE GRAMMAR RULE SUBRULE) where each FILE,
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
538 GRAMMAR, RULE, and SUBRULE is a list of option definitions of the
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
539 corresponding kind, i.e., looks like \(OPTION-DEF...).
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
540
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
541 Each OPTION-DEF looks like \(OPTION-NAME EXTRA-FN VALUE-SPEC...) which
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
542 defines a file/grammar/rule/subrule option with name OPTION-NAME. The
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
543 OPTION-NAMEs are used for the creation of the \"Insert XXX Option\"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
544 submenus, see `antlr-options-use-submenus', and to allow to insert the
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
545 option name with completion when using \\[antlr-insert-option].
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
546
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
547 If EXTRA-FN is a function, it is called at different phases of the
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
548 insertion with arguments \(PHASE OPTION-NAME). PHASE can have the
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
549 values `before-input' or `after-insertion', additional phases might be
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
550 defined in future versions of this mode. The phase `before-input'
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
551 occurs before the user is asked to insert a value. The phase
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
552 `after-insertion' occurs after the option value has been inserted.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
553 EXTRA-FN might be called with additional arguments in future versions of
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
554 this mode.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
555
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
556 Each specification VALUE-SPEC looks like \(VERSION READ-FN ARG...). The
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
557 last VALUE-SPEC in an OPTION-DEF whose VERSION is smaller or equal to
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
558 `antlr-tool-version' specifies how the user is asked for the value of
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
559 the option.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
560
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
561 If READ-FN is nil, the only ARG is a string which is printed at the echo
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
562 area to guide the user what to insert at point. Otherwise, READ-FN is
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
563 called with arguments \(INIT-VALUE ARG...) to get the new value of the
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
564 option. INIT-VALUE is the old value of the option or nil.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
565
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
566 The standard value contains the following functions as READ-FN:
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
567 `antlr-read-value' with ARGs = \(PROMPT AS-STRING TABLE) which reads a
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
568 general value, or `antlr-read-boolean' with ARGs = \(PROMPT TABLE) which
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
569 reads a boolean value or a member of TABLE. PROMPT is the prompt when
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
570 asking for a new value. If non-nil, TABLE is a table for completion or
78487
419c5c316b51 Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents: 78234
diff changeset
571 a function evaluating to such a table. The return value is quoted if
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
572 AS-STRING is non-nil and is either t or a symbol which is a member of
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
573 `antlr-options-style'.")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
574
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
575
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
576 ;;;===========================================================================
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
577 ;;; Run tool, create Makefile dependencies
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
578 ;;;===========================================================================
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
579
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
580 (defcustom antlr-tool-command "java antlr.Tool"
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
581 "*Command used in \\[antlr-run-tool] to run the Antlr tool.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
582 This variable should include all options passed to Antlr except the
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
583 option \"-glib\" which is automatically suggested if necessary."
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
584 :group 'antlr
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
585 :type 'string)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
586
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
587 (defcustom antlr-ask-about-save t
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
588 "*If not nil, \\[antlr-run-tool] asks which buffers to save.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
589 Otherwise, it saves all modified buffers before running without asking."
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
590 :group 'antlr
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
591 :type 'boolean)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
592
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
593 (defcustom antlr-makefile-specification
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
594 '("\n" ("GENS" "GENS%d" " \\\n\t") "$(ANTLR)")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
595 "*Variable to specify the appearance of the generated makefile rules.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
596 This variable influences the output of \\[antlr-show-makefile-rules].
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
597 It looks like \(RULE-SEP GEN-VAR-SPEC COMMAND).
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
598
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
599 RULE-SEP is the string to separate different makefile rules. COMMAND is
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
600 a string with the command which runs the Antlr tool, it should include
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
601 all options except the option \"-glib\" which is automatically added
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
602 if necessary.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
603
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
604 If GEN-VAR-SPEC is nil, each target directly consists of a list of
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
605 files. If GEN-VAR-SPEC looks like \(GEN-VAR GEN-VAR-FORMAT GEN-SEP), a
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
606 Makefile variable is created for each rule target.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
607
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
608 Then, GEN-VAR is a string with the name of the variable which contains
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
609 the file names of all makefile rules. GEN-VAR-FORMAT is a format string
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
610 producing the variable of each target with substitution COUNT/%d where
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
611 COUNT starts with 1. GEN-SEP is used to separate long variable values."
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
612 :group 'antlr
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
613 :type '(list (string :tag "Rule separator")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
614 (choice
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
615 (const :tag "Direct targets" nil)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
616 (list :tag "Variables for targets"
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
617 (string :tag "Variable for all targets")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
618 (string :tag "Format for each target variable")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
619 (string :tag "Variable separator")))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
620 (string :tag "ANTLR command")))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
621
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
622 (defvar antlr-file-formats-alist
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
623 '((java-mode ("%sTokenTypes.java") ("%s.java"))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
624 (c++-mode ("%sTokenTypes.hpp") ("%s.cpp" "%s.hpp")))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
625 "Language dependent formats which specify generated files.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
626 Each element in this list looks looks like
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
627 \(MAJOR-MODE (VOCAB-FILE-FORMAT...) (CLASS-FILE-FORMAT...)).
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
628
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
629 The element whose MAJOR-MODE is equal to `antlr-language' is used to
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
630 specify the generated files which are language dependent. See variable
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
631 `antlr-special-file-formats' for language independent files.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
632
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
633 VOCAB-FILE-FORMAT is a format string, it specifies with substitution
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
634 VOCAB/%s the generated file for each export vocabulary VOCAB.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
635 CLASS-FILE-FORMAT is a format string, it specifies with substitution
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
636 CLASS/%s the generated file for each grammar class CLASS.")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
637
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
638 (defvar antlr-special-file-formats '("%sTokenTypes.txt" "expanded%s.g")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
639 "Language independent formats which specify generated files.
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
640 The value looks like \(VOCAB-FILE-FORMAT EXPANDED-GRAMMAR-FORMAT).
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
641
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
642 VOCAB-FILE-FORMAT is a format string, it specifies with substitution
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
643 VOCAB/%s the generated or input file for each export or import
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
644 vocabulary VOCAB, respectively. EXPANDED-GRAMMAR-FORMAT is a format
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
645 string, it specifies with substitution GRAMMAR/%s the constructed
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
646 grammar file if the file GRAMMAR.g contains a grammar class which
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
647 extends a class other than \"Lexer\", \"Parser\" or \"TreeParser\".
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
648
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
649 See variable `antlr-file-formats-alist' for language dependent
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
650 formats.")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
651
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
652 (defvar antlr-unknown-file-formats '("?%s?.g" "?%s?")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
653 "*Formats which specify the names of unknown files.
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
654 The value looks like \(SUPER-GRAMMAR-FILE-FORMAT SUPER-EVOCAB-FORMAT).
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
655
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
656 SUPER-GRAMMAR-FORMAT is a format string, it specifies with substitution
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
657 SUPER/%s the name of a grammar file for Antlr's option \"-glib\" if no
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
658 grammar file in the current directory defines the class SUPER or if it
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
659 is defined more than once. SUPER-EVOCAB-FORMAT is a format string, it
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
660 specifies with substitution SUPER/%s the name for the export vocabulary
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
661 of above mentioned class SUPER.")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
662
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
663 (defvar antlr-help-unknown-file-text
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
664 "## The following rules contain filenames of the form
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
665 ## \"?SUPERCLASS?.g\" (and \"?SUPERCLASS?TokenTypes.txt\")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
666 ## where SUPERCLASS is not found to be defined in any grammar file of
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
667 ## the current directory or is defined more than once. Please replace
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
668 ## these filenames by the grammar files (and their exportVocab).\n\n"
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
669 "String indicating the existence of unknown files in the Makefile.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
670 See \\[antlr-show-makefile-rules] and `antlr-unknown-file-formats'.")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
671
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
672 (defvar antlr-help-rules-intro
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
673 "The following Makefile rules define the dependencies for all (non-
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
674 expanded) grammars in directory \"%s\".\n
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
675 They are stored in the kill-ring, i.e., you can insert them with C-y
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
676 into your Makefile. You can also invoke M-x antlr-show-makefile-rules
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
677 from within a Makefile to insert them directly.\n\n\n"
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
678 "Introduction to use with \\[antlr-show-makefile-rules].
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
679 It is a format string and used with substitution DIRECTORY/%s where
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
680 DIRECTORY is the name of the current directory.")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
681
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
682
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
683 ;;;===========================================================================
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
684 ;;; Menu
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
685 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
686
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
687 (defcustom antlr-imenu-name t ; (featurep 'xemacs) ; TODO: Emacs-21 bug?
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
688 "*Non-nil, if a \"Index\" menu should be added to the menubar.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
689 If it is a string, it is used instead \"Index\". Requires package
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
690 imenu."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
691 :group 'antlr
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
692 :type '(choice (const :tag "No menu" nil)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
693 (const :tag "Index menu" t)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
694 (string :tag "Other menu name")))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
695
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
696 (defvar antlr-mode-map
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
697 (let ((map (make-sparse-keymap)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
698 (define-key map "\t" 'antlr-indent-command)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
699 (define-key map "\e\C-a" 'antlr-beginning-of-rule)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
700 (define-key map "\e\C-e" 'antlr-end-of-rule)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
701 (define-key map "\C-c\C-a" 'antlr-beginning-of-body)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
702 (define-key map "\C-c\C-e" 'antlr-end-of-body)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
703 (define-key map "\C-c\C-f" 'c-forward-into-nomenclature)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
704 (define-key map "\C-c\C-b" 'c-backward-into-nomenclature)
26965
048db40ddca6 Version 1.2 is released.
Gerd Moellmann <gerd@gnu.org>
parents: 26542
diff changeset
705 (define-key map "\C-c\C-c" 'comment-region)
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
706 (define-key map "\C-c\C-v" 'antlr-hide-actions)
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
707 (define-key map "\C-c\C-r" 'antlr-run-tool)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
708 (define-key map "\C-c\C-o" 'antlr-insert-option)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
709 ;; I'm too lazy to define my own:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
710 (define-key map "\ea" 'c-beginning-of-statement)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
711 (define-key map "\ee" 'c-end-of-statement)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
712 ;; electric keys:
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
713 (define-key map ":" 'antlr-electric-character)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
714 (define-key map ";" 'antlr-electric-character)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
715 (define-key map "|" 'antlr-electric-character)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
716 (define-key map "&" 'antlr-electric-character)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
717 (define-key map "(" 'antlr-electric-character)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
718 (define-key map ")" 'antlr-electric-character)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
719 (define-key map "{" 'antlr-electric-character)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
720 (define-key map "}" 'antlr-electric-character)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
721 map)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
722 "Keymap used in `antlr-mode' buffers.")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
723
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
724 (easy-menu-define antlr-mode-menu antlr-mode-map
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
725 "Major mode menu."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
726 `("Antlr"
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
727 ,@(if (cond-emacs-xemacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
728 :EMACS (and antlr-options-use-submenus
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
729 (>= emacs-major-version 21))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
730 :XEMACS antlr-options-use-submenus)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
731 `(("Insert File Option"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
732 :filter ,(lambda (x) (antlr-options-menu-filter 1 x)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
733 ("Insert Grammar Option"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
734 :filter ,(lambda (x) (antlr-options-menu-filter 2 x)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
735 ("Insert Rule Option"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
736 :filter ,(lambda (x) (antlr-options-menu-filter 3 x)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
737 ("Insert Subrule Option"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
738 :filter ,(lambda (x) (antlr-options-menu-filter 4 x)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
739 "---")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
740 '(["Insert Option" antlr-insert-option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
741 :active (not buffer-read-only)]))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
742 ("Forward/Backward"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
743 ["Backward Rule" antlr-beginning-of-rule t]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
744 ["Forward Rule" antlr-end-of-rule t]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
745 ["Start of Rule Body" antlr-beginning-of-body
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
746 :active (antlr-inside-rule-p)]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
747 ["End of Rule Body" antlr-end-of-body
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
748 :active (antlr-inside-rule-p)]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
749 "---"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
750 ["Backward Statement" c-beginning-of-statement t]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
751 ["Forward Statement" c-end-of-statement t]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
752 ["Backward Into Nomencl." c-backward-into-nomenclature t]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
753 ["Forward Into Nomencl." c-forward-into-nomenclature t])
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
754 ["Indent Region" indent-region
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
755 :active (and (not buffer-read-only) (c-region-is-active-p))]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
756 ["Comment Out Region" comment-region
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
757 :active (and (not buffer-read-only) (c-region-is-active-p))]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
758 ["Uncomment Region"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
759 (comment-region (region-beginning) (region-end) '(4))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
760 :active (and (not buffer-read-only) (c-region-is-active-p))]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
761 "---"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
762 ["Hide Actions (incl. Args)" antlr-hide-actions t]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
763 ["Hide Actions (excl. Args)" (antlr-hide-actions 2) t]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
764 ["Unhide All Actions" (antlr-hide-actions 0) t]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
765 "---"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
766 ["Run Tool on Grammar" antlr-run-tool t]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
767 ["Show Makefile Rules" antlr-show-makefile-rules t]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
768 "---"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
769 ["Customize Antlr" (customize-group 'antlr) t]))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
770
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
771
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
772 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
773 ;;; font-lock
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
774 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
775
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
776 (defcustom antlr-font-lock-maximum-decoration 'inherit
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
777 "*The maximum decoration level for fontifying actions.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
778 Value `none' means, do not fontify actions, just normal grammar code
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
779 according to `antlr-font-lock-additional-keywords'. Value `inherit'
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
780 means, use value of `font-lock-maximum-decoration'. Any other value is
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
781 interpreted as in `font-lock-maximum-decoration' with no level-0
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
782 fontification, see `antlr-font-lock-keywords-alist'.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
783
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
784 While calculating the decoration level for actions, `major-mode' is
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
785 bound to `antlr-language'. For example, with value
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
786 \((java-mode \. 2) (c++-mode \. 0))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
787 Java actions are fontified with level 2 and C++ actions are not
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
788 fontified at all."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 59238
diff changeset
789 :group 'antlr
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
790 :type '(choice (const :tag "None" none)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
791 (const :tag "Inherit" inherit)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
792 (const :tag "Default" nil)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
793 (const :tag "Maximum" t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
794 (integer :tag "Level" 1)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
795 (repeat :menu-tag "Mode specific" :tag "Mode specific"
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
796 :value ((t . t))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
797 (cons :tag "Instance"
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
798 (radio :tag "Mode"
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
799 (const :tag "All" t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
800 (symbol :tag "Name"))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
801 (radio :tag "Decoration"
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
802 (const :tag "Default" nil)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
803 (const :tag "Maximum" t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
804 (integer :tag "Level" 1))))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
805
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
806 (defconst antlr-no-action-keywords nil
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
807 ;; Using nil directly won't work (would use highest level, see
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
808 ;; `font-lock-choose-keywords'), but a non-symbol, i.e., (list), at `car'
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
809 ;; would break Emacs-21.0:
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
810 "Empty font-lock keywords for actions.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
811 Do not change the value of this constant.")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
812
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
813 (defvar antlr-font-lock-keywords-alist
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
814 '((java-mode
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
815 antlr-no-action-keywords
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
816 java-font-lock-keywords-1 java-font-lock-keywords-2
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
817 java-font-lock-keywords-3)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
818 (c++-mode
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
819 antlr-no-action-keywords
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
820 c++-font-lock-keywords-1 c++-font-lock-keywords-2
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
821 c++-font-lock-keywords-3))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
822 "List of font-lock keywords for actions in the grammar.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
823 Each element in this list looks like
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
824 \(MAJOR-MODE KEYWORD...)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
825
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
826 If `antlr-language' is equal to MAJOR-MODE, the KEYWORDs are the
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
827 font-lock keywords according to `font-lock-defaults' used for the code
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
828 in the grammar's actions and semantic predicates, see
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
829 `antlr-font-lock-maximum-decoration'.")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
830
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
831 (defvar antlr-default-face 'antlr-default)
70180
3f5f04b2a72b (antlr-default): Avoid nil spec in defface.
Luc Teirlinck <teirllm@auburn.edu>
parents: 68773
diff changeset
832 (defface antlr-default '((t nil))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
833 "Face to prevent strings from language dependent highlighting.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
834 Do not change."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
835 :group 'antlr)
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
836 ;; backward-compatibility alias
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
837 (put 'antlr-font-lock-default-face 'face-alias 'antlr-default)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
838
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
839 (defvar antlr-keyword-face 'antlr-keyword)
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
840 (defface antlr-keyword
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
841 (cond-emacs-xemacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
842 '((((class color) (background light))
87126
48d7747f9483 (antlr-keyword, antlr-syntax)
Glenn Morris <rgm@gnu.org>
parents: 85511
diff changeset
843 (:foreground "black" :EMACS :weight bold :XEMACS :bold t))
48d7747f9483 (antlr-keyword, antlr-syntax)
Glenn Morris <rgm@gnu.org>
parents: 85511
diff changeset
844 (t :inherit font-lock-keyword-face)))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
845 "ANTLR keywords."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
846 :group 'antlr)
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
847 ;; backward-compatibility alias
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
848 (put 'antlr-font-lock-keyword-face 'face-alias 'antlr-keyword)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
849
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
850 (defvar antlr-syntax-face 'antlr-keyword)
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
851 (defface antlr-syntax
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
852 (cond-emacs-xemacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
853 '((((class color) (background light))
87126
48d7747f9483 (antlr-keyword, antlr-syntax)
Glenn Morris <rgm@gnu.org>
parents: 85511
diff changeset
854 (:foreground "black" :EMACS :weight bold :XEMACS :bold t))
48d7747f9483 (antlr-keyword, antlr-syntax)
Glenn Morris <rgm@gnu.org>
parents: 85511
diff changeset
855 (t :inherit font-lock-constant-face)))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
856 "ANTLR syntax symbols like :, |, (, ), ...."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
857 :group 'antlr)
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
858 ;; backward-compatibility alias
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
859 (put 'antlr-font-lock-syntax-face 'face-alias 'antlr-syntax)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
860
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
861 (defvar antlr-ruledef-face 'antlr-ruledef)
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
862 (defface antlr-ruledef
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
863 (cond-emacs-xemacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
864 '((((class color) (background light))
87126
48d7747f9483 (antlr-keyword, antlr-syntax)
Glenn Morris <rgm@gnu.org>
parents: 85511
diff changeset
865 (:foreground "blue" :EMACS :weight bold :XEMACS :bold t))
48d7747f9483 (antlr-keyword, antlr-syntax)
Glenn Morris <rgm@gnu.org>
parents: 85511
diff changeset
866 (t :inherit font-lock-function-name-face)))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
867 "ANTLR rule references (definition)."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
868 :group 'antlr)
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
869 ;; backward-compatibility alias
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
870 (put 'antlr-font-lock-ruledef-face 'face-alias 'antlr-ruledef)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
871
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
872 (defvar antlr-tokendef-face 'antlr-tokendef)
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
873 (defface antlr-tokendef
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
874 (cond-emacs-xemacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
875 '((((class color) (background light))
87126
48d7747f9483 (antlr-keyword, antlr-syntax)
Glenn Morris <rgm@gnu.org>
parents: 85511
diff changeset
876 (:foreground "blue" :EMACS :weight bold :XEMACS :bold t))
48d7747f9483 (antlr-keyword, antlr-syntax)
Glenn Morris <rgm@gnu.org>
parents: 85511
diff changeset
877 (t :inherit font-lock-function-name-face)))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
878 "ANTLR token references (definition)."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
879 :group 'antlr)
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
880 ;; backward-compatibility alias
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
881 (put 'antlr-font-lock-tokendef-face 'face-alias 'antlr-tokendef)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
882
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
883 (defvar antlr-ruleref-face 'antlr-ruleref)
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
884 (defface antlr-ruleref
87126
48d7747f9483 (antlr-keyword, antlr-syntax)
Glenn Morris <rgm@gnu.org>
parents: 85511
diff changeset
885 '((((class color) (background light)) (:foreground "blue4"))
48d7747f9483 (antlr-keyword, antlr-syntax)
Glenn Morris <rgm@gnu.org>
parents: 85511
diff changeset
886 (t :inherit font-lock-type-face))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
887 "ANTLR rule references (usage)."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
888 :group 'antlr)
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
889 ;; backward-compatibility alias
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
890 (put 'antlr-font-lock-ruleref-face 'face-alias 'antlr-ruleref)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
891
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
892 (defvar antlr-tokenref-face 'antlr-tokenref)
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
893 (defface antlr-tokenref
87126
48d7747f9483 (antlr-keyword, antlr-syntax)
Glenn Morris <rgm@gnu.org>
parents: 85511
diff changeset
894 '((((class color) (background light)) (:foreground "orange4"))
48d7747f9483 (antlr-keyword, antlr-syntax)
Glenn Morris <rgm@gnu.org>
parents: 85511
diff changeset
895 (t :inherit font-lock-type-face))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
896 "ANTLR token references (usage)."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
897 :group 'antlr)
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
898 ;; backward-compatibility alias
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
899 (put 'antlr-font-lock-tokenref-face 'face-alias 'antlr-tokenref)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
900
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
901 (defvar antlr-literal-face 'antlr-literal)
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
902 (defface antlr-literal
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
903 (cond-emacs-xemacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
904 '((((class color) (background light))
87126
48d7747f9483 (antlr-keyword, antlr-syntax)
Glenn Morris <rgm@gnu.org>
parents: 85511
diff changeset
905 (:foreground "brown4" :EMACS :weight bold :XEMACS :bold t))
48d7747f9483 (antlr-keyword, antlr-syntax)
Glenn Morris <rgm@gnu.org>
parents: 85511
diff changeset
906 (t :inherit font-lock-string-face)))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
907 "ANTLR special literal tokens.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
908 It is used to highlight strings matched by the first regexp group of
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
909 `antlr-font-lock-literal-regexp'."
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
910 :group 'antlr)
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
911 ;; backward-compatibility alias
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
912 (put 'antlr-font-lock-literal-face 'face-alias 'antlr-literal)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
913
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
914 (defcustom antlr-font-lock-literal-regexp "\"\\(\\sw\\(\\sw\\|-\\)*\\)\""
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
915 "Regexp matching literals with special syntax highlighting, or nil.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
916 If nil, there is no special syntax highlighting for some literals.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
917 Otherwise, it should be a regular expression which must contain a regexp
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
918 group. The string matched by the first group is highlighted with
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
919 `antlr-font-lock-literal-face'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
920 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
921 :type '(choice (const :tag "None" nil) regexp))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
922
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
923 (defvar antlr-class-header-regexp
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
924 "\\(class\\)[ \t]+\\([A-Za-z\300-\326\330-\337]\\sw*\\)[ \t]+\\(extends\\)[ \t]+\\([A-Za-z\300-\326\330-\337]\\sw*\\)[ \t]*;"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
925 "Regexp matching class headers.")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
926
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
927 (defvar antlr-font-lock-additional-keywords
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
928 (cond-emacs-xemacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
929 `((antlr-invalidate-context-cache)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
930 ("\\$setType[ \t]*(\\([A-Za-z\300-\326\330-\337]\\sw*\\))"
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
931 (1 antlr-tokendef-face))
98510
a538ef3b210e David J. Biesack <David.Biesack at sas.com> (tiny change)
Glenn Morris <rgm@gnu.org>
parents: 94673
diff changeset
932 ("\\$\\sw+" (0 antlr-keyword-face))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
933 ;; the tokens are already fontified as string/docstrings:
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
934 (,(lambda (limit)
65161
451eb4a93201 * progmodes/antlr-mode.el (antlr-default): Fix defface form.
Romain Francoise <romain@orebokech.com>
parents: 64699
diff changeset
935 (if antlr-font-lock-literal-regexp
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
936 (antlr-re-search-forward antlr-font-lock-literal-regexp limit)))
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
937 (1 antlr-literal-face t)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
938 :XEMACS (0 nil)) ; XEmacs bug workaround
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
939 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
940 (antlr-re-search-forward antlr-class-header-regexp limit))
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
941 (1 antlr-keyword-face)
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
942 (2 antlr-ruledef-face)
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
943 (3 antlr-keyword-face)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
944 (4 (if (member (match-string 4) '("Lexer" "Parser" "TreeParser"))
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
945 antlr-keyword-face
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
946 type-face)))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
947 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
948 (antlr-re-search-forward
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
949 "\\<\\(header\\|options\\|tokens\\|exception\\|catch\\|returns\\)\\>"
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
950 limit))
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
951 (1 antlr-keyword-face))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
952 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
953 (antlr-re-search-forward
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
954 "^\\(private\\|public\\|protected\\)\\>[ \t]*\\(\\(\\sw+[ \t]*\\(:\\)?\\)\\)?"
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
955 limit))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
956 (1 font-lock-type-face) ; not XEmacs' java level-3 fruit salad
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
957 (3 (if (antlr-upcase-p (char-after (match-beginning 3)))
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
958 antlr-tokendef-face
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
959 antlr-ruledef-face) nil t)
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
960 (4 antlr-syntax-face nil t))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
961 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
962 (antlr-re-search-forward "^\\(\\sw+\\)[ \t]*\\(:\\)?" limit))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
963 (1 (if (antlr-upcase-p (char-after (match-beginning 0)))
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
964 antlr-tokendef-face
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
965 antlr-ruledef-face) nil t)
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
966 (2 antlr-syntax-face nil t))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
967 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
968 ;; v:ruleref and v:"literal" is allowed...
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
969 (antlr-re-search-forward "\\(\\sw+\\)[ \t]*\\([=:]\\)?" limit))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
970 (1 (if (match-beginning 2)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
971 (if (eq (char-after (match-beginning 2)) ?=)
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
972 antlr-default-face
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
973 font-lock-variable-name-face)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
974 (if (antlr-upcase-p (char-after (match-beginning 1)))
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
975 antlr-tokenref-face
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
976 antlr-ruleref-face)))
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
977 (2 antlr-default-face nil t))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
978 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
979 (antlr-re-search-forward "[|&:;(~]\\|)\\([*+?]\\|=>\\)?" limit))
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
980 (0 antlr-syntax-face))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
981 "Font-lock keywords for ANTLR's normal grammar code.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
982 See `antlr-font-lock-keywords-alist' for the keywords of actions.")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
983
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
984 (defvar antlr-font-lock-defaults
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
985 '(antlr-font-lock-keywords
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
986 nil nil ((?_ . "w") (?\( . ".") (?\) . ".")) beginning-of-defun)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
987 "Font-lock defaults used for ANTLR syntax highlighting.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
988 The SYNTAX-ALIST element is also used to initialize
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
989 `antlr-action-syntax-table'.")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
990
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
991
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
992 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
993 ;;; Internal variables
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
994 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
995
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
996 (defvar antlr-mode-hook nil
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
997 "Hook called by `antlr-mode'.")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
998
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
999 (defvar antlr-mode-syntax-table nil
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1000 "Syntax table used in `antlr-mode' buffers.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1001 If non-nil, it will be initialized in `antlr-mode'.")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1002
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1003 ;; used for "in Java/C++ code" = syntactic-depth>0
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1004 (defvar antlr-action-syntax-table nil
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1005 "Syntax table used for ANTLR action parsing.
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1006 Initialized by `antlr-mode-syntax-table', changed by SYNTAX-ALIST in
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1007 `antlr-font-lock-defaults'. This table should be selected if you use
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1008 `buffer-syntactic-context' and `buffer-syntactic-context-depth' in order
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1009 not to confuse their context_cache.")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1010
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1011 (defvar antlr-mode-abbrev-table nil
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1012 "Abbreviation table used in `antlr-mode' buffers.")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1013 (define-abbrev-table 'antlr-mode-abbrev-table ())
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1014
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1015 (defvar antlr-slow-cache-enabling-symbol 'loudly
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1016 ;; Emacs' font-lock changes buffer's tick counter, therefore this value should
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1017 ;; be a parameter of a font-lock function, but not any other variable of
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1018 ;; functions which call `antlr-slow-syntactic-context'.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1019 "If value is a bound symbol, cache will be used even with text changes.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1020 This is no user option. Used for `antlr-slow-syntactic-context'.")
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1021
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1022 (defvar antlr-slow-cache-diff-threshold 5000
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1023 "Maximum distance between `point' and cache position for cache use.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1024 Used for `antlr-slow-syntactic-context'.")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1025
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1026
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1027 ;;;;##########################################################################
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1028 ;;;; The Code
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1029 ;;;;##########################################################################
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1030
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1031
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1032
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1033 ;;;===========================================================================
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1034 ;;; Syntax functions -- Emacs vs XEmacs dependent, part 1
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1035 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1036
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1037 ;; From help.el (XEmacs-21.1), without `copy-syntax-table'
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1038 (defmacro antlr-with-syntax-table (syntab &rest body)
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1039 "Evaluate BODY with the syntax table SYNTAB."
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1040 `(let ((stab (syntax-table)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1041 (unwind-protect
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1042 (progn (set-syntax-table ,syntab) ,@body)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1043 (set-syntax-table stab))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1044 (put 'antlr-with-syntax-table 'lisp-indent-function 1)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1045 (put 'antlr-with-syntax-table 'edebug-form-spec '(form body))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1046
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1047 (defunx antlr-default-directory ()
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1048 :xemacs-and-try default-directory
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1049 "Return `default-directory'."
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1050 default-directory)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1051
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1052 ;; Check Emacs-21.1 simple.el, `shell-command'.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1053 (defunx antlr-read-shell-command (prompt &optional initial-input history)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1054 :xemacs-and-try read-shell-command
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1055 "Read a string from the minibuffer, using `shell-command-history'."
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1056 (read-from-minibuffer prompt initial-input nil nil
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1057 (or history 'shell-command-history)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1058
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1059 (defunx antlr-with-displaying-help-buffer (thunk &optional name)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1060 :xemacs-and-try with-displaying-help-buffer
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1061 "Make a help buffer and call `thunk' there."
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1062 (with-output-to-temp-buffer "*Help*"
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1063 (save-excursion (funcall thunk))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1064
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1065
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1066 ;;;===========================================================================
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1067 ;;; Context cache
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1068 ;;;===========================================================================
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1069
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1070 (defvar antlr-slow-context-cache nil "Internal.")
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1071
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1072 ;;;(defvar antlr-statistics-full-neg 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1073 ;;;(defvar antlr-statistics-full-diff 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1074 ;;;(defvar antlr-statistics-full-other 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1075 ;;;(defvar antlr-statistics-cache 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1076 ;;;(defvar antlr-statistics-inval 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1077
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1078 (defunx antlr-invalidate-context-cache (&rest dummies)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1079 ;; checkdoc-params: (dummies)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1080 "Invalidate context cache for syntactical context information."
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1081 :XEMACS ; XEmacs bug workaround
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1082 (save-excursion
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1083 (set-buffer (get-buffer-create " ANTLR XEmacs bug workaround"))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1084 (buffer-syntactic-context-depth)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1085 nil)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1086 :EMACS
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1087 ;;; (incf antlr-statistics-inval)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1088 (setq antlr-slow-context-cache nil))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1089
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1090 (defunx antlr-syntactic-context ()
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1091 "Return some syntactic context information.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1092 Return `string' if point is within a string, `block-comment' or
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1093 `comment' is point is within a comment or the depth within all
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1094 parenthesis-syntax delimiters at point otherwise.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1095 WARNING: this may alter `match-data'."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1096 :XEMACS
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1097 (or (buffer-syntactic-context) (buffer-syntactic-context-depth))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1098 :EMACS
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1099 (let ((orig (point)) diff state
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1100 ;; Arg, Emacs' (buffer-modified-tick) changes with font-lock. Use
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1101 ;; hack that `loudly' is bound during font-locking => cache use will
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1102 ;; increase from 7% to 99.99% during font-locking.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1103 (tick (or (boundp antlr-slow-cache-enabling-symbol)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1104 (buffer-modified-tick))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1105 (if (and (cdr antlr-slow-context-cache)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1106 (>= (setq diff (- orig (cadr antlr-slow-context-cache))) 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1107 (< diff antlr-slow-cache-diff-threshold)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1108 (eq (current-buffer) (caar antlr-slow-context-cache))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1109 (eq tick (cdar antlr-slow-context-cache)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1110 ;; (setq antlr-statistics-cache (1+ antlr-statistics-cache) ...)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1111 (setq state (parse-partial-sexp (cadr antlr-slow-context-cache) orig
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1112 nil nil
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1113 (cddr antlr-slow-context-cache)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1114 (if (>= orig antlr-slow-cache-diff-threshold)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1115 (beginning-of-defun)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1116 (goto-char (point-min)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1117 ;;; (cond ((and diff (< diff 0)) (incf antlr-statistics-full-neg))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1118 ;;; ((and diff (>= diff 3000)) (incf antlr-statistics-full-diff))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1119 ;;; (t (incf antlr-statistics-full-other)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1120 (setq state (parse-partial-sexp (point) orig)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1121 (goto-char orig)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1122 (if antlr-slow-context-cache
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1123 (setcdr antlr-slow-context-cache (cons orig state))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1124 (setq antlr-slow-context-cache
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1125 (cons (cons (current-buffer) tick)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1126 (cons orig state))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1127 (cond ((nth 3 state) 'string)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1128 ((nth 4 state) 'comment) ; block-comment? -- we don't care
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1129 (t (car state)))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1130
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1131 ;;; (incf (aref antlr-statistics 2))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1132 ;;; (unless (and (eq (current-buffer)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1133 ;;; (caar antlr-slow-context-cache))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1134 ;;; (eq (buffer-modified-tick)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1135 ;;; (cdar antlr-slow-context-cache)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1136 ;;; (incf (aref antlr-statistics 1))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1137 ;;; (setq antlr-slow-context-cache nil))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1138 ;;; (let* ((orig (point))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1139 ;;; (base (cadr antlr-slow-context-cache))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1140 ;;; (curr (cddr antlr-slow-context-cache))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1141 ;;; (state (cond ((eq orig (car curr)) (cdr curr))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1142 ;;; ((eq orig (car base)) (cdr base))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1143 ;;; diff diff2)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1144 ;;; (unless state
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1145 ;;; (incf (aref antlr-statistics 3))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1146 ;;; (when curr
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1147 ;;; (if (< (setq diff (abs (- orig (car curr))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1148 ;;; (setq diff2 (abs (- orig (car base)))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1149 ;;; (setq state curr)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1150 ;;; (setq state base
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1151 ;;; diff diff2))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1152 ;;; (if (or (>= (1+ diff) (point)) (>= diff 3000))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1153 ;;; (setq state nil))) ; start from bod/bob
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1154 ;;; (if state
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1155 ;;; (setq state
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1156 ;;; (parse-partial-sexp (car state) orig nil nil (cdr state)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1157 ;;; (if (>= orig 3000) (beginning-of-defun) (goto-char (point-min)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1158 ;;; (incf (aref antlr-statistics 4))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1159 ;;; (setq cw (list orig (point) base curr))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1160 ;;; (setq state (parse-partial-sexp (point) orig)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1161 ;;; (goto-char orig)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1162 ;;; (if antlr-slow-context-cache
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1163 ;;; (setcdr (cdr antlr-slow-context-cache) (cons orig state))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1164 ;;; (setq antlr-slow-context-cache
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1165 ;;; (cons (cons (current-buffer) (buffer-modified-tick))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1166 ;;; (cons (cons orig state) (cons orig state))))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1167 ;;; (cond ((nth 3 state) 'string)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1168 ;;; ((nth 4 state) 'comment) ; block-comment? -- we don't care
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1169 ;;; (t (car state)))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1170
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1171 ;;; (beginning-of-defun)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1172 ;;; (let ((state (parse-partial-sexp (point) orig)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1173 ;;; (goto-char orig)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1174 ;;; (cond ((nth 3 state) 'string)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1175 ;;; ((nth 4 state) 'comment) ; block-comment? -- we don't care
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1176 ;;; (t (car state))))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1177
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1178
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1179 ;;;===========================================================================
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1180 ;;; Miscellaneous functions
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1181 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1182
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1183 (defun antlr-upcase-p (char)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1184 "Non-nil, if CHAR is an uppercase character (if CHAR was a char)."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1185 ;; in XEmacs, upcase only works for ASCII
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1186 (or (and (<= ?A char) (<= char ?Z))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1187 (and (<= ?\300 char) (<= char ?\337)))) ; ?\327 is no letter
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1188
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1189 (defun antlr-re-search-forward (regexp bound)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1190 "Search forward from point for regular expression REGEXP.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1191 Set point to the end of the occurrence found, and return point. Return
26965
048db40ddca6 Version 1.2 is released.
Gerd Moellmann <gerd@gnu.org>
parents: 26542
diff changeset
1192 nil if no occurrence was found. Do not search within comments, strings
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1193 and actions/semantic predicates. BOUND bounds the search; it is a
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1194 buffer position. See also the functions `match-beginning', `match-end'
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1195 and `replace-match'."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1196 ;; WARNING: Should only be used with `antlr-action-syntax-table'!
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1197 (let ((continue t))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1198 (while (and (re-search-forward regexp bound 'limit)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1199 (save-match-data
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1200 (if (eq (antlr-syntactic-context) 0)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1201 (setq continue nil)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1202 t))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1203 (if continue nil (point))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1204
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1205 (defun antlr-search-forward (string)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1206 "Search forward from point for STRING.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1207 Set point to the end of the occurrence found, and return point. Return
26965
048db40ddca6 Version 1.2 is released.
Gerd Moellmann <gerd@gnu.org>
parents: 26542
diff changeset
1208 nil if no occurrence was found. Do not search within comments, strings
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1209 and actions/semantic predicates."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1210 ;; WARNING: Should only be used with `antlr-action-syntax-table'!
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1211 (let ((continue t))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1212 (while (and (search-forward string nil 'limit)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1213 (if (eq (antlr-syntactic-context) 0) (setq continue nil) t)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1214 (if continue nil (point))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1215
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1216 (defun antlr-search-backward (string)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1217 "Search backward from point for STRING.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1218 Set point to the beginning of the occurrence found, and return point.
26965
048db40ddca6 Version 1.2 is released.
Gerd Moellmann <gerd@gnu.org>
parents: 26542
diff changeset
1219 Return nil if no occurrence was found. Do not search within comments,
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1220 strings and actions/semantic predicates."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1221 ;; WARNING: Should only be used with `antlr-action-syntax-table'!
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1222 (let ((continue t))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1223 (while (and (search-backward string nil 'limit)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1224 (if (eq (antlr-syntactic-context) 0) (setq continue nil) t)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1225 (if continue nil (point))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1226
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1227 (defsubst antlr-skip-sexps (count)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1228 "Skip the next COUNT balanced expressions and the comments after it.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1229 Return position before the comments after the last expression."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1230 (goto-char (or (ignore-errors-x (scan-sexps (point) count)) (point-max)))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1231 (prog1 (point)
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1232 (antlr-c-forward-sws)))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1233
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1234
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1235 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1236 ;;; font-lock
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1237 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1238
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1239 (defun antlr-font-lock-keywords ()
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1240 "Return font-lock keywords for current buffer.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1241 See `antlr-font-lock-additional-keywords', `antlr-language' and
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1242 `antlr-font-lock-maximum-decoration'."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1243 (if (eq antlr-font-lock-maximum-decoration 'none)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1244 antlr-font-lock-additional-keywords
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1245 (append antlr-font-lock-additional-keywords
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1246 (eval (let ((major-mode antlr-language)) ; dynamic
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1247 (font-lock-choose-keywords
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1248 (cdr (assq antlr-language
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1249 antlr-font-lock-keywords-alist))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1250 (if (eq antlr-font-lock-maximum-decoration 'inherit)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1251 font-lock-maximum-decoration
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1252 antlr-font-lock-maximum-decoration)))))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1253
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1254
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1255 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1256 ;;; imenu support
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1257 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1258
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1259 (defun antlr-grammar-tokens ()
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1260 "Return alist for tokens defined in current buffer."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1261 (save-excursion (antlr-imenu-create-index-function t)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1262
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1263 (defun antlr-imenu-create-index-function (&optional tokenrefs-only)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1264 "Return imenu index-alist for ANTLR grammar files.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1265 IF TOKENREFS-ONLY is non-nil, just return alist with tokenref names."
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1266 (let ((items nil)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1267 (classes nil)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1268 (continue t))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1269 ;; Using `imenu-progress-message' would require imenu for compilation, but
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1270 ;; nobody is missing these messages. The generic imenu function searches
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1271 ;; backward, which is slower and more likely not to work during editing.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1272 (antlr-with-syntax-table antlr-action-syntax-table
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1273 (antlr-invalidate-context-cache)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1274 (goto-char (point-min))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1275 (antlr-skip-file-prelude t)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1276 (while continue
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1277 (if (looking-at "{") (antlr-skip-sexps 1))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1278 (if (looking-at antlr-class-header-regexp)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1279 (or tokenrefs-only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1280 (push (cons (match-string 2)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1281 (if imenu-use-markers
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1282 (copy-marker (match-beginning 2))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1283 (match-beginning 2)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1284 classes))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1285 (if (looking-at "p\\(ublic\\|rotected\\|rivate\\)")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1286 (antlr-skip-sexps 1))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1287 (when (looking-at "\\sw+")
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1288 (if tokenrefs-only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1289 (if (antlr-upcase-p (char-after (point)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1290 (push (list (match-string 0)) items))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1291 (push (cons (match-string 0)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1292 (if imenu-use-markers
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1293 (copy-marker (match-beginning 0))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1294 (match-beginning 0)))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1295 items))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1296 (if (setq continue (antlr-search-forward ";"))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1297 (antlr-skip-exception-part t))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1298 (if classes
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1299 (cons (cons "Classes" (nreverse classes)) (nreverse items))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1300 (nreverse items))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1301
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1302
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1303 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1304 ;;; Parse grammar files (internal functions)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1305 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1306
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1307 (defun antlr-skip-exception-part (skip-comment)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1308 "Skip exception part of current rule, i.e., everything after `;'.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1309 This also includes the options and tokens part of a grammar class
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1310 header. If SKIP-COMMENT is non-nil, also skip the comment after that
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1311 part."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1312 (let ((pos (point))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1313 (class nil))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1314 (antlr-c-forward-sws)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1315 (while (looking-at "options\\>\\|tokens\\>")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1316 (setq class t)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1317 (setq pos (antlr-skip-sexps 2)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1318 (if class
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1319 ;; Problem: an action only belongs to a class def, not a normal rule.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1320 ;; But checking the current rule type is too expensive => only expect
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1321 ;; an action if we have found an option or tokens part.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1322 (if (looking-at "{") (setq pos (antlr-skip-sexps 1)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1323 (while (looking-at "exception\\>")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1324 (setq pos (antlr-skip-sexps 1))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1325 (when (looking-at "\\[")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1326 (setq pos (antlr-skip-sexps 1)))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1327 (while (looking-at "catch\\>")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1328 (setq pos (antlr-skip-sexps 3)))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1329 (or skip-comment (goto-char pos))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1330
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1331 (defun antlr-skip-file-prelude (skip-comment)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1332 "Skip the file prelude: the header and file options.
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1333 If SKIP-COMMENT is non-nil, also skip the comment after that part.
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1334 Return the start position of the file prelude.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1335
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1336 Hack: if SKIP-COMMENT is `header-only' only skip header and return
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1337 position before the comment after the header."
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1338 (let* ((pos (point))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1339 (pos0 pos))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1340 (antlr-c-forward-sws)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1341 (if skip-comment (setq pos0 (point)))
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1342 (while (looking-at "header\\>[ \t]*\\(\"\\)?")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1343 (setq pos (antlr-skip-sexps (if (match-beginning 1) 3 2))))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1344 (if (eq skip-comment 'header-only) ; a hack...
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1345 pos
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1346 (when (looking-at "options\\>")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1347 (setq pos (antlr-skip-sexps 2)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1348 (or skip-comment (goto-char pos))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1349 pos0)))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1350
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1351 (defun antlr-next-rule (arg skip-comment)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1352 "Move forward to next end of rule. Do it ARG many times.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1353 A grammar class header and the file prelude are also considered as a
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1354 rule. Negative argument ARG means move back to ARGth preceding end of
26965
048db40ddca6 Version 1.2 is released.
Gerd Moellmann <gerd@gnu.org>
parents: 26542
diff changeset
1355 rule. The behavior is not defined when ARG is zero. If SKIP-COMMENT
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1356 is non-nil, move to beginning of the rule."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1357 ;; WARNING: Should only be used with `antlr-action-syntax-table'!
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1358 ;; PRE: ARG<>0
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1359 (let ((pos (point))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1360 (beg (point)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1361 ;; first look whether point is in exception part
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1362 (if (antlr-search-backward ";")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1363 (progn
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1364 (setq beg (point))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1365 (forward-char)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1366 (antlr-skip-exception-part skip-comment))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1367 (antlr-skip-file-prelude skip-comment))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1368 (if (< arg 0)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1369 (unless (and (< (point) pos) (zerop (incf arg)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1370 ;; if we have moved backward, we already moved one defun backward
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1371 (goto-char beg) ; rewind (to ";" / point)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1372 (while (and arg (<= (incf arg) 0))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1373 (if (antlr-search-backward ";")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1374 (setq beg (point))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1375 (when (>= arg -1)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1376 ;; try file prelude:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1377 (setq pos (antlr-skip-file-prelude skip-comment))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1378 (if (zerop arg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1379 (if (>= (point) beg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1380 (goto-char (if (>= pos beg) (point-min) pos)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1381 (goto-char (if (or (>= (point) beg) (= (point) pos))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1382 (point-min) pos))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1383 (setq arg nil)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1384 (when arg ; always found a ";"
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1385 (forward-char)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1386 (antlr-skip-exception-part skip-comment)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1387 (if (<= (point) pos) ; moved backward?
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1388 (goto-char pos) ; rewind
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1389 (decf arg)) ; already moved one defun forward
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1390 (unless (zerop arg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1391 (while (>= (decf arg) 0)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1392 (antlr-search-forward ";"))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1393 (antlr-skip-exception-part skip-comment)))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1394
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1395 (defun antlr-outside-rule-p ()
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1396 "Non-nil if point is outside a grammar rule.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1397 Move to the beginning of the current rule if point is inside a rule."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1398 ;; WARNING: Should only be used with `antlr-action-syntax-table'!
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1399 (let ((pos (point)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1400 (antlr-next-rule -1 nil)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1401 (let ((between (or (bobp) (< (point) pos))))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1402 (antlr-c-forward-sws)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1403 (and between (> (point) pos) (goto-char pos)))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1404
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1405
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1406 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1407 ;;; Parse grammar files (commands)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1408 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1409 ;; No (interactive "_") in Emacs... use `zmacs-region-stays'.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1410
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1411 (defun antlr-inside-rule-p ()
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1412 "Non-nil if point is inside a grammar rule.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1413 A grammar class header and the file prelude are also considered as a
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1414 rule."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1415 (save-excursion
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1416 (antlr-with-syntax-table antlr-action-syntax-table
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1417 (not (antlr-outside-rule-p)))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1418
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1419 (defunx antlr-end-of-rule (&optional arg)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1420 "Move forward to next end of rule. Do it ARG [default: 1] many times.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1421 A grammar class header and the file prelude are also considered as a
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1422 rule. Negative argument ARG means move back to ARGth preceding end of
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1423 rule. If ARG is zero, run `antlr-end-of-body'."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1424 (interactive "_p")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1425 (if (zerop arg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1426 (antlr-end-of-body)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1427 (antlr-with-syntax-table antlr-action-syntax-table
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1428 (antlr-next-rule arg nil))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1429
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1430 (defunx antlr-beginning-of-rule (&optional arg)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1431 "Move backward to preceding beginning of rule. Do it ARG many times.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1432 A grammar class header and the file prelude are also considered as a
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1433 rule. Negative argument ARG means move forward to ARGth next beginning
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1434 of rule. If ARG is zero, run `antlr-beginning-of-body'."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1435 (interactive "_p")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1436 (if (zerop arg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1437 (antlr-beginning-of-body)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1438 (antlr-with-syntax-table antlr-action-syntax-table
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1439 (antlr-next-rule (- arg) t))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1440
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1441 (defunx antlr-end-of-body (&optional msg)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1442 "Move to position after the `;' of the current rule.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1443 A grammar class header is also considered as a rule. With optional
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1444 prefix arg MSG, move to `:'."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1445 (interactive "_")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1446 (antlr-with-syntax-table antlr-action-syntax-table
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1447 (let ((orig (point)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1448 (if (antlr-outside-rule-p)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1449 (error "Outside an ANTLR rule"))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1450 (let ((bor (point)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1451 (when (< (antlr-skip-file-prelude t) (point))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1452 ;; Yes, we are in the file prelude
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1453 (goto-char orig)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1454 (error (or msg "The file prelude is without `;'")))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1455 (antlr-search-forward ";")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1456 (when msg
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1457 (when (< (point)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1458 (progn (goto-char bor)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1459 (or (antlr-search-forward ":") (point-max))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1460 (goto-char orig)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1461 (error msg))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1462 (antlr-c-forward-sws))))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1463
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1464 (defunx antlr-beginning-of-body ()
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1465 "Move to the first element after the `:' of the current rule."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1466 (interactive "_")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1467 (antlr-end-of-body "Class headers and the file prelude are without `:'"))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1468
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1469
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1470 ;;;===========================================================================
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1471 ;;; Literal normalization, Hide Actions
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1472 ;;;===========================================================================
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1473
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1474 (defun antlr-downcase-literals (&optional transform)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1475 "Convert all literals in buffer to lower case.
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1476 If non-nil, TRANSFORM is used on literals instead of `downcase-region'."
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1477 (interactive)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1478 (or transform (setq transform 'downcase-region))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1479 (let ((literals 0))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1480 (save-excursion
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1481 (goto-char (point-min))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1482 (antlr-with-syntax-table antlr-action-syntax-table
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1483 (antlr-invalidate-context-cache)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1484 (while (antlr-re-search-forward "\"\\(\\sw\\(\\sw\\|-\\)*\\)\"" nil)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1485 (funcall transform (match-beginning 0) (match-end 0))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1486 (incf literals))))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1487 (message "Transformed %d literals" literals)))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1488
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1489 (defun antlr-upcase-literals ()
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1490 "Convert all literals in buffer to upper case."
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1491 (interactive)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1492 (antlr-downcase-literals 'upcase-region))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1493
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1494 (defun antlr-hide-actions (arg &optional silent)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1495 "Hide or unhide all actions in buffer.
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1496 Hide all actions including arguments in brackets if ARG is 1 or if
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1497 called interactively without prefix argument. Hide all actions
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1498 excluding arguments in brackets if ARG is 2 or higher. Unhide all
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1499 actions if ARG is 0 or negative. See `antlr-action-visibility'.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1500
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1501 Display a message unless optional argument SILENT is non-nil."
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1502 (interactive "p")
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1503 (save-buffer-state-x
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1504 (if (> arg 0)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1505 (let ((regexp (if (= arg 1) "[]}]" "}"))
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1506 (diff (and antlr-action-visibility
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1507 (+ (max antlr-action-visibility 0) 2))))
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1508 (antlr-hide-actions 0 t)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1509 (save-excursion
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1510 (goto-char (point-min))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1511 (antlr-with-syntax-table antlr-action-syntax-table
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1512 (antlr-invalidate-context-cache)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1513 (while (antlr-re-search-forward regexp nil)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1514 (let ((beg (ignore-errors-x (scan-sexps (point) -1))))
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1515 (when beg
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1516 (if diff ; braces are visible
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1517 (if (> (point) (+ beg diff))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1518 (add-text-properties (1+ beg) (1- (point))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1519 '(invisible t intangible t)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1520 ;; if actions is on line(s) of its own, hide WS
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1521 (and (looking-at "[ \t]*$")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1522 (save-excursion
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1523 (goto-char beg)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1524 (skip-chars-backward " \t")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1525 (and (bolp) (setq beg (point))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1526 (beginning-of-line 2)) ; beginning of next line
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1527 (add-text-properties beg (point)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1528 '(invisible t intangible t))))))))
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1529 (or silent
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1530 (message "Hide all actions (%s arguments)...done"
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1531 (if (= arg 1) "including" "excluding"))))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1532 (remove-text-properties (point-min) (point-max)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1533 '(invisible nil intangible nil))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1534 (or silent
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1535 (message "Unhide all actions (including arguments)...done")))))
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1536
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1537
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1538 ;;;===========================================================================
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1539 ;;; Insert option: command
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1540 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1541
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1542 (defun antlr-insert-option (level option &optional location)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1543 "Insert file/grammar/rule/subrule option near point.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1544 LEVEL determines option kind to insert: 1=file, 2=grammar, 3=rule,
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1545 4=subrule. OPTION is a string with the name of the option to insert.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1546 LOCATION can be specified for not calling `antlr-option-kind' twice.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1547
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1548 Inserting an option with this command works as follows:
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1549
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1550 1. When called interactively, LEVEL is determined by the prefix
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1551 argument or automatically deduced without prefix argument.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1552 2. Signal an error if no option of that level could be inserted, e.g.,
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1553 if the buffer is read-only, the option area is outside the visible
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1554 part of the buffer or a subrule/rule option should be inserted with
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1555 point outside a subrule/rule.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1556 3. When called interactively, OPTION is read from the minibuffer with
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1557 completion over the known options of the given LEVEL.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1558 4. Ask user for confirmation if the given OPTION does not seem to be a
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1559 valid option to insert into the current file.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1560 5. Find a correct position to insert the option.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1561 6. Depending on the option, insert it the following way \(inserting an
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1562 option also means inserting the option section if necessary\):
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1563 - Insert the option and let user insert the value at point.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1564 - Read a value (with completion) from the minibuffer, using a
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1565 previous value as initial contents, and insert option with value.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1566 7. Final action depending on the option. For example, set the language
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1567 according to a newly inserted language option.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1568
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1569 The name of all options with a specification for their values are stored
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1570 in `antlr-options-alists'. The used specification also depends on the
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1571 value of `antlr-tool-version', i.e., step 4 will warn you if you use an
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1572 option that has been introduced in newer version of ANTLR, and step 5
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1573 will offer completion using version-correct values.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1574
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1575 If the option already exists inside the visible part of the buffer, this
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1576 command can be used to change the value of that option. Otherwise, find
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1577 a correct position where the option can be inserted near point.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1578
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1579 The search for a correct position is as follows:
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1580
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1581 * If search is within an area where options can be inserted, use the
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1582 position of point. Inside the options section and if point is in
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1583 the middle of a option definition, skip the rest of it.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1584 * If an options section already exists, insert the options at the end.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1585 If only the beginning of the area is visible, insert at the
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1586 beginning.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1587 * Otherwise, find the position where an options section can be
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1588 inserted and insert a new section before any comments. If the
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1589 position before the comments is not visible, insert the new section
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1590 after the comments.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1591
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1592 This function also inserts \"options {...}\" and the \":\" if necessary,
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1593 see `antlr-options-auto-colon'. See also `antlr-options-assign-string'.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1594
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1595 This command might also set the mark like \\[set-mark-command] does, see
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1596 `antlr-options-push-mark'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1597 (interactive (antlr-insert-option-interactive current-prefix-arg))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1598 (barf-if-buffer-read-only)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1599 (or location (setq location (cdr (antlr-option-kind level))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1600 (cond ((null level)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1601 (error "Cannot deduce what kind of option to insert"))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1602 ((atom location)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1603 (error "Cannot insert any %s options around here"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1604 (elt antlr-options-headings (1- level)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1605 (let ((area (car location))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1606 (place (cdr location)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1607 (cond ((null place) ; invisible
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1608 (error (if area
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1609 "Invisible %s options, use %s to make them visible"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1610 "Invisible area for %s options, use %s to make it visible")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1611 (elt antlr-options-headings (1- level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1612 (substitute-command-keys "\\[widen]")))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1613 ((null area) ; without option part
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1614 (antlr-insert-option-do level option nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1615 (null (cdr place))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1616 (car place)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1617 ((save-excursion ; with option part, option visible
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1618 (goto-char (max (point-min) (car area)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1619 (re-search-forward (concat "\\(^\\|;\\)[ \t]*\\(\\<"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1620 (regexp-quote option)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1621 "\\>\\)[ \t\n]*\\(\\(=[ \t]?\\)[ \t]*\\(\\(\\sw\\|\\s_\\)+\\|\"\\([^\n\"\\]\\|[\\][^\n]\\)*\"\\)?\\)?")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1622 ;; 2=name, 3=4+5, 4="=", 5=value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1623 (min (point-max) (cdr area))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1624 t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1625 (antlr-insert-option-do level option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1626 (cons (or (match-beginning 5)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1627 (match-beginning 3))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1628 (match-end 5))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1629 (and (null (cdr place)) area)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1630 (or (match-beginning 5)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1631 (match-end 4)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1632 (match-end 2))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1633 (t ; with option part, option not yet
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1634 (antlr-insert-option-do level option t
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1635 (and (null (cdr place)) area)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1636 (car place))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1637
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1638 (defun antlr-insert-option-interactive (arg)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1639 "Interactive specification for `antlr-insert-option'.
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1640 Return \(LEVEL OPTION LOCATION)."
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1641 (barf-if-buffer-read-only)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1642 (if arg (setq arg (prefix-numeric-value arg)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1643 (unless (memq arg '(nil 1 2 3 4))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1644 (error "Valid prefix args: no=auto, 1=file, 2=grammar, 3=rule, 4=subrule"))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1645 (let* ((kind (antlr-option-kind arg))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1646 (level (car kind)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1647 (if (atom (cdr kind))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1648 (list level nil (cdr kind))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1649 (let* ((table (elt antlr-options-alists (1- level)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1650 (completion-ignore-case t) ;dynamic
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1651 (input (completing-read (format "Insert %s option: "
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1652 (elt antlr-options-headings
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1653 (1- level)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1654 table)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1655 (list level input (cdr kind))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1656
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1657 (defun antlr-options-menu-filter (level menu-items)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1658 "Return items for options submenu of level LEVEL."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1659 ;; checkdoc-params: (menu-items)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1660 (let ((active (if buffer-read-only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1661 nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1662 (consp (cdr-safe (cdr (antlr-option-kind level)))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1663 (mapcar (lambda (option)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1664 (vector option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1665 (list 'antlr-insert-option level option)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1666 :active active))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1667 (sort (mapcar 'car (elt antlr-options-alists (1- level)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1668 'string-lessp))))
75228
d1295af1285f (antlr-indent-at-bol-alist): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 70180
diff changeset
1669
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1670
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1671 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1672 ;;; Insert option: determine section-kind
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1673 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1674
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1675 (defun antlr-option-kind (requested)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1676 "Return level and location for option to insert near point.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1677 Call function `antlr-option-level' with argument REQUESTED. If the
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1678 result is nil, return \(REQUESTED \. error). If the result has the
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1679 non-nil value LEVEL, return \(LEVEL \. LOCATION) where LOCATION looks
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1680 like \(AREA \. PLACE), see `antlr-option-location'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1681 (save-excursion
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1682 (save-restriction
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1683 (let ((min0 (point-min)) ; before `widen'!
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1684 (max0 (point-max))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1685 (orig (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1686 (level (antlr-option-level requested)) ; calls `widen'!
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1687 pos)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1688 (cond ((null level)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1689 (setq level requested))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1690 ((eq level 1) ; file options
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1691 (goto-char (point-min))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1692 (setq pos (antlr-skip-file-prelude 'header-only)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1693 ((not (eq level 3)) ; grammar or subrule options
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1694 (setq pos (point))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1695 (antlr-c-forward-sws))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1696 ((looking-at "^\\(private[ \t\n]\\|public[ \t\n]\\|protected[ \t\n]\\)?[ \t\n]*\\(\\(\\sw\\|\\s_\\)+\\)[ \t\n]*\\(!\\)?[ \t\n]*\\(\\[\\)?")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1697 ;; rule options, with complete rule header
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1698 (goto-char (or (match-end 4) (match-end 3)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1699 (setq pos (antlr-skip-sexps (if (match-end 5) 1 0)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1700 (when (looking-at "returns[ \t\n]*\\[")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1701 (goto-char (1- (match-end 0)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1702 (setq pos (antlr-skip-sexps 1)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1703 (cons level
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1704 (cond ((null pos) 'error)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1705 ((looking-at "options[ \t\n]*{")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1706 (goto-char (match-end 0))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1707 (setq pos (ignore-errors-x (scan-lists (point) 1 1)))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1708 (antlr-option-location orig min0 max0
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1709 (point)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1710 (if pos (1- pos) (point-max))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1711 t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1712 (t
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1713 (antlr-option-location orig min0 max0
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1714 pos (point)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1715 nil))))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1716
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1717 (defun antlr-option-level (requested)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1718 "Return level for option to insert near point.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1719 Remove any restrictions from current buffer and return level for the
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1720 option to insert near point, i.e., 1, 2, 3, 4, or nil if no such option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1721 can be inserted. If REQUESTED is non-nil, it is the only possible value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1722 to return except nil. If REQUESTED is nil, return level for the nearest
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1723 option kind, i.e., the highest number possible.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1724
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1725 If the result is 2, point is at the beginning of the class after the
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1726 class definition. If the result is 3 or 4, point is at the beginning of
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1727 the rule/subrule after the init action. Otherwise, the point position
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1728 is undefined."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1729 (widen)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1730 (if (eq requested 1)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1731 1
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1732 (antlr-with-syntax-table antlr-action-syntax-table
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1733 (antlr-invalidate-context-cache)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1734 (let* ((orig (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1735 (outsidep (antlr-outside-rule-p))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1736 bor depth)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1737 (if (eq (char-after) ?\{) (antlr-skip-sexps 1))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1738 (setq bor (point)) ; beginning of rule (after init action)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1739 (cond ((eq requested 2) ; grammar options required?
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1740 (let (boc) ; beginning of class
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1741 (goto-char (point-min))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1742 (while (and (<= (point) bor)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1743 (antlr-re-search-forward antlr-class-header-regexp
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1744 nil))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1745 (if (<= (match-beginning 0) bor)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1746 (setq boc (match-end 0))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1747 (when boc
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1748 (goto-char boc)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1749 2)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1750 ((save-excursion ; in region of file options?
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1751 (goto-char (point-min))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1752 (antlr-skip-file-prelude t) ; ws/comment after: OK
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1753 (< orig (point)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1754 (and (null requested) 1))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1755 (outsidep ; outside rule not OK
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1756 nil)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1757 ((looking-at antlr-class-header-regexp) ; rule = class def?
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1758 (goto-char (match-end 0))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1759 (and (null requested) 2))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1760 ((eq requested 3) ; rule options required?
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1761 (goto-char bor)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1762 3)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1763 ((setq depth (antlr-syntactic-grammar-depth orig bor))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1764 (if (> depth 0) ; move out of actions
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1765 (goto-char (scan-lists (point) -1 depth)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1766 (set-syntax-table antlr-mode-syntax-table)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1767 (antlr-invalidate-context-cache)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1768 (if (eq (antlr-syntactic-context) 0) ; not in subrule?
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1769 (unless (eq requested 4)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1770 (goto-char bor)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1771 3)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1772 (goto-char (1+ (scan-lists (point) -1 1)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1773 4)))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1774
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1775 (defun antlr-option-location (orig min-vis max-vis min-area max-area withp)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1776 "Return location for the options area.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1777 ORIG is the original position of `point', MIN-VIS is `point-min' and
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1778 MAX-VIS is `point-max'. If WITHP is non-nil, there exists an option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1779 specification and it starts after the brace at MIN-AREA and stops at
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1780 MAX-AREA. If WITHP is nil, there is no area and the region where it
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1781 could be inserted starts at MIN-AREA and stops at MAX-AREA.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1782
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1783 The result has the form (AREA . PLACE). AREA is (MIN-AREA . MAX-AREA)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1784 if WITHP is non-nil, and nil otherwise. PLACE is nil if the area is
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1785 invisible, (ORIG) if ORIG is inside the area, (MIN-AREA . beginning) for
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1786 a visible start position and (MAX-AREA . end) for a visible end position
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1787 where the beginning is preferred if WITHP is nil and the end if WITHP is
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1788 non-nil."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1789 (cons (and withp (cons min-area max-area))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1790 (cond ((and (<= min-area orig) (<= orig max-area)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1791 (save-excursion
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1792 (goto-char orig)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1793 (not (memq (antlr-syntactic-context)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1794 '(comment block-comment)))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1795 ;; point in options area and not in comment
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1796 (list orig))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1797 ((and (null withp) (<= min-vis min-area) (<= min-area max-vis))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1798 ;; use start of options area (only if not `withp')
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1799 (cons min-area 'beginning))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1800 ((and (<= min-vis max-area) (<= max-area max-vis))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1801 ;; use end of options area
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1802 (cons max-area 'end))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1803 ((and withp (<= min-vis min-area) (<= min-area max-vis))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1804 ;; use start of options area (only if `withp')
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1805 (cons min-area 'beginning)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1806
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1807 (defun antlr-syntactic-grammar-depth (pos beg)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1808 "Return syntactic context depth at POS.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1809 Move to POS and from there on to the beginning of the string or comment
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1810 if POS is inside such a construct. Then, return the syntactic context
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1811 depth at point if the point position is smaller than BEG.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1812 WARNING: this may alter `match-data'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1813 (goto-char pos)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1814 (let ((context (or (antlr-syntactic-context) 0)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1815 (while (and context (not (integerp context)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1816 (cond ((eq context 'string)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1817 (setq context
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1818 (and (search-backward "\"" nil t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1819 (>= (point) beg)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1820 (or (antlr-syntactic-context) 0))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1821 ((memq context '(comment block-comment))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1822 (setq context
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1823 (and (re-search-backward "/[/*]" nil t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1824 (>= (point) beg)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1825 (or (antlr-syntactic-context) 0))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1826 context))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1827
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1828
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1829 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1830 ;;; Insert options: do the insertion
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1831 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1832
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1833 (defun antlr-insert-option-do (level option old area pos)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1834 "Insert option into buffer at position POS.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1835 Insert option of level LEVEL and name OPTION. If OLD is non-nil, an
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1836 options area is already exists. If OLD looks like \(BEG \. END), the
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1837 option already exists. Then, BEG is the start position of the option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1838 value, the position of the `=' or nil, and END is the end position of
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1839 the option value or nil.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1840
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1841 If the original point position was outside an options area, AREA is nil.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1842 Otherwise, and if an option specification already exists, AREA is a cons
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1843 cell where the two values determine the area inside the braces."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1844 (let* ((spec (cdr (assoc option (elt antlr-options-alists (1- level)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1845 (value (antlr-option-spec level option (cdr spec) (consp old))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1846 (if (fboundp (car spec)) (funcall (car spec) 'before-input option))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1847 ;; set mark (unless point was inside options area before)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1848 (if (cond (area (eq antlr-options-push-mark t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1849 ((numberp antlr-options-push-mark)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1850 (> (count-lines (min (point) pos) (max (point) pos))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1851 antlr-options-push-mark))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1852 (antlr-options-push-mark))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1853 (push-mark))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1854 ;; read option value -----------------------------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1855 (goto-char pos)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1856 (if (null value)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1857 ;; no option specification found
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1858 (if (y-or-n-p (format "Insert unknown %s option %s? "
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1859 (elt antlr-options-headings (1- level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1860 option))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1861 (message "Insert value for %s option %s"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1862 (elt antlr-options-headings (1- level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1863 option)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1864 (error "Didn't insert unknown %s option %s"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1865 (elt antlr-options-headings (1- level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1866 option))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1867 ;; option specification found
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1868 (setq value (cdr value))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1869 (if (car value)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1870 (let ((initial (and (consp old) (cdr old)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1871 (buffer-substring (car old) (cdr old)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1872 (setq value (apply (car value)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1873 (and initial
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1874 (if (eq (aref initial 0) ?\")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1875 (read initial)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1876 initial))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1877 (cdr value))))
87170
e50a2e215441 * erc-stamp.el (erc-echo-timestamp):
David Kastrup <dak@gnu.org>
parents: 87126
diff changeset
1878 (message "%s" (or (cadr value) ""))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1879 (setq value nil)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1880 ;; insert value ----------------------------------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1881 (if (consp old)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1882 (antlr-insert-option-existing old value)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1883 (if (consp area)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1884 ;; Move outside string/comment if point is inside option spec
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1885 (antlr-syntactic-grammar-depth (point) (car area)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1886 (antlr-insert-option-space area old)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1887 (or old (antlr-insert-option-area level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1888 (insert option " = ;")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1889 (backward-char)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1890 (if value (insert value)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1891 ;; final -----------------------------------------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1892 (if (fboundp (car spec)) (funcall (car spec) 'after-insertion option))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1893
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1894 (defun antlr-option-spec (level option specs existsp)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1895 "Return version correct option value specification.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1896 Return specification for option OPTION of kind level LEVEL. SPECS
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1897 should correspond to the VALUE-SPEC... in `antlr-option-alists'.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1898 EXISTSP determines whether the option already exists."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1899 (let (value)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1900 (while (and specs (>= antlr-tool-version (caar specs)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1901 (setq value (pop specs)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1902 (cond (value) ; found correct spec
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1903 ((null specs) nil) ; didn't find any specs
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1904 (existsp (car specs)) ; wrong version, but already present
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1905 ((y-or-n-p (format "Insert v%s %s option %s in v%s? "
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1906 (antlr-version-string (caar specs))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1907 (elt antlr-options-headings (1- level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1908 option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1909 (antlr-version-string antlr-tool-version)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1910 (car specs))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1911 (t
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1912 (error "Didn't insert v%s %s option %s in v%s"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1913 (antlr-version-string (caar specs))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1914 (elt antlr-options-headings (1- level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1915 option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1916 (antlr-version-string antlr-tool-version))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1917
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1918 (defun antlr-version-string (version)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1919 "Format the Antlr version number VERSION, see `antlr-tool-version'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1920 (let ((version100 (/ version 100)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1921 (format "%d.%d.%d"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1922 (/ version100 100) (mod version100 100) (mod version 100))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1923
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1924
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1925 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1926 ;;; Insert options: the details (used by `antlr-insert-option-do')
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1927 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1928
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1929 (defun antlr-insert-option-existing (old value)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1930 "Insert option value VALUE at point for existing option.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1931 For OLD, see `antlr-insert-option-do'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1932 ;; no = => insert =
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1933 (unless (car old) (insert antlr-options-assign-string))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1934 ;; with user input => insert if necessary
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1935 (when value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1936 (if (cdr old) ; with value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1937 (if (string-equal value (buffer-substring (car old) (cdr old)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1938 (goto-char (cdr old))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1939 (delete-region (car old) (cdr old))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1940 (insert value))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1941 (insert value)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1942 (unless (looking-at "\\([^\n=;{}/'\"]\\|'\\([^\n'\\]\\|\\\\.\\)*'\\|\"\\([^\n\"\\]\\|\\\\.\\)*\"\\)*;")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1943 ;; stuff (no =, {, } or /) at point is not followed by ";"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1944 (insert ";")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1945 (backward-char)))
75228
d1295af1285f (antlr-indent-at-bol-alist): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 70180
diff changeset
1946
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1947 (defun antlr-insert-option-space (area old)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1948 "Find appropriate place to insert option, insert newlines/spaces.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1949 For AREA and OLD, see `antlr-insert-option-do'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1950 (let ((orig (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1951 (open t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1952 (skip-chars-backward " \t")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1953 (unless (bolp)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1954 (let ((before (char-after (1- (point)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1955 (goto-char orig)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1956 (and old ; with existing options area
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1957 (consp area) ; if point inside existing area
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1958 (not (eq before ?\;)) ; if not at beginning of option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1959 ; => skip to end of option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1960 (if (and (search-forward ";" (cdr area) t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1961 (let ((context (antlr-syntactic-context)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1962 (or (null context) (numberp context))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1963 (setq orig (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1964 (goto-char orig)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1965 (skip-chars-forward " \t")
75228
d1295af1285f (antlr-indent-at-bol-alist): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 70180
diff changeset
1966
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1967 (if (looking-at "$\\|//")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1968 ;; just comment after point => skip (+ lines w/ same col comment)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1969 (let ((same (if (> (match-end 0) (match-beginning 0))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1970 (current-column))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1971 (beginning-of-line 2)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1972 (or (bolp) (insert "\n"))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1973 (when (and same (null area)) ; or (consp area)?
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1974 (while (and (looking-at "[ \t]*\\(//\\)")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1975 (goto-char (match-beginning 1))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1976 (= (current-column) same))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1977 (beginning-of-line 2)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1978 (or (bolp) (insert "\n")))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1979 (goto-char orig)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1980 (if (null old)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1981 (progn (insert "\n") (antlr-indent-line))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1982 (unless (eq (char-after (1- (point))) ?\ )
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1983 (insert " "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1984 (unless (eq (char-after (point)) ?\ )
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1985 (insert " ")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1986 (backward-char))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1987 (setq open nil)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1988 (when open
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1989 (beginning-of-line 1)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1990 (insert "\n")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1991 (backward-char)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1992 (antlr-indent-line))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1993
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1994 (defun antlr-insert-option-area (level)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1995 "Insert new options area for options of level LEVEL.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1996 Used by `antlr-insert-option-do'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1997 (insert "options {\n\n}")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1998 (when (and antlr-options-auto-colon
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1999 (memq level '(3 4))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2000 (save-excursion
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2001 (antlr-c-forward-sws)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2002 (if (eq (char-after (point)) ?\{) (antlr-skip-sexps 1))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2003 (not (eq (char-after (point)) ?\:))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2004 (insert "\n:")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2005 (antlr-indent-line)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2006 (end-of-line 0))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2007 (backward-char 1)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2008 (antlr-indent-line)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2009 (beginning-of-line 0)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2010 (antlr-indent-line))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2011
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2012
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2013 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2014 ;;; Insert options: in `antlr-options-alists'
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2015 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2016
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2017 (defun antlr-read-value (initial-contents prompt
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2018 &optional as-string table table-x)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2019 "Read a string from the minibuffer, possibly with completion.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2020 If INITIAL-CONTENTS is non-nil, insert it in the minibuffer initially.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2021 PROMPT is a string to prompt with, normally it ends in a colon and a
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2022 space. If AS-STRING is t or is a member \(comparison done with `eq') of
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2023 `antlr-options-style', return printed representation of the user input,
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2024 otherwise return the user input directly.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2025
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2026 If TABLE or TABLE-X is non-nil, read with completion. The completion
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2027 table is the resulting alist of TABLE-X concatenated with TABLE where
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2028 TABLE can also be a function evaluation to an alist.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2029
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2030 Used inside `antlr-options-alists'."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2031 (let* ((completion-ignore-case t) ; dynamic
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2032 (table0 (and (or table table-x)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2033 (append table-x
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2034 (if (functionp table) (funcall table) table))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2035 (input (if table0
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2036 (completing-read prompt table0 nil nil initial-contents)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2037 (read-from-minibuffer prompt initial-contents))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2038 (if (and as-string
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2039 (or (eq as-string t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2040 (cdr (assq as-string antlr-options-style))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2041 (format "%S" input)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2042 input)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2043
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2044 (defun antlr-read-boolean (initial-contents prompt &optional table)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2045 "Read a boolean value from the minibuffer, with completion.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2046 If INITIAL-CONTENTS is non-nil, insert it in the minibuffer initially.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2047 PROMPT is a string to prompt with, normally it ends in a question mark
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2048 and a space. \"(true or false) \" is appended if TABLE is nil.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2049
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2050 Read with completion over \"true\", \"false\" and the keys in TABLE, see
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2051 also `antlr-read-value'.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2052
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2053 Used inside `antlr-options-alists'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2054 (antlr-read-value initial-contents
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2055 (if table prompt (concat prompt "(true or false) "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2056 nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2057 table '(("false") ("true"))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2058
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2059 (defun antlr-language-option-extra (phase &rest dummies)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2060 ;; checkdoc-params: (dummies)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2061 "Change language according to the new value of the \"language\" option.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2062 Call `antlr-mode' if the new language would be different from the value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2063 of `antlr-language', keeping the value of variable `font-lock-mode'.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2064
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2065 Called in PHASE `after-insertion', see `antlr-options-alists'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2066 (when (eq phase 'after-insertion)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2067 (let ((new-language (antlr-language-option t)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2068 (or (null new-language)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2069 (eq new-language antlr-language)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2070 (let ((font-lock (and (boundp 'font-lock-mode) font-lock-mode)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2071 (if font-lock (font-lock-mode 0))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2072 (antlr-mode)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2073 (and font-lock (null font-lock-mode) (font-lock-mode 1)))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2074
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2075 (defun antlr-c++-mode-extra (phase option &rest dummies)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2076 ;; checkdoc-params: (option dummies)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2077 "Warn if C++ option is used with the wrong language.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2078 Ask user \(\"y or n\"), if a C++ only option is going to be inserted but
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2079 `antlr-language' has not the value `c++-mode'.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2080
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2081 Called in PHASE `before-input', see `antlr-options-alists'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2082 (and (eq phase 'before-input)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2083 (not (eq antlr-language 'c++-mode))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2084 (not (y-or-n-p (format "Insert C++ %s option? " option)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2085 (error "Didn't insert C++ %s option with language %s"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2086 option (cadr (assq antlr-language antlr-language-alist)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2087
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2088
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2089 ;;;===========================================================================
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2090 ;;; Compute dependencies
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2091 ;;;===========================================================================
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2092
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2093 (defun antlr-file-dependencies ()
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2094 "Return dependencies for grammar in current buffer.
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2095 The result looks like \(FILE \(CLASSES \. SUPERS) VOCABS \. LANGUAGE)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2096 where CLASSES = ((CLASS . CLASS-EVOCAB) ...),
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2097 SUPERS = ((SUPER . USE-EVOCAB-P) ...), and
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2098 VOCABS = ((EVOCAB ...) . (IVOCAB ...))
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2099
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2100 FILE is the current buffer's file-name without directory part and
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2101 LANGUAGE is the value of `antlr-language' in the current buffer. Each
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2102 EVOCAB is an export vocabulary and each IVOCAB is an import vocabulary.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2103
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2104 Each CLASS is a grammar class with its export vocabulary CLASS-EVOCAB.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2105 Each SUPER is a super-grammar class where USE-EVOCAB-P indicates whether
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2106 its export vocabulary is used as an import vocabulary."
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2107 (unless buffer-file-name
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2108 (error "Grammar buffer does not visit a file"))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2109 (let (classes export-vocabs import-vocabs superclasses default-vocab)
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2110 (antlr-with-syntax-table antlr-action-syntax-table
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2111 (goto-char (point-min))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2112 (while (antlr-re-search-forward antlr-class-header-regexp nil)
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2113 ;; parse class definition --------------------------------------------
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2114 (let* ((class (match-string 2))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2115 (sclass (match-string 4))
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2116 ;; export vocab defaults to class name (first grammar in file)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2117 ;; or to the export vocab of the first grammar in file:
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2118 (evocab (or default-vocab class))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2119 (ivocab nil))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2120 (goto-char (match-end 0))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2121 (antlr-c-forward-sws)
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2122 (while (looking-at "options\\>\\|\\(tokens\\)\\>")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2123 (if (match-beginning 1)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2124 (antlr-skip-sexps 2)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2125 (goto-char (match-end 0))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2126 (antlr-c-forward-sws)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2127 ;; parse grammar option sections -------------------------------
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2128 (when (eq (char-after (point)) ?\{)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2129 (let* ((beg (1+ (point)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2130 (end (1- (antlr-skip-sexps 1)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2131 (cont (point)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2132 (goto-char beg)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2133 (if (re-search-forward "\\<exportVocab[ \t]*=[ \t]*\\([A-Za-z\300-\326\330-\337]\\sw*\\)" end t)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2134 (setq evocab (match-string 1)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2135 (goto-char beg)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2136 (if (re-search-forward "\\<importVocab[ \t]*=[ \t]*\\([A-Za-z\300-\326\330-\337]\\sw*\\)" end t)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2137 (setq ivocab (match-string 1)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2138 (goto-char cont)))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2139 (unless (member sclass '("Parser" "Lexer" "TreeParser"))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2140 (let ((super (assoc sclass superclasses)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2141 (if super
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2142 (or ivocab (setcdr super t))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2143 (push (cons sclass (null ivocab)) superclasses))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2144 ;; remember class with export vocabulary:
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2145 (push (cons class evocab) classes)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2146 ;; default export vocab is export vocab of first grammar in file:
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2147 (or default-vocab (setq default-vocab evocab))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2148 (or (member evocab export-vocabs) (push evocab export-vocabs))
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2149 (or (null ivocab)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2150 (member ivocab import-vocabs) (push ivocab import-vocabs)))))
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2151 (if classes
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2152 (list* (file-name-nondirectory buffer-file-name)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2153 (cons (nreverse classes) (nreverse superclasses))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2154 (cons (nreverse export-vocabs) (nreverse import-vocabs))
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2155 antlr-language))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2156
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2157 (defun antlr-directory-dependencies (dirname)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2158 "Return dependencies for all grammar files in directory DIRNAME.
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2159 The result looks like \((CLASS-SPEC ...) \. \(FILE-DEP ...))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2160 where CLASS-SPEC = (CLASS (FILE \. EVOCAB) ...).
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2161
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2162 FILE-DEP are the dependencies for each grammar file in DIRNAME, see
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2163 `antlr-file-dependencies'. For each grammar class CLASS, FILE is a
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2164 grammar file in which CLASS is defined and EVOCAB is the name of the
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2165 export vocabulary specified in that file."
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2166 (let ((grammar (directory-files dirname t "\\.g\\'")))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2167 (when grammar
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2168 (let ((temp-buffer (get-buffer-create
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2169 (generate-new-buffer-name " *temp*")))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2170 (antlr-imenu-name nil) ; dynamic-let: no imenu
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2171 (expanded-regexp (concat (format (regexp-quote
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2172 (cadr antlr-special-file-formats))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2173 ".+")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2174 "\\'"))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2175 classes dependencies)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2176 (unwind-protect
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2177 (save-excursion
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2178 (set-buffer temp-buffer)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2179 (widen) ; just in case...
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2180 (dolist (file grammar)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2181 (when (and (file-regular-p file)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2182 (null (string-match expanded-regexp file)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2183 (insert-file-contents file t nil nil t)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2184 (normal-mode t) ; necessary for major-mode, syntax
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2185 ; table and `antlr-language'
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2186 (when (eq major-mode 'antlr-mode)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2187 (let* ((file-deps (antlr-file-dependencies))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2188 (file (car file-deps)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2189 (when file-deps
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2190 (dolist (class-def (caadr file-deps))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2191 (let ((file-evocab (cons file (cdr class-def)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2192 (class-spec (assoc (car class-def) classes)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2193 (if class-spec
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2194 (nconc (cdr class-spec) (list file-evocab))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2195 (push (list (car class-def) file-evocab)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2196 classes))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2197 (push file-deps dependencies)))))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2198 (kill-buffer temp-buffer))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2199 (cons (nreverse classes) (nreverse dependencies))))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2200
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2201
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2202 ;;;===========================================================================
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2203 ;;; Compilation: run ANTLR tool
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2204 ;;;===========================================================================
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2205
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2206 (defun antlr-superclasses-glibs (supers classes)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2207 "Compute the grammar lib option for the super grammars SUPERS.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2208 Look in CLASSES for the right grammar lib files for SUPERS. SUPERS is
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2209 part SUPER in the result of `antlr-file-dependencies'. CLASSES is the
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2210 part \(CLASS-SPEC ...) in the result of `antlr-directory-dependencies'.
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2211
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2212 The result looks like \(OPTION WITH-UNKNOWN GLIB ...). OPTION is the
78487
419c5c316b51 Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents: 78234
diff changeset
2213 complete \"-glib\" option. WITH-UNKNOWN is t if there is none or more
419c5c316b51 Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents: 78234
diff changeset
2214 than one grammar file for at least one super grammar.
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2215
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2216 Each GLIB looks like \(GRAMMAR-FILE \. EVOCAB). GRAMMAR-FILE is a file
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2217 in which a super-grammar is defined. EVOCAB is the value of the export
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2218 vocabulary of the super-grammar or nil if it is not needed."
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2219 ;; If the superclass is defined in the same file, that file will be included
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2220 ;; with -glib again. This will lead to a redefinition. But defining a
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2221 ;; analyzer of the same class twice in a file will lead to an error anyway...
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2222 (let (glibs unknown)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2223 (while supers
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2224 (let* ((super (pop supers))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2225 (sup-files (cdr (assoc (car super) classes)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2226 (file (and sup-files (null (cdr sup-files)) (car sup-files))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2227 (or file (setq unknown t)) ; not exactly one file
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2228 (push (cons (or (car file)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2229 (format (car antlr-unknown-file-formats)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2230 (car super)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2231 (and (cdr super)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2232 (or (cdr file)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2233 (format (cadr antlr-unknown-file-formats)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2234 (car super)))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2235 glibs)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2236 (cons (if glibs (concat " -glib " (mapconcat 'car glibs ";")) "")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2237 (cons unknown glibs))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2238
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2239 (defun antlr-run-tool (command file &optional saved)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2240 "Run Antlr took COMMAND on grammar FILE.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2241 When called interactively, COMMAND is read from the minibuffer and
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2242 defaults to `antlr-tool-command' with a computed \"-glib\" option if
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2243 necessary.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2244
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2245 Save all buffers first unless optional value SAVED is non-nil. When
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2246 called interactively, the buffers are always saved, see also variable
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2247 `antlr-ask-about-save'."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2248 (interactive (antlr-run-tool-interactive))
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2249 (or saved (save-some-buffers (not antlr-ask-about-save)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2250 (let ((default-directory (file-name-directory file)))
65161
451eb4a93201 * progmodes/antlr-mode.el (antlr-default): Fix defface form.
Romain Francoise <romain@orebokech.com>
parents: 64699
diff changeset
2251 (compilation-start (concat command " " (file-name-nondirectory file))
451eb4a93201 * progmodes/antlr-mode.el (antlr-default): Fix defface form.
Romain Francoise <romain@orebokech.com>
parents: 64699
diff changeset
2252 nil #'(lambda (mode-name) "*Antlr-Run*"))))
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2253
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2254 (defun antlr-run-tool-interactive ()
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2255 ;; code in `interactive' is not compiled
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2256 "Interactive specification for `antlr-run-tool'.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2257 Use prefix argument ARG to return \(COMMAND FILE SAVED)."
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2258 (let* ((supers (cdadr (save-excursion
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2259 (save-restriction
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2260 (widen)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2261 (antlr-file-dependencies)))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2262 (glibs ""))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2263 (when supers
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2264 (save-some-buffers (not antlr-ask-about-save) nil)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2265 (setq glibs (car (antlr-superclasses-glibs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2266 supers
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2267 (car (antlr-directory-dependencies
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2268 (antlr-default-directory)))))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2269 (list (antlr-read-shell-command "Run Antlr on current file with: "
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2270 (concat antlr-tool-command glibs " "))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2271 buffer-file-name
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2272 supers)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2273
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2274
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2275 ;;;===========================================================================
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2276 ;;; Makefile creation
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2277 ;;;===========================================================================
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2278
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2279 (defun antlr-makefile-insert-variable (number pre post)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2280 "Insert Makefile variable numbered NUMBER according to specification.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2281 Also insert strings PRE and POST before and after the variable."
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2282 (let ((spec (cadr antlr-makefile-specification)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2283 (when spec
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2284 (insert pre
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2285 (if number (format (cadr spec) number) (car spec))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2286 post))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2287
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2288 (defun antlr-insert-makefile-rules (&optional in-makefile)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2289 "Insert Makefile rules in the current buffer at point.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2290 IN-MAKEFILE is non-nil, if the current buffer is the Makefile. See
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2291 command `antlr-show-makefile-rules' for detail."
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2292 (let* ((dirname (antlr-default-directory))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2293 (deps0 (antlr-directory-dependencies dirname))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2294 (classes (car deps0)) ; CLASS -> (FILE . EVOCAB) ...
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2295 (deps (cdr deps0)) ; FILE -> (c . s) (ev . iv) . LANGUAGE
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2296 (with-error nil)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2297 (gen-sep (or (caddr (cadr antlr-makefile-specification)) " "))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2298 (n (and (cdr deps) (cadr antlr-makefile-specification) 0)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2299 (or in-makefile (set-buffer standard-output))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2300 (dolist (dep deps)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2301 (let ((supers (cdadr dep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2302 (lang (cdr (assoc (cdddr dep) antlr-file-formats-alist))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2303 (if n (incf n))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2304 (antlr-makefile-insert-variable n "" " =")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2305 (if supers
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2306 (insert " "
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2307 (format (cadr antlr-special-file-formats)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2308 (file-name-sans-extension (car dep)))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2309 (dolist (class-def (caadr dep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2310 (let ((sep gen-sep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2311 (dolist (class-file (cadr lang))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2312 (insert sep (format class-file (car class-def)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2313 (setq sep " "))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2314 (dolist (evocab (caaddr dep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2315 (let ((sep gen-sep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2316 (dolist (vocab-file (cons (car antlr-special-file-formats)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2317 (car lang)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2318 (insert sep (format vocab-file evocab))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2319 (setq sep " "))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2320 (antlr-makefile-insert-variable n "\n$(" ")")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2321 (insert ": " (car dep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2322 (dolist (ivocab (cdaddr dep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2323 (insert " " (format (car antlr-special-file-formats) ivocab)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2324 (let ((glibs (antlr-superclasses-glibs supers classes)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2325 (if (cadr glibs) (setq with-error t))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2326 (dolist (super (cddr glibs))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2327 (insert " " (car super))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2328 (if (cdr super)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2329 (insert " " (format (car antlr-special-file-formats)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2330 (cdr super)))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2331 (insert "\n\t"
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2332 (caddr antlr-makefile-specification)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2333 (car glibs)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2334 " $<\n"
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2335 (car antlr-makefile-specification)))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2336 (if n
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2337 (let ((i 0))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2338 (antlr-makefile-insert-variable nil "" " =")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2339 (while (<= (incf i) n)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2340 (antlr-makefile-insert-variable i " $(" ")"))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2341 (insert "\n" (car antlr-makefile-specification))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2342 (if (string-equal (car antlr-makefile-specification) "\n")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2343 (backward-delete-char 1))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2344 (when with-error
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2345 (goto-char (point-min))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2346 (insert antlr-help-unknown-file-text))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2347 (unless in-makefile
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2348 (copy-region-as-kill (point-min) (point-max))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2349 (goto-char (point-min))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2350 (insert (format antlr-help-rules-intro dirname)))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2351
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2352 ;;;###autoload
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2353 (defun antlr-show-makefile-rules ()
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2354 "Show Makefile rules for all grammar files in the current directory.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2355 If the `major-mode' of the current buffer has the value `makefile-mode',
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2356 the rules are directory inserted at point. Otherwise, a *Help* buffer
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2357 is shown with the rules which are also put into the `kill-ring' for
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2358 \\[yank].
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2359
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2360 This command considers import/export vocabularies and grammar
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2361 inheritance and provides a value for the \"-glib\" option if necessary.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2362 Customize variable `antlr-makefile-specification' for the appearance of
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2363 the rules.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2364
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2365 If the file for a super-grammar cannot be determined, special file names
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2366 are used according to variable `antlr-unknown-file-formats' and a
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2367 commentary with value `antlr-help-unknown-file-text' is added. The
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2368 *Help* buffer always starts with the text in `antlr-help-rules-intro'."
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2369 (interactive)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2370 (if (null (eq major-mode 'makefile-mode))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2371 (antlr-with-displaying-help-buffer 'antlr-insert-makefile-rules)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2372 (push-mark)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2373 (antlr-insert-makefile-rules t)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2374
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2375
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2376 ;;;===========================================================================
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2377 ;;; Indentation
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2378 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2379
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2380 (defun antlr-indent-line ()
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2381 "Indent the current line as ANTLR grammar code.
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2382 The indentation of grammar lines are calculated by `c-basic-offset',
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2383 multiplied by:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2384 - the level of the paren/brace/bracket depth,
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2385 - plus 0/2/1, depending on the position inside the rule: header, body,
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2386 exception part,
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2387 - minus 1 if `antlr-indent-item-regexp' matches the beginning of the
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2388 line starting from the first non-whitespace.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2389
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2390 Lines inside block comments are indented by `c-indent-line' according to
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2391 `antlr-indent-comment'.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2392
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2393 Lines in actions except top-level actions in a header part or an option
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2394 area are indented by `c-indent-line'.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2395
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2396 Lines in header actions are indented at column 0 if `antlr-language'
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2397 equals to a key in `antlr-indent-at-bol-alist' and the line starting at
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2398 the first non-whitespace is matched by the corresponding value.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2399
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2400 For the initialization of `c-basic-offset', see `antlr-indent-style' and,
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2401 to a lesser extent, `antlr-tab-offset-alist'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2402 (save-restriction
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2403 (let ((orig (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2404 (min0 (point-min))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2405 bol boi indent syntax cc-syntax)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2406 (widen)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2407 (beginning-of-line)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2408 (setq bol (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2409 (if (< bol min0)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2410 (error "Beginning of current line not visible"))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2411 (skip-chars-forward " \t")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2412 (setq boi (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2413 ;; check syntax at beginning of indentation ----------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2414 (antlr-with-syntax-table antlr-action-syntax-table
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
2415 (antlr-invalidate-context-cache)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2416 (setq syntax (antlr-syntactic-context))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2417 (cond ((symbolp syntax)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2418 (setq indent nil)) ; block-comments, strings, (comments)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2419 ((progn
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2420 (antlr-next-rule -1 t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2421 (if (antlr-search-forward ":") (< boi (1- (point))) t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2422 (setq indent 0)) ; in rule header
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2423 ((if (antlr-search-forward ";") (< boi (point)) t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2424 (setq indent 2)) ; in rule body
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2425 (t
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2426 (forward-char)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2427 (antlr-skip-exception-part nil)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2428 (setq indent (if (> (point) boi) 1 0))))) ; in exception part?
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2429 ;; check whether to use indentation engine of cc-mode ------------------
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2430 (antlr-invalidate-context-cache)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2431 (goto-char boi)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2432 (when (and indent (> syntax 0))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2433 (cond ((> syntax 1) ; block in action => use cc-mode
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2434 (setq indent nil))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2435 ((and (= indent 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2436 (assq antlr-language antlr-indent-at-bol-alist)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2437 (looking-at (cdr (assq antlr-language
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2438 antlr-indent-at-bol-alist))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2439 (setq syntax 'bol))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2440 ((setq cc-syntax (c-guess-basic-syntax))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2441 (let ((cc cc-syntax) symbol)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2442 (while (setq symbol (pop cc))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2443 (when (cdr symbol)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2444 (or (memq (car symbol)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2445 antlr-disabling-cc-syntactic-symbols)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2446 (setq indent nil))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2447 (setq cc nil)))))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2448 ;;; ((= indent 1) ; exception part => use cc-mode
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2449 ;;; (setq indent nil))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2450 ;;; ((save-restriction ; not in option part => cc-mode
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2451 ;;; (goto-char (scan-lists (point) -1 1))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2452 ;;; (skip-chars-backward " \t\n")
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2453 ;;; (narrow-to-region (point-min) (point))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2454 ;;; (not (re-search-backward "\\<options\\'" nil t)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2455 ;;; (setq indent nil)))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2456 ;; compute the corresponding indentation and indent --------------------
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2457 (if (null indent)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2458 ;; Use the indentation engine of cc-mode
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2459 (progn
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2460 (goto-char orig)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2461 (if (or (numberp syntax)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2462 (if (eq syntax 'string) nil (eq antlr-indent-comment t)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2463 (c-indent-line cc-syntax)))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2464 ;; do it ourselves
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2465 (goto-char boi)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2466 (unless (symbolp syntax) ; direct indentation
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2467 ;;(antlr-invalidate-context-cache)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2468 (incf indent (antlr-syntactic-context))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2469 (and (> indent 0) (looking-at antlr-indent-item-regexp) (decf indent))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2470 (setq indent (* indent c-basic-offset)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2471 ;; the usual major-mode indent stuff ---------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2472 (setq orig (- (point-max) orig))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2473 (unless (= (current-column) indent)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2474 (delete-region bol boi)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2475 (beginning-of-line)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2476 (indent-to indent))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2477 ;; If initial point was within line's indentation,
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2478 ;; position after the indentation. Else stay at same point in text.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2479 (if (> (- (point-max) orig) (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2480 (goto-char (- (point-max) orig)))))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2481
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2482 (defun antlr-indent-command (&optional arg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2483 "Indent the current line or insert tabs/spaces.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2484 With optional prefix argument ARG or if the previous command was this
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2485 command, insert ARG tabs or spaces according to `indent-tabs-mode'.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2486 Otherwise, indent the current line with `antlr-indent-line'."
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2487 (interactive "*P")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2488 (if (or arg (eq last-command 'antlr-indent-command))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2489 (insert-tab arg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2490 (let ((antlr-indent-comment (and antlr-indent-comment t))) ; dynamic
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2491 (antlr-indent-line))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2492
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2493 (defun antlr-electric-character (&optional arg)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2494 "Insert the character you type and indent the current line.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2495 Insert the character like `self-insert-command' and indent the current
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2496 line as `antlr-indent-command' does. Do not indent the line if
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2497
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2498 * this command is called with a prefix argument ARG,
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2499 * there are characters except whitespaces between point and the
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2500 beginning of the line, or
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2501 * point is not inside a normal grammar code, { and } are also OK in
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2502 actions.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2503
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2504 This command is useful for a character which has some special meaning in
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2505 ANTLR's syntax and influences the auto indentation, see
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2506 `antlr-indent-item-regexp'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2507 (interactive "*P")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2508 (if (or arg
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2509 (save-excursion (skip-chars-backward " \t") (not (bolp)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2510 (antlr-with-syntax-table antlr-action-syntax-table
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2511 (antlr-invalidate-context-cache)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2512 (let ((context (antlr-syntactic-context)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2513 (not (and (numberp context)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2514 (or (zerop context)
101002
3b3c7e10cd97 Replace last-command-char with last-command-event.
Glenn Morris <rgm@gnu.org>
parents: 100908
diff changeset
2515 (memq last-command-event '(?\{ ?\}))))))))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2516 (self-insert-command (prefix-numeric-value arg))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2517 (self-insert-command (prefix-numeric-value arg))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2518 (antlr-indent-line)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2519
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2520
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2521 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2522 ;;; Mode entry
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2523 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2524
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2525 (defun antlr-c-init-language-vars ()
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2526 "Like `c-init-language-vars-for' when using cc-mode before v5.29."
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2527 (let ((settings ; (cdr '(setq...)) will be optimized
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2528 (if (eq antlr-language 'c++-mode)
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2529 (cdr '(setq ;' from `c++-mode' v5.20, v5.28
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2530 c-keywords (c-identifier-re c-C++-keywords)
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2531 c-conditional-key c-C++-conditional-key
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2532 c-comment-start-regexp c-C++-comment-start-regexp
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2533 c-class-key c-C++-class-key
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2534 c-extra-toplevel-key c-C++-extra-toplevel-key
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2535 c-access-key c-C++-access-key
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2536 c-recognize-knr-p nil
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2537 c-bitfield-key c-C-bitfield-key ; v5.28
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2538 ))
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2539 (cdr '(setq ; from `java-mode' v5.20, v5.28
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2540 c-keywords (c-identifier-re c-Java-keywords)
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2541 c-conditional-key c-Java-conditional-key
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2542 c-comment-start-regexp c-Java-comment-start-regexp
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2543 c-class-key c-Java-class-key
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2544 c-method-key nil
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2545 c-baseclass-key nil
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2546 c-recognize-knr-p nil
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2547 c-access-key c-Java-access-key ; v5.20
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2548 c-inexpr-class-key c-Java-inexpr-class-key ; v5.28
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2549 )))))
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2550 (while settings
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2551 (when (boundp (car settings))
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2552 (ignore-errors
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2553 (set (car settings) (eval (cadr settings)))))
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2554 (setq settings (cddr settings)))))
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2555
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2556 (defun antlr-language-option (search)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2557 "Find language in `antlr-language-alist' for language option.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2558 If SEARCH is non-nil, find element for language option. Otherwise, find
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2559 the default language."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2560 (let ((value (and search
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2561 (save-excursion
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2562 (goto-char (point-min))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2563 (re-search-forward (cdr antlr-language-limit-n-regexp)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2564 (car antlr-language-limit-n-regexp)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2565 t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2566 (match-string 1)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2567 (seq antlr-language-alist)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2568 r)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2569 ;; Like (find VALUE antlr-language-alist :key 'cddr :test 'member)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2570 (while seq
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2571 (setq r (pop seq))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2572 (if (member value (cddr r))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2573 (setq seq nil) ; stop
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2574 (setq r nil))) ; no result yet
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2575 (car r)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2576
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2577 ;;;###autoload
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2578 (defun antlr-mode ()
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2579 "Major mode for editing ANTLR grammar files.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2580 \\{antlr-mode-map}"
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2581 (interactive)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2582 (kill-all-local-variables)
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2583 (c-initialize-cc-mode) ; cc-mode is required
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2584 (unless (fboundp 'c-forward-sws) ; see above
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2585 (fset 'antlr-c-forward-sws 'c-forward-syntactic-ws))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2586 ;; ANTLR specific ----------------------------------------------------------
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2587 (setq major-mode 'antlr-mode
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2588 mode-name "Antlr")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2589 (setq local-abbrev-table antlr-mode-abbrev-table)
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2590 (unless antlr-mode-syntax-table
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2591 (setq antlr-mode-syntax-table (make-syntax-table))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2592 (c-populate-syntax-table antlr-mode-syntax-table))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2593 (set-syntax-table antlr-mode-syntax-table)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2594 (unless antlr-action-syntax-table
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2595 (let ((slist (nth 3 antlr-font-lock-defaults)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2596 (setq antlr-action-syntax-table
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2597 (copy-syntax-table antlr-mode-syntax-table))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2598 (while slist
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2599 (modify-syntax-entry (caar slist) (cdar slist)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2600 antlr-action-syntax-table)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2601 (setq slist (cdr slist)))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2602 (use-local-map antlr-mode-map)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2603 (make-local-variable 'antlr-language)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2604 (unless antlr-language
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2605 (setq antlr-language
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2606 (or (antlr-language-option t) (antlr-language-option nil))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2607 (if (stringp (cadr (assq antlr-language antlr-language-alist)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2608 (setq mode-name
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
2609 (concat "Antlr."
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2610 (cadr (assq antlr-language antlr-language-alist)))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2611 ;; indentation, for the C engine -------------------------------------------
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2612 (setq c-buffer-is-cc-mode antlr-language)
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2613 (cond ((fboundp 'c-init-language-vars-for) ; cc-mode 5.30.5+
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2614 (c-init-language-vars-for antlr-language))
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2615 ((fboundp 'c-init-c-language-vars) ; cc-mode 5.30 to 5.30.4
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2616 (c-init-c-language-vars) ; not perfect, but OK
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2617 (setq c-recognize-knr-p nil))
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2618 ((fboundp 'c-init-language-vars) ; cc-mode 5.29
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2619 (let ((init-fn 'c-init-language-vars))
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2620 (funcall init-fn))) ; is a function in v5.29
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2621 (t ; cc-mode upto 5.28
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2622 (antlr-c-init-language-vars))) ; do it myself
59238
a7774e900abe (antlr-mode): Use mode-require-final-newline.
Richard M. Stallman <rms@gnu.org>
parents: 53418
diff changeset
2623 (c-basic-common-init antlr-language (or antlr-indent-style "gnu"))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2624 (make-local-variable 'outline-regexp)
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2625 (make-local-variable 'outline-level)
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2626 (make-local-variable 'require-final-newline)
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2627 (make-local-variable 'indent-line-function)
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2628 (make-local-variable 'indent-region-function)
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2629 (setq outline-regexp "[^#\n\^M]"
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2630 outline-level 'c-outline-level) ; TODO: define own
59238
a7774e900abe (antlr-mode): Use mode-require-final-newline.
Richard M. Stallman <rms@gnu.org>
parents: 53418
diff changeset
2631 (setq require-final-newline mode-require-final-newline)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2632 (setq indent-line-function 'antlr-indent-line
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2633 indent-region-function nil) ; too lazy
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2634 (setq comment-start "// "
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2635 comment-end ""
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2636 comment-start-skip "/\\*+ *\\|// *")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2637 ;; various -----------------------------------------------------------------
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2638 (make-local-variable 'font-lock-defaults)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2639 (setq font-lock-defaults antlr-font-lock-defaults)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2640 (easy-menu-add antlr-mode-menu)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2641 (make-local-variable 'imenu-create-index-function)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2642 (setq imenu-create-index-function 'antlr-imenu-create-index-function)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2643 (make-local-variable 'imenu-generic-expression)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2644 (setq imenu-generic-expression t) ; fool stupid test
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2645 (and antlr-imenu-name ; there should be a global variable...
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2646 (fboundp 'imenu-add-to-menubar)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2647 (imenu-add-to-menubar
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2648 (if (stringp antlr-imenu-name) antlr-imenu-name "Index")))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2649 (antlr-set-tabs)
62772
f2892faa87d4 * progmodes/ada-mode.el (ada-mode):
Lute Kamstra <lute@gnu.org>
parents: 62531
diff changeset
2650 (run-mode-hooks 'antlr-mode-hook))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2651
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2652 ;; A smarter version of `group-buffers-menu-by-mode-then-alphabetically' (in
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2653 ;; XEmacs) could use the following property. The header of the submenu would
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2654 ;; be "Antlr" instead of "Antlr.C++" or (not and!) "Antlr.Java".
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
2655 (put 'antlr-mode 'mode-name "Antlr")
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
2656
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2657 ;;;###autoload
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2658 (defun antlr-set-tabs ()
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2659 "Use ANTLR's convention for TABs according to `antlr-tab-offset-alist'.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2660 Used in `antlr-mode'. Also a useful function in `java-mode-hook'."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2661 (if buffer-file-name
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2662 (let ((alist antlr-tab-offset-alist) elem)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2663 (while alist
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2664 (setq elem (pop alist))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2665 (and (or (null (car elem)) (eq (car elem) major-mode))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2666 (or (null (cadr elem))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2667 (string-match (cadr elem) buffer-file-name))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2668 (setq tab-width (caddr elem)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2669 indent-tabs-mode (cadddr elem)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2670 alist nil))))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2671
87574
21fcd219fd6e * mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87170
diff changeset
2672 (provide 'antlr-mode)
21fcd219fd6e * mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87170
diff changeset
2673
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2674 ;;; Local IspellPersDict: .ispell_antlr
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49598
diff changeset
2675
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
2676 ;; arch-tag: 5de2be79-3d13-4560-8fbc-f7d0234dcb5c
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 38100
diff changeset
2677 ;;; antlr-mode.el ends here