annotate lisp/progmodes/antlr-mode.el @ 53162:9ef6052ba695

*** empty log message ***
author Stephen Eglen <stephen@gnu.org>
date Tue, 25 Nov 2003 14:41:08 +0000
parents 51328ad3b6be
children af00346728dd
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
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
3 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
4 ;;
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
5 ;; 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
6 ;; Keywords: languages, ANTLR, code generator
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
7 ;; Version: (see `antlr-version' below)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
8 ;; X-URL: http://antlr-mode.sourceforge.net/
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
9
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
11
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
12 ;; 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
13 ;; it under the terms of the GNU General Public License as published by
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
15 ;; any later version.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
16
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
17 ;; 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
18 ;; 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
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
21
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
22 ;; 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
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
25 ;; Boston, MA 02111-1307, USA.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
26
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
27 ;;; Commentary:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
28
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
29 ;; The Emacs package ANTLR-Mode provides: syntax highlighting for ANTLR grammar
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
30 ;; files, automatic indentation, menus containing rule/token definitions and
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
31 ;; supported options and various other things like running ANTLR from within
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
32 ;; Emacs.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
33
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
34 ;; 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
35 ;; the manual style, follow all commands mentioned in the documentation of
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
36 ;; `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
37 ;; 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
38 ;; found at <http://www.antlr.org/>.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
39
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
40 ;; Bug fixes, bug reports, improvements, and suggestions for the newest version
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
41 ;; are strongly appreciated.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
42
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
43 ;; To-do/Wish-list:
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
44 ;;
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
45 ;; * 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
46 ;; and hyper-links (using htmlize).
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
47 ;; * 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
48 ;; 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
49 ;; * Next Version. Make hiding much more customizable.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
50 ;; * 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
51 ;; * 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
52 ;; definitions at beginning of grammar class.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
53 ;; * 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
54 ;;
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
55 ;; * 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
56 ;; 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
57 ;; 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
58 ;; * 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
59 ;; 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
60 ;; `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
61 ;; * 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
62 ;; 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
63 ;; 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
64 ;; 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
65 ;; * 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
66 ;; 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
67 ;; 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
68
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
69 ;;; Installation:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
70
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
71 ;; 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
72
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
73 ;; 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
74 ;; load-path and the following into your ~/.emacs:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
75 ;; (autoload 'antlr-mode "antlr-mode" nil t)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
76 ;; (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
77 ;; (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
78 ;; (lambda () (speedbar-add-supported-extension ".g")))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
79
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
80 ;; 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
81 ;; 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
82
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
83 ;; To customize, use menu item "Antlr" -> "Customize Antlr".
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
84
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
85 ;;; Code:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
86
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
87 (provide 'antlr-mode)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
88 (require 'easymenu)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
89
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
90 ;; General Emacs/XEmacs-compatibility compile-time macros
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
91 (eval-when-compile
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
92 (require 'cl)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
93 (defmacro cond-emacs-xemacs (&rest args)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49554
diff changeset
94 (cond-emacs-xemacs-macfn
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
95 args "`cond-emacs-xemacs' must return exactly one element"))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
96 (defun cond-emacs-xemacs-macfn (args &optional msg)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
97 (if (atom args) args
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
98 (and (eq (car args) :@) (null msg) ; (:@ ...spliced...)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
99 (setq args (cdr args)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
100 msg "(:@ ....) must return exactly one element"))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
101 (let ((ignore (if (string-match "XEmacs" emacs-version) :EMACS :XEMACS))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
102 (mode :BOTH) code)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
103 (while (consp args)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
104 (if (memq (car args) '(:EMACS :XEMACS :BOTH)) (setq mode (pop args)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
105 (if (atom args)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
106 (or args (error "Used selector %s without elements" mode))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
107 (or (eq ignore mode)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
108 (push (cond-emacs-xemacs-macfn (car args)) code))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
109 (pop args)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
110 (cond (msg (if (or args (cdr code)) (error msg) (car code)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
111 ((or (null args) (eq ignore mode)) (nreverse code))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
112 (t (nconc (nreverse code) args))))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
113 ;; Emacs/XEmacs-compatibility `defun': remove interactive "_" for Emacs, use
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
114 ;; existing functions when they are `fboundp', provide shortcuts if they are
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
115 ;; 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
116 (defmacro defunx (name arglist &rest definition)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
117 (let ((xemacsp (string-match "XEmacs" emacs-version)) reuses)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
118 (while (memq (car definition)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
119 '(:try :emacs-and-try :xemacs-and-try))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
120 (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
121 (setq reuses (car definition)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
122 definition nil)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
123 (push (pop definition) reuses)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
124 (if (and reuses (symbolp reuses))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
125 `(defalias ',name ',reuses)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
126 (let* ((docstring (if (stringp (car definition)) (pop definition)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
127 (spec (and (not xemacsp)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
128 (eq (car-safe (car definition)) 'interactive)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
129 (null (cddar definition))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
130 (cadar definition))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
131 (if (and (stringp spec)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
132 (not (string-equal spec ""))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
133 (eq (aref spec 0) ?_))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
134 (setq definition
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
135 (cons (if (string-equal spec "_")
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
136 '(interactive)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
137 `(interactive ,(substring spec 1)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
138 (cdr definition))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
139 (if (null reuses)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
140 `(defun ,name ,arglist ,docstring
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
141 ,@(cond-emacs-xemacs-macfn definition))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
142 ;; no dynamic docstring in this case
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
143 `(eval-and-compile ; no warnings in Emacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
144 (defalias ',name
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
145 (cond ,@(mapcar (lambda (func) `((fboundp ',func) ',func))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
146 (nreverse reuses))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
147 (t ,(if definition
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
148 `(lambda ,arglist ,docstring
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
149 ,@(cond-emacs-xemacs-macfn definition))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
150 'ignore))))))))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
151 (defmacro ignore-errors-x (&rest body)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
152 (let ((specials '((scan-sexps . 4) (scan-lists . 5)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
153 spec nils)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
154 (if (and (string-match "XEmacs" emacs-version)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
155 (null (cdr body)) (consp (car body))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
156 (setq spec (assq (caar body) specials))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
157 (>= (setq nils (- (cdr spec) (length (car body)))) 0))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
158 `(,@(car body) ,@(make-list nils nil) t)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
159 `(ignore-errors ,@body)))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
160
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
161 ;; More compile-time-macros
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
162 (eval-when-compile
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
163 (defmacro save-buffer-state-x (&rest body) ; similar to EMACS/lazy-lock.el
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
164 (let ((modified (gensym "save-buffer-state-x-modified-")))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
165 `(let ((,modified (buffer-modified-p)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
166 (unwind-protect
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
167 (let ((buffer-undo-list t) (inhibit-read-only t)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
168 ,@(unless (string-match "XEmacs" emacs-version)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
169 '((inhibit-point-motion-hooks t) deactivate-mark))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
170 before-change-functions after-change-functions
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
171 buffer-file-name buffer-file-truename)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
172 ,@body)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
173 (and (not ,modified) (buffer-modified-p)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
174 (set-buffer-modified-p nil)))))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
175 (put 'save-buffer-state-x 'lisp-indent-function 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
176
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
177 ;; get rid of byte-compile warnings
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
178 (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
179 (require 'cc-mode)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
180 (ignore-errors (require 'font-lock))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
181 (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
182 ;;(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
183 ;;(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
184 ;;(ignore-errors (defun c-basic-common-init)) dangerous on Emacs!
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
185 (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
186 (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
187
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
188 ;; 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
189 ;; 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
190 ;; 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
191 ;; 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
192 ;; 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
193 ;; `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
194 ;; cc-mode.
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
195 (defalias 'antlr-c-forward-sws 'c-forward-sws)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
196
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 ;;;; Variables
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
200 ;;;;##########################################################################
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 (defgroup antlr nil
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
204 "Major mode for ANTLR grammar files."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
205 :group 'languages
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
206 :link '(emacs-commentary-link "antlr-mode.el")
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
207 :link '(url-link "http://antlr-mode.sourceforge.net/")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
208 :prefix "antlr-")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
209
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
210 (defconst antlr-version "2.2c"
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
211 "ANTLR major mode version number.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
212 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
213
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 ;;; Controlling ANTLR's code generator (language option)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
217 ;;;===========================================================================
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 (defvar antlr-language nil
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
220 "Major mode corresponding to ANTLR's \"language\" option.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
221 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
222 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
223 variable list\" near the end of the file, see
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
224 `enable-local-variables'.")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
225
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
226 (defcustom antlr-language-alist
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
227 '((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
228 (c++-mode "C++" "\"Cpp\"" "Cpp"))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
229 "List of ANTLR's supported languages.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
230 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
231 \(MAJOR-MODE MODELINE-STRING OPTION-VALUE...)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
232
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
233 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
234 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
235 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
236 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
237 also displayed in the modeline next to \"Antlr\"."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
238 :group 'antlr
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
239 :type '(repeat (group :value (java-mode "")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
240 (function :tag "Major mode")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
241 (string :tag "Modeline string")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
242 (repeat :tag "ANTLR language option" :inline t
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
243 (choice (const :tag "Default" nil)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
244 string )))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
245
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
246 (defcustom antlr-language-limit-n-regexp
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
247 '(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
248 "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
249 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
250 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
251 the language according to `antlr-language-alist'."
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
252 :group 'antlr
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
253 :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
254 regexp))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
255
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 ;;;===========================================================================
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
258 ;;; Hide/Unhide, Indent/Tabs
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
259 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
260
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
261 (defcustom antlr-action-visibility 3
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
262 "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
263 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
264 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
265 greater than this number."
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
266 :group 'antlr
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
267 :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
268 (integer :tag "Hidden if longer than" :value 3)))
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
269
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
270 (defcustom antlr-indent-comment 'tab
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
271 "*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
272 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
273 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
274 they are only changed by \\[antlr-indent-command]."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
275 :group 'antlr
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
276 :type '(radio (const :tag "No" nil)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
277 (const :tag "Always" t)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
278 (sexp :tag "With TAB" :format "%t" :value tab)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
279
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
280 (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
281 '((antlr-mode nil 4 nil)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
282 (java-mode "antlr" 4 nil))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
283 "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
284 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
285 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
286 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
287 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
288 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
289 :group 'antlr
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
290 :type '(repeat (group :value (antlr-mode nil 8 nil)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
291 (choice (const :tag "All" nil)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
292 (function :tag "Major mode"))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
293 (choice (const :tag "All" nil) regexp)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
294 (integer :tag "Tab width")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
295 (boolean :tag "Indent-tabs-mode"))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
296
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
297 (defcustom antlr-indent-style "java"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
298 "*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
299 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
300 `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
301 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
302 :type '(choice (const nil) regexp))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
303
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
304 (defcustom antlr-indent-item-regexp
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
305 "[]}):;|&]" ; & is local ANTLR extension (SGML's and-connector)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
306 "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
307 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
308 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
309 :type 'regexp)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
310
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
311 (defcustom antlr-indent-at-bol-alist
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
312 ;; eval-when-compile not usable with defcustom...
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
313 '((java-mode . "\\(package\\|import\\)\\>")
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
314 (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
315 "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
316 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
317 function and REGEXP is a regular expression.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
318
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
319 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
320 non-whitespace is matched by the corresponding REGEXP, and the line is
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
321 part of an header action, indent the line at column 0 instead according
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
322 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
323 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
324 :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
325
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
326 ;; adopt indentation to cc-engine
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
327 (defvar antlr-disabling-cc-syntactic-symbols
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
328 '(statement-block-intro
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
329 defun-block-intro topmost-intro statement-case-intro member-init-intro
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
330 arglist-intro brace-list-intro knr-argdecl-intro inher-intro
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
331 objc-method-intro
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
332 block-close defun-close class-close brace-list-close arglist-close
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
333 inline-close extern-lang-close namespace-close))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
334
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
335
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 ;;; Options: customization
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
338 ;;;===========================================================================
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 (defcustom antlr-options-use-submenus t
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
341 "*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
342 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
343 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
344 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
345 :type 'boolean)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
346
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
347 (defcustom antlr-tool-version 20701
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
348 "*The version number of the Antlr tool.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
349 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
350 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
351 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
352
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
353 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
354 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
355 can make this variable buffer-local."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
356 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
357 :type 'integer)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
358
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
359 (defcustom antlr-options-auto-colon t
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
360 "*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
361 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
362 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
363 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
364 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
365 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
366 :type 'boolean)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
367
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
368 (defcustom antlr-options-style nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
369 "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
370 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
371 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
372 identifier.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
373
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
374 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
375 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
376 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
377 :type '(repeat (symbol :tag "Style symbol")))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
378
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
379 (defcustom antlr-options-push-mark t
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
380 "*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
381 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
382 \\[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
383 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
384 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
385 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
386 options area before."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
387 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
388 :type '(radio (const :tag "No" nil)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
389 (const :tag "Always" t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
390 (integer :tag "Lines between" :value 10)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
391 (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
392
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
393 (defcustom antlr-options-assign-string " = "
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
394 "*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
395 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
396 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
397 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
398 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
399 :type 'string)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
400
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 ;;; Options: definitions
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
404 ;;;===========================================================================
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 (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
407 "Headings for the four different option kinds.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
408 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
409 `antlr-options-alists'")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
410
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
411 (defvar antlr-options-alists
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
412 '(;; file options ----------------------------------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
413 (("language" antlr-language-option-extra
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
414 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
415 "Generated language: " language-as-string
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
416 (("Java") ("Cpp") ("HTML") ("Diagnostic")))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
417 (20700 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
418 "Generated language: " language-as-string
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
419 (("Java") ("Cpp") ("HTML") ("Diagnostic") ("Sather"))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
420 ("mangleLiteralPrefix" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
421 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
422 "Prefix for literals (default LITERAL_): " t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
423 ("namespace" antlr-c++-mode-extra
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
424 (20700 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
425 "Wrap generated C++ code in namespace: " t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
426 ("namespaceStd" antlr-c++-mode-extra
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
427 (20701 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
428 "Replace ANTLR_USE_NAMESPACE(std) by: " t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
429 ("namespaceAntlr" antlr-c++-mode-extra
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
430 (20701 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
431 "Replace ANTLR_USE_NAMESPACE(antlr) by: " t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
432 ("genHashLines" antlr-c++-mode-extra
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
433 (20701 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
434 "Include #line in generated C++ code? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
435 )
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
436 ;; grammar options --------------------------------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
437 (("k" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
438 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
439 "Lookahead depth: "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
440 ("importVocab" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
441 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
442 "Import vocabulary: "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
443 ("exportVocab" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
444 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
445 "Export vocabulary: "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
446 ("testLiterals" nil ; lexer only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
447 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
448 "Test each token against literals table? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
449 ("defaultErrorHandler" nil ; not for lexer
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
450 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
451 "Generate default exception handler for each rule? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
452 ("codeGenMakeSwitchThreshold" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
453 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
454 "Min number of alternatives for 'switch': "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
455 ("codeGenBitsetTestThreshold" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
456 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
457 "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
458 ("analyzerDebug" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
459 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
460 "Display debugging info during grammar analysis? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
461 ("codeGenDebug" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
462 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
463 "Display debugging info during code generation? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
464 ("buildAST" nil ; not for lexer
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
465 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
466 "Use automatic AST construction/transformation? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
467 ("ASTLabelType" nil ; not for lexer
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
468 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
469 "Class of user-defined AST node: " t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
470 ("charVocabulary" nil ; lexer only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
471 (20600 nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
472 "Insert character vocabulary"))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
473 ("interactive" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
474 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
475 "Generate interactive lexer/parser? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
476 ("caseSensitive" nil ; lexer only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
477 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
478 "Case significant when matching characters? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
479 ("caseSensitiveLiterals" nil ; lexer only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
480 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
481 "Case significant when testing literals table? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
482 ("classHeaderSuffix" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
483 (20600 nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
484 "Additional string for grammar class definition"))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
485 ("filter" nil ; lexer only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
486 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
487 "Skip rule (the name, true or false): "
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
488 antlr-grammar-tokens))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
489 ("namespace" antlr-c++-mode-extra
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
490 (20700 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
491 "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
492 ("namespaceStd" antlr-c++-mode-extra
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
493 (20701 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
494 "Replace ANTLR_USE_NAMESPACE(std) by: " t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
495 ("namespaceAntlr" antlr-c++-mode-extra
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
496 (20701 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
497 "Replace ANTLR_USE_NAMESPACE(antlr) by: " t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
498 ("genHashLines" antlr-c++-mode-extra
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
499 (20701 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
500 "Include #line in generated C++ code? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
501 ;;; ("autoTokenDef" nil ; parser only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
502 ;;; (80000 antlr-read-boolean ; default: true
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
503 ;;; "Automatically define referenced token? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
504 ;;; ("keywordsMeltTo" nil ; parser only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
505 ;;; (80000 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
506 ;;; "Change non-matching keywords to token type: "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
507 )
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
508 ;; rule options ----------------------------------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
509 (("testLiterals" nil ; lexer only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
510 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
511 "Test this token against literals table? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
512 ("defaultErrorHandler" nil ; not for lexer
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
513 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
514 "Generate default exception handler for this rule? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
515 ("ignore" nil ; lexer only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
516 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
517 "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
518 antlr-grammar-tokens))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
519 ("paraphrase" nil ; lexer only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
520 (20600 antlr-read-value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
521 "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
522 )
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
523 ;; subrule options -------------------------------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
524 (("warnWhenFollowAmbig" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
525 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
526 "Display warnings for ambiguities with FOLLOW? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
527 ("generateAmbigWarnings" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
528 (20600 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
529 "Display warnings for ambiguities? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
530 ("greedy" nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
531 (20700 antlr-read-boolean
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
532 "Make this optional/loop subrule greedy? "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
533 ))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
534 "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
535
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
536 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
537 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
538 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
539
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
540 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
541 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
542 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
543 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
544 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
545
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
546 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
547 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
548 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
549 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
550 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
551 `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
552 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
553 this mode.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
554
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
555 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
556 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
557 `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
558 the option.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
559
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
560 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
561 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
562 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
563 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
564
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
565 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
566 `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
567 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
568 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
569 asking for a new value. If non-nil, TABLE is a table for completion or
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
570 a function evaluating to such a table. The return value is quoted iff
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
571 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
572 `antlr-options-style'.")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
573
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 ;;;===========================================================================
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
576 ;;; Run tool, create Makefile dependencies
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
577 ;;;===========================================================================
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 (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
580 "*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
581 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
582 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
583 :group 'antlr
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
584 :type 'string)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
585
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
586 (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
587 "*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
588 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
589 :group 'antlr
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
590 :type 'boolean)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
591
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
592 (defcustom antlr-makefile-specification
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
593 '("\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
594 "*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
595 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
596 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
597
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
598 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
599 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
600 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
601 if necessary.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
602
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
603 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
604 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
605 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
606
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
607 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
608 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
609 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
610 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
611 :group 'antlr
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
612 :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
613 (choice
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
614 (const :tag "Direct targets" nil)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
615 (list :tag "Variables for targets"
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
616 (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
617 (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
618 (string :tag "Variable separator")))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
619 (string :tag "ANTLR command")))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
620
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
621 (defvar antlr-file-formats-alist
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
622 '((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
623 (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
624 "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
625 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
626 \(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
627
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
628 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
629 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
630 `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
631
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
632 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
633 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
634 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
635 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
636
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
637 (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
638 "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
639 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
640
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
641 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
642 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
643 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
644 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
645 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
646 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
647
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
648 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
649 formats.")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
650
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
651 (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
652 "*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
653 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
654
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
655 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
656 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
657 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
658 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
659 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
660 of above mentioned class SUPER.")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
661
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
662 (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
663 "## 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
664 ## \"?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
665 ## 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
666 ## 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
667 ## 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
668 "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
669 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
670
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
671 (defvar antlr-help-rules-intro
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
672 "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
673 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
674 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
675 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
676 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
677 "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
678 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
679 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
680
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 ;;;===========================================================================
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
683 ;;; Menu
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
684 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
685
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
686 (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
687 "*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
688 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
689 imenu."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
690 :group 'antlr
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
691 :type '(choice (const :tag "No menu" nil)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
692 (const :tag "Index menu" t)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
693 (string :tag "Other menu name")))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
694
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
695 (defvar antlr-mode-map
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
696 (let ((map (make-sparse-keymap)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
697 (define-key map "\t" 'antlr-indent-command)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
698 (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
699 (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
700 (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
701 (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
702 (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
703 (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
704 (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
705 (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
706 (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
707 (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
708 ;; I'm too lazy to define my own:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
709 (define-key map "\ea" 'c-beginning-of-statement)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
710 (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
711 ;; electric keys:
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
712 (define-key map ":" 'antlr-electric-character)
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)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
720 map)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
721 "Keymap used in `antlr-mode' buffers.")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
722
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
723 (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
724 "Major mode menu."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
725 `("Antlr"
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
726 ,@(if (cond-emacs-xemacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
727 :EMACS (and antlr-options-use-submenus
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
728 (>= emacs-major-version 21))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
729 :XEMACS antlr-options-use-submenus)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
730 `(("Insert File Option"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
731 :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
732 ("Insert Grammar Option"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
733 :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
734 ("Insert Rule Option"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
735 :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
736 ("Insert Subrule Option"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
737 :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
738 "---")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
739 '(["Insert Option" antlr-insert-option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
740 :active (not buffer-read-only)]))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
741 ("Forward/Backward"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
742 ["Backward Rule" antlr-beginning-of-rule t]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
743 ["Forward Rule" antlr-end-of-rule t]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
744 ["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
745 :active (antlr-inside-rule-p)]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
746 ["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
747 :active (antlr-inside-rule-p)]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
748 "---"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
749 ["Backward Statement" c-beginning-of-statement t]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
750 ["Forward Statement" c-end-of-statement t]
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
751 ["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
752 ["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
753 ["Indent Region" indent-region
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
754 :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
755 ["Comment Out Region" comment-region
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
756 :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
757 ["Uncomment Region"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
758 (comment-region (region-beginning) (region-end) '(4))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
759 :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
760 "---"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
761 ["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
762 ["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
763 ["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
764 "---"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
765 ["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
766 ["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
767 "---"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
768 ["Customize Antlr" (customize-group 'antlr) t]))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
769
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 ;;; font-lock
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
773 ;;;===========================================================================
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 (defcustom antlr-font-lock-maximum-decoration 'inherit
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
776 "*The maximum decoration level for fontifying actions.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
777 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
778 according to `antlr-font-lock-additional-keywords'. Value `inherit'
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
779 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
780 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
781 fontification, see `antlr-font-lock-keywords-alist'.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
782
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
783 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
784 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
785 \((java-mode \. 2) (c++-mode \. 0))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
786 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
787 fontified at all."
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
788 :type '(choice (const :tag "None" none)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
789 (const :tag "Inherit" inherit)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
790 (const :tag "Default" nil)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
791 (const :tag "Maximum" t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
792 (integer :tag "Level" 1)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
793 (repeat :menu-tag "Mode specific" :tag "Mode specific"
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
794 :value ((t . t))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
795 (cons :tag "Instance"
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
796 (radio :tag "Mode"
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
797 (const :tag "All" t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
798 (symbol :tag "Name"))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
799 (radio :tag "Decoration"
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
800 (const :tag "Default" nil)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
801 (const :tag "Maximum" t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
802 (integer :tag "Level" 1))))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
803
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
804 (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
805 ;; 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
806 ;; `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
807 ;; would break Emacs-21.0:
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
808 "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
809 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
810
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
811 (defvar antlr-font-lock-keywords-alist
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
812 '((java-mode
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
813 antlr-no-action-keywords
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
814 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
815 java-font-lock-keywords-3)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
816 (c++-mode
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
817 antlr-no-action-keywords
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
818 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
819 c++-font-lock-keywords-3))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
820 "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
821 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
822 \(MAJOR-MODE KEYWORD...)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
823
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
824 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
825 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
826 in the grammar's actions and semantic predicates, see
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
827 `antlr-font-lock-maximum-decoration'.")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
828
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
829 (defvar antlr-font-lock-default-face 'antlr-font-lock-default-face)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
830 (defface antlr-font-lock-default-face nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
831 "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
832 Do not change."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
833 :group 'antlr)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
834
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
835 (defvar antlr-font-lock-keyword-face 'antlr-font-lock-keyword-face)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
836 (defface antlr-font-lock-keyword-face
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
837 (cond-emacs-xemacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
838 '((((class color) (background light))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
839 (:foreground "black" :EMACS :weight bold :XEMACS :bold t))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
840 "ANTLR keywords."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
841 :group 'antlr)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
842
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
843 (defvar antlr-font-lock-syntax-face 'antlr-font-lock-keyword-face)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
844 (defface antlr-font-lock-syntax-face
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
845 (cond-emacs-xemacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
846 '((((class color) (background light))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
847 (: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
848 "ANTLR syntax symbols like :, |, (, ), ...."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
849 :group 'antlr)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
850
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
851 (defvar antlr-font-lock-ruledef-face 'antlr-font-lock-ruledef-face)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
852 (defface antlr-font-lock-ruledef-face
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
853 (cond-emacs-xemacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
854 '((((class color) (background light))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
855 (:foreground "blue" :EMACS :weight bold :XEMACS :bold t))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
856 "ANTLR rule references (definition)."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
857 :group 'antlr)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
858
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
859 (defvar antlr-font-lock-tokendef-face 'antlr-font-lock-tokendef-face)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
860 (defface antlr-font-lock-tokendef-face
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 token references (definition)."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
865 :group 'antlr)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
866
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
867 (defvar antlr-font-lock-ruleref-face 'antlr-font-lock-ruleref-face)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
868 (defface antlr-font-lock-ruleref-face
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
869 '((((class color) (background light)) (:foreground "blue4")))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
870 "ANTLR rule references (usage)."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
871 :group 'antlr)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
872
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
873 (defvar antlr-font-lock-tokenref-face 'antlr-font-lock-tokenref-face)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
874 (defface antlr-font-lock-tokenref-face
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
875 '((((class color) (background light)) (:foreground "orange4")))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
876 "ANTLR token references (usage)."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
877 :group 'antlr)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
878
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
879 (defvar antlr-font-lock-literal-face 'antlr-font-lock-literal-face)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
880 (defface antlr-font-lock-literal-face
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
881 (cond-emacs-xemacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
882 '((((class color) (background light))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
883 (: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
884 "ANTLR special literal tokens.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
885 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
886 `antlr-font-lock-literal-regexp'."
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
887 :group 'antlr)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
888
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
889 (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
890 "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
891 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
892 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
893 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
894 `antlr-font-lock-literal-face'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
895 :group 'antlr
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
896 :type '(choice (const :tag "None" nil) regexp))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
897
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
898 (defvar antlr-class-header-regexp
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
899 "\\(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
900 "Regexp matching class headers.")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
901
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
902 (defvar antlr-font-lock-additional-keywords
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
903 (cond-emacs-xemacs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
904 `((antlr-invalidate-context-cache)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
905 ("\\$setType[ \t]*(\\([A-Za-z\300-\326\330-\337]\\sw*\\))"
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
906 (1 antlr-font-lock-tokendef-face))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
907 ("\\$\\sw+" (0 font-lock-keyword-face))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
908 ;; the tokens are already fontified as string/docstrings:
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
909 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
910 (if antlr-font-lock-literal-regexp
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
911 (antlr-re-search-forward antlr-font-lock-literal-regexp limit)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
912 (1 antlr-font-lock-literal-face t)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
913 :XEMACS (0 nil)) ; XEmacs bug workaround
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
914 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
915 (antlr-re-search-forward antlr-class-header-regexp limit))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
916 (1 antlr-font-lock-keyword-face)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
917 (2 antlr-font-lock-ruledef-face)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
918 (3 antlr-font-lock-keyword-face)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
919 (4 (if (member (match-string 4) '("Lexer" "Parser" "TreeParser"))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
920 'antlr-font-lock-keyword-face
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
921 'font-lock-type-face)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
922 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
923 (antlr-re-search-forward
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
924 "\\<\\(header\\|options\\|tokens\\|exception\\|catch\\|returns\\)\\>"
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
925 limit))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
926 (1 antlr-font-lock-keyword-face))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
927 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
928 (antlr-re-search-forward
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
929 "^\\(private\\|public\\|protected\\)\\>[ \t]*\\(\\(\\sw+[ \t]*\\(:\\)?\\)\\)?"
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
930 limit))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
931 (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
932 (3 (if (antlr-upcase-p (char-after (match-beginning 3)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
933 'antlr-font-lock-tokendef-face
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
934 'antlr-font-lock-ruledef-face) nil t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
935 (4 antlr-font-lock-syntax-face nil t))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
936 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
937 (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
938 (1 (if (antlr-upcase-p (char-after (match-beginning 0)))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
939 'antlr-font-lock-tokendef-face
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
940 'antlr-font-lock-ruledef-face) nil t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
941 (2 antlr-font-lock-syntax-face nil t))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
942 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
943 ;; v:ruleref and v:"literal" is allowed...
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
944 (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
945 (1 (if (match-beginning 2)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
946 (if (eq (char-after (match-beginning 2)) ?=)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
947 'antlr-font-lock-default-face
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
948 'font-lock-variable-name-face)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
949 (if (antlr-upcase-p (char-after (match-beginning 1)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
950 'antlr-font-lock-tokenref-face
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
951 'antlr-font-lock-ruleref-face)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
952 (2 antlr-font-lock-default-face nil t))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
953 (,(lambda (limit)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
954 (antlr-re-search-forward "[|&:;(~]\\|)\\([*+?]\\|=>\\)?" limit))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
955 (0 'antlr-font-lock-syntax-face))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
956 "Font-lock keywords for ANTLR's normal grammar code.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
957 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
958
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
959 (defvar antlr-font-lock-defaults
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
960 '(antlr-font-lock-keywords
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
961 nil nil ((?_ . "w") (?\( . ".") (?\) . ".")) beginning-of-defun)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
962 "Font-lock defaults used for ANTLR syntax highlighting.
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
963 The SYNTAX-ALIST element is also used to initialize
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
964 `antlr-action-syntax-table'.")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
965
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
966
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
967 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
968 ;;; Internal variables
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
969 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
970
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
971 (defvar antlr-mode-hook nil
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
972 "Hook called by `antlr-mode'.")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
973
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
974 (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
975 "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
976 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
977
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
978 ;; used for "in Java/C++ code" = syntactic-depth>0
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
979 (defvar antlr-action-syntax-table nil
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
980 "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
981 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
982 `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
983 `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
984 not to confuse their context_cache.")
26542
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 (defvar antlr-mode-abbrev-table nil
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
987 "Abbreviation table used in `antlr-mode' buffers.")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
988 (define-abbrev-table 'antlr-mode-abbrev-table ())
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
989
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
990 (defvar antlr-slow-cache-enabling-symbol 'loudly
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
991 ;; 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
992 ;; 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
993 ;; functions which call `antlr-slow-syntactic-context'.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
994 "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
995 This is no user option. Used for `antlr-slow-syntactic-context'.")
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
996
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
997 (defvar antlr-slow-cache-diff-threshold 5000
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
998 "Maximum distance between `point' and cache position for cache use.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
999 Used for `antlr-slow-syntactic-context'.")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1000
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1001
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1002 ;;;;##########################################################################
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1003 ;;;; The Code
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1004 ;;;;##########################################################################
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1005
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1006
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1007
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1008 ;;;===========================================================================
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1009 ;;; Syntax functions -- Emacs vs XEmacs dependent, part 1
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1010 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1011
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1012 ;; 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
1013 (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
1014 "Evaluate BODY with the syntax table SYNTAB."
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1015 `(let ((stab (syntax-table)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1016 (unwind-protect
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1017 (progn (set-syntax-table ,syntab) ,@body)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1018 (set-syntax-table stab))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1019 (put 'antlr-with-syntax-table 'lisp-indent-function 1)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1020 (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
1021
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1022 (defunx antlr-default-directory ()
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1023 :xemacs-and-try default-directory
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1024 "Return `default-directory'."
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1025 default-directory)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1026
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1027 ;; Check Emacs-21.1 simple.el, `shell-command'.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1028 (defunx antlr-read-shell-command (prompt &optional initial-input history)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1029 :xemacs-and-try read-shell-command
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1030 "Read a string from the minibuffer, using `shell-command-history'."
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1031 (read-from-minibuffer prompt initial-input nil nil
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1032 (or history 'shell-command-history)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1033
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1034 (defunx antlr-with-displaying-help-buffer (thunk &optional name)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1035 :xemacs-and-try with-displaying-help-buffer
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1036 "Make a help buffer and call `thunk' there."
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1037 (with-output-to-temp-buffer "*Help*"
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1038 (save-excursion (funcall thunk))))
26542
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
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1041 ;;;===========================================================================
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1042 ;;; Context cache
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1043 ;;;===========================================================================
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 (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
1046
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1047 ;;;(defvar antlr-statistics-full-neg 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1048 ;;;(defvar antlr-statistics-full-diff 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1049 ;;;(defvar antlr-statistics-full-other 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1050 ;;;(defvar antlr-statistics-cache 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1051 ;;;(defvar antlr-statistics-inval 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1052
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1053 (defunx antlr-invalidate-context-cache (&rest dummies)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1054 ;; checkdoc-params: (dummies)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1055 "Invalidate context cache for syntactical context information."
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1056 :XEMACS ; XEmacs bug workaround
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1057 (save-excursion
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1058 (set-buffer (get-buffer-create " ANTLR XEmacs bug workaround"))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1059 (buffer-syntactic-context-depth)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1060 nil)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1061 :EMACS
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1062 ;;; (incf antlr-statistics-inval)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1063 (setq antlr-slow-context-cache nil))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1064
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1065 (defunx antlr-syntactic-context ()
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1066 "Return some syntactic context information.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1067 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
1068 `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
1069 parenthesis-syntax delimiters at point otherwise.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1070 WARNING: this may alter `match-data'."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1071 :XEMACS
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1072 (or (buffer-syntactic-context) (buffer-syntactic-context-depth))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1073 :EMACS
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1074 (let ((orig (point)) diff state
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1075 ;; Arg, Emacs' (buffer-modified-tick) changes with font-lock. Use
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1076 ;; hack that `loudly' is bound during font-locking => cache use will
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1077 ;; increase from 7% to 99.99% during font-locking.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1078 (tick (or (boundp antlr-slow-cache-enabling-symbol)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1079 (buffer-modified-tick))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1080 (if (and (cdr antlr-slow-context-cache)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1081 (>= (setq diff (- orig (cadr antlr-slow-context-cache))) 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1082 (< diff antlr-slow-cache-diff-threshold)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1083 (eq (current-buffer) (caar antlr-slow-context-cache))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1084 (eq tick (cdar antlr-slow-context-cache)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1085 ;; (setq antlr-statistics-cache (1+ antlr-statistics-cache) ...)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1086 (setq state (parse-partial-sexp (cadr antlr-slow-context-cache) orig
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1087 nil nil
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1088 (cddr antlr-slow-context-cache)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1089 (if (>= orig antlr-slow-cache-diff-threshold)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1090 (beginning-of-defun)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1091 (goto-char (point-min)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1092 ;;; (cond ((and diff (< diff 0)) (incf antlr-statistics-full-neg))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1093 ;;; ((and diff (>= diff 3000)) (incf antlr-statistics-full-diff))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1094 ;;; (t (incf antlr-statistics-full-other)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1095 (setq state (parse-partial-sexp (point) orig)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1096 (goto-char orig)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1097 (if antlr-slow-context-cache
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1098 (setcdr antlr-slow-context-cache (cons orig state))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1099 (setq antlr-slow-context-cache
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1100 (cons (cons (current-buffer) tick)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1101 (cons orig state))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1102 (cond ((nth 3 state) 'string)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1103 ((nth 4 state) 'comment) ; block-comment? -- we don't care
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1104 (t (car state)))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1105
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1106 ;;; (incf (aref antlr-statistics 2))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1107 ;;; (unless (and (eq (current-buffer)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1108 ;;; (caar antlr-slow-context-cache))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1109 ;;; (eq (buffer-modified-tick)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1110 ;;; (cdar antlr-slow-context-cache)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1111 ;;; (incf (aref antlr-statistics 1))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1112 ;;; (setq antlr-slow-context-cache nil))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1113 ;;; (let* ((orig (point))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1114 ;;; (base (cadr antlr-slow-context-cache))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1115 ;;; (curr (cddr antlr-slow-context-cache))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1116 ;;; (state (cond ((eq orig (car curr)) (cdr curr))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1117 ;;; ((eq orig (car base)) (cdr base))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1118 ;;; diff diff2)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1119 ;;; (unless state
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1120 ;;; (incf (aref antlr-statistics 3))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1121 ;;; (when curr
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1122 ;;; (if (< (setq diff (abs (- orig (car curr))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1123 ;;; (setq diff2 (abs (- orig (car base)))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1124 ;;; (setq state curr)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1125 ;;; (setq state base
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1126 ;;; diff diff2))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1127 ;;; (if (or (>= (1+ diff) (point)) (>= diff 3000))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1128 ;;; (setq state nil))) ; start from bod/bob
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1129 ;;; (if state
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1130 ;;; (setq state
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1131 ;;; (parse-partial-sexp (car state) orig nil nil (cdr state)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1132 ;;; (if (>= orig 3000) (beginning-of-defun) (goto-char (point-min)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1133 ;;; (incf (aref antlr-statistics 4))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1134 ;;; (setq cw (list orig (point) base curr))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1135 ;;; (setq state (parse-partial-sexp (point) orig)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1136 ;;; (goto-char orig)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1137 ;;; (if antlr-slow-context-cache
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1138 ;;; (setcdr (cdr antlr-slow-context-cache) (cons orig state))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1139 ;;; (setq antlr-slow-context-cache
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1140 ;;; (cons (cons (current-buffer) (buffer-modified-tick))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1141 ;;; (cons (cons orig state) (cons orig state))))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1142 ;;; (cond ((nth 3 state) 'string)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1143 ;;; ((nth 4 state) 'comment) ; block-comment? -- we don't care
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1144 ;;; (t (car state)))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1145
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1146 ;;; (beginning-of-defun)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1147 ;;; (let ((state (parse-partial-sexp (point) orig)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1148 ;;; (goto-char orig)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1149 ;;; (cond ((nth 3 state) 'string)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1150 ;;; ((nth 4 state) 'comment) ; block-comment? -- we don't care
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1151 ;;; (t (car state))))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1152
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1153
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1154 ;;;===========================================================================
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1155 ;;; Miscellaneous functions
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1156 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1157
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1158 (defun antlr-upcase-p (char)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1159 "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
1160 ;; in XEmacs, upcase only works for ASCII
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1161 (or (and (<= ?A char) (<= char ?Z))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1162 (and (<= ?\300 char) (<= char ?\337)))) ; ?\327 is no letter
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1163
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1164 (defun antlr-re-search-forward (regexp bound)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1165 "Search forward from point for regular expression REGEXP.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1166 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
1167 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
1168 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
1169 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
1170 and `replace-match'."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1171 ;; 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
1172 (let ((continue t))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1173 (while (and (re-search-forward regexp bound 'limit)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1174 (save-match-data
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1175 (if (eq (antlr-syntactic-context) 0)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1176 (setq continue nil)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1177 t))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1178 (if continue nil (point))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1179
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1180 (defun antlr-search-forward (string)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1181 "Search forward from point for STRING.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1182 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
1183 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
1184 and actions/semantic predicates."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1185 ;; 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
1186 (let ((continue t))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1187 (while (and (search-forward string nil 'limit)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1188 (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
1189 (if continue nil (point))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1190
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1191 (defun antlr-search-backward (string)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1192 "Search backward from point for STRING.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1193 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
1194 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
1195 strings and actions/semantic predicates."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1196 ;; WARNING: Should only be used with `antlr-action-syntax-table'!
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1197 (let ((continue t))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1198 (while (and (search-backward string nil 'limit)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1199 (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
1200 (if continue nil (point))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1201
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1202 (defsubst antlr-skip-sexps (count)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1203 "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
1204 Return position before the comments after the last expression."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1205 (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
1206 (prog1 (point)
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1207 (antlr-c-forward-sws)))
26542
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
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1210 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1211 ;;; font-lock
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1212 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1213
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1214 (defun antlr-font-lock-keywords ()
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1215 "Return font-lock keywords for current buffer.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1216 See `antlr-font-lock-additional-keywords', `antlr-language' and
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1217 `antlr-font-lock-maximum-decoration'."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1218 (if (eq antlr-font-lock-maximum-decoration 'none)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1219 antlr-font-lock-additional-keywords
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1220 (append antlr-font-lock-additional-keywords
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1221 (eval (let ((major-mode antlr-language)) ; dynamic
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1222 (font-lock-choose-keywords
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1223 (cdr (assq antlr-language
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1224 antlr-font-lock-keywords-alist))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1225 (if (eq antlr-font-lock-maximum-decoration 'inherit)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1226 font-lock-maximum-decoration
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1227 antlr-font-lock-maximum-decoration)))))))
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
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 ;;; imenu support
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1232 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1233
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1234 (defun antlr-grammar-tokens ()
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1235 "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
1236 (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
1237
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1238 (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
1239 "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
1240 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
1241 (let ((items nil)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1242 (classes nil)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1243 (continue t))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1244 ;; Using `imenu-progress-message' would require imenu for compilation, but
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1245 ;; nobody is missing these messages. The generic imenu function searches
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1246 ;; 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
1247 (antlr-with-syntax-table antlr-action-syntax-table
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1248 (antlr-invalidate-context-cache)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1249 (goto-char (point-min))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1250 (antlr-skip-file-prelude t)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1251 (while continue
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1252 (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
1253 (if (looking-at antlr-class-header-regexp)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1254 (or tokenrefs-only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1255 (push (cons (match-string 2)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1256 (if imenu-use-markers
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1257 (copy-marker (match-beginning 2))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1258 (match-beginning 2)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1259 classes))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1260 (if (looking-at "p\\(ublic\\|rotected\\|rivate\\)")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1261 (antlr-skip-sexps 1))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1262 (when (looking-at "\\sw+")
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1263 (if tokenrefs-only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1264 (if (antlr-upcase-p (char-after (point)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1265 (push (list (match-string 0)) items))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1266 (push (cons (match-string 0)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1267 (if imenu-use-markers
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1268 (copy-marker (match-beginning 0))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1269 (match-beginning 0)))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1270 items))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1271 (if (setq continue (antlr-search-forward ";"))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1272 (antlr-skip-exception-part t))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1273 (if classes
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1274 (cons (cons "Classes" (nreverse classes)) (nreverse items))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1275 (nreverse items))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1276
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1277
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1278 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1279 ;;; Parse grammar files (internal functions)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1280 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1281
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1282 (defun antlr-skip-exception-part (skip-comment)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1283 "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
1284 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
1285 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
1286 part."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1287 (let ((pos (point))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1288 (class nil))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1289 (antlr-c-forward-sws)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1290 (while (looking-at "options\\>\\|tokens\\>")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1291 (setq class t)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1292 (setq pos (antlr-skip-sexps 2)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1293 (if class
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1294 ;; 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
1295 ;; 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
1296 ;; 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
1297 (if (looking-at "{") (setq pos (antlr-skip-sexps 1)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1298 (while (looking-at "exception\\>")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1299 (setq pos (antlr-skip-sexps 1))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1300 (when (looking-at "\\[")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1301 (setq pos (antlr-skip-sexps 1)))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1302 (while (looking-at "catch\\>")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1303 (setq pos (antlr-skip-sexps 3)))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1304 (or skip-comment (goto-char pos))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1305
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1306 (defun antlr-skip-file-prelude (skip-comment)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1307 "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
1308 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
1309 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
1310
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1311 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
1312 position before the comment after the header."
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1313 (let* ((pos (point))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1314 (pos0 pos))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1315 (antlr-c-forward-sws)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1316 (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
1317 (while (looking-at "header\\>[ \t]*\\(\"\\)?")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1318 (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
1319 (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
1320 pos
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1321 (when (looking-at "options\\>")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1322 (setq pos (antlr-skip-sexps 2)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1323 (or skip-comment (goto-char pos))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1324 pos0)))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1325
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1326 (defun antlr-next-rule (arg skip-comment)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1327 "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
1328 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
1329 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
1330 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
1331 is non-nil, move to beginning of the rule."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1332 ;; 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
1333 ;; PRE: ARG<>0
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1334 (let ((pos (point))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1335 (beg (point)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1336 ;; first look whether point is in exception part
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1337 (if (antlr-search-backward ";")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1338 (progn
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1339 (setq beg (point))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1340 (forward-char)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1341 (antlr-skip-exception-part skip-comment))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1342 (antlr-skip-file-prelude skip-comment))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1343 (if (< arg 0)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1344 (unless (and (< (point) pos) (zerop (incf arg)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1345 ;; 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
1346 (goto-char beg) ; rewind (to ";" / point)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1347 (while (and arg (<= (incf arg) 0))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1348 (if (antlr-search-backward ";")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1349 (setq beg (point))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1350 (when (>= arg -1)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1351 ;; try file prelude:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1352 (setq pos (antlr-skip-file-prelude skip-comment))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1353 (if (zerop arg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1354 (if (>= (point) beg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1355 (goto-char (if (>= pos beg) (point-min) pos)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1356 (goto-char (if (or (>= (point) beg) (= (point) pos))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1357 (point-min) pos))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1358 (setq arg nil)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1359 (when arg ; always found a ";"
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1360 (forward-char)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1361 (antlr-skip-exception-part skip-comment)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1362 (if (<= (point) pos) ; moved backward?
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1363 (goto-char pos) ; rewind
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1364 (decf arg)) ; already moved one defun forward
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1365 (unless (zerop arg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1366 (while (>= (decf arg) 0)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1367 (antlr-search-forward ";"))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1368 (antlr-skip-exception-part skip-comment)))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1369
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1370 (defun antlr-outside-rule-p ()
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1371 "Non-nil if point is outside a grammar rule.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1372 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
1373 ;; 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
1374 (let ((pos (point)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1375 (antlr-next-rule -1 nil)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1376 (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
1377 (antlr-c-forward-sws)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1378 (and between (> (point) pos) (goto-char pos)))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1379
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1380
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1381 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1382 ;;; Parse grammar files (commands)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1383 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1384 ;; No (interactive "_") in Emacs... use `zmacs-region-stays'.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1385
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1386 (defun antlr-inside-rule-p ()
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1387 "Non-nil if point is inside a grammar rule.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1388 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
1389 rule."
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1390 (save-excursion
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1391 (antlr-with-syntax-table antlr-action-syntax-table
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1392 (not (antlr-outside-rule-p)))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1393
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1394 (defunx antlr-end-of-rule (&optional arg)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1395 "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
1396 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
1397 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
1398 rule. If ARG is zero, run `antlr-end-of-body'."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1399 (interactive "_p")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1400 (if (zerop arg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1401 (antlr-end-of-body)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1402 (antlr-with-syntax-table antlr-action-syntax-table
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1403 (antlr-next-rule arg nil))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1404
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1405 (defunx antlr-beginning-of-rule (&optional arg)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1406 "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
1407 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
1408 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
1409 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
1410 (interactive "_p")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1411 (if (zerop arg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1412 (antlr-beginning-of-body)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1413 (antlr-with-syntax-table antlr-action-syntax-table
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1414 (antlr-next-rule (- arg) t))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1415
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1416 (defunx antlr-end-of-body (&optional msg)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1417 "Move to position after the `;' of the current rule.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1418 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
1419 prefix arg MSG, move to `:'."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1420 (interactive "_")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1421 (antlr-with-syntax-table antlr-action-syntax-table
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1422 (let ((orig (point)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1423 (if (antlr-outside-rule-p)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1424 (error "Outside an ANTLR rule"))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1425 (let ((bor (point)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1426 (when (< (antlr-skip-file-prelude t) (point))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1427 ;; Yes, we are in the file prelude
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1428 (goto-char orig)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1429 (error (or msg "The file prelude is without `;'")))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1430 (antlr-search-forward ";")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1431 (when msg
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1432 (when (< (point)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1433 (progn (goto-char bor)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1434 (or (antlr-search-forward ":") (point-max))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1435 (goto-char orig)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1436 (error msg))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1437 (antlr-c-forward-sws))))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1438
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1439 (defunx antlr-beginning-of-body ()
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1440 "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
1441 (interactive "_")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1442 (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
1443
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1444
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1445 ;;;===========================================================================
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1446 ;;; Literal normalization, Hide Actions
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1447 ;;;===========================================================================
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1448
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1449 (defun antlr-downcase-literals (&optional transform)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1450 "Convert all literals in buffer to lower case.
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1451 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
1452 (interactive)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1453 (or transform (setq transform 'downcase-region))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1454 (let ((literals 0))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1455 (save-excursion
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1456 (goto-char (point-min))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1457 (antlr-with-syntax-table antlr-action-syntax-table
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1458 (antlr-invalidate-context-cache)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1459 (while (antlr-re-search-forward "\"\\(\\sw\\(\\sw\\|-\\)*\\)\"" nil)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1460 (funcall transform (match-beginning 0) (match-end 0))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1461 (incf literals))))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1462 (message "Transformed %d literals" literals)))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1463
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1464 (defun antlr-upcase-literals ()
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1465 "Convert all literals in buffer to upper case."
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1466 (interactive)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1467 (antlr-downcase-literals 'upcase-region))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1468
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1469 (defun antlr-hide-actions (arg &optional silent)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1470 "Hide or unhide all actions in buffer.
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1471 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
1472 called interactively without prefix argument. Hide all actions
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1473 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
1474 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
1475
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1476 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
1477 (interactive "p")
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1478 (save-buffer-state-x
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1479 (if (> arg 0)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1480 (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
1481 (diff (and antlr-action-visibility
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1482 (+ (max antlr-action-visibility 0) 2))))
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1483 (antlr-hide-actions 0 t)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1484 (save-excursion
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1485 (goto-char (point-min))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1486 (antlr-with-syntax-table antlr-action-syntax-table
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1487 (antlr-invalidate-context-cache)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1488 (while (antlr-re-search-forward regexp nil)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1489 (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
1490 (when beg
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1491 (if diff ; braces are visible
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1492 (if (> (point) (+ beg diff))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1493 (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
1494 '(invisible t intangible t)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1495 ;; 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
1496 (and (looking-at "[ \t]*$")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1497 (save-excursion
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1498 (goto-char beg)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1499 (skip-chars-backward " \t")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1500 (and (bolp) (setq beg (point))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1501 (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
1502 (add-text-properties beg (point)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
1503 '(invisible t intangible t))))))))
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1504 (or silent
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1505 (message "Hide all actions (%s arguments)...done"
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1506 (if (= arg 1) "including" "excluding"))))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1507 (remove-text-properties (point-min) (point-max)
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1508 '(invisible nil intangible nil))
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1509 (or silent
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1510 (message "Unhide all actions (including arguments)...done")))))
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1511
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1512
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
1513 ;;;===========================================================================
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1514 ;;; Insert option: command
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1515 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1516
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1517 (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
1518 "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
1519 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
1520 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
1521 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
1522
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1523 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
1524
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1525 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
1526 argument or automatically deduced without prefix argument.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1527 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
1528 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
1529 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
1530 point outside a subrule/rule.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1531 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
1532 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
1533 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
1534 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
1535 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
1536 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
1537 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
1538 - 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
1539 - 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
1540 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
1541 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
1542 according to a newly inserted language option.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1543
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1544 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
1545 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
1546 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
1547 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
1548 will offer completion using version-correct values.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1549
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1550 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
1551 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
1552 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
1553
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1554 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
1555
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1556 * 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
1557 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
1558 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
1559 * 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
1560 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
1561 beginning.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1562 * 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
1563 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
1564 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
1565 after the comments.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1566
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1567 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
1568 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
1569
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1570 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
1571 `antlr-options-push-mark'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1572 (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
1573 (barf-if-buffer-read-only)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1574 (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
1575 (cond ((null level)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1576 (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
1577 ((atom location)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1578 (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
1579 (elt antlr-options-headings (1- level)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1580 (let ((area (car location))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1581 (place (cdr location)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1582 (cond ((null place) ; invisible
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1583 (error (if area
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1584 "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
1585 "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
1586 (elt antlr-options-headings (1- level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1587 (substitute-command-keys "\\[widen]")))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1588 ((null area) ; without option part
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1589 (antlr-insert-option-do level option nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1590 (null (cdr place))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1591 (car place)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1592 ((save-excursion ; with option part, option visible
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1593 (goto-char (max (point-min) (car area)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1594 (re-search-forward (concat "\\(^\\|;\\)[ \t]*\\(\\<"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1595 (regexp-quote option)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1596 "\\>\\)[ \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
1597 ;; 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
1598 (min (point-max) (cdr area))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1599 t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1600 (antlr-insert-option-do level option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1601 (cons (or (match-beginning 5)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1602 (match-beginning 3))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1603 (match-end 5))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1604 (and (null (cdr place)) area)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1605 (or (match-beginning 5)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1606 (match-end 4)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1607 (match-end 2))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1608 (t ; with option part, option not yet
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1609 (antlr-insert-option-do level option t
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1610 (and (null (cdr place)) area)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1611 (car place))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1612
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1613 (defun antlr-insert-option-interactive (arg)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1614 "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
1615 Return \(LEVEL OPTION LOCATION)."
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1616 (barf-if-buffer-read-only)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1617 (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
1618 (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
1619 (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
1620 (let* ((kind (antlr-option-kind arg))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1621 (level (car kind)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1622 (if (atom (cdr kind))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1623 (list level nil (cdr kind))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1624 (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
1625 (completion-ignore-case t) ;dynamic
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1626 (input (completing-read (format "Insert %s option: "
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1627 (elt antlr-options-headings
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1628 (1- level)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1629 table)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1630 (list level input (cdr kind))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1631
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1632 (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
1633 "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
1634 ;; checkdoc-params: (menu-items)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1635 (let ((active (if buffer-read-only
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1636 nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1637 (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
1638 (mapcar (lambda (option)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1639 (vector option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1640 (list 'antlr-insert-option level option)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1641 :active active))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1642 (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
1643 'string-lessp))))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1644
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1645
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1646 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1647 ;;; Insert option: determine section-kind
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1648 ;;;===========================================================================
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-option-kind (requested)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1651 "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
1652 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
1653 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
1654 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
1655 like \(AREA \. PLACE), see `antlr-option-location'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1656 (save-excursion
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1657 (save-restriction
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1658 (let ((min0 (point-min)) ; before `widen'!
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1659 (max0 (point-max))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1660 (orig (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1661 (level (antlr-option-level requested)) ; calls `widen'!
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1662 pos)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1663 (cond ((null level)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1664 (setq level requested))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1665 ((eq level 1) ; file options
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1666 (goto-char (point-min))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1667 (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
1668 ((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
1669 (setq pos (point))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1670 (antlr-c-forward-sws))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1671 ((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
1672 ;; rule options, with complete rule header
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1673 (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
1674 (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
1675 (when (looking-at "returns[ \t\n]*\\[")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1676 (goto-char (1- (match-end 0)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1677 (setq pos (antlr-skip-sexps 1)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1678 (cons level
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1679 (cond ((null pos) 'error)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1680 ((looking-at "options[ \t\n]*{")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1681 (goto-char (match-end 0))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1682 (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
1683 (antlr-option-location orig min0 max0
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1684 (point)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1685 (if pos (1- pos) (point-max))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1686 t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1687 (t
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1688 (antlr-option-location orig min0 max0
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1689 pos (point)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1690 nil))))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1691
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1692 (defun antlr-option-level (requested)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1693 "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
1694 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
1695 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
1696 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
1697 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
1698 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
1699
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1700 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
1701 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
1702 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
1703 is undefined."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1704 (widen)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1705 (if (eq requested 1)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1706 1
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1707 (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
1708 (antlr-invalidate-context-cache)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1709 (let* ((orig (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1710 (outsidep (antlr-outside-rule-p))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1711 bor depth)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1712 (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
1713 (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
1714 (cond ((eq requested 2) ; grammar options required?
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1715 (let (boc) ; beginning of class
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1716 (goto-char (point-min))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1717 (while (and (<= (point) bor)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1718 (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
1719 nil))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1720 (if (<= (match-beginning 0) bor)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1721 (setq boc (match-end 0))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1722 (when boc
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1723 (goto-char boc)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1724 2)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1725 ((save-excursion ; in region of file options?
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1726 (goto-char (point-min))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1727 (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
1728 (< orig (point)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1729 (and (null requested) 1))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1730 (outsidep ; outside rule not OK
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1731 nil)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1732 ((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
1733 (goto-char (match-end 0))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1734 (and (null requested) 2))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1735 ((eq requested 3) ; rule options required?
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1736 (goto-char bor)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1737 3)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1738 ((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
1739 (if (> depth 0) ; move out of actions
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1740 (goto-char (scan-lists (point) -1 depth)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1741 (set-syntax-table antlr-mode-syntax-table)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1742 (antlr-invalidate-context-cache)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1743 (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
1744 (unless (eq requested 4)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1745 (goto-char bor)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1746 3)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1747 (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
1748 4)))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1749
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1750 (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
1751 "Return location for the options area.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1752 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
1753 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
1754 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
1755 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
1756 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
1757
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1758 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
1759 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
1760 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
1761 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
1762 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
1763 non-nil."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1764 (cons (and withp (cons min-area max-area))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1765 (cond ((and (<= min-area orig) (<= orig max-area)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1766 (save-excursion
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1767 (goto-char orig)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1768 (not (memq (antlr-syntactic-context)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1769 '(comment block-comment)))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
1770 ;; 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
1771 (list orig))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1772 ((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
1773 ;; 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
1774 (cons min-area 'beginning))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1775 ((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
1776 ;; use end of options area
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1777 (cons max-area 'end))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1778 ((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
1779 ;; 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
1780 (cons min-area 'beginning)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1781
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1782 (defun antlr-syntactic-grammar-depth (pos beg)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1783 "Return syntactic context depth at POS.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1784 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
1785 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
1786 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
1787 WARNING: this may alter `match-data'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1788 (goto-char pos)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1789 (let ((context (or (antlr-syntactic-context) 0)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1790 (while (and context (not (integerp context)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1791 (cond ((eq context 'string)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1792 (setq context
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1793 (and (search-backward "\"" nil t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1794 (>= (point) beg)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1795 (or (antlr-syntactic-context) 0))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1796 ((memq context '(comment block-comment))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1797 (setq context
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1798 (and (re-search-backward "/[/*]" nil t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1799 (>= (point) beg)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1800 (or (antlr-syntactic-context) 0))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1801 context))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1802
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1803
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1804 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1805 ;;; Insert options: do the insertion
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1806 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1807
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1808 (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
1809 "Insert option into buffer at position POS.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1810 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
1811 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
1812 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
1813 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
1814 the option value or nil.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1815
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1816 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
1817 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
1818 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
1819 (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
1820 (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
1821 (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
1822 ;; 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
1823 (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
1824 ((numberp antlr-options-push-mark)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1825 (> (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
1826 antlr-options-push-mark))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1827 (antlr-options-push-mark))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1828 (push-mark))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1829 ;; read option value -----------------------------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1830 (goto-char pos)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1831 (if (null value)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1832 ;; no option specification found
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1833 (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
1834 (elt antlr-options-headings (1- level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1835 option))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1836 (message "Insert value for %s option %s"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1837 (elt antlr-options-headings (1- level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1838 option)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1839 (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
1840 (elt antlr-options-headings (1- level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1841 option))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1842 ;; option specification found
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1843 (setq value (cdr value))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1844 (if (car value)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1845 (let ((initial (and (consp old) (cdr old)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1846 (buffer-substring (car old) (cdr old)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1847 (setq value (apply (car value)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1848 (and initial
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1849 (if (eq (aref initial 0) ?\")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1850 (read initial)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1851 initial))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1852 (cdr value))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1853 (message (cadr value))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1854 (setq value nil)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1855 ;; insert value ----------------------------------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1856 (if (consp old)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1857 (antlr-insert-option-existing old value)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1858 (if (consp area)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1859 ;; 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
1860 (antlr-syntactic-grammar-depth (point) (car area)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1861 (antlr-insert-option-space area old)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1862 (or old (antlr-insert-option-area level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1863 (insert option " = ;")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1864 (backward-char)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1865 (if value (insert value)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1866 ;; final -----------------------------------------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1867 (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
1868
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1869 (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
1870 "Return version correct option value specification.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1871 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
1872 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
1873 EXISTSP determines whether the option already exists."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1874 (let (value)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1875 (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
1876 (setq value (pop specs)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1877 (cond (value) ; found correct spec
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1878 ((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
1879 (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
1880 ((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
1881 (antlr-version-string (caar specs))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1882 (elt antlr-options-headings (1- level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1883 option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1884 (antlr-version-string antlr-tool-version)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1885 (car specs))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1886 (t
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1887 (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
1888 (antlr-version-string (caar specs))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1889 (elt antlr-options-headings (1- level))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1890 option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1891 (antlr-version-string antlr-tool-version))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1892
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1893 (defun antlr-version-string (version)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1894 "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
1895 (let ((version100 (/ version 100)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1896 (format "%d.%d.%d"
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1897 (/ 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
1898
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1899
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1900 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1901 ;;; 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
1902 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1903
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1904 (defun antlr-insert-option-existing (old value)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1905 "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
1906 For OLD, see `antlr-insert-option-do'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1907 ;; no = => insert =
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1908 (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
1909 ;; with user input => insert if necessary
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1910 (when value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1911 (if (cdr old) ; with value
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1912 (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
1913 (goto-char (cdr old))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1914 (delete-region (car old) (cdr old))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1915 (insert value))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1916 (insert value)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1917 (unless (looking-at "\\([^\n=;{}/'\"]\\|'\\([^\n'\\]\\|\\\\.\\)*'\\|\"\\([^\n\"\\]\\|\\\\.\\)*\"\\)*;")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1918 ;; 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
1919 (insert ";")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1920 (backward-char)))
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1921
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1922 (defun antlr-insert-option-space (area old)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1923 "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
1924 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
1925 (let ((orig (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1926 (open t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1927 (skip-chars-backward " \t")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1928 (unless (bolp)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1929 (let ((before (char-after (1- (point)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1930 (goto-char orig)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1931 (and old ; with existing options area
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1932 (consp area) ; if point inside existing area
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1933 (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
1934 ; => skip to end of option
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1935 (if (and (search-forward ";" (cdr area) t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1936 (let ((context (antlr-syntactic-context)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1937 (or (null context) (numberp context))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1938 (setq orig (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1939 (goto-char orig)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1940 (skip-chars-forward " \t")
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1941
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1942 (if (looking-at "$\\|//")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1943 ;; 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
1944 (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
1945 (current-column))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1946 (beginning-of-line 2)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1947 (or (bolp) (insert "\n"))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1948 (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
1949 (while (and (looking-at "[ \t]*\\(//\\)")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1950 (goto-char (match-beginning 1))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1951 (= (current-column) same))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1952 (beginning-of-line 2)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1953 (or (bolp) (insert "\n")))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1954 (goto-char orig)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1955 (if (null old)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1956 (progn (insert "\n") (antlr-indent-line))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1957 (unless (eq (char-after (1- (point))) ?\ )
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1958 (insert " "))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1959 (unless (eq (char-after (point)) ?\ )
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1960 (insert " ")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1961 (backward-char))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1962 (setq open nil)))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1963 (when open
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1964 (beginning-of-line 1)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1965 (insert "\n")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1966 (backward-char)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1967 (antlr-indent-line))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1968
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1969 (defun antlr-insert-option-area (level)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1970 "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
1971 Used by `antlr-insert-option-do'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1972 (insert "options {\n\n}")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1973 (when (and antlr-options-auto-colon
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1974 (memq level '(3 4))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1975 (save-excursion
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1976 (antlr-c-forward-sws)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1977 (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
1978 (not (eq (char-after (point)) ?\:))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1979 (insert "\n:")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1980 (antlr-indent-line)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1981 (end-of-line 0))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1982 (backward-char 1)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1983 (antlr-indent-line)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1984 (beginning-of-line 0)
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
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1988 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1989 ;;; Insert options: in `antlr-options-alists'
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1990 ;;;===========================================================================
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1991
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1992 (defun antlr-read-value (initial-contents prompt
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1993 &optional as-string table table-x)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
1994 "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
1995 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
1996 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
1997 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
1998 `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
1999 otherwise return the user input directly.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2000
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2001 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
2002 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
2003 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
2004
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2005 Used inside `antlr-options-alists'."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2006 (let* ((completion-ignore-case t) ; dynamic
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2007 (table0 (and (or table table-x)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2008 (append table-x
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2009 (if (functionp table) (funcall table) table))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2010 (input (if table0
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2011 (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
2012 (read-from-minibuffer prompt initial-contents))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2013 (if (and as-string
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2014 (or (eq as-string t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2015 (cdr (assq as-string antlr-options-style))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2016 (format "%S" input)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2017 input)))
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 (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
2020 "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
2021 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
2022 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
2023 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
2024
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2025 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
2026 also `antlr-read-value'.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2027
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2028 Used inside `antlr-options-alists'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2029 (antlr-read-value initial-contents
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2030 (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
2031 nil
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2032 table '(("false") ("true"))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2033
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2034 (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
2035 ;; checkdoc-params: (dummies)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2036 "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
2037 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
2038 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
2039
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2040 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
2041 (when (eq phase 'after-insertion)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2042 (let ((new-language (antlr-language-option t)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2043 (or (null new-language)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2044 (eq new-language antlr-language)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2045 (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
2046 (if font-lock (font-lock-mode 0))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2047 (antlr-mode)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2048 (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
2049
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2050 (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
2051 ;; checkdoc-params: (option dummies)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2052 "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
2053 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
2054 `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
2055
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2056 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
2057 (and (eq phase 'before-input)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2058 (not (eq antlr-language 'c++-mode))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2059 (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
2060 (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
2061 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
2062
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2063
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2064 ;;;===========================================================================
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2065 ;;; Compute dependencies
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2066 ;;;===========================================================================
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2067
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2068 (defun antlr-file-dependencies ()
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2069 "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
2070 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
2071 where CLASSES = ((CLASS . CLASS-EVOCAB) ...),
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2072 SUPERS = ((SUPER . USE-EVOCAB-P) ...), and
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2073 VOCABS = ((EVOCAB ...) . (IVOCAB ...))
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2074
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2075 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
2076 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
2077 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
2078
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2079 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
2080 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
2081 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
2082 (unless buffer-file-name
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2083 (error "Grammar buffer does not visit a file"))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2084 (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
2085 (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
2086 (goto-char (point-min))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2087 (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
2088 ;; parse class definition --------------------------------------------
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2089 (let* ((class (match-string 2))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2090 (sclass (match-string 4))
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2091 ;; 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
2092 ;; 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
2093 (evocab (or default-vocab class))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2094 (ivocab nil))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2095 (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
2096 (antlr-c-forward-sws)
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2097 (while (looking-at "options\\>\\|\\(tokens\\)\\>")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2098 (if (match-beginning 1)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2099 (antlr-skip-sexps 2)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2100 (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
2101 (antlr-c-forward-sws)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2102 ;; parse grammar option sections -------------------------------
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2103 (when (eq (char-after (point)) ?\{)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2104 (let* ((beg (1+ (point)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2105 (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
2106 (cont (point)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2107 (goto-char beg)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2108 (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
2109 (setq evocab (match-string 1)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2110 (goto-char beg)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2111 (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
2112 (setq ivocab (match-string 1)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2113 (goto-char cont)))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2114 (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
2115 (let ((super (assoc sclass superclasses)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2116 (if super
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2117 (or ivocab (setcdr super t))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2118 (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
2119 ;; remember class with export vocabulary:
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2120 (push (cons class evocab) classes)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2121 ;; 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
2122 (or default-vocab (setq default-vocab evocab))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2123 (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
2124 (or (null ivocab)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2125 (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
2126 (if classes
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2127 (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
2128 (cons (nreverse classes) (nreverse superclasses))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2129 (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
2130 antlr-language))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2131
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2132 (defun antlr-directory-dependencies (dirname)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2133 "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
2134 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
2135 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
2136
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2137 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
2138 `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
2139 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
2140 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
2141 (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
2142 (when grammar
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2143 (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
2144 (generate-new-buffer-name " *temp*")))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2145 (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
2146 (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
2147 (cadr antlr-special-file-formats))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2148 ".+")
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 classes dependencies)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2151 (unwind-protect
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2152 (save-excursion
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2153 (set-buffer temp-buffer)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2154 (widen) ; just in case...
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2155 (dolist (file grammar)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2156 (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
2157 (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
2158 (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
2159 (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
2160 ; table and `antlr-language'
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2161 (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
2162 (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
2163 (file (car file-deps)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2164 (when file-deps
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2165 (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
2166 (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
2167 (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
2168 (if class-spec
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2169 (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
2170 (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
2171 classes))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2172 (push file-deps dependencies)))))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2173 (kill-buffer temp-buffer))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2174 (cons (nreverse classes) (nreverse dependencies))))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2175
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2176
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2177 ;;;===========================================================================
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2178 ;;; Compilation: run ANTLR tool
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2179 ;;;===========================================================================
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2180
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2181 (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
2182 "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
2183 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
2184 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
2185 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
2186
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2187 The result looks like \(OPTION WITH-UNKNOWN GLIB ...). OPTION is the
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2188 complete \"-glib\" option. WITH-UNKNOWN has value t iff there is none
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2189 or more than one grammar file for at least one super grammar.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2190
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2191 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
2192 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
2193 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
2194 ;; 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
2195 ;; 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
2196 ;; 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
2197 (let (glibs unknown)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2198 (while supers
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2199 (let* ((super (pop supers))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2200 (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
2201 (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
2202 (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
2203 (push (cons (or (car file)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2204 (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
2205 (car super)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2206 (and (cdr super)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2207 (or (cdr file)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2208 (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
2209 (car super)))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2210 glibs)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2211 (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
2212 (cons unknown glibs))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2213
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2214 (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
2215 "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
2216 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
2217 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
2218 necessary.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2219
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2220 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
2221 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
2222 `antlr-ask-about-save'."
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2223 (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
2224 (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
2225 (let ((default-directory (file-name-directory file)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2226 (require 'compile) ; only `compile' autoload
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2227 (compile-internal (concat command " " (file-name-nondirectory file))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2228 "No more errors" "Antlr-Run")))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2229
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2230 (defun antlr-run-tool-interactive ()
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2231 ;; code in `interactive' is not compiled
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2232 "Interactive specification for `antlr-run-tool'.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2233 Use prefix argument ARG to return \(COMMAND FILE SAVED)."
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2234 (let* ((supers (cdadr (save-excursion
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2235 (save-restriction
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2236 (widen)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2237 (antlr-file-dependencies)))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2238 (glibs ""))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2239 (when supers
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2240 (save-some-buffers (not antlr-ask-about-save) nil)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2241 (setq glibs (car (antlr-superclasses-glibs
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2242 supers
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2243 (car (antlr-directory-dependencies
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2244 (antlr-default-directory)))))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2245 (list (antlr-read-shell-command "Run Antlr on current file with: "
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2246 (concat antlr-tool-command glibs " "))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2247 buffer-file-name
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2248 supers)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2249
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2250
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2251 ;;;===========================================================================
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2252 ;;; Makefile creation
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2253 ;;;===========================================================================
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2254
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2255 (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
2256 "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
2257 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
2258 (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
2259 (when spec
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2260 (insert pre
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2261 (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
2262 post))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2263
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2264 (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
2265 "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
2266 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
2267 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
2268 (let* ((dirname (antlr-default-directory))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2269 (deps0 (antlr-directory-dependencies dirname))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2270 (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
2271 (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
2272 (with-error nil)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2273 (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
2274 (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
2275 (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
2276 (dolist (dep deps)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2277 (let ((supers (cdadr dep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2278 (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
2279 (if n (incf n))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2280 (antlr-makefile-insert-variable n "" " =")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2281 (if supers
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2282 (insert " "
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2283 (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
2284 (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
2285 (dolist (class-def (caadr dep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2286 (let ((sep gen-sep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2287 (dolist (class-file (cadr lang))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2288 (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
2289 (setq sep " "))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2290 (dolist (evocab (caaddr dep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2291 (let ((sep gen-sep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2292 (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
2293 (car lang)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2294 (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
2295 (setq sep " "))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2296 (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
2297 (insert ": " (car dep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2298 (dolist (ivocab (cdaddr dep))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2299 (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
2300 (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
2301 (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
2302 (dolist (super (cddr glibs))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2303 (insert " " (car super))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2304 (if (cdr super)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2305 (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
2306 (cdr super)))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2307 (insert "\n\t"
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2308 (caddr antlr-makefile-specification)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2309 (car glibs)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2310 " $<\n"
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2311 (car antlr-makefile-specification)))))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2312 (if n
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2313 (let ((i 0))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2314 (antlr-makefile-insert-variable nil "" " =")
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2315 (while (<= (incf i) n)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2316 (antlr-makefile-insert-variable i " $(" ")"))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2317 (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
2318 (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
2319 (backward-delete-char 1))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2320 (when with-error
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2321 (goto-char (point-min))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2322 (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
2323 (unless in-makefile
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2324 (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
2325 (goto-char (point-min))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2326 (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
2327
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2328 ;;;###autoload
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2329 (defun antlr-show-makefile-rules ()
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2330 "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
2331 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
2332 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
2333 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
2334 \\[yank].
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2335
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2336 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
2337 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
2338 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
2339 the rules.
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2340
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2341 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
2342 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
2343 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
2344 *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
2345 (interactive)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2346 (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
2347 (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
2348 (push-mark)
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2349 (antlr-insert-makefile-rules t)))
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2350
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2351
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2352 ;;;===========================================================================
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2353 ;;; Indentation
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2354 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2355
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2356 (defun antlr-indent-line ()
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2357 "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
2358 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
2359 multiplied by:
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2360 - the level of the paren/brace/bracket depth,
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2361 - 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
2362 exception part,
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2363 - 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
2364 line starting from the first non-whitespace.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2365
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2366 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
2367 `antlr-indent-comment'.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2368
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2369 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
2370 area are indented by `c-indent-line'.
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2371
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2372 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
2373 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
2374 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
2375
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2376 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
2377 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
2378 (save-restriction
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2379 (let ((orig (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2380 (min0 (point-min))
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2381 bol boi indent syntax cc-syntax)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2382 (widen)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2383 (beginning-of-line)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2384 (setq bol (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2385 (if (< bol min0)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2386 (error "Beginning of current line not visible"))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2387 (skip-chars-forward " \t")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2388 (setq boi (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2389 ;; check syntax at beginning of indentation ----------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2390 (antlr-with-syntax-table antlr-action-syntax-table
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
2391 (antlr-invalidate-context-cache)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2392 (setq syntax (antlr-syntactic-context))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2393 (cond ((symbolp syntax)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2394 (setq indent nil)) ; block-comments, strings, (comments)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2395 ((progn
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2396 (antlr-next-rule -1 t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2397 (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
2398 (setq indent 0)) ; in rule header
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2399 ((if (antlr-search-forward ";") (< boi (point)) t)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2400 (setq indent 2)) ; in rule body
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2401 (t
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2402 (forward-char)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2403 (antlr-skip-exception-part nil)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2404 (setq indent (if (> (point) boi) 1 0))))) ; in exception part?
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2405 ;; check whether to use indentation engine of cc-mode ------------------
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2406 (antlr-invalidate-context-cache)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2407 (goto-char boi)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2408 (when (and indent (> syntax 0))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2409 (cond ((> syntax 1) ; block in action => use cc-mode
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2410 (setq indent nil))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2411 ((and (= indent 0)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2412 (assq antlr-language antlr-indent-at-bol-alist)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2413 (looking-at (cdr (assq antlr-language
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2414 antlr-indent-at-bol-alist))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2415 (setq syntax 'bol))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2416 ((setq cc-syntax (c-guess-basic-syntax))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2417 (let ((cc cc-syntax) symbol)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2418 (while (setq symbol (pop cc))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2419 (when (cdr symbol)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2420 (or (memq (car symbol)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2421 antlr-disabling-cc-syntactic-symbols)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2422 (setq indent nil))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2423 (setq cc nil)))))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2424 ;;; ((= indent 1) ; exception part => use cc-mode
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2425 ;;; (setq indent nil))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2426 ;;; ((save-restriction ; not in option part => cc-mode
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2427 ;;; (goto-char (scan-lists (point) -1 1))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2428 ;;; (skip-chars-backward " \t\n")
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2429 ;;; (narrow-to-region (point-min) (point))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2430 ;;; (not (re-search-backward "\\<options\\'" nil t)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2431 ;;; (setq indent nil)))))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2432 ;; compute the corresponding indentation and indent --------------------
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2433 (if (null indent)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2434 ;; 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
2435 (progn
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2436 (goto-char orig)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2437 (if (or (numberp syntax)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2438 (if (eq syntax 'string) nil (eq antlr-indent-comment t)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2439 (c-indent-line cc-syntax)))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2440 ;; do it ourselves
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2441 (goto-char boi)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2442 (unless (symbolp syntax) ; direct indentation
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2443 ;;(antlr-invalidate-context-cache)
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2444 (incf indent (antlr-syntactic-context))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2445 (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
2446 (setq indent (* indent c-basic-offset)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2447 ;; the usual major-mode indent stuff ---------------------------------
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2448 (setq orig (- (point-max) orig))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2449 (unless (= (current-column) indent)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2450 (delete-region bol boi)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2451 (beginning-of-line)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2452 (indent-to indent))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2453 ;; 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
2454 ;; 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
2455 (if (> (- (point-max) orig) (point))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2456 (goto-char (- (point-max) orig)))))))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2457
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2458 (defun antlr-indent-command (&optional arg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2459 "Indent the current line or insert tabs/spaces.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2460 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
2461 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
2462 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
2463 (interactive "*P")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2464 (if (or arg (eq last-command 'antlr-indent-command))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2465 (insert-tab arg)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2466 (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
2467 (antlr-indent-line))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2468
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2469 (defun antlr-electric-character (&optional arg)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2470 "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
2471 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
2472 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
2473
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2474 * 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
2475 * 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
2476 beginning of the line, or
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2477 * 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
2478 actions.
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2479
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2480 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
2481 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
2482 `antlr-indent-item-regexp'."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2483 (interactive "*P")
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2484 (if (or arg
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2485 (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
2486 (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
2487 (antlr-invalidate-context-cache)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2488 (let ((context (antlr-syntactic-context)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2489 (not (and (numberp context)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2490 (or (zerop context)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2491 (memq last-command-char '(?\{ ?\}))))))))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2492 (self-insert-command (prefix-numeric-value arg))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2493 (self-insert-command (prefix-numeric-value arg))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2494 (antlr-indent-line)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2495
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2496
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2497 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2498 ;;; Mode entry
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2499 ;;;===========================================================================
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2500
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2501 (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
2502 "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
2503 (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
2504 (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
2505 (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
2506 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
2507 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
2508 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
2509 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
2510 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
2511 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
2512 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
2513 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
2514 ))
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2515 (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
2516 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
2517 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
2518 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
2519 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
2520 c-method-key nil
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2521 c-baseclass-key nil
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2522 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
2523 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
2524 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
2525 )))))
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2526 (while settings
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2527 (when (boundp (car settings))
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2528 (ignore-errors
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2529 (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
2530 (setq settings (cddr settings)))))
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2531
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2532 (defun antlr-c-common-init ()
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2533 "Like `c-basic-common-init' when using cc-mode before v5.30."
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2534 ;; X/Emacs 20 only
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2535 (make-local-variable 'paragraph-start)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2536 (make-local-variable 'paragraph-separate)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2537 (make-local-variable 'paragraph-ignore-fill-prefix)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2538 (make-local-variable 'require-final-newline)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2539 (make-local-variable 'parse-sexp-ignore-comments)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2540 (make-local-variable 'comment-start)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2541 (make-local-variable 'comment-multi-line)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2542 (make-local-variable 'outline-regexp)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2543 (make-local-variable 'outline-level)
41802
9e2500e4b5a9 (antlr-c-common-init): Undo last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41775
diff changeset
2544 (make-local-variable 'adaptive-fill-regexp)
9e2500e4b5a9 (antlr-c-common-init): Undo last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41775
diff changeset
2545 (make-local-variable 'adaptive-fill-mode)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2546 (make-local-variable 'imenu-generic-expression) ;set in the mode functions
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2547 (and (boundp 'comment-line-break-function)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2548 (make-local-variable 'comment-line-break-function))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2549 ;; Emacs 19.30 and beyond only, AFAIK
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2550 (if (boundp 'fill-paragraph-function)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2551 (progn
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2552 (make-local-variable 'fill-paragraph-function)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2553 (setq fill-paragraph-function 'c-fill-paragraph)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2554 ;; now set their values
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2555 (setq paragraph-start (concat page-delimiter "\\|$")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2556 paragraph-separate paragraph-start
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2557 paragraph-ignore-fill-prefix t
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2558 parse-sexp-ignore-comments t
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2559 comment-column 32
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2560 comment-multi-line nil
41802
9e2500e4b5a9 (antlr-c-common-init): Undo last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41775
diff changeset
2561 comment-line-break-function 'c-comment-line-break-function
9e2500e4b5a9 (antlr-c-common-init): Undo last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41775
diff changeset
2562 adaptive-fill-regexp nil
9e2500e4b5a9 (antlr-c-common-init): Undo last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41775
diff changeset
2563 adaptive-fill-mode nil)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2564 (c-set-style (or antlr-indent-style "gnu"))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2565 (and (boundp 'c-current-comment-prefix) (boundp 'c-comment-prefix-regexp)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2566 (setq c-current-comment-prefix
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2567 (if (listp c-comment-prefix-regexp)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2568 (cdr-safe (or (assoc major-mode c-comment-prefix-regexp)
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2569 (assoc 'other c-comment-prefix-regexp)))
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2570 c-comment-prefix-regexp)))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2571 ;; we have to do something special for c-offsets-alist so that the
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2572 ;; buffer local value has its own alist structure.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2573 (setq c-offsets-alist (copy-alist c-offsets-alist))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2574 ;; setup the comment indent variable in a Emacs version portable way
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2575 ;; ignore any byte compiler warnings you might get here
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2576 (make-local-variable 'comment-indent-function)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2577 (setq comment-indent-function 'c-comment-indent))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2578
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2579 (defun antlr-language-option (search)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2580 "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
2581 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
2582 the default language."
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2583 (let ((value (and search
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2584 (save-excursion
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2585 (goto-char (point-min))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2586 (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
2587 (car antlr-language-limit-n-regexp)
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2588 t))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2589 (match-string 1)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2590 (seq antlr-language-alist)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2591 r)
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2592 ;; 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
2593 (while seq
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2594 (setq r (pop seq))
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2595 (if (member value (cddr r))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2596 (setq seq nil) ; stop
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2597 (setq r nil))) ; no result yet
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2598 (car r)))
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2599
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2600 ;;;###autoload
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2601 (defun antlr-mode ()
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2602 "Major mode for editing ANTLR grammar files.
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2603 \\{antlr-mode-map}"
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2604 (interactive)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2605 (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
2606 (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
2607 (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
2608 (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
2609 ;; ANTLR specific ----------------------------------------------------------
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2610 (setq major-mode 'antlr-mode
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2611 mode-name "Antlr")
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2612 (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
2613 (unless antlr-mode-syntax-table
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2614 (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
2615 (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
2616 (set-syntax-table antlr-mode-syntax-table)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2617 (unless antlr-action-syntax-table
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2618 (let ((slist (nth 3 antlr-font-lock-defaults)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2619 (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
2620 (copy-syntax-table antlr-mode-syntax-table))
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2621 (while slist
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2622 (modify-syntax-entry (caar slist) (cdar slist)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2623 antlr-action-syntax-table)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2624 (setq slist (cdr slist)))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2625 (use-local-map antlr-mode-map)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2626 (make-local-variable 'antlr-language)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2627 (unless antlr-language
42249
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2628 (setq antlr-language
50adfc6e47b2 More sophisticated indentation of cpp directive.
Richard M. Stallman <rms@gnu.org>
parents: 41802
diff changeset
2629 (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
2630 (if (stringp (cadr (assq antlr-language antlr-language-alist)))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2631 (setq mode-name
29289
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
2632 (concat "Antlr."
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2633 (cadr (assq antlr-language antlr-language-alist)))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2634 ;; 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
2635 (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
2636 (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
2637 (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
2638 ((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
2639 (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
2640 (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
2641 ((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
2642 (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
2643 (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
2644 (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
2645 (antlr-c-init-language-vars))) ; do it myself
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2646 (cond ((fboundp 'c-basic-common-init) ; cc-mode 5.30+
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2647 (c-basic-common-init antlr-language (or antlr-indent-style "gnu")))
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2648 (t
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2649 (antlr-c-common-init)))
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2650 (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
2651 (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
2652 (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
2653 (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
2654 (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
2655 (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
2656 outline-level 'c-outline-level) ; TODO: define own
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2657 (setq require-final-newline t)
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2658 (setq indent-line-function 'antlr-indent-line
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2659 indent-region-function nil) ; too lazy
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2660 (setq comment-start "// "
52890
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2661 comment-end ""
51328ad3b6be Make major mode work with cc-mode-5.30+.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2662 comment-start-skip "/\\*+ *\\|// *")
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2663 ;; various -----------------------------------------------------------------
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2664 (make-local-variable 'font-lock-defaults)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2665 (setq font-lock-defaults antlr-font-lock-defaults)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2666 (easy-menu-add antlr-mode-menu)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2667 (make-local-variable 'imenu-create-index-function)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2668 (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
2669 (make-local-variable 'imenu-generic-expression)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2670 (setq imenu-generic-expression t) ; fool stupid test
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2671 (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
2672 (fboundp 'imenu-add-to-menubar)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2673 (imenu-add-to-menubar
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2674 (if (stringp antlr-imenu-name) antlr-imenu-name "Index")))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2675 (antlr-set-tabs)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2676 (run-hooks 'antlr-mode-hook))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2677
34011
075cc818f566 New commands to run ANTLR from within Emacs and
Gerd Moellmann <gerd@gnu.org>
parents: 29289
diff changeset
2678 ;; 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
2679 ;; 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
2680 ;; 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
2681 (put 'antlr-mode 'mode-name "Antlr")
9ad79f5782af New commands: hide/unhide actions,
Gerd Moellmann <gerd@gnu.org>
parents: 26965
diff changeset
2682
26542
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2683 ;;;###autoload
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2684 (defun antlr-set-tabs ()
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2685 "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
2686 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
2687 (if buffer-file-name
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2688 (let ((alist antlr-tab-offset-alist) elem)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2689 (while alist
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2690 (setq elem (pop alist))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2691 (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
2692 (or (null (cadr elem))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2693 (string-match (cadr elem) buffer-file-name))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2694 (setq tab-width (caddr elem)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2695 indent-tabs-mode (cadddr elem)
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2696 alist nil))))))
0d41332e3819 Major mode for ANTLR grammar files.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2697
49554
b5fb8cfb32a9 Version 2.2b
Juanma Barranquero <lekktu@gmail.com>
parents: 48802
diff changeset
2698 ;;; Local IspellPersDict: .ispell_antlr
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49598
diff changeset
2699
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49598
diff changeset
2700 ;;; 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
2701 ;;; antlr-mode.el ends here