annotate lisp/cedet/semantic/grammar.el @ 111445:56b71cddc9c5

Replace still more end-of-line etc with line-end-position, etc. * lisp/gnus/nnbabyl.el (nnbabyl-request-move-article, nnbabyl-delete-mail) (nnbabyl-check-mbox): Use point-at-bol. * lisp/cedet/semantic/lex.el (semantic-lex-ignore-comments, semantic-flex): * lisp/cedet/semantic/grammar.el (semantic-grammar-epilogue): * lisp/cedet/ede/speedbar.el (ede-find-nearest-file-line): * lisp/cedet/ede/pmake.el (ede-proj-makefile-insert-dist-rules): * lisp/cedet/ede/autoconf-edit.el (autoconf-delete-parameter): Use point-at-bol and point-at-eol. * lisp/vc/emerge.el (emerge-line-number-in-buf): * lisp/textmodes/ispell.el (ispell-region): * lisp/textmodes/fill.el (current-fill-column): * lisp/progmodes/xscheme.el (xscheme-send-current-line): * lisp/progmodes/vhdl-mode.el (vhdl-current-line, vhdl-line-copy): * lisp/progmodes/tcl.el (tcl-hairy-scan-for-comment): * lisp/progmodes/sh-script.el (sh-handle-prev-do): * lisp/progmodes/meta-mode.el (meta-indent-line): * lisp/progmodes/idlwave.el (idlwave-goto-comment, idlwave-fill-paragraph) (idlwave-in-quote): * lisp/progmodes/idlw-shell.el (idlwave-shell-current-frame) (idlwave-shell-update-bp-overlays, idlwave-shell-sources-filter): * lisp/progmodes/fortran.el (fortran-looking-at-if-then): * lisp/progmodes/etags.el (find-tag-in-order, etags-snarf-tag): * lisp/progmodes/cperl-mode.el (cperl-sniff-for-indent) (cperl-find-pods-heres): * lisp/progmodes/ada-mode.el (ada-get-current-indent, ada-narrow-to-defun): * lisp/net/quickurl.el (quickurl-list-insert): * lisp/net/ldap.el (ldap-search-internal): * lisp/net/eudc.el (eudc-expand-inline): * lisp/mail/sendmail.el (sendmail-send-it): * lisp/mail/mspools.el (mspools-visit-spool, mspools-get-spool-name): * lisp/emulation/viper-cmd.el (viper-paren-match, viper-backward-indent) (viper-brac-function): * lisp/calc/calc-yank.el (calc-do-grab-region): * lisp/calc/calc-keypd.el (calc-keypad-press): * lisp/term.el (term-move-columns, term-insert-spaces): * lisp/speedbar.el (speedbar-highlight-one-tag-line): * lisp/simple.el (current-word): * lisp/mouse-drag.el (mouse-drag-should-do-col-scrolling): * lisp/info.el (Info-find-node-in-buffer-1, Info-follow-reference) (Info-scroll-down): * lisp/hippie-exp.el (he-line-beg): * lisp/epa.el (epa--marked-keys): * lisp/dired-aux.el (dired-kill-line, dired-do-kill-lines) (dired-update-file-line, dired-add-entry, dired-remove-entry) (dired-relist-entry): * lisp/buff-menu.el (Buffer-menu-buffer): * lisp/array.el (current-line): * lisp/allout.el (allout-resolve-xref) (allout-latex-verbatim-quote-curr-line): Replace yet more uses of end-of-line etc with line-end-position.
author Glenn Morris <rgm@gnu.org>
date Mon, 08 Nov 2010 21:33:07 -0800
parents 9814473572d4
children 417b1e4d63cd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
104524
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1 ;;; semantic/grammar.el --- Major mode framework for Semantic grammars
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 105799
diff changeset
3 ;; Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
105340
118ad0cdd9a8 Doc/message fixes.
Glenn Morris <rgm@gnu.org>
parents: 105260
diff changeset
4 ;; Free Software Foundation, Inc.
104524
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
5
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
6 ;; Author: David Ponce <david@dponce.com>
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
7 ;; Maintainer: David Ponce <david@dponce.com>
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
8
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
10
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
13 ;; the Free Software Foundation, either version 3 of the License, or
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
14 ;; (at your option) any later version.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
15
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
19 ;; GNU General Public License for more details.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
20
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
23
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
24 ;;; Commentary:
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
25 ;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
26 ;; Major mode framework for editing Semantic's input grammar files.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
27
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
28 ;;; History:
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
29 ;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
30
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
31 ;;; Code:
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
32
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
33 (require 'semantic)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
34 (require 'semantic/ctxt)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
35 (require 'semantic/format)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
36 (require 'semantic/grammar-wy)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
37 (require 'semantic/idle)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
38 (declare-function semantic-momentary-highlight-tag "semantic/decorate")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
39 (declare-function semantic-analyze-context "semantic/analyze")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
40 (declare-function semantic-analyze-tags-of-class-list
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
41 "semantic/analyze/complete")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
42
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
43 (eval-when-compile
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
44 (require 'eldoc)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
45 (require 'semantic/edit)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
46 (require 'semantic/find))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
47
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
48
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
49 ;;;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
50 ;;;; Set up lexer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
51 ;;;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
52
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
53 (defconst semantic-grammar-lex-c-char-re "'\\s\\?.'"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
54 "Regexp matching C-like character literals.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
55
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
56 ;; Most of the analyzers are auto-generated from the grammar, but the
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
57 ;; following which need special handling code.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
58 ;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
59 (define-lex-regex-analyzer semantic-grammar-lex-prologue
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
60 "Detect and create a prologue token."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
61 "\\<%{"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
62 ;; Zing to the end of this brace block.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
63 (semantic-lex-push-token
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
64 (semantic-lex-token
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
65 'PROLOGUE (point)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
66 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
67 (semantic-lex-unterminated-syntax-protection 'PROLOGUE
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
68 (forward-char)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
69 (forward-sexp 1)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
70 (point))))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
71
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
72 (defsubst semantic-grammar-epilogue-start ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
73 "Return the start position of the grammar epilogue."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
74 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
75 (goto-char (point-min))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
76 (if (re-search-forward "^\\s-*\\<%%\\>\\s-*$" nil t 2)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
77 (match-beginning 0)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
78 (1+ (point-max)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
79
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
80 (define-lex-regex-analyzer semantic-grammar-lex-epilogue
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
81 "Detect and create an epilogue or percent-percent token."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
82 "\\<%%\\>"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
83 (let ((start (match-beginning 0))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
84 (end (match-end 0))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
85 (class 'PERCENT_PERCENT))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
86 (when (>= start (semantic-grammar-epilogue-start))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
87 (setq class 'EPILOGUE
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
88 end (point-max)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
89 (semantic-lex-push-token
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
90 (semantic-lex-token class start end))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
91
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
92 (define-lex semantic-grammar-lexer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
93 "Lexical analyzer that handles Semantic grammar buffers.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
94 It ignores whitespaces, newlines and comments."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
95 semantic-lex-ignore-newline
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
96 semantic-lex-ignore-whitespace
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
97 ;; Must detect prologue/epilogue before other symbols/keywords!
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
98 semantic-grammar-lex-prologue
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
99 semantic-grammar-lex-epilogue
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
100 semantic-grammar-wy--<keyword>-keyword-analyzer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
101 semantic-grammar-wy--<symbol>-regexp-analyzer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
102 semantic-grammar-wy--<char>-regexp-analyzer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
103 semantic-grammar-wy--<string>-sexp-analyzer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
104 ;; Must detect comments after strings because `comment-start-skip'
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
105 ;; regexp match semicolons inside strings!
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
106 semantic-lex-ignore-comments
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
107 ;; Must detect prefixed list before punctuation because prefix chars
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
108 ;; are also punctuations!
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
109 semantic-grammar-wy--<qlist>-sexp-analyzer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
110 ;; Must detect punctuations after comments because the semicolon can
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
111 ;; be a punctuation or a comment start!
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
112 semantic-grammar-wy--<punctuation>-string-analyzer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
113 semantic-grammar-wy--<block>-block-analyzer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
114 semantic-grammar-wy--<sexp>-sexp-analyzer)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
115
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
116 ;;; Test the lexer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
117 ;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
118 (defun semantic-grammar-lex-buffer ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
119 "Run `semantic-grammar-lex' on current buffer."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
120 (interactive)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
121 (semantic-lex-init)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
122 (setq semantic-lex-analyzer 'semantic-grammar-lexer)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
123 (let ((token-stream
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
124 (semantic-lex (point-min) (point-max))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
125 (with-current-buffer (get-buffer-create "*semantic-grammar-lex*")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
126 (erase-buffer)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
127 (pp token-stream (current-buffer))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
128 (goto-char (point-min))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
129 (pop-to-buffer (current-buffer)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
130
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
131 ;;;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
132 ;;;; Semantic action expansion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
133 ;;;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
134
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
135 (defun semantic-grammar-ASSOC (&rest args)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
136 "Return expansion of built-in ASSOC expression.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
137 ARGS are ASSOC's key value list."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
138 (let ((key t))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
139 `(semantic-tag-make-assoc-list
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
140 ,@(mapcar #'(lambda (i)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
141 (prog1
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
142 (if key
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
143 (list 'quote i)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
144 i)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
145 (setq key (not key))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
146 args))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
147
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
148 (defsubst semantic-grammar-quote-p (sym)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
149 "Return non-nil if SYM is bound to the `quote' function."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
150 (condition-case nil
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
151 (eq (indirect-function sym)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
152 (indirect-function 'quote))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
153 (error nil)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
154
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
155 (defsubst semantic-grammar-backquote-p (sym)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
156 "Return non-nil if SYM is bound to the `backquote' function."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
157 (condition-case nil
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
158 (eq (indirect-function sym)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
159 (indirect-function 'backquote))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
160 (error nil)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
161
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
162 ;;;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
163 ;;;; API to access grammar tags
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
164 ;;;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
165
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
166 (define-mode-local-override semantic-tag-components
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
167 semantic-grammar-mode (tag)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
168 "Return the children of tag TAG."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
169 (semantic-tag-get-attribute tag :children))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
170
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
171 (defun semantic-grammar-first-tag-name (class)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
172 "Return the name of the first tag of class CLASS found.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
173 Warn if other tags of class CLASS exist."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
174 (let* ((tags (semantic-find-tags-by-class
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
175 class (current-buffer))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
176 (if tags
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
177 (prog1
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
178 (semantic-tag-name (car tags))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
179 (if (cdr tags)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
180 (message "*** Ignore all but first declared %s"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
181 class))))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
182
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
183 (defun semantic-grammar-tag-symbols (class)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
184 "Return the list of symbols defined in tags of class CLASS.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
185 That is tag names plus names defined in tag attribute `:rest'."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
186 (let* ((tags (semantic-find-tags-by-class
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
187 class (current-buffer))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
188 (apply 'append
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
189 (mapcar
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
190 #'(lambda (tag)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
191 (mapcar
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
192 'intern
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
193 (cons (semantic-tag-name tag)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
194 (semantic-tag-get-attribute tag :rest))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
195 tags))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
196
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
197 (defsubst semantic-grammar-item-text (item)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
198 "Return the readable string form of ITEM."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
199 (if (string-match semantic-grammar-lex-c-char-re item)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
200 (concat "?" (substring item 1 -1))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
201 item))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
202
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
203 (defsubst semantic-grammar-item-value (item)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
204 "Return symbol or character value of ITEM string."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
205 (if (string-match semantic-grammar-lex-c-char-re item)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
206 (let ((c (read (concat "?" (substring item 1 -1)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
207 (if (featurep 'xemacs)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
208 ;; Handle characters as integers in XEmacs like in GNU Emacs.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
209 (char-int c)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
210 c))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
211 (intern item)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
212
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
213 (defun semantic-grammar-prologue ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
214 "Return grammar prologue code as a string value."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
215 (let ((tag (semantic-find-first-tag-by-name
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
216 "prologue"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
217 (semantic-find-tags-by-class 'code (current-buffer)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
218 (if tag
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
219 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
220 (concat
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
221 (buffer-substring
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
222 (progn
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
223 (goto-char (semantic-tag-start tag))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
224 (skip-chars-forward "%{\r\n\t ")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
225 (point))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
226 (progn
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
227 (goto-char (semantic-tag-end tag))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
228 (skip-chars-backward "\r\n\t %}")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
229 (point)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
230 "\n"))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
231 "")))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
232
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
233 (defun semantic-grammar-epilogue ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
234 "Return grammar epilogue code as a string value."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
235 (let ((tag (semantic-find-first-tag-by-name
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
236 "epilogue"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
237 (semantic-find-tags-by-class 'code (current-buffer)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
238 (if tag
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
239 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
240 (concat
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
241 (buffer-substring
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
242 (progn
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
243 (goto-char (semantic-tag-start tag))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
244 (skip-chars-forward "%\r\n\t ")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
245 (point))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
246 (progn
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
247 (goto-char (semantic-tag-end tag))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
248 (skip-chars-backward "\r\n\t")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
249 ;; If a grammar footer is found, skip it.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
250 (re-search-backward "^;;;\\s-+\\S-+\\s-+ends here"
111445
56b71cddc9c5 Replace still more end-of-line etc with line-end-position, etc.
Glenn Morris <rgm@gnu.org>
parents: 110827
diff changeset
251 (point-at-bol) t)
104524
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
252 (skip-chars-backward "\r\n\t")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
253 (point)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
254 "\n"))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
255 "")))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
256
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
257 (defsubst semantic-grammar-buffer-file (&optional buffer)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
258 "Return name of file sans directory BUFFER is visiting.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
259 No argument or nil as argument means use the current buffer."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
260 (file-name-nondirectory (buffer-file-name buffer)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
261
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
262 (defun semantic-grammar-package ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
263 "Return the %package value as a string.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
264 If there is no %package statement in the grammar, return a default
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
265 package name derived from the grammar file name. For example, the
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
266 default package name for the grammar file foo.wy is foo-wy, and for
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
267 foo.by it is foo-by."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
268 (or (semantic-grammar-first-tag-name 'package)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
269 (let* ((file (semantic-grammar-buffer-file))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
270 (ext (file-name-extension file))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
271 (i (string-match (format "\\([.]\\)%s\\'" ext) file)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
272 (concat (substring file 0 i) "-" ext))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
273
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
274 (defsubst semantic-grammar-languagemode ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
275 "Return the %languagemode value as a list of symbols or nil."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
276 (semantic-grammar-tag-symbols 'languagemode))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
277
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
278 (defsubst semantic-grammar-start ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
279 "Return the %start value as a list of symbols or nil."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
280 (semantic-grammar-tag-symbols 'start))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
281
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
282 (defsubst semantic-grammar-scopestart ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
283 "Return the %scopestart value as a symbol or nil."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
284 (intern (or (semantic-grammar-first-tag-name 'scopestart) "nil")))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
285
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
286 (defsubst semantic-grammar-quotemode ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
287 "Return the %quotemode value as a symbol or nil."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
288 (intern (or (semantic-grammar-first-tag-name 'quotemode) "nil")))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
289
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
290 (defsubst semantic-grammar-keywords ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
291 "Return the language keywords.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
292 That is an alist of (VALUE . TOKEN) where VALUE is the string value of
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
293 the keyword and TOKEN is the terminal symbol identifying the keyword."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
294 (mapcar
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
295 #'(lambda (key)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
296 (cons (semantic-tag-get-attribute key :value)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
297 (intern (semantic-tag-name key))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
298 (semantic-find-tags-by-class 'keyword (current-buffer))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
299
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
300 (defun semantic-grammar-keyword-properties (keywords)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
301 "Return the list of KEYWORDS properties."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
302 (let ((puts (semantic-find-tags-by-class
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
303 'put (current-buffer)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
304 put keys key plist assoc pkey pval props)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
305 (while puts
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
306 (setq put (car puts)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
307 puts (cdr puts)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
308 keys (mapcar
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
309 'intern
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
310 (cons (semantic-tag-name put)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
311 (semantic-tag-get-attribute put :rest))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
312 (while keys
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
313 (setq key (car keys)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
314 keys (cdr keys)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
315 assoc (rassq key keywords))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
316 (if (null assoc)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
317 nil ;;(message "*** %%put to undefined keyword %s ignored" key)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
318 (setq key (car assoc)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
319 plist (semantic-tag-get-attribute put :value))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
320 (while plist
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
321 (setq pkey (intern (caar plist))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
322 pval (read (cdar plist))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
323 props (cons (list key pkey pval) props)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
324 plist (cdr plist))))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
325 props))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
326
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
327 (defun semantic-grammar-tokens ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
328 "Return defined lexical tokens.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
329 That is an alist (TYPE . DEFS) where type is a %token <type> symbol
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
330 and DEFS is an alist of (TOKEN . VALUE). TOKEN is the terminal symbol
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
331 identifying the token and VALUE is the string value of the token or
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
332 nil."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
333 (let (tags alist assoc tag type term names value)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
334
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
335 ;; Check for <type> in %left, %right & %nonassoc declarations
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
336 (setq tags (semantic-find-tags-by-class
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
337 'assoc (current-buffer)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
338 (while tags
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
339 (setq tag (car tags)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
340 tags (cdr tags))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
341 (when (setq type (semantic-tag-type tag))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
342 (setq names (semantic-tag-get-attribute tag :value)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
343 assoc (assoc type alist))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
344 (or assoc (setq assoc (list type)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
345 alist (cons assoc alist)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
346 (while names
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
347 (setq term (car names)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
348 names (cdr names))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
349 (or (string-match semantic-grammar-lex-c-char-re term)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
350 (setcdr assoc (cons (list (intern term))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
351 (cdr assoc)))))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
352
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
353 ;; Then process %token declarations so they can override any
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
354 ;; previous specifications
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
355 (setq tags (semantic-find-tags-by-class
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
356 'token (current-buffer)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
357 (while tags
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
358 (setq tag (car tags)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
359 tags (cdr tags))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
360 (setq names (cons (semantic-tag-name tag)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
361 (semantic-tag-get-attribute tag :rest))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
362 type (or (semantic-tag-type tag) "<no-type>")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
363 value (semantic-tag-get-attribute tag :value)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
364 assoc (assoc type alist))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
365 (or assoc (setq assoc (list type)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
366 alist (cons assoc alist)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
367 (while names
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
368 (setq term (intern (car names))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
369 names (cdr names))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
370 (setcdr assoc (cons (cons term value) (cdr assoc)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
371 alist))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
372
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
373 (defun semantic-grammar-token-%type-properties (&optional props)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
374 "Return properties set by %type statements.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
375 This declare a new type if necessary.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
376 If optional argument PROPS is non-nil, it is an existing list of
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
377 properties where to add new properties."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
378 (let (type)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
379 (dolist (tag (semantic-find-tags-by-class 'type (current-buffer)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
380 (setq type (semantic-tag-name tag))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
381 ;; Indicate to auto-generate the analyzer for this type
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
382 (push (list type :declared t) props)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
383 (dolist (e (semantic-tag-get-attribute tag :value))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
384 (push (list type (intern (car e)) (read (or (cdr e) "nil")))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
385 props)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
386 props))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
387
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
388 (defun semantic-grammar-token-%put-properties (tokens)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
389 "For types found in TOKENS, return properties set by %put statements."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
390 (let (found props)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
391 (dolist (put (semantic-find-tags-by-class 'put (current-buffer)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
392 (dolist (type (cons (semantic-tag-name put)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
393 (semantic-tag-get-attribute put :rest)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
394 (setq found (assoc type tokens))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
395 (if (null found)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
396 nil ;; %put <type> ignored, no token defined
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
397 (setq type (car found))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
398 (dolist (e (semantic-tag-get-attribute put :value))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
399 (push (list type (intern (car e)) (read (or (cdr e) "nil")))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
400 props)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
401 props))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
402
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
403 (defsubst semantic-grammar-token-properties (tokens)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
404 "Return properties of declared types.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
405 Types are explicitly declared by %type statements. Types found in
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
406 TOKENS are those declared implicitly by %token statements.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
407 Properties can be set by %put and %type statements.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
408 Properties set by %type statements take precedence over those set by
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
409 %put statements."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
410 (let ((props (semantic-grammar-token-%put-properties tokens)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
411 (semantic-grammar-token-%type-properties props)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
412
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
413 (defun semantic-grammar-use-macros ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
414 "Return macro definitions from %use-macros statements.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
415 Also load the specified macro libraries."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
416 (let (lib defs)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
417 (dolist (tag (semantic-find-tags-by-class 'macro (current-buffer)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
418 (setq lib (intern (semantic-tag-type tag)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
419 (condition-case nil
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
420 ;;(load lib) ;; Be sure to use the latest macro library.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
421 (require lib)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
422 (error nil))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
423 (dolist (mac (semantic-tag-get-attribute tag :value))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
424 (push (cons (intern mac)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
425 (intern (format "%s-%s" lib mac)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
426 defs)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
427 (nreverse defs)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
428
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
429 (defvar semantic-grammar-macros nil
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
430 "List of associations (MACRO-NAME . EXPANDER).")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
431 (make-variable-buffer-local 'semantic-grammar-macros)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
432
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
433 (defun semantic-grammar-macros ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
434 "Build and return the alist of defined macros."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
435 (append
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
436 ;; Definitions found in tags.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
437 (semantic-grammar-use-macros)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
438 ;; Other pre-installed definitions.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
439 semantic-grammar-macros))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
440
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
441 ;;;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
442 ;;;; Overloaded functions that build parser data.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
443 ;;;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
444
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
445 ;;; Keyword table builder
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
446 ;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
447 (defun semantic-grammar-keywordtable-builder-default ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
448 "Return the default value of the keyword table."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
449 (let ((keywords (semantic-grammar-keywords)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
450 `(semantic-lex-make-keyword-table
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
451 ',keywords
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
452 ',(semantic-grammar-keyword-properties keywords))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
453
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
454 (define-overloadable-function semantic-grammar-keywordtable-builder ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
455 "Return the keyword table table value.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
456
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
457 ;;; Token table builder
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
458 ;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
459 (defun semantic-grammar-tokentable-builder-default ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
460 "Return the default value of the table of lexical tokens."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
461 (let ((tokens (semantic-grammar-tokens)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
462 `(semantic-lex-make-type-table
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
463 ',tokens
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
464 ',(semantic-grammar-token-properties tokens))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
465
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
466 (define-overloadable-function semantic-grammar-tokentable-builder ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
467 "Return the value of the table of lexical tokens.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
468
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
469 ;;; Parser table builder
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
470 ;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
471 (defun semantic-grammar-parsetable-builder-default ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
472 "Return the default value of the parse table."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
473 (error "`semantic-grammar-parsetable-builder' not defined"))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
474
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
475 (define-overloadable-function semantic-grammar-parsetable-builder ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
476 "Return the parser table value.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
477
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
478 ;;; Parser setup code builder
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
479 ;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
480 (defun semantic-grammar-setupcode-builder-default ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
481 "Return the default value of the setup code form."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
482 (error "`semantic-grammar-setupcode-builder' not defined"))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
483
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
484 (define-overloadable-function semantic-grammar-setupcode-builder ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
485 "Return the parser setup code form.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
486
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
487 ;;;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
488 ;;;; Lisp code generation
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
489 ;;;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
490 (defvar semantic--grammar-input-buffer nil)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
491 (defvar semantic--grammar-output-buffer nil)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
492
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
493 (defsubst semantic-grammar-keywordtable ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
494 "Return the variable name of the keyword table."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
495 (concat (file-name-sans-extension
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
496 (semantic-grammar-buffer-file
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
497 semantic--grammar-output-buffer))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
498 "--keyword-table"))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
499
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
500 (defsubst semantic-grammar-tokentable ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
501 "Return the variable name of the token table."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
502 (concat (file-name-sans-extension
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
503 (semantic-grammar-buffer-file
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
504 semantic--grammar-output-buffer))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
505 "--token-table"))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
506
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
507 (defsubst semantic-grammar-parsetable ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
508 "Return the variable name of the parse table."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
509 (concat (file-name-sans-extension
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
510 (semantic-grammar-buffer-file
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
511 semantic--grammar-output-buffer))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
512 "--parse-table"))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
513
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
514 (defsubst semantic-grammar-setupfunction ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
515 "Return the name of the parser setup function."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
516 (concat (file-name-sans-extension
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
517 (semantic-grammar-buffer-file
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
518 semantic--grammar-output-buffer))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
519 "--install-parser"))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
520
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
521 (defmacro semantic-grammar-as-string (object)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
522 "Return OBJECT as a string value."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
523 `(if (stringp ,object)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
524 ,object
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
525 ;;(require 'pp)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
526 (pp-to-string ,object)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
527
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
528 (defun semantic-grammar-insert-defconst (name value docstring)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
529 "Insert declaration of constant NAME with VALUE and DOCSTRING."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
530 (let ((start (point)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
531 (insert (format "(defconst %s\n%s%S)\n\n" name value docstring))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
532 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
533 (goto-char start)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
534 (indent-sexp))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
535
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
536 (defun semantic-grammar-insert-defun (name body docstring)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
537 "Insert declaration of function NAME with BODY and DOCSTRING."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
538 (let ((start (point)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
539 (insert (format "(defun %s ()\n%S\n%s)\n\n" name docstring body))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
540 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
541 (goto-char start)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
542 (indent-sexp))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
543
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
544 (defun semantic-grammar-insert-define (define)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
545 "Insert the declaration specified by DEFINE expression.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
546 Typically a DEFINE expression should look like this:
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
547
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
548 \(define-thing name docstring expression1 ...)"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
549 ;;(require 'pp)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
550 (let ((start (point)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
551 (insert (format "(%S %S" (car define) (nth 1 define)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
552 (dolist (item (nthcdr 2 define))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
553 (insert "\n")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
554 (delete-blank-lines)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
555 (pp item (current-buffer)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
556 (insert ")\n\n")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
557 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
558 (goto-char start)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
559 (indent-sexp))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
560
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
561 (defconst semantic-grammar-header-template
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
562 '("\
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
563 ;;; " file " --- Generated parser support file
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
564
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
565 " copy "
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
566
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
567 ;; Author: " user-full-name " <" user-mail-address ">
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
568 ;; Created: " date "
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
569 ;; Keywords: syntax
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
570 ;; X-RCS: " vcid "
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
571
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
572 ;; This file is not part of GNU Emacs.
107340
e0514072acb0 Update some cedet template copyrights to GPLv3+.
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
573
104524
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
574 ;; This program is free software; you can redistribute it and/or
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
575 ;; modify it under the terms of the GNU General Public License as
107340
e0514072acb0 Update some cedet template copyrights to GPLv3+.
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
576 ;; published by the Free Software Foundation, either version 3 of
e0514072acb0 Update some cedet template copyrights to GPLv3+.
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
577 ;; the License, or (at your option) any later version.
e0514072acb0 Update some cedet template copyrights to GPLv3+.
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
578
104524
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
579 ;; This software is distributed in the hope that it will be useful,
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
580 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
581 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
582 ;; General Public License for more details.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
583 ;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
584 ;; You should have received a copy of the GNU General Public License
107340
e0514072acb0 Update some cedet template copyrights to GPLv3+.
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
585 ;; along with this program. If not, see <http://www.gnu.org/licenses/>.
104524
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
586
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
587 ;;; Commentary:
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
588 ;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
589 ;; PLEASE DO NOT MANUALLY EDIT THIS FILE! It is automatically
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
590 ;; generated from the grammar file " gram ".
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
591
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
592 ;;; History:
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
593 ;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
594
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
595 ;;; Code:
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
596 ")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
597 "Generated header template.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
598 The symbols in the template are local variables in
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
599 `semantic-grammar-header'")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
600
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
601 (defconst semantic-grammar-footer-template
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
602 '("\
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
603
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
604 \(provide '" libr ")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
605
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
606 ;;; " file " ends here
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
607 ")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
608 "Generated footer template.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
609 The symbols in the list are local variables in
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
610 `semantic-grammar-footer'.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
611
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
612 (defun semantic-grammar-copyright-line ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
613 "Return the grammar copyright line, or nil if not found."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
614 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
615 (goto-char (point-min))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
616 (when (re-search-forward "^;;+[ \t]+Copyright (C) .*$"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
617 ;; Search only in the four top lines
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
618 (save-excursion (forward-line 4) (point))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
619 t)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
620 (match-string 0))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
621
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
622 (defun semantic-grammar-header ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
623 "Return text of a generated standard header."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
624 (let ((file (semantic-grammar-buffer-file
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
625 semantic--grammar-output-buffer))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
626 (gram (semantic-grammar-buffer-file))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
627 (date (format-time-string "%Y-%m-%d %T%z"))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
628 (vcid (concat "$" "Id" "$")) ;; Avoid expansion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
629 ;; Try to get the copyright from the input grammar, or
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
630 ;; generate a new one if not found.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
631 (copy (or (semantic-grammar-copyright-line)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
632 (concat (format-time-string ";; Copyright (C) %Y ")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
633 user-full-name)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
634 (out ""))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
635 (dolist (S semantic-grammar-header-template)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
636 (cond ((stringp S)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
637 (setq out (concat out S)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
638 ((symbolp S)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
639 (setq out (concat out (symbol-value S))))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
640 out))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
641
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
642 (defun semantic-grammar-footer ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
643 "Return text of a generated standard footer."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
644 (let* ((file (semantic-grammar-buffer-file
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
645 semantic--grammar-output-buffer))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
646 (libr (file-name-sans-extension file))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
647 (out ""))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
648 (dolist (S semantic-grammar-footer-template)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
649 (cond ((stringp S)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
650 (setq out (concat out S)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
651 ((symbolp S)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
652 (setq out (concat out (symbol-value S))))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
653 out))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
654
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
655 (defun semantic-grammar-token-data ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
656 "Return the string value of the table of lexical tokens."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
657 (semantic-grammar-as-string
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
658 (semantic-grammar-tokentable-builder)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
659
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
660 (defun semantic-grammar-keyword-data ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
661 "Return the string value of the table of keywords."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
662 (semantic-grammar-as-string
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
663 (semantic-grammar-keywordtable-builder)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
664
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
665 (defun semantic-grammar-parser-data ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
666 "Return the parser table as a string value."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
667 (semantic-grammar-as-string
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
668 (semantic-grammar-parsetable-builder)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
669
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
670 (defun semantic-grammar-setup-data ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
671 "Return the parser setup code form as a string value."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
672 (semantic-grammar-as-string
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
673 (semantic-grammar-setupcode-builder)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
674
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
675 ;;; Generation of lexical analyzers.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
676 ;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
677 (defvar semantic-grammar--lex-block-specs)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
678
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
679 (defsubst semantic-grammar--lex-delim-spec (block-spec)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
680 "Return delimiters specification from BLOCK-SPEC."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
681 (condition-case nil
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
682 (let* ((standard-input (cdr block-spec))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
683 (delim-spec (read)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
684 (if (and (consp delim-spec)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
685 (car delim-spec) (symbolp (car delim-spec))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
686 (cadr delim-spec) (symbolp (cadr delim-spec)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
687 delim-spec
105650
0412ef1b2214 (semantic-grammar--lex-delim-spec): All errors should have messages.
Glenn Morris <rgm@gnu.org>
parents: 105377
diff changeset
688 (error "Invalid delimiter")))
104524
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
689 (error
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
690 (error "Invalid delimiters specification %s in block token %s"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
691 (cdr block-spec) (car block-spec)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
692
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
693 (defun semantic-grammar--lex-block-specs ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
694 "Compute lexical block specifications for the current buffer.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
695 Block definitions are read from the current table of lexical types."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
696 (cond
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
697 ;; Block specifications have been parsed and are invalid.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
698 ((eq semantic-grammar--lex-block-specs 'error)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
699 nil
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
700 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
701 ;; Parse block specifications.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
702 ((null semantic-grammar--lex-block-specs)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
703 (condition-case err
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
704 (let* ((blocks (cdr (semantic-lex-type-value "block" t)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
705 (open-delims (cdr (semantic-lex-type-value "open-paren" t)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
706 (close-delims (cdr (semantic-lex-type-value "close-paren" t)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
707 olist clist block-spec delim-spec open-spec close-spec)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
708 (dolist (block-spec blocks)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
709 (setq delim-spec (semantic-grammar--lex-delim-spec block-spec)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
710 open-spec (assq (car delim-spec) open-delims)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
711 close-spec (assq (cadr delim-spec) close-delims))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
712 (or open-spec
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
713 (error "Missing open-paren token %s required by block %s"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
714 (car delim-spec) (car block-spec)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
715 (or close-spec
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
716 (error "Missing close-paren token %s required by block %s"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
717 (cdr delim-spec) (car block-spec)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
718 ;; build alist ((OPEN-DELIM OPEN-SYM BLOCK-SYM) ...)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
719 (push (list (cdr open-spec) (car open-spec) (car block-spec))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
720 olist)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
721 ;; build alist ((CLOSE-DELIM CLOSE-SYM) ...)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
722 (push (list (cdr close-spec) (car close-spec))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
723 clist))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
724 (setq semantic-grammar--lex-block-specs (cons olist clist)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
725 (error
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
726 (setq semantic-grammar--lex-block-specs 'error)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
727 (message "%s" (error-message-string err))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
728 nil))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
729 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
730 ;; Block specifications already parsed.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
731 (t
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
732 semantic-grammar--lex-block-specs)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
733
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
734 (defsubst semantic-grammar-quoted-form (exp)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
735 "Return a quoted form of EXP if it isn't a self evaluating form."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
736 (if (and (not (null exp))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
737 (or (listp exp) (symbolp exp)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
738 (list 'quote exp)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
739 exp))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
740
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
741 (defun semantic-grammar-insert-defanalyzer (type)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
742 "Insert declaration of the lexical analyzer defined with TYPE."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
743 (let* ((type-name (symbol-name type))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
744 (type-value (symbol-value type))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
745 (syntax (get type 'syntax))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
746 (declared (get type :declared))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
747 spec mtype prefix name doc)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
748 ;; Generate an analyzer if the corresponding type has been
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
749 ;; explicitly declared in a %type statement, and if at least the
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
750 ;; syntax property has been provided.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
751 (when (and declared syntax)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
752 (setq prefix (file-name-sans-extension
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
753 (semantic-grammar-buffer-file
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
754 semantic--grammar-output-buffer))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
755 mtype (or (get type 'matchdatatype) 'regexp)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
756 name (intern (format "%s--<%s>-%s-analyzer" prefix type mtype))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
757 doc (format "%s analyzer for <%s> tokens." mtype type))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
758 (cond
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
759 ;; Regexp match analyzer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
760 ((eq mtype 'regexp)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
761 (semantic-grammar-insert-define
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
762 `(define-lex-regex-type-analyzer ,name
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
763 ,doc ,syntax
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
764 ,(semantic-grammar-quoted-form (cdr type-value))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
765 ',(or (car type-value) (intern type-name))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
766 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
767 ;; String compare analyzer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
768 ((eq mtype 'string)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
769 (semantic-grammar-insert-define
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
770 `(define-lex-string-type-analyzer ,name
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
771 ,doc ,syntax
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
772 ,(semantic-grammar-quoted-form (cdr type-value))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
773 ',(or (car type-value) (intern type-name))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
774 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
775 ;; Block analyzer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
776 ((and (eq mtype 'block)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
777 (setq spec (semantic-grammar--lex-block-specs)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
778 (semantic-grammar-insert-define
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
779 `(define-lex-block-type-analyzer ,name
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
780 ,doc ,syntax
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
781 ,(semantic-grammar-quoted-form spec)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
782 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
783 ;; Sexp analyzer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
784 ((eq mtype 'sexp)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
785 (semantic-grammar-insert-define
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
786 `(define-lex-sexp-type-analyzer ,name
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
787 ,doc ,syntax
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
788 ',(or (car type-value) (intern type-name))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
789 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
790 ;; keyword analyzer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
791 ((eq mtype 'keyword)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
792 (semantic-grammar-insert-define
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
793 `(define-lex-keyword-type-analyzer ,name
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
794 ,doc ,syntax))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
795 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
796 ))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
797 ))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
798
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
799 (defun semantic-grammar-insert-defanalyzers ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
800 "Insert declarations of lexical analyzers."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
801 (let (tokens props)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
802 (with-current-buffer semantic--grammar-input-buffer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
803 (setq tokens (semantic-grammar-tokens)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
804 props (semantic-grammar-token-properties tokens)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
805 (insert "(require 'semantic-lex)\n\n")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
806 (let ((semantic-lex-types-obarray
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
807 (semantic-lex-make-type-table tokens props))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
808 semantic-grammar--lex-block-specs)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
809 (mapatoms 'semantic-grammar-insert-defanalyzer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
810 semantic-lex-types-obarray))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
811
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
812 ;;; Generation of the grammar support file.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
813 ;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
814 (defcustom semantic-grammar-file-regexp "\\.[wb]y$"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
815 "Regexp which matches grammar source files."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
816 :group 'semantic
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
817 :type 'regexp)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
818
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
819 (defsubst semantic-grammar-noninteractive ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
820 "Return non-nil if running without interactive terminal."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
821 (if (featurep 'xemacs)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
822 (noninteractive)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
823 noninteractive))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
824
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
825 (defun semantic-grammar-create-package (&optional force)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
826 "Create package Lisp code from grammar in current buffer.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
827 Does nothing if the Lisp code seems up to date.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
828 If optional argument FORCE is non-nil, unconditionally re-generate the
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
829 Lisp code."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
830 (interactive "P")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
831 (setq force (or force current-prefix-arg))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
832 (semantic-fetch-tags)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
833 (let* (
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
834 ;; Values of the following local variables are obtained from
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
835 ;; the grammar parsed tree in current buffer, that is before
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
836 ;; switching to the output file.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
837 (package (semantic-grammar-package))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
838 (output (concat package ".el"))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
839 (semantic--grammar-input-buffer (current-buffer))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
840 (semantic--grammar-output-buffer (find-file-noselect output))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
841 (header (semantic-grammar-header))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
842 (prologue (semantic-grammar-prologue))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
843 (epilogue (semantic-grammar-epilogue))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
844 (footer (semantic-grammar-footer))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
845 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
846 (if (and (not force)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
847 (not (buffer-modified-p))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
848 (file-newer-than-file-p
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
849 (buffer-file-name semantic--grammar-output-buffer)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
850 (buffer-file-name semantic--grammar-input-buffer)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
851 (message "Package `%s' is up to date." package)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
852 ;; Create the package
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
853 (set-buffer semantic--grammar-output-buffer)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
854 ;; Use Unix EOLs, so that the file is portable to all platforms.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
855 (setq buffer-file-coding-system 'raw-text-unix)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
856 (erase-buffer)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
857 (unless (eq major-mode 'emacs-lisp-mode)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
858 (emacs-lisp-mode))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
859
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
860 ;;;; Header + Prologue
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
861
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
862 (insert header
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
863 " \n;;; Prologue\n;;\n"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
864 prologue
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
865 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
866 ;; Evaluate the prologue now, because it might provide definition
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
867 ;; of grammar macro expanders.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
868 (eval-region (point-min) (point))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
869
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
870 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
871
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
872 ;;;; Declarations
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
873
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
874 (insert " \n;;; Declarations\n;;\n")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
875
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
876 ;; `eval-defun' is not necessary to reset `defconst' values.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
877 (semantic-grammar-insert-defconst
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
878 (semantic-grammar-keywordtable)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
879 (with-current-buffer semantic--grammar-input-buffer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
880 (semantic-grammar-keyword-data))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
881 "Table of language keywords.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
882
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
883 (semantic-grammar-insert-defconst
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
884 (semantic-grammar-tokentable)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
885 (with-current-buffer semantic--grammar-input-buffer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
886 (semantic-grammar-token-data))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
887 "Table of lexical tokens.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
888
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
889 (semantic-grammar-insert-defconst
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
890 (semantic-grammar-parsetable)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
891 (with-current-buffer semantic--grammar-input-buffer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
892 (semantic-grammar-parser-data))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
893 "Parser table.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
894
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
895 (semantic-grammar-insert-defun
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
896 (semantic-grammar-setupfunction)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
897 (with-current-buffer semantic--grammar-input-buffer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
898 (semantic-grammar-setup-data))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
899 "Setup the Semantic Parser.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
900
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
901 ;;;; Analyzers
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
902 (insert " \n;;; Analyzers\n;;\n")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
903
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
904 (semantic-grammar-insert-defanalyzers)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
905
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
906 ;;;; Epilogue & Footer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
907
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
908 (insert " \n;;; Epilogue\n;;\n"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
909 epilogue
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
910 footer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
911 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
912
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
913 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
914
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
915 (save-buffer 16)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
916
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
917 ;; If running in batch mode, there is nothing more to do.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
918 ;; Save the generated file and quit.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
919 (if (semantic-grammar-noninteractive)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
920 (let ((version-control t)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
921 (delete-old-versions t)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
922 (make-backup-files t)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
923 (vc-make-backup-files t))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
924 (kill-buffer (current-buffer)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
925 ;; If running interactively, eval declarations and epilogue
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
926 ;; code, then pop to the buffer visiting the generated file.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
927 (eval-region (point) (point-max))
110523
a5ad4f188e19 Synch Semantic to CEDET 1.0.
Chong Yidong <cyd@stupidchicken.com>
parents: 107340
diff changeset
928 ;; Loop over the defvars and eval them explicitly to force
a5ad4f188e19 Synch Semantic to CEDET 1.0.
Chong Yidong <cyd@stupidchicken.com>
parents: 107340
diff changeset
929 ;; them to be evaluated and ready to use.
a5ad4f188e19 Synch Semantic to CEDET 1.0.
Chong Yidong <cyd@stupidchicken.com>
parents: 107340
diff changeset
930 (goto-char (point-min))
a5ad4f188e19 Synch Semantic to CEDET 1.0.
Chong Yidong <cyd@stupidchicken.com>
parents: 107340
diff changeset
931 (while (re-search-forward "(defvar " nil t)
a5ad4f188e19 Synch Semantic to CEDET 1.0.
Chong Yidong <cyd@stupidchicken.com>
parents: 107340
diff changeset
932 (eval-defun nil))
a5ad4f188e19 Synch Semantic to CEDET 1.0.
Chong Yidong <cyd@stupidchicken.com>
parents: 107340
diff changeset
933 ;; Move cursor to a logical spot in the generated code.
104524
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
934 (goto-char (point-min))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
935 (pop-to-buffer (current-buffer))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
936 ;; The generated code has been evaluated and updated into
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
937 ;; memory. Now find all buffers that match the major modes we
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
938 ;; have created this language for, and force them to call our
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
939 ;; setup function again, refreshing all semantic data, and
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
940 ;; enabling them to work with the new code just created.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
941 ;;;; FIXME?
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
942 ;; At this point, I don't know any user's defined setup code :-(
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
943 ;; At least, what I can do for now, is to run the generated
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
944 ;; parser-install function.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
945 (semantic-map-mode-buffers
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
946 (semantic-grammar-setupfunction)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
947 (semantic-grammar-languagemode)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
948 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
949 ;; Return the name of the generated package file.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
950 output))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
951
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
952 (defun semantic-grammar-recreate-package ()
105340
118ad0cdd9a8 Doc/message fixes.
Glenn Morris <rgm@gnu.org>
parents: 105260
diff changeset
953 "Unconditionally create Lisp code from grammar in current buffer.
104524
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
954 Like \\[universal-argument] \\[semantic-grammar-create-package]."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
955 (interactive)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
956 (semantic-grammar-create-package t))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
957
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
958 (defun semantic-grammar-batch-build-one-package (file)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
959 "Build a Lisp package from the grammar in FILE.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
960 That is, generate Lisp code from FILE, and `byte-compile' it.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
961 Return non-nil if there were no errors, nil if errors."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
962 ;; We need this require so that we can find `byte-compile-dest-file'.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
963 (require 'bytecomp)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
964 (unless (auto-save-file-name-p file)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
965 ;; Create the package
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
966 (let ((packagename
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
967 (condition-case err
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
968 (with-current-buffer (find-file-noselect file)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
969 (semantic-grammar-create-package))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
970 (error
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
971 (message "%s" (error-message-string err))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
972 nil))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
973 (when packagename
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
974 ;; Only byte compile if out of date
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
975 (if (file-newer-than-file-p
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
976 packagename (byte-compile-dest-file packagename))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
977 (let (;; Some complex grammar table expressions need a few
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
978 ;; more resources than the default.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
979 (max-specpdl-size (max 3000 max-specpdl-size))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
980 (max-lisp-eval-depth (max 1000 max-lisp-eval-depth))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
981 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
982 ;; byte compile the resultant file
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
983 (byte-compile-file packagename))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
984 t)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
985
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
986 (defun semantic-grammar-batch-build-packages ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
987 "Build Lisp packages from grammar files on the command line.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
988 That is, run `semantic-grammar-batch-build-one-package' for each file.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
989 Each file is processed even if an error occurred previously.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
990 Must be used from the command line, with `-batch'.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
991 For example, to process grammar files in current directory, invoke:
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
992
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
993 \"emacs -batch -f semantic-grammar-batch-build-packages .\".
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
994
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
995 See also the variable `semantic-grammar-file-regexp'."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
996 (or (semantic-grammar-noninteractive)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
997 (error "\
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
998 `semantic-grammar-batch-build-packages' must be used with -batch"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
999 ))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1000 (let ((status 0)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1001 ;; Remove vc from find-file-hook. It causes bad stuff to
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1002 ;; happen in Emacs 20.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1003 (find-file-hook (delete 'vc-find-file-hook find-file-hook)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1004 (message "Compiling Grammars from: %s" (locate-library "semantic-grammar"))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1005 (dolist (arg command-line-args-left)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1006 (unless (and arg (file-exists-p arg))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1007 (error "Argument %s is not a valid file name" arg))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1008 (setq arg (expand-file-name arg))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1009 (if (file-directory-p arg)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1010 ;; Directory as argument
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1011 (dolist (src (condition-case nil
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1012 (directory-files
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1013 arg nil semantic-grammar-file-regexp)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1014 (error
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1015 (error "Unable to read directory files"))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1016 (or (semantic-grammar-batch-build-one-package
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1017 (expand-file-name src arg))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1018 (setq status 1)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1019 ;; Specific file argument
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1020 (or (semantic-grammar-batch-build-one-package arg)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1021 (setq status 1))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1022 (kill-emacs status)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1023 ))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1024
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1025 ;;;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1026 ;;;; Macros highlighting
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1027 ;;;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1028
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1029 (defvar semantic--grammar-macros-regexp-1 nil)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1030 (make-variable-buffer-local 'semantic--grammar-macros-regexp-1)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1031
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1032 (defun semantic--grammar-macros-regexp-1 ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1033 "Return font-lock keyword regexp for pre-installed macro names."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1034 (and semantic-grammar-macros
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1035 (not semantic--grammar-macros-regexp-1)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1036 (condition-case nil
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1037 (setq semantic--grammar-macros-regexp-1
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1038 (concat "(\\s-*"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1039 (regexp-opt
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1040 (mapcar #'(lambda (e) (symbol-name (car e)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1041 semantic-grammar-macros)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1042 t)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1043 "\\>"))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1044 (error nil)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1045 semantic--grammar-macros-regexp-1)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1046
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1047 (defconst semantic--grammar-macdecl-re
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1048 "\\<%use-macros\\>[ \t\r\n]+\\(\\sw\\|\\s_\\)+[ \t\r\n]+{"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1049 "Regexp that matches a macro declaration statement.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1050
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1051 (defvar semantic--grammar-macros-regexp-2 nil)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1052 (make-variable-buffer-local 'semantic--grammar-macros-regexp-2)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1053
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1054 (defun semantic--grammar-clear-macros-regexp-2 (&rest ignore)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1055 "Clear the cached regexp that match macros local in this grammar.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1056 IGNORE arguments.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1057 Added to `before-change-functions' hooks to be run before each text
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1058 change."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1059 (setq semantic--grammar-macros-regexp-2 nil))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1060
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1061 (defun semantic--grammar-macros-regexp-2 ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1062 "Return the regexp that match macros local in this grammar."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1063 (unless semantic--grammar-macros-regexp-2
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1064 (let (macs)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1065 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1066 (goto-char (point-min))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1067 (while (re-search-forward semantic--grammar-macdecl-re nil t)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1068 (condition-case nil
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1069 (setq macs (nconc macs
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1070 (split-string
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1071 (buffer-substring-no-properties
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1072 (point)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1073 (progn
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1074 (backward-char)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1075 (forward-list 1)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1076 (down-list -1)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1077 (point))))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1078 (error nil)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1079 (when macs
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1080 (setq semantic--grammar-macros-regexp-2
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1081 (concat "(\\s-*" (regexp-opt macs t) "\\>"))))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1082 semantic--grammar-macros-regexp-2)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1083
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1084 (defun semantic--grammar-macros-matcher (end)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1085 "Search for a grammar macro name to highlight.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1086 END is the limit of the search."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1087 (let ((regexp (semantic--grammar-macros-regexp-1)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1088 (or (and regexp (re-search-forward regexp end t))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1089 (and (setq regexp (semantic--grammar-macros-regexp-2))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1090 (re-search-forward regexp end t)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1091
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1092 ;;;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1093 ;;;; Define major mode
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1094 ;;;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1095
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1096 (defvar semantic-grammar-syntax-table
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1097 (let ((table (make-syntax-table (standard-syntax-table))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1098 (modify-syntax-entry ?\: "." table) ;; COLON
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1099 (modify-syntax-entry ?\> "." table) ;; GT
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1100 (modify-syntax-entry ?\< "." table) ;; LT
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1101 (modify-syntax-entry ?\| "." table) ;; OR
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1102 (modify-syntax-entry ?\; ". 12" table) ;; SEMI, Comment start ;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1103 (modify-syntax-entry ?\n ">" table) ;; Comment end
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1104 (modify-syntax-entry ?\" "\"" table) ;; String
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1105 (modify-syntax-entry ?\% "w" table) ;; Word
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1106 (modify-syntax-entry ?\- "_" table) ;; Symbol
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1107 (modify-syntax-entry ?\. "_" table) ;; Symbol
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1108 (modify-syntax-entry ?\\ "\\" table) ;; Quote
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1109 (modify-syntax-entry ?\` "'" table) ;; Prefix ` (backquote)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1110 (modify-syntax-entry ?\' "'" table) ;; Prefix ' (quote)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1111 (modify-syntax-entry ?\, "'" table) ;; Prefix , (comma)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1112 (modify-syntax-entry ?\# "'" table) ;; Prefix # (sharp)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1113 table)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1114 "Syntax table used in a Semantic grammar buffers.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1115
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1116 (defvar semantic-grammar-mode-hook nil
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1117 "Hook run when starting Semantic grammar mode.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1118
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1119 (defvar semantic-grammar-mode-keywords-1
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1120 `(("\\(\\<%%\\>\\|\\<%[{}]\\)"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1121 0 font-lock-reference-face)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1122 ("\\(%\\)\\(\\(\\sw\\|\\s_\\)+\\)"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1123 (1 font-lock-reference-face)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1124 (2 font-lock-keyword-face))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1125 ("\\<error\\>"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1126 0 (unless (semantic-grammar-in-lisp-p) 'bold))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1127 ("^\\(\\(\\sw\\|\\s_\\)+\\)[ \n\r\t]*:"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1128 1 font-lock-function-name-face)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1129 (semantic--grammar-macros-matcher
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1130 1 ,(if (boundp 'font-lock-builtin-face)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1131 'font-lock-builtin-face
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1132 'font-lock-preprocessor-face))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1133 ("\\$\\(\\sw\\|\\s_\\)*"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1134 0 font-lock-variable-name-face)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1135 ("<\\(\\(\\sw\\|\\s_\\)+\\)>"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1136 1 font-lock-type-face)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1137 (,semantic-grammar-lex-c-char-re
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1138 0 ,(if (boundp 'font-lock-constant-face)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1139 'font-lock-constant-face
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1140 'font-lock-string-face) t)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1141 ;; Must highlight :keyword here, because ':' is a punctuation in
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1142 ;; grammar mode!
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1143 ("[\r\n\t ]+:\\sw+\\>"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1144 0 font-lock-builtin-face)
105260
bbd7017a25d9 CEDET (development tools) package merged.
Chong Yidong <cyd@stupidchicken.com>
parents: 104524
diff changeset
1145 ;; ;; Append the Semantic keywords
bbd7017a25d9 CEDET (development tools) package merged.
Chong Yidong <cyd@stupidchicken.com>
parents: 104524
diff changeset
1146 ;; ,@semantic-fw-font-lock-keywords
104524
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1147 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1148 "Font Lock keywords used to highlight Semantic grammar buffers.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1149
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1150 (defvar semantic-grammar-mode-keywords-2
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1151 (append semantic-grammar-mode-keywords-1
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1152 lisp-font-lock-keywords-1)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1153 "Font Lock keywords used to highlight Semantic grammar buffers.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1154
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1155 (defvar semantic-grammar-mode-keywords-3
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1156 (append semantic-grammar-mode-keywords-1
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1157 lisp-font-lock-keywords-2)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1158 "Font Lock keywords used to highlight Semantic grammar buffers.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1159
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1160 (defvar semantic-grammar-mode-keywords
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1161 semantic-grammar-mode-keywords-1
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1162 "Font Lock keywords used to highlight Semantic grammar buffers.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1163
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1164 (defvar semantic-grammar-map
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1165 (let ((km (make-sparse-keymap)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1166
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1167 (define-key km "|" 'semantic-grammar-electric-punctuation)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1168 (define-key km ";" 'semantic-grammar-electric-punctuation)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1169 (define-key km "%" 'semantic-grammar-electric-punctuation)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1170 (define-key km "(" 'semantic-grammar-electric-punctuation)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1171 (define-key km ")" 'semantic-grammar-electric-punctuation)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1172 (define-key km ":" 'semantic-grammar-electric-punctuation)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1173
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1174 (define-key km "\t" 'semantic-grammar-indent)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1175 (define-key km "\M-\t" 'semantic-grammar-complete)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1176 (define-key km "\C-c\C-c" 'semantic-grammar-create-package)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1177 (define-key km "\C-cm" 'semantic-grammar-find-macro-expander)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1178 (define-key km "\C-cik" 'semantic-grammar-insert-keyword)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1179 ;; (define-key km "\C-cc" 'semantic-grammar-generate-and-load)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1180 ;; (define-key km "\C-cr" 'semantic-grammar-generate-one-rule)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1181
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1182 km)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1183 "Keymap used in `semantic-grammar-mode'.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1184
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1185 (defvar semantic-grammar-menu
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1186 '("Grammar"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1187 ["Indent Line" semantic-grammar-indent]
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1188 ["Complete Symbol" semantic-grammar-complete]
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1189 ["Find Macro" semantic-grammar-find-macro-expander]
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1190 "--"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1191 ["Insert %keyword" semantic-grammar-insert-keyword]
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1192 "--"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1193 ["Update Lisp Package" semantic-grammar-create-package]
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1194 ["Recreate Lisp Package" semantic-grammar-recreate-package]
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1195 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1196 "Common semantic grammar menu.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1197
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1198 (defun semantic-grammar-setup-menu-emacs (symbol mode-menu)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1199 "Setup a GNU Emacs grammar menu in variable SYMBOL.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1200 MODE-MENU is an optional specific menu whose items are appended to the
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1201 common grammar menu."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1202 (let ((items (make-symbol "items")))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1203 `(unless (boundp ',symbol)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1204 (easy-menu-define ,symbol (current-local-map)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1205 "Grammar Menu" semantic-grammar-menu)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1206 (let ((,items (cdr ,mode-menu)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1207 (when ,items
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1208 (easy-menu-add-item ,symbol nil "--")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1209 (while ,items
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1210 (easy-menu-add-item ,symbol nil (car ,items))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1211 (setq ,items (cdr ,items))))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1212 ))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1213
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1214 (defun semantic-grammar-setup-menu-xemacs (symbol mode-menu)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1215 "Setup an XEmacs grammar menu in variable SYMBOL.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1216 MODE-MENU is an optional specific menu whose items are appended to the
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1217 common grammar menu."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1218 (let ((items (make-symbol "items"))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1219 (path (make-symbol "path")))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1220 `(progn
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1221 (unless (boundp ',symbol)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1222 (easy-menu-define ,symbol nil
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1223 "Grammar Menu" (copy-sequence semantic-grammar-menu)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1224 (easy-menu-add ,symbol)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1225 (let ((,items (cdr ,mode-menu))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1226 (,path (list (car ,symbol))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1227 (when ,items
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1228 (easy-menu-add-item nil ,path "--")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1229 (while ,items
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1230 (easy-menu-add-item nil ,path (car ,items))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1231 (setq ,items (cdr ,items))))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1232 ))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1233
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1234 (defmacro semantic-grammar-setup-menu (&optional mode-menu)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1235 "Setup a mode local grammar menu.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1236 MODE-MENU is an optional specific menu whose items are appended to the
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1237 common grammar menu."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1238 (let ((menu (intern (format "%s-menu" major-mode))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1239 (if (featurep 'xemacs)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1240 (semantic-grammar-setup-menu-xemacs menu mode-menu)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1241 (semantic-grammar-setup-menu-emacs menu mode-menu))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1242
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1243 (defsubst semantic-grammar-in-lisp-p ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1244 "Return non-nil if point is in Lisp code."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1245 (or (>= (point) (semantic-grammar-epilogue-start))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1246 (condition-case nil
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1247 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1248 (up-list -1)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1249 t)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1250 (error nil))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1251
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1252 (defun semantic-grammar-edits-new-change-hook-fcn (overlay)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1253 "Function set into `semantic-edits-new-change-hook'.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1254 Argument OVERLAY is the overlay created to mark the change.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1255 When OVERLAY marks a change in the scope of a nonterminal tag extend
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1256 the change bounds to encompass the whole nonterminal tag."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1257 (let ((outer (car (semantic-find-tag-by-overlay-in-region
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1258 (semantic-edits-os overlay)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1259 (semantic-edits-oe overlay)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1260 (if (semantic-tag-of-class-p outer 'nonterminal)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1261 (semantic-overlay-move overlay
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1262 (semantic-tag-start outer)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1263 (semantic-tag-end outer)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1264
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1265 (defun semantic-grammar-mode ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1266 "Initialize a buffer for editing Semantic grammars.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1267
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1268 \\{semantic-grammar-map}"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1269 (interactive)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1270 (kill-all-local-variables)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1271 (setq major-mode 'semantic-grammar-mode
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1272 mode-name "Semantic Grammar Framework")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1273 (set (make-local-variable 'parse-sexp-ignore-comments) t)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1274 (set (make-local-variable 'comment-start) ";;")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1275 ;; Look within the line for a ; following an even number of backslashes
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1276 ;; after either a non-backslash or the line beginning.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1277 (set (make-local-variable 'comment-start-skip)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1278 "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\);+ *")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1279 (set-syntax-table semantic-grammar-syntax-table)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1280 (use-local-map semantic-grammar-map)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1281 (set (make-local-variable 'indent-line-function)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1282 'semantic-grammar-indent)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1283 (set (make-local-variable 'fill-paragraph-function)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1284 'lisp-fill-paragraph)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1285 (set (make-local-variable 'font-lock-multiline)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1286 'undecided)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1287 (set (make-local-variable 'font-lock-defaults)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1288 '((semantic-grammar-mode-keywords
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1289 semantic-grammar-mode-keywords-1
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1290 semantic-grammar-mode-keywords-2
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1291 semantic-grammar-mode-keywords-3)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1292 nil ;; perform string/comment fontification
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1293 nil ;; keywords are case sensitive.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1294 ;; This puts _ & - as a word constituant,
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1295 ;; simplifying our keywords significantly
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1296 ((?_ . "w") (?- . "w"))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1297 ;; Setup Semantic to parse grammar
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1298 (semantic-grammar-wy--install-parser)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1299 (setq semantic-lex-comment-regex ";;"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1300 semantic-lex-analyzer 'semantic-grammar-lexer
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1301 semantic-type-relation-separator-character '(":")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1302 semantic-symbol->name-assoc-list
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1303 '(
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1304 (code . "Setup Code")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1305 (keyword . "Keyword")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1306 (token . "Token")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1307 (nonterminal . "Nonterminal")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1308 (rule . "Rule")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1309 ))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1310 (set (make-local-variable 'semantic-format-face-alist)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1311 '(
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1312 (code . default)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1313 (keyword . font-lock-keyword-face)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1314 (token . font-lock-type-face)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1315 (nonterminal . font-lock-function-name-face)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1316 (rule . default)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1317 ))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1318 (set (make-local-variable 'semantic-stickyfunc-sticky-classes)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1319 '(nonterminal))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1320 ;; Before each change, clear the cached regexp used to highlight
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1321 ;; macros local in this grammar.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1322 (semantic-make-local-hook 'before-change-functions)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1323 (add-hook 'before-change-functions
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1324 'semantic--grammar-clear-macros-regexp-2 nil t)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1325 ;; Handle safe re-parse of grammar rules.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1326 (semantic-make-local-hook 'semantic-edits-new-change-hooks)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1327 (add-hook 'semantic-edits-new-change-hooks
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1328 'semantic-grammar-edits-new-change-hook-fcn
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1329 nil t)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1330 (semantic-run-mode-hooks 'semantic-grammar-mode-hook))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1331
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1332 ;;;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1333 ;;;; Useful commands
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1334 ;;;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1335
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1336 (defvar semantic-grammar-skip-quoted-syntax-table
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1337 (let ((st (copy-syntax-table semantic-grammar-syntax-table)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1338 (modify-syntax-entry ?\' "$" st)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1339 st)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1340 "Syntax table to skip a whole quoted expression in grammar code.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1341 Consider quote as a \"paired delimiter\", so `forward-sexp' will skip
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1342 whole quoted expression.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1343
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1344 (defsubst semantic-grammar-backward-item ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1345 "Move point to beginning of the previous grammar item."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1346 (forward-comment (- (point-max)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1347 (if (zerop (skip-syntax-backward "."))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1348 (if (eq (char-before) ?\')
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1349 (with-syntax-table
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1350 ;; Can't be Lisp code here! Temporarily consider quote
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1351 ;; as a "paired delimiter", so `forward-sexp' can skip
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1352 ;; the whole quoted expression.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1353 semantic-grammar-skip-quoted-syntax-table
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1354 (forward-sexp -1))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1355 (forward-sexp -1))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1356
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1357 (defun semantic-grammar-anchored-indentation ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1358 "Return indentation based on previous anchor character found."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1359 (let (indent)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1360 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1361 (while (not indent)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1362 (semantic-grammar-backward-item)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1363 (cond
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1364 ((bobp)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1365 (setq indent 0))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1366 ((looking-at ":\\(\\s-\\|$\\)")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1367 (setq indent (current-column))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1368 (forward-char)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1369 (skip-syntax-forward "-")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1370 (if (eolp) (setq indent 2))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1371 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1372 ((and (looking-at "[;%]")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1373 (not (looking-at "\\<%prec\\>")))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1374 (setq indent 0)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1375 ))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1376 indent))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1377
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1378 (defun semantic-grammar-do-grammar-indent ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1379 "Indent a line of grammar.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1380 When called the point is not in Lisp code."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1381 (let (indent n)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1382 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1383 (beginning-of-line)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1384 (skip-syntax-forward "-")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1385 (setq indent (current-column))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1386 (cond
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1387 ((or (bobp)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1388 (looking-at "\\(\\w\\|\\s_\\)+\\s-*:")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1389 (and (looking-at "%")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1390 (not (looking-at "%prec\\>"))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1391 (setq n 0))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1392 ((looking-at ":")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1393 (setq n 2))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1394 ((and (looking-at ";;")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1395 (save-excursion (forward-comment (point-max))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1396 (looking-at ":")))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1397 (setq n 1))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1398 (t
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1399 (setq n (semantic-grammar-anchored-indentation))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1400 (unless (zerop n)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1401 (cond
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1402 ((looking-at ";;")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1403 (setq n (1- n)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1404 ((looking-at "[|;]")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1405 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1406 (t
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1407 (setq n (+ n 2)))))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1408 (when (/= n indent)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1409 (beginning-of-line)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1410 (delete-horizontal-space)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1411 (indent-to n)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1412
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1413 (defvar semantic-grammar-brackets-as-parens-syntax-table
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1414 (let ((st (copy-syntax-table emacs-lisp-mode-syntax-table)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1415 (modify-syntax-entry ?\{ "(} " st)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1416 (modify-syntax-entry ?\} "){ " st)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1417 st)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1418 "Syntax table that consider brackets as parenthesis.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1419 So `lisp-indent-line' will work inside bracket blocks.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1420
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1421 (defun semantic-grammar-do-lisp-indent ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1422 "Maybe run the Emacs Lisp indenter on a line of code.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1423 Return nil if not in a Lisp expression."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1424 (condition-case nil
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1425 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1426 (beginning-of-line)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1427 (skip-chars-forward "\t ")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1428 (let ((first (point)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1429 (or (>= first (semantic-grammar-epilogue-start))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1430 (up-list -1))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1431 (condition-case nil
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1432 (while t
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1433 (up-list -1))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1434 (error nil))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1435 (beginning-of-line)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1436 (save-restriction
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1437 (narrow-to-region (point) first)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1438 (goto-char (point-max))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1439 (with-syntax-table
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1440 ;; Temporarily consider brackets as parenthesis so
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1441 ;; `lisp-indent-line' can indent Lisp code inside
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1442 ;; brackets.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1443 semantic-grammar-brackets-as-parens-syntax-table
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1444 (lisp-indent-line))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1445 t)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1446 (error nil)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1447
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1448 (defun semantic-grammar-indent ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1449 "Indent the current line.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1450 Use the Lisp or grammar indenter depending on point location."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1451 (interactive)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1452 (let ((orig (point))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1453 first)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1454 (or (semantic-grammar-do-lisp-indent)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1455 (semantic-grammar-do-grammar-indent))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1456 (setq first (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1457 (beginning-of-line)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1458 (skip-chars-forward "\t ")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1459 (point)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1460 (if (or (< orig first) (/= orig (point)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1461 (goto-char first))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1462
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1463 (defun semantic-grammar-electric-punctuation ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1464 "Insert and reindent for the symbol just typed in."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1465 (interactive)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1466 (self-insert-command 1)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1467 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1468 (semantic-grammar-indent)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1469
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1470 (defun semantic-grammar-complete ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1471 "Attempt to complete the symbol under point.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1472 Completion is position sensitive. If the cursor is in a match section of
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1473 a rule, then nonterminals symbols are scanned. If the cursor is in a Lisp
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1474 expression then Lisp symbols are completed."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1475 (interactive)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1476 (if (semantic-grammar-in-lisp-p)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1477 ;; We are in lisp code. Do lisp completion.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1478 (lisp-complete-symbol)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1479 ;; We are not in lisp code. Do rule completion.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1480 (let* ((nonterms (semantic-find-tags-by-class 'nonterminal (current-buffer)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1481 (sym (car (semantic-ctxt-current-symbol)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1482 (ans (try-completion sym nonterms)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1483 (cond ((eq ans t)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1484 ;; All done
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1485 (message "Symbols is already complete"))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1486 ((and (stringp ans) (string= ans sym))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1487 ;; Max matchable. Show completions.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1488 (with-output-to-temp-buffer "*Completions*"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1489 (display-completion-list (all-completions sym nonterms)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1490 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1491 ((stringp ans)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1492 ;; Expand the completions
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1493 (forward-sexp -1)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1494 (delete-region (point) (progn (forward-sexp 1) (point)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1495 (insert ans))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1496 (t (message "No Completions."))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1497 ))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1498 ))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1499
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1500 (defun semantic-grammar-insert-keyword (name)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1501 "Insert a new %keyword declaration with NAME.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1502 Assumes it is typed in with the correct casing."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1503 (interactive "sKeyword: ")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1504 (if (not (bolp)) (insert "\n"))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1505 (insert "%keyword " (upcase name) " \"" name "\"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1506 %put " (upcase name) " summary
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1507 \"\"\n")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1508 (forward-char -2))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1509
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1510 ;;; Macro facilities
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1511 ;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1512
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1513 (defsubst semantic--grammar-macro-function-tag (name)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1514 "Search for a function tag for the grammar macro with name NAME.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1515 Return the tag found or nil if not found."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1516 (car (semantic-find-tags-by-class
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1517 'function
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1518 (or (semantic-find-tags-by-name name (current-buffer))
110827
9814473572d4 Fix errors in CEDET 1.0 merge.
Chong Yidong <cyd@stupidchicken.com>
parents: 110523
diff changeset
1519 (and (featurep 'semantic/db)
104524
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1520 semanticdb-current-database
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1521 (cdar (semanticdb-find-tags-by-name name nil t)))))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1522
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1523 (defsubst semantic--grammar-macro-lib-part (def)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1524 "Return the library part of the grammar macro defined by DEF."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1525 (let ((suf (format "-%s\\'" (regexp-quote (symbol-name (car def)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1526 (fun (symbol-name (cdr def))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1527 (substring fun 0 (string-match suf fun))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1528
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1529 (defun semantic--grammar-macro-compl-elt (def &optional full)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1530 "Return a completion entry for the grammar macro defined by DEF.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1531 If optional argument FULL is non-nil qualify the macro name with the
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1532 library found in DEF."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1533 (let ((mac (car def))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1534 (lib (semantic--grammar-macro-lib-part def)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1535 (cons (if full
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1536 (format "%s/%s" mac lib)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1537 (symbol-name mac))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1538 (list mac lib))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1539
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1540 (defun semantic--grammar-macro-compl-dict ()
105340
118ad0cdd9a8 Doc/message fixes.
Glenn Morris <rgm@gnu.org>
parents: 105260
diff changeset
1541 "Return a completion dictionary of macro definitions."
104524
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1542 (let ((defs (semantic-grammar-macros))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1543 def dups dict)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1544 (while defs
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1545 (setq def (car defs)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1546 defs (cdr defs))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1547 (if (or (assoc (car def) defs) (assoc (car def) dups))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1548 (push def dups)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1549 (push (semantic--grammar-macro-compl-elt def) dict)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1550 (while dups
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1551 (setq def (car dups)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1552 dups (cdr dups))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1553 (push (semantic--grammar-macro-compl-elt def t) dict))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1554 dict))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1555
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1556 (defun semantic-grammar-find-macro-expander (macro-name library)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1557 "Visit the Emacs Lisp library where a grammar macro is implemented.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1558 MACRO-NAME is a symbol that identifies a grammar macro.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1559 LIBRARY is the name (sans extension) of the Emacs Lisp library where
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1560 to start searching the macro implementation. Lookup in included
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1561 libraries, if necessary.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1562 Find a function tag (in current tags table) whose name contains MACRO-NAME.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1563 Select the buffer containing the tag's definition, and move point there."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1564 (interactive
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1565 (let* ((dic (semantic--grammar-macro-compl-dict))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1566 (def (assoc (completing-read "Macro: " dic nil 1) dic)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1567 (or (cdr def) '(nil nil))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1568 (when (and macro-name library)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1569 (let* ((lib (format "%s.el" library))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1570 (buf (find-file-noselect (or (locate-library lib t) lib)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1571 (tag (with-current-buffer buf
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1572 (semantic--grammar-macro-function-tag
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1573 (format "%s-%s" library macro-name)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1574 (if tag
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1575 (progn
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1576 (require 'semantic/decorate)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1577 (pop-to-buffer (semantic-tag-buffer tag))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1578 (goto-char (semantic-tag-start tag))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1579 (semantic-momentary-highlight-tag tag))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1580 (pop-to-buffer buf)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1581 (message "No expander found in library %s for macro %s"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1582 library macro-name)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1583
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1584 ;;; Additional help
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1585 ;;
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1586
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1587 (defvar semantic-grammar-syntax-help
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1588 `(
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1589 ;; Lexical Symbols
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1590 ("symbol" . "Syntax: A symbol of alpha numeric and symbol characters")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1591 ("number" . "Syntax: Numeric characters.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1592 ("punctuation" . "Syntax: Punctuation character.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1593 ("semantic-list" . "Syntax: A list delimited by any valid list characters")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1594 ("open-paren" . "Syntax: Open Parenthesis character")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1595 ("close-paren" . "Syntax: Close Parenthesis character")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1596 ("string" . "Syntax: String character delimited text")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1597 ("comment" . "Syntax: Comment character delimited text")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1598 ;; Special Macros
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1599 ("EMPTY" . "Syntax: Match empty text")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1600 ("ASSOC" . "Lambda Key: (ASSOC key1 value1 key2 value2 ...)")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1601 ("EXPAND" . "Lambda Key: (EXPAND <list id> <rule>)")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1602 ("EXPANDFULL" . "Lambda Key: (EXPANDFULL <list id> <rule>)")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1603 ;; Tag Generator Macros
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1604 ("TAG" . "Generic Tag Generation: (TAG <name> <tag-class> [ :key value ]*)")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1605 ("VARIABLE-TAG" . "(VARIABLE-TAG <name> <lang-type> <default-value> [ :key value ]*)")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1606 ("FUNCTION-TAG" . "(FUNCTION-TAG <name> <lang-type> <arg-list> [ :key value ]*)")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1607 ("TYPE-TAG" . "(TYPE-TAG <name> <lang-type> <part-list> <parents> [ :key value ]*)")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1608 ("INCLUDE-TAG" . "(INCLUDE-TAG <name> <system-flag> [ :key value ]*)")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1609 ("PACKAGE-TAG" . "(PACKAGE-TAG <name> <detail> [ :key value ]*)")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1610 ("CODE-TAG" . "(CODE-TAG <name> <detail> [ :key value ]*)")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1611 ("ALIAS-TAG" . "(ALIAS-TAG <name> <aliasclass> <definition> [:key value]*)")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1612 ;; Special value macros
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1613 ("$1" . "Match Value: Value from match list in slot 1")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1614 ("$2" . "Match Value: Value from match list in slot 2")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1615 ("$3" . "Match Value: Value from match list in slot 3")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1616 ("$4" . "Match Value: Value from match list in slot 4")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1617 ("$5" . "Match Value: Value from match list in slot 5")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1618 ("$6" . "Match Value: Value from match list in slot 6")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1619 ("$7" . "Match Value: Value from match list in slot 7")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1620 ("$8" . "Match Value: Value from match list in slot 8")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1621 ("$9" . "Match Value: Value from match list in slot 9")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1622 ;; Same, but with annoying , in front.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1623 (",$1" . "Match Value: Value from match list in slot 1")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1624 (",$2" . "Match Value: Value from match list in slot 2")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1625 (",$3" . "Match Value: Value from match list in slot 3")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1626 (",$4" . "Match Value: Value from match list in slot 4")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1627 (",$5" . "Match Value: Value from match list in slot 5")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1628 (",$6" . "Match Value: Value from match list in slot 6")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1629 (",$7" . "Match Value: Value from match list in slot 7")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1630 (",$8" . "Match Value: Value from match list in slot 8")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1631 (",$9" . "Match Value: Value from match list in slot 9")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1632 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1633 "Association of syntax elements, and the corresponding help.")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1634
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1635 (defun semantic-grammar-eldoc-get-macro-docstring (macro expander)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1636 "Return a one-line docstring for the given grammar MACRO.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1637 EXPANDER is the name of the function that expands MACRO."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1638 (require 'eldoc)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1639 (if (and (eq expander (aref eldoc-last-data 0))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1640 (eq 'function (aref eldoc-last-data 2)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1641 (aref eldoc-last-data 1)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1642 (let ((doc (help-split-fundoc (documentation expander t) expander)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1643 (cond
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1644 (doc
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1645 (setq doc (car doc))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1646 (string-match "\\`[^ )]* ?" doc)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1647 (setq doc (concat "(" (substring doc (match-end 0)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1648 (t
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1649 (setq doc (eldoc-function-argstring expander))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1650 (when doc
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1651 (setq doc
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1652 (eldoc-docstring-format-sym-doc
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1653 macro (format "==> %s %s" expander doc) 'default))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1654 (eldoc-last-data-store expander doc 'function))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1655 doc)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1656
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1657 (define-mode-local-override semantic-idle-summary-current-symbol-info
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1658 semantic-grammar-mode ()
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1659 "Display additional eldoc information about grammar syntax elements.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1660 Syntax element is the current symbol at point.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1661 If it is associated a help string in `semantic-grammar-syntax-help',
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1662 return that string.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1663 If it is a macro name, return a description of the associated expander
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1664 function parameter list.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1665 If it is a function name, return a description of this function
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1666 parameter list.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1667 It it is a variable name, return a brief (one-line) documentation
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1668 string for the variable.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1669 If a default description of the current context can be obtained,
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1670 return it.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1671 Otherwise return nil."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1672 (require 'eldoc)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1673 (let* ((elt (car (semantic-ctxt-current-symbol)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1674 (val (and elt (cdr (assoc elt semantic-grammar-syntax-help)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1675 (when (and (not val) elt (semantic-grammar-in-lisp-p))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1676 ;; Ensure to load macro definitions before doing `intern-soft'.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1677 (setq val (semantic-grammar-macros)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1678 elt (intern-soft elt)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1679 val (and elt (cdr (assq elt val))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1680 (cond
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1681 ;; Grammar macro
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1682 ((and val (fboundp val))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1683 (setq val (semantic-grammar-eldoc-get-macro-docstring elt val)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1684 ;; Function
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1685 ((and elt (fboundp elt))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1686 (setq val (eldoc-get-fnsym-args-string elt)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1687 ;; Variable
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1688 ((and elt (boundp elt))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1689 (setq val (eldoc-get-var-docstring elt)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1690 (t nil)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1691 (or val (semantic-idle-summary-current-symbol-info-default))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1692
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1693 (define-mode-local-override semantic-tag-boundary-p
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1694 semantic-grammar-mode (tag)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1695 "Return non-nil for tags that should have a boundary drawn.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1696 Only tags of type 'nonterminal will be so marked."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1697 (let ((c (semantic-tag-class tag)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1698 (eq c 'nonterminal)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1699
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1700 (define-mode-local-override semantic-ctxt-current-function
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1701 semantic-grammar-mode (&optional point)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1702 "Determine the name of the current function at POINT."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1703 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1704 (and point (goto-char point))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1705 (when (semantic-grammar-in-lisp-p)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1706 (with-mode-local emacs-lisp-mode
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1707 (semantic-ctxt-current-function)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1708
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1709 (define-mode-local-override semantic-ctxt-current-argument
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1710 semantic-grammar-mode (&optional point)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1711 "Determine the argument index of the called function at POINT."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1712 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1713 (and point (goto-char point))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1714 (when (semantic-grammar-in-lisp-p)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1715 (with-mode-local emacs-lisp-mode
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1716 (semantic-ctxt-current-argument)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1717
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1718 (define-mode-local-override semantic-ctxt-current-assignment
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1719 semantic-grammar-mode (&optional point)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1720 "Determine the tag being assigned into at POINT."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1721 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1722 (and point (goto-char point))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1723 (when (semantic-grammar-in-lisp-p)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1724 (with-mode-local emacs-lisp-mode
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1725 (semantic-ctxt-current-assignment)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1726
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1727 (define-mode-local-override semantic-ctxt-current-class-list
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1728 semantic-grammar-mode (&optional point)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1729 "Determine the class of tags that can be used at POINT."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1730 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1731 (and point (goto-char point))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1732 (if (semantic-grammar-in-lisp-p)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1733 (with-mode-local emacs-lisp-mode
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1734 (semantic-ctxt-current-class-list))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1735 '(nonterminal keyword))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1736
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1737 (define-mode-local-override semantic-ctxt-current-mode
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1738 semantic-grammar-mode (&optional point)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1739 "Return the major mode active at POINT.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1740 POINT defaults to the value of point in current buffer.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1741 Return `emacs-lisp-mode' is POINT is within Lisp code, otherwise
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1742 return the current major mode."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1743 (save-excursion
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1744 (and point (goto-char point))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1745 (if (semantic-grammar-in-lisp-p)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1746 'emacs-lisp-mode
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1747 (semantic-ctxt-current-mode-default))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1748
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1749 (define-mode-local-override semantic-format-tag-abbreviate
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1750 semantic-grammar-mode (tag &optional parent color)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1751 "Return a string abbreviation of TAG.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1752 Optional PARENT is not used.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1753 Optional COLOR is used to flag if color is added to the text."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1754 (let ((class (semantic-tag-class tag))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1755 (name (semantic-format-tag-name tag parent color)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1756 (cond
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1757 ((eq class 'nonterminal)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1758 (concat name ":"))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1759 ((eq class 'setting)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1760 "%settings%")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1761 ((memq class '(rule keyword))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1762 name)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1763 (t
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1764 (concat "%" (symbol-name class) " " name)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1765
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1766 (define-mode-local-override semantic-format-tag-summarize
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1767 semantic-grammar-mode (tag &optional parent color)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1768 "Return a string summarizing TAG.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1769 Optional PARENT is not used.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1770 Optional argument COLOR determines if color is added to the text."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1771 (let ((class (semantic-tag-class tag))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1772 (name (semantic-format-tag-name tag parent color))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1773 (label nil)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1774 (desc nil))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1775 (cond
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1776 ((eq class 'nonterminal)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1777 (setq label "Nonterminal: "
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1778 desc (format
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1779 " with %d match lists."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1780 (length (semantic-tag-components tag)))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1781 ((eq class 'keyword)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1782 (setq label "Keyword: ")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1783 (let (summary)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1784 (semantic--find-tags-by-function
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1785 #'(lambda (put)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1786 (unless summary
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1787 (setq summary (cdr (assoc "summary"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1788 (semantic-tag-get-attribute
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1789 put :value))))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1790 ;; Get `put' tag with TAG name.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1791 (semantic-find-tags-by-name-regexp
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1792 (regexp-quote (semantic-tag-name tag))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1793 (semantic-find-tags-by-class 'put (current-buffer))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1794 (setq desc (concat " = "
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1795 (semantic-tag-get-attribute tag :value)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1796 (if summary
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1797 (concat " - " (read summary))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1798 "")))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1799 ((eq class 'token)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1800 (setq label "Token: ")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1801 (let ((val (semantic-tag-get-attribute tag :value))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1802 (names (semantic-tag-get-attribute tag :rest))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1803 (type (semantic-tag-type tag)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1804 (if names
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1805 (setq name (mapconcat 'identity (cons name names) " ")))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1806 (setq desc (concat
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1807 (if type
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1808 (format " <%s>" type)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1809 "")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1810 (if val
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1811 (format "%s%S" val (if type " " ""))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1812 "")))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1813 ((eq class 'assoc)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1814 (setq label "Assoc: ")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1815 (let ((val (semantic-tag-get-attribute tag :value))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1816 (type (semantic-tag-type tag)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1817 (setq desc (concat
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1818 (if type
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1819 (format " <%s>" type)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1820 "")
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1821 (if val
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1822 (concat " " (mapconcat 'identity val " "))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1823 "")))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1824 (t
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1825 (setq desc (semantic-format-tag-abbreviate tag parent color))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1826 (if (and color label)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1827 (setq label (semantic--format-colorize-text label 'label)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1828 (if (and color label desc)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1829 (setq desc (semantic--format-colorize-text desc 'comment)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1830 (if label
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1831 (concat label name desc)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1832 ;; Just a description is the abbreviated version
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1833 desc)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1834
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1835 ;;; Semantic Analysis
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1836
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1837 (define-mode-local-override semantic-analyze-current-context
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1838 semantic-grammar-mode (point)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1839 "Provide a semantic analysis object describing a context in a grammar."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1840 (require 'semantic/analyze)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1841 (if (semantic-grammar-in-lisp-p)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1842 (with-mode-local emacs-lisp-mode
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1843 (semantic-analyze-current-context point))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1844
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1845 (let* ((context-return nil)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1846 (prefixandbounds (semantic-ctxt-current-symbol-and-bounds))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1847 (prefix (car prefixandbounds))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1848 (bounds (nth 2 prefixandbounds))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1849 (prefixsym nil)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1850 (prefixclass (semantic-ctxt-current-class-list))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1851 )
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1852
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1853 ;; Do context for rules when in a match list.
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1854 (setq prefixsym
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1855 (semantic-find-first-tag-by-name
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1856 (car prefix)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1857 (current-buffer)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1858
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1859 (setq context-return
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1860 (semantic-analyze-context
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1861 "context-for-semantic-grammar"
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1862 :buffer (current-buffer)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1863 :scope nil
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1864 :bounds bounds
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1865 :prefix (if prefixsym
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1866 (list prefixsym)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1867 prefix)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1868 :prefixtypes nil
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1869 :prefixclass prefixclass
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1870 ))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1871
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1872 context-return)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1873
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1874 (define-mode-local-override semantic-analyze-possible-completions
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1875 semantic-grammar-mode (context)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1876 "Return a list of possible completions based on CONTEXT."
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1877 (require 'semantic/analyze/complete)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1878 (if (semantic-grammar-in-lisp-p)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1879 (with-mode-local emacs-lisp-mode
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1880 (semantic-analyze-possible-completions context))
105799
3fe6da4a95a9 * cedet/srecode/srt-mode.el (semantic-analyze-possible-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105650
diff changeset
1881 (with-current-buffer (oref context buffer)
104524
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1882 (let* ((prefix (car (oref context :prefix)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1883 (completetext (cond ((semantic-tag-p prefix)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1884 (semantic-tag-name prefix))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1885 ((stringp prefix)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1886 prefix)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1887 ((stringp (car prefix))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1888 (car prefix))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1889 (tags (semantic-find-tags-for-completion completetext
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1890 (current-buffer))))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1891 (semantic-analyze-tags-of-class-list
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1892 tags (oref context prefixclass)))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1893 )))
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1894
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1895 (provide 'semantic/grammar)
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1896
fbd55cc47b77 * cedet/ede/system.el (ede-upload-html-documentation)
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1897 ;;; semantic/grammar.el ends here