annotate lisp/progmodes/antlr-mode.el @ 112402:a102f5772eaa

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