annotate man/lispref/strings.texi @ 2367:ecf1ebac70d8

[xemacs-hg @ 2004-11-04 23:05:23 by ben] commit mega-patch configure.in: Turn off -Winline and -Wchar-subscripts. Use the right set of cflags when compiling modules. Rewrite ldap configuration to separate the inclusion of lber (needed in recent Cygwin) from the basic checks for the needed libraries. add a function for MAKE_JUNK_C; initially code was added to generate xemacs.def using this, but it will need to be rewritten. add an rm -f for junk.c to avoid weird Cygwin bug with cp -f onto an existing file. Sort list of auto-detected functions and eliminate unused checks for stpcpy, setlocale and getwd. Add autodetection of Cygwin scanf problems BETA: Rewrite section on configure to indicate what flags are important and what not. digest-doc.c, make-dump-id.c, profile.c, sorted-doc.c: Add proper decls for main(). make-msgfile.c: Document that this is old junk. Move proposal to text.c. make-msgfile.lex: Move proposal to text.c. make-mswin-unicode.pl: Convert error-generating code so that the entire message will be seen as a single unrecognized token. mule/mule-ccl.el: Update docs. lispref/mule.texi: Update CCL docs. ldap/eldap.c: Mule-ize. Use EXTERNAL_LIST_LOOP_2 instead of deleted EXTERNAL_LIST_LOOP. * XEmacs 21.5.18 "chestnut" is released. --------------------------------------------------------------- MULE-RELATED WORK: --------------------------------------------------------------- --------------------------- byte-char conversion --------------------------- buffer.c, buffer.h, insdel.c, text.c: Port FSF algorithm for byte-char conversion, replacing broken previous version. Track the char position of the gap. Add functions to do char-byte conversion downwards as well as upwards. Move comments about algorithm workings to internals manual. --------------------------- work on types --------------------------- alloc.c, console-x-impl.h, dump-data.c, dump-data.h, dumper.c, dialog-msw.c, dired-msw.c, doc.c, editfns.c, esd.c, event-gtk.h, event-msw.c, events.c, file-coding.c, file-coding.h, fns.c, glyphs-eimage.c, glyphs-gtk.c, glyphs-msw.c, glyphs-shared.c, glyphs-x.c, glyphs.c, glyphs.h, gui.c, hpplay.c, imgproc.c, intl-win32.c, lrecord.h, lstream.c, keymap.c, lisp.h, libsst.c, linuxplay.c, miscplay.c, miscplay.h, mule-coding.c, nas.c, nt.c, ntheap.c, ntplay.c, objects-msw.c, objects-tty.c, objects-x.c, print.c, process-nt.c, process.c, redisplay.h, select-common.h, select-gtk.c, select-x.c, sgiplay.c, sound.c, sound.h, sunplay.c, sysfile.h, sysdep.c, syswindows.h, text.c, unexnt.c, win32.c, xgccache.c: Further work on types. This creates a full set of types for all the basic semantics of `char' that I have so far identified, so that its semantics can always be identified for the purposes of proper Mule-safe code, and the raw use of `char' always avoided. (1) More type renaming, for consistency of naming. Char_ASCII -> Ascbyte UChar_ASCII -> UAscbyte Char_Binary -> CBinbyte UChar_Binary -> Binbyte SChar_Binary -> SBinbyte (2) Introduce Rawbyte, CRawbyte, Boolbyte, Chbyte, UChbyte, and Bitbyte and use them. (3) New types Itext, Wexttext and Textcount for separating out the concepts of bytes and textual units (different under UTF-16 and UTF-32, which are potential internal encodings). (4) qxestr*_c -> qxestr*_ascii. lisp.h: New; goes with other qxe() functions. #### Maybe goes in a different section. lisp.h: Group generic int-type defs together with EMACS_INT defs. lisp.h: * lisp.h (WEXTTEXT_IS_WIDE) New defns. lisp.h: New type to replace places where int occurs as a boolean. It's signed because occasionally people may want to use -1 as an error value, and because unsigned ints are viral -- see comments in the internals manual against using them. dynarr.c: int -> Bytecount. --------------------------- Mule-izing --------------------------- device-x.c: Partially Mule-ize. dumper.c, dumper.h: Mule-ize. Use Rawbyte. Use stderr_out not printf. Use wext_*(). sysdep.c, syswindows.h, text.c: New Wexttext API for manipulation of external text that may be Unicode (e.g. startup code under Windows). emacs.c: Mule-ize. Properly deal with argv in external encoding. Use wext_*() and Wexttext. Use Rawbyte. #if 0 some old junk on SCO that is unlikely to be correct. Rewrite allocation code in run-temacs. emacs.c, symsinit.h, win32.c: Rename win32 init function and call it even earlier, to initialize mswindows_9x_p even earlier, for use in startup code (XEUNICODE_P). process.c: Use _wenviron not environ under Windows, to get Unicode environment variables. event-Xt.c: Mule-ize drag-n-drop related stuff. dragdrop.c, dragdrop.h, frame-x.c: Mule-ize. text.h: Add some more stand-in defines for particular kinds of conversion; use in Mule-ization work in frame-x.c etc. --------------------------- Freshening --------------------------- intl-auto-encap-win32.c, intl-auto-encap-win32.h: Regenerate. --------------------------- Unicode-work --------------------------- intl-win32.c, syswindows.h: Factor out common options to MultiByteToWideChar and WideCharToMultiByte. Add convert_unicode_to_multibyte_malloc() and convert_unicode_to_multibyte_dynarr() and use. Add stuff for alloca() conversion of multibyte/unicode. alloc.c: Use dfc_external_data_len() in case of unicode coding system. alloc.c, mule-charset.c: Don't zero out and reinit charset Unicode tables. This fucks up dump-time loading. Anyway, either we load them at dump time or run time, never both. unicode.c: Dump the blank tables as well. --------------------------------------------------------------- DOCUMENTATION, MOSTLY MULE-RELATED: --------------------------------------------------------------- EmacsFrame.c, emodules.c, event-Xt.c, fileio.c, input-method-xlib.c, mule-wnnfns.c, redisplay-gtk.c, redisplay-tty.c, redisplay-x.c, regex.c, sysdep.c: Add comment about Mule work needed. text.h: Add more documentation describing why DFC routines were not written to return their value. Add some other DFC documentation. console-msw.c, console-msw.h: Add pointer to docs in win32.c. emacs.c: Add comments on sources of doc info. text.c, charset.h, unicode.c, intl-win32.c, intl-encap-win32.c, text.h, file-coding.c, mule-coding.c: Collect background comments and related to text matters and internationalization, and proposals for work to be done, in text.c or Internals manual, stuff related to specific textual API's in text.h, and stuff related to internal implementation of Unicode conversion in unicode.c. Put lots of pointers to the comments to make them easier to find. s/mingw32.h, s/win32-common.h, s/win32-native.h, s/windowsnt.h, win32.c: Add bunches of new documentation on the different kinds of builds and environments under Windows and how they work. Collect this info in win32.c. Add pointers to these docs in the relevant s/* files. emacs.c: Document places with long comments. Remove comment about exiting, move to internals manual, put in pointer. event-stream.c: Move docs about event queues and focus to internals manual, put in pointer. events.h: Move docs about event stream callbacks to internals manual, put in pointer. profile.c, redisplay.c, signal.c: Move documentation to the Internals manual. process-nt.c: Add pointer to comment in win32-native.el. lisp.h: Add comments about some comment conventions. lisp.h: Add comment about the second argument. device-msw.c, redisplay-msw.c: @@#### comments are out-of-date. --------------------------------------------------------------- PDUMP WORK (MOTIVATED BY UNICODE CHANGES) --------------------------------------------------------------- alloc.c, buffer.c, bytecode.c, console-impl.h, console.c, device.c, dumper.c, lrecord.h, elhash.c, emodules.h, events.c, extents.c, frame.c, glyphs.c, glyphs.h, mule-charset.c, mule-coding.c, objects.c, profile.c, rangetab.c, redisplay.c, specifier.c, specifier.h, window.c, lstream.c, file-coding.h, file-coding.c: PDUMP: Properly implement dump_add_root_block(), which never worked before, and is necessary for dumping Unicode tables. Pdump name changes for accuracy: XD_STRUCT_PTR -> XD_BLOCK_PTR. XD_STRUCT_ARRAY -> XD_BLOCK_ARRAY. XD_C_STRING -> XD_ASCII_STRING. *_structure_* -> *_block_*. lrecord.h: some comments added about dump_add_root_block() vs dump_add_root_block_ptr(). extents.c: remove incorrect comment about pdump problems with gap array. --------------------------------------------------------------- ALLOCATION --------------------------------------------------------------- abbrev.c, alloc.c, bytecode.c, casefiddle.c, device-msw.c, device-x.c, dired-msw.c, doc.c, doprnt.c, dragdrop.c, editfns.c, emodules.c, file-coding.c, fileio.c, filelock.c, fns.c, glyphs-eimage.c, glyphs-gtk.c, glyphs-msw.c, glyphs-x.c, gui-msw.c, gui-x.c, imgproc.c, intl-win32.c, lread.c, menubar-gtk.c, menubar.c, nt.c, objects-msw.c, objects-x.c, print.c, process-nt.c, process-unix.c, process.c, realpath.c, redisplay.c, search.c, select-common.c, symbols.c, sysdep.c, syswindows.h, text.c, text.h, ui-byhand.c: New macros {alloca,xnew}_{itext,{i,ext,raw,bin,asc}bytes} for more convenient allocation of these commonly requested items. Modify functions to use alloca_ibytes, alloca_array, alloca_extbytes, xnew_ibytes, etc. also XREALLOC_ARRAY, xnew. alloc.c: Rewrite the allocation functions to factor out repeated code. Add assertions for freeing dumped data. lisp.h: Moved down and consolidated with other allocation stuff. lisp.h, dynarr.c: New functions for allocation that's very efficient when mostly in LIFO order. lisp.h, text.c, text.h: Factor out some stuff for general use by alloca()-conversion funs. text.h, lisp.h: Fill out convenience routines for allocating various kinds of bytes and put them in lisp.h. Use them in place of xmalloc(), ALLOCA(). text.h: Fill out the convenience functions so the _MALLOC() kinds match the alloca() kinds. --------------------------------------------------------------- ERROR-CHECKING --------------------------------------------------------------- text.h: Create ASSERT_ASCTEXT_ASCII() and ASSERT_ASCTEXT_ASCII_LEN() from similar Eistring checkers and change the Eistring checkers to use them instead. --------------------------------------------------------------- MACROS IN LISP.H --------------------------------------------------------------- lisp.h: Redo GCPRO declarations. Create a "base" set of functions that can be used to generate any kind of gcpro sets -- regular, ngcpro, nngcpro, private ones used in GC_EXTERNAL_LIST_LOOP_2. buffer.c, callint.c, chartab.c, console-msw.c, device-x.c, dialog-msw.c, dired.c, extents.c, ui-gtk.c, rangetab.c, nt.c, mule-coding.c, minibuf.c, menubar-msw.c, menubar.c, menubar-gtk.c, lread.c, lisp.h, gutter.c, glyphs.c, glyphs-widget.c, fns.c, fileio.c, file-coding.c, specifier.c: Eliminate EXTERNAL_LIST_LOOP, which does not check for circularities. Use EXTERNAL_LIST_LOOP_2 instead or EXTERNAL_LIST_LOOP_3 or EXTERNAL_PROPERTY_LIST_LOOP_3 or GC_EXTERNAL_LIST_LOOP_2 (new macro). Removed/redid comments on EXTERNAL_LIST_LOOP. --------------------------------------------------------------- SPACING FIXES --------------------------------------------------------------- callint.c, hftctl.c, number-gmp.c, process-unix.c: Spacing fixes. --------------------------------------------------------------- FIX FOR GEOMETRY PROBLEM IN FIRST FRAME --------------------------------------------------------------- unicode.c: Add workaround for newlib bug in sscanf() [should be fixed by release 1.5.12 of Cygwin]. toolbar.c: bug fix for problem of initial frame being 77 chars wide on Windows. will be overridden by my other ws. --------------------------------------------------------------- FIX FOR LEAKING PROCESS HANDLES: --------------------------------------------------------------- process-nt.c: Fixes for leaking handles. Inspired by work done by Adrian Aichner <adrian@xemacs.org>. --------------------------------------------------------------- FIX FOR CYGWIN BUG (Unicode-related): --------------------------------------------------------------- unicode.c: Add workaround for newlib bug in sscanf() [should be fixed by release 1.5.12 of Cygwin]. --------------------------------------------------------------- WARNING FIXES: --------------------------------------------------------------- console-stream.c: `reinit' is unused. compiler.h, event-msw.c, frame-msw.c, intl-encap-win32.c, text.h: Add stuff to deal with ANSI-aliasing warnings I got. regex.c: Gather includes together to avoid warning. --------------------------------------------------------------- CHANGES TO INITIALIZATION ROUTINES: --------------------------------------------------------------- buffer.c, emacs.c, console.c, debug.c, device-x.c, device.c, dragdrop.c, emodules.c, eval.c, event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, event-tty.c, events.c, extents.c, faces.c, file-coding.c, fileio.c, font-lock.c, frame-msw.c, glyphs-widget.c, glyphs.c, gui-x.c, insdel.c, lread.c, lstream.c, menubar-gtk.c, menubar-x.c, minibuf.c, mule-wnnfns.c, objects-msw.c, objects.c, print.c, scrollbar-x.c, search.c, select-x.c, text.c, undo.c, unicode.c, window.c, symsinit.h: Call reinit_*() functions directly from emacs.c, for clarity. Factor out some redundant init code. Move disallowed stuff that had crept into vars_of_glyphs() into complex_vars_of_glyphs(). Call init_eval_semi_early() from eval.c not in the middle of vars_of_() in emacs.c since there should be no order dependency in the latter calls. --------------------------------------------------------------- ARMAGEDDON: --------------------------------------------------------------- alloc.c, emacs.c, lisp.h, print.c: Rename inhibit_non_essential_printing_operations to inhibit_non_essential_conversion_operations. text.c: Assert on !inhibit_non_essential_conversion_operations. console-msw.c, print.c: Don't do conversion in SetConsoleTitle or FindWindow to avoid problems during armageddon. Put #errors for NON_ASCII_INTERNAL_FORMAT in places where problems would arise. --------------------------------------------------------------- CHANGES TO THE BUILD PROCEDURE: --------------------------------------------------------------- config.h.in, s/cxux.h, s/usg5-4-2.h, m/powerpc.h: Add comment about correct ordering of this file. Rearrange everything to follow this -- put all #undefs together and before the s&m files. Add undefs for HAVE_ALLOCA, C_ALLOCA, BROKEN_ALLOCA_IN_FUNCTION_CALLS, STACK_DIRECTION. Remove unused HAVE_STPCPY, HAVE_GETWD, HAVE_SETLOCALE. m/gec63.h: Deleted; totally broken, not used at all, not in FSF. m/7300.h, m/acorn.h, m/alliant-2800.h, m/alliant.h, m/altos.h, m/amdahl.h, m/apollo.h, m/att3b.h, m/aviion.h, m/celerity.h, m/clipper.h, m/cnvrgnt.h, m/convex.h, m/cydra5.h, m/delta.h, m/delta88k.h, m/dpx2.h, m/elxsi.h, m/ews4800r.h, m/gould.h, m/hp300bsd.h, m/hp800.h, m/hp9000s300.h, m/i860.h, m/ibmps2-aix.h, m/ibmrs6000.h, m/ibmrt-aix.h, m/ibmrt.h, m/intel386.h, m/iris4d.h, m/iris5d.h, m/iris6d.h, m/irist.h, m/isi-ov.h, m/luna88k.h, m/m68k.h, m/masscomp.h, m/mg1.h, m/mips-nec.h, m/mips-siemens.h, m/mips.h, m/news.h, m/nh3000.h, m/nh4000.h, m/ns32000.h, m/orion105.h, m/pfa50.h, m/plexus.h, m/pmax.h, m/powerpc.h, m/pyrmips.h, m/sequent-ptx.h, m/sequent.h, m/sgi-challenge.h, m/symmetry.h, m/tad68k.h, m/tahoe.h, m/targon31.h, m/tekxd88.h, m/template.h, m/tower32.h, m/tower32v3.h, m/ustation.h, m/vax.h, m/wicat.h, m/xps100.h: Delete C_ALLOCA, HAVE_ALLOCA, STACK_DIRECTION, BROKEN_ALLOCA_IN_FUNCTION_CALLS. All of this is auto-detected. When in doubt, I followed recent FSF sources, which also have these things deleted.
author ben
date Thu, 04 Nov 2004 23:08:28 +0000
parents c3cf7db99b98
children d9eb5ea14f65
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
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
148 non-negative integer.
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 @var{end} is not an integer or @code{nil}. An @code{args-out-of-range}
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"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 (concat "abc" (list 120 (+ 256 121)) [122])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 @result{} "abcxyz"
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 second example above shows how characters stored in strings are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 taken modulo 256. In other words, each character in the string is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 stored in one byte.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 The @code{concat} function always constructs a new string that is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 not @code{eq} to any existing string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 When an argument is an integer (not a sequence of integers), it is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 converted to a string of digits making up the decimal printed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 representation of the integer. @strong{Don't use this feature; we plan
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 to eliminate it. If you already use this feature, change your programs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 now!} The proper way to convert an integer to a decimal number in this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 way is with @code{format} (@pxref{Formatting Strings}) or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 @code{number-to-string} (@pxref{String Conversion}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 (concat 137)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 @result{} "137"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 (concat 54 321)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 @result{} "54321"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 For information about other concatenation functions, see the description
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 of @code{mapconcat} in @ref{Mapping Functions}, @code{vconcat} in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 @ref{Vectors}, @code{bvconcat} in @ref{Bit Vectors}, and @code{append}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 in @ref{Building Lists}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290
1495
c3cf7db99b98 [xemacs-hg @ 2003-05-22 07:41:20 by stephent]
stephent
parents: 444
diff changeset
291 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
292 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
293 expression.
c3cf7db99b98 [xemacs-hg @ 2003-05-22 07:41:20 by stephent]
stephent
parents: 444
diff changeset
294
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 @node Predicates for Characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 @section The Predicates for Characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 @defun characterp object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 This function returns @code{t} if @var{object} is a character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 Some functions that work on integers (e.g. the comparison functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 <, <=, =, /=, etc. and the arithmetic functions +, -, *, etc.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 accept characters and implicitly convert them into integers. In
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 general, functions that work on characters also accept char-ints and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 implicitly convert them into characters. WARNING: Neither of these
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 behaviors is very desirable, and they are maintained for backward
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 compatibility with old E-Lisp programs that confounded characters and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 integers willy-nilly. These behaviors may change in the future; therefore,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 do not rely on them. Instead, convert the characters explicitly
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 using @code{char-int}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 @defun integer-or-char-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 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
315 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 @node Character Codes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 @section Character Codes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
320 @defun char-int character
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 This function converts a character into an equivalent integer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 The resulting integer will always be non-negative. The integers in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 the range 0 - 255 map to characters as follows:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 @table @asis
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 @item 0 - 31
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 Control set 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 @item 32 - 127
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 @sc{ascii}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 @item 128 - 159
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 Control set 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 @item 160 - 255
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 Right half of ISO-8859-1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 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
337 character values. When @sc{mule} support exists, the values assigned to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 other characters may vary depending on the particular version of XEmacs,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 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
340 depend on them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 @defun int-char integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 This function converts an integer into the equivalent character. Not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 all integers correspond to valid characters; use @code{char-int-p} to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 determine whether this is the case. If the integer cannot be converted,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 @code{nil} is returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 @end defun
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 @defun char-int-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 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
352 converted into a character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 @defun char-or-char-int-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 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
357 integer that can be converted into one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 @need 2000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 @node Text Comparison
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 @section Comparison of Characters and Strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 @cindex string equality
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
365 @defun char-equal character1 character2 &optional buffer
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 This function returns @code{t} if the arguments represent the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 character, @code{nil} otherwise. This function ignores differences
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
368 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
369 @var{buffer}, which defaults to the current buffer.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 @example
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{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 (let ((case-fold-search t))
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{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 (let ((case-fold-search nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 (char-equal ?x ?X))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 @defun char= character1 character2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 This function returns @code{t} if the arguments represent the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 character, @code{nil} otherwise. Case is significant.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 (char= ?x ?x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 (char= ?x ?X)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 (let ((case-fold-search t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 (char-equal ?x ?X))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 (let ((case-fold-search nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 (char-equal ?x ?X))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 @defun string= string1 string2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 This function returns @code{t} if the characters of the two strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 match exactly; case is significant.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 (string= "abc" "abc")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 (string= "abc" "ABC")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 (string= "ab" "ABC")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 @ignore @c `equal' in XEmacs does not compare text properties
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 The function @code{string=} ignores the text properties of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 two strings. To compare strings in a way that compares their text
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 properties also, use @code{equal} (@pxref{Equality Predicates}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 @end ignore
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 @end defun
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 @defun string-equal string1 string2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 @code{string-equal} is another name for @code{string=}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 @cindex lexical comparison
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 @defun string< string1 string2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 @c (findex string< causes problems for permuted index!!)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 This function compares two strings a character at a time. First it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 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
430 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
431 the character from @var{string1}, then @var{string1} is less, and this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 function returns @code{t}. If the lesser character is the one from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 @var{string2}, then @var{string1} is greater, and this function returns
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 @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
435
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 Pairs of characters are compared by their @sc{ascii} codes. Keep in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 mind that lower case letters have higher numeric values in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 @sc{ascii} character set than their upper case counterparts; numbers and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 many punctuation characters have a lower numeric value than upper case
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 letters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 (string< "abc" "abd")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 (string< "abd" "abc")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 (string< "123" "abc")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 @end example
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 When the strings have different lengths, and they match up to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 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
455 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
456 no characters is less than any other string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 (string< "" "abc")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 (string< "ab" "abc")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 @result{} t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 (string< "abc" "")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 (string< "abc" "ab")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 (string< "" "")
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
469 @result{} nil
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 @defun string-lessp string1 string2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 @code{string-lessp} is another name for @code{string<}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 See also @code{compare-buffer-substrings} in @ref{Comparing Text}, for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 a way to compare text in buffers. The function @code{string-match},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 which matches a regular expression against a string, can be used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 for a kind of string comparison; see @ref{Regexp Search}.
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 @node String Conversion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 @section Conversion of Characters and Strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 @cindex conversion of strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 This section describes functions for conversions between characters,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 strings and integers. @code{format} and @code{prin1-to-string}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 (@pxref{Output Functions}) can also convert Lisp objects into strings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 @code{read-from-string} (@pxref{Input Functions}) can ``convert'' a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 string representation of a Lisp object into an object.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 @xref{Documentation}, for functions that produce textual descriptions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 of text characters and general input events
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 (@code{single-key-description} and @code{text-char-description}). These
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 functions are used primarily for making help messages.
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 char-to-string character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 @cindex character to string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 This function returns a new string with a length of one character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 The value of @var{character}, modulo 256, is used to initialize the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 element of the string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 This function is similar to @code{make-string} with an integer argument
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 of 1. (@xref{Creating Strings}.) This conversion can also be done with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 @code{format} using the @samp{%c} format specification.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 (@xref{Formatting Strings}.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 (char-to-string ?x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 @result{} "x"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 (char-to-string (+ 256 ?x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 @result{} "x"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 (make-string 1 ?x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 @result{} "x"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 @end defun
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 @defun string-to-char string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 @cindex string to character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 This function returns the first character in @var{string}. If the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 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
523 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
524 @sc{ascii} code 0.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 (string-to-char "ABC")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 @result{} ?A ;; @r{Under XEmacs 20.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 @result{} 65 ;; @r{Under XEmacs 19.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 (string-to-char "xyz")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531 @result{} ?x ;; @r{Under XEmacs 20.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 @result{} 120 ;; @r{Under XEmacs 19.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 (string-to-char "")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 @result{} 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 (string-to-char "\000")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 @result{} ?\^@ ;; @r{Under XEmacs 20.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 @result{} 0 ;; @r{Under XEmacs 20.}
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 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
541 enough to retain.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 @defun number-to-string number
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 @cindex integer to string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 @cindex integer to decimal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 This function returns a string consisting of the printed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548 representation of @var{number}, which may be an integer or a floating
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 point number. The value starts with a sign if the argument is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550 negative.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 (number-to-string 256)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 @result{} "256"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555 (number-to-string -23)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 @result{} "-23"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 (number-to-string -23.5)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 @result{} "-23.5"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 @cindex int-to-string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 @code{int-to-string} is a semi-obsolete alias for this function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 See also the function @code{format} in @ref{Formatting Strings}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 @defun string-to-number string &optional base
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 @cindex string to number
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
569 This function returns the numeric value represented by @var{string},
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
570 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
571 @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
572 a number. (On some systems it ignores other whitespace at the
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
573 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
574 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
575 0.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 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
578 other than ten, only integers can be read.
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 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 (string-to-number "256")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 @result{} 256
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 (string-to-number "25 is a perfect square.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 @result{} 25
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 (string-to-number "X256")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 @result{} 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 (string-to-number "-4.5")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 @result{} -4.5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 (string-to-number "ffff" 16)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 @result{} 65535
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 @end example
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 @findex string-to-int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 @code{string-to-int} is an obsolete alias for this function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 @node Modifying Strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 @section Modifying Strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 @cindex strings, modifying
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 You can modify a string using the general array-modifying primitives.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 @xref{Arrays}. The function @code{aset} modifies a single character;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603 the function @code{fillarray} sets all characters in the string to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 a specified character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 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
607 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
608 string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 @defun string-modified-tick string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 This function returns the tick counter for @samp{string}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614 @node String Properties
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 @section String Properties
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616 @cindex string properties
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 @cindex properties of strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
619 Just as with symbols, extents, faces, and glyphs, you can attach
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620 additional information to strings in the form of @dfn{string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621 properties}. These differ from text properties, which are logically
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 attached to particular characters in the string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624 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
625 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
626 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
627 all the properties in a string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 @node Formatting Strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 @section Formatting Strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 @cindex formatting strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 @cindex strings, formatting them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 @dfn{Formatting} means constructing a string by substitution of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 computed values at various places in a constant string. This string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 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
637 it is called a @dfn{format string}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 Formatting is often useful for computing messages to be displayed. In
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 fact, the functions @code{message} and @code{error} provide the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 formatting feature described here; they differ from @code{format} only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 in how they use the result of formatting.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644 @defun format string &rest objects
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 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
646 @var{string} and then replacing any format specification
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 in the copy with encodings of the corresponding @var{objects}. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 arguments @var{objects} are the computed values to be formatted.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 @cindex @samp{%} in format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 @cindex format specification
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 A format specification is a sequence of characters beginning with a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 @samp{%}. Thus, if there is a @samp{%d} in @var{string}, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 @code{format} function replaces it with the printed representation of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 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
657 For example:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 (format "The value of fill-column is %d." fill-column)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 @result{} "The value of fill-column is 72."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 If @var{string} contains more than one format specification, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 format specifications correspond with successive values from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 @var{objects}. Thus, the first format specification in @var{string}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 uses the first such value, the second format specification uses the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 second such value, and so on. Any extra format specifications (those
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 for which there are no corresponding values) cause unpredictable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 behavior. Any extra values to be formatted are ignored.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 Certain format specifications require values of particular types.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 However, no error is signaled if the value actually supplied fails to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 have the expected type. Instead, the output is likely to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 meaningless.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679 Here is a table of valid format specifications:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 @table @samp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 @item %s
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 Replace the specification with the printed representation of the object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 made without quoting. Thus, strings are represented by their contents
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 alone, with no @samp{"} characters, and symbols appear without @samp{\}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686 characters. This is equivalent to printing the object with @code{princ}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688 If there is no corresponding object, the empty string is used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690 @item %S
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691 Replace the specification with the printed representation of the object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 made with quoting. Thus, strings are enclosed in @samp{"} characters,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693 and @samp{\} characters appear where necessary before special characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 This is equivalent to printing the object with @code{prin1}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696 If there is no corresponding object, the empty string is used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698 @item %o
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699 @cindex integer to octal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 Replace the specification with the base-eight representation of an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 integer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 @item %d
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704 @itemx %i
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705 Replace the specification with the base-ten representation of an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706 integer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708 @item %x
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709 @cindex integer to hexadecimal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710 Replace the specification with the base-sixteen representation of an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711 integer, using lowercase letters.
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 %X
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
714 @cindex integer to hexadecimal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
715 Replace the specification with the base-sixteen representation of an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
716 integer, using uppercase letters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718 @item %c
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
719 Replace the specification with the character which is the value given.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721 @item %e
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
722 Replace the specification with the exponential notation for a floating
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723 point number (e.g. @samp{7.85200e+03}).
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 @item %f
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
726 Replace the specification with the decimal-point notation for a floating
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
727 point number.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
728
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
729 @item %g
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
730 Replace the specification with notation for a floating point number,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
731 using a ``pretty format''. Either exponential notation or decimal-point
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
732 notation will be used (usually whichever is shorter), and trailing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
733 zeroes are removed from the fractional part.
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 @item %%
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
736 A single @samp{%} is placed in the string. This format specification is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
737 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
738 %d" 30)} returns @code{"% 30"}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
739 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
740
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
741 Any other format character results in an @samp{Invalid format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
742 operation} error.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
743
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
744 Here are several examples:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
746 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
747 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
748 (format "The name of this buffer is %s." (buffer-name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749 @result{} "The name of this buffer is strings.texi."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751 (format "The buffer object prints as %s." (current-buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
752 @result{} "The buffer object prints as #<buffer strings.texi>."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
753
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
754 (format "The octal value of %d is %o,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
755 and the hex value is %x." 18 18 18)
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
756 @result{} "The octal value of 18 is 22,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757 and the hex value is 12."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
758 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
759 @end example
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 There are many additional flags and specifications that can occur
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
762 between the @samp{%} and the format character, in the following order:
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 @enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
765 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
766 An optional repositioning specification, which is a positive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
767 integer followed by a @samp{$}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
768
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
770 Zero or more of the optional flag characters @samp{-}, @samp{+},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 @samp{ }, @samp{0}, and @samp{#}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774 An asterisk (@samp{*}, meaning that the field width is now assumed to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
775 have been specified as an argument.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
776
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
777 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778 An optional minimum field width.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
779
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
780 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
781 An optional precision, preceded by a @samp{.} character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
782 @end enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 @cindex repositioning format arguments
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785 @cindex multilingual string formatting
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786 A @dfn{repositioning} specification changes which argument to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
787 @code{format} is used by the current and all following format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
788 specifications. Normally the first specification uses the first
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
789 argument, the second specification uses the second argument, etc. Using
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
790 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
791 @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
792 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
793 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
794
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
795 For example:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
796
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
797 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
799 (format "Can't find file `%s' in directory `%s'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
800 "ignatius.c" "loyola/")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
801 @result{} "Can't find file `ignatius.c' in directory `loyola/'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
802
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
803 (format "In directory `%2$s', the file `%1$s' was not found."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
804 "ignatius.c" "loyola/")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
805 @result{} "In directory `loyola/', the file `ignatius.c' was not found."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
806
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
807 (format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
808 "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
809 37 12)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810 @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
811 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
814 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
815 reword a format specification (thereby moving the arguments around)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
816 without having to actually reorder the arguments. This is especially
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817 useful in translating messages from one language to another: Different
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
818 languages use different word orders, and this sometimes entails changing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
819 the order of the arguments. By using repositioning specifications,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820 this can be accomplished without having to embed knowledge of particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821 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
822 displayed.
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 @cindex numeric prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825 @cindex field width
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826 @cindex padding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827 All the specification characters allow an optional numeric prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
828 between the @samp{%} and the character, and following any repositioning
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
829 specification or flag. The optional numeric prefix defines the minimum
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
830 width for the object. If the printed representation of the object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831 contains fewer characters than this, then it is padded. The padding is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
832 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
833 character is given. The padding character is normally a space, but if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834 the @samp{0} flag character is given, zeros are used for padding.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
836 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
837 (format "%06d is padded on the left with zeros" 123)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
838 @result{} "000123 is padded on the left with zeros"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
839
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840 (format "%-6d is padded on the right" 123)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841 @result{} "123 is padded on the right"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
844 @code{format} never truncates an object's printed representation, no
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
845 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
846 specify a minimum spacing between columns with no risk of losing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847 information.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
848
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
849 In the following three examples, @samp{%7s} specifies a minimum width
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
850 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
851 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
852 second case, the string @code{"specification"} is 13 letters wide but is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
853 not truncated. In the third case, the padding is on the right.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
854
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
855 @smallexample
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
856 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
857 (format "The word `%7s' actually has %d letters in it."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
858 "foo" (length "foo"))
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
859 @result{} "The word ` foo' actually has 3 letters in it."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
860 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
861
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
862 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
863 (format "The word `%7s' actually has %d letters in it."
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
864 "specification" (length "specification"))
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
865 @result{} "The word `specification' actually has 13 letters in it."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
866 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
867
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
868 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
869 (format "The word `%-7s' actually has %d letters in it."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
870 "foo" (length "foo"))
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
871 @result{} "The word `foo ' actually has 3 letters in it."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
872 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
873 @end smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
874
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
875 @cindex format precision
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
876 @cindex precision of formatted numbers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
877 After any minimum field width, a precision may be specified by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
878 preceding it with a @samp{.} character. The precision specifies the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
879 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
880 @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
881 with zeroes as necessary); the number of digits printed after the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
882 decimal point for @samp{%f}, @samp{%e}, and @samp{%E} conversions; the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
883 number of significant digits printed in @samp{%g} and @samp{%G}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
884 conversions; and the maximum number of non-padding characters printed in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885 @samp{%s} and @samp{%S} conversions. The default precision for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
886 floating-point conversions is six.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
887
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
888 The other flag characters have the following meanings:
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 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
891 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
892 The @samp{ } flag means prefix non-negative numbers with a space.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
893
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
894 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
895 The @samp{+} flag means prefix non-negative numbers with a plus sign.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
896
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
897 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
898 The @samp{#} flag means print numbers in an alternate, more verbose
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
899 format: octal numbers begin with zero; hex numbers begin with a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
900 @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
901 @samp{%e}, and @samp{%E} conversions even if no numbers are printed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
902 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
903 conversions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
904 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
905
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906 @node Character Case
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
907 @section Character Case
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
908 @cindex upper case
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
909 @cindex lower case
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
910 @cindex character case
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
911
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
912 The character case functions change the case of single characters or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
913 of the contents of strings. The functions convert only alphabetic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
914 characters (the letters @samp{A} through @samp{Z} and @samp{a} through
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
915 @samp{z}); other characters are not altered. The functions do not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
916 modify the strings that are passed to them as arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
917
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
918 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
919 @sc{ascii} codes 88 and 120 respectively.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
920
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
921 @defun downcase string-or-char &optional buffer
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
922 This function converts a character or a string to lower case.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
923
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924 When the argument to @code{downcase} is a string, the function creates
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
925 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
926 upper case is converted to lower case. When the argument to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
927 @code{downcase} is a character, @code{downcase} returns the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
928 corresponding lower case character. (This value is actually an integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
929 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
930 letter, then the value equals the original character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
931
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
932 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
933 use, and defaults to the current buffer.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
934
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
935 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
936 (downcase "The cat in the hat")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
937 @result{} "the cat in the hat"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
938
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
939 (downcase ?X)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
940 @result{} ?x ;; @r{Under XEmacs 20.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
941 @result{} 120 ;; @r{Under XEmacs 19.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
942
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
943 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
944 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
945
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
946 @defun upcase string-or-char &optional buffer
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
947 This function converts a character or a string to upper case.
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 When the argument to @code{upcase} is a string, the function creates
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
950 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
951 lower case is converted to upper case.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
952
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
953 When the argument to @code{upcase} is a character, @code{upcase} returns
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
954 the corresponding upper case character. (This value is actually an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
955 integer under XEmacs 19.) If the original character is upper case, or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
956 is not a letter, then the value equals the original character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
958 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
959 use, and defaults to the current buffer.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
960
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
961 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
962 (upcase "The cat in the hat")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
963 @result{} "THE CAT IN THE HAT"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
964
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
965 (upcase ?x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
966 @result{} ?X ;; @r{Under XEmacs 20.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
967 @result{} 88 ;; @r{Under XEmacs 19.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
968 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
969 @end defun
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 @defun capitalize string-or-char &optional buffer
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
972 @cindex capitalization
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
973 This function capitalizes strings or characters. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
974 @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
975 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
976 word has been capitalized. This means that the first character of each
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
977 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
978 case.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
979
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
980 The definition of a word is any sequence of consecutive characters that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
981 are assigned to the word constituent syntax class in the current syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
982 table (@pxref{Syntax Class Table}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
983
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
984 When the argument to @code{capitalize} is a character, @code{capitalize}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
985 has the same result as @code{upcase}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
986
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
987 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
988 use, and defaults to the current buffer.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
989
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
990 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
991 (capitalize "The cat in the hat")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
992 @result{} "The Cat In The Hat"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
993
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
994 (capitalize "THE 77TH-HATTED CAT")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
995 @result{} "The 77th-Hatted Cat"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
996
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
997 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
998 (capitalize ?x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
999 @result{} ?X ;; @r{Under XEmacs 20.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1000 @result{} 88 ;; @r{Under XEmacs 19.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1001 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1002 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1003 @end defun
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 @node Case Tables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1006 @section The Case Table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1007
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1008 You can customize case conversion by installing a special @dfn{case
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1009 table}. A case table specifies the mapping between upper case and lower
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1010 case letters. It affects both the string and character case conversion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1011 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
1012 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
1013 language which has letters other than the standard @sc{ascii} letters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1014
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1015 A case table is a list of this form:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1016
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1017 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1018 (@var{downcase} @var{upcase} @var{canonicalize} @var{equivalences})
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1019 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1020
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1021 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1022 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
1023 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
1024 equivalent. The element @var{upcase} maps each character to its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1025 upper-case equivalent. If lower and upper case characters are in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1026 one-to-one correspondence, use @code{nil} for @var{upcase}; then XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1027 deduces the upcase table from @var{downcase}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1028
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1029 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
1030 correspondence. There may be two different lower case letters with the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1031 same upper case equivalent. In these cases, you need to specify the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1032 maps for both directions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1033
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034 The element @var{canonicalize} maps each character to a canonical
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1035 equivalent; any two characters that are related by case-conversion have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1036 the same canonical equivalent character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1037
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1038 The element @var{equivalences} is a map that cyclicly permutes each
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039 equivalence class (of characters with the same canonical equivalent).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040 (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
1041 @samp{A} into @samp{a}, and likewise for each set of equivalent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1042 characters.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1043
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1044 When you construct a case table, you can provide @code{nil} for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1045 @var{canonicalize}; then Emacs fills in this string from @var{upcase}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1046 and @var{downcase}. You can also provide @code{nil} for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1047 @var{equivalences}; then Emacs fills in this string from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1048 @var{canonicalize}. In a case table that is actually in use, those
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1049 components are non-@code{nil}. Do not try to specify @var{equivalences}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1050 without also specifying @var{canonicalize}.
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 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
1053 table} which is copied into each buffer when you create the buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1054 Changing the standard case table doesn't affect any existing buffers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1055
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1056 Here are the functions for working with case tables:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1057
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1058 @defun case-table-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059 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
1060 table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1061 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1062
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1063 @defun set-standard-case-table case-table
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1064 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
1065 will apply to any buffers created subsequently.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1066 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1067
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1068 @defun standard-case-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069 This returns the standard case table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1070 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1071
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1072 @defun current-case-table &optional buffer
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1073 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
1074 the current buffer.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1075 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1076
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1077 @defun set-case-table case-table
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1078 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
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 The following three functions are convenient subroutines for packages
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1082 that define non-@sc{ascii} character sets. They modify a string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1083 @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
1084 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
1085 the standard syntax table. @xref{Syntax Tables}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1086
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087 @defun set-case-syntax-pair uc lc downcase-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1088 This function specifies a pair of corresponding letters, one upper case
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1089 and one lower case.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1090 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1091
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1092 @defun set-case-syntax-delims l r downcase-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093 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
1094 case-invariant delimiters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1096
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097 @defun set-case-syntax char syntax downcase-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1098 This function makes @var{char} case-invariant, with syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1099 @var{syntax}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1100 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1101
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1102 @deffn Command describe-buffer-case-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1103 This command displays a description of the contents of the current
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1104 buffer's case table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1105 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1106
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1107 @cindex ISO Latin 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1108 @pindex iso-syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1109 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
1110 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
1111
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1112 @node Char Tables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1113 @section The Char Table
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 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
1116 to values. Char tables are specialized for characters, only allowing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1117 particular sorts of ranges to be assigned values. Although this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1118 loses in generality, it makes for extremely fast (constant-time)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1119 lookups, and thus is feasible for applications that do an extremely
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1120 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
1121 a particular syntax, where a lookup in the syntax table must occur
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1122 once per character).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1123
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1124 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
1125 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
1126 generally implemented using a vector of 256 elements.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1127
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1128 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
1129 values are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1130
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1131 @itemize @bullet
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 all characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1134 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1135 an entire charset
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1136 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1137 a single row in a two-octet charset
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1138 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1139 a single character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1140 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1141
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1142 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
1143 assigned values are
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 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1146 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1147 all characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149 a single character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1150 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1151
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1152 @defun char-table-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1153 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
1154 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1155
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1156 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1157 * Char Table Types:: Char tables have different uses.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1158 * Working With Char Tables:: Creating and working with char tables.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1159 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1160
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1161 @node Char Table Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1162 @subsection Char Table Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1163
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1164 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
1165 sorts of values. The different char table types are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1166
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1167 @table @code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1168 @item category
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1169 Used for category tables, which specify the regexp categories
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1170 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
1171 bit vector of 95 elements. Higher-level Lisp functions are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1172 provided for working with category tables. Currently categories
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1173 and category tables only exist when @sc{mule} support is present.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1174 @item char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1175 A generalized char table, for mapping from one character to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1176 another. Used for case tables, syntax matching tables,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1177 @code{keyboard-translate-table}, etc. The valid values are characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1178 @item generic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1179 An even more generalized char table, for mapping from a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1180 character to anything.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1181 @item display
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1182 Used for display tables, which specify how a particular character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1183 is to appear when displayed. #### Not yet implemented.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1184 @item syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1185 Used for syntax tables, which specify the syntax of a particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1186 character. Higher-level Lisp functions are provided for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1187 working with syntax tables. The valid values are integers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1188 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1189
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1190 @defun char-table-type char-table
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1191 This function returns the type of char table @var{char-table}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1192 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1193
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1194 @defun char-table-type-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1195 This function returns a list of the recognized char table types.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1196 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1197
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1198 @defun valid-char-table-type-p type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1199 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
1200 @end defun
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 @node Working With Char Tables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1203 @subsection Working With Char Tables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1204
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1205 @defun make-char-table type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1206 This function makes a new, empty char table of type @var{type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1207 @var{type} should be a symbol, one of @code{char}, @code{category},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1208 @code{display}, @code{generic}, or @code{syntax}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1209 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1210
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1211 @defun put-char-table range value char-table
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1212 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
1213 @var{char-table}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1214
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1215 @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
1216 one of the following:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1217
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1218 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1219 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1220 @code{t} (all characters are affected)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1221 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1222 A charset (only allowed when @sc{mule} support is present)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1223 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1224 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
1225 (only allowed when @sc{mule} support is present)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1226 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1227 A single character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1228 @end itemize
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 @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
1231 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1232
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1233 @defun get-char-table character char-table
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1234 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
1235 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1236
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1237 @defun get-range-char-table range char-table &optional multi
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1238 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
1239 more than one value, @var{multi} is returned (defaults to @code{nil}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1240 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1241
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1242 @defun reset-char-table char-table
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1243 This function resets @var{char-table} to its default state.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1244 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1245
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1246 @defun map-char-table function char-table &optional range
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1247 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
1248 it with two args, each key and value in the table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1249
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1250 @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
1251 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
1252 @code{t}, it defaults to the entire table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1253 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1254
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1255 @defun valid-char-table-value-p value char-table-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1256 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
1257 @var{char-table-type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1258 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1259
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1260 @defun check-valid-char-table-value value char-table-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1261 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
1262 @var{char-table-type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1263 @end defun