annotate lisp/syntax.el @ 333:4f79e16b1112 r21-0-64

Import from CVS: tag r21-0-64
author cvs
date Mon, 13 Aug 2007 10:49:50 +0200
parents 41ff10fd062f
children 8626e4521993
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
209
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
1 ;; syntax.el --- Syntax-table hacking stuff, moved from syntax.c
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
2
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
3 ;; Copyright (C) 1993, 1997 Free Software Foundation, Inc.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
4 ;; Copyright (C) 1995 Sun Microsystems.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
5
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
6 ;; This file is part of XEmacs.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
7
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
8 ;; XEmacs is free software; you can redistribute it and/or modify it
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
9 ;; under the terms of the GNU General Public License as published by
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
10 ;; the Free Software Foundation; either version 2, or (at your option)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
11 ;; any later version.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
12
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
13 ;; XEmacs is distributed in the hope that it will be useful, but
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
14 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
15 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
16 ;; General Public License for more details.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
17
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
18 ;; You should have received a copy of the GNU General Public License
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
19 ;; along with XEmacs; see the file COPYING. If not, write to the
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
20 ;; Free Software Foundation, 59 Temple Place - Suite 330,
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
21 ;; Boston, MA 02111-1307, USA.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
22
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
23 ;;; Synched up with: FSF 19.28.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
24
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
25 ;;; Commentary:
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
26
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
27 ;; This file is dumped with XEmacs.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
28
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
29 ;; Note: FSF does not have a file syntax.el. This stuff is
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
30 ;; in syntax.c. See comments there about not merging past 19.28.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
31
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
32 ;; Significantly hacked upon by Ben Wing.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
33
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
34 ;;; Code:
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
35
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
36 (defun make-syntax-table (&optional oldtable)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
37 "Return a new syntax table.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
38 It inherits all characters from the standard syntax table."
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
39 (make-char-table 'syntax))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
40
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
41 (defun simple-set-syntax-entry (char spec table)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
42 (put-char-table char spec table))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
43
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
44 (defun char-syntax-from-code (code)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
45 "Extract the syntax designator from the internal syntax code CODE.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
46 CODE is the value actually contained in the syntax table."
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
47 (if (consp code)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
48 (setq code (car code)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
49 (aref (syntax-designator-chars) (logand code 127)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
50
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
51 (defun set-char-syntax-in-code (code desig)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
52 "Return a new internal syntax code whose syntax designator is DESIG.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
53 Other characteristics are the same as in CODE."
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
54 (let ((newcode (if (consp code) (car code) code)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
55 (setq newcode (logior (string-match
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
56 (regexp-quote (char-to-string desig))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
57 (syntax-designator-chars))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
58 (logand newcode (lognot 127))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
59 (if (consp code) (cons newcode (cdr code))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
60 newcode)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
61
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
62 (defun syntax-code-to-string (code)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
63 "Return a string equivalent to internal syntax code CODE.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
64 The string can be passed to `modify-syntax-entry'.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
65 If CODE is invalid, return nil."
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
66 (let ((match (and (consp code) (cdr code)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
67 (codes (syntax-designator-chars)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
68 (if (consp code)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
69 (setq code (car code)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
70 (if (or (not (integerp code))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
71 (> (logand code 127) (length codes)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
72 nil
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
73 (with-output-to-string
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
74 (let* ((spec (elt codes (logand code 127)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
75 (b3 (lsh code -16))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
76 (start1 (/= 0 (logand b3 128))) ;logtest!
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
77 (start1b (/= 0 (logand b3 64)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
78 (start2 (/= 0 (logand b3 32)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
79 (start2b (/= 0 (logand b3 16)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
80 (end1 (/= 0 (logand b3 8)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
81 (end1b (/= 0 (logand b3 4)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
82 (end2 (/= 0 (logand b3 2)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
83 (end2b (/= 0 (logand b3 1)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
84 (prefix (/= 0 (logand code 128)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
85 (single-char-p (or (= spec ?<) (= spec ?>)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
86 )
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
87 (write-char spec)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
88 (write-char (if match match 32))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
89 ;;; (if start1 (if single-char-p (write-char ?a) (write-char ?1)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
90 (if start1 (if single-char-p (write-char ? ) (write-char ?1)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
91 (if start2 (write-char ?2))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
92 ;;; (if end1 (if single-char-p (write-char ?a) (write-char ?3)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
93 (if end1 (if single-char-p (write-char ? ) (write-char ?3)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
94 (if end2 (write-char ?4))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
95 (if start1b (if single-char-p (write-char ?b) (write-char ?5)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
96 (if start2b (write-char ?6))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
97 (if end1b (if single-char-p (write-char ?b) (write-char ?7)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
98 (if end2b (write-char ?8))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
99 (if prefix (write-char ?p)))))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
100
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
101 (defun syntax-string-to-code (string)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
102 "Return the internal syntax code equivalent to STRING.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
103 STRING should be something acceptable as the second argument to
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
104 `modify-syntax-entry'.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
105 If STRING is invalid, signal an error."
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
106 (let* ((bflag nil)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
107 (b3 0)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
108 (ch0 (aref string 0))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
109 (len (length string))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
110 (code (string-match (regexp-quote (char-to-string ch0))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
111 (syntax-designator-chars)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
112 (i 2)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
113 ch)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
114 (or code
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
115 (error "Invalid syntax designator: %S" string))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
116 (while (< i len)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
117 (setq ch (aref string i))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
118 (incf i)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
119 (case ch
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
120 (?1 (setq b3 (logior b3 128)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
121 (?2 (setq b3 (logior b3 32)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
122 (?3 (setq b3 (logior b3 8)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
123 (?4 (setq b3 (logior b3 2)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
124 (?5 (setq b3 (logior b3 64)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
125 (?6 (setq b3 (logior b3 16)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
126 (?7 (setq b3 (logior b3 4)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
127 (?8 (setq b3 (logior b3 1)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
128 (?a (case ch0
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
129 (?< (setq b3 (logior b3 128)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
130 (?> (setq b3 (logior b3 8)))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
131 (?b (case ch0
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
132 (?< (setq b3 (logior b3 64) bflag t))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
133 (?> (setq b3 (logior b3 4) bflag t))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
134 (?p (setq code (logior code (lsh 1 7))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
135 (?\ nil) ;; ignore for compatibility
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
136 (otherwise
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
137 (error "Invalid syntax description flag: %S" string))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
138 ;; default single char style if `b' has not been seen
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
139 (if (not bflag)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
140 (case ch0
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
141 (?< (setq b3 (logior b3 128)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
142 (?> (setq b3 (logior b3 8)))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
143 (setq code (logior code (lsh b3 16)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
144 (if (and (> len 1)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
145 ;; tough luck if you want to make space a paren!
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
146 (/= (aref string 1) ?\ ))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
147 (setq code (cons code (aref string 1))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
148 code))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
149
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
150 (defun modify-syntax-entry (char-range spec &optional table)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
151 "Set syntax for the characters CHAR-RANGE according to string SPEC.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
152 CHAR-RANGE is a single character or a range of characters,
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
153 as per `put-char-table'.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
154 The syntax is changed only for table TABLE, which defaults to
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
155 the current buffer's syntax table.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
156 The first character of SPEC should be one of the following:
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
157 Space whitespace syntax. w word constituent.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
158 _ symbol constituent. . punctuation.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
159 \( open-parenthesis. \) close-parenthesis.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
160 \" string quote. \\ character-quote.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
161 $ paired delimiter. ' expression quote or prefix operator.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
162 < comment starter. > comment ender.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
163 / character-quote. @ inherit from `standard-syntax-table'.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
164
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
165 Only single-character comment start and end sequences are represented thus.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
166 Two-character sequences are represented as described below.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
167 The second character of SPEC is the matching parenthesis,
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
168 used only if the first character is `(' or `)'.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
169 Any additional characters are flags.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
170 Defined flags are the characters 1, 2, 3, 4, 5, 6, 7, 8, p, a, and b.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
171 1 means C is the first of a two-char comment start sequence of style a.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
172 2 means C is the second character of such a sequence.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
173 3 means C is the first of a two-char comment end sequence of style a.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
174 4 means C is the second character of such a sequence.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
175 5 means C is the first of a two-char comment start sequence of style b.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
176 6 means C is the second character of such a sequence.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
177 7 means C is the first of a two-char comment end sequence of style b.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
178 8 means C is the second character of such a sequence.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
179 p means C is a prefix character for `backward-prefix-chars';
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
180 such characters are treated as whitespace when they occur
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
181 between expressions.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
182 a means C is comment starter or comment ender for comment style a (default)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
183 b means C is comment starter or comment ender for comment style b."
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
184 (interactive
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
185 ;; I really don't know why this is interactive
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
186 ;; help-form should at least be made useful whilst reading the second arg
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
187 "cSet syntax for character: \nsSet syntax for %c to: ")
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
188 (cond ((syntax-table-p table))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
189 ((not table)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
190 (setq table (syntax-table)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
191 (t
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
192 (setq table
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
193 (wrong-type-argument 'syntax-table-p table))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
194 (let ((code (syntax-string-to-code spec)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
195 (simple-set-syntax-entry char-range code table))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
196 nil)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
197
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
198 (defun map-syntax-table (__function __table &optional __range)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
199 "Map FUNCTION over entries in syntax table TABLE, collapsing inheritance.
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
200 This is similar to `map-char-table', but works only on syntax tables, and
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
201 collapses any entries that call for inheritance by invisibly substituting
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
202 the inherited values from the standard syntax table."
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
203 (check-argument-type 'syntax-table-p __table)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
204 (map-char-table #'(lambda (__key __value)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
205 (if (eq ?@ (char-syntax-from-code __value))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
206 (map-char-table #'(lambda (__key __value)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
207 (funcall __function
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
208 __key __value))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
209 (standard-syntax-table)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
210 __key)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
211 (funcall __function __key __value)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
212 __table __range))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
213
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
214 ;(defun test-xm ()
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
215 ; (let ((o (copy-syntax-table))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
216 ; (n (copy-syntax-table))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
217 ; (codes (syntax-designator-chars))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
218 ; (flags "12345678abp"))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
219 ; (while t
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
220 ; (let ((spec (concat (char-to-string (elt codes
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
221 ; (random (length codes))))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
222 ; (if (= (random 4) 0)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
223 ; "b"
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
224 ; " ")
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
225 ; (let* ((n (random 4))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
226 ; (s (make-string n 0)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
227 ; (while (> n 0)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
228 ; (setq n (1- n))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
229 ; (aset s n (aref flags (random (length flags)))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
230 ; s))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
231 ; (message "%S..." spec)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
232 ; (modify-syntax-entry ?a spec o)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
233 ; (xmodify-syntax-entry ?a spec n)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
234 ; (or (= (aref o ?a) (aref n ?a))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
235 ; (error "%s"
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
236 ; (format "fucked with %S: %x %x"
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
237 ; spec (aref o ?a) (aref n ?a))))))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
238
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
239
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
240 (defun describe-syntax-table (table stream)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
241 (let (first-char
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
242 last-char
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
243 prev-val
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
244 (describe-one
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
245 (if (featurep 'mule)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
246 #'(lambda (first last value stream)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
247 (if (equal first last)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
248 (cond ((vectorp first)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
249 (princ (format "%s, row %d\t"
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
250 (charset-name
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
251 (aref first 0))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
252 (aref first 1))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
253 stream))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
254 ((symbolp first)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
255 (princ first stream)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
256 (princ "\t" stream))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
257 (t
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
258 (princ (text-char-description first) stream)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
259 (princ "\t" stream)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
260 (cond ((vectorp first)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
261 (princ (format "%s, rows %d .. %d\t"
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
262 (charset-name
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
263 (aref first 0))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
264 (aref first 1)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
265 (aref last 1))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
266 stream))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
267 ((symbolp first)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
268 (princ (format "%s .. %s\t" first last) stream))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
269 (t
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
270 (princ (format "%s .. %s\t"
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
271 (text-char-description first)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
272 (text-char-description last))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
273 stream))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
274 (describe-syntax-code value stream))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
275 #'(lambda (first last value stream)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
276 (let* ((tem (text-char-description first))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
277 (pos (length tem))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
278 ;;(limit (cond ((numberp ctl-arrow) ctl-arrow)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
279 ;; ((memq ctl-arrow '(t nil)) 256)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
280 ;; (t 160)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
281 )
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
282 (princ tem stream)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
283 (if (> last first)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
284 (progn
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
285 (princ " .. " stream)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
286 (setq tem (text-char-description last))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
287 (princ tem stream)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
288 (setq pos (+ pos (length tem) 4))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
289 (while (progn (write-char ?\ stream)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
290 (setq pos (1+ pos))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
291 (< pos 16))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
292 (describe-syntax-code value stream)))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
293 (map-syntax-table
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
294 #'(lambda (range value)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
295 (cond
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
296 ((not first-char)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
297 (setq first-char range
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
298 last-char range
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
299 prev-val value))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
300 ((and (equal value prev-val)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
301 (or
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
302 (and (characterp range)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
303 (characterp first-char)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
304 (or (not (featurep 'mule))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
305 (eq (char-charset range)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
306 (char-charset first-char)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
307 (= (char-int last-char) (1- (char-int range))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
308 (and (vectorp range)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
309 (vectorp first-char)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
310 (eq (aref range 0) (aref first-char 0))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
311 (= (aref last-char 1) (1- (aref range 1))))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
312 (setq last-char range))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
313 (t
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
314 (funcall describe-one first-char last-char prev-val stream)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
315 (setq first-char range
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
316 last-char range
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
317 prev-val value)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
318 nil)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
319 table)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
320 (if first-char
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
321 (funcall describe-one first-char last-char prev-val stream))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
322
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
323 (defun describe-syntax-code (code stream)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
324 (let ((match (and (consp code) (cdr code)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
325 (invalid (gettext "**invalid**")) ;(empty "") ;constants
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
326 (standard-output (or stream standard-output))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
327 ;; #### I18N3 should temporarily set buffer to output-translatable
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
328 (in #'(lambda (string)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
329 (princ ",\n\t\t\t\t ")
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
330 (princ string)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
331 (syntax-string (syntax-code-to-string code)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
332 (if (consp code)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
333 (setq code (car code)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
334 (if (null syntax-string)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
335 (princ invalid)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
336 (princ syntax-string)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
337 (princ "\tmeaning: ")
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
338 (princ (aref ["whitespace" "punctuation" "word-constituent"
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
339 "symbol-constituent" "open-paren" "close-paren"
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
340 "expression-prefix" "string-quote" "paired-delimiter"
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
341 "escape" "character-quote" "comment-begin" "comment-end"
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
342 "inherit" "extended-word-constituent"]
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
343 (logand code 127)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
344
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
345 (if match
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
346 (progn
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
347 (princ ", matches ")
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
348 (princ (text-char-description match))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
349 (let* ((spec (elt syntax-string 0))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
350 (b3 (lsh code -16))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
351 (start1 (/= 0 (logand b3 128))) ;logtest!
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
352 (start1b (/= 0 (logand b3 64)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
353 (start2 (/= 0 (logand b3 32)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
354 (start2b (/= 0 (logand b3 16)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
355 (end1 (/= 0 (logand b3 8)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
356 (end1b (/= 0 (logand b3 4)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
357 (end2 (/= 0 (logand b3 2)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
358 (end2b (/= 0 (logand b3 1)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
359 (prefix (/= 0 (logand code 128)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
360 (single-char-p (or (= spec ?<) (= spec ?>))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
361 (if start1
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
362 (if single-char-p
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
363 (princ ", style A")
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
364 (funcall in
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
365 (gettext "first character of comment-start sequence A"))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
366 (if start2
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
367 (funcall in
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
368 (gettext "second character of comment-start sequence A")))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
369 (if end1
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
370 (if single-char-p
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
371 (princ ", style A")
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
372 (funcall in
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
373 (gettext "first character of comment-end sequence A"))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
374 (if end2
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
375 (funcall in
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
376 (gettext "second character of comment-end sequence A")))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
377 (if start1b
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
378 (if single-char-p
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
379 (princ ", style B")
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
380 (funcall in
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
381 (gettext "first character of comment-start sequence B"))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
382 (if start2b
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
383 (funcall in
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
384 (gettext "second character of comment-start sequence B")))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
385 (if end1b
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
386 (if single-char-p
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
387 (princ ", style B")
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
388 (funcall in
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
389 (gettext "first character of comment-end sequence B"))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
390 (if end2b
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
391 (funcall in
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
392 (gettext "second character of comment-end sequence B")))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
393 (if prefix
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
394 (funcall in
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
395 (gettext "prefix character for `backward-prefix-chars'"))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
396 (terpri stream))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
397
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
398 (defun symbol-near-point ()
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
399 "Return the first textual item to the nearest point."
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
400 (interactive)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
401 ;alg stolen from etag.el
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
402 (save-excursion
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
403 (if (or (bobp) (not (memq (char-syntax (char-before)) '(?w ?_))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
404 (while (not (looking-at "\\sw\\|\\s_\\|\\'"))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
405 (forward-char 1)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
406 (while (looking-at "\\sw\\|\\s_")
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
407 (forward-char 1))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
408 (if (re-search-backward "\\sw\\|\\s_" nil t)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
409 (regexp-quote
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
410 (progn (forward-char 1)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
411 (buffer-substring (point)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
412 (progn (forward-sexp -1)
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
413 (while (looking-at "\\s'")
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
414 (forward-char 1))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
415 (point)))))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
416 nil)))
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
417
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents:
diff changeset
418 ;;; syntax.el ends here