annotate lispref/strings.texi @ 36150:46e59561af4c

Display Vars node renamed Display Custom. Include info there about customizing cursor appearance. Clean up aggressive scrolling. Clarify horizontal scrolling discussion. Fix index entries for line number mode.
author Richard M. Stallman <rms@gnu.org>
date Sat, 17 Feb 2001 16:45:37 +0000
parents bf884d9d7949
children dc7cb360c349
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 @c -*-texinfo-*-
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2 @c This is part of the GNU Emacs Lisp Reference Manual.
27189
d2e5f1b7d8e2 Update copyrights.
Gerd Moellmann <gerd@gnu.org>
parents: 27187
diff changeset
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999
d2e5f1b7d8e2 Update copyrights.
Gerd Moellmann <gerd@gnu.org>
parents: 27187
diff changeset
4 @c Free Software Foundation, Inc.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 @c See the file elisp.texi for copying conditions.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 @setfilename ../info/strings
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 @node Strings and Characters, Lists, Numbers, Top
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 @comment node-name, next, previous, up
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 @chapter Strings and Characters
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 @cindex strings
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 @cindex character arrays
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 @cindex characters
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 @cindex bytes
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 A string in Emacs Lisp is an array that contains an ordered sequence
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 of characters. Strings are used as names of symbols, buffers, and
24862
78aaef52e28f *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22252
diff changeset
17 files; to send messages to users; to hold text being copied between
78aaef52e28f *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22252
diff changeset
18 buffers; and for many other purposes. Because strings are so important,
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 Emacs Lisp has many functions expressly for manipulating them. Emacs
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 Lisp programs use strings more often than individual characters.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 @xref{Strings of Events}, for special considerations for strings of
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 keyboard character events.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 @menu
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 * Basics: String Basics. Basic properties of strings and characters.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 * Predicates for Strings:: Testing whether an object is a string or char.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 * Creating Strings:: Functions to allocate new strings.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
29 * Modifying Strings:: Altering the contents of an existing string.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 * Text Comparison:: Comparing characters or strings.
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
31 * String Conversion:: Converting to and from characters and strings.
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
32 * Formatting Strings:: @code{format}: Emacs's analogue of @code{printf}.
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
33 * Case Conversion:: Case conversion functions.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
34 * Case Tables:: Customizing case conversion.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 @end menu
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 @node String Basics
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 @section String and Character Basics
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39
24862
78aaef52e28f *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22252
diff changeset
40 Characters are represented in Emacs Lisp as integers;
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
41 whether an integer is a character or not is determined only by how it is
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
42 used. Thus, strings really contain integers.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
44 The length of a string (like any array) is fixed, and cannot be
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
45 altered once the string exists. Strings in Lisp are @emph{not}
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
46 terminated by a distinguished character code. (By contrast, strings in
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
47 C are terminated by a character with @sc{ascii} code 0.)
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
49 Since strings are arrays, and therefore sequences as well, you can
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
50 operate on them with the general array and sequence functions.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
51 (@xref{Sequences Arrays Vectors}.) For example, you can access or
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
52 change individual characters in a string using the functions @code{aref}
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
53 and @code{aset} (@pxref{Array Functions}).
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
55 There are two text representations for non-@sc{ascii} characters in
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
56 Emacs strings (and in buffers): unibyte and multibyte (@pxref{Text
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
57 Representations}). An @sc{ascii} character always occupies one byte in a
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
58 string; in fact, when a string is all @sc{ascii}, there is no real
24862
78aaef52e28f *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22252
diff changeset
59 difference between the unibyte and multibyte representations.
78aaef52e28f *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22252
diff changeset
60 For most Lisp programming, you don't need to be concerned with these two
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
61 representations.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 Sometimes key sequences are represented as strings. When a string is
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 a key sequence, string elements in the range 128 to 255 represent meta
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
65 characters (which are large integers) rather than character
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
66 codes in the range 128 to 255.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 Strings cannot hold characters that have the hyper, super or alt
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
69 modifiers; they can hold @sc{ascii} control characters, but no other
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
70 control characters. They do not distinguish case in @sc{ascii} control
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
71 characters. If you want to store such characters in a sequence, such as
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
72 a key sequence, you must use a vector instead of a string.
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
73 @xref{Character Type}, for more information about the representation of meta
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
74 and other modifiers for keyboard input characters.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
76 Strings are useful for holding regular expressions. You can also
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
77 match regular expressions against strings (@pxref{Regexp Search}). The
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
78 functions @code{match-string} (@pxref{Simple Match Data}) and
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
79 @code{replace-match} (@pxref{Replacing Match}) are useful for
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
80 decomposing and modifying strings based on regular expression matching.
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
81
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 Like a buffer, a string can contain text properties for the characters
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 in it, as well as the characters themselves. @xref{Text Properties}.
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
84 All the Lisp primitives that copy text from strings to buffers or other
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
85 strings also copy the properties of the characters being copied.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 @xref{Text}, for information about functions that display strings or
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 copy them into buffers. @xref{Character Type}, and @ref{String Type},
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 for information about the syntax of characters and strings.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
90 @xref{Non-ASCII Characters}, for functions to convert between text
24862
78aaef52e28f *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22252
diff changeset
91 representations and to encode and decode character codes.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 @node Predicates for Strings
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 @section The Predicates for Strings
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 For more information about general sequence and array predicates,
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 see @ref{Sequences Arrays Vectors}, and @ref{Arrays}.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 @defun stringp object
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
100 This function returns @code{t} if @var{object} is a string, @code{nil}
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 otherwise.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 @defun char-or-string-p object
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
105 This function returns @code{t} if @var{object} is a string or a
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 character (i.e., an integer), @code{nil} otherwise.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 @node Creating Strings
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 @section Creating Strings
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 The following functions create strings, either from scratch, or by
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 putting strings together, or by taking them apart.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 @defun make-string count character
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
116 This function returns a string made up of @var{count} repetitions of
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 @var{character}. If @var{count} is negative, an error is signaled.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 (make-string 5 ?x)
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 @result{} "xxxxx"
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 (make-string 0 ?x)
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 @result{} ""
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 @end example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 Other functions to compare with this one include @code{char-to-string}
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 (@pxref{String Conversion}), @code{make-vector} (@pxref{Vectors}), and
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 @code{make-list} (@pxref{Building Lists}).
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
131 @defun string &rest characters
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
132 This returns a string containing the characters @var{characters}.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
133
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
134 @example
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
135 (string ?a ?b ?c)
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
136 @result{} "abc"
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
137 @end example
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
138 @end defun
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
139
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 @defun substring string start &optional end
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
141 This function returns a new string which consists of those characters
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 from @var{string} in the range from (and including) the character at the
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 index @var{start} up to (but excluding) the character at the index
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 @var{end}. The first character is at index zero.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 @group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 (substring "abcdefg" 0 3)
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 @result{} "abc"
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 @end group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 @end example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 @noindent
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 Here the index for @samp{a} is 0, the index for @samp{b} is 1, and the
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 index for @samp{c} is 2. Thus, three letters, @samp{abc}, are copied
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 from the string @code{"abcdefg"}. The index 3 marks the character
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 position up to which the substring is copied. The character whose index
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 is 3 is actually the fourth character in the string.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 A negative number counts from the end of the string, so that @minus{}1
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 signifies the index of the last character of the string. For example:
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 @group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 (substring "abcdefg" -3 -1)
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 @result{} "ef"
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 @end group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 @end example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 @noindent
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 In this example, the index for @samp{e} is @minus{}3, the index for
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 @samp{f} is @minus{}2, and the index for @samp{g} is @minus{}1.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 Therefore, @samp{e} and @samp{f} are included, and @samp{g} is excluded.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 When @code{nil} is used as an index, it stands for the length of the
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 string. Thus,
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 @group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 (substring "abcdefg" -3 nil)
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 @result{} "efg"
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 @end group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 @end example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 Omitting the argument @var{end} is equivalent to specifying @code{nil}.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 It follows that @code{(substring @var{string} 0)} returns a copy of all
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 of @var{string}.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 @group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 (substring "abcdefg" 0)
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 @result{} "abcdefg"
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 @end group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 @end example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 @noindent
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 But we recommend @code{copy-sequence} for this purpose (@pxref{Sequence
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 Functions}).
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
200 If the characters copied from @var{string} have text properties, the
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
201 properties are copied into the new string also. @xref{Text Properties}.
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
202
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
203 @code{substring} also accepts a vector for the first argument.
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
204 For example:
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
205
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
206 @example
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
207 (substring [a b (c) "d"] 1 3)
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
208 @result{} [b (c)]
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
209 @end example
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
210
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 A @code{wrong-type-argument} error is signaled if either @var{start} or
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 @var{end} is not an integer or @code{nil}. An @code{args-out-of-range}
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 error is signaled if @var{start} indicates a character following
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 @var{end}, or if either integer is out of range for @var{string}.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 Contrast this function with @code{buffer-substring} (@pxref{Buffer
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 Contents}), which returns a string containing a portion of the text in
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 the current buffer. The beginning of a string is at index 0, but the
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 beginning of a buffer is at index 1.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 @defun concat &rest sequences
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 @cindex copying strings
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 @cindex concatenating strings
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 This function returns a new string consisting of the characters in the
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
226 arguments passed to it (along with their text properties, if any). The
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
227 arguments may be strings, lists of numbers, or vectors of numbers; they
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
228 are not themselves changed. If @code{concat} receives no arguments, it
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 12067
diff changeset
229 returns an empty string.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 (concat "abc" "-def")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 @result{} "abc-def"
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
234 (concat "abc" (list 120 121) [122])
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 @result{} "abcxyz"
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 ;; @r{@code{nil} is an empty sequence.}
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 (concat "abc" nil "-def")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 @result{} "abc-def"
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 (concat "The " "quick brown " "fox.")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 @result{} "The quick brown fox."
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 (concat)
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 @result{} ""
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 @end example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 @noindent
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 The @code{concat} function always constructs a new string that is
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 not @code{eq} to any existing string.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248
30498
79122ed1162e Numeric args to concat.
Dave Love <fx@gnu.org>
parents: 27189
diff changeset
249 In Emacs versions before 21, when an argument was an integer (not a
79122ed1162e Numeric args to concat.
Dave Love <fx@gnu.org>
parents: 27189
diff changeset
250 sequence of integers), it was converted to a string of digits making up
79122ed1162e Numeric args to concat.
Dave Love <fx@gnu.org>
parents: 27189
diff changeset
251 the decimal printed representation of the integer. This obsolete usage
79122ed1162e Numeric args to concat.
Dave Love <fx@gnu.org>
parents: 27189
diff changeset
252 no longer works. The proper way to convert an integer to its decimal
79122ed1162e Numeric args to concat.
Dave Love <fx@gnu.org>
parents: 27189
diff changeset
253 printed form is with @code{format} (@pxref{Formatting Strings}) or
11141
6f6c571ad0c0 Say not to use concat for integers.
Richard M. Stallman <rms@gnu.org>
parents: 8590
diff changeset
254 @code{number-to-string} (@pxref{String Conversion}).
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 For information about other concatenation functions, see the
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 description of @code{mapconcat} in @ref{Mapping Functions},
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 @code{vconcat} in @ref{Vectors}, and @code{append} in @ref{Building
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 Lists}.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
262 @defun split-string string separators
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
263 This function splits @var{string} into substrings at matches for the regular
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
264 expression @var{separators}. Each match for @var{separators} defines a
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
265 splitting point; the substrings between the splitting points are made
24862
78aaef52e28f *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22252
diff changeset
266 into a list, which is the value returned by @code{split-string}.
78aaef52e28f *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22252
diff changeset
267 If @var{separators} is @code{nil} (or omitted),
78aaef52e28f *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22252
diff changeset
268 the default is @code{"[ \f\t\n\r\v]+"}.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
269
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
270 For example,
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
271
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
272 @example
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
273 (split-string "Soup is good food" "o")
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
274 @result{} ("S" "up is g" "" "d f" "" "d")
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
275 (split-string "Soup is good food" "o+")
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
276 @result{} ("S" "up is g" "d f" "d")
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
277 @end example
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
278
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
279 When there is a match adjacent to the beginning or end of the string,
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
280 this does not cause a null string to appear at the beginning or end
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
281 of the list:
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
282
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
283 @example
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
284 (split-string "out to moo" "o+")
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
285 @result{} ("ut t" " m")
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
286 @end example
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
287
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
288 Empty matches do count, when not adjacent to another match:
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
289
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
290 @example
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
291 (split-string "Soup is good food" "o*")
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
292 @result{}("S" "u" "p" " " "i" "s" " " "g" "d" " " "f" "d")
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
293 (split-string "Nice doggy!" "")
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
294 @result{}("N" "i" "c" "e" " " "d" "o" "g" "g" "y" "!")
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
295 @end example
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
296 @end defun
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
297
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
298 @node Modifying Strings
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
299 @section Modifying Strings
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
300
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
301 The most basic way to alter the contents of an existing string is with
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
302 @code{aset} (@pxref{Array Functions}). @code{(aset @var{string}
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
303 @var{idx} @var{char})} stores @var{char} into @var{string} at index
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
304 @var{idx}. Each character occupies one or more bytes, and if @var{char}
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
305 needs a different number of bytes from the character already present at
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
306 that index, @code{aset} signals an error.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
307
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
308 A more powerful function is @code{store-substring}:
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
309
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
310 @defun store-substring string idx obj
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
311 This function alters part of the contents of the string @var{string}, by
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
312 storing @var{obj} starting at index @var{idx}. The argument @var{obj}
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
313 may be either a character or a (smaller) string.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
314
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
315 Since it is impossible to change the length of an existing string, it is
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
316 an error if @var{obj} doesn't fit within @var{string}'s actual length,
24862
78aaef52e28f *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22252
diff changeset
317 or if any new character requires a different number of bytes from the
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
318 character currently present at that point in @var{string}.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
319 @end defun
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
320
12282
586e3ea81792 updates for version 19.29 made by melissa; also needed to check out files
Melissa Weisshaus <melissa@gnu.org>
parents: 12098
diff changeset
321 @need 2000
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 @node Text Comparison
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 @section Comparison of Characters and Strings
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 @cindex string equality
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 @defun char-equal character1 character2
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 This function returns @code{t} if the arguments represent the same
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 character, @code{nil} otherwise. This function ignores differences
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 in case if @code{case-fold-search} is non-@code{nil}.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 (char-equal ?x ?x)
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 @result{} t
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
334 (let ((case-fold-search nil))
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
335 (char-equal ?x ?X))
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
336 @result{} nil
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 @end example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 @defun string= string1 string2
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 This function returns @code{t} if the characters of the two strings
24862
78aaef52e28f *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22252
diff changeset
342 match exactly.
78aaef52e28f *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22252
diff changeset
343 Case is always significant, regardless of @code{case-fold-search}.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 (string= "abc" "abc")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 @result{} t
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 (string= "abc" "ABC")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 @result{} nil
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 (string= "ab" "ABC")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 @result{} nil
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 @end example
12067
73dc8205d259 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 11141
diff changeset
353
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
354 The function @code{string=} ignores the text properties of the two
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
355 strings. When @code{equal} (@pxref{Equality Predicates}) compares two
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
356 strings, it uses @code{string=}.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
357
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
358 If the strings contain non-@sc{ascii} characters, and one is unibyte
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
359 while the other is multibyte, then they cannot be equal. @xref{Text
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
360 Representations}.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 @defun string-equal string1 string2
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 @code{string-equal} is another name for @code{string=}.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 @cindex lexical comparison
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 @defun string< string1 string2
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 @c (findex string< causes problems for permuted index!!)
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
370 This function compares two strings a character at a time. It
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
371 scans both the strings at the same time to find the first pair of corresponding
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
372 characters that do not match. If the lesser character of these two is
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 the character from @var{string1}, then @var{string1} is less, and this
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 function returns @code{t}. If the lesser character is the one from
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 @var{string2}, then @var{string1} is greater, and this function returns
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 @code{nil}. If the two strings match entirely, the value is @code{nil}.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
378 Pairs of characters are compared according to their character codes.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
379 Keep in mind that lower case letters have higher numeric values in the
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
380 @sc{ascii} character set than their upper case counterparts; digits and
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 many punctuation characters have a lower numeric value than upper case
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
382 letters. An @sc{ascii} character is less than any non-@sc{ascii}
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
383 character; a unibyte non-@sc{ascii} character is always less than any
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
384 multibyte non-@sc{ascii} character (@pxref{Text Representations}).
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 @group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 (string< "abc" "abd")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 @result{} t
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 (string< "abd" "abc")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 @result{} nil
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 (string< "123" "abc")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 @result{} t
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 @end group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 @end example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 When the strings have different lengths, and they match up to the
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 length of @var{string1}, then the result is @code{t}. If they match up
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 to the length of @var{string2}, the result is @code{nil}. A string of
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 no characters is less than any other string.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 @group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 (string< "" "abc")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 @result{} t
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 (string< "ab" "abc")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 @result{} t
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 (string< "abc" "")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 @result{} nil
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 (string< "abc" "ab")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 @result{} nil
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 (string< "" "")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 @result{} nil
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 @end group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 @end example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 @defun string-lessp string1 string2
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 @code{string-lessp} is another name for @code{string<}.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
422 @defun compare-strings string1 start1 end1 string2 start2 end2 &optional ignore-case
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
423 This function compares the specified part of @var{string1} with the
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
424 specified part of @var{string2}. The specified part of @var{string1}
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
425 runs from index @var{start1} up to index @var{end1} (@code{nil} means
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
426 the end of the string). The specified part of @var{string2} runs from
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
427 index @var{start2} up to index @var{end2} (@code{nil} means the end of
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
428 the string).
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
429
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
430 The strings are both converted to multibyte for the comparison
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
431 (@pxref{Text Representations}) so that a unibyte string can be equal to
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
432 a multibyte string. If @var{ignore-case} is non-@code{nil}, then case
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
433 is ignored, so that upper case letters can be equal to lower case letters.
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
434
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
435 If the specified portions of the two strings match, the value is
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
436 @code{t}. Otherwise, the value is an integer which indicates how many
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
437 leading characters agree, and which string is less. Its absolute value
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
438 is one plus the number of characters that agree at the beginning of the
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
439 two strings. The sign is negative if @var{string1} (or its specified
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
440 portion) is less.
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
441 @end defun
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
442
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
443 @defun assoc-ignore-case key alist
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
444 This function works like @code{assoc}, except that @var{key} must be a
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
445 string, and comparison is done using @code{compare-strings}.
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
446 Case differences are ignored in this comparison.
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
447 @end defun
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
448
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
449 @defun assoc-ignore-representation key alist
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
450 This function works like @code{assoc}, except that @var{key} must be a
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
451 string, and comparison is done using @code{compare-strings}.
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
452 Case differences are significant.
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
453 @end defun
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
454
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 See also @code{compare-buffer-substrings} in @ref{Comparing Text}, for
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 a way to compare text in buffers. The function @code{string-match},
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 which matches a regular expression against a string, can be used
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 for a kind of string comparison; see @ref{Regexp Search}.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 @node String Conversion
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461 @comment node-name, next, previous, up
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 @section Conversion of Characters and Strings
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 @cindex conversion of strings
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 This section describes functions for conversions between characters,
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 strings and integers. @code{format} and @code{prin1-to-string}
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 (@pxref{Output Functions}) can also convert Lisp objects into strings.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 @code{read-from-string} (@pxref{Input Functions}) can ``convert'' a
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
469 string representation of a Lisp object into an object. The functions
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
470 @code{string-make-multibyte} and @code{string-make-unibyte} convert the
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
471 text representation of a string (@pxref{Converting Representations}).
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 @xref{Documentation}, for functions that produce textual descriptions
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 of text characters and general input events
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 (@code{single-key-description} and @code{text-char-description}). These
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 functions are used primarily for making help messages.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 @defun char-to-string character
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 @cindex character to string
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
480 This function returns a new string containing one character,
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
481 @var{character}. This function is semi-obsolete because the function
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
482 @code{string} is more general. @xref{Creating Strings}.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485 @defun string-to-char string
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 @cindex string to character
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 This function returns the first character in @var{string}. If the
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 string is empty, the function returns 0. The value is also 0 when the
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
489 first character of @var{string} is the null character, @sc{ascii} code
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 0.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 (string-to-char "ABC")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494 @result{} 65
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495 (string-to-char "xyz")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 @result{} 120
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 (string-to-char "")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498 @result{} 0
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
499 @group
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 (string-to-char "\000")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 @result{} 0
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
502 @end group
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 @end example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 This function may be eliminated in the future if it does not seem useful
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 enough to retain.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 @defun number-to-string number
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 @cindex integer to string
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 @cindex integer to decimal
24862
78aaef52e28f *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22252
diff changeset
512 This function returns a string consisting of the printed base-ten
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 representation of @var{number}, which may be an integer or a floating
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
514 point number. The returned value starts with a minus sign if the argument is
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515 negative.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 (number-to-string 256)
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 @result{} "256"
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 (number-to-string -23)
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 @result{} "-23"
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 (number-to-string -23.5)
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 @result{} "-23.5"
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524 @end example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 @cindex int-to-string
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 @code{int-to-string} is a semi-obsolete alias for this function.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 See also the function @code{format} in @ref{Formatting Strings}.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
532 @defun string-to-number string &optional base
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 @cindex string to number
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 This function returns the numeric value of the characters in
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
535 @var{string}. If @var{base} is non-@code{nil}, integers are converted
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
536 in that base. If @var{base} is @code{nil}, then base ten is used.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
537 Floating point conversion always uses base ten; we have not implemented
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
538 other radices for floating point numbers, because that would be much
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
539 more work and does not seem useful.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
540
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
541 The parsing skips spaces and tabs at the beginning of @var{string}, then
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
542 reads as much of @var{string} as it can interpret as a number. (On some
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
543 systems it ignores other whitespace at the beginning, not just spaces
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
544 and tabs.) If the first character after the ignored whitespace is
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
545 neither a digit, nor a plus or minus sign, nor the leading dot of a
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
546 floating point number, this function returns 0.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 (string-to-number "256")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 @result{} 256
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 (string-to-number "25 is a perfect square.")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 @result{} 25
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 (string-to-number "X256")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 @result{} 0
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 (string-to-number "-4.5")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 @result{} -4.5
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 @end example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 @findex string-to-int
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 @code{string-to-int} is an obsolete alias for this function.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
563 Here are some other functions that can convert to or from a string:
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
564
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
565 @table @code
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
566 @item concat
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
567 @code{concat} can convert a vector or a list into a string.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
568 @xref{Creating Strings}.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
569
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
570 @item vconcat
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
571 @code{vconcat} can convert a string into a vector. @xref{Vector
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
572 Functions}.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
573
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
574 @item append
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
575 @code{append} can convert a string into a list. @xref{Building Lists}.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
576 @end table
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
577
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 @node Formatting Strings
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 @comment node-name, next, previous, up
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 @section Formatting Strings
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 @cindex formatting strings
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 @cindex strings, formatting them
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 @dfn{Formatting} means constructing a string by substitution of
24862
78aaef52e28f *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22252
diff changeset
585 computed values at various places in a constant string. This constant string
78aaef52e28f *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22252
diff changeset
586 controls how the other values are printed, as well as where they appear;
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 it is called a @dfn{format string}.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 Formatting is often useful for computing messages to be displayed. In
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 fact, the functions @code{message} and @code{error} provide the same
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 formatting feature described here; they differ from @code{format} only
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 in how they use the result of formatting.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 @defun format string &rest objects
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
595 This function returns a new string that is made by copying
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 @var{string} and then replacing any format specification
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 in the copy with encodings of the corresponding @var{objects}. The
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 arguments @var{objects} are the computed values to be formatted.
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
599
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
600 The characters in @var{string}, other than the format specifications,
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
601 are copied directly into the output; starting in Emacs 21, if they have
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
602 text properties, these are copied into the output also.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 @cindex @samp{%} in format
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 @cindex format specification
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 A format specification is a sequence of characters beginning with a
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 @samp{%}. Thus, if there is a @samp{%d} in @var{string}, the
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 @code{format} function replaces it with the printed representation of
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 one of the values to be formatted (one of the arguments @var{objects}).
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 For example:
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 @group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 (format "The value of fill-column is %d." fill-column)
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 @result{} "The value of fill-column is 72."
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617 @end group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 @end example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620 If @var{string} contains more than one format specification, the
24862
78aaef52e28f *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22252
diff changeset
621 format specifications correspond to successive values from
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 @var{objects}. Thus, the first format specification in @var{string}
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 uses the first such value, the second format specification uses the
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 second such value, and so on. Any extra format specifications (those
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 for which there are no corresponding values) cause unpredictable
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 behavior. Any extra values to be formatted are ignored.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
628 Certain format specifications require values of particular types. If
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
629 you supply a value that doesn't fit the requirements, an error is
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
630 signaled.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 Here is a table of valid format specifications:
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 @table @samp
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635 @item %s
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 Replace the specification with the printed representation of the object,
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
637 made without quoting (that is, using @code{princ}, not
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
638 @code{prin1}---@pxref{Output Functions}). Thus, strings are represented
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
639 by their contents alone, with no @samp{"} characters, and symbols appear
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
640 without @samp{\} characters.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
642 Starting in Emacs 21, if the object is a string, its text properties are
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
643 copied into the output. The text properties of the @samp{%s} itself
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
644 are also copied, but those of the object take priority.
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
645
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 If there is no corresponding object, the empty string is used.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 @item %S
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 Replace the specification with the printed representation of the object,
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
650 made with quoting (that is, using @code{prin1}---@pxref{Output
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
651 Functions}). Thus, strings are enclosed in @samp{"} characters, and
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
652 @samp{\} characters appear where necessary before special characters.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 If there is no corresponding object, the empty string is used.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656 @item %o
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 @cindex integer to octal
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 Replace the specification with the base-eight representation of an
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 integer.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 @item %d
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 Replace the specification with the base-ten representation of an
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 integer.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 @item %x
35036
956652ab5efc %X, %E, %G in format strings.
Dave Love <fx@gnu.org>
parents: 30498
diff changeset
666 @itemx %X
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 @cindex integer to hexadecimal
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 Replace the specification with the base-sixteen representation of an
35036
956652ab5efc %X, %E, %G in format strings.
Dave Love <fx@gnu.org>
parents: 30498
diff changeset
669 integer. @samp{%x} uses lower case and @samp{%X} uses upper case.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 @item %c
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 Replace the specification with the character which is the value given.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 @item %e
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 Replace the specification with the exponential notation for a floating
35071
bf884d9d7949 Revert last change except for %X.
Dave Love <fx@gnu.org>
parents: 35036
diff changeset
676 point number.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 @item %f
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679 Replace the specification with the decimal-point notation for a floating
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 point number.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 @item %g
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 Replace the specification with notation for a floating point number,
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
684 using either exponential notation or decimal-point notation, whichever
35071
bf884d9d7949 Revert last change except for %X.
Dave Love <fx@gnu.org>
parents: 35036
diff changeset
685 is shorter.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 @item %%
35036
956652ab5efc %X, %E, %G in format strings.
Dave Love <fx@gnu.org>
parents: 30498
diff changeset
688 Replace the specification with a single @samp{%}. This format
956652ab5efc %X, %E, %G in format strings.
Dave Love <fx@gnu.org>
parents: 30498
diff changeset
689 specification is unusual in that it does not use a value. For example,
956652ab5efc %X, %E, %G in format strings.
Dave Love <fx@gnu.org>
parents: 30498
diff changeset
690 @code{(format "%% %d" 30)} returns @code{"% 30"}.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 @end table
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 Any other format character results in an @samp{Invalid format
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 operation} error.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 Here are several examples:
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 @group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 (format "The name of this buffer is %s." (buffer-name))
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 @result{} "The name of this buffer is strings.texi."
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 (format "The buffer object prints as %s." (current-buffer))
13228
a4a1d7df2e7f Fix format example.
Richard M. Stallman <rms@gnu.org>
parents: 12282
diff changeset
704 @result{} "The buffer object prints as strings.texi."
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 (format "The octal value of %d is %o,
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 and the hex value is %x." 18 18 18)
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 @result{} "The octal value of 18 is 22,
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 and the hex value is 12."
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 @end group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 @end example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 @cindex numeric prefix
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 @cindex field width
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 @cindex padding
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 All the specification characters allow an optional numeric prefix
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 between the @samp{%} and the character. The optional numeric prefix
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 defines the minimum width for the object. If the printed representation
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 of the object contains fewer characters than this, then it is padded.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 The padding is on the left if the prefix is positive (or starts with
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 zero) and on the right if the prefix is negative. The padding character
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 is normally a space, but if the numeric prefix starts with a zero, zeros
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
723 are used for padding. Here are some examples of padding:
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 (format "%06d is padded on the left with zeros" 123)
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 @result{} "000123 is padded on the left with zeros"
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 (format "%-6d is padded on the right" 123)
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 @result{} "123 is padded on the right"
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731 @end example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 @code{format} never truncates an object's printed representation, no
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 matter what width you specify. Thus, you can use a numeric prefix to
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 specify a minimum spacing between columns with no risk of losing
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 information.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 In the following three examples, @samp{%7s} specifies a minimum width
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 of 7. In the first case, the string inserted in place of @samp{%7s} has
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 only 3 letters, so 4 blank spaces are inserted for padding. In the
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741 second case, the string @code{"specification"} is 13 letters wide but is
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742 not truncated. In the third case, the padding is on the right.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 @smallexample
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 @group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 (format "The word `%7s' actually has %d letters in it."
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747 "foo" (length "foo"))
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748 @result{} "The word ` foo' actually has 3 letters in it."
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749 @end group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
751 @group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
752 (format "The word `%7s' actually has %d letters in it."
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
753 "specification" (length "specification"))
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
754 @result{} "The word `specification' actually has 13 letters in it."
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755 @end group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
756
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
757 @group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758 (format "The word `%-7s' actually has %d letters in it."
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759 "foo" (length "foo"))
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 @result{} "The word `foo ' actually has 3 letters in it."
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761 @end group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 @end smallexample
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
763
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
764 @node Case Conversion
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765 @comment node-name, next, previous, up
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
766 @section Case Conversion in Lisp
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 @cindex upper case
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 @cindex lower case
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769 @cindex character case
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
770 @cindex case conversion in Lisp
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
772 The character case functions change the case of single characters or
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
773 of the contents of strings. The functions normally convert only
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
774 alphabetic characters (the letters @samp{A} through @samp{Z} and
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
775 @samp{a} through @samp{z}, as well as non-@sc{ascii} letters); other
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
776 characters are not altered. You can specify a different case
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
777 conversion mapping by specifying a case table (@pxref{Case Tables}).
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
778
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
779 These functions do not modify the strings that are passed to them as
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
780 arguments.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782 The examples below use the characters @samp{X} and @samp{x} which have
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
783 @sc{ascii} codes 88 and 120 respectively.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785 @defun downcase string-or-char
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786 This function converts a character or a string to lower case.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788 When the argument to @code{downcase} is a string, the function creates
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789 and returns a new string in which each letter in the argument that is
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 upper case is converted to lower case. When the argument to
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 @code{downcase} is a character, @code{downcase} returns the
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792 corresponding lower case character. This value is an integer. If the
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 original character is lower case, or is not a letter, then the value
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 equals the original character.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797 (downcase "The cat in the hat")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798 @result{} "the cat in the hat"
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
799
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 (downcase ?X)
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 @result{} 120
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 @end example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
805 @defun upcase string-or-char
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
806 This function converts a character or a string to upper case.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808 When the argument to @code{upcase} is a string, the function creates
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
809 and returns a new string in which each letter in the argument that is
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810 lower case is converted to upper case.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812 When the argument to @code{upcase} is a character, @code{upcase}
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
813 returns the corresponding upper case character. This value is an integer.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
814 If the original character is upper case, or is not a letter, then the
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
815 value returned equals the original character.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818 (upcase "The cat in the hat")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
819 @result{} "THE CAT IN THE HAT"
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
820
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821 (upcase ?x)
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
822 @result{} 88
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
823 @end example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
824 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
825
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826 @defun capitalize string-or-char
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
827 @cindex capitalization
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828 This function capitalizes strings or characters. If
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829 @var{string-or-char} is a string, the function creates and returns a new
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830 string, whose contents are a copy of @var{string-or-char} in which each
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831 word has been capitalized. This means that the first character of each
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832 word is converted to upper case, and the rest are converted to lower
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
833 case.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 The definition of a word is any sequence of consecutive characters that
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836 are assigned to the word constituent syntax class in the current syntax
25454
80ac191b6d2b *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 24862
diff changeset
837 table (@pxref{Syntax Class Table}).
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 When the argument to @code{capitalize} is a character, @code{capitalize}
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 has the same result as @code{upcase}.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 @example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843 (capitalize "The cat in the hat")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 @result{} "The Cat In The Hat"
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846 (capitalize "THE 77TH-HATTED CAT")
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847 @result{} "The 77th-Hatted Cat"
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849 @group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850 (capitalize ?x)
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 @result{} 88
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852 @end group
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853 @end example
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
856 @defun upcase-initials string
24862
78aaef52e28f *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22252
diff changeset
857 This function capitalizes the initials of the words in @var{string},
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
858 without altering any letters other than the initials. It returns a new
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
859 string whose contents are a copy of @var{string}, in which each word has
24862
78aaef52e28f *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22252
diff changeset
860 had its initial letter converted to upper case.
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
861
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
862 The definition of a word is any sequence of consecutive characters that
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
863 are assigned to the word constituent syntax class in the current syntax
25454
80ac191b6d2b *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 24862
diff changeset
864 table (@pxref{Syntax Class Table}).
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
865
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
866 @example
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
867 @group
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
868 (upcase-initials "The CAT in the hAt")
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
869 @result{} "The CAT In The HAt"
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
870 @end group
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
871 @end example
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
872 @end defun
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
873
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
874 @xref{Text Comparison}, for functions that compare strings; some of
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
875 them ignore case differences, or can optionally ignore case differences.
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
876
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
877 @node Case Tables
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
878 @section The Case Table
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
879
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
880 You can customize case conversion by installing a special @dfn{case
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
881 table}. A case table specifies the mapping between upper case and lower
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
882 case letters. It affects both the case conversion functions for Lisp
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
883 objects (see the previous section) and those that apply to text in the
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
884 buffer (@pxref{Case Changes}). Each buffer has a case table; there is
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
885 also a standard case table which is used to initialize the case table
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
886 of new buffers.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
888 A case table is a char-table (@pxref{Char-Tables}) whose subtype is
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
889 @code{case-table}. This char-table maps each character into the
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
890 corresponding lower case character. It has three extra slots, which
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
891 hold related tables:
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
892
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
893 @table @var
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
894 @item upcase
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
895 The upcase table maps each character into the corresponding upper
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
896 case character.
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
897 @item canonicalize
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
898 The canonicalize table maps all of a set of case-related characters
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
899 into a particular member of that set.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
900 @item equivalences
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
901 The equivalences table maps each one of a set of case-related characters
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
902 into the next character in that set.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
903 @end table
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
905 In simple cases, all you need to specify is the mapping to lower-case;
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
906 the three related tables will be calculated automatically from that one.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 For some languages, upper and lower case letters are not in one-to-one
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909 correspondence. There may be two different lower case letters with the
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 same upper case equivalent. In these cases, you need to specify the
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
911 maps for both lower case and upper case.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
913 The extra table @var{canonicalize} maps each character to a canonical
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
914 equivalent; any two characters that are related by case-conversion have
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
915 the same canonical equivalent character. For example, since @samp{a}
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
916 and @samp{A} are related by case-conversion, they should have the same
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
917 canonical equivalent character (which should be either @samp{a} for both
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
918 of them, or @samp{A} for both of them).
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
919
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
920 The extra table @var{equivalences} is a map that cyclicly permutes
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
921 each equivalence class (of characters with the same canonical
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
922 equivalent). (For ordinary @sc{ascii}, this would map @samp{a} into
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
923 @samp{A} and @samp{A} into @samp{a}, and likewise for each set of
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
924 equivalent characters.)
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925
6938
782646fc7505 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6550
diff changeset
926 When you construct a case table, you can provide @code{nil} for
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
927 @var{canonicalize}; then Emacs fills in this slot from the lower case
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
928 and upper case mappings. You can also provide @code{nil} for
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
929 @var{equivalences}; then Emacs fills in this slot from
6938
782646fc7505 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6550
diff changeset
930 @var{canonicalize}. In a case table that is actually in use, those
782646fc7505 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6550
diff changeset
931 components are non-@code{nil}. Do not try to specify @var{equivalences}
782646fc7505 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6550
diff changeset
932 without also specifying @var{canonicalize}.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
934 Here are the functions for working with case tables:
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936 @defun case-table-p object
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937 This predicate returns non-@code{nil} if @var{object} is a valid case
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
938 table.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
939 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941 @defun set-standard-case-table table
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 This function makes @var{table} the standard case table, so that it will
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
943 be used in any buffers created subsequently.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 @defun standard-case-table
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947 This returns the standard case table.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
948 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950 @defun current-case-table
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951 This function returns the current buffer's case table.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954 @defun set-case-table table
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955 This sets the current buffer's case table to @var{table}.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958 The following three functions are convenient subroutines for packages
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25454
diff changeset
959 that define non-@sc{ascii} character sets. They modify the specified
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
960 case table @var{case-table}; they also modify the standard syntax table.
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
961 @xref{Syntax Tables}. Normally you would use these functions to change
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
962 the standard case table.
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
964 @defun set-case-syntax-pair uc lc case-table
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
965 This function specifies a pair of corresponding letters, one upper case
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
966 and one lower case.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
967 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
968
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
969 @defun set-case-syntax-delims l r case-table
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
970 This function makes characters @var{l} and @var{r} a matching pair of
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
971 case-invariant delimiters.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 13228
diff changeset
974 @defun set-case-syntax char syntax case-table
6550
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975 This function makes @var{char} case-invariant, with syntax
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976 @var{syntax}.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
977 @end defun
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979 @deffn Command describe-buffer-case-table
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 This command displays a description of the contents of the current
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 buffer's case table.
e3f5cba23198 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 @end deffn