annotate man/lispref/strings.texi @ 5044:e84a30b0e4a2

remove duplicative code in change_frame_size() -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-02-15 Ben Wing <ben@xemacs.org> * frame.c (change_frame_size_1): Simplify the logic in this function. (1) Don't allow 0 as the value of height or width. The old code that tried to allow this was totally broken, anyway, so obviously this never happens any more. (2) Don't duplicate the code in frame_conversion_internal() that converts displayable pixel size to total pixel size -- just call that function.
author Ben Wing <ben@xemacs.org>
date Mon, 15 Feb 2010 22:58:10 -0600
parents 6772ce4d982b
children 99f8ebc082d9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 @c -*-texinfo-*-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 @c This is part of the XEmacs Lisp Reference Manual.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 @c See the file lispref.texi for copying conditions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 @setfilename ../../info/strings.info
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 @node Strings and Characters, Lists, Numbers, Top
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 @chapter Strings and Characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 @cindex strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 @cindex character arrays
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 @cindex characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 @cindex bytes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 A string in XEmacs Lisp is an array that contains an ordered sequence
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 of characters. Strings are used as names of symbols, buffers, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 files, to send messages to users, to hold text being copied between
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 buffers, and for many other purposes. Because strings are so important,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 XEmacs Lisp has many functions expressly for manipulating them. XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 Lisp programs use strings more often than individual characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 @menu
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
21 * String Basics:: Basic properties of strings and characters.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 * Predicates for Strings:: Testing whether an object is a string or char.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 * Creating Strings:: Functions to allocate new strings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 * Predicates for Characters:: Testing whether an object is a character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 * Character Codes:: Each character has an equivalent integer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 * Text Comparison:: Comparing characters or strings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 * String Conversion:: Converting characters or strings and vice versa.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 * Modifying Strings:: Changing characters in a string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 * String Properties:: Additional information attached to strings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 * Formatting Strings:: @code{format}: XEmacs's analog of @code{printf}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 * Character Case:: Case conversion functions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 * Case Tables:: Customizing case conversion.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 * Char Tables:: Mapping from characters to Lisp objects.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 @node String Basics
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 @section String and Character Basics
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 Strings in XEmacs Lisp are arrays that contain an ordered sequence of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 characters. Characters are their own primitive object type in XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 20. However, in XEmacs 19, characters are represented in XEmacs Lisp as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 integers; whether an integer was intended as a character or not is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 determined only by how it is used. @xref{Character Type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 The length of a string (like any array) is fixed and independent of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 the string contents, and cannot be altered. Strings in Lisp are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 @emph{not} terminated by a distinguished character code. (By contrast,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 strings in C are terminated by a character with @sc{ascii} code 0.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 This means that any character, including the null character (@sc{ascii}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 code 0), is a valid element of a string.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 Since strings are considered arrays, you can operate on them with the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 general array functions. (@xref{Sequences Arrays Vectors}.) For
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 example, you can access or change individual characters in a string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 using the functions @code{aref} and @code{aset} (@pxref{Array
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 Functions}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 Strings use an efficient representation for storing the characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 in them, and thus take up much less memory than a vector of the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 length.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 Sometimes you will see strings used to hold key sequences. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 exists for backward compatibility with Emacs 18, but should @emph{not}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 be used in new code, since many key chords can't be represented at
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 all and others (in particular meta key chords) are confused with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 accented characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 @ignore @c Not accurate any more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 Each character in a string is stored in a single byte. Therefore,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 numbers not in the range 0 to 255 are truncated when stored into a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 string. This means that a string takes up much less memory than a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 vector of the same length.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 Sometimes key sequences are represented as strings. When a string is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 a key sequence, string elements in the range 128 to 255 represent meta
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 characters (which are extremely large integers) rather than keyboard
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 events in the range 128 to 255.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 Strings cannot hold characters that have the hyper, super or alt
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 modifiers; they can hold @sc{ASCII} control characters, but no other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 control characters. They do not distinguish case in @sc{ASCII} control
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 characters. @xref{Character Type}, for more information about
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 representation of meta and other modifiers for keyboard input
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 @end ignore
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 Strings are useful for holding regular expressions. You can also
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 match regular expressions against strings (@pxref{Regexp Search}). The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 functions @code{match-string} (@pxref{Simple Match Data}) and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 @code{replace-match} (@pxref{Replacing Match}) are useful for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 decomposing and modifying strings based on regular expression matching.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 Like a buffer, a string can contain extents in it. These extents are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 created when a function such as @code{buffer-substring} is called on a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 region with duplicable extents in it. When the string is inserted into
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 a buffer, the extents are inserted along with it. @xref{Duplicable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 Extents}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 @xref{Text}, for information about functions that display strings or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 copy them into buffers. @xref{Character Type}, and @ref{String Type},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 for information about the syntax of characters and strings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 @node Predicates for Strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 @section The Predicates for Strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 For more information about general sequence and array predicates,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 see @ref{Sequences Arrays Vectors}, and @ref{Arrays}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 @defun stringp object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 This function returns @code{t} if @var{object} is a string, @code{nil}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 otherwise.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 @defun char-or-string-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 This function returns @code{t} if @var{object} is a string or a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 character, @code{nil} otherwise.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 In XEmacs addition, this function also returns @code{t} if @var{object}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 is an integer that can be represented as a character. This is because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 of compatibility with previous XEmacs and should not be depended on.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 @node Creating Strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 @section Creating Strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 The following functions create strings, either from scratch, or by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 putting strings together, or by taking them apart.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 @defun string &rest characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 This function returns a new string made up of @var{characters}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 (string ?X ?E ?m ?a ?c ?s)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 @result{} "XEmacs"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 (string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 @result{} ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 Analogous functions operating on other data types include @code{list},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 @code{cons} (@pxref{Building Lists}), @code{vector} (@pxref{Vectors})
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
141 and @code{bit-vector} (@pxref{Bit Vectors}). This function has not been
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 available in XEmacs prior to 21.0 and FSF Emacs prior to 20.3.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
145 @defun make-string length character
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
146 This function returns a new string consisting entirely of @var{length}
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
147 successive copies of @var{character}. @var{length} must be a
4885
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4329
diff changeset
148 non-negative fixnum.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 (make-string 5 ?x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 @result{} "xxxxx"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 (make-string 0 ?x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 @result{} ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 Other functions to compare with this one include @code{char-to-string}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 (@pxref{String Conversion}), @code{make-vector} (@pxref{Vectors}), and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 @code{make-list} (@pxref{Building Lists}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 @defun substring string start &optional end
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 This function returns a new string which consists of those characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 from @var{string} in the range from (and including) the character at the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 index @var{start} up to (but excluding) the character at the index
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 @var{end}. The first character is at index zero.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 (substring "abcdefg" 0 3)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 @result{} "abc"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 Here the index for @samp{a} is 0, the index for @samp{b} is 1, and the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 index for @samp{c} is 2. Thus, three letters, @samp{abc}, are copied
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 from the string @code{"abcdefg"}. The index 3 marks the character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 position up to which the substring is copied. The character whose index
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 is 3 is actually the fourth character in the string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 A negative number counts from the end of the string, so that @minus{}1
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
183 signifies the index of the last character of the string. For example:
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 (substring "abcdefg" -3 -1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 @result{} "ef"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 In this example, the index for @samp{e} is @minus{}3, the index for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 @samp{f} is @minus{}2, and the index for @samp{g} is @minus{}1.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 Therefore, @samp{e} and @samp{f} are included, and @samp{g} is excluded.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 When @code{nil} is used as an index, it stands for the length of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 string. Thus,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 (substring "abcdefg" -3 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 @result{} "efg"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 Omitting the argument @var{end} is equivalent to specifying @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 It follows that @code{(substring @var{string} 0)} returns a copy of all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 of @var{string}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 (substring "abcdefg" 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 @result{} "abcdefg"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 But we recommend @code{copy-sequence} for this purpose (@pxref{Sequence
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 Functions}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 If the characters copied from @var{string} have duplicable extents or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 text properties, those are copied into the new string also.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 @xref{Duplicable Extents}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 A @code{wrong-type-argument} error is signaled if either @var{start} or
4885
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4329
diff changeset
227 @var{end} is not a fixnum or @code{nil}. An @code{args-out-of-range}
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 error is signaled if @var{start} indicates a character following
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 @var{end}, or if either integer is out of range for @var{string}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 Contrast this function with @code{buffer-substring} (@pxref{Buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 Contents}), which returns a string containing a portion of the text in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 the current buffer. The beginning of a string is at index 0, but the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 beginning of a buffer is at index 1.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 @defun concat &rest sequences
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 @cindex copying strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 @cindex concatenating strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 This function returns a new string consisting of the characters in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 arguments passed to it (along with their text properties, if any). The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 arguments may be strings, lists of numbers, or vectors of numbers; they
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 are not themselves changed. If @code{concat} receives no arguments, it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 returns an empty string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 (concat "abc" "-def")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 @result{} "abc-def"
4885
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4329
diff changeset
249 (equal (concat "abc" (list 120 (+ 256 121)) [122]) (format "abcx%cz" 377))
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4329
diff changeset
250 @result{} t
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 ;; @r{@code{nil} is an empty sequence.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 (concat "abc" nil "-def")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 @result{} "abc-def"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 (concat "The " "quick brown " "fox.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 @result{} "The quick brown fox."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 (concat)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 @result{} ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 The @code{concat} function always constructs a new string that is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 not @code{eq} to any existing string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 For information about other concatenation functions, see the description
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 of @code{mapconcat} in @ref{Mapping Functions}, @code{vconcat} in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 @ref{Vectors}, @code{bvconcat} in @ref{Bit Vectors}, and @code{append}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 in @ref{Building Lists}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269
1495
c3cf7db99b98 [xemacs-hg @ 2003-05-22 07:41:20 by stephent]
stephent
parents: 444
diff changeset
270 The function @code{split-string}, in @ref{Regexp Search}, generates a
c3cf7db99b98 [xemacs-hg @ 2003-05-22 07:41:20 by stephent]
stephent
parents: 444
diff changeset
271 list of strings by splitting a string on occurances of a regular
c3cf7db99b98 [xemacs-hg @ 2003-05-22 07:41:20 by stephent]
stephent
parents: 444
diff changeset
272 expression.
c3cf7db99b98 [xemacs-hg @ 2003-05-22 07:41:20 by stephent]
stephent
parents: 444
diff changeset
273
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 @node Predicates for Characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 @section The Predicates for Characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 @defun characterp object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 This function returns @code{t} if @var{object} is a character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 Some functions that work on integers (e.g. the comparison functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 <, <=, =, /=, etc. and the arithmetic functions +, -, *, etc.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 accept characters and implicitly convert them into integers. In
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 general, functions that work on characters also accept char-ints and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 implicitly convert them into characters. WARNING: Neither of these
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 behaviors is very desirable, and they are maintained for backward
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 compatibility with old E-Lisp programs that confounded characters and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 integers willy-nilly. These behaviors may change in the future; therefore,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 do not rely on them. Instead, convert the characters explicitly
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 using @code{char-int}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 @defun integer-or-char-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 This function returns @code{t} if @var{object} is an integer or character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 @node Character Codes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 @section Character Codes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
299 @defun char-int character
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 This function converts a character into an equivalent integer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 The resulting integer will always be non-negative. The integers in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 the range 0 - 255 map to characters as follows:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 @table @asis
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 @item 0 - 31
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 Control set 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 @item 32 - 127
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 @sc{ascii}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 @item 128 - 159
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 Control set 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 @item 160 - 255
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 Right half of ISO-8859-1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 If support for @sc{mule} does not exist, these are the only valid
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 character values. When @sc{mule} support exists, the values assigned to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 other characters may vary depending on the particular version of XEmacs,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 the order in which character sets were loaded, etc., and you should not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 depend on them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 @defun int-char integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 This function converts an integer into the equivalent character. Not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 all integers correspond to valid characters; use @code{char-int-p} to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 determine whether this is the case. If the integer cannot be converted,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 @code{nil} is returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 @defun char-int-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 This function returns @code{t} if @var{object} is an integer that can be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 converted into a character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 @defun char-or-char-int-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 This function returns @code{t} if @var{object} is a character or an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 integer that can be converted into one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 @need 2000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 @node Text Comparison
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 @section Comparison of Characters and Strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 @cindex string equality
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
344 @defun char-equal character1 character2 &optional buffer
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 This function returns @code{t} if the arguments represent the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 character, @code{nil} otherwise. This function ignores differences
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
347 in case if the value of @code{case-fold-search} is non-@code{nil} in
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
348 @var{buffer}, which defaults to the current buffer.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 (char-equal ?x ?x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 (let ((case-fold-search t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 (char-equal ?x ?X))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 (let ((case-fold-search nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 (char-equal ?x ?X))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 @defun char= character1 character2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 This function returns @code{t} if the arguments represent the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 character, @code{nil} otherwise. Case is significant.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 (char= ?x ?x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 (char= ?x ?X)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 (let ((case-fold-search t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 (char-equal ?x ?X))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 (let ((case-fold-search nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 (char-equal ?x ?X))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 @defun string= string1 string2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 This function returns @code{t} if the characters of the two strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 match exactly; case is significant.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 (string= "abc" "abc")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 (string= "abc" "ABC")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 (string= "ab" "ABC")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 @ignore @c `equal' in XEmacs does not compare text properties
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 The function @code{string=} ignores the text properties of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 two strings. To compare strings in a way that compares their text
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 properties also, use @code{equal} (@pxref{Equality Predicates}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 @end ignore
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 @defun string-equal string1 string2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 @code{string-equal} is another name for @code{string=}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 @cindex lexical comparison
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 @defun string< string1 string2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 @c (findex string< causes problems for permuted index!!)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 This function compares two strings a character at a time. First it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 scans both the strings at once to find the first pair of corresponding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 characters that do not match. If the lesser character of those two is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 the character from @var{string1}, then @var{string1} is less, and this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 function returns @code{t}. If the lesser character is the one from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 @var{string2}, then @var{string1} is greater, and this function returns
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 @code{nil}. If the two strings match entirely, the value is @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 Pairs of characters are compared by their @sc{ascii} codes. Keep in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 mind that lower case letters have higher numeric values in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 @sc{ascii} character set than their upper case counterparts; numbers and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 many punctuation characters have a lower numeric value than upper case
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 letters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 (string< "abc" "abd")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 (string< "abd" "abc")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 (string< "123" "abc")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 When the strings have different lengths, and they match up to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 length of @var{string1}, then the result is @code{t}. If they match up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 to the length of @var{string2}, the result is @code{nil}. A string of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 no characters is less than any other string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 (string< "" "abc")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 (string< "ab" "abc")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 (string< "abc" "")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 (string< "abc" "ab")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 (string< "" "")
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
448 @result{} nil
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 @defun string-lessp string1 string2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 @code{string-lessp} is another name for @code{string<}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 See also @code{compare-buffer-substrings} in @ref{Comparing Text}, for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 a way to compare text in buffers. The function @code{string-match},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 which matches a regular expression against a string, can be used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 for a kind of string comparison; see @ref{Regexp Search}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 @node String Conversion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 @section Conversion of Characters and Strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 @cindex conversion of strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 This section describes functions for conversions between characters,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 strings and integers. @code{format} and @code{prin1-to-string}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 (@pxref{Output Functions}) can also convert Lisp objects into strings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 @code{read-from-string} (@pxref{Input Functions}) can ``convert'' a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 string representation of a Lisp object into an object.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 @xref{Documentation}, for functions that produce textual descriptions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 of text characters and general input events
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 (@code{single-key-description} and @code{text-char-description}). These
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 functions are used primarily for making help messages.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 @defun char-to-string character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 @cindex character to string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 This function returns a new string with a length of one character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 The value of @var{character}, modulo 256, is used to initialize the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 element of the string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 This function is similar to @code{make-string} with an integer argument
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 of 1. (@xref{Creating Strings}.) This conversion can also be done with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 @code{format} using the @samp{%c} format specification.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 (@xref{Formatting Strings}.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 (char-to-string ?x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 @result{} "x"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 (char-to-string (+ 256 ?x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 @result{} "x"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 (make-string 1 ?x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 @result{} "x"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 @defun string-to-char string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 @cindex string to character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 This function returns the first character in @var{string}. If the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 string is empty, the function returns 0. (Under XEmacs 19, the value is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 also 0 when the first character of @var{string} is the null character,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 @sc{ascii} code 0.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 (string-to-char "ABC")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 @result{} ?A ;; @r{Under XEmacs 20.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 @result{} 65 ;; @r{Under XEmacs 19.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 (string-to-char "xyz")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 @result{} ?x ;; @r{Under XEmacs 20.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 @result{} 120 ;; @r{Under XEmacs 19.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 (string-to-char "")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 @result{} 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 (string-to-char "\000")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 @result{} ?\^@ ;; @r{Under XEmacs 20.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 @result{} 0 ;; @r{Under XEmacs 20.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 This function may be eliminated in the future if it does not seem useful
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 enough to retain.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 @defun number-to-string number
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 @cindex integer to string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 @cindex integer to decimal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 This function returns a string consisting of the printed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 representation of @var{number}, which may be an integer or a floating
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 point number. The value starts with a sign if the argument is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 negative.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 (number-to-string 256)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 @result{} "256"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 (number-to-string -23)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 @result{} "-23"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 (number-to-string -23.5)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 @result{} "-23.5"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 @cindex int-to-string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 @code{int-to-string} is a semi-obsolete alias for this function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 See also the function @code{format} in @ref{Formatting Strings}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 @defun string-to-number string &optional base
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 @cindex string to number
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
548 This function returns the numeric value represented by @var{string},
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
549 read in @var{base}. It skips spaces and tabs at the beginning of
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
550 @var{string}, then reads as much of @var{string} as it can interpret as
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
551 a number. (On some systems it ignores other whitespace at the
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
552 beginning, not just spaces and tabs.) If the first character after the
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
553 ignored whitespace is not a digit or a minus sign, this function returns
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
554 0.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 If @var{base} is not specified, it defaults to ten. With @var{base}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 other than ten, only integers can be read.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 (string-to-number "256")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 @result{} 256
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 (string-to-number "25 is a perfect square.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 @result{} 25
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 (string-to-number "X256")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 @result{} 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566 (string-to-number "-4.5")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 @result{} -4.5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 (string-to-number "ffff" 16)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 @result{} 65535
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 @findex string-to-int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573 @code{string-to-int} is an obsolete alias for this function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576 @node Modifying Strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 @section Modifying Strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 @cindex strings, modifying
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 You can modify a string using the general array-modifying primitives.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 @xref{Arrays}. The function @code{aset} modifies a single character;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 the function @code{fillarray} sets all characters in the string to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 a specified character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 Each string has a tick counter that starts out at zero (when the string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 is created) and is incremented each time a change is made to that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 @defun string-modified-tick string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 This function returns the tick counter for @samp{string}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 @node String Properties
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 @section String Properties
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 @cindex string properties
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 @cindex properties of strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
598 Just as with symbols, extents, faces, and glyphs, you can attach
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 additional information to strings in the form of @dfn{string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 properties}. These differ from text properties, which are logically
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 attached to particular characters in the string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603 To attach a property to a string, use @code{put}. To retrieve a property
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 from a string, use @code{get}. You can also use @code{remprop} to remove
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
605 a property from a string and @code{object-plist} to retrieve a list of
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 all the properties in a string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 @node Formatting Strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 @section Formatting Strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 @cindex formatting strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 @cindex strings, formatting them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613 @dfn{Formatting} means constructing a string by substitution of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614 computed values at various places in a constant string. This string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 controls how the other values are printed as well as where they appear;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616 it is called a @dfn{format string}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618 Formatting is often useful for computing messages to be displayed. In
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619 fact, the functions @code{message} and @code{error} provide the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620 formatting feature described here; they differ from @code{format} only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621 in how they use the result of formatting.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 @defun format string &rest objects
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624 This function returns a new string that is made by copying
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
625 @var{string} and then replacing any format specification
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626 in the copy with encodings of the corresponding @var{objects}. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
627 arguments @var{objects} are the computed values to be formatted.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 @cindex @samp{%} in format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 @cindex format specification
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 A format specification is a sequence of characters beginning with a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 @samp{%}. Thus, if there is a @samp{%d} in @var{string}, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 @code{format} function replaces it with the printed representation of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 one of the values to be formatted (one of the arguments @var{objects}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 For example:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 (format "The value of fill-column is %d." fill-column)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 @result{} "The value of fill-column is 72."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 If @var{string} contains more than one format specification, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 format specifications correspond with successive values from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 @var{objects}. Thus, the first format specification in @var{string}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 uses the first such value, the second format specification uses the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 second such value, and so on. Any extra format specifications (those
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 for which there are no corresponding values) cause unpredictable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 behavior. Any extra values to be formatted are ignored.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 Certain format specifications require values of particular types.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 However, no error is signaled if the value actually supplied fails to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 have the expected type. Instead, the output is likely to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 meaningless.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 Here is a table of valid format specifications:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 @table @samp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 @item %s
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 Replace the specification with the printed representation of the object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 made without quoting. Thus, strings are represented by their contents
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 alone, with no @samp{"} characters, and symbols appear without @samp{\}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 characters. This is equivalent to printing the object with @code{princ}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 If there is no corresponding object, the empty string is used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 @item %S
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 Replace the specification with the printed representation of the object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 made with quoting. Thus, strings are enclosed in @samp{"} characters,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 and @samp{\} characters appear where necessary before special characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673 This is equivalent to printing the object with @code{prin1}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 If there is no corresponding object, the empty string is used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 @item %o
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678 @cindex integer to octal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679 Replace the specification with the base-eight representation of an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 integer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 @item %d
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 @itemx %i
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 Replace the specification with the base-ten representation of an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 integer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687 @item %x
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688 @cindex integer to hexadecimal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689 Replace the specification with the base-sixteen representation of an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690 integer, using lowercase letters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 @item %X
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693 @cindex integer to hexadecimal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 Replace the specification with the base-sixteen representation of an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695 integer, using uppercase letters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696
4329
d9eb5ea14f65 Provide %b in #'format; use it for converting between ints and bit vectors.
Aidan Kehoe <kehoea@parhasard.net>
parents: 1495
diff changeset
697 @item %b
d9eb5ea14f65 Provide %b in #'format; use it for converting between ints and bit vectors.
Aidan Kehoe <kehoea@parhasard.net>
parents: 1495
diff changeset
698 @cindex integer to binary
d9eb5ea14f65 Provide %b in #'format; use it for converting between ints and bit vectors.
Aidan Kehoe <kehoea@parhasard.net>
parents: 1495
diff changeset
699 Replace the specification with the base-two representation of an
d9eb5ea14f65 Provide %b in #'format; use it for converting between ints and bit vectors.
Aidan Kehoe <kehoea@parhasard.net>
parents: 1495
diff changeset
700 integer.
d9eb5ea14f65 Provide %b in #'format; use it for converting between ints and bit vectors.
Aidan Kehoe <kehoea@parhasard.net>
parents: 1495
diff changeset
701
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 @item %c
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 Replace the specification with the character which is the value given.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705 @item %e
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706 Replace the specification with the exponential notation for a floating
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 point number (e.g. @samp{7.85200e+03}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709 @item %f
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710 Replace the specification with the decimal-point notation for a floating
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711 point number.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
712
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
713 @item %g
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
714 Replace the specification with notation for a floating point number,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
715 using a ``pretty format''. Either exponential notation or decimal-point
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
716 notation will be used (usually whichever is shorter), and trailing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717 zeroes are removed from the fractional part.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
719 @item %%
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720 A single @samp{%} is placed in the string. This format specification is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721 unusual in that it does not use a value. For example, @code{(format "%%
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
722 %d" 30)} returns @code{"% 30"}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
724
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
725 Any other format character results in an @samp{Invalid format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
726 operation} error.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
727
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
728 Here are several examples:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
729
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
730 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
731 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
732 (format "The name of this buffer is %s." (buffer-name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
733 @result{} "The name of this buffer is strings.texi."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
734
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
735 (format "The buffer object prints as %s." (current-buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
736 @result{} "The buffer object prints as #<buffer strings.texi>."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
737
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
738 (format "The octal value of %d is %o,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
739 and the hex value is %x." 18 18 18)
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
740 @result{} "The octal value of 18 is 22,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
741 and the hex value is 12."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
742 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
743 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
744
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745 There are many additional flags and specifications that can occur
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
746 between the @samp{%} and the format character, in the following order:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
747
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
748 @enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750 An optional repositioning specification, which is a positive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751 integer followed by a @samp{$}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
752
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
753 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
754 Zero or more of the optional flag characters @samp{-}, @samp{+},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
755 @samp{ }, @samp{0}, and @samp{#}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
756
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
758 An asterisk (@samp{*}, meaning that the field width is now assumed to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
759 have been specified as an argument.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
760
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
761 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
762 An optional minimum field width.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
763
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
764 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
765 An optional precision, preceded by a @samp{.} character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
766 @end enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
767
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
768 @cindex repositioning format arguments
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769 @cindex multilingual string formatting
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
770 A @dfn{repositioning} specification changes which argument to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 @code{format} is used by the current and all following format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772 specifications. Normally the first specification uses the first
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773 argument, the second specification uses the second argument, etc. Using
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774 a repositioning specification, you can change this. By placing a number
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
775 @var{n} followed by a @samp{$} between the @samp{%} and the format
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
776 character, you cause the specification to use the @var{n}th argument.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
777 The next specification will use the @var{n}+1'th argument, etc.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
779 For example:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
780
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
781 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
782 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783 (format "Can't find file `%s' in directory `%s'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 "ignatius.c" "loyola/")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785 @result{} "Can't find file `ignatius.c' in directory `loyola/'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
787 (format "In directory `%2$s', the file `%1$s' was not found."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
788 "ignatius.c" "loyola/")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
789 @result{} "In directory `loyola/', the file `ignatius.c' was not found."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
790
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
791 (format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
792 "The numbers %d and %d are %1$x and %x in hex and %1$o and %o in octal."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
793 37 12)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
794 @result{} "The numbers 37 and 12 are 25 and c in hex and 45 and 14 in octal."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
795 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
796 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
797
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 As you can see, this lets you reprocess arguments more than once or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
799 reword a format specification (thereby moving the arguments around)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
800 without having to actually reorder the arguments. This is especially
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
801 useful in translating messages from one language to another: Different
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
802 languages use different word orders, and this sometimes entails changing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
803 the order of the arguments. By using repositioning specifications,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
804 this can be accomplished without having to embed knowledge of particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
805 languages into the location in the program's code where the message is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
806 displayed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
807
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
808 @cindex numeric prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
809 @cindex field width
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810 @cindex padding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
811 All the specification characters allow an optional numeric prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812 between the @samp{%} and the character, and following any repositioning
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813 specification or flag. The optional numeric prefix defines the minimum
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
814 width for the object. If the printed representation of the object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815 contains fewer characters than this, then it is padded. The padding is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
816 normally on the left, but will be on the right if the @samp{-} flag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817 character is given. The padding character is normally a space, but if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
818 the @samp{0} flag character is given, zeros are used for padding.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
819
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821 (format "%06d is padded on the left with zeros" 123)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 @result{} "000123 is padded on the left with zeros"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
823
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
824 (format "%-6d is padded on the right" 123)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825 @result{} "123 is padded on the right"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
828 @code{format} never truncates an object's printed representation, no
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
829 matter what width you specify. Thus, you can use a numeric prefix to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
830 specify a minimum spacing between columns with no risk of losing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831 information.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
832
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
833 In the following three examples, @samp{%7s} specifies a minimum width
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834 of 7. In the first case, the string inserted in place of @samp{%7s} has
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835 only 3 letters, so 4 blank spaces are inserted for padding. In the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
836 second case, the string @code{"specification"} is 13 letters wide but is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
837 not truncated. In the third case, the padding is on the right.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
838
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
839 @smallexample
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841 (format "The word `%7s' actually has %d letters in it."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842 "foo" (length "foo"))
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
843 @result{} "The word ` foo' actually has 3 letters in it."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
844 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
845
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
846 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847 (format "The word `%7s' actually has %d letters in it."
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
848 "specification" (length "specification"))
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
849 @result{} "The word `specification' actually has 13 letters in it."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
850 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
851
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
852 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
853 (format "The word `%-7s' actually has %d letters in it."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
854 "foo" (length "foo"))
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
855 @result{} "The word `foo ' actually has 3 letters in it."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
856 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
857 @end smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
858
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
859 @cindex format precision
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
860 @cindex precision of formatted numbers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
861 After any minimum field width, a precision may be specified by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
862 preceding it with a @samp{.} character. The precision specifies the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
863 minimum number of digits to appear in @samp{%d}, @samp{%i}, @samp{%o},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
864 @samp{%x}, and @samp{%X} conversions (the number is padded on the left
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
865 with zeroes as necessary); the number of digits printed after the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
866 decimal point for @samp{%f}, @samp{%e}, and @samp{%E} conversions; the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
867 number of significant digits printed in @samp{%g} and @samp{%G}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
868 conversions; and the maximum number of non-padding characters printed in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
869 @samp{%s} and @samp{%S} conversions. The default precision for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
870 floating-point conversions is six.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
871
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
872 The other flag characters have the following meanings:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
873
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
874 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
875 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
876 The @samp{ } flag means prefix non-negative numbers with a space.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
877
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
878 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
879 The @samp{+} flag means prefix non-negative numbers with a plus sign.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
880
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
881 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
882 The @samp{#} flag means print numbers in an alternate, more verbose
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
883 format: octal numbers begin with zero; hex numbers begin with a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
884 @samp{0x} or @samp{0X}; a decimal point is printed in @samp{%f},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885 @samp{%e}, and @samp{%E} conversions even if no numbers are printed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
886 after it; and trailing zeroes are not omitted in @samp{%g} and @samp{%G}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
887 conversions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
888 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
889
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
890 @node Character Case
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
891 @section Character Case
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
892 @cindex upper case
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
893 @cindex lower case
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
894 @cindex character case
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
895
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
896 The character case functions change the case of single characters or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
897 of the contents of strings. The functions convert only alphabetic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
898 characters (the letters @samp{A} through @samp{Z} and @samp{a} through
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
899 @samp{z}); other characters are not altered. The functions do not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
900 modify the strings that are passed to them as arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
901
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
902 The examples below use the characters @samp{X} and @samp{x} which have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
903 @sc{ascii} codes 88 and 120 respectively.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
904
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
905 @defun downcase string-or-char &optional buffer
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906 This function converts a character or a string to lower case.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
907
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
908 When the argument to @code{downcase} is a string, the function creates
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
909 and returns a new string in which each letter in the argument that is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
910 upper case is converted to lower case. When the argument to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
911 @code{downcase} is a character, @code{downcase} returns the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
912 corresponding lower case character. (This value is actually an integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
913 under XEmacs 19.) If the original character is lower case, or is not a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
914 letter, then the value equals the original character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
915
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
916 Optional second arg @var{buffer} specifies which buffer's case tables to
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
917 use, and defaults to the current buffer.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
918
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
919 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
920 (downcase "The cat in the hat")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
921 @result{} "the cat in the hat"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
922
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
923 (downcase ?X)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924 @result{} ?x ;; @r{Under XEmacs 20.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
925 @result{} 120 ;; @r{Under XEmacs 19.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
926
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
927 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
928 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
929
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
930 @defun upcase string-or-char &optional buffer
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
931 This function converts a character or a string to upper case.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
932
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
933 When the argument to @code{upcase} is a string, the function creates
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
934 and returns a new string in which each letter in the argument that is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
935 lower case is converted to upper case.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
936
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
937 When the argument to @code{upcase} is a character, @code{upcase} returns
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
938 the corresponding upper case character. (This value is actually an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
939 integer under XEmacs 19.) If the original character is upper case, or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
940 is not a letter, then the value equals the original character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
941
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
942 Optional second arg @var{buffer} specifies which buffer's case tables to
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
943 use, and defaults to the current buffer.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
944
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
945 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
946 (upcase "The cat in the hat")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
947 @result{} "THE CAT IN THE HAT"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
948
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
949 (upcase ?x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
950 @result{} ?X ;; @r{Under XEmacs 20.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
951 @result{} 88 ;; @r{Under XEmacs 19.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
952 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
953 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
954
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
955 @defun capitalize string-or-char &optional buffer
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
956 @cindex capitalization
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957 This function capitalizes strings or characters. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
958 @var{string-or-char} is a string, the function creates and returns a new
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
959 string, whose contents are a copy of @var{string-or-char} in which each
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
960 word has been capitalized. This means that the first character of each
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
961 word is converted to upper case, and the rest are converted to lower
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
962 case.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
963
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
964 The definition of a word is any sequence of consecutive characters that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
965 are assigned to the word constituent syntax class in the current syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
966 table (@pxref{Syntax Class Table}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
967
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
968 When the argument to @code{capitalize} is a character, @code{capitalize}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
969 has the same result as @code{upcase}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
970
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
971 Optional second arg @var{buffer} specifies which buffer's case tables to
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
972 use, and defaults to the current buffer.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
973
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
974 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
975 (capitalize "The cat in the hat")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
976 @result{} "The Cat In The Hat"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
977
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
978 (capitalize "THE 77TH-HATTED CAT")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
979 @result{} "The 77th-Hatted Cat"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
980
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
981 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
982 (capitalize ?x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
983 @result{} ?X ;; @r{Under XEmacs 20.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
984 @result{} 88 ;; @r{Under XEmacs 19.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
985 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
986 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
987 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
988
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
989 @node Case Tables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
990 @section The Case Table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
991
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
992 You can customize case conversion by installing a special @dfn{case
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
993 table}. A case table specifies the mapping between upper case and lower
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
994 case letters. It affects both the string and character case conversion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
995 functions (see the previous section) and those that apply to text in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
996 buffer (@pxref{Case Changes}). You need a case table if you are using a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
997 language which has letters other than the standard @sc{ascii} letters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
998
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
999 A case table is a list of this form:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1001 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1002 (@var{downcase} @var{upcase} @var{canonicalize} @var{equivalences})
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1003 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1004
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1005 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1006 where each element is either @code{nil} or a string of length 256. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1007 element @var{downcase} says how to map each character to its lower-case
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1008 equivalent. The element @var{upcase} maps each character to its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1009 upper-case equivalent. If lower and upper case characters are in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1010 one-to-one correspondence, use @code{nil} for @var{upcase}; then XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1011 deduces the upcase table from @var{downcase}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1012
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1013 For some languages, upper and lower case letters are not in one-to-one
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1014 correspondence. There may be two different lower case letters with the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1015 same upper case equivalent. In these cases, you need to specify the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1016 maps for both directions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1017
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1018 The element @var{canonicalize} maps each character to a canonical
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1019 equivalent; any two characters that are related by case-conversion have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1020 the same canonical equivalent character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1021
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1022 The element @var{equivalences} is a map that cyclicly permutes each
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1023 equivalence class (of characters with the same canonical equivalent).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1024 (For ordinary @sc{ascii}, this would map @samp{a} into @samp{A} and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1025 @samp{A} into @samp{a}, and likewise for each set of equivalent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1026 characters.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1027
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1028 When you construct a case table, you can provide @code{nil} for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1029 @var{canonicalize}; then Emacs fills in this string from @var{upcase}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1030 and @var{downcase}. You can also provide @code{nil} for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1031 @var{equivalences}; then Emacs fills in this string from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1032 @var{canonicalize}. In a case table that is actually in use, those
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1033 components are non-@code{nil}. Do not try to specify @var{equivalences}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034 without also specifying @var{canonicalize}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1035
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1036 Each buffer has a case table. XEmacs also has a @dfn{standard case
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1037 table} which is copied into each buffer when you create the buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1038 Changing the standard case table doesn't affect any existing buffers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040 Here are the functions for working with case tables:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1041
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1042 @defun case-table-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1043 This predicate returns non-@code{nil} if @var{object} is a valid case
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1044 table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1045 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1046
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1047 @defun set-standard-case-table case-table
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1048 This function makes @var{case-table} the standard case table, so that it
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1049 will apply to any buffers created subsequently.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1050 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1051
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1052 @defun standard-case-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1053 This returns the standard case table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1054 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1055
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1056 @defun current-case-table &optional buffer
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1057 This function returns the case table of @var{buffer}, which defaults to
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1058 the current buffer.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1060
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1061 @defun set-case-table case-table
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1062 This sets the current buffer's case table to @var{case-table}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1063 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1065 The following three functions are convenient subroutines for packages
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1066 that define non-@sc{ascii} character sets. They modify a string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1067 @var{downcase-table} provided as an argument; this should be a string to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1068 be used as the @var{downcase} part of a case table. They also modify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069 the standard syntax table. @xref{Syntax Tables}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1070
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1071 @defun set-case-syntax-pair uc lc downcase-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1072 This function specifies a pair of corresponding letters, one upper case
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1073 and one lower case.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1074 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1075
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1076 @defun set-case-syntax-delims l r downcase-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1077 This function makes characters @var{l} and @var{r} a matching pair of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1078 case-invariant delimiters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1079 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1080
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1081 @defun set-case-syntax char syntax downcase-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1082 This function makes @var{char} case-invariant, with syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1083 @var{syntax}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1084 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1085
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1086 @deffn Command describe-buffer-case-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087 This command displays a description of the contents of the current
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1088 buffer's case table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1089 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1090
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1091 @cindex ISO Latin 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1092 @pindex iso-syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093 You can load the library @file{iso-syntax} to set up the standard syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1094 table and define a case table for the 8-bit ISO Latin 1 character set.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1096 @node Char Tables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097 @section The Char Table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1098
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1099 A char table is a table that maps characters (or ranges of characters)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1100 to values. Char tables are specialized for characters, only allowing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1101 particular sorts of ranges to be assigned values. Although this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1102 loses in generality, it makes for extremely fast (constant-time)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1103 lookups, and thus is feasible for applications that do an extremely
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1104 large number of lookups (e.g. scanning a buffer for a character in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1105 a particular syntax, where a lookup in the syntax table must occur
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1106 once per character).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1107
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1108 Note that char tables as a primitive type, and all of the functions in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1109 this section, exist only in XEmacs 20. In XEmacs 19, char tables are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1110 generally implemented using a vector of 256 elements.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1111
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1112 When @sc{mule} support exists, the types of ranges that can be assigned
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1113 values are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1114
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1115 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1116 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1117 all characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1118 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1119 an entire charset
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1120 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1121 a single row in a two-octet charset
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1122 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1123 a single character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1124 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1125
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1126 When @sc{mule} support is not present, the types of ranges that can be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1127 assigned values are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1128
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1129 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1130 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1131 all characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1132 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1133 a single character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1134 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1135
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1136 @defun char-table-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1137 This function returns non-@code{nil} if @var{object} is a char table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1138 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1139
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1140 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1141 * Char Table Types:: Char tables have different uses.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1142 * Working With Char Tables:: Creating and working with char tables.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1143 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1144
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1145 @node Char Table Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1146 @subsection Char Table Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1147
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148 Each char table type is used for a different purpose and allows different
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149 sorts of values. The different char table types are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1150
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1151 @table @code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1152 @item category
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1153 Used for category tables, which specify the regexp categories
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1154 that a character is in. The valid values are @code{nil} or a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1155 bit vector of 95 elements. Higher-level Lisp functions are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1156 provided for working with category tables. Currently categories
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1157 and category tables only exist when @sc{mule} support is present.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1158 @item char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1159 A generalized char table, for mapping from one character to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1160 another. Used for case tables, syntax matching tables,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1161 @code{keyboard-translate-table}, etc. The valid values are characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1162 @item generic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1163 An even more generalized char table, for mapping from a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1164 character to anything.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1165 @item display
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1166 Used for display tables, which specify how a particular character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1167 is to appear when displayed. #### Not yet implemented.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1168 @item syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1169 Used for syntax tables, which specify the syntax of a particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1170 character. Higher-level Lisp functions are provided for
4885
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4329
diff changeset
1171 working with syntax tables. The valid values are fixnums.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1172 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1173
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1174 @defun char-table-type char-table
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1175 This function returns the type of char table @var{char-table}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1176 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1177
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1178 @defun char-table-type-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1179 This function returns a list of the recognized char table types.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1180 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1181
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1182 @defun valid-char-table-type-p type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1183 This function returns @code{t} if @var{type} if a recognized char table type.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1184 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1185
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1186 @node Working With Char Tables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1187 @subsection Working With Char Tables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1188
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1189 @defun make-char-table type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1190 This function makes a new, empty char table of type @var{type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1191 @var{type} should be a symbol, one of @code{char}, @code{category},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1192 @code{display}, @code{generic}, or @code{syntax}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1193 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1194
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1195 @defun put-char-table range value char-table
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1196 This function sets the value for chars in @var{range} to be @var{value} in
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1197 @var{char-table}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1198
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1199 @var{range} specifies one or more characters to be affected and should be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1200 one of the following:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1201
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1202 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1203 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1204 @code{t} (all characters are affected)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1205 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1206 A charset (only allowed when @sc{mule} support is present)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1207 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1208 A vector of two elements: a two-octet charset and a row number
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1209 (only allowed when @sc{mule} support is present)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1210 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1211 A single character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1212 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1213
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1214 @var{value} must be a value appropriate for the type of @var{char-table}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1215 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1216
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1217 @defun get-char-table character char-table
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1218 This function finds the value for @var{character} in @var{char-table}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1219 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1220
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1221 @defun get-range-char-table range char-table &optional multi
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1222 This function finds the value for a range in @var{char-table}. If there is
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1223 more than one value, @var{multi} is returned (defaults to @code{nil}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1224 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1225
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1226 @defun reset-char-table char-table
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1227 This function resets @var{char-table} to its default state.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1228 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1229
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1230 @defun map-char-table function char-table &optional range
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1231 This function maps @var{function} over entries in @var{char-table}, calling
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1232 it with two args, each key and value in the table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1233
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1234 @var{range} specifies a subrange to map over and is in the same format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1235 as the @var{range} argument to @code{put-range-table}. If omitted or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1236 @code{t}, it defaults to the entire table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1237 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1238
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1239 @defun valid-char-table-value-p value char-table-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1240 This function returns non-@code{nil} if @var{value} is a valid value for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1241 @var{char-table-type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1242 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1243
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1244 @defun check-valid-char-table-value value char-table-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1245 This function signals an error if @var{value} is not a valid value for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1246 @var{char-table-type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1247 @end defun