annotate lisp/progmodes/antlr-mode.el @ 78487:419c5c316b51

Replace `iff' in doc-strings and comments.
author Glenn Morris <rgm@gnu.org>
date Wed, 08 Aug 2007 07:31:11 +0000
parents c1ec1c8a8d2e
children a1342e6e097a f873840f9fea 424b655804ca
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
75228
d1295af1285f (antlr-indent-at-bol-alist): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 70180
diff changeset
3 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
64699
629afbe74e61 Update copyright for release of 22.1 for progmodes directory.
Nick Roberts <nickrob@snap.net.nz>
parents: 64085
diff changeset
4 ;; Free Software Foundation, Inc.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
5 ;;
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
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
13 ;; GNU Emacs is free software; you can redistribute it and/or modify
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
78234
c1ec1c8a8d2e Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents: 75228
diff changeset
15 ;; the Free Software Foundation; either version 3, or (at your option)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
16 ;; any later version.
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
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
24 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64085
18a818a2ee7c Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63447
diff changeset
25 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18a818a2ee7c Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63447
diff changeset
26 ;; Boston, MA 02110-1301, USA.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
27
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
28 ;;; Commentary:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
29
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
30 ;; The Emacs package ANTLR-Mode provides: syntax highlighting for ANTLR grammar
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
31 ;; files, automatic indentation, menus containing rule/token definitions and
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
32 ;; supported options and various other things like running ANTLR from within
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
33 ;; Emacs.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
34
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
35 ;; 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
36 ;; the manual style, follow all commands mentioned in the documentation of
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
37 ;; `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
38 ;; 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
39 ;; found at <http://www.antlr.org/>.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
40
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
41 ;; Bug fixes, bug reports, improvements, and suggestions for the newest version
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
42 ;; are strongly appreciated.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
43
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
44 ;; To-do/Wish-list:
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
45 ;;
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
46 ;; * 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
47 ;; and hyper-links (using htmlize).
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
48 ;; * 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
49 ;; 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
50 ;; * Next Version. Make hiding much more customizable.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
51 ;; * 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
52 ;; * 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
53 ;; definitions at beginning of grammar class.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
54 ;; * 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
55 ;;
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
56 ;; * 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
57 ;; 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
58 ;; 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
59 ;; * 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
60 ;; 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
61 ;; `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
62 ;; * 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
63 ;; 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
64 ;; 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
65 ;; 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
66 ;; * 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
67 ;; 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
68 ;; 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
69
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
70 ;;; Installation:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
71
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
72 ;; 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
73
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
74 ;; 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
75 ;; load-path and the following into your ~/.emacs:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
76 ;; (autoload 'antlr-mode "antlr-mode" nil t)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
77 ;; (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
78 ;; (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
79 ;; (lambda () (speedbar-add-supported-extension ".g")))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
80
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
81 ;; 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
82 ;; 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
83
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
84 ;; To customize, use menu item "Antlr" -> "Customize Antlr".
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
85
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
86 ;;; Code:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
87
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
88 (provide 'antlr-mode)
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
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
91 ;; General Emacs/XEmacs-compatibility compile-time macros
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
92 (eval-when-compile
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
93 (require 'cl)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
94 (defmacro cond-emacs-xemacs (&rest args)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49554
diff changeset
95 (cond-emacs-xemacs-macfn
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
96 args "`cond-emacs-xemacs' must return exactly one element"))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
97 (defun cond-emacs-xemacs-macfn (args &optional msg)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
98 (if (atom args) args
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
99 (and (eq (car args) :@) (null msg) ; (:@ ...spliced...)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
100 (setq args (cdr args)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
101 msg "(:@ ....) must return exactly one element"))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
102 (let ((ignore (if (string-match "XEmacs" emacs-version) :EMACS :XEMACS))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
103 (mode :BOTH) code)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
104 (while (consp args)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
105 (if (memq (car args) '(:EMACS :XEMACS :BOTH)) (setq mode (pop args)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
106 (if (atom args)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
107 (or args (error "Used selector %s without elements" mode))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
108 (or (eq ignore mode)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
109 (push (cond-emacs-xemacs-macfn (car args)) code))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
110 (pop args)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
111 (cond (msg (if (or args (cdr code)) (error msg) (car code)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
112 ((or (null args) (eq ignore mode)) (nreverse code))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
113 (t (nconc (nreverse code) args))))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
114 ;; Emacs/XEmacs-compatibility `defun': remove interactive "_" for Emacs, use
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
115 ;; existing functions when they are `fboundp', provide shortcuts if they are
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
116 ;; 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
117 (defmacro defunx (name arglist &rest definition)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
118 (let ((xemacsp (string-match "XEmacs" emacs-version)) reuses)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
119 (while (memq (car definition)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
120 '(:try :emacs-and-try :xemacs-and-try))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
121 (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
122 (setq reuses (car definition)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
123 definition nil)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
124 (push (pop definition) reuses)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
125 (if (and reuses (symbolp reuses))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
126 `(defalias ',name ',reuses)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
127 (let* ((docstring (if (stringp (car definition)) (pop definition)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
128 (spec (and (not xemacsp)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
129 (eq (car-safe (car definition)) 'interactive)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
130 (null (cddar definition))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
131 (cadar definition))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
132 (if (and (stringp spec)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
133 (not (string-equal spec ""))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
134 (eq (aref spec 0) ?_))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
135 (setq definition
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
136 (cons (if (string-equal spec "_")
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
137 '(interactive)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
138 `(interactive ,(substring spec 1)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
139 (cdr definition))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
140 (if (null reuses)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
141 `(defun ,name ,arglist ,docstring
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
142 ,@(cond-emacs-xemacs-macfn definition))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
143 ;; no dynamic docstring in this case
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
144 `(eval-and-compile ; no warnings in Emacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
145 (defalias ',name
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
146 (cond ,@(mapcar (lambda (func) `((fboundp ',func) ',func))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
147 (nreverse reuses))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
148 (t ,(if definition
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
149 `(lambda ,arglist ,docstring
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
150 ,@(cond-emacs-xemacs-macfn definition))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
151 'ignore))))))))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
152 (defmacro ignore-errors-x (&rest body)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
153 (let ((specials '((scan-sexps . 4) (scan-lists . 5)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
154 spec nils)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
155 (if (and (string-match "XEmacs" emacs-version)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
156 (null (cdr body)) (consp (car body))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
157 (setq spec (assq (caar body) specials))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
158 (>= (setq nils (- (cdr spec) (length (car body)))) 0))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
159 `(,@(car body) ,@(make-list nils nil) t)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
160 `(ignore-errors ,@body)))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
161
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
162 ;; More compile-time-macros
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
163 (eval-when-compile
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
164 (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
165 (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
166 `(let ((,modified (buffer-modified-p)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
167 (unwind-protect
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
168 (let ((buffer-undo-list t) (inhibit-read-only t)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
169 ,@(unless (string-match "XEmacs" emacs-version)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
170 '((inhibit-point-motion-hooks t) deactivate-mark))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
171 before-change-functions after-change-functions
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
172 buffer-file-name buffer-file-truename)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
173 ,@body)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
174 (and (not ,modified) (buffer-modified-p)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
175 (set-buffer-modified-p nil)))))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
176 (put 'save-buffer-state-x 'lisp-indent-function 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
177
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
178 ;; get rid of byte-compile warnings
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
179 (eval-when-compile ; required and optional libraries
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
180 (require 'cc-mode)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
181 (ignore-errors (require 'font-lock))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
182 (ignore-errors (require 'compile))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
183 ;;(ignore-errors (defun c-init-language-vars))) dangerous on Emacs!
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
184 ;;(ignore-errors (defun c-init-c-language-vars))) dangerous on Emacs!
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
185 ;;(ignore-errors (defun c-basic-common-init)) dangerous on Emacs!
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
186 (defvar outline-level) (defvar imenu-use-markers)
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
187 (defvar imenu-create-index-function))
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))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
843 (:foreground "black" :EMACS :weight bold :XEMACS :bold t))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
844 "ANTLR keywords."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
845 :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
846 ;; 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
847 (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
848
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
849 (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
850 (defface antlr-syntax
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
851 (cond-emacs-xemacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
852 '((((class color) (background light))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
853 (:foreground "black" :EMACS :weight bold :XEMACS :bold t))))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
854 "ANTLR syntax symbols like :, |, (, ), ...."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
855 :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
856 ;; 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
857 (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
858
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
859 (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
860 (defface antlr-ruledef
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
861 (cond-emacs-xemacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
862 '((((class color) (background light))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
863 (:foreground "blue" :EMACS :weight bold :XEMACS :bold t))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
864 "ANTLR rule references (definition)."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
865 :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
866 ;; 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
867 (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
868
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
869 (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
870 (defface antlr-tokendef
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
871 (cond-emacs-xemacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
872 '((((class color) (background light))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
873 (:foreground "blue" :EMACS :weight bold :XEMACS :bold t))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
874 "ANTLR token references (definition)."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
875 :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
876 ;; 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
877 (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
878
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
879 (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
880 (defface antlr-ruleref
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
881 '((((class color) (background light)) (:foreground "blue4")))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
882 "ANTLR rule references (usage)."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
883 :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
884 ;; 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
885 (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
886
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
887 (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
888 (defface antlr-tokenref
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
889 '((((class color) (background light)) (:foreground "orange4")))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
890 "ANTLR token references (usage)."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
891 :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
892 ;; 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
893 (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
894
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
895 (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
896 (defface antlr-literal
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
897 (cond-emacs-xemacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
898 '((((class color) (background light))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
899 (:foreground "brown4" :EMACS :weight bold :XEMACS :bold t))))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
900 "ANTLR special literal tokens.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
901 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
902 `antlr-font-lock-literal-regexp'."
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
903 :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
904 ;; 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
905 (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
906
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
907 (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
908 "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
909 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
910 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
911 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
912 `antlr-font-lock-literal-face'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
913 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
914 :type '(choice (const :tag "None" nil) regexp))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
915
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
916 (defvar antlr-class-header-regexp
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
917 "\\(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
918 "Regexp matching class headers.")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
919
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
920 (defvar antlr-font-lock-additional-keywords
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
921 (cond-emacs-xemacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
922 `((antlr-invalidate-context-cache)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
923 ("\\$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
924 (1 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
925 ("\\$\\sw+" (0 keyword-face))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
926 ;; the tokens are already fontified as string/docstrings:
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
927 (,(lambda (limit)
65161
451eb4a93201 * progmodes/antlr-mode.el (antlr-default): Fix defface form.
Romain Francoise <romain@orebokech.com>
parents: 64699
diff changeset
928 (if antlr-font-lock-literal-regexp
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
929 (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
930 (1 antlr-literal-face t)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
931 :XEMACS (0 nil)) ; XEmacs bug workaround
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
932 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
933 (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
934 (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
935 (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
936 (3 antlr-keyword-face)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
937 (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
938 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
939 type-face)))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
940 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
941 (antlr-re-search-forward
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
942 "\\<\\(header\\|options\\|tokens\\|exception\\|catch\\|returns\\)\\>"
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
943 limit))
63447
7976e5fa0225 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-409
Miles Bader <miles@gnu.org>
parents: 62772
diff changeset
944 (1 antlr-keyword-face))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
945 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
946 (antlr-re-search-forward
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
947 "^\\(private\\|public\\|protected\\)\\>[ \t]*\\(\\(\\sw+[ \t]*\\(:\\)?\\)\\)?"
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
948 limit))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
949 (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
950 (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
951 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
952 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
953 (4 antlr-syntax-face nil t))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
954 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
955 (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
956 (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
957 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
958 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
959 (2 antlr-syntax-face nil t))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
960 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
961 ;; v:ruleref and v:"literal" is allowed...
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 (match-beginning 2)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
964 (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
965 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
966 font-lock-variable-name-face)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
967 (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
968 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
969 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
970 (2 antlr-default-face nil t))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
971 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
972 (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
973 (0 antlr-syntax-face))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
974 "Font-lock keywords for ANTLR's normal grammar code.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
975 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
976
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
977 (defvar antlr-font-lock-defaults
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
978 '(antlr-font-lock-keywords
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
979 nil nil ((?_ . "w") (?\( . ".") (?\) . ".")) beginning-of-defun)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
980 "Font-lock defaults used for ANTLR syntax highlighting.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
981 The SYNTAX-ALIST element is also used to initialize
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
982 `antlr-action-syntax-table'.")
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
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
985 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
986 ;;; Internal variables
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
987 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
988
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
989 (defvar antlr-mode-hook nil
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
990 "Hook called by `antlr-mode'.")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
991
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
992 (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
993 "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
994 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
995
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
996 ;; used for "in Java/C++ code" = syntactic-depth>0
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
997 (defvar antlr-action-syntax-table nil
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
998 "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
999 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
1000 `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
1001 `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
1002 not to confuse their context_cache.")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1003
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1004 (defvar antlr-mode-abbrev-table nil
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1005 "Abbreviation table used in `antlr-mode' buffers.")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1006 (define-abbrev-table 'antlr-mode-abbrev-table ())
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1007
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1008 (defvar antlr-slow-cache-enabling-symbol 'loudly
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1009 ;; 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
1010 ;; 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
1011 ;; functions which call `antlr-slow-syntactic-context'.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1012 "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
1013 This is no user option. Used for `antlr-slow-syntactic-context'.")
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1014
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1015 (defvar antlr-slow-cache-diff-threshold 5000
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1016 "Maximum distance between `point' and cache position for cache use.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1017 Used for `antlr-slow-syntactic-context'.")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1018
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1019
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1020 ;;;;##########################################################################
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1021 ;;;; The Code
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1022 ;;;;##########################################################################
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1023
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1024
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1025
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1026 ;;;===========================================================================
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1027 ;;; Syntax functions -- Emacs vs XEmacs dependent, part 1
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1028 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1029
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1030 ;; 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
1031 (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
1032 "Evaluate BODY with the syntax table SYNTAB."
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1033 `(let ((stab (syntax-table)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1034 (unwind-protect
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1035 (progn (set-syntax-table ,syntab) ,@body)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1036 (set-syntax-table stab))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1037 (put 'antlr-with-syntax-table 'lisp-indent-function 1)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1038 (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
1039
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1040 (defunx antlr-default-directory ()
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1041 :xemacs-and-try default-directory
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1042 "Return `default-directory'."
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1043 default-directory)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1044
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1045 ;; Check Emacs-21.1 simple.el, `shell-command'.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1046 (defunx antlr-read-shell-command (prompt &optional initial-input history)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1047 :xemacs-and-try read-shell-command
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1048 "Read a string from the minibuffer, using `shell-command-history'."
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1049 (read-from-minibuffer prompt initial-input nil nil
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1050 (or history 'shell-command-history)))
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 (defunx antlr-with-displaying-help-buffer (thunk &optional name)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1053 :xemacs-and-try with-displaying-help-buffer
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1054 "Make a help buffer and call `thunk' there."
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1055 (with-output-to-temp-buffer "*Help*"
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1056 (save-excursion (funcall thunk))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1057
49554
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 ;;;===========================================================================
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1060 ;;; Context cache
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1061 ;;;===========================================================================
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1062
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1063 (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
1064
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1065 ;;;(defvar antlr-statistics-full-neg 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1066 ;;;(defvar antlr-statistics-full-diff 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1067 ;;;(defvar antlr-statistics-full-other 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1068 ;;;(defvar antlr-statistics-cache 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1069 ;;;(defvar antlr-statistics-inval 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1070
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1071 (defunx antlr-invalidate-context-cache (&rest dummies)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1072 ;; checkdoc-params: (dummies)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1073 "Invalidate context cache for syntactical context information."
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1074 :XEMACS ; XEmacs bug workaround
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1075 (save-excursion
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1076 (set-buffer (get-buffer-create " ANTLR XEmacs bug workaround"))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1077 (buffer-syntactic-context-depth)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1078 nil)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1079 :EMACS
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1080 ;;; (incf antlr-statistics-inval)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1081 (setq antlr-slow-context-cache nil))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1082
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1083 (defunx antlr-syntactic-context ()
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1084 "Return some syntactic context information.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1085 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
1086 `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
1087 parenthesis-syntax delimiters at point otherwise.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1088 WARNING: this may alter `match-data'."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1089 :XEMACS
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1090 (or (buffer-syntactic-context) (buffer-syntactic-context-depth))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1091 :EMACS
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1092 (let ((orig (point)) diff state
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1093 ;; Arg, Emacs' (buffer-modified-tick) changes with font-lock. Use
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1094 ;; hack that `loudly' is bound during font-locking => cache use will
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1095 ;; increase from 7% to 99.99% during font-locking.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1096 (tick (or (boundp antlr-slow-cache-enabling-symbol)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1097 (buffer-modified-tick))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1098 (if (and (cdr antlr-slow-context-cache)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1099 (>= (setq diff (- orig (cadr antlr-slow-context-cache))) 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1100 (< diff antlr-slow-cache-diff-threshold)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1101 (eq (current-buffer) (caar antlr-slow-context-cache))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1102 (eq tick (cdar antlr-slow-context-cache)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1103 ;; (setq antlr-statistics-cache (1+ antlr-statistics-cache) ...)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1104 (setq state (parse-partial-sexp (cadr antlr-slow-context-cache) orig
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1105 nil nil
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1106 (cddr antlr-slow-context-cache)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1107 (if (>= orig antlr-slow-cache-diff-threshold)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1108 (beginning-of-defun)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1109 (goto-char (point-min)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1110 ;;; (cond ((and diff (< diff 0)) (incf antlr-statistics-full-neg))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1111 ;;; ((and diff (>= diff 3000)) (incf antlr-statistics-full-diff))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1112 ;;; (t (incf antlr-statistics-full-other)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1113 (setq state (parse-partial-sexp (point) orig)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1114 (goto-char orig)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1115 (if antlr-slow-context-cache
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1116 (setcdr antlr-slow-context-cache (cons orig state))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1117 (setq antlr-slow-context-cache
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1118 (cons (cons (current-buffer) tick)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1119 (cons orig state))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1120 (cond ((nth 3 state) 'string)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1121 ((nth 4 state) 'comment) ; block-comment? -- we don't care
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1122 (t (car state)))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1123
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1124 ;;; (incf (aref antlr-statistics 2))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1125 ;;; (unless (and (eq (current-buffer)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1126 ;;; (caar antlr-slow-context-cache))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1127 ;;; (eq (buffer-modified-tick)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1128 ;;; (cdar antlr-slow-context-cache)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1129 ;;; (incf (aref antlr-statistics 1))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1130 ;;; (setq antlr-slow-context-cache nil))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1131 ;;; (let* ((orig (point))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1132 ;;; (base (cadr antlr-slow-context-cache))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1133 ;;; (curr (cddr antlr-slow-context-cache))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1134 ;;; (state (cond ((eq orig (car curr)) (cdr curr))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1135 ;;; ((eq orig (car base)) (cdr base))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1136 ;;; diff diff2)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1137 ;;; (unless state
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1138 ;;; (incf (aref antlr-statistics 3))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1139 ;;; (when curr
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1140 ;;; (if (< (setq diff (abs (- orig (car curr))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1141 ;;; (setq diff2 (abs (- orig (car base)))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1142 ;;; (setq state curr)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1143 ;;; (setq state base
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1144 ;;; diff diff2))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1145 ;;; (if (or (>= (1+ diff) (point)) (>= diff 3000))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1146 ;;; (setq state nil))) ; start from bod/bob
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1147 ;;; (if state
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1148 ;;; (setq state
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1149 ;;; (parse-partial-sexp (car state) orig nil nil (cdr state)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1150 ;;; (if (>= orig 3000) (beginning-of-defun) (goto-char (point-min)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1151 ;;; (incf (aref antlr-statistics 4))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1152 ;;; (setq cw (list orig (point) base curr))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1153 ;;; (setq state (parse-partial-sexp (point) orig)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1154 ;;; (goto-char orig)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1155 ;;; (if antlr-slow-context-cache
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1156 ;;; (setcdr (cdr antlr-slow-context-cache) (cons orig state))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1157 ;;; (setq antlr-slow-context-cache
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1158 ;;; (cons (cons (current-buffer) (buffer-modified-tick))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1159 ;;; (cons (cons orig state) (cons orig state))))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1160 ;;; (cond ((nth 3 state) 'string)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1161 ;;; ((nth 4 state) 'comment) ; block-comment? -- we don't care
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1162 ;;; (t (car state)))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1163
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1164 ;;; (beginning-of-defun)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1165 ;;; (let ((state (parse-partial-sexp (point) orig)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1166 ;;; (goto-char orig)
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))))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1170
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1171
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1172 ;;;===========================================================================
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1173 ;;; Miscellaneous functions
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1174 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1175
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1176 (defun antlr-upcase-p (char)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1177 "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
1178 ;; in XEmacs, upcase only works for ASCII
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1179 (or (and (<= ?A char) (<= char ?Z))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1180 (and (<= ?\300 char) (<= char ?\337)))) ; ?\327 is no letter
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 (defun antlr-re-search-forward (regexp bound)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1183 "Search forward from point for regular expression REGEXP.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1184 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
1185 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
1186 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
1187 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
1188 and `replace-match'."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1189 ;; 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
1190 (let ((continue t))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1191 (while (and (re-search-forward regexp bound 'limit)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1192 (save-match-data
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1193 (if (eq (antlr-syntactic-context) 0)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1194 (setq continue nil)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1195 t))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1196 (if continue nil (point))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1197
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1198 (defun antlr-search-forward (string)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1199 "Search forward from point for STRING.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1200 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
1201 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
1202 and actions/semantic predicates."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1203 ;; 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
1204 (let ((continue t))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1205 (while (and (search-forward string nil 'limit)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1206 (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
1207 (if continue nil (point))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1208
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1209 (defun antlr-search-backward (string)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1210 "Search backward from point for STRING.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1211 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
1212 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
1213 strings and actions/semantic predicates."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1214 ;; 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
1215 (let ((continue t))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1216 (while (and (search-backward string nil 'limit)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1217 (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
1218 (if continue nil (point))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1219
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1220 (defsubst antlr-skip-sexps (count)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1221 "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
1222 Return position before the comments after the last expression."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1223 (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
1224 (prog1 (point)
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1225 (antlr-c-forward-sws)))
26542
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
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1228 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1229 ;;; font-lock
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1230 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1231
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1232 (defun antlr-font-lock-keywords ()
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1233 "Return font-lock keywords for current buffer.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1234 See `antlr-font-lock-additional-keywords', `antlr-language' and
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1235 `antlr-font-lock-maximum-decoration'."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1236 (if (eq antlr-font-lock-maximum-decoration 'none)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1237 antlr-font-lock-additional-keywords
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1238 (append antlr-font-lock-additional-keywords
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1239 (eval (let ((major-mode antlr-language)) ; dynamic
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1240 (font-lock-choose-keywords
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1241 (cdr (assq antlr-language
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1242 antlr-font-lock-keywords-alist))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1243 (if (eq antlr-font-lock-maximum-decoration 'inherit)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1244 font-lock-maximum-decoration
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1245 antlr-font-lock-maximum-decoration)))))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1246
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1247
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1248 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1249 ;;; imenu support
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1250 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1251
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1252 (defun antlr-grammar-tokens ()
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1253 "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
1254 (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
1255
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1256 (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
1257 "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
1258 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
1259 (let ((items nil)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1260 (classes nil)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1261 (continue t))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1262 ;; Using `imenu-progress-message' would require imenu for compilation, but
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1263 ;; nobody is missing these messages. The generic imenu function searches
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1264 ;; 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
1265 (antlr-with-syntax-table antlr-action-syntax-table
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1266 (antlr-invalidate-context-cache)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1267 (goto-char (point-min))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1268 (antlr-skip-file-prelude t)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1269 (while continue
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1270 (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
1271 (if (looking-at antlr-class-header-regexp)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1272 (or tokenrefs-only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1273 (push (cons (match-string 2)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1274 (if imenu-use-markers
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1275 (copy-marker (match-beginning 2))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1276 (match-beginning 2)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1277 classes))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1278 (if (looking-at "p\\(ublic\\|rotected\\|rivate\\)")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1279 (antlr-skip-sexps 1))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1280 (when (looking-at "\\sw+")
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1281 (if tokenrefs-only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1282 (if (antlr-upcase-p (char-after (point)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1283 (push (list (match-string 0)) items))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1284 (push (cons (match-string 0)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1285 (if imenu-use-markers
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1286 (copy-marker (match-beginning 0))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1287 (match-beginning 0)))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1288 items))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1289 (if (setq continue (antlr-search-forward ";"))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1290 (antlr-skip-exception-part t))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1291 (if classes
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1292 (cons (cons "Classes" (nreverse classes)) (nreverse items))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1293 (nreverse items))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1294
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1295
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1296 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1297 ;;; Parse grammar files (internal functions)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1298 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1299
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1300 (defun antlr-skip-exception-part (skip-comment)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1301 "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
1302 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
1303 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
1304 part."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1305 (let ((pos (point))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1306 (class nil))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1307 (antlr-c-forward-sws)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1308 (while (looking-at "options\\>\\|tokens\\>")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1309 (setq class t)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1310 (setq pos (antlr-skip-sexps 2)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1311 (if class
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1312 ;; 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
1313 ;; 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
1314 ;; 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
1315 (if (looking-at "{") (setq pos (antlr-skip-sexps 1)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1316 (while (looking-at "exception\\>")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1317 (setq pos (antlr-skip-sexps 1))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1318 (when (looking-at "\\[")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1319 (setq pos (antlr-skip-sexps 1)))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1320 (while (looking-at "catch\\>")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1321 (setq pos (antlr-skip-sexps 3)))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1322 (or skip-comment (goto-char pos))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1323
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1324 (defun antlr-skip-file-prelude (skip-comment)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1325 "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
1326 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
1327 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
1328
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1329 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
1330 position before the comment after the header."
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1331 (let* ((pos (point))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1332 (pos0 pos))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1333 (antlr-c-forward-sws)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1334 (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
1335 (while (looking-at "header\\>[ \t]*\\(\"\\)?")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1336 (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
1337 (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
1338 pos
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1339 (when (looking-at "options\\>")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1340 (setq pos (antlr-skip-sexps 2)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1341 (or skip-comment (goto-char pos))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1342 pos0)))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1343
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1344 (defun antlr-next-rule (arg skip-comment)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1345 "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
1346 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
1347 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
1348 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
1349 is non-nil, move to beginning of the rule."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1350 ;; 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
1351 ;; PRE: ARG<>0
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1352 (let ((pos (point))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1353 (beg (point)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1354 ;; first look whether point is in exception part
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1355 (if (antlr-search-backward ";")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1356 (progn
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1357 (setq beg (point))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1358 (forward-char)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1359 (antlr-skip-exception-part skip-comment))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1360 (antlr-skip-file-prelude skip-comment))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1361 (if (< arg 0)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1362 (unless (and (< (point) pos) (zerop (incf arg)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1363 ;; 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
1364 (goto-char beg) ; rewind (to ";" / point)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1365 (while (and arg (<= (incf arg) 0))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1366 (if (antlr-search-backward ";")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1367 (setq beg (point))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1368 (when (>= arg -1)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1369 ;; try file prelude:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1370 (setq pos (antlr-skip-file-prelude skip-comment))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1371 (if (zerop arg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1372 (if (>= (point) beg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1373 (goto-char (if (>= pos beg) (point-min) pos)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1374 (goto-char (if (or (>= (point) beg) (= (point) pos))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1375 (point-min) pos))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1376 (setq arg nil)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1377 (when arg ; always found a ";"
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1378 (forward-char)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1379 (antlr-skip-exception-part skip-comment)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1380 (if (<= (point) pos) ; moved backward?
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1381 (goto-char pos) ; rewind
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1382 (decf arg)) ; already moved one defun forward
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1383 (unless (zerop arg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1384 (while (>= (decf arg) 0)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1385 (antlr-search-forward ";"))
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
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1388 (defun antlr-outside-rule-p ()
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1389 "Non-nil if point is outside a grammar rule.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1390 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
1391 ;; 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
1392 (let ((pos (point)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1393 (antlr-next-rule -1 nil)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1394 (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
1395 (antlr-c-forward-sws)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1396 (and between (> (point) pos) (goto-char pos)))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1397
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1398
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1399 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1400 ;;; Parse grammar files (commands)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1401 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1402 ;; No (interactive "_") in Emacs... use `zmacs-region-stays'.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1403
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1404 (defun antlr-inside-rule-p ()
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1405 "Non-nil if point is inside a grammar rule.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1406 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
1407 rule."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1408 (save-excursion
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1409 (antlr-with-syntax-table antlr-action-syntax-table
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1410 (not (antlr-outside-rule-p)))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1411
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1412 (defunx antlr-end-of-rule (&optional arg)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1413 "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
1414 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
1415 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
1416 rule. If ARG is zero, run `antlr-end-of-body'."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1417 (interactive "_p")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1418 (if (zerop arg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1419 (antlr-end-of-body)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1420 (antlr-with-syntax-table antlr-action-syntax-table
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1421 (antlr-next-rule arg nil))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1422
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1423 (defunx antlr-beginning-of-rule (&optional arg)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1424 "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
1425 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
1426 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
1427 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
1428 (interactive "_p")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1429 (if (zerop arg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1430 (antlr-beginning-of-body)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1431 (antlr-with-syntax-table antlr-action-syntax-table
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1432 (antlr-next-rule (- arg) t))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1433
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1434 (defunx antlr-end-of-body (&optional msg)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1435 "Move to position after the `;' of the current rule.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1436 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
1437 prefix arg MSG, move to `:'."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1438 (interactive "_")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1439 (antlr-with-syntax-table antlr-action-syntax-table
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1440 (let ((orig (point)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1441 (if (antlr-outside-rule-p)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1442 (error "Outside an ANTLR rule"))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1443 (let ((bor (point)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1444 (when (< (antlr-skip-file-prelude t) (point))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1445 ;; Yes, we are in the file prelude
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1446 (goto-char orig)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1447 (error (or msg "The file prelude is without `;'")))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1448 (antlr-search-forward ";")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1449 (when msg
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1450 (when (< (point)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1451 (progn (goto-char bor)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1452 (or (antlr-search-forward ":") (point-max))))
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 msg))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1455 (antlr-c-forward-sws))))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1456
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1457 (defunx antlr-beginning-of-body ()
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1458 "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
1459 (interactive "_")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1460 (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
1461
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1462
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1463 ;;;===========================================================================
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1464 ;;; Literal normalization, Hide Actions
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1465 ;;;===========================================================================
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1466
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1467 (defun antlr-downcase-literals (&optional transform)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1468 "Convert all literals in buffer to lower case.
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1469 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
1470 (interactive)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1471 (or transform (setq transform 'downcase-region))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1472 (let ((literals 0))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1473 (save-excursion
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1474 (goto-char (point-min))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1475 (antlr-with-syntax-table antlr-action-syntax-table
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1476 (antlr-invalidate-context-cache)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1477 (while (antlr-re-search-forward "\"\\(\\sw\\(\\sw\\|-\\)*\\)\"" nil)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1478 (funcall transform (match-beginning 0) (match-end 0))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1479 (incf literals))))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1480 (message "Transformed %d literals" literals)))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1481
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1482 (defun antlr-upcase-literals ()
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1483 "Convert all literals in buffer to upper case."
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1484 (interactive)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1485 (antlr-downcase-literals 'upcase-region))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1486
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1487 (defun antlr-hide-actions (arg &optional silent)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1488 "Hide or unhide all actions in buffer.
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1489 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
1490 called interactively without prefix argument. Hide all actions
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1491 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
1492 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
1493
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1494 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
1495 (interactive "p")
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1496 (save-buffer-state-x
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1497 (if (> arg 0)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1498 (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
1499 (diff (and antlr-action-visibility
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1500 (+ (max antlr-action-visibility 0) 2))))
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1501 (antlr-hide-actions 0 t)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1502 (save-excursion
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1503 (goto-char (point-min))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1504 (antlr-with-syntax-table antlr-action-syntax-table
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1505 (antlr-invalidate-context-cache)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1506 (while (antlr-re-search-forward regexp nil)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1507 (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
1508 (when beg
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1509 (if diff ; braces are visible
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1510 (if (> (point) (+ beg diff))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1511 (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
1512 '(invisible t intangible t)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1513 ;; 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
1514 (and (looking-at "[ \t]*$")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1515 (save-excursion
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1516 (goto-char beg)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1517 (skip-chars-backward " \t")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1518 (and (bolp) (setq beg (point))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1519 (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
1520 (add-text-properties beg (point)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1521 '(invisible t intangible t))))))))
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1522 (or silent
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1523 (message "Hide all actions (%s arguments)...done"
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1524 (if (= arg 1) "including" "excluding"))))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1525 (remove-text-properties (point-min) (point-max)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1526 '(invisible nil intangible nil))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1527 (or silent
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1528 (message "Unhide all actions (including arguments)...done")))))
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1529
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1530
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1531 ;;;===========================================================================
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1532 ;;; Insert option: command
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1533 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1534
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1535 (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
1536 "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
1537 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
1538 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
1539 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
1540
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1541 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
1542
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1543 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
1544 argument or automatically deduced without prefix argument.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1545 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
1546 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
1547 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
1548 point outside a subrule/rule.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1549 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
1550 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
1551 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
1552 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
1553 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
1554 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
1555 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
1556 - 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
1557 - 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
1558 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
1559 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
1560 according to a newly inserted language option.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1561
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1562 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
1563 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
1564 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
1565 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
1566 will offer completion using version-correct values.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1567
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1568 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
1569 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
1570 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
1571
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1572 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
1573
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1574 * 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
1575 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
1576 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
1577 * 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
1578 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
1579 beginning.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1580 * 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
1581 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
1582 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
1583 after the comments.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1584
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1585 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
1586 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
1587
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1588 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
1589 `antlr-options-push-mark'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1590 (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
1591 (barf-if-buffer-read-only)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1592 (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
1593 (cond ((null level)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1594 (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
1595 ((atom location)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1596 (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
1597 (elt antlr-options-headings (1- level)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1598 (let ((area (car location))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1599 (place (cdr location)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1600 (cond ((null place) ; invisible
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1601 (error (if area
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1602 "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
1603 "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
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 (substitute-command-keys "\\[widen]")))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1606 ((null area) ; without option part
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1607 (antlr-insert-option-do level option nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1608 (null (cdr place))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1609 (car place)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1610 ((save-excursion ; with option part, option visible
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1611 (goto-char (max (point-min) (car area)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1612 (re-search-forward (concat "\\(^\\|;\\)[ \t]*\\(\\<"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1613 (regexp-quote option)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1614 "\\>\\)[ \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
1615 ;; 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
1616 (min (point-max) (cdr area))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1617 t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1618 (antlr-insert-option-do level option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1619 (cons (or (match-beginning 5)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1620 (match-beginning 3))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1621 (match-end 5))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1622 (and (null (cdr place)) area)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1623 (or (match-beginning 5)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1624 (match-end 4)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1625 (match-end 2))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1626 (t ; with option part, option not yet
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1627 (antlr-insert-option-do level option t
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1628 (and (null (cdr place)) area)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1629 (car place))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1630
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1631 (defun antlr-insert-option-interactive (arg)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1632 "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
1633 Return \(LEVEL OPTION LOCATION)."
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1634 (barf-if-buffer-read-only)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1635 (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
1636 (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
1637 (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
1638 (let* ((kind (antlr-option-kind arg))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1639 (level (car kind)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1640 (if (atom (cdr kind))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1641 (list level nil (cdr kind))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1642 (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
1643 (completion-ignore-case t) ;dynamic
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1644 (input (completing-read (format "Insert %s option: "
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1645 (elt antlr-options-headings
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1646 (1- level)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1647 table)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1648 (list level input (cdr kind))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1649
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1650 (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
1651 "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
1652 ;; checkdoc-params: (menu-items)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1653 (let ((active (if buffer-read-only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1654 nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1655 (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
1656 (mapcar (lambda (option)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1657 (vector option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1658 (list 'antlr-insert-option level option)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1659 :active active))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1660 (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
1661 'string-lessp))))
75228
d1295af1285f (antlr-indent-at-bol-alist): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 70180
diff changeset
1662
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1663
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1664 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1665 ;;; Insert option: determine section-kind
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1666 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1667
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1668 (defun antlr-option-kind (requested)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1669 "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
1670 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
1671 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
1672 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
1673 like \(AREA \. PLACE), see `antlr-option-location'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1674 (save-excursion
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1675 (save-restriction
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1676 (let ((min0 (point-min)) ; before `widen'!
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1677 (max0 (point-max))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1678 (orig (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1679 (level (antlr-option-level requested)) ; calls `widen'!
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1680 pos)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1681 (cond ((null level)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1682 (setq level requested))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1683 ((eq level 1) ; file options
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1684 (goto-char (point-min))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1685 (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
1686 ((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
1687 (setq pos (point))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1688 (antlr-c-forward-sws))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1689 ((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
1690 ;; rule options, with complete rule header
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1691 (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
1692 (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
1693 (when (looking-at "returns[ \t\n]*\\[")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1694 (goto-char (1- (match-end 0)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1695 (setq pos (antlr-skip-sexps 1)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1696 (cons level
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1697 (cond ((null pos) 'error)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1698 ((looking-at "options[ \t\n]*{")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1699 (goto-char (match-end 0))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1700 (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
1701 (antlr-option-location orig min0 max0
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1702 (point)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1703 (if pos (1- pos) (point-max))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1704 t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1705 (t
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1706 (antlr-option-location orig min0 max0
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1707 pos (point)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1708 nil))))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1709
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1710 (defun antlr-option-level (requested)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1711 "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
1712 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
1713 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
1714 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
1715 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
1716 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
1717
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1718 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
1719 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
1720 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
1721 is undefined."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1722 (widen)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1723 (if (eq requested 1)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1724 1
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1725 (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
1726 (antlr-invalidate-context-cache)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1727 (let* ((orig (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1728 (outsidep (antlr-outside-rule-p))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1729 bor depth)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1730 (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
1731 (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
1732 (cond ((eq requested 2) ; grammar options required?
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1733 (let (boc) ; beginning of class
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1734 (goto-char (point-min))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1735 (while (and (<= (point) bor)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1736 (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
1737 nil))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1738 (if (<= (match-beginning 0) bor)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1739 (setq boc (match-end 0))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1740 (when boc
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1741 (goto-char boc)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1742 2)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1743 ((save-excursion ; in region of file options?
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1744 (goto-char (point-min))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1745 (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
1746 (< orig (point)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1747 (and (null requested) 1))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1748 (outsidep ; outside rule not OK
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1749 nil)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1750 ((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
1751 (goto-char (match-end 0))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1752 (and (null requested) 2))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1753 ((eq requested 3) ; rule options required?
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1754 (goto-char bor)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1755 3)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1756 ((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
1757 (if (> depth 0) ; move out of actions
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1758 (goto-char (scan-lists (point) -1 depth)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1759 (set-syntax-table antlr-mode-syntax-table)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1760 (antlr-invalidate-context-cache)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1761 (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
1762 (unless (eq requested 4)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1763 (goto-char bor)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1764 3)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1765 (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
1766 4)))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1767
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1768 (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
1769 "Return location for the options area.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1770 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
1771 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
1772 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
1773 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
1774 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
1775
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1776 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
1777 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
1778 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
1779 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
1780 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
1781 non-nil."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1782 (cons (and withp (cons min-area max-area))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1783 (cond ((and (<= min-area orig) (<= orig max-area)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1784 (save-excursion
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1785 (goto-char orig)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1786 (not (memq (antlr-syntactic-context)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1787 '(comment block-comment)))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1788 ;; 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
1789 (list orig))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1790 ((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
1791 ;; 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
1792 (cons min-area 'beginning))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1793 ((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
1794 ;; use end of options area
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1795 (cons max-area 'end))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1796 ((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
1797 ;; 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
1798 (cons min-area 'beginning)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1799
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1800 (defun antlr-syntactic-grammar-depth (pos beg)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1801 "Return syntactic context depth at POS.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1802 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
1803 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
1804 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
1805 WARNING: this may alter `match-data'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1806 (goto-char pos)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1807 (let ((context (or (antlr-syntactic-context) 0)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1808 (while (and context (not (integerp context)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1809 (cond ((eq context 'string)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1810 (setq context
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1811 (and (search-backward "\"" nil t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1812 (>= (point) beg)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1813 (or (antlr-syntactic-context) 0))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1814 ((memq context '(comment block-comment))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1815 (setq context
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1816 (and (re-search-backward "/[/*]" nil t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1817 (>= (point) beg)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1818 (or (antlr-syntactic-context) 0))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1819 context))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1820
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1821
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1822 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1823 ;;; Insert options: do the insertion
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1824 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1825
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1826 (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
1827 "Insert option into buffer at position POS.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1828 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
1829 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
1830 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
1831 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
1832 the option value or nil.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1833
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1834 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
1835 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
1836 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
1837 (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
1838 (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
1839 (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
1840 ;; 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
1841 (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
1842 ((numberp antlr-options-push-mark)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1843 (> (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
1844 antlr-options-push-mark))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1845 (antlr-options-push-mark))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1846 (push-mark))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1847 ;; read option value -----------------------------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1848 (goto-char pos)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1849 (if (null value)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1850 ;; no option specification found
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1851 (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
1852 (elt antlr-options-headings (1- level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1853 option))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1854 (message "Insert value for %s option %s"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1855 (elt antlr-options-headings (1- level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1856 option)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1857 (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
1858 (elt antlr-options-headings (1- level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1859 option))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1860 ;; option specification found
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1861 (setq value (cdr value))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1862 (if (car value)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1863 (let ((initial (and (consp old) (cdr old)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1864 (buffer-substring (car old) (cdr old)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1865 (setq value (apply (car value)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1866 (and initial
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1867 (if (eq (aref initial 0) ?\")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1868 (read initial)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1869 initial))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1870 (cdr value))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1871 (message (cadr value))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1872 (setq value nil)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1873 ;; insert value ----------------------------------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1874 (if (consp old)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1875 (antlr-insert-option-existing old value)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1876 (if (consp area)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1877 ;; 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
1878 (antlr-syntactic-grammar-depth (point) (car area)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1879 (antlr-insert-option-space area old)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1880 (or old (antlr-insert-option-area level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1881 (insert option " = ;")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1882 (backward-char)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1883 (if value (insert value)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1884 ;; final -----------------------------------------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1885 (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
1886
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1887 (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
1888 "Return version correct option value specification.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1889 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
1890 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
1891 EXISTSP determines whether the option already exists."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1892 (let (value)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1893 (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
1894 (setq value (pop specs)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1895 (cond (value) ; found correct spec
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1896 ((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
1897 (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
1898 ((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
1899 (antlr-version-string (caar specs))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1900 (elt antlr-options-headings (1- level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1901 option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1902 (antlr-version-string antlr-tool-version)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1903 (car specs))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1904 (t
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1905 (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
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
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1911 (defun antlr-version-string (version)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1912 "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
1913 (let ((version100 (/ version 100)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1914 (format "%d.%d.%d"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1915 (/ 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
1916
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 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1919 ;;; 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
1920 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1921
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1922 (defun antlr-insert-option-existing (old value)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1923 "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
1924 For OLD, see `antlr-insert-option-do'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1925 ;; no = => insert =
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1926 (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
1927 ;; with user input => insert if necessary
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1928 (when value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1929 (if (cdr old) ; with value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1930 (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
1931 (goto-char (cdr old))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1932 (delete-region (car old) (cdr old))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1933 (insert value))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1934 (insert value)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1935 (unless (looking-at "\\([^\n=;{}/'\"]\\|'\\([^\n'\\]\\|\\\\.\\)*'\\|\"\\([^\n\"\\]\\|\\\\.\\)*\"\\)*;")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1936 ;; 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
1937 (insert ";")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1938 (backward-char)))
75228
d1295af1285f (antlr-indent-at-bol-alist): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 70180
diff changeset
1939
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1940 (defun antlr-insert-option-space (area old)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1941 "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
1942 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
1943 (let ((orig (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1944 (open t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1945 (skip-chars-backward " \t")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1946 (unless (bolp)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1947 (let ((before (char-after (1- (point)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1948 (goto-char orig)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1949 (and old ; with existing options area
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1950 (consp area) ; if point inside existing area
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1951 (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
1952 ; => skip to end of option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1953 (if (and (search-forward ";" (cdr area) t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1954 (let ((context (antlr-syntactic-context)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1955 (or (null context) (numberp context))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1956 (setq orig (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1957 (goto-char orig)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1958 (skip-chars-forward " \t")
75228
d1295af1285f (antlr-indent-at-bol-alist): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 70180
diff changeset
1959
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1960 (if (looking-at "$\\|//")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1961 ;; 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
1962 (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
1963 (current-column))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1964 (beginning-of-line 2)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1965 (or (bolp) (insert "\n"))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1966 (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
1967 (while (and (looking-at "[ \t]*\\(//\\)")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1968 (goto-char (match-beginning 1))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1969 (= (current-column) same))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1970 (beginning-of-line 2)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1971 (or (bolp) (insert "\n")))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1972 (goto-char orig)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1973 (if (null old)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1974 (progn (insert "\n") (antlr-indent-line))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1975 (unless (eq (char-after (1- (point))) ?\ )
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1976 (insert " "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1977 (unless (eq (char-after (point)) ?\ )
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1978 (insert " ")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1979 (backward-char))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1980 (setq open nil)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1981 (when open
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1982 (beginning-of-line 1)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1983 (insert "\n")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1984 (backward-char)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1985 (antlr-indent-line))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1986
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1987 (defun antlr-insert-option-area (level)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1988 "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
1989 Used by `antlr-insert-option-do'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1990 (insert "options {\n\n}")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1991 (when (and antlr-options-auto-colon
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1992 (memq level '(3 4))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1993 (save-excursion
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1994 (antlr-c-forward-sws)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1995 (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
1996 (not (eq (char-after (point)) ?\:))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1997 (insert "\n:")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1998 (antlr-indent-line)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1999 (end-of-line 0))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2000 (backward-char 1)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2001 (antlr-indent-line)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2002 (beginning-of-line 0)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2003 (antlr-indent-line))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2004
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2005
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2006 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2007 ;;; Insert options: in `antlr-options-alists'
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2008 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2009
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2010 (defun antlr-read-value (initial-contents prompt
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2011 &optional as-string table table-x)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2012 "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
2013 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
2014 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
2015 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
2016 `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
2017 otherwise return the user input directly.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2018
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2019 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
2020 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
2021 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
2022
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2023 Used inside `antlr-options-alists'."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2024 (let* ((completion-ignore-case t) ; dynamic
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2025 (table0 (and (or table table-x)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2026 (append table-x
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2027 (if (functionp table) (funcall table) table))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2028 (input (if table0
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2029 (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
2030 (read-from-minibuffer prompt initial-contents))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2031 (if (and as-string
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2032 (or (eq as-string t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2033 (cdr (assq as-string antlr-options-style))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2034 (format "%S" input)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2035 input)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2036
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2037 (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
2038 "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
2039 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
2040 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
2041 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
2042
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2043 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
2044 also `antlr-read-value'.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2045
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2046 Used inside `antlr-options-alists'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2047 (antlr-read-value initial-contents
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2048 (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
2049 nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2050 table '(("false") ("true"))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2051
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2052 (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
2053 ;; checkdoc-params: (dummies)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2054 "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
2055 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
2056 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
2057
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2058 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
2059 (when (eq phase 'after-insertion)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2060 (let ((new-language (antlr-language-option t)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2061 (or (null new-language)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2062 (eq new-language antlr-language)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2063 (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
2064 (if font-lock (font-lock-mode 0))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2065 (antlr-mode)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2066 (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
2067
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2068 (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
2069 ;; checkdoc-params: (option dummies)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2070 "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
2071 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
2072 `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
2073
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2074 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
2075 (and (eq phase 'before-input)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2076 (not (eq antlr-language 'c++-mode))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2077 (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
2078 (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
2079 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
2080
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2081
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2082 ;;;===========================================================================
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2083 ;;; Compute dependencies
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2084 ;;;===========================================================================
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2085
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2086 (defun antlr-file-dependencies ()
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2087 "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
2088 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
2089 where CLASSES = ((CLASS . CLASS-EVOCAB) ...),
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2090 SUPERS = ((SUPER . USE-EVOCAB-P) ...), and
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2091 VOCABS = ((EVOCAB ...) . (IVOCAB ...))
34011
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 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
2094 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
2095 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
2096
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2097 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
2098 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
2099 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
2100 (unless buffer-file-name
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2101 (error "Grammar buffer does not visit a file"))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2102 (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
2103 (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
2104 (goto-char (point-min))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2105 (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
2106 ;; parse class definition --------------------------------------------
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2107 (let* ((class (match-string 2))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2108 (sclass (match-string 4))
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2109 ;; 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
2110 ;; 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
2111 (evocab (or default-vocab class))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2112 (ivocab nil))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2113 (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
2114 (antlr-c-forward-sws)
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2115 (while (looking-at "options\\>\\|\\(tokens\\)\\>")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2116 (if (match-beginning 1)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2117 (antlr-skip-sexps 2)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2118 (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
2119 (antlr-c-forward-sws)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2120 ;; parse grammar option sections -------------------------------
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2121 (when (eq (char-after (point)) ?\{)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2122 (let* ((beg (1+ (point)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2123 (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
2124 (cont (point)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2125 (goto-char beg)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2126 (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
2127 (setq evocab (match-string 1)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2128 (goto-char beg)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2129 (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
2130 (setq ivocab (match-string 1)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2131 (goto-char cont)))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2132 (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
2133 (let ((super (assoc sclass superclasses)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2134 (if super
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2135 (or ivocab (setcdr super t))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2136 (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
2137 ;; remember class with export vocabulary:
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2138 (push (cons class evocab) classes)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2139 ;; 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
2140 (or default-vocab (setq default-vocab evocab))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2141 (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
2142 (or (null ivocab)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2143 (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
2144 (if classes
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2145 (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
2146 (cons (nreverse classes) (nreverse superclasses))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2147 (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
2148 antlr-language))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2149
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2150 (defun antlr-directory-dependencies (dirname)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2151 "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
2152 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
2153 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
2154
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2155 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
2156 `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
2157 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
2158 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
2159 (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
2160 (when grammar
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2161 (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
2162 (generate-new-buffer-name " *temp*")))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2163 (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
2164 (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
2165 (cadr antlr-special-file-formats))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2166 ".+")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2167 "\\'"))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2168 classes dependencies)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2169 (unwind-protect
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2170 (save-excursion
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2171 (set-buffer temp-buffer)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2172 (widen) ; just in case...
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2173 (dolist (file grammar)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2174 (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
2175 (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
2176 (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
2177 (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
2178 ; table and `antlr-language'
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2179 (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
2180 (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
2181 (file (car file-deps)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2182 (when file-deps
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2183 (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
2184 (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
2185 (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
2186 (if class-spec
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2187 (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
2188 (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
2189 classes))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2190 (push file-deps dependencies)))))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2191 (kill-buffer temp-buffer))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2192 (cons (nreverse classes) (nreverse dependencies))))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2193
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2194
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2195 ;;;===========================================================================
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2196 ;;; Compilation: run ANTLR tool
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2197 ;;;===========================================================================
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2198
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2199 (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
2200 "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
2201 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
2202 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
2203 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
2204
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2205 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
2206 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
2207 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
2208
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2209 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
2210 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
2211 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
2212 ;; 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
2213 ;; 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
2214 ;; 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
2215 (let (glibs unknown)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2216 (while supers
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2217 (let* ((super (pop supers))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2218 (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
2219 (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
2220 (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
2221 (push (cons (or (car file)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2222 (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
2223 (car super)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2224 (and (cdr super)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2225 (or (cdr file)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2226 (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
2227 (car super)))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2228 glibs)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2229 (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
2230 (cons unknown glibs))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2231
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2232 (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
2233 "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
2234 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
2235 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
2236 necessary.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2237
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2238 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
2239 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
2240 `antlr-ask-about-save'."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2241 (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
2242 (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
2243 (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
2244 (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
2245 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
2246
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2247 (defun antlr-run-tool-interactive ()
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2248 ;; code in `interactive' is not compiled
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2249 "Interactive specification for `antlr-run-tool'.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2250 Use prefix argument ARG to return \(COMMAND FILE SAVED)."
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2251 (let* ((supers (cdadr (save-excursion
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2252 (save-restriction
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2253 (widen)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2254 (antlr-file-dependencies)))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2255 (glibs ""))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2256 (when supers
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2257 (save-some-buffers (not antlr-ask-about-save) nil)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2258 (setq glibs (car (antlr-superclasses-glibs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2259 supers
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2260 (car (antlr-directory-dependencies
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2261 (antlr-default-directory)))))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2262 (list (antlr-read-shell-command "Run Antlr on current file with: "
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2263 (concat antlr-tool-command glibs " "))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2264 buffer-file-name
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2265 supers)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2266
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2267
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2268 ;;;===========================================================================
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2269 ;;; Makefile creation
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2270 ;;;===========================================================================
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2271
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2272 (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
2273 "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
2274 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
2275 (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
2276 (when spec
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2277 (insert pre
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2278 (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
2279 post))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2280
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2281 (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
2282 "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
2283 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
2284 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
2285 (let* ((dirname (antlr-default-directory))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2286 (deps0 (antlr-directory-dependencies dirname))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2287 (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
2288 (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
2289 (with-error nil)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2290 (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
2291 (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
2292 (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
2293 (dolist (dep deps)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2294 (let ((supers (cdadr dep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2295 (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
2296 (if n (incf n))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2297 (antlr-makefile-insert-variable n "" " =")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2298 (if supers
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2299 (insert " "
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2300 (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
2301 (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
2302 (dolist (class-def (caadr dep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2303 (let ((sep gen-sep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2304 (dolist (class-file (cadr lang))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2305 (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
2306 (setq sep " "))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2307 (dolist (evocab (caaddr dep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2308 (let ((sep gen-sep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2309 (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
2310 (car lang)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2311 (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
2312 (setq sep " "))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2313 (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
2314 (insert ": " (car dep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2315 (dolist (ivocab (cdaddr dep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2316 (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
2317 (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
2318 (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
2319 (dolist (super (cddr glibs))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2320 (insert " " (car super))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2321 (if (cdr super)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2322 (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
2323 (cdr super)))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2324 (insert "\n\t"
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2325 (caddr antlr-makefile-specification)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2326 (car glibs)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2327 " $<\n"
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2328 (car antlr-makefile-specification)))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2329 (if n
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2330 (let ((i 0))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2331 (antlr-makefile-insert-variable nil "" " =")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2332 (while (<= (incf i) n)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2333 (antlr-makefile-insert-variable i " $(" ")"))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2334 (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
2335 (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
2336 (backward-delete-char 1))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2337 (when with-error
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2338 (goto-char (point-min))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2339 (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
2340 (unless in-makefile
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2341 (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
2342 (goto-char (point-min))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2343 (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
2344
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2345 ;;;###autoload
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2346 (defun antlr-show-makefile-rules ()
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2347 "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
2348 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
2349 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
2350 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
2351 \\[yank].
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2352
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2353 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
2354 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
2355 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
2356 the rules.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2357
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2358 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
2359 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
2360 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
2361 *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
2362 (interactive)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2363 (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
2364 (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
2365 (push-mark)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2366 (antlr-insert-makefile-rules t)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2367
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2368
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2369 ;;;===========================================================================
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2370 ;;; Indentation
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2371 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2372
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2373 (defun antlr-indent-line ()
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2374 "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
2375 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
2376 multiplied by:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2377 - the level of the paren/brace/bracket depth,
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2378 - 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
2379 exception part,
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2380 - 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
2381 line starting from the first non-whitespace.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2382
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2383 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
2384 `antlr-indent-comment'.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2385
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2386 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
2387 area are indented by `c-indent-line'.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2388
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2389 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
2390 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
2391 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
2392
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2393 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
2394 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
2395 (save-restriction
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2396 (let ((orig (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2397 (min0 (point-min))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2398 bol boi indent syntax cc-syntax)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2399 (widen)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2400 (beginning-of-line)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2401 (setq bol (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2402 (if (< bol min0)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2403 (error "Beginning of current line not visible"))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2404 (skip-chars-forward " \t")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2405 (setq boi (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2406 ;; check syntax at beginning of indentation ----------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2407 (antlr-with-syntax-table antlr-action-syntax-table
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
2408 (antlr-invalidate-context-cache)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2409 (setq syntax (antlr-syntactic-context))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2410 (cond ((symbolp syntax)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2411 (setq indent nil)) ; block-comments, strings, (comments)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2412 ((progn
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2413 (antlr-next-rule -1 t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2414 (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
2415 (setq indent 0)) ; in rule header
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2416 ((if (antlr-search-forward ";") (< boi (point)) t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2417 (setq indent 2)) ; in rule body
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2418 (t
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2419 (forward-char)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2420 (antlr-skip-exception-part nil)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2421 (setq indent (if (> (point) boi) 1 0))))) ; in exception part?
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2422 ;; check whether to use indentation engine of cc-mode ------------------
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2423 (antlr-invalidate-context-cache)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2424 (goto-char boi)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2425 (when (and indent (> syntax 0))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2426 (cond ((> syntax 1) ; block in action => use cc-mode
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2427 (setq indent nil))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2428 ((and (= indent 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2429 (assq antlr-language antlr-indent-at-bol-alist)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2430 (looking-at (cdr (assq antlr-language
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2431 antlr-indent-at-bol-alist))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2432 (setq syntax 'bol))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2433 ((setq cc-syntax (c-guess-basic-syntax))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2434 (let ((cc cc-syntax) symbol)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2435 (while (setq symbol (pop cc))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2436 (when (cdr symbol)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2437 (or (memq (car symbol)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2438 antlr-disabling-cc-syntactic-symbols)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2439 (setq indent nil))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2440 (setq cc nil)))))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2441 ;;; ((= indent 1) ; exception part => use cc-mode
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2442 ;;; (setq indent nil))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2443 ;;; ((save-restriction ; not in option part => cc-mode
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2444 ;;; (goto-char (scan-lists (point) -1 1))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2445 ;;; (skip-chars-backward " \t\n")
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2446 ;;; (narrow-to-region (point-min) (point))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2447 ;;; (not (re-search-backward "\\<options\\'" nil t)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2448 ;;; (setq indent nil)))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2449 ;; compute the corresponding indentation and indent --------------------
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2450 (if (null indent)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2451 ;; 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
2452 (progn
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2453 (goto-char orig)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2454 (if (or (numberp syntax)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2455 (if (eq syntax 'string) nil (eq antlr-indent-comment t)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2456 (c-indent-line cc-syntax)))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2457 ;; do it ourselves
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2458 (goto-char boi)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2459 (unless (symbolp syntax) ; direct indentation
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2460 ;;(antlr-invalidate-context-cache)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2461 (incf indent (antlr-syntactic-context))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2462 (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
2463 (setq indent (* indent c-basic-offset)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2464 ;; the usual major-mode indent stuff ---------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2465 (setq orig (- (point-max) orig))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2466 (unless (= (current-column) indent)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2467 (delete-region bol boi)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2468 (beginning-of-line)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2469 (indent-to indent))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2470 ;; 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
2471 ;; 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
2472 (if (> (- (point-max) orig) (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2473 (goto-char (- (point-max) orig)))))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2474
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2475 (defun antlr-indent-command (&optional arg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2476 "Indent the current line or insert tabs/spaces.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2477 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
2478 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
2479 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
2480 (interactive "*P")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2481 (if (or arg (eq last-command 'antlr-indent-command))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2482 (insert-tab arg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2483 (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
2484 (antlr-indent-line))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2485
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2486 (defun antlr-electric-character (&optional arg)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2487 "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
2488 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
2489 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
2490
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2491 * 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
2492 * 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
2493 beginning of the line, or
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2494 * 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
2495 actions.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2496
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2497 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
2498 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
2499 `antlr-indent-item-regexp'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2500 (interactive "*P")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2501 (if (or arg
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2502 (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
2503 (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
2504 (antlr-invalidate-context-cache)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2505 (let ((context (antlr-syntactic-context)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2506 (not (and (numberp context)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2507 (or (zerop context)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2508 (memq last-command-char '(?\{ ?\}))))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2509 (self-insert-command (prefix-numeric-value arg))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2510 (self-insert-command (prefix-numeric-value arg))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2511 (antlr-indent-line)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2512
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2513
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2514 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2515 ;;; Mode entry
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2516 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2517
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2518 (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
2519 "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
2520 (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
2521 (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
2522 (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
2523 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
2524 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
2525 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
2526 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
2527 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
2528 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
2529 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
2530 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
2531 ))
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2532 (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
2533 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
2534 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
2535 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
2536 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
2537 c-method-key nil
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2538 c-baseclass-key nil
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2539 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
2540 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
2541 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
2542 )))))
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2543 (while settings
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2544 (when (boundp (car settings))
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2545 (ignore-errors
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2546 (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
2547 (setq settings (cddr settings)))))
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2548
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2549 (defun antlr-language-option (search)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2550 "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
2551 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
2552 the default language."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2553 (let ((value (and search
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2554 (save-excursion
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2555 (goto-char (point-min))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2556 (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
2557 (car antlr-language-limit-n-regexp)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2558 t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2559 (match-string 1)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2560 (seq antlr-language-alist)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2561 r)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2562 ;; 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
2563 (while seq
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2564 (setq r (pop seq))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2565 (if (member value (cddr r))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2566 (setq seq nil) ; stop
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2567 (setq r nil))) ; no result yet
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2568 (car r)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2569
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2570 ;;;###autoload
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2571 (defun antlr-mode ()
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2572 "Major mode for editing ANTLR grammar files.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2573 \\{antlr-mode-map}"
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2574 (interactive)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2575 (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
2576 (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
2577 (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
2578 (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
2579 ;; ANTLR specific ----------------------------------------------------------
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2580 (setq major-mode 'antlr-mode
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2581 mode-name "Antlr")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2582 (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
2583 (unless antlr-mode-syntax-table
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2584 (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
2585 (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
2586 (set-syntax-table antlr-mode-syntax-table)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2587 (unless antlr-action-syntax-table
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2588 (let ((slist (nth 3 antlr-font-lock-defaults)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2589 (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
2590 (copy-syntax-table antlr-mode-syntax-table))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2591 (while slist
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2592 (modify-syntax-entry (caar slist) (cdar slist)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2593 antlr-action-syntax-table)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2594 (setq slist (cdr slist)))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2595 (use-local-map antlr-mode-map)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2596 (make-local-variable 'antlr-language)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2597 (unless antlr-language
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2598 (setq antlr-language
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2599 (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
2600 (if (stringp (cadr (assq antlr-language antlr-language-alist)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2601 (setq mode-name
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
2602 (concat "Antlr."
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2603 (cadr (assq antlr-language antlr-language-alist)))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2604 ;; 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
2605 (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
2606 (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
2607 (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
2608 ((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
2609 (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
2610 (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
2611 ((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
2612 (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
2613 (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
2614 (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
2615 (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
2616 (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
2617 (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
2618 (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
2619 (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
2620 (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
2621 (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
2622 (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
2623 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
2624 (setq require-final-newline mode-require-final-newline)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2625 (setq indent-line-function 'antlr-indent-line
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2626 indent-region-function nil) ; too lazy
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2627 (setq comment-start "// "
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2628 comment-end ""
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2629 comment-start-skip "/\\*+ *\\|// *")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2630 ;; various -----------------------------------------------------------------
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2631 (make-local-variable 'font-lock-defaults)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2632 (setq font-lock-defaults antlr-font-lock-defaults)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2633 (easy-menu-add antlr-mode-menu)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2634 (make-local-variable 'imenu-create-index-function)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2635 (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
2636 (make-local-variable 'imenu-generic-expression)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2637 (setq imenu-generic-expression t) ; fool stupid test
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2638 (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
2639 (fboundp 'imenu-add-to-menubar)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2640 (imenu-add-to-menubar
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2641 (if (stringp antlr-imenu-name) antlr-imenu-name "Index")))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2642 (antlr-set-tabs)
62772
f2892faa87d4 * progmodes/ada-mode.el (ada-mode):
Lute Kamstra <lute@gnu.org>
parents: 62531
diff changeset
2643 (run-mode-hooks 'antlr-mode-hook))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2644
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2645 ;; 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
2646 ;; 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
2647 ;; 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
2648 (put 'antlr-mode 'mode-name "Antlr")
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
2649
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2650 ;;;###autoload
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2651 (defun antlr-set-tabs ()
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2652 "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
2653 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
2654 (if buffer-file-name
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2655 (let ((alist antlr-tab-offset-alist) elem)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2656 (while alist
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2657 (setq elem (pop alist))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2658 (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
2659 (or (null (cadr elem))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2660 (string-match (cadr elem) buffer-file-name))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2661 (setq tab-width (caddr elem)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2662 indent-tabs-mode (cadddr elem)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2663 alist nil))))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2664
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2665 ;;; Local IspellPersDict: .ispell_antlr
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49598
diff changeset
2666
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49598
diff changeset
2667 ;;; 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
2668 ;;; antlr-mode.el ends here