annotate doc/lispref/syntax.texi @ 97366:d2c211c8ceda

(w32_list_system_processes, w32_system_process_attributes): Add prototypes. (Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess, Qttname) (Qminflt, Qmajflt, Qcminflt, Qcmajflt, Qutime, Qstime, Qcutime) (Qpri, Qnice, Qthcount, Qstart, Qvsize, Qrss, Qargs, Quser, Qgroup) (Qetime, Qpcpu, Qpmem, Qtpgid, Qcstime): Add extern declarations.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 09 Aug 2008 17:53:30 +0000
parents 107ccd98fa12
children cb5d2387102c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
84102
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1 @c -*-texinfo-*-
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
2 @c This is part of the GNU Emacs Lisp Reference Manual.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
87649
107ccd98fa12 Merge from emacs--rel--22
Miles Bader <miles@gnu.org>
parents: 84116
diff changeset
4 @c 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
84102
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
5 @c See the file elisp.texi for copying conditions.
84116
0ba80d073e27 (setfilename): Go up one more level to ../../info.
Glenn Morris <rgm@gnu.org>
parents: 84102
diff changeset
6 @setfilename ../../info/syntax
84102
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
7 @node Syntax Tables, Abbrevs, Searching and Matching, Top
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
8 @chapter Syntax Tables
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
9 @cindex parsing buffer text
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
10 @cindex syntax table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
11 @cindex text parsing
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
12
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
13 A @dfn{syntax table} specifies the syntactic textual function of each
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
14 character. This information is used by the @dfn{parsing functions}, the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
15 complex movement commands, and others to determine where words, symbols,
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
16 and other syntactic constructs begin and end. The current syntax table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
17 controls the meaning of the word motion functions (@pxref{Word Motion})
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
18 and the list motion functions (@pxref{List Motion}), as well as the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
19 functions in this chapter.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
20
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
21 @menu
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
22 * Basics: Syntax Basics. Basic concepts of syntax tables.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
23 * Desc: Syntax Descriptors. How characters are classified.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
24 * Syntax Table Functions:: How to create, examine and alter syntax tables.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
25 * Syntax Properties:: Overriding syntax with text properties.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
26 * Motion and Syntax:: Moving over characters with certain syntaxes.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
27 * Parsing Expressions:: Parsing balanced expressions
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
28 using the syntax table.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
29 * Standard Syntax Tables:: Syntax tables used by various major modes.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
30 * Syntax Table Internals:: How syntax table information is stored.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
31 * Categories:: Another way of classifying character syntax.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
32 @end menu
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
33
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
34 @node Syntax Basics
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
35 @section Syntax Table Concepts
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
36
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
37 @ifnottex
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
38 A @dfn{syntax table} provides Emacs with the information that
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
39 determines the syntactic use of each character in a buffer. This
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
40 information is used by the parsing commands, the complex movement
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
41 commands, and others to determine where words, symbols, and other
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
42 syntactic constructs begin and end. The current syntax table controls
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
43 the meaning of the word motion functions (@pxref{Word Motion}) and the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
44 list motion functions (@pxref{List Motion}) as well as the functions in
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
45 this chapter.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
46 @end ifnottex
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
47
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
48 A syntax table is a char-table (@pxref{Char-Tables}). The element at
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
49 index @var{c} describes the character with code @var{c}. The element's
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
50 value should be a list that encodes the syntax of the character in
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
51 question.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
52
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
53 Syntax tables are used only for moving across text, not for the Emacs
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
54 Lisp reader. Emacs Lisp uses built-in syntactic rules when reading Lisp
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
55 expressions, and these rules cannot be changed. (Some Lisp systems
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
56 provide ways to redefine the read syntax, but we decided to leave this
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
57 feature out of Emacs Lisp for simplicity.)
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
58
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
59 Each buffer has its own major mode, and each major mode has its own
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
60 idea of the syntactic class of various characters. For example, in Lisp
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
61 mode, the character @samp{;} begins a comment, but in C mode, it
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
62 terminates a statement. To support these variations, Emacs makes the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
63 choice of syntax table local to each buffer. Typically, each major
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
64 mode has its own syntax table and installs that table in each buffer
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
65 that uses that mode. Changing this table alters the syntax in all
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
66 those buffers as well as in any buffers subsequently put in that mode.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
67 Occasionally several similar modes share one syntax table.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
68 @xref{Example Major Modes}, for an example of how to set up a syntax
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
69 table.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
70
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
71 A syntax table can inherit the data for some characters from the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
72 standard syntax table, while specifying other characters itself. The
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
73 ``inherit'' syntax class means ``inherit this character's syntax from
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
74 the standard syntax table.'' Just changing the standard syntax for a
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
75 character affects all syntax tables that inherit from it.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
76
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
77 @defun syntax-table-p object
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
78 This function returns @code{t} if @var{object} is a syntax table.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
79 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
80
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
81 @node Syntax Descriptors
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
82 @section Syntax Descriptors
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
83 @cindex syntax class
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
84
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
85 This section describes the syntax classes and flags that denote the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
86 syntax of a character, and how they are represented as a @dfn{syntax
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
87 descriptor}, which is a Lisp string that you pass to
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
88 @code{modify-syntax-entry} to specify the syntax you want.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
89
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
90 The syntax table specifies a syntax class for each character. There
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
91 is no necessary relationship between the class of a character in one
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
92 syntax table and its class in any other table.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
93
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
94 Each class is designated by a mnemonic character, which serves as the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
95 name of the class when you need to specify a class. Usually the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
96 designator character is one that is often assigned that class; however,
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
97 its meaning as a designator is unvarying and independent of what syntax
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
98 that character currently has. Thus, @samp{\} as a designator character
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
99 always gives ``escape character'' syntax, regardless of what syntax
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
100 @samp{\} currently has.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
101
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
102 @cindex syntax descriptor
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
103 A syntax descriptor is a Lisp string that specifies a syntax class, a
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
104 matching character (used only for the parenthesis classes) and flags.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
105 The first character is the designator for a syntax class. The second
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
106 character is the character to match; if it is unused, put a space there.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
107 Then come the characters for any desired flags. If no matching
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
108 character or flags are needed, one character is sufficient.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
109
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
110 For example, the syntax descriptor for the character @samp{*} in C
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
111 mode is @samp{@w{. 23}} (i.e., punctuation, matching character slot
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
112 unused, second character of a comment-starter, first character of a
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
113 comment-ender), and the entry for @samp{/} is @samp{@w{. 14}} (i.e.,
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
114 punctuation, matching character slot unused, first character of a
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
115 comment-starter, second character of a comment-ender).
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
116
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
117 @menu
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
118 * Syntax Class Table:: Table of syntax classes.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
119 * Syntax Flags:: Additional flags each character can have.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
120 @end menu
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
121
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
122 @node Syntax Class Table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
123 @subsection Table of Syntax Classes
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
124
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
125 Here is a table of syntax classes, the characters that stand for them,
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
126 their meanings, and examples of their use.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
127
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
128 @deffn {Syntax class} @w{whitespace character}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
129 @dfn{Whitespace characters} (designated by @w{@samp{@ }} or @samp{-})
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
130 separate symbols and words from each other. Typically, whitespace
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
131 characters have no other syntactic significance, and multiple whitespace
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
132 characters are syntactically equivalent to a single one. Space, tab,
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
133 newline and formfeed are classified as whitespace in almost all major
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
134 modes.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
135 @end deffn
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
136
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
137 @deffn {Syntax class} @w{word constituent}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
138 @dfn{Word constituents} (designated by @samp{w}) are parts of words in
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
139 human languages, and are typically used in variable and command names
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
140 in programs. All upper- and lower-case letters, and the digits, are
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
141 typically word constituents.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
142 @end deffn
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
143
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
144 @deffn {Syntax class} @w{symbol constituent}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
145 @dfn{Symbol constituents} (designated by @samp{_}) are the extra
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
146 characters that are used in variable and command names along with word
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
147 constituents. For example, the symbol constituents class is used in
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
148 Lisp mode to indicate that certain characters may be part of symbol
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
149 names even though they are not part of English words. These characters
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
150 are @samp{$&*+-_<>}. In standard C, the only non-word-constituent
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
151 character that is valid in symbols is underscore (@samp{_}).
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
152 @end deffn
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
153
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
154 @deffn {Syntax class} @w{punctuation character}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
155 @dfn{Punctuation characters} (designated by @samp{.}) are those
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
156 characters that are used as punctuation in English, or are used in some
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
157 way in a programming language to separate symbols from one another.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
158 Some programming language modes, such as Emacs Lisp mode, have no
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
159 characters in this class since the few characters that are not symbol or
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
160 word constituents all have other uses. Other programming language modes,
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
161 such as C mode, use punctuation syntax for operators.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
162 @end deffn
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
163
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
164 @deffn {Syntax class} @w{open parenthesis character}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
165 @deffnx {Syntax class} @w{close parenthesis character}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
166 @cindex parenthesis syntax
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
167 Open and close @dfn{parenthesis characters} are characters used in
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
168 dissimilar pairs to surround sentences or expressions. Such a grouping
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
169 is begun with an open parenthesis character and terminated with a close.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
170 Each open parenthesis character matches a particular close parenthesis
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
171 character, and vice versa. Normally, Emacs indicates momentarily the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
172 matching open parenthesis when you insert a close parenthesis.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
173 @xref{Blinking}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
174
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
175 The class of open parentheses is designated by @samp{(}, and that of
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
176 close parentheses by @samp{)}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
177
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
178 In English text, and in C code, the parenthesis pairs are @samp{()},
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
179 @samp{[]}, and @samp{@{@}}. In Emacs Lisp, the delimiters for lists and
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
180 vectors (@samp{()} and @samp{[]}) are classified as parenthesis
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
181 characters.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
182 @end deffn
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
183
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
184 @deffn {Syntax class} @w{string quote}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
185 @dfn{String quote characters} (designated by @samp{"}) are used in
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
186 many languages, including Lisp and C, to delimit string constants. The
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
187 same string quote character appears at the beginning and the end of a
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
188 string. Such quoted strings do not nest.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
189
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
190 The parsing facilities of Emacs consider a string as a single token.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
191 The usual syntactic meanings of the characters in the string are
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
192 suppressed.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
193
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
194 The Lisp modes have two string quote characters: double-quote (@samp{"})
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
195 and vertical bar (@samp{|}). @samp{|} is not used in Emacs Lisp, but it
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
196 is used in Common Lisp. C also has two string quote characters:
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
197 double-quote for strings, and single-quote (@samp{'}) for character
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
198 constants.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
199
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
200 English text has no string quote characters because English is not a
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
201 programming language. Although quotation marks are used in English,
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
202 we do not want them to turn off the usual syntactic properties of
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
203 other characters in the quotation.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
204 @end deffn
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
205
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
206 @deffn {Syntax class} @w{escape-syntax character}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
207 An @dfn{escape character} (designated by @samp{\}) starts an escape
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
208 sequence such as is used in C string and character constants. The
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
209 character @samp{\} belongs to this class in both C and Lisp. (In C, it
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
210 is used thus only inside strings, but it turns out to cause no trouble
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
211 to treat it this way throughout C code.)
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
212
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
213 Characters in this class count as part of words if
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
214 @code{words-include-escapes} is non-@code{nil}. @xref{Word Motion}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
215 @end deffn
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
216
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
217 @deffn {Syntax class} @w{character quote}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
218 A @dfn{character quote character} (designated by @samp{/}) quotes the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
219 following character so that it loses its normal syntactic meaning. This
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
220 differs from an escape character in that only the character immediately
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
221 following is ever affected.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
222
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
223 Characters in this class count as part of words if
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
224 @code{words-include-escapes} is non-@code{nil}. @xref{Word Motion}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
225
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
226 This class is used for backslash in @TeX{} mode.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
227 @end deffn
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
228
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
229 @deffn {Syntax class} @w{paired delimiter}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
230 @dfn{Paired delimiter characters} (designated by @samp{$}) are like
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
231 string quote characters except that the syntactic properties of the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
232 characters between the delimiters are not suppressed. Only @TeX{} mode
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
233 uses a paired delimiter presently---the @samp{$} that both enters and
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
234 leaves math mode.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
235 @end deffn
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
236
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
237 @deffn {Syntax class} @w{expression prefix}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
238 An @dfn{expression prefix operator} (designated by @samp{'}) is used for
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
239 syntactic operators that are considered as part of an expression if they
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
240 appear next to one. In Lisp modes, these characters include the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
241 apostrophe, @samp{'} (used for quoting), the comma, @samp{,} (used in
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
242 macros), and @samp{#} (used in the read syntax for certain data types).
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
243 @end deffn
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
244
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
245 @deffn {Syntax class} @w{comment starter}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
246 @deffnx {Syntax class} @w{comment ender}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
247 @cindex comment syntax
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
248 The @dfn{comment starter} and @dfn{comment ender} characters are used in
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
249 various languages to delimit comments. These classes are designated
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
250 by @samp{<} and @samp{>}, respectively.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
251
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
252 English text has no comment characters. In Lisp, the semicolon
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
253 (@samp{;}) starts a comment and a newline or formfeed ends one.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
254 @end deffn
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
255
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
256 @deffn {Syntax class} @w{inherit standard syntax}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
257 This syntax class does not specify a particular syntax. It says to look
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
258 in the standard syntax table to find the syntax of this character. The
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
259 designator for this syntax class is @samp{@@}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
260 @end deffn
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
261
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
262 @deffn {Syntax class} @w{generic comment delimiter}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
263 A @dfn{generic comment delimiter} (designated by @samp{!}) starts
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
264 or ends a special kind of comment. @emph{Any} generic comment delimiter
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
265 matches @emph{any} generic comment delimiter, but they cannot match
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
266 a comment starter or comment ender; generic comment delimiters can only
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
267 match each other.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
268
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
269 This syntax class is primarily meant for use with the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
270 @code{syntax-table} text property (@pxref{Syntax Properties}). You can
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
271 mark any range of characters as forming a comment, by giving the first
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
272 and last characters of the range @code{syntax-table} properties
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
273 identifying them as generic comment delimiters.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
274 @end deffn
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
275
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
276 @deffn {Syntax class} @w{generic string delimiter}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
277 A @dfn{generic string delimiter} (designated by @samp{|}) starts or ends
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
278 a string. This class differs from the string quote class in that @emph{any}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
279 generic string delimiter can match any other generic string delimiter; but
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
280 they do not match ordinary string quote characters.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
281
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
282 This syntax class is primarily meant for use with the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
283 @code{syntax-table} text property (@pxref{Syntax Properties}). You can
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
284 mark any range of characters as forming a string constant, by giving the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
285 first and last characters of the range @code{syntax-table} properties
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
286 identifying them as generic string delimiters.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
287 @end deffn
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
288
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
289 @node Syntax Flags
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
290 @subsection Syntax Flags
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
291 @cindex syntax flags
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
292
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
293 In addition to the classes, entries for characters in a syntax table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
294 can specify flags. There are seven possible flags, represented by the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
295 characters @samp{1}, @samp{2}, @samp{3}, @samp{4}, @samp{b}, @samp{n},
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
296 and @samp{p}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
297
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
298 All the flags except @samp{n} and @samp{p} are used to describe
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
299 multi-character comment delimiters. The digit flags indicate that a
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
300 character can @emph{also} be part of a comment sequence, in addition to
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
301 the syntactic properties associated with its character class. The flags
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
302 are independent of the class and each other for the sake of characters
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
303 such as @samp{*} in C mode, which is a punctuation character, @emph{and}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
304 the second character of a start-of-comment sequence (@samp{/*}),
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
305 @emph{and} the first character of an end-of-comment sequence
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
306 (@samp{*/}).
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
307
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
308 Here is a table of the possible flags for a character @var{c},
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
309 and what they mean:
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
310
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
311 @itemize @bullet
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
312 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
313 @samp{1} means @var{c} is the start of a two-character comment-start
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
314 sequence.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
315
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
316 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
317 @samp{2} means @var{c} is the second character of such a sequence.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
318
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
319 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
320 @samp{3} means @var{c} is the start of a two-character comment-end
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
321 sequence.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
322
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
323 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
324 @samp{4} means @var{c} is the second character of such a sequence.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
325
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
326 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
327 @c Emacs 19 feature
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
328 @samp{b} means that @var{c} as a comment delimiter belongs to the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
329 alternative ``b'' comment style.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
330
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
331 Emacs supports two comment styles simultaneously in any one syntax
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
332 table. This is for the sake of C++. Each style of comment syntax has
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
333 its own comment-start sequence and its own comment-end sequence. Each
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
334 comment must stick to one style or the other; thus, if it starts with
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
335 the comment-start sequence of style ``b,'' it must also end with the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
336 comment-end sequence of style ``b.''
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
337
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
338 The two comment-start sequences must begin with the same character; only
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
339 the second character may differ. Mark the second character of the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
340 ``b''-style comment-start sequence with the @samp{b} flag.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
341
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
342 A comment-end sequence (one or two characters) applies to the ``b''
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
343 style if its first character has the @samp{b} flag set; otherwise, it
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
344 applies to the ``a'' style.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
345
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
346 The appropriate comment syntax settings for C++ are as follows:
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
347
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
348 @table @asis
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
349 @item @samp{/}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
350 @samp{124b}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
351 @item @samp{*}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
352 @samp{23}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
353 @item newline
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
354 @samp{>b}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
355 @end table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
356
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
357 This defines four comment-delimiting sequences:
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
358
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
359 @table @asis
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
360 @item @samp{/*}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
361 This is a comment-start sequence for ``a'' style because the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
362 second character, @samp{*}, does not have the @samp{b} flag.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
363
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
364 @item @samp{//}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
365 This is a comment-start sequence for ``b'' style because the second
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
366 character, @samp{/}, does have the @samp{b} flag.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
367
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
368 @item @samp{*/}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
369 This is a comment-end sequence for ``a'' style because the first
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
370 character, @samp{*}, does not have the @samp{b} flag.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
371
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
372 @item newline
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
373 This is a comment-end sequence for ``b'' style, because the newline
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
374 character has the @samp{b} flag.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
375 @end table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
376
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
377 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
378 @samp{n} on a comment delimiter character specifies
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
379 that this kind of comment can be nested. For a two-character
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
380 comment delimiter, @samp{n} on either character makes it
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
381 nestable.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
382
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
383 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
384 @c Emacs 19 feature
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
385 @samp{p} identifies an additional ``prefix character'' for Lisp syntax.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
386 These characters are treated as whitespace when they appear between
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
387 expressions. When they appear within an expression, they are handled
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
388 according to their usual syntax classes.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
389
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
390 The function @code{backward-prefix-chars} moves back over these
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
391 characters, as well as over characters whose primary syntax class is
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
392 prefix (@samp{'}). @xref{Motion and Syntax}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
393 @end itemize
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
394
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
395 @node Syntax Table Functions
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
396 @section Syntax Table Functions
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
397
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
398 In this section we describe functions for creating, accessing and
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
399 altering syntax tables.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
400
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
401 @defun make-syntax-table &optional table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
402 This function creates a new syntax table, with all values initialized
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
403 to @code{nil}. If @var{table} is non-@code{nil}, it becomes the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
404 parent of the new syntax table, otherwise the standard syntax table is
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
405 the parent. Like all char-tables, a syntax table inherits from its
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
406 parent. Thus the original syntax of all characters in the returned
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
407 syntax table is determined by the parent. @xref{Char-Tables}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
408
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
409 Most major mode syntax tables are created in this way.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
410 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
411
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
412 @defun copy-syntax-table &optional table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
413 This function constructs a copy of @var{table} and returns it. If
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
414 @var{table} is not supplied (or is @code{nil}), it returns a copy of the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
415 standard syntax table. Otherwise, an error is signaled if @var{table} is
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
416 not a syntax table.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
417 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
418
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
419 @deffn Command modify-syntax-entry char syntax-descriptor &optional table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
420 This function sets the syntax entry for @var{char} according to
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
421 @var{syntax-descriptor}. The syntax is changed only for @var{table},
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
422 which defaults to the current buffer's syntax table, and not in any
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
423 other syntax table. The argument @var{syntax-descriptor} specifies the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
424 desired syntax; this is a string beginning with a class designator
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
425 character, and optionally containing a matching character and flags as
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
426 well. @xref{Syntax Descriptors}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
427
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
428 This function always returns @code{nil}. The old syntax information in
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
429 the table for this character is discarded.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
430
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
431 An error is signaled if the first character of the syntax descriptor is not
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
432 one of the seventeen syntax class designator characters. An error is also
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
433 signaled if @var{char} is not a character.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
434
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
435 @example
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
436 @group
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
437 @exdent @r{Examples:}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
438
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
439 ;; @r{Put the space character in class whitespace.}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
440 (modify-syntax-entry ?\s " ")
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
441 @result{} nil
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
442 @end group
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
443
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
444 @group
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
445 ;; @r{Make @samp{$} an open parenthesis character,}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
446 ;; @r{with @samp{^} as its matching close.}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
447 (modify-syntax-entry ?$ "(^")
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
448 @result{} nil
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
449 @end group
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
450
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
451 @group
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
452 ;; @r{Make @samp{^} a close parenthesis character,}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
453 ;; @r{with @samp{$} as its matching open.}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
454 (modify-syntax-entry ?^ ")$")
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
455 @result{} nil
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
456 @end group
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
457
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
458 @group
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
459 ;; @r{Make @samp{/} a punctuation character,}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
460 ;; @r{the first character of a start-comment sequence,}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
461 ;; @r{and the second character of an end-comment sequence.}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
462 ;; @r{This is used in C mode.}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
463 (modify-syntax-entry ?/ ". 14")
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
464 @result{} nil
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
465 @end group
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
466 @end example
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
467 @end deffn
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
468
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
469 @defun char-syntax character
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
470 This function returns the syntax class of @var{character}, represented
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
471 by its mnemonic designator character. This returns @emph{only} the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
472 class, not any matching parenthesis or flags.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
473
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
474 An error is signaled if @var{char} is not a character.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
475
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
476 The following examples apply to C mode. The first example shows that
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
477 the syntax class of space is whitespace (represented by a space). The
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
478 second example shows that the syntax of @samp{/} is punctuation. This
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
479 does not show the fact that it is also part of comment-start and -end
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
480 sequences. The third example shows that open parenthesis is in the class
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
481 of open parentheses. This does not show the fact that it has a matching
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
482 character, @samp{)}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
483
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
484 @example
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
485 @group
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
486 (string (char-syntax ?\s))
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
487 @result{} " "
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
488 @end group
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
489
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
490 @group
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
491 (string (char-syntax ?/))
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
492 @result{} "."
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
493 @end group
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
494
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
495 @group
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
496 (string (char-syntax ?\())
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
497 @result{} "("
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
498 @end group
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
499 @end example
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
500
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
501 We use @code{string} to make it easier to see the character returned by
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
502 @code{char-syntax}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
503 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
504
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
505 @defun set-syntax-table table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
506 This function makes @var{table} the syntax table for the current buffer.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
507 It returns @var{table}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
508 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
509
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
510 @defun syntax-table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
511 This function returns the current syntax table, which is the table for
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
512 the current buffer.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
513 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
514
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
515 @defmac with-syntax-table @var{table} @var{body}@dots{}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
516 This macro executes @var{body} using @var{table} as the current syntax
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
517 table. It returns the value of the last form in @var{body}, after
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
518 restoring the old current syntax table.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
519
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
520 Since each buffer has its own current syntax table, we should make that
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
521 more precise: @code{with-syntax-table} temporarily alters the current
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
522 syntax table of whichever buffer is current at the time the macro
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
523 execution starts. Other buffers are not affected.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
524 @end defmac
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
525
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
526 @node Syntax Properties
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
527 @section Syntax Properties
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
528 @kindex syntax-table @r{(text property)}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
529
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
530 When the syntax table is not flexible enough to specify the syntax of
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
531 a language, you can use @code{syntax-table} text properties to
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
532 override the syntax table for specific character occurrences in the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
533 buffer. @xref{Text Properties}. You can use Font Lock mode to set
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
534 @code{syntax-table} text properties. @xref{Setting Syntax
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
535 Properties}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
536
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
537 The valid values of @code{syntax-table} text property are:
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
538
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
539 @table @asis
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
540 @item @var{syntax-table}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
541 If the property value is a syntax table, that table is used instead of
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
542 the current buffer's syntax table to determine the syntax for this
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
543 occurrence of the character.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
544
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
545 @item @code{(@var{syntax-code} . @var{matching-char})}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
546 A cons cell of this format specifies the syntax for this
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
547 occurrence of the character. (@pxref{Syntax Table Internals})
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
548
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
549 @item @code{nil}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
550 If the property is @code{nil}, the character's syntax is determined from
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
551 the current syntax table in the usual way.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
552 @end table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
553
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
554 @defvar parse-sexp-lookup-properties
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
555 If this is non-@code{nil}, the syntax scanning functions pay attention
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
556 to syntax text properties. Otherwise they use only the current syntax
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
557 table.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
558 @end defvar
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
559
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
560 @node Motion and Syntax
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
561 @section Motion and Syntax
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
562
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
563 This section describes functions for moving across characters that
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
564 have certain syntax classes.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
565
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
566 @defun skip-syntax-forward syntaxes &optional limit
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
567 This function moves point forward across characters having syntax
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
568 classes mentioned in @var{syntaxes} (a string of syntax class
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
569 characters). It stops when it encounters the end of the buffer, or
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
570 position @var{limit} (if specified), or a character it is not supposed
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
571 to skip.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
572
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
573 If @var{syntaxes} starts with @samp{^}, then the function skips
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
574 characters whose syntax is @emph{not} in @var{syntaxes}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
575
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
576 The return value is the distance traveled, which is a nonnegative
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
577 integer.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
578 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
579
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
580 @defun skip-syntax-backward syntaxes &optional limit
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
581 This function moves point backward across characters whose syntax
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
582 classes are mentioned in @var{syntaxes}. It stops when it encounters
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
583 the beginning of the buffer, or position @var{limit} (if specified), or
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
584 a character it is not supposed to skip.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
585
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
586 If @var{syntaxes} starts with @samp{^}, then the function skips
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
587 characters whose syntax is @emph{not} in @var{syntaxes}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
588
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
589 The return value indicates the distance traveled. It is an integer that
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
590 is zero or less.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
591 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
592
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
593 @defun backward-prefix-chars
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
594 This function moves point backward over any number of characters with
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
595 expression prefix syntax. This includes both characters in the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
596 expression prefix syntax class, and characters with the @samp{p} flag.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
597 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
598
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
599 @node Parsing Expressions
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
600 @section Parsing Expressions
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
601
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
602 This section describes functions for parsing and scanning balanced
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
603 expressions, also known as @dfn{sexps}. Basically, a sexp is either a
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
604 balanced parenthetical grouping, a string, or a symbol name (a
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
605 sequence of characters whose syntax is either word constituent or
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
606 symbol constituent). However, characters whose syntax is expression
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
607 prefix are treated as part of the sexp if they appear next to it.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
608
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
609 The syntax table controls the interpretation of characters, so these
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
610 functions can be used for Lisp expressions when in Lisp mode and for C
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
611 expressions when in C mode. @xref{List Motion}, for convenient
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
612 higher-level functions for moving over balanced expressions.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
613
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
614 A character's syntax controls how it changes the state of the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
615 parser, rather than describing the state itself. For example, a
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
616 string delimiter character toggles the parser state between
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
617 ``in-string'' and ``in-code,'' but the syntax of characters does not
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
618 directly say whether they are inside a string. For example (note that
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
619 15 is the syntax code for generic string delimiters),
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
620
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
621 @example
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
622 (put-text-property 1 9 'syntax-table '(15 . nil))
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
623 @end example
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
624
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
625 @noindent
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
626 does not tell Emacs that the first eight chars of the current buffer
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
627 are a string, but rather that they are all string delimiters. As a
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
628 result, Emacs treats them as four consecutive empty string constants.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
629
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
630 @menu
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
631 * Motion via Parsing:: Motion functions that work by parsing.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
632 * Position Parse:: Determining the syntactic state of a position.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
633 * Parser State:: How Emacs represents a syntactic state.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
634 * Low-Level Parsing:: Parsing across a specified region.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
635 * Control Parsing:: Parameters that affect parsing.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
636 @end menu
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
637
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
638 @node Motion via Parsing
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
639 @subsection Motion Commands Based on Parsing
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
640
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
641 This section describes simple point-motion functions that operate
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
642 based on parsing expressions.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
643
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
644 @defun scan-lists from count depth
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
645 This function scans forward @var{count} balanced parenthetical groupings
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
646 from position @var{from}. It returns the position where the scan stops.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
647 If @var{count} is negative, the scan moves backwards.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
648
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
649 If @var{depth} is nonzero, parenthesis depth counting begins from that
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
650 value. The only candidates for stopping are places where the depth in
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
651 parentheses becomes zero; @code{scan-lists} counts @var{count} such
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
652 places and then stops. Thus, a positive value for @var{depth} means go
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
653 out @var{depth} levels of parenthesis.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
654
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
655 Scanning ignores comments if @code{parse-sexp-ignore-comments} is
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
656 non-@code{nil}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
657
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
658 If the scan reaches the beginning or end of the buffer (or its
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
659 accessible portion), and the depth is not zero, an error is signaled.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
660 If the depth is zero but the count is not used up, @code{nil} is
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
661 returned.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
662 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
663
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
664 @defun scan-sexps from count
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
665 This function scans forward @var{count} sexps from position @var{from}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
666 It returns the position where the scan stops. If @var{count} is
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
667 negative, the scan moves backwards.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
668
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
669 Scanning ignores comments if @code{parse-sexp-ignore-comments} is
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
670 non-@code{nil}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
671
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
672 If the scan reaches the beginning or end of (the accessible part of) the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
673 buffer while in the middle of a parenthetical grouping, an error is
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
674 signaled. If it reaches the beginning or end between groupings but
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
675 before count is used up, @code{nil} is returned.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
676 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
677
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
678 @defun forward-comment count
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
679 This function moves point forward across @var{count} complete comments
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
680 (that is, including the starting delimiter and the terminating
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
681 delimiter if any), plus any whitespace encountered on the way. It
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
682 moves backward if @var{count} is negative. If it encounters anything
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
683 other than a comment or whitespace, it stops, leaving point at the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
684 place where it stopped. This includes (for instance) finding the end
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
685 of a comment when moving forward and expecting the beginning of one.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
686 The function also stops immediately after moving over the specified
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
687 number of complete comments. If @var{count} comments are found as
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
688 expected, with nothing except whitespace between them, it returns
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
689 @code{t}; otherwise it returns @code{nil}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
690
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
691 This function cannot tell whether the ``comments'' it traverses are
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
692 embedded within a string. If they look like comments, it treats them
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
693 as comments.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
694 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
695
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
696 To move forward over all comments and whitespace following point, use
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
697 @code{(forward-comment (buffer-size))}. @code{(buffer-size)} is a good
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
698 argument to use, because the number of comments in the buffer cannot
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
699 exceed that many.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
700
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
701 @node Position Parse
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
702 @subsection Finding the Parse State for a Position
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
703
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
704 For syntactic analysis, such as in indentation, often the useful
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
705 thing is to compute the syntactic state corresponding to a given buffer
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
706 position. This function does that conveniently.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
707
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
708 @defun syntax-ppss &optional pos
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
709 This function returns the parser state (see next section) that the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
710 parser would reach at position @var{pos} starting from the beginning
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
711 of the buffer. This is equivalent to @code{(parse-partial-sexp
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
712 (point-min) @var{pos})}, except that @code{syntax-ppss} uses a cache
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
713 to speed up the computation. Due to this optimization, the 2nd value
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
714 (previous complete subexpression) and 6th value (minimum parenthesis
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
715 depth) of the returned parser state are not meaningful.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
716 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
717
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
718 @code{syntax-ppss} automatically hooks itself to
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
719 @code{before-change-functions} to keep its cache consistent. But
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
720 updating can fail if @code{syntax-ppss} is called while
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
721 @code{before-change-functions} is temporarily let-bound, or if the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
722 buffer is modified without obeying the hook, such as when using
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
723 @code{inhibit-modification-hooks}. For this reason, it is sometimes
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
724 necessary to flush the cache manually.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
725
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
726 @defun syntax-ppss-flush-cache beg
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
727 This function flushes the cache used by @code{syntax-ppss}, starting at
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
728 position @var{beg}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
729 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
730
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
731 Major modes can make @code{syntax-ppss} run faster by specifying
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
732 where it needs to start parsing.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
733
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
734 @defvar syntax-begin-function
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
735 If this is non-@code{nil}, it should be a function that moves to an
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
736 earlier buffer position where the parser state is equivalent to
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
737 @code{nil}---in other words, a position outside of any comment,
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
738 string, or parenthesis. @code{syntax-ppss} uses it to further
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
739 optimize its computations, when the cache gives no help.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
740 @end defvar
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
741
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
742 @node Parser State
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
743 @subsection Parser State
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
744 @cindex parser state
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
745
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
746 A @dfn{parser state} is a list of ten elements describing the final
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
747 state of parsing text syntactically as part of an expression. The
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
748 parsing functions in the following sections return a parser state as
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
749 the value, and in some cases accept one as an argument also, so that
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
750 you can resume parsing after it stops. Here are the meanings of the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
751 elements of the parser state:
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
752
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
753 @enumerate 0
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
754 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
755 The depth in parentheses, counting from 0. @strong{Warning:} this can
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
756 be negative if there are more close parens than open parens between
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
757 the start of the defun and point.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
758
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
759 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
760 @cindex innermost containing parentheses
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
761 The character position of the start of the innermost parenthetical
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
762 grouping containing the stopping point; @code{nil} if none.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
763
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
764 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
765 @cindex previous complete subexpression
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
766 The character position of the start of the last complete subexpression
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
767 terminated; @code{nil} if none.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
768
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
769 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
770 @cindex inside string
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
771 Non-@code{nil} if inside a string. More precisely, this is the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
772 character that will terminate the string, or @code{t} if a generic
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
773 string delimiter character should terminate it.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
774
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
775 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
776 @cindex inside comment
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
777 @code{t} if inside a comment (of either style),
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
778 or the comment nesting level if inside a kind of comment
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
779 that can be nested.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
780
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
781 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
782 @cindex quote character
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
783 @code{t} if point is just after a quote character.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
784
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
785 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
786 The minimum parenthesis depth encountered during this scan.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
787
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
788 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
789 What kind of comment is active: @code{nil} for a comment of style
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
790 ``a'' or when not inside a comment, @code{t} for a comment of style
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
791 ``b,'' and @code{syntax-table} for a comment that should be ended by a
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
792 generic comment delimiter character.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
793
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
794 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
795 The string or comment start position. While inside a comment, this is
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
796 the position where the comment began; while inside a string, this is the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
797 position where the string began. When outside of strings and comments,
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
798 this element is @code{nil}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
799
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
800 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
801 Internal data for continuing the parsing. The meaning of this
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
802 data is subject to change; it is used if you pass this list
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
803 as the @var{state} argument to another call.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
804 @end enumerate
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
805
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
806 Elements 1, 2, and 6 are ignored in a state which you pass as an
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
807 argument to continue parsing, and elements 8 and 9 are used only in
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
808 trivial cases. Those elements serve primarily to convey information
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
809 to the Lisp program which does the parsing.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
810
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
811 One additional piece of useful information is available from a
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
812 parser state using this function:
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
813
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
814 @defun syntax-ppss-toplevel-pos state
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
815 This function extracts, from parser state @var{state}, the last
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
816 position scanned in the parse which was at top level in grammatical
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
817 structure. ``At top level'' means outside of any parentheses,
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
818 comments, or strings.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
819
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
820 The value is @code{nil} if @var{state} represents a parse which has
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
821 arrived at a top level position.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
822 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
823
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
824 We have provided this access function rather than document how the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
825 data is represented in the state, because we plan to change the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
826 representation in the future.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
827
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
828 @node Low-Level Parsing
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
829 @subsection Low-Level Parsing
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
830
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
831 The most basic way to use the expression parser is to tell it
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
832 to start at a given position with a certain state, and parse up to
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
833 a specified end position.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
834
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
835 @defun parse-partial-sexp start limit &optional target-depth stop-before state stop-comment
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
836 This function parses a sexp in the current buffer starting at
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
837 @var{start}, not scanning past @var{limit}. It stops at position
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
838 @var{limit} or when certain criteria described below are met, and sets
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
839 point to the location where parsing stops. It returns a parser state
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
840 describing the status of the parse at the point where it stops.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
841
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
842 @cindex parenthesis depth
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
843 If the third argument @var{target-depth} is non-@code{nil}, parsing
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
844 stops if the depth in parentheses becomes equal to @var{target-depth}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
845 The depth starts at 0, or at whatever is given in @var{state}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
846
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
847 If the fourth argument @var{stop-before} is non-@code{nil}, parsing
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
848 stops when it comes to any character that starts a sexp. If
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
849 @var{stop-comment} is non-@code{nil}, parsing stops when it comes to the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
850 start of a comment. If @var{stop-comment} is the symbol
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
851 @code{syntax-table}, parsing stops after the start of a comment or a
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
852 string, or the end of a comment or a string, whichever comes first.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
853
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
854 If @var{state} is @code{nil}, @var{start} is assumed to be at the top
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
855 level of parenthesis structure, such as the beginning of a function
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
856 definition. Alternatively, you might wish to resume parsing in the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
857 middle of the structure. To do this, you must provide a @var{state}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
858 argument that describes the initial status of parsing. The value
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
859 returned by a previous call to @code{parse-partial-sexp} will do
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
860 nicely.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
861 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
862
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
863 @node Control Parsing
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
864 @subsection Parameters to Control Parsing
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
865
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
866 @defvar multibyte-syntax-as-symbol
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
867 If this variable is non-@code{nil}, @code{scan-sexps} treats all
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
868 non-@acronym{ASCII} characters as symbol constituents regardless
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
869 of what the syntax table says about them. (However, text properties
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
870 can still override the syntax.)
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
871 @end defvar
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
872
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
873 @defopt parse-sexp-ignore-comments
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
874 @cindex skipping comments
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
875 If the value is non-@code{nil}, then comments are treated as
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
876 whitespace by the functions in this section and by @code{forward-sexp},
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
877 @code{scan-lists} and @code{scan-sexps}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
878 @end defopt
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
879
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
880 @vindex parse-sexp-lookup-properties
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
881 The behavior of @code{parse-partial-sexp} is also affected by
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
882 @code{parse-sexp-lookup-properties} (@pxref{Syntax Properties}).
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
883
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
884 You can use @code{forward-comment} to move forward or backward over
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
885 one comment or several comments.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
886
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
887 @node Standard Syntax Tables
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
888 @section Some Standard Syntax Tables
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
889
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
890 Most of the major modes in Emacs have their own syntax tables. Here
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
891 are several of them:
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
892
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
893 @defun standard-syntax-table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
894 This function returns the standard syntax table, which is the syntax
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
895 table used in Fundamental mode.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
896 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
897
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
898 @defvar text-mode-syntax-table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
899 The value of this variable is the syntax table used in Text mode.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
900 @end defvar
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
901
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
902 @defvar c-mode-syntax-table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
903 The value of this variable is the syntax table for C-mode buffers.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
904 @end defvar
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
905
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
906 @defvar emacs-lisp-mode-syntax-table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
907 The value of this variable is the syntax table used in Emacs Lisp mode
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
908 by editing commands. (It has no effect on the Lisp @code{read}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
909 function.)
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
910 @end defvar
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
911
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
912 @node Syntax Table Internals
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
913 @section Syntax Table Internals
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
914 @cindex syntax table internals
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
915
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
916 Lisp programs don't usually work with the elements directly; the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
917 Lisp-level syntax table functions usually work with syntax descriptors
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
918 (@pxref{Syntax Descriptors}). Nonetheless, here we document the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
919 internal format. This format is used mostly when manipulating
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
920 syntax properties.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
921
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
922 Each element of a syntax table is a cons cell of the form
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
923 @code{(@var{syntax-code} . @var{matching-char})}. The @sc{car},
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
924 @var{syntax-code}, is an integer that encodes the syntax class, and any
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
925 flags. The @sc{cdr}, @var{matching-char}, is non-@code{nil} if
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
926 a character to match was specified.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
927
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
928 This table gives the value of @var{syntax-code} which corresponds
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
929 to each syntactic type.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
930
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
931 @multitable @columnfractions .05 .3 .3 .31
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
932 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
933 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
934 @i{Integer} @i{Class}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
935 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
936 @i{Integer} @i{Class}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
937 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
938 @i{Integer} @i{Class}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
939 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
940 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
941 0 @ @ whitespace
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
942 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
943 5 @ @ close parenthesis
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
944 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
945 10 @ @ character quote
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
946 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
947 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
948 1 @ @ punctuation
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
949 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
950 6 @ @ expression prefix
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
951 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
952 11 @ @ comment-start
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
953 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
954 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
955 2 @ @ word
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
956 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
957 7 @ @ string quote
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
958 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
959 12 @ @ comment-end
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
960 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
961 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
962 3 @ @ symbol
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
963 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
964 8 @ @ paired delimiter
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
965 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
966 13 @ @ inherit
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
967 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
968 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
969 4 @ @ open parenthesis
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
970 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
971 9 @ @ escape
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
972 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
973 14 @ @ generic comment
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
974 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
975 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
976 15 @ generic string
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
977 @end multitable
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
978
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
979 For example, the usual syntax value for @samp{(} is @code{(4 . 41)}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
980 (41 is the character code for @samp{)}.)
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
981
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
982 The flags are encoded in higher order bits, starting 16 bits from the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
983 least significant bit. This table gives the power of two which
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
984 corresponds to each syntax flag.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
985
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
986 @multitable @columnfractions .05 .3 .3 .3
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
987 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
988 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
989 @i{Prefix} @i{Flag}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
990 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
991 @i{Prefix} @i{Flag}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
992 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
993 @i{Prefix} @i{Flag}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
994 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
995 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
996 @samp{1} @ @ @code{(lsh 1 16)}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
997 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
998 @samp{4} @ @ @code{(lsh 1 19)}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
999 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1000 @samp{b} @ @ @code{(lsh 1 21)}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1001 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1002 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1003 @samp{2} @ @ @code{(lsh 1 17)}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1004 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1005 @samp{p} @ @ @code{(lsh 1 20)}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1006 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1007 @samp{n} @ @ @code{(lsh 1 22)}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1008 @item
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1009 @tab
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1010 @samp{3} @ @ @code{(lsh 1 18)}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1011 @end multitable
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1012
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1013 @defun string-to-syntax @var{desc}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1014 This function returns the internal form corresponding to the syntax
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1015 descriptor @var{desc}, a cons cell @code{(@var{syntax-code}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1016 . @var{matching-char})}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1017 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1018
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1019 @defun syntax-after pos
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1020 This function returns the syntax code of the character in the buffer
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1021 after position @var{pos}, taking account of syntax properties as well
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1022 as the syntax table. If @var{pos} is outside the buffer's accessible
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1023 portion (@pxref{Narrowing, accessible portion}), this function returns
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1024 @code{nil}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1025 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1026
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1027 @defun syntax-class syntax
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1028 This function returns the syntax class of the syntax code
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1029 @var{syntax}. (It masks off the high 16 bits that hold the flags
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1030 encoded in the syntax descriptor.) If @var{syntax} is @code{nil}, it
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1031 returns @code{nil}; this is so evaluating the expression
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1032
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1033 @example
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1034 (syntax-class (syntax-after pos))
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1035 @end example
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1036
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1037 @noindent
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1038 where @code{pos} is outside the buffer's accessible portion, will
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1039 yield @code{nil} without throwing errors or producing wrong syntax
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1040 class codes.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1041 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1042
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1043 @node Categories
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1044 @section Categories
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1045 @cindex categories of characters
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1046 @cindex character categories
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1047
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1048 @dfn{Categories} provide an alternate way of classifying characters
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1049 syntactically. You can define several categories as needed, then
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1050 independently assign each character to one or more categories. Unlike
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1051 syntax classes, categories are not mutually exclusive; it is normal for
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1052 one character to belong to several categories.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1053
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1054 @cindex category table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1055 Each buffer has a @dfn{category table} which records which categories
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1056 are defined and also which characters belong to each category. Each
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1057 category table defines its own categories, but normally these are
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1058 initialized by copying from the standard categories table, so that the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1059 standard categories are available in all modes.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1060
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1061 Each category has a name, which is an @acronym{ASCII} printing character in
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1062 the range @w{@samp{ }} to @samp{~}. You specify the name of a category
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1063 when you define it with @code{define-category}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1064
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1065 The category table is actually a char-table (@pxref{Char-Tables}).
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1066 The element of the category table at index @var{c} is a @dfn{category
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1067 set}---a bool-vector---that indicates which categories character @var{c}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1068 belongs to. In this category set, if the element at index @var{cat} is
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1069 @code{t}, that means category @var{cat} is a member of the set, and that
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1070 character @var{c} belongs to category @var{cat}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1071
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1072 For the next three functions, the optional argument @var{table}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1073 defaults to the current buffer's category table.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1074
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1075 @defun define-category char docstring &optional table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1076 This function defines a new category, with name @var{char} and
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1077 documentation @var{docstring}, for the category table @var{table}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1078 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1079
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1080 @defun category-docstring category &optional table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1081 This function returns the documentation string of category @var{category}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1082 in category table @var{table}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1083
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1084 @example
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1085 (category-docstring ?a)
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1086 @result{} "ASCII"
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1087 (category-docstring ?l)
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1088 @result{} "Latin"
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1089 @end example
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1090 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1091
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1092 @defun get-unused-category &optional table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1093 This function returns a category name (a character) which is not
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1094 currently defined in @var{table}. If all possible categories are in use
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1095 in @var{table}, it returns @code{nil}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1096 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1097
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1098 @defun category-table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1099 This function returns the current buffer's category table.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1100 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1101
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1102 @defun category-table-p object
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1103 This function returns @code{t} if @var{object} is a category table,
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1104 otherwise @code{nil}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1105 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1106
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1107 @defun standard-category-table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1108 This function returns the standard category table.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1109 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1110
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1111 @defun copy-category-table &optional table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1112 This function constructs a copy of @var{table} and returns it. If
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1113 @var{table} is not supplied (or is @code{nil}), it returns a copy of the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1114 standard category table. Otherwise, an error is signaled if @var{table}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1115 is not a category table.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1116 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1117
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1118 @defun set-category-table table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1119 This function makes @var{table} the category table for the current
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1120 buffer. It returns @var{table}.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1121 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1122
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1123 @defun make-category-table
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1124 This creates and returns an empty category table. In an empty category
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1125 table, no categories have been allocated, and no characters belong to
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1126 any categories.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1127 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1128
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1129 @defun make-category-set categories
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1130 This function returns a new category set---a bool-vector---whose initial
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1131 contents are the categories listed in the string @var{categories}. The
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1132 elements of @var{categories} should be category names; the new category
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1133 set has @code{t} for each of those categories, and @code{nil} for all
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1134 other categories.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1135
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1136 @example
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1137 (make-category-set "al")
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1138 @result{} #&128"\0\0\0\0\0\0\0\0\0\0\0\0\2\20\0\0"
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1139 @end example
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1140 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1141
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1142 @defun char-category-set char
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1143 This function returns the category set for character @var{char} in the
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1144 current buffer's category table. This is the bool-vector which
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1145 records which categories the character @var{char} belongs to. The
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1146 function @code{char-category-set} does not allocate storage, because
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1147 it returns the same bool-vector that exists in the category table.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1148
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1149 @example
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1150 (char-category-set ?a)
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1151 @result{} #&128"\0\0\0\0\0\0\0\0\0\0\0\0\2\20\0\0"
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1152 @end example
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1153 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1154
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1155 @defun category-set-mnemonics category-set
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1156 This function converts the category set @var{category-set} into a string
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1157 containing the characters that designate the categories that are members
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1158 of the set.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1159
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1160 @example
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1161 (category-set-mnemonics (char-category-set ?a))
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1162 @result{} "al"
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1163 @end example
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1164 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1165
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1166 @defun modify-category-entry character category &optional table reset
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1167 This function modifies the category set of @var{character} in category
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1168 table @var{table} (which defaults to the current buffer's category
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1169 table).
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1170
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1171 Normally, it modifies the category set by adding @var{category} to it.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1172 But if @var{reset} is non-@code{nil}, then it deletes @var{category}
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1173 instead.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1174 @end defun
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1175
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1176 @deffn Command describe-categories &optional buffer-or-name
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1177 This function describes the category specifications in the current
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1178 category table. It inserts the descriptions in a buffer, and then
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1179 displays that buffer. If @var{buffer-or-name} is non-@code{nil}, it
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1180 describes the category table of that buffer instead.
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1181 @end deffn
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1182
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1183 @ignore
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1184 arch-tag: 4d914e96-0283-445c-9233-75d33662908c
63784ce1491a Move here from ../../lispref
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1185 @end ignore