DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T s

⟦dc36e803c⟧ TextFile

    Length: 4338 (0x10f2)
    Types: TextFile
    Names: »sexps.texinfo«

Derivation

└─⟦a05ed705a⟧ Bits:30007078 DKUUG GNU 2/12/89
    └─⟦c06c473ab⟧ »./UNRELEASED/lispref.tar.Z« 
        └─⟦1b57a2ffe⟧ 
            └─⟦this⟧ »sexps.texinfo« 

TextFile

@setfilename ../info/sexps
@node Lisp Expressions, Abbreviations, Syntax Tables, Top
@chapter Lisp Expressions

  Here are several functions for parsing and scanning Lisp expressions.

@defun parse-partial-sexp start limit &optional target-depth stop-before state
  This function parses Lisp syntax in the current buffer starting at
@var{start} and not reading past @var{limit}.  It returns the status of
the parse at @var{limit}.  Parsing stops at @var{limit} or when certain
criteria are met described below; point is set to where parsing stops.

@cindex top-level form
  Normally, @var{start} is assumed to be the top level of a form to be
parsed, such as the beginning of a function definition.  If you wish to
continue a previous parse, you must provide a @var{state} argument,
which describes the initial status of parsing.  If @var{state} is
omitted (or @code{nil}), parsing assumes that @var{start} is the
beginning of a new parse at level 0.

@cindex parenthesis depth
  If the third argument @var{target-depth} is non-@code{nil}, parsing
stops if the depth in parentheses becomes equal to @var{target-depth}.
The depth starts at 0, or at whatever is given in @var{state}.

@cindex sexp start
  If the fourth argument @var{stop-before} is non-@code{nil}, parsing
stops when it comes to any character that starts a sexp.

@cindex parse state
  The fifth argument @var{state} is a seven-element list in the same
form as this function returns, described below.  the return value of one
call may be used to initialize the state of the parse on another call to
@code{parse-partial-sexp}.

  The result is a list of seven elements describing the final state of
the parse:

@enumerate
@item 
Depth in parens, starting at 0.

@item 
@cindex innermost list
Character position of the start of the innermost containing list;
@code{nil} if none.

@item 
@cindex complete sexp
Character position of the start of the last complete sexp terminated;
@code{nil} if none.

@item 
@cindex inside string
Non-@code{nil} if inside a string.
(It is the character that will terminate the string.)

@item 
@cindex inside comment
@code{t} if inside a comment.

@item 
@cindex quote character
@code{t} if point is just after a quote character.

@item 
The minimum paren-depth encountered during this scan.
@end enumerate

  Elements 1, 4, 5, and 6 are significant in the argument @var{state}.

@cindex indenting lists
This function is used to determine how to indent lines of programs
that have nested lists.  
@end defun

@defun scan-lists from count depth
  This function scals from character number @var{from} by @var{count} lists.
It returns the character number of the position thus found.

@cindex parenthesis depth
  If @var{depth} is nonzero, parenthesis depth counting begins from that
value.  Only places where the depth in parentheses becomes zero are
candidates for stopping; @var{count} such places are counted.  Thus, a
positive value for @var{depth} means go out levels of parenthesis.

  Comments are ignored if @code{parse-sexp-ignore-comments} is non-@code{nil}.

@cindex end-of-file error
  If the beginning or end of (the accessiblepart of) the buffer is
reached and the depth is not zero, an @code{end-of-file} error is
signaled.  If the depth is zerobut the count is not used up, @code{nil}
is returned.@refill
@end defun

@defun scan-sexps from count
  Scan from character number @var{from} by @var{count} balanced
expressions.  Returns the character number of the position thus found.

  Comments are ignored if @code{parse-sexp-ignore-comments} is non-@code{nil}.

@cindex end-of-file error
  If the beginning or end of (the accessible part of) the buffer is
reached in the middle of a parenthetical grouping, an @code{end-of-file}
error is signaled.  If the beginning or end is reached between groupings
but before count is used up, @code{nil} is returned.
@end defun

@defvar parse-sexp-ignore-comments
@cindex skipping comments
  Non-@code{nil} means @code{forward-sexp}, etc., should treat comments
as whitespace.  Non-@code{nil} works only when the comment terminator is
something like @samp{*/}, and appears only when it ends a comment.  If
comments are terminated by newlines, you must make this variable
@code{nil}, since not every newline is the end of a comment.  (In
version 19, this limitation is removed.)
@end defvar