]> code.delx.au - gnu-emacs/blobdiff - lispref/syntax.texi
*** empty log message ***
[gnu-emacs] / lispref / syntax.texi
index 34f591784f3b6d84fc024b4fd70b899ffbe43a31..e4c0384ccff9ab64e619cba4adf71bec3fb54158 100644 (file)
@@ -1,6 +1,7 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998 Free Software Foundation, Inc. 
+@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999
+@c   Free Software Foundation, Inc. 
 @c See the file elisp.texi for copying conditions.
 @setfilename ../info/syntax
 @node Syntax Tables, Abbrevs, Searching and Matching, Top
@@ -33,7 +34,7 @@ functions in this chapter.
 @node Syntax Basics
 @section Syntax Table Concepts
 
-@ifinfo
+@ifnottex
   A @dfn{syntax table} provides Emacs with the information that
 determines the syntactic use of each character in a buffer.  This
 information is used by the parsing commands, the complex movement
@@ -42,7 +43,7 @@ syntactic constructs begin and end.  The current syntax table controls
 the meaning of the word motion functions (@pxref{Word Motion}) and the
 list motion functions (@pxref{List Motion}) as well as the functions in
 this chapter.
-@end ifinfo
+@end ifnottex
 
   A syntax table is a char-table (@pxref{Char-Tables}).  The element at
 index @var{c} describes the character with code @var{c}.  The element's
@@ -258,11 +259,11 @@ designator for this syntax code is @samp{@@}.
 @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
@@ -272,10 +273,10 @@ identifying them as generic comment delimiters.
 @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
@@ -538,7 +539,7 @@ occurrence of the character.
 
 @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
@@ -546,7 +547,6 @@ the current syntax table in the usual way.
 @end table
 
 @defvar parse-sexp-lookup-properties
-@tindex parse-sexp-lookup-properties
 If this is non-@code{nil}, the syntax scanning functions pay attention
 to syntax text properties.  Otherwise they use only the current syntax
 table.
@@ -600,6 +600,30 @@ these functions can be used for Lisp expressions when in Lisp mode and
 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
@@ -721,6 +745,14 @@ signaled.  If it reaches the beginning or end between groupings but
 before count is used up, @code{nil} is returned.
 @end defun
 
+@defvar multibyte-syntax-as-symbol
+@tindex multibyte-syntax-as-symbol
+If this variable is non-@code{nil}, @code{scan-sexps} treats all
+non-@sc{ascii} characters as symbol constituents regardless
+of what the syntax table says about them.  (However, text properties
+can still override the syntax.)
+@end defvar
+
 @defvar parse-sexp-ignore-comments
 @cindex skipping comments
 If the value is non-@code{nil}, then comments are treated as
@@ -780,7 +812,8 @@ function.)
   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},
@@ -873,6 +906,11 @@ corresponds to each syntax flag.
 @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
@@ -951,12 +989,11 @@ This function makes @var{table} the category table for the current
 buffer.  It returns @var{table}.
 @end defun
 
-@defun make-category-table &optional default-set
+@defun make-category-table
 @tindex make-category-table
-This creates and returns an empty category table, using
-@var{default-set} as the default (for characters that don't specify
-their own sets).  Initially no characters specify their own sets in this
-new table; that is what we mean by ``empty.''
+This creates and returns an empty category table.  In an empty category
+table, no categories have been allocated, and no characters belong to
+any categories.
 @end defun
 
 @defun make-category-set categories
@@ -1005,3 +1042,9 @@ Normally, it modifies the category set by adding @var{category} to it.
 But if @var{reset} is non-@code{nil}, then it deletes @var{category}
 instead.
 @end defun
+
+@deffn Command describe-categories
+This function describes the category specifications in the current
+category table.  The descriptions are inserted in a buffer, which is
+then displayed.
+@end deffn