annotate lisp/syntax.el @ 5494:861f2601a38b

Sync s/ files with GNU 23.1.92, delete obsolete stuff, simplify other stuff --- ChangeLog 2010-02-20 Ben Wing <ben@xemacs.org> * configure: * configure.ac (XE_EXPAND_VARIABLE): * configure.ac (TAB): irix6-0.h renamed to irix6-5.h; sco7.h deleted. bsd4-3.h renamed to bsd-common.h. Simplify setting machine= for intel386, mips. Put back linux.h. Incorporate some stuff about debug/optimization flags in irix6-5.h into configure.ac. Add a comment about LCC stuff with optimization flags that should be fixed up. --- src/ChangeLog 2010-02-20 Ben Wing <ben@xemacs.org> * sysdep.c: * sysdep.c (qxe_reliable_signal): * sysdep.c (retry_open_1): * sysdep.c (retry_close): * sysdep.c (retry_read_1): * sysdep.c (retry_write_1): * sysdep.c (retry_fopen): * sysdep.c (retry_fclose): * sysdep.c (retry_fread): * sysdep.c (retry_fwrite): Remove conditionalization on INTERRUPTIBLE_IO, INTERRUPTIBLE_OPEN, INTERRUPTIBLE_CLOSE -- always check for EINTR as there's no harm in it. Remove old #if 0'ed out SA_RESTART code. Use manifest constant IRIX6_5 instead of IRIX. * Makefile.in.in: * dired.c: * dired.c (Ffile_attributes): Use manifest constant IRIX6_5 instead of IRIX. Eliminate constant BSD4_2, use BSD4_3 instead. * getloadavg.c: * getloadavg.c (getloadavg): * getloadavg.c (LDAV_PRIVILEGED): * getloadavg.c (LDAV_DONE): Sync with GNU 23.1.92. 2010-02-20 Ben Wing <ben@xemacs.org> * s/README: * s/aix4-2.h: * s/aix4-2.h (MAIL_USE_LOCKF): * s/bsd-common.h: * s/freebsd.h: * s/freebsd.h (Carey): * s/freebsd.h (or): * s/gnu.h: * s/gnu.h (DATA_START): * s/hpux11-shr.h: * s/hpux11.h: * s/hpux11.h (random): * s/irix6-5.h: * s/linux.h: * s/mach-bsd4-3.h: * s/netbsd.h: * s/netbsd.h (or): * s/netbsd.h (A_TEXT_OFFSET): * s/netbsd.h (NO_MATHERR): * s/openbsd.h: * s/sol2.h: * s/usg5-4-2.h: * s/usg5-4.h: * s/usg5-4.h (or): * s/usg5-4.h (ORDINARY_LINK): Sync with GNU 23.1.92. Put back linux.h. Rename: bsd4-3.h -> bsd-common.h; irix6-0.h -> irix6-5.h. Delete: template.h (useless). Delete a whole bunch of obsolete stuff in sol2.h, linux.h, freebsd.h -- assume anything over 10 years old is sufficiently obsolete to be deleted. Remove LIBS_DEBUG, C_DEBUG_SWITCH, C_OPTIMIZE_SWITCH, KERNEL_FILE, LDAV_SYMBOL, most remaining PTY stuff, remaining TERMINFO/TERMCAP stuff. Update README appropriately. Remove stuff in hpux11-shr.h duplicated in hpux11.h. Remove sco7.h, identical with usg5-4-2.h. Remove unused POSIX flag, BROKEN_TIOC*, NO_SIOCTL_H. 2010-02-20 Ben Wing <ben@xemacs.org> * m/arm.h: * m/hp800.h: * m/intel386.h: * m/mips.h: * m/powerpc.h: * m/sparc.h: * m/template.h: Temporarily ifdef out all defines involving load-average stuff -- using define ENABLE_SM_FILE_DECLS_OF_LOADAVG_STUFF, which is not defined. I'm pretty sure getloadavg.c will take care of defining stuff properly on all systems without the need to duplicate the info in m/*. --ben Delete LIBS_TERMCAP; configure auto-handles this. Delete extra stuff in hp800.h. Delete C_DEBUG_SWITCH, C_OPTIMIZE_SWITCH, LDAV_SYMBOL; incorporate some stuff into configure.ac.
author Ben Wing <ben@xemacs.org>
date Sat, 20 Feb 2010 06:03:00 -0600
parents 99e465e2da2e
children 308d34e9f07d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 ;; syntax.el --- Syntax-table hacking stuff, moved from syntax.c
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 ;; Copyright (C) 1993, 1997 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 ;; Copyright (C) 1995 Sun Microsystems.
4945
99e465e2da2e (main branch) Update make-syntax-table doc
Ben Wing <ben@xemacs.org>
parents: 4806
diff changeset
5 ;; Copyright (C) 2005, 2010 Ben Wing.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 ;; This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 ;; XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 ;; under the terms of the GNU General Public License as published by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 ;; the Free Software Foundation; either version 2, or (at your option)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 ;; any later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 ;; XEmacs is distributed in the hope that it will be useful, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 ;; General Public License for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 ;; You should have received a copy of the GNU General Public License
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
20 ;; along with XEmacs; see the file COPYING. If not, write to the
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 ;; Free Software Foundation, 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 ;; Boston, MA 02111-1307, USA.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 ;;; Synched up with: FSF 19.28.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 ;;; Commentary:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 ;; This file is dumped with XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 ;; Note: FSF does not have a file syntax.el. This stuff is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 ;; in syntax.c. See comments there about not merging past 19.28.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 ;; Significantly hacked upon by Ben Wing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 ;;; Code:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 (defun make-syntax-table (&optional oldtable)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 "Return a new syntax table.
4945
99e465e2da2e (main branch) Update make-syntax-table doc
Ben Wing <ben@xemacs.org>
parents: 4806
diff changeset
39
99e465e2da2e (main branch) Update make-syntax-table doc
Ben Wing <ben@xemacs.org>
parents: 4806
diff changeset
40 It inherits all characters from the standard syntax table.
99e465e2da2e (main branch) Update make-syntax-table doc
Ben Wing <ben@xemacs.org>
parents: 4806
diff changeset
41
99e465e2da2e (main branch) Update make-syntax-table doc
Ben Wing <ben@xemacs.org>
parents: 4806
diff changeset
42 A syntax table is a char table of type `syntax' (see `make-char-table').
99e465e2da2e (main branch) Update make-syntax-table doc
Ben Wing <ben@xemacs.org>
parents: 4806
diff changeset
43 The valid values are integers (intended to be syntax codes as generated by
99e465e2da2e (main branch) Update make-syntax-table doc
Ben Wing <ben@xemacs.org>
parents: 4806
diff changeset
44 `syntax-string-to-code'), and the default result given by `get-char-table'
99e465e2da2e (main branch) Update make-syntax-table doc
Ben Wing <ben@xemacs.org>
parents: 4806
diff changeset
45 is the syntax code for `word'. (Note: In 21.4 and prior, it was the code
99e465e2da2e (main branch) Update make-syntax-table doc
Ben Wing <ben@xemacs.org>
parents: 4806
diff changeset
46 for `inherit'.)
99e465e2da2e (main branch) Update make-syntax-table doc
Ben Wing <ben@xemacs.org>
parents: 4806
diff changeset
47
99e465e2da2e (main branch) Update make-syntax-table doc
Ben Wing <ben@xemacs.org>
parents: 4806
diff changeset
48 To modify a syntax table, you should normally use `modify-syntax-entry'
99e465e2da2e (main branch) Update make-syntax-table doc
Ben Wing <ben@xemacs.org>
parents: 4806
diff changeset
49 rather than directly modify the table with `put-char-table'.
99e465e2da2e (main branch) Update make-syntax-table doc
Ben Wing <ben@xemacs.org>
parents: 4806
diff changeset
50
99e465e2da2e (main branch) Update make-syntax-table doc
Ben Wing <ben@xemacs.org>
parents: 4806
diff changeset
51 See `modify-syntax-entry' for a description of the character codes used
99e465e2da2e (main branch) Update make-syntax-table doc
Ben Wing <ben@xemacs.org>
parents: 4806
diff changeset
52 to indicate the various syntax classes."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 (make-char-table 'syntax))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54
4468
a78d697ccd2c Import and extend GNU's descr-text.el, supporting prefix argument for C-x =
Aidan Kehoe <kehoea@parhasard.net>
parents: 3067
diff changeset
55 (defun syntax-after (pos)
a78d697ccd2c Import and extend GNU's descr-text.el, supporting prefix argument for C-x =
Aidan Kehoe <kehoea@parhasard.net>
parents: 3067
diff changeset
56 "Return the raw syntax of the char after POS.
a78d697ccd2c Import and extend GNU's descr-text.el, supporting prefix argument for C-x =
Aidan Kehoe <kehoea@parhasard.net>
parents: 3067
diff changeset
57 If POS is outside the buffer's accessible portion, return nil."
a78d697ccd2c Import and extend GNU's descr-text.el, supporting prefix argument for C-x =
Aidan Kehoe <kehoea@parhasard.net>
parents: 3067
diff changeset
58 (unless (or (< pos (point-min)) (>= pos (point-max)))
a78d697ccd2c Import and extend GNU's descr-text.el, supporting prefix argument for C-x =
Aidan Kehoe <kehoea@parhasard.net>
parents: 3067
diff changeset
59 (let ((st (if lookup-syntax-properties
a78d697ccd2c Import and extend GNU's descr-text.el, supporting prefix argument for C-x =
Aidan Kehoe <kehoea@parhasard.net>
parents: 3067
diff changeset
60 (get-char-property pos 'syntax-table))))
a78d697ccd2c Import and extend GNU's descr-text.el, supporting prefix argument for C-x =
Aidan Kehoe <kehoea@parhasard.net>
parents: 3067
diff changeset
61 (char-syntax (char-after pos) (or st (syntax-table))))))
a78d697ccd2c Import and extend GNU's descr-text.el, supporting prefix argument for C-x =
Aidan Kehoe <kehoea@parhasard.net>
parents: 3067
diff changeset
62
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 (defun simple-set-syntax-entry (char spec table)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 (put-char-table char spec table))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 (defun char-syntax-from-code (code)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 "Extract the syntax designator from the internal syntax code CODE.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 CODE is the value actually contained in the syntax table."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 (if (consp code)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 (setq code (car code)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 (aref (syntax-designator-chars) (logand code 127)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 (defun set-char-syntax-in-code (code desig)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 "Return a new internal syntax code whose syntax designator is DESIG.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 Other characteristics are the same as in CODE."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 (let ((newcode (if (consp code) (car code) code)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 (setq newcode (logior (string-match
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 (regexp-quote (char-to-string desig))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 (syntax-designator-chars))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 (logand newcode (lognot 127))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 (if (consp code) (cons newcode (cdr code))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 newcode)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 (defun syntax-code-to-string (code)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 "Return a string equivalent to internal syntax code CODE.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 The string can be passed to `modify-syntax-entry'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 If CODE is invalid, return nil."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 (let ((match (and (consp code) (cdr code)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 (codes (syntax-designator-chars)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 (if (consp code)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 (setq code (car code)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 (if (or (not (integerp code))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 (> (logand code 127) (length codes)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 (with-output-to-string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 (let* ((spec (elt codes (logand code 127)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 (b3 (lsh code -16))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 (start1 (/= 0 (logand b3 128))) ;logtest!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 (start1b (/= 0 (logand b3 64)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 (start2 (/= 0 (logand b3 32)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 (start2b (/= 0 (logand b3 16)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 (end1 (/= 0 (logand b3 8)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 (end1b (/= 0 (logand b3 4)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 (end2 (/= 0 (logand b3 2)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 (end2b (/= 0 (logand b3 1)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 (prefix (/= 0 (logand code 128)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 (single-char-p (or (= spec ?<) (= spec ?>)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 (write-char spec)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 (write-char (if match match 32))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 ;;; (if start1 (if single-char-p (write-char ?a) (write-char ?1)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 (if start1 (if single-char-p (write-char ? ) (write-char ?1)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 (if start2 (write-char ?2))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 ;;; (if end1 (if single-char-p (write-char ?a) (write-char ?3)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 (if end1 (if single-char-p (write-char ? ) (write-char ?3)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 (if end2 (write-char ?4))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 (if start1b (if single-char-p (write-char ?b) (write-char ?5)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 (if start2b (write-char ?6))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 (if end1b (if single-char-p (write-char ?b) (write-char ?7)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 (if end2b (write-char ?8))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 (if prefix (write-char ?p)))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 (defun syntax-string-to-code (string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 "Return the internal syntax code equivalent to STRING.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 STRING should be something acceptable as the second argument to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 `modify-syntax-entry'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 If STRING is invalid, signal an error."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 (let* ((bflag nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 (b3 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 (ch0 (aref string 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 (len (length string))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 (code (string-match (regexp-quote (char-to-string ch0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 (syntax-designator-chars)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 (i 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 ch)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 (or code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 (error "Invalid syntax designator: %S" string))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 (while (< i len)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 (setq ch (aref string i))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 (incf i)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 (case ch
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 (?1 (setq b3 (logior b3 128)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 (?2 (setq b3 (logior b3 32)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 (?3 (setq b3 (logior b3 8)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 (?4 (setq b3 (logior b3 2)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 (?5 (setq b3 (logior b3 64)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 (?6 (setq b3 (logior b3 16)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 (?7 (setq b3 (logior b3 4)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 (?8 (setq b3 (logior b3 1)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 (?a (case ch0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 (?< (setq b3 (logior b3 128)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 (?> (setq b3 (logior b3 8)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 (?b (case ch0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 (?< (setq b3 (logior b3 64) bflag t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 (?> (setq b3 (logior b3 4) bflag t))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 (?p (setq code (logior code (lsh 1 7))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 (?\ nil) ;; ignore for compatibility
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 (otherwise
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 (error "Invalid syntax description flag: %S" string))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 ;; default single char style if `b' has not been seen
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 (if (not bflag)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 (case ch0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 (?< (setq b3 (logior b3 128)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 (?> (setq b3 (logior b3 8)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 (setq code (logior code (lsh b3 16)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 (if (and (> len 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 ;; tough luck if you want to make space a paren!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 (/= (aref string 1) ?\ ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 (setq code (cons code (aref string 1))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 code))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
172 (defun modify-syntax-entry (char-range spec &optional syntax-table)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 "Set syntax for the characters CHAR-RANGE according to string SPEC.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 CHAR-RANGE is a single character or a range of characters,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 as per `put-char-table'.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
176 The syntax is changed only for SYNTAX-TABLE, which defaults to
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 the current buffer's syntax table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 The first character of SPEC should be one of the following:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 Space whitespace syntax. w word constituent.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 _ symbol constituent. . punctuation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 \( open-parenthesis. \) close-parenthesis.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 \" string quote. \\ character-quote.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 $ paired delimiter. ' expression quote or prefix operator.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 < comment starter. > comment ender.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 / character-quote. @ inherit from `standard-syntax-table'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 Only single-character comment start and end sequences are represented thus.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 Two-character sequences are represented as described below.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 The second character of SPEC is the matching parenthesis,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 used only if the first character is `(' or `)'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 Any additional characters are flags.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 Defined flags are the characters 1, 2, 3, 4, 5, 6, 7, 8, p, a, and b.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 1 means C is the first of a two-char comment start sequence of style a.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 2 means C is the second character of such a sequence.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 3 means C is the first of a two-char comment end sequence of style a.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 4 means C is the second character of such a sequence.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 5 means C is the first of a two-char comment start sequence of style b.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 6 means C is the second character of such a sequence.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 7 means C is the first of a two-char comment end sequence of style b.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 8 means C is the second character of such a sequence.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 p means C is a prefix character for `backward-prefix-chars';
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 such characters are treated as whitespace when they occur
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 between expressions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 a means C is comment starter or comment ender for comment style a (default)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 b means C is comment starter or comment ender for comment style b."
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
206 (interactive
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 ;; I really don't know why this is interactive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 ;; help-form should at least be made useful while reading the second arg
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 "cSet syntax for character: \nsSet syntax for %c to: ")
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
210 (simple-set-syntax-entry
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
211 char-range
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
212 (syntax-string-to-code spec)
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
213 (cond ((syntax-table-p syntax-table)
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
214 syntax-table)
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
215 ((null syntax-table)
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
216 (syntax-table))
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
217 (t
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
218 (wrong-type-argument 'syntax-table-p syntax-table))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220
4806
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
221 ((macro
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
222 . (lambda (map-syntax-definition)
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
223 "Replace the variable names in MAP-SYNTAX-DEFINITION with uninterned
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
224 symbols, at byte-compile time. This avoids the risk of variable names
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
225 within the functions called from MAP-SYNTAX-DEFINITION being shared with
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
226 MAP-SYNTAX-DEFINITION, and as such subject to modification, one of the
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
227 common downsides of dynamic scope."
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
228 (nsublis
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
229 '((syntax-table . #:syntax-table)
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
230 (m-s-function . #:function)
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
231 (range . #:range)
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
232 (key . #:key)
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
233 (value . #:value))
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
234 map-syntax-definition)))
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
235 (defun map-syntax-table (m-s-function syntax-table &optional range)
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
236 "Map FUNCTION over entries in SYNTAX-TABLE, collapsing inheritance.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 This is similar to `map-char-table', but works only on syntax tables, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 collapses any entries that call for inheritance by invisibly substituting
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 the inherited values from the standard syntax table."
4806
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
240 (check-argument-type 'syntax-table-p syntax-table)
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
241 (map-char-table #'(lambda (key value)
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
242 (if (eq ?@ (char-syntax-from-code value))
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
243 (map-char-table
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
244 #'(lambda (key value)
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
245 (funcall m-s-function key value))
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
246 (standard-syntax-table)
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
247 key)
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
248 (funcall m-s-function key value)))
fd36a980d701 Use uninterned symbols in various information-hiding contexts.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4468
diff changeset
249 syntax-table range)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 ;(defun test-xm ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 ; (let ((o (copy-syntax-table))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 ; (n (copy-syntax-table))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 ; (codes (syntax-designator-chars))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 ; (flags "12345678abp"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 ; (while t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 ; (let ((spec (concat (char-to-string (elt codes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 ; (random (length codes))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 ; (if (= (random 4) 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 ; "b"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 ; " ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 ; (let* ((n (random 4))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 ; (s (make-string n 0)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 ; (while (> n 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 ; (setq n (1- n))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 ; (aset s n (aref flags (random (length flags)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 ; s))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 ; (message "%S..." spec)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 ; (modify-syntax-entry ?a spec o)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 ; (xmodify-syntax-entry ?a spec n)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 ; (or (= (aref o ?a) (aref n ?a))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 ; (error "%s"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 ; (format "fucked with %S: %x %x"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 ; spec (aref o ?a) (aref n ?a))))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276
3067
2f31c7aa4e96 [xemacs-hg @ 2005-11-13 10:57:59 by ben]
ben
parents: 502
diff changeset
277 (defun describe-char-table (table mapper describe-value stream)
2f31c7aa4e96 [xemacs-hg @ 2005-11-13 10:57:59 by ben]
ben
parents: 502
diff changeset
278 "Describe char-table TABLE, outputting to STREAM.
2f31c7aa4e96 [xemacs-hg @ 2005-11-13 10:57:59 by ben]
ben
parents: 502
diff changeset
279 MAPPER maps over the table and should be `map-char-table' or
2f31c7aa4e96 [xemacs-hg @ 2005-11-13 10:57:59 by ben]
ben
parents: 502
diff changeset
280 `map-syntax-table'. DESCRIBE-VALUE is a function of two arguments,
2f31c7aa4e96 [xemacs-hg @ 2005-11-13 10:57:59 by ben]
ben
parents: 502
diff changeset
281 VALUE and STREAM, and should output a description of VALUE."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 (let (first-char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 last-char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 prev-val
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 (describe-one
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 (if (featurep 'mule)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 #'(lambda (first last value stream)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 (if (equal first last)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 (cond ((vectorp first)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 (princ (format "%s, row %d\t"
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
291 (declare-fboundp (charset-name
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
292 (aref first 0)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 (aref first 1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 stream))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 ((symbolp first)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 (princ first stream)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 (princ "\t" stream))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 (princ (text-char-description first) stream)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 (princ "\t" stream)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 (cond ((vectorp first)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 (princ (format "%s, rows %d .. %d\t"
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
303 (declare-fboundp (charset-name
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
304 (aref first 0)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 (aref first 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 (aref last 1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 stream))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 ((symbolp first)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 (princ (format "%s .. %s\t" first last) stream))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 (princ (format "%s .. %s\t"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 (text-char-description first)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 (text-char-description last))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 stream))))
3067
2f31c7aa4e96 [xemacs-hg @ 2005-11-13 10:57:59 by ben]
ben
parents: 502
diff changeset
315 (funcall describe-value value stream))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 #'(lambda (first last value stream)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 (let* ((tem (text-char-description first))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 (pos (length tem))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 ;;(limit (cond ((numberp ctl-arrow) ctl-arrow)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 ;; ((memq ctl-arrow '(t nil)) 256)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 ;; (t 160)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 (princ tem stream)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 (if (> last first)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 (princ " .. " stream)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 (setq tem (text-char-description last))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 (princ tem stream)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 (setq pos (+ pos (length tem) 4))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 (while (progn (write-char ?\ stream)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 (setq pos (1+ pos))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 (< pos 16))))
3067
2f31c7aa4e96 [xemacs-hg @ 2005-11-13 10:57:59 by ben]
ben
parents: 502
diff changeset
333 (funcall describe-value value stream)))))
2f31c7aa4e96 [xemacs-hg @ 2005-11-13 10:57:59 by ben]
ben
parents: 502
diff changeset
334 (funcall mapper
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 #'(lambda (range value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 (cond
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 ((not first-char)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 (setq first-char range
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 last-char range
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 prev-val value))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 ((and (equal value prev-val)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 (or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 (and (characterp range)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 (characterp first-char)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 (or (not (featurep 'mule))
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
346 (eq (declare-fboundp (char-charset range))
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
347 (declare-fboundp (char-charset first-char))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 (= (char-int last-char) (1- (char-int range))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 (and (vectorp range)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 (vectorp first-char)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 (eq (aref range 0) (aref first-char 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 (= (aref last-char 1) (1- (aref range 1))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 (setq last-char range))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 (funcall describe-one first-char last-char prev-val stream)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 (setq first-char range
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 last-char range
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 prev-val value)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 table)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 (if first-char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 (funcall describe-one first-char last-char prev-val stream))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363
3067
2f31c7aa4e96 [xemacs-hg @ 2005-11-13 10:57:59 by ben]
ben
parents: 502
diff changeset
364 (defun describe-syntax-table (table stream)
2f31c7aa4e96 [xemacs-hg @ 2005-11-13 10:57:59 by ben]
ben
parents: 502
diff changeset
365 "Output a description of TABLE (a syntax table) to STREAM."
2f31c7aa4e96 [xemacs-hg @ 2005-11-13 10:57:59 by ben]
ben
parents: 502
diff changeset
366 (describe-char-table table 'map-syntax-table 'describe-syntax-code stream))
2f31c7aa4e96 [xemacs-hg @ 2005-11-13 10:57:59 by ben]
ben
parents: 502
diff changeset
367
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 (defun describe-syntax-code (code stream)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 (let ((match (and (consp code) (cdr code)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 (invalid (gettext "**invalid**")) ;(empty "") ;constants
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 (standard-output (or stream standard-output))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 ;; #### I18N3 should temporarily set buffer to output-translatable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 (in #'(lambda (string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 (princ ",\n\t\t\t\t ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 (princ string)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 (syntax-string (syntax-code-to-string code)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 (if (consp code)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 (setq code (car code)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 (if (null syntax-string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 (princ invalid)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 (princ syntax-string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 (princ "\tmeaning: ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 (princ (aref ["whitespace" "punctuation" "word-constituent"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 "symbol-constituent" "open-paren" "close-paren"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 "expression-prefix" "string-quote" "paired-delimiter"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 "escape" "character-quote" "comment-begin" "comment-end"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 "inherit" "extended-word-constituent"]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 (logand code 127)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 (if match
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 (princ ", matches ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 (princ (text-char-description match))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 (let* ((spec (elt syntax-string 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 (b3 (lsh code -16))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 (start1 (/= 0 (logand b3 128))) ;logtest!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 (start1b (/= 0 (logand b3 64)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 (start2 (/= 0 (logand b3 32)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 (start2b (/= 0 (logand b3 16)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 (end1 (/= 0 (logand b3 8)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 (end1b (/= 0 (logand b3 4)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 (end2 (/= 0 (logand b3 2)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 (end2b (/= 0 (logand b3 1)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 (prefix (/= 0 (logand code 128)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 (single-char-p (or (= spec ?<) (= spec ?>))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 (if start1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 (if single-char-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 (princ ", style A")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 (funcall in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 (gettext "first character of comment-start sequence A"))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 (if start2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 (funcall in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 (gettext "second character of comment-start sequence A")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 (if end1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 (if single-char-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 (princ ", style A")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 (funcall in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 (gettext "first character of comment-end sequence A"))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 (if end2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 (funcall in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 (gettext "second character of comment-end sequence A")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 (if start1b
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 (if single-char-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 (princ ", style B")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 (funcall in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 (gettext "first character of comment-start sequence B"))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 (if start2b
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 (funcall in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 (gettext "second character of comment-start sequence B")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 (if end1b
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 (if single-char-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 (princ ", style B")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 (funcall in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 (gettext "first character of comment-end sequence B"))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 (if end2b
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 (funcall in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 (gettext "second character of comment-end sequence B")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 (if prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 (funcall in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 (gettext "prefix character for `backward-prefix-chars'"))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 (terpri stream))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 (defun symbol-near-point ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 "Return the first textual item to the nearest point."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 ;alg stolen from etag.el
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 (save-excursion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 (if (or (bobp) (not (memq (char-syntax (char-before)) '(?w ?_))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 (while (not (looking-at "\\sw\\|\\s_\\|\\'"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 (forward-char 1)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 (while (looking-at "\\sw\\|\\s_")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 (forward-char 1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 (if (re-search-backward "\\sw\\|\\s_" nil t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 (regexp-quote
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 (progn (forward-char 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 (buffer-substring (point)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 (progn (forward-sexp -1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 (while (looking-at "\\s'")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 (forward-char 1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 (point)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 nil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 ;;; syntax.el ends here