@end deffn
@deffn {Syntax class} @w{generic comment delimiter}
-A @dfn{generic comment delimiter} character starts or ends a special
-kind of comment. @emph{Any} generic comment delimiter matches
-@emph{any} generic comment delimiter, but they cannot match a comment
-starter or comment ender; generic comment delimiters can only match each
-other.
+A @dfn{generic comment delimiter} (designated by @samp{!}) starts
+or ends a special kind of comment. @emph{Any} generic comment delimiter
+matches @emph{any} generic comment delimiter, but they cannot match
+a comment starter or comment ender; generic comment delimiters can only
+match each other.
This syntax class is primarily meant for use with the
@code{syntax-table} text property (@pxref{Syntax Properties}). You can
@end deffn
@deffn {Syntax class} @w{generic string delimiter}
-A @dfn{generic string delimiter} character starts or ends a string.
-This class differs from the string quote class in that @emph{any}
-generic string delimiter can match any other generic string delimiter;
-but they do not match ordinary string quote characters.
+A @dfn{generic string delimiter} (designated by @samp{|}) starts or ends
+a string. This class differs from the string quote class in that @emph{any}
+generic string delimiter can match any other generic string delimiter; but
+they do not match ordinary string quote characters.
This syntax class is primarily meant for use with the
@code{syntax-table} text property (@pxref{Syntax Properties}). You can
@item @code{(@var{syntax-code} . @var{matching-char})}
A cons cell of this format specifies the syntax for this
-occurrence of the character.
+occurrence of the character. (@pxref{Syntax Table Internals})
@item @code{nil}
If the property is @code{nil}, the character's syntax is determined from
for C expressions when in C mode. @xref{List Motion}, for convenient
higher-level functions for moving over balanced expressions.
+A syntax table only describes how each character changes the state of
+the parser, rather than describing the state itself. For example, a string
+delimiter character toggles the parser state between ``in-string'' and
+``in-code'' but the characters inside the string do not have any particular
+syntax to identify them as such.
+
+For example (note: 15 is the syntax-code of generic string delimiters):
+
+@example
+(put-text-property 1 9 'syntax-table '(15 . nil))
+@end example
+
+does not tell Emacs that the first eight chars of the current buffer
+are a string, but rather that they are all string delimiters and thus
+Emacs should treat them as four adjacent empty strings.
+
+The state of the parser is transient (i.e. not stored in the buffer for
+example). Instead, every time the parser is used, it is given not just
+a starting position but a starting state. If the starting state is not
+specified explicitly, Emacs assumes we are at the top level of parenthesis
+structure, such as the beginning of a function definition (this is the case
+for @code{forward-sexp} which blindly assumes that the starting point is in
+such a state.)
+
@defun parse-partial-sexp start limit &optional target-depth stop-before state stop-comment
This function parses a sexp in the current buffer starting at
@var{start}, not scanning past @var{limit}. It stops at position
Lisp programs don't usually work with the elements directly; the
Lisp-level syntax table functions usually work with syntax descriptors
(@pxref{Syntax Descriptors}). Nonetheless, here we document the
-internal format.
+internal format. This format is used mostly when manipulating
+syntax properties.
Each element of a syntax table is a cons cell of the form
@code{(@var{syntax-code} . @var{matching-char})}. The @sc{car},
@samp{3} @ @ @code{(lsh 1 18)}
@end multitable
+@defun string-to-syntax @var{desc}
+This function returns the internal form @code{(@var{syntax-code} .
+@var{matching-char})} corresponding to the syntax descriptor @var{desc}.
+@end defun
+
@node Categories
@section Categories
@cindex categories of characters