]> code.delx.au - gnu-emacs/blobdiff - lispref/strings.texi
(Searching and Matching): Move node.
[gnu-emacs] / lispref / strings.texi
index 7cc182cc0581a2f4181bfbbfc715f64f9b387b51..18c516041d6cd720031568045d74bfc60359108d 100644 (file)
@@ -1,7 +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, 1999, 2003
-@c   Free Software Foundation, Inc.
+@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2002, 2003,
+@c   2004, 2005 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @setfilename ../info/strings
 @node Strings and Characters, Lists, Numbers, Top
@@ -74,10 +74,11 @@ a key sequence, you must use a vector instead of a string.
 and other modifiers for keyboard input characters.
 
   Strings are useful for holding regular expressions.  You can also
-match regular expressions against strings (@pxref{Regexp Search}).  The
-functions @code{match-string} (@pxref{Simple Match Data}) and
-@code{replace-match} (@pxref{Replacing Match}) are useful for
-decomposing and modifying strings based on regular expression matching.
+match regular expressions against strings with @code{string-match}
+(@pxref{Regexp Search}).  The functions @code{match-string}
+(@pxref{Simple Match Data}) and @code{replace-match} (@pxref{Replacing
+Match}) are useful for decomposing and modifying strings after
+matching regular expressions against them.
 
   Like a buffer, a string can contain text properties for the characters
 in it, as well as the characters themselves.  @xref{Text Properties}.
@@ -293,11 +294,12 @@ null strings are always omitted from the result.  Thus:
 @end example
 
 The result is not @samp{("" "two" "words" "")}, which would rarely be
-useful.  If you need such a result, use an explict value for
+useful.  If you need such a result, use an explicit value for
 @var{separators}:
 
 @example
-(split-string "  two words " split-string-default-separators)
+(split-string "  two words "
+              split-string-default-separators)
      @result{} ("" "two" "words" "")
 @end example
 
@@ -352,8 +354,8 @@ practice:
 @end defun
 
 @defvar split-string-default-separators
-The default value of @var{separators} for @code{split-string}, initially
-@w{@samp{"[ \f\t\n\r\v]+"}}.
+The default value of @var{separators} for @code{split-string}.  Its
+usual value is @w{@samp{"[ \f\t\n\r\v]+"}}.
 @end defvar
 
 @node Modifying Strings
@@ -383,8 +385,9 @@ character currently present at that point in @var{string}.
 @code{clear-string}:
 
 @defun clear-string string
-This clears the contents of @var{string} to zeros
-and may change its length.
+This clears the contents of @var{string} to zeros.
+It may also change @var{string}'s length and convert it to
+a unibyte string.
 @end defun
 
 @need 2000
@@ -530,6 +533,9 @@ portion) is less.
 This function works like @code{assoc}, except that @var{key} must be a
 string, and comparison is done using @code{compare-strings}.  If
 @var{case-fold} is non-@code{nil}, it ignores case differences.
+Unlike @code{assoc}, this function can also match elements of the alist
+that are strings rather than conses.  In particular, @var{alist} can
+be a list of strings rather than an actual alist.
 @xref{Association Lists}.
 @end defun
 
@@ -544,7 +550,8 @@ for a kind of string comparison; see @ref{Regexp Search}.
 @cindex conversion of strings
 
   This section describes functions for conversions between characters,
-strings and integers.  @code{format} and @code{prin1-to-string}
+strings and integers.  @code{format} (@pxref{Formatting Strings})
+and @code{prin1-to-string}
 (@pxref{Output Functions}) can also convert Lisp objects into strings.
 @code{read-from-string} (@pxref{Input Functions}) can ``convert'' a
 string representation of a Lisp object into an object.  The functions
@@ -687,8 +694,8 @@ in the copy with encodings of the corresponding @var{objects}.  The
 arguments @var{objects} are the computed values to be formatted.
 
 The characters in @var{string}, other than the format specifications,
-are copied directly into the output; starting in Emacs 21, if they have
-text properties, these are copied into the output also.
+are copied directly into the output; if they have text properties,
+these are copied into the output also.
 @end defun
 
 @cindex @samp{%} in format
@@ -711,8 +718,8 @@ format specifications correspond to successive values from
 @var{objects}.  Thus, the first format specification in @var{string}
 uses the first such value, the second format specification uses the
 second such value, and so on.  Any extra format specifications (those
-for which there are no corresponding values) cause unpredictable
-behavior.  Any extra values to be formatted are ignored.
+for which there are no corresponding values) cause an error.  Any
+extra values to be formatted are ignored.
 
   Certain format specifications require values of particular types.  If
 you supply a value that doesn't fit the requirements, an error is
@@ -728,7 +735,7 @@ made without quoting (that is, using @code{princ}, not
 by their contents alone, with no @samp{"} characters, and symbols appear
 without @samp{\} characters.
 
-Starting in Emacs 21, if the object is a string, its text properties are
+If the object is a string, its text properties are
 copied into the output.  The text properties of the @samp{%s} itself
 are also copied, but those of the object take priority.
 
@@ -795,22 +802,20 @@ operation} error.
 @end group
 @end example
 
-@cindex numeric prefix
 @cindex field width
 @cindex padding
-  All the specification characters allow an optional numeric prefix
-between the @samp{%} and the character.  The optional numeric prefix
-defines the minimum width for the object.  If the printed
-representation of the object contains fewer characters than this, then
-it is padded.  The padding is on the left if the prefix is positive
-(or starts with zero) and on the right if the prefix is negative.  The
-padding character is normally a space, but if the numeric prefix
-starts with a zero, zeros are used for padding.  Some of these
-conventions are ignored for specification characters for which they do
-not make sense.  That is, %s, %S and %c accept a numeric prefix
-starting with 0, but still pad with @emph{spaces} on the left.  Also,
-%% accepts a numeric prefix, but ignores it.  Here are some examples
-of padding:
+  All the specification characters allow an optional ``width'', which
+is a digit-string between the @samp{%} and the character.  If the
+printed representation of the object contains fewer characters than
+this width, then it is padded.  The padding is on the left if the
+width is positive (or starts with zero) and on the right if the
+width is negative.  The padding character is normally a space, but if
+the width starts with a zero, zeros are used for padding.  Some of
+these conventions are ignored for specification characters for which
+they do not make sense.  That is, @samp{%s}, @samp{%S} and @samp{%c}
+accept a width starting with 0, but still pad with @emph{spaces} on
+the left.  Also, @samp{%%} accepts a width, but ignores it.  Here are
+some examples of padding:
 
 @example
 (format "%06d is padded on the left with zeros" 123)
@@ -820,10 +825,9 @@ of padding:
      @result{} "123    is padded on the right"
 @end example
 
-  @code{format} never truncates an object's printed representation, no
-matter what width you specify.  Thus, you can use a numeric prefix to
-specify a minimum spacing between columns with no risk of losing
-information.
+If the width is too small, @code{format} does not truncate the
+object's printed representation.  Thus, you can use a width to specify
+a minimum spacing between columns with no risk of losing information.
 
   In the following three examples, @samp{%7s} specifies a minimum width
 of 7.  In the first case, the string inserted in place of @samp{%7s} has
@@ -851,6 +855,32 @@ not truncated.  In the third case, the padding is on the right.
 @end group
 @end smallexample
 
+@cindex precision in format specifications
+  All the specification characters allow an optional ``precision''
+before the character (after the width, if present).  The precision is
+a decimal-point @samp{.} followed by a digit-string.  For the
+floating-point specifications (@samp{%e}, @samp{%f}, @samp{%g}), the
+precision specifies how many decimal places to show; if zero, the
+decimal-point itself is also omitted.  For @samp{%s} and @samp{%S},
+the precision truncates the string to the given width, so
+@samp{%.3s} shows only the first three characters of the
+representation for @var{object}.  Precision is ignored for other
+specification characters.
+
+@cindex flags in format specifications
+Immediately after the @samp{%} and before the optional width and
+precision, you can put certain ``flag'' characters.
+
+A space character inserts a space for positive numbers (otherwise
+nothing is inserted for positive numbers).  This flag is ignored
+except for @samp{%d}, @samp{%e}, @samp{%f}, @samp{%g}.
+
+The flag @samp{#} indicates ``alternate form''.  For @samp{%o} it
+ensures that the result begins with a 0.  For @samp{%x} and @samp{%X}
+the result is prefixed with @samp{0x} or @samp{0X}. For @samp{%e},
+@samp{%f}, and @samp{%g} a decimal point is always shown even if the
+precision is zero.
+
 @node Case Conversion
 @comment node-name, next, previous, up
 @section Case Conversion in Lisp
@@ -1015,7 +1045,7 @@ and @samp{A} are related by case-conversion, they should have the same
 canonical equivalent character (which should be either @samp{a} for both
 of them, or @samp{A} for both of them).
 
-  The extra table @var{equivalences} is a map that cyclicly permutes
+  The extra table @var{equivalences} is a map that cyclically permutes
 each equivalence class (of characters with the same canonical
 equivalent).  (For ordinary @acronym{ASCII}, this would map @samp{a} into
 @samp{A} and @samp{A} into @samp{a}, and likewise for each set of