annotate src/character.c @ 99492:ee792794d888

(isearch-search-fun): Compare the length of the current search string with the length of the string from the previous search state to detect the situation when the user adds or removes characters in the search string. Use word-search-forward-lax and word-search-backward-lax in this case, and otherwise word-search-forward and word-search-backward.
author Juri Linkov <juri@jurta.org>
date Tue, 11 Nov 2008 19:43:09 +0000
parents e228d5755549
children fc199de00487
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1 /* Basic character support.
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
2 Copyright (C) 1995, 1997, 1998, 2001 Electrotechnical Laboratory, JAPAN.
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
3 Licensed to the Free Software Foundation.
91443
541da5d81b14 Update copyright years and GPL version.
Glenn Morris <rgm@gnu.org>
parents: 90942
diff changeset
4 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
541da5d81b14 Update copyright years and GPL version.
Glenn Morris <rgm@gnu.org>
parents: 90942
diff changeset
5 Free Software Foundation, Inc.
541da5d81b14 Update copyright years and GPL version.
Glenn Morris <rgm@gnu.org>
parents: 90942
diff changeset
6 Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
7 National Institute of Advanced Industrial Science and Technology (AIST)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
8 Registration Number H13PRO009
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
9
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
10 This file is part of GNU Emacs.
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
11
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94146
diff changeset
12 GNU Emacs is free software: you can redistribute it and/or modify
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
13 it under the terms of the GNU General Public License as published by
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94146
diff changeset
14 the Free Software Foundation, either version 3 of the License, or
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94146
diff changeset
15 (at your option) any later version.
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
16
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
17 GNU Emacs is distributed in the hope that it will be useful,
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
20 GNU General Public License for more details.
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
21
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
22 You should have received a copy of the GNU General Public License
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94146
diff changeset
23 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
24
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
25 /* At first, see the document in `character.h' to understand the code
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
26 in this file. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
27
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
28 #ifdef emacs
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
29 #include <config.h>
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
30 #endif
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
31
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
32 #include <stdio.h>
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
33
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
34 #ifdef emacs
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
35
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
36 #include <sys/types.h>
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
37 #include "lisp.h"
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
38 #include "character.h"
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
39 #include "buffer.h"
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
40 #include "charset.h"
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
41 #include "composite.h"
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
42 #include "disptab.h"
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
43
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
44 #else /* not emacs */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
45
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
46 #include "mulelib.h"
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
47
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
48 #endif /* emacs */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
49
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
50 Lisp_Object Qcharacterp;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
51
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
52 /* Vector of translation table ever defined.
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
53 ID of a translation table is used to index this vector. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
54 Lisp_Object Vtranslation_table_vector;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
55
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
56 /* A char-table for characters which may invoke auto-filling. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
57 Lisp_Object Vauto_fill_chars;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
58
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
59 Lisp_Object Qauto_fill_chars;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
60
89888
cfd942ddfdab *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89757
diff changeset
61 /* Char-table of information about which character to unify to which
99482
e228d5755549 (Vchar_unify_table): Comment added.
Kenichi Handa <handa@m17n.org>
parents: 99475
diff changeset
62 Unicode character. Mainly used by the macro MAYBE_UNIFY_CHAR. */
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
63 Lisp_Object Vchar_unify_table;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
64
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
65 /* A char-table. An element is non-nil iff the corresponding
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
66 character has a printable glyph. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
67 Lisp_Object Vprintable_chars;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
68
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
69 /* A char-table. An elemnent is a column-width of the corresponding
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
70 character. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
71 Lisp_Object Vchar_width_table;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
72
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
73 /* A char-table. An element is a symbol indicating the direction
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
74 property of corresponding character. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
75 Lisp_Object Vchar_direction_table;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
76
89020
b0277093a5f2 (_fetch_multibyte_char_len): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 88990
diff changeset
77 /* Variable used locally in the macro FETCH_MULTIBYTE_CHAR. */
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
78 unsigned char *_fetch_multibyte_char_p;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
79
88913
76074dea1258 (Vscript_alist): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 88878
diff changeset
80 /* Char table of scripts. */
76074dea1258 (Vscript_alist): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 88878
diff changeset
81 Lisp_Object Vchar_script_table;
76074dea1258 (Vscript_alist): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 88878
diff changeset
82
90403
81f1bbab281f (Vscript_representative_chars): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90256
diff changeset
83 /* Alist of scripts vs representative characters. */
81f1bbab281f (Vscript_representative_chars): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90256
diff changeset
84 Lisp_Object Vscript_representative_chars;
81f1bbab281f (Vscript_representative_chars): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90256
diff changeset
85
88913
76074dea1258 (Vscript_alist): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 88878
diff changeset
86 static Lisp_Object Qchar_script_table;
76074dea1258 (Vscript_alist): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 88878
diff changeset
87
97816
9999d9194509 (Vunicode_category_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 96501
diff changeset
88 Lisp_Object Vunicode_category_table;
9999d9194509 (Vunicode_category_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 96501
diff changeset
89
89054
8a6da305ac40 (unibyte_to_multibyte_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89029
diff changeset
90 /* Mapping table from unibyte chars to multibyte chars. */
8a6da305ac40 (unibyte_to_multibyte_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89029
diff changeset
91 int unibyte_to_multibyte_table[256];
88878
a0ae1a5876c7 (Vscript_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 88853
diff changeset
92
90020
680f4ba0cdc9 (unibyte_has_multibyte_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89911
diff changeset
93 /* Nth element is 1 iff unibyte char N can be mapped to a multibyte
680f4ba0cdc9 (unibyte_has_multibyte_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89911
diff changeset
94 char. */
680f4ba0cdc9 (unibyte_has_multibyte_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89911
diff changeset
95 char unibyte_has_multibyte_table[256];
680f4ba0cdc9 (unibyte_has_multibyte_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89911
diff changeset
96
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
97
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
98
92483
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
99 /* If character code C has modifier masks, reflect them to the
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
100 character code if possible. Return the resulting code. */
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
101
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
102 int
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
103 char_resolve_modifier_mask (c)
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
104 int c;
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
105 {
92494
b5a82292599c (char_resolve_modifier_mask): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 92483
diff changeset
106 /* A non-ASCII character can't reflect modifier bits to the code. */
92483
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
107 if (! ASCII_CHAR_P ((c & ~CHAR_MODIFIER_MASK)))
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
108 return c;
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
109
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
110 /* For Meta, Shift, and Control modifiers, we need special care. */
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
111 if (c & CHAR_SHIFT)
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
112 {
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
113 /* Shift modifier is valid only with [A-Za-z]. */
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
114 if ((c & 0377) >= 'A' && (c & 0377) <= 'Z')
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
115 c &= ~CHAR_SHIFT;
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
116 else if ((c & 0377) >= 'a' && (c & 0377) <= 'z')
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
117 c = (c & ~CHAR_SHIFT) - ('a' - 'A');
92499
88d1a8b0752e (char_resolve_modifier_mask): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 92494
diff changeset
118 /* Shift modifier for control characters and SPC is ignored. */
88d1a8b0752e (char_resolve_modifier_mask): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 92494
diff changeset
119 else if ((c & ~CHAR_MODIFIER_MASK) <= 0x20)
92494
b5a82292599c (char_resolve_modifier_mask): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 92483
diff changeset
120 c &= ~CHAR_SHIFT;
b5a82292599c (char_resolve_modifier_mask): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 92483
diff changeset
121 }
92483
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
122 if (c & CHAR_CTL)
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
123 {
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
124 /* Simulate the code in lread.c. */
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
125 /* Allow `\C- ' and `\C-?'. */
92499
88d1a8b0752e (char_resolve_modifier_mask): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 92494
diff changeset
126 if ((c & 0377) == ' ')
88d1a8b0752e (char_resolve_modifier_mask): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 92494
diff changeset
127 c &= ~0177 & ~ CHAR_CTL;
88d1a8b0752e (char_resolve_modifier_mask): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 92494
diff changeset
128 else if ((c & 0377) == '?')
88d1a8b0752e (char_resolve_modifier_mask): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 92494
diff changeset
129 c = 0177 | (c & ~0177 & ~CHAR_CTL);
92483
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
130 /* ASCII control chars are made from letters (both cases),
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
131 as well as the non-letters within 0100...0137. */
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
132 else if ((c & 0137) >= 0101 && (c & 0137) <= 0132)
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
133 c &= (037 | (~0177 & ~CHAR_CTL));
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
134 else if ((c & 0177) >= 0100 && (c & 0177) <= 0137)
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
135 c &= (037 | (~0177 & ~CHAR_CTL));
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
136 }
92499
88d1a8b0752e (char_resolve_modifier_mask): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 92494
diff changeset
137 if (c & CHAR_META)
88d1a8b0752e (char_resolve_modifier_mask): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 92494
diff changeset
138 {
88d1a8b0752e (char_resolve_modifier_mask): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 92494
diff changeset
139 /* Move the meta bit to the right place for a string. */
88d1a8b0752e (char_resolve_modifier_mask): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 92494
diff changeset
140 c = (c & ~CHAR_META) | 0x80;
88d1a8b0752e (char_resolve_modifier_mask): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 92494
diff changeset
141 }
92483
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
142
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
143 return c;
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
144 }
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
145
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
146
89888
cfd942ddfdab *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89757
diff changeset
147 /* Store multibyte form of character C at P. If C has modifier bits,
cfd942ddfdab *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89757
diff changeset
148 handle them appropriately. */
cfd942ddfdab *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89757
diff changeset
149
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
150 int
89181
be75d5934738 (char_string): Renamed from
Kenichi Handa <handa@m17n.org>
parents: 89054
diff changeset
151 char_string (c, p)
90797
b74794d7f11a (char_string): Type of arg C changed to unsigned.
Kenichi Handa <handa@m17n.org>
parents: 90761
diff changeset
152 unsigned c;
88427
1a3aec316071 (c_string_width): Add return type `int'.
Kenichi Handa <handa@m17n.org>
parents: 88363
diff changeset
153 unsigned char *p;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
154 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
155 int bytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
156
89181
be75d5934738 (char_string): Renamed from
Kenichi Handa <handa@m17n.org>
parents: 89054
diff changeset
157 if (c & CHAR_MODIFIER_MASK)
be75d5934738 (char_string): Renamed from
Kenichi Handa <handa@m17n.org>
parents: 89054
diff changeset
158 {
92483
95fab6416567 (char_resolve_modifier_mask): New function.
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
159 c = (unsigned) char_resolve_modifier_mask ((int) c);
89181
be75d5934738 (char_string): Renamed from
Kenichi Handa <handa@m17n.org>
parents: 89054
diff changeset
160 /* If C still has any modifier bits, just ignore it. */
be75d5934738 (char_string): Renamed from
Kenichi Handa <handa@m17n.org>
parents: 89054
diff changeset
161 c &= ~CHAR_MODIFIER_MASK;
be75d5934738 (char_string): Renamed from
Kenichi Handa <handa@m17n.org>
parents: 89054
diff changeset
162 }
be75d5934738 (char_string): Renamed from
Kenichi Handa <handa@m17n.org>
parents: 89054
diff changeset
163
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
164 MAYBE_UNIFY_CHAR (c);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
165
89181
be75d5934738 (char_string): Renamed from
Kenichi Handa <handa@m17n.org>
parents: 89054
diff changeset
166 if (c <= MAX_3_BYTE_CHAR)
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
167 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
168 bytes = CHAR_STRING (c, p);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
169 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
170 else if (c <= MAX_4_BYTE_CHAR)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
171 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
172 p[0] = (0xF0 | (c >> 18));
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
173 p[1] = (0x80 | ((c >> 12) & 0x3F));
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
174 p[2] = (0x80 | ((c >> 6) & 0x3F));
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
175 p[3] = (0x80 | (c & 0x3F));
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
176 bytes = 4;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
177 }
89181
be75d5934738 (char_string): Renamed from
Kenichi Handa <handa@m17n.org>
parents: 89054
diff changeset
178 else if (c <= MAX_5_BYTE_CHAR)
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
179 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
180 p[0] = 0xF8;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
181 p[1] = (0x80 | ((c >> 18) & 0x0F));
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
182 p[2] = (0x80 | ((c >> 12) & 0x3F));
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
183 p[3] = (0x80 | ((c >> 6) & 0x3F));
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
184 p[4] = (0x80 | (c & 0x3F));
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
185 bytes = 5;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
186 }
90797
b74794d7f11a (char_string): Type of arg C changed to unsigned.
Kenichi Handa <handa@m17n.org>
parents: 90761
diff changeset
187 else if (c <= MAX_CHAR)
89181
be75d5934738 (char_string): Renamed from
Kenichi Handa <handa@m17n.org>
parents: 89054
diff changeset
188 {
be75d5934738 (char_string): Renamed from
Kenichi Handa <handa@m17n.org>
parents: 89054
diff changeset
189 c = CHAR_TO_BYTE8 (c);
be75d5934738 (char_string): Renamed from
Kenichi Handa <handa@m17n.org>
parents: 89054
diff changeset
190 bytes = BYTE8_STRING (c, p);
be75d5934738 (char_string): Renamed from
Kenichi Handa <handa@m17n.org>
parents: 89054
diff changeset
191 }
90797
b74794d7f11a (char_string): Type of arg C changed to unsigned.
Kenichi Handa <handa@m17n.org>
parents: 90761
diff changeset
192 else
b74794d7f11a (char_string): Type of arg C changed to unsigned.
Kenichi Handa <handa@m17n.org>
parents: 90761
diff changeset
193 error ("Invalid character: %d", c);
88427
1a3aec316071 (c_string_width): Add return type `int'.
Kenichi Handa <handa@m17n.org>
parents: 88363
diff changeset
194
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
195 return bytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
196 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
197
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
198
89888
cfd942ddfdab *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89757
diff changeset
199 /* Return a character whose multibyte form is at P. Set LEN is not
cfd942ddfdab *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89757
diff changeset
200 NULL, it must be a pointer to integer. In that case, set *LEN to
cfd942ddfdab *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89757
diff changeset
201 the byte length of the multibyte form. If ADVANCED is not NULL, is
cfd942ddfdab *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89757
diff changeset
202 must be a pointer to unsigned char. In that case, set *ADVANCED to
cfd942ddfdab *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89757
diff changeset
203 the ending address (i.e. the starting address of the next
cfd942ddfdab *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89757
diff changeset
204 character) of the multibyte form. */
cfd942ddfdab *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89757
diff changeset
205
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
206 int
89181
be75d5934738 (char_string): Renamed from
Kenichi Handa <handa@m17n.org>
parents: 89054
diff changeset
207 string_char (p, advanced, len)
88878
a0ae1a5876c7 (Vscript_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 88853
diff changeset
208 const unsigned char *p;
a0ae1a5876c7 (Vscript_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 88853
diff changeset
209 const unsigned char **advanced;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
210 int *len;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
211 {
88427
1a3aec316071 (c_string_width): Add return type `int'.
Kenichi Handa <handa@m17n.org>
parents: 88363
diff changeset
212 int c;
88878
a0ae1a5876c7 (Vscript_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 88853
diff changeset
213 const unsigned char *saved_p = p;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
214
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
215 if (*p < 0x80 || ! (*p & 0x20) || ! (*p & 0x10))
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
216 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
217 c = STRING_CHAR_ADVANCE (p);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
218 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
219 else if (! (*p & 0x08))
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
220 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
221 c = ((((p)[0] & 0xF) << 18)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
222 | (((p)[1] & 0x3F) << 12)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
223 | (((p)[2] & 0x3F) << 6)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
224 | ((p)[3] & 0x3F));
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
225 p += 4;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
226 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
227 else
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
228 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
229 c = ((((p)[1] & 0x3F) << 18)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
230 | (((p)[2] & 0x3F) << 12)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
231 | (((p)[3] & 0x3F) << 6)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
232 | ((p)[4] & 0x3F));
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
233 p += 5;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
234 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
235
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
236 MAYBE_UNIFY_CHAR (c);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
237
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
238 if (len)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
239 *len = p - saved_p;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
240 if (advanced)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
241 *advanced = p;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
242 return c;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
243 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
244
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
245
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
246 /* Translate character C by translation table TABLE. If C is
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
247 negative, translate a character specified by CHARSET and CODE. If
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
248 no translation is found in TABLE, return the untranslated
89757
482c15940000 (translate_char): Accept list of translation tables.
Kenichi Handa <handa@m17n.org>
parents: 89538
diff changeset
249 character. If TABLE is a list, elements are char tables. In this
482c15940000 (translate_char): Accept list of translation tables.
Kenichi Handa <handa@m17n.org>
parents: 89538
diff changeset
250 case, translace C by all tables. */
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
251
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
252 int
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
253 translate_char (table, c)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
254 Lisp_Object table;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
255 int c;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
256 {
89757
482c15940000 (translate_char): Accept list of translation tables.
Kenichi Handa <handa@m17n.org>
parents: 89538
diff changeset
257 if (CHAR_TABLE_P (table))
482c15940000 (translate_char): Accept list of translation tables.
Kenichi Handa <handa@m17n.org>
parents: 89538
diff changeset
258 {
482c15940000 (translate_char): Accept list of translation tables.
Kenichi Handa <handa@m17n.org>
parents: 89538
diff changeset
259 Lisp_Object ch;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
260
89757
482c15940000 (translate_char): Accept list of translation tables.
Kenichi Handa <handa@m17n.org>
parents: 89538
diff changeset
261 ch = CHAR_TABLE_REF (table, c);
482c15940000 (translate_char): Accept list of translation tables.
Kenichi Handa <handa@m17n.org>
parents: 89538
diff changeset
262 if (CHARACTERP (ch))
482c15940000 (translate_char): Accept list of translation tables.
Kenichi Handa <handa@m17n.org>
parents: 89538
diff changeset
263 c = XINT (ch);
482c15940000 (translate_char): Accept list of translation tables.
Kenichi Handa <handa@m17n.org>
parents: 89538
diff changeset
264 }
482c15940000 (translate_char): Accept list of translation tables.
Kenichi Handa <handa@m17n.org>
parents: 89538
diff changeset
265 else
482c15940000 (translate_char): Accept list of translation tables.
Kenichi Handa <handa@m17n.org>
parents: 89538
diff changeset
266 {
482c15940000 (translate_char): Accept list of translation tables.
Kenichi Handa <handa@m17n.org>
parents: 89538
diff changeset
267 for (; CONSP (table); table = XCDR (table))
482c15940000 (translate_char): Accept list of translation tables.
Kenichi Handa <handa@m17n.org>
parents: 89538
diff changeset
268 c = translate_char (XCAR (table), c);
482c15940000 (translate_char): Accept list of translation tables.
Kenichi Handa <handa@m17n.org>
parents: 89538
diff changeset
269 }
482c15940000 (translate_char): Accept list of translation tables.
Kenichi Handa <handa@m17n.org>
parents: 89538
diff changeset
270 return c;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
271 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
272
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
273 /* Convert the multibyte character C to unibyte 8-bit character based
88983
2d504d707ce6 (unibyte_char_to_multibyte): Refer to
Kenichi Handa <handa@m17n.org>
parents: 88947
diff changeset
274 on the current value of charset_unibyte. If dimension of
2d504d707ce6 (unibyte_char_to_multibyte): Refer to
Kenichi Handa <handa@m17n.org>
parents: 88947
diff changeset
275 charset_unibyte is more than one, return (C & 0xFF).
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
276
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
277 The argument REV_TBL is now ignored. It will be removed in the
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
278 future. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
279
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
280 int
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
281 multibyte_char_to_unibyte (c, rev_tbl)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
282 int c;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
283 Lisp_Object rev_tbl;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
284 {
89054
8a6da305ac40 (unibyte_to_multibyte_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89029
diff changeset
285 struct charset *charset;
8a6da305ac40 (unibyte_to_multibyte_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89029
diff changeset
286 unsigned c1;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
287
89054
8a6da305ac40 (unibyte_to_multibyte_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89029
diff changeset
288 if (CHAR_BYTE8_P (c))
8a6da305ac40 (unibyte_to_multibyte_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89029
diff changeset
289 return CHAR_TO_BYTE8 (c);
8a6da305ac40 (unibyte_to_multibyte_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89029
diff changeset
290 charset = CHARSET_FROM_ID (charset_unibyte);
8a6da305ac40 (unibyte_to_multibyte_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89029
diff changeset
291 c1 = ENCODE_CHAR (charset, c);
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
292 return ((c1 != CHARSET_INVALID_CODE (charset)) ? c1 : c & 0xFF);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
293 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
294
90761
2951f3d44eba (multibyte_char_to_unibyte_safe): New function.
Kenichi Handa <handa@m17n.org>
parents: 90424
diff changeset
295 /* Like multibyte_char_to_unibyte, but return -1 if C is not supported
2951f3d44eba (multibyte_char_to_unibyte_safe): New function.
Kenichi Handa <handa@m17n.org>
parents: 90424
diff changeset
296 by charset_unibyte. */
2951f3d44eba (multibyte_char_to_unibyte_safe): New function.
Kenichi Handa <handa@m17n.org>
parents: 90424
diff changeset
297
2951f3d44eba (multibyte_char_to_unibyte_safe): New function.
Kenichi Handa <handa@m17n.org>
parents: 90424
diff changeset
298 int
2951f3d44eba (multibyte_char_to_unibyte_safe): New function.
Kenichi Handa <handa@m17n.org>
parents: 90424
diff changeset
299 multibyte_char_to_unibyte_safe (c)
2951f3d44eba (multibyte_char_to_unibyte_safe): New function.
Kenichi Handa <handa@m17n.org>
parents: 90424
diff changeset
300 int c;
2951f3d44eba (multibyte_char_to_unibyte_safe): New function.
Kenichi Handa <handa@m17n.org>
parents: 90424
diff changeset
301 {
2951f3d44eba (multibyte_char_to_unibyte_safe): New function.
Kenichi Handa <handa@m17n.org>
parents: 90424
diff changeset
302 struct charset *charset;
2951f3d44eba (multibyte_char_to_unibyte_safe): New function.
Kenichi Handa <handa@m17n.org>
parents: 90424
diff changeset
303 unsigned c1;
2951f3d44eba (multibyte_char_to_unibyte_safe): New function.
Kenichi Handa <handa@m17n.org>
parents: 90424
diff changeset
304
2951f3d44eba (multibyte_char_to_unibyte_safe): New function.
Kenichi Handa <handa@m17n.org>
parents: 90424
diff changeset
305 if (CHAR_BYTE8_P (c))
2951f3d44eba (multibyte_char_to_unibyte_safe): New function.
Kenichi Handa <handa@m17n.org>
parents: 90424
diff changeset
306 return CHAR_TO_BYTE8 (c);
2951f3d44eba (multibyte_char_to_unibyte_safe): New function.
Kenichi Handa <handa@m17n.org>
parents: 90424
diff changeset
307 charset = CHARSET_FROM_ID (charset_unibyte);
2951f3d44eba (multibyte_char_to_unibyte_safe): New function.
Kenichi Handa <handa@m17n.org>
parents: 90424
diff changeset
308 c1 = ENCODE_CHAR (charset, c);
2951f3d44eba (multibyte_char_to_unibyte_safe): New function.
Kenichi Handa <handa@m17n.org>
parents: 90424
diff changeset
309 return ((c1 != CHARSET_INVALID_CODE (charset)) ? c1 : -1);
2951f3d44eba (multibyte_char_to_unibyte_safe): New function.
Kenichi Handa <handa@m17n.org>
parents: 90424
diff changeset
310 }
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
311
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
312 DEFUN ("characterp", Fcharacterp, Scharacterp, 1, 2, 0,
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
313 doc: /* Return non-nil if OBJECT is a character. */)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
314 (object, ignore)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
315 Lisp_Object object, ignore;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
316 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
317 return (CHARACTERP (object) ? Qt : Qnil);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
318 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
319
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
320 DEFUN ("max-char", Fmax_char, Smax_char, 0, 0, 0,
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
321 doc: /* Return the character of the maximum code. */)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
322 ()
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
323 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
324 return make_number (MAX_CHAR);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
325 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
326
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
327 DEFUN ("unibyte-char-to-multibyte", Funibyte_char_to_multibyte,
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
328 Sunibyte_char_to_multibyte, 1, 1, 0,
94146
096ad76b9ccf (Fmultibyte_char_to_unibyte): Return latin1 chars unchanged.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94114
diff changeset
329 doc: /* Convert the byte CH to multibyte character. */)
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
330 (ch)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
331 Lisp_Object ch;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
332 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
333 int c;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
334 struct charset *charset;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
335
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
336 CHECK_CHARACTER (ch);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
337 c = XFASTINT (ch);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
338 if (c >= 0400)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
339 error ("Invalid unibyte character: %d", c);
88983
2d504d707ce6 (unibyte_char_to_multibyte): Refer to
Kenichi Handa <handa@m17n.org>
parents: 88947
diff changeset
340 charset = CHARSET_FROM_ID (charset_unibyte);
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
341 c = DECODE_CHAR (charset, c);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
342 if (c < 0)
88947
894b8bce3208 (Funibyte_char_to_multibyte): If C can't be decoded
Kenichi Handa <handa@m17n.org>
parents: 88926
diff changeset
343 c = BYTE8_TO_CHAR (XFASTINT (ch));
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
344 return make_number (c);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
345 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
346
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
347 DEFUN ("multibyte-char-to-unibyte", Fmultibyte_char_to_unibyte,
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
348 Smultibyte_char_to_unibyte, 1, 1, 0,
94146
096ad76b9ccf (Fmultibyte_char_to_unibyte): Return latin1 chars unchanged.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94114
diff changeset
349 doc: /* Convert the multibyte character CH to a byte.
096ad76b9ccf (Fmultibyte_char_to_unibyte): Return latin1 chars unchanged.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94114
diff changeset
350 If the multibyte character does not represent a byte, return -1. */)
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
351 (ch)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
352 Lisp_Object ch;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
353 {
94146
096ad76b9ccf (Fmultibyte_char_to_unibyte): Return latin1 chars unchanged.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94114
diff changeset
354 int cm;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
355
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
356 CHECK_CHARACTER (ch);
94146
096ad76b9ccf (Fmultibyte_char_to_unibyte): Return latin1 chars unchanged.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94114
diff changeset
357 cm = XFASTINT (ch);
096ad76b9ccf (Fmultibyte_char_to_unibyte): Return latin1 chars unchanged.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94114
diff changeset
358 if (cm < 256)
096ad76b9ccf (Fmultibyte_char_to_unibyte): Return latin1 chars unchanged.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94114
diff changeset
359 /* Can't distinguish a byte read from a unibyte buffer from
096ad76b9ccf (Fmultibyte_char_to_unibyte): Return latin1 chars unchanged.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94114
diff changeset
360 a latin1 char, so let's let it slide. */
096ad76b9ccf (Fmultibyte_char_to_unibyte): Return latin1 chars unchanged.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94114
diff changeset
361 return ch;
096ad76b9ccf (Fmultibyte_char_to_unibyte): Return latin1 chars unchanged.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94114
diff changeset
362 else
096ad76b9ccf (Fmultibyte_char_to_unibyte): Return latin1 chars unchanged.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94114
diff changeset
363 {
95856
f13a77e0e34f * character.h (CHAR_TO_BYTE_SAFE): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94963
diff changeset
364 int cu = CHAR_TO_BYTE_SAFE (cm);
94146
096ad76b9ccf (Fmultibyte_char_to_unibyte): Return latin1 chars unchanged.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94114
diff changeset
365 return make_number (cu);
096ad76b9ccf (Fmultibyte_char_to_unibyte): Return latin1 chars unchanged.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94114
diff changeset
366 }
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
367 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
368
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
369 DEFUN ("char-bytes", Fchar_bytes, Schar_bytes, 1, 1, 0,
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
370 doc: /* Return 1 regardless of the argument CHAR.
94114
327f7207ff7e (Fchar_bytes, Fchar_width, Fstring_width, Fchar_direction):
Juanma Barranquero <lekktu@gmail.com>
parents: 92499
diff changeset
371 This is now an obsolete function. We keep it just for backward compatibility.
327f7207ff7e (Fchar_bytes, Fchar_width, Fstring_width, Fchar_direction):
Juanma Barranquero <lekktu@gmail.com>
parents: 92499
diff changeset
372 usage: (char-bytes CHAR) */)
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
373 (ch)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
374 Lisp_Object ch;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
375 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
376 CHECK_CHARACTER (ch);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
377 return make_number (1);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
378 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
379
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
380 DEFUN ("char-width", Fchar_width, Schar_width, 1, 1, 0,
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
381 doc: /* Return width of CHAR when displayed in the current buffer.
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
382 The width is measured by how many columns it occupies on the screen.
94114
327f7207ff7e (Fchar_bytes, Fchar_width, Fstring_width, Fchar_direction):
Juanma Barranquero <lekktu@gmail.com>
parents: 92499
diff changeset
383 Tab is taken to occupy `tab-width' columns.
327f7207ff7e (Fchar_bytes, Fchar_width, Fstring_width, Fchar_direction):
Juanma Barranquero <lekktu@gmail.com>
parents: 92499
diff changeset
384 usage: (char-width CHAR) */)
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
385 (ch)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
386 Lisp_Object ch;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
387 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
388 Lisp_Object disp;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
389 int c, width;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
390 struct Lisp_Char_Table *dp = buffer_display_table ();
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
391
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
392 CHECK_CHARACTER (ch);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
393 c = XINT (ch);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
394
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
395 /* Get the way the display table would display it. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
396 disp = dp ? DISP_CHAR_VECTOR (dp, c) : Qnil;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
397
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
398 if (VECTORP (disp))
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
399 width = ASIZE (disp);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
400 else
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
401 width = CHAR_WIDTH (c);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
402
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
403 return make_number (width);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
404 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
405
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
406 /* Return width of string STR of length LEN when displayed in the
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
407 current buffer. The width is measured by how many columns it
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
408 occupies on the screen. If PRECISION > 0, return the width of
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
409 longest substring that doesn't exceed PRECISION, and set number of
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
410 characters and bytes of the substring in *NCHARS and *NBYTES
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
411 respectively. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
412
88427
1a3aec316071 (c_string_width): Add return type `int'.
Kenichi Handa <handa@m17n.org>
parents: 88363
diff changeset
413 int
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
414 c_string_width (str, len, precision, nchars, nbytes)
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
415 const unsigned char *str;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
416 int precision, *nchars, *nbytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
417 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
418 int i = 0, i_byte = 0;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
419 int width = 0;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
420 struct Lisp_Char_Table *dp = buffer_display_table ();
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
421
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
422 while (i_byte < len)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
423 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
424 int bytes, thiswidth;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
425 Lisp_Object val;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
426 int c = STRING_CHAR_AND_LENGTH (str + i_byte, len - i_byte, bytes);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
427
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
428 if (dp)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
429 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
430 val = DISP_CHAR_VECTOR (dp, c);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
431 if (VECTORP (val))
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
432 thiswidth = XVECTOR (val)->size;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
433 else
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
434 thiswidth = CHAR_WIDTH (c);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
435 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
436 else
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
437 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
438 thiswidth = CHAR_WIDTH (c);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
439 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
440
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
441 if (precision > 0
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
442 && (width + thiswidth > precision))
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
443 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
444 *nchars = i;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
445 *nbytes = i_byte;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
446 return width;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
447 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
448 i++;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
449 i_byte += bytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
450 width += thiswidth;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
451 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
452
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
453 if (precision > 0)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
454 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
455 *nchars = i;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
456 *nbytes = i_byte;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
457 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
458
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
459 return width;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
460 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
461
88427
1a3aec316071 (c_string_width): Add return type `int'.
Kenichi Handa <handa@m17n.org>
parents: 88363
diff changeset
462 /* Return width of string STR of length LEN when displayed in the
1a3aec316071 (c_string_width): Add return type `int'.
Kenichi Handa <handa@m17n.org>
parents: 88363
diff changeset
463 current buffer. The width is measured by how many columns it
1a3aec316071 (c_string_width): Add return type `int'.
Kenichi Handa <handa@m17n.org>
parents: 88363
diff changeset
464 occupies on the screen. */
1a3aec316071 (c_string_width): Add return type `int'.
Kenichi Handa <handa@m17n.org>
parents: 88363
diff changeset
465
1a3aec316071 (c_string_width): Add return type `int'.
Kenichi Handa <handa@m17n.org>
parents: 88363
diff changeset
466 int
1a3aec316071 (c_string_width): Add return type `int'.
Kenichi Handa <handa@m17n.org>
parents: 88363
diff changeset
467 strwidth (str, len)
1a3aec316071 (c_string_width): Add return type `int'.
Kenichi Handa <handa@m17n.org>
parents: 88363
diff changeset
468 unsigned char *str;
1a3aec316071 (c_string_width): Add return type `int'.
Kenichi Handa <handa@m17n.org>
parents: 88363
diff changeset
469 int len;
1a3aec316071 (c_string_width): Add return type `int'.
Kenichi Handa <handa@m17n.org>
parents: 88363
diff changeset
470 {
1a3aec316071 (c_string_width): Add return type `int'.
Kenichi Handa <handa@m17n.org>
parents: 88363
diff changeset
471 return c_string_width (str, len, -1, NULL, NULL);
1a3aec316071 (c_string_width): Add return type `int'.
Kenichi Handa <handa@m17n.org>
parents: 88363
diff changeset
472 }
1a3aec316071 (c_string_width): Add return type `int'.
Kenichi Handa <handa@m17n.org>
parents: 88363
diff changeset
473
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
474 /* Return width of Lisp string STRING when displayed in the current
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
475 buffer. The width is measured by how many columns it occupies on
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
476 the screen while paying attention to compositions. If PRECISION >
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
477 0, return the width of longest substring that doesn't exceed
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
478 PRECISION, and set number of characters and bytes of the substring
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
479 in *NCHARS and *NBYTES respectively. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
480
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
481 int
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
482 lisp_string_width (string, precision, nchars, nbytes)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
483 Lisp_Object string;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
484 int precision, *nchars, *nbytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
485 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
486 int len = SCHARS (string);
90256
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
487 /* This set multibyte to 0 even if STRING is multibyte when it
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
488 contains only ascii and eight-bit-graphic, but that's
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
489 intentional. */
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
490 int multibyte = len < SBYTES (string);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
491 unsigned char *str = SDATA (string);
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
492 int i = 0, i_byte = 0;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
493 int width = 0;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
494 struct Lisp_Char_Table *dp = buffer_display_table ();
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
495
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
496 while (i < len)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
497 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
498 int chars, bytes, thiswidth;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
499 Lisp_Object val;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
500 int cmp_id;
89511
bae1254b8517 (lisp_string_width): Make ignore and end EMACS_INT.
Dave Love <fx@gnu.org>
parents: 89483
diff changeset
501 EMACS_INT ignore, end;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
502
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
503 if (find_composition (i, -1, &ignore, &end, &val, string)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
504 && ((cmp_id = get_composition_id (i, i_byte, end - i, val, string))
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
505 >= 0))
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
506 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
507 thiswidth = composition_table[cmp_id]->width;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
508 chars = end - i;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
509 bytes = string_char_to_byte (string, end) - i_byte;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
510 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
511 else
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
512 {
90256
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
513 int c;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
514
90256
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
515 if (multibyte)
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
516 c = STRING_CHAR_AND_LENGTH (str + i_byte, len - i_byte, bytes);
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
517 else
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
518 c = str[i_byte], bytes = 1;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
519 chars = 1;
90256
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
520 if (dp)
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
521 {
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
522 val = DISP_CHAR_VECTOR (dp, c);
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
523 if (VECTORP (val))
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
524 thiswidth = XVECTOR (val)->size;
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
525 else
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
526 thiswidth = CHAR_WIDTH (c);
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
527 }
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
528 else
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
529 {
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
530 thiswidth = CHAR_WIDTH (c);
d4755c5aa57d (lisp_string_width): Check multibyteness of STRING.
Kenichi Handa <handa@m17n.org>
parents: 90159
diff changeset
531 }
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
532 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
533
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
534 if (precision > 0
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
535 && (width + thiswidth > precision))
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
536 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
537 *nchars = i;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
538 *nbytes = i_byte;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
539 return width;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
540 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
541 i += chars;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
542 i_byte += bytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
543 width += thiswidth;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
544 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
545
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
546 if (precision > 0)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
547 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
548 *nchars = i;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
549 *nbytes = i_byte;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
550 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
551
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
552 return width;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
553 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
554
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
555 DEFUN ("string-width", Fstring_width, Sstring_width, 1, 1, 0,
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
556 doc: /* Return width of STRING when displayed in the current buffer.
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
557 Width is measured by how many columns it occupies on the screen.
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
558 When calculating width of a multibyte character in STRING,
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
559 only the base leading-code is considered; the validity of
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
560 the following bytes is not checked. Tabs in STRING are always
94114
327f7207ff7e (Fchar_bytes, Fchar_width, Fstring_width, Fchar_direction):
Juanma Barranquero <lekktu@gmail.com>
parents: 92499
diff changeset
561 taken to occupy `tab-width' columns.
327f7207ff7e (Fchar_bytes, Fchar_width, Fstring_width, Fchar_direction):
Juanma Barranquero <lekktu@gmail.com>
parents: 92499
diff changeset
562 usage: (string-width STRING) */)
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
563 (str)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
564 Lisp_Object str;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
565 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
566 Lisp_Object val;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
567
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
568 CHECK_STRING (str);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
569 XSETFASTINT (val, lisp_string_width (str, -1, NULL, NULL));
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
570 return val;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
571 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
572
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
573 DEFUN ("char-direction", Fchar_direction, Schar_direction, 1, 1, 0,
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
574 doc: /* Return the direction of CHAR.
94114
327f7207ff7e (Fchar_bytes, Fchar_width, Fstring_width, Fchar_direction):
Juanma Barranquero <lekktu@gmail.com>
parents: 92499
diff changeset
575 The returned value is 0 for left-to-right and 1 for right-to-left.
327f7207ff7e (Fchar_bytes, Fchar_width, Fstring_width, Fchar_direction):
Juanma Barranquero <lekktu@gmail.com>
parents: 92499
diff changeset
576 usage: (char-direction CHAR) */)
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
577 (ch)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
578 Lisp_Object ch;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
579 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
580 int c;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
581
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
582 CHECK_CHARACTER (ch);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
583 c = XINT (ch);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
584 return CHAR_TABLE_REF (Vchar_direction_table, c);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
585 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
586
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
587 /* Return the number of characters in the NBYTES bytes at PTR.
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
588 This works by looking at the contents and checking for multibyte
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
589 sequences while assuming that there's no invalid sequence.
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
590 However, if the current buffer has enable-multibyte-characters =
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
591 nil, we treat each byte as a character. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
592
91807
507bcfb4342c * coding.c (coding_set_destination): Use BEG_BYTE rather than hardcoding 1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91443
diff changeset
593 EMACS_INT
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
594 chars_in_text (ptr, nbytes)
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
595 const unsigned char *ptr;
91807
507bcfb4342c * coding.c (coding_set_destination): Use BEG_BYTE rather than hardcoding 1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91443
diff changeset
596 EMACS_INT nbytes;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
597 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
598 /* current_buffer is null at early stages of Emacs initialization. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
599 if (current_buffer == 0
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
600 || NILP (current_buffer->enable_multibyte_characters))
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
601 return nbytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
602
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
603 return multibyte_chars_in_text (ptr, nbytes);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
604 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
605
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
606 /* Return the number of characters in the NBYTES bytes at PTR.
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
607 This works by looking at the contents and checking for multibyte
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
608 sequences while assuming that there's no invalid sequence. It
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
609 ignores enable-multibyte-characters. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
610
91807
507bcfb4342c * coding.c (coding_set_destination): Use BEG_BYTE rather than hardcoding 1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91443
diff changeset
611 EMACS_INT
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
612 multibyte_chars_in_text (ptr, nbytes)
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
613 const unsigned char *ptr;
91807
507bcfb4342c * coding.c (coding_set_destination): Use BEG_BYTE rather than hardcoding 1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91443
diff changeset
614 EMACS_INT nbytes;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
615 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
616 const unsigned char *endp = ptr + nbytes;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
617 int chars = 0;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
618
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
619 while (ptr < endp)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
620 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
621 int len = MULTIBYTE_LENGTH (ptr, endp);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
622
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
623 if (len == 0)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
624 abort ();
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
625 ptr += len;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
626 chars++;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
627 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
628
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
629 return chars;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
630 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
631
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
632 /* Parse unibyte text at STR of LEN bytes as a multibyte text, count
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
633 characters and bytes in it, and store them in *NCHARS and *NBYTES
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
634 respectively. On counting bytes, pay attention to that 8-bit
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
635 characters not constructing a valid multibyte sequence are
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
636 represented by 2-byte in a multibyte text. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
637
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
638 void
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
639 parse_str_as_multibyte (str, len, nchars, nbytes)
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
640 const unsigned char *str;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
641 int len, *nchars, *nbytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
642 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
643 const unsigned char *endp = str + len;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
644 int n, chars = 0, bytes = 0;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
645
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
646 if (len >= MAX_MULTIBYTE_LENGTH)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
647 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
648 const unsigned char *adjusted_endp = endp - MAX_MULTIBYTE_LENGTH;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
649 while (str < adjusted_endp)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
650 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
651 if ((n = MULTIBYTE_LENGTH_NO_CHECK (str)) > 0)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
652 str += n, bytes += n;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
653 else
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
654 str++, bytes += 2;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
655 chars++;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
656 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
657 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
658 while (str < endp)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
659 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
660 if ((n = MULTIBYTE_LENGTH (str, endp)) > 0)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
661 str += n, bytes += n;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
662 else
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
663 str++, bytes += 2;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
664 chars++;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
665 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
666
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
667 *nchars = chars;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
668 *nbytes = bytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
669 return;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
670 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
671
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
672 /* Arrange unibyte text at STR of NBYTES bytes as a multibyte text.
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
673 It actually converts only such 8-bit characters that don't contruct
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
674 a multibyte sequence to multibyte forms of Latin-1 characters. If
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
675 NCHARS is nonzero, set *NCHARS to the number of characters in the
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
676 text. It is assured that we can use LEN bytes at STR as a work
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
677 area and that is enough. Return the number of bytes of the
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
678 resulting text. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
679
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
680 int
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
681 str_as_multibyte (str, len, nbytes, nchars)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
682 unsigned char *str;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
683 int len, nbytes, *nchars;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
684 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
685 unsigned char *p = str, *endp = str + nbytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
686 unsigned char *to;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
687 int chars = 0;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
688 int n;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
689
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
690 if (nbytes >= MAX_MULTIBYTE_LENGTH)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
691 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
692 unsigned char *adjusted_endp = endp - MAX_MULTIBYTE_LENGTH;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
693 while (p < adjusted_endp
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
694 && (n = MULTIBYTE_LENGTH_NO_CHECK (p)) > 0)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
695 p += n, chars++;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
696 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
697 while ((n = MULTIBYTE_LENGTH (p, endp)) > 0)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
698 p += n, chars++;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
699 if (nchars)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
700 *nchars = chars;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
701 if (p == endp)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
702 return nbytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
703
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
704 to = p;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
705 nbytes = endp - p;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
706 endp = str + len;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
707 safe_bcopy ((char *) p, (char *) (endp - nbytes), nbytes);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
708 p = endp - nbytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
709
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
710 if (nbytes >= MAX_MULTIBYTE_LENGTH)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
711 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
712 unsigned char *adjusted_endp = endp - MAX_MULTIBYTE_LENGTH;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
713 while (p < adjusted_endp)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
714 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
715 if ((n = MULTIBYTE_LENGTH_NO_CHECK (p)) > 0)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
716 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
717 while (n--)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
718 *to++ = *p++;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
719 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
720 else
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
721 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
722 int c = *p++;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
723 c = BYTE8_TO_CHAR (c);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
724 to += CHAR_STRING (c, to);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
725 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
726 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
727 chars++;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
728 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
729 while (p < endp)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
730 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
731 if ((n = MULTIBYTE_LENGTH (p, endp)) > 0)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
732 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
733 while (n--)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
734 *to++ = *p++;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
735 }
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
736 else
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
737 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
738 int c = *p++;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
739 c = BYTE8_TO_CHAR (c);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
740 to += CHAR_STRING (c, to);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
741 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
742 chars++;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
743 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
744 if (nchars)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
745 *nchars = chars;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
746 return (to - str);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
747 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
748
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
749 /* Parse unibyte string at STR of LEN bytes, and return the number of
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
750 bytes it may ocupy when converted to multibyte string by
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
751 `str_to_multibyte'. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
752
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
753 int
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
754 parse_str_to_multibyte (str, len)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
755 unsigned char *str;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
756 int len;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
757 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
758 unsigned char *endp = str + len;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
759 int bytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
760
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
761 for (bytes = 0; str < endp; str++)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
762 bytes += (*str < 0x80) ? 1 : 2;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
763 return bytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
764 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
765
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
766
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
767 /* Convert unibyte text at STR of NBYTES bytes to a multibyte text
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
768 that contains the same single-byte characters. It actually
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
769 converts all 8-bit characters to multibyte forms. It is assured
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
770 that we can use LEN bytes at STR as a work area and that is
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
771 enough. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
772
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
773 int
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
774 str_to_multibyte (str, len, bytes)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
775 unsigned char *str;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
776 int len, bytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
777 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
778 unsigned char *p = str, *endp = str + bytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
779 unsigned char *to;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
780
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
781 while (p < endp && *p < 0x80) p++;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
782 if (p == endp)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
783 return bytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
784 to = p;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
785 bytes = endp - p;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
786 endp = str + len;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
787 safe_bcopy ((char *) p, (char *) (endp - bytes), bytes);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
788 p = endp - bytes;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
789 while (p < endp)
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
790 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
791 int c = *p++;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
792
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
793 if (c >= 0x80)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
794 c = BYTE8_TO_CHAR (c);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
795 to += CHAR_STRING (c, to);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
796 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
797 return (to - str);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
798 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
799
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
800 /* Arrange multibyte text at STR of LEN bytes as a unibyte text. It
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
801 actually converts characters in the range 0x80..0xFF to
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
802 unibyte. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
803
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
804 int
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
805 str_as_unibyte (str, bytes)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
806 unsigned char *str;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
807 int bytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
808 {
88878
a0ae1a5876c7 (Vscript_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 88853
diff changeset
809 const unsigned char *p = str, *endp = str + bytes;
a0ae1a5876c7 (Vscript_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 88853
diff changeset
810 unsigned char *to;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
811 int c, len;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
812
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
813 while (p < endp)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
814 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
815 c = *p;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
816 len = BYTES_BY_CHAR_HEAD (c);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
817 if (CHAR_BYTE8_HEAD_P (c))
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
818 break;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
819 p += len;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
820 }
88878
a0ae1a5876c7 (Vscript_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 88853
diff changeset
821 to = str + (p - str);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
822 while (p < endp)
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
823 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
824 c = *p;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
825 len = BYTES_BY_CHAR_HEAD (c);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
826 if (CHAR_BYTE8_HEAD_P (c))
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
827 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
828 c = STRING_CHAR_ADVANCE (p);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
829 *to++ = CHAR_TO_BYTE8 (c);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
830 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
831 else
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
832 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
833 while (len--) *to++ = *p++;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
834 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
835 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
836 return (to - str);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
837 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
838
96249
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
839 /* Convert eight-bit chars in SRC (in multibyte form) to the
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
840 corresponding byte and store in DST. CHARS is the number of
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
841 characters in SRC. The value is the number of bytes stored in DST.
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
842 Usually, the value is the same as CHARS, but is less than it if SRC
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
843 contains a non-ASCII, non-eight-bit characater. If ACCEPT_LATIN_1
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
844 is nonzero, a Latin-1 character is accepted and converted to a byte
96501
919775e9f3bf (str_to_unibyte): Modify the comment.
Kenichi Handa <handa@m17n.org>
parents: 96249
diff changeset
845 of that character code.
919775e9f3bf (str_to_unibyte): Modify the comment.
Kenichi Handa <handa@m17n.org>
parents: 96249
diff changeset
846 Note: Currently the arg ACCEPT_LATIN_1 is not used. */
96249
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
847
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
848 EMACS_INT
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
849 str_to_unibyte (src, dst, chars, accept_latin_1)
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
850 const unsigned char *src;
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
851 unsigned char *dst;
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
852 EMACS_INT chars;
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
853 int accept_latin_1;
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
854 {
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
855 EMACS_INT i;
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
856
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
857 for (i = 0; i < chars; i++)
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
858 {
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
859 int c = STRING_CHAR_ADVANCE (src);
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
860
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
861 if (CHAR_BYTE8_P (c))
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
862 c = CHAR_TO_BYTE8 (c);
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
863 else if (! ASCII_CHAR_P (c)
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
864 && (! accept_latin_1 || c >= 0x100))
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
865 return i;
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
866 *dst++ = c;
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
867 }
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
868 return i;
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
869 }
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
870
71c216bc3b71 (str_to_unibyte): New function.
Kenichi Handa <handa@m17n.org>
parents: 95856
diff changeset
871
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
872 int
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
873 string_count_byte8 (string)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
874 Lisp_Object string;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
875 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
876 int multibyte = STRING_MULTIBYTE (string);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
877 int nbytes = SBYTES (string);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
878 unsigned char *p = SDATA (string);
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
879 unsigned char *pend = p + nbytes;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
880 int count = 0;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
881 int c, len;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
882
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
883 if (multibyte)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
884 while (p < pend)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
885 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
886 c = *p;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
887 len = BYTES_BY_CHAR_HEAD (c);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
888
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
889 if (CHAR_BYTE8_HEAD_P (c))
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
890 count++;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
891 p += len;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
892 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
893 else
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
894 while (p < pend)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
895 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
896 if (*p++ >= 0x80)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
897 count++;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
898 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
899 return count;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
900 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
901
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
902
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
903 Lisp_Object
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
904 string_escape_byte8 (string)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
905 Lisp_Object string;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
906 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
907 int nchars = SCHARS (string);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
908 int nbytes = SBYTES (string);
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
909 int multibyte = STRING_MULTIBYTE (string);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
910 int byte8_count;
88878
a0ae1a5876c7 (Vscript_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 88853
diff changeset
911 const unsigned char *src, *src_end;
a0ae1a5876c7 (Vscript_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 88853
diff changeset
912 unsigned char *dst;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
913 Lisp_Object val;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
914 int c, len;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
915
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
916 if (multibyte && nchars == nbytes)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
917 return string;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
918
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
919 byte8_count = string_count_byte8 (string);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
920
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
921 if (byte8_count == 0)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
922 return string;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
923
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
924 if (multibyte)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
925 /* Convert 2-byte sequence of byte8 chars to 4-byte octal. */
88526
6bac4ae1c326 (string_escape_byte8): Make multibyte string with correct size.
Kenichi Handa <handa@m17n.org>
parents: 88427
diff changeset
926 val = make_uninit_multibyte_string (nchars + byte8_count * 3,
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
927 nbytes + byte8_count * 2);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
928 else
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
929 /* Convert 1-byte sequence of byte8 chars to 4-byte octal. */
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
930 val = make_uninit_string (nbytes + byte8_count * 3);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
931
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
932 src = SDATA (string);
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
933 src_end = src + nbytes;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
934 dst = SDATA (val);
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
935 if (multibyte)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
936 while (src < src_end)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
937 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
938 c = *src;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
939 len = BYTES_BY_CHAR_HEAD (c);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
940
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
941 if (CHAR_BYTE8_HEAD_P (c))
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
942 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
943 c = STRING_CHAR_ADVANCE (src);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
944 c = CHAR_TO_BYTE8 (c);
88427
1a3aec316071 (c_string_width): Add return type `int'.
Kenichi Handa <handa@m17n.org>
parents: 88363
diff changeset
945 sprintf ((char *) dst, "\\%03o", c);
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
946 dst += 4;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
947 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
948 else
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
949 while (len--) *dst++ = *src++;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
950 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
951 else
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
952 while (src < src_end)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
953 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
954 c = *src++;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
955 if (c >= 0x80)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
956 {
88427
1a3aec316071 (c_string_width): Add return type `int'.
Kenichi Handa <handa@m17n.org>
parents: 88363
diff changeset
957 sprintf ((char *) dst, "\\%03o", c);
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
958 dst += 4;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
959 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
960 else
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
961 *dst++ = c;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
962 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
963 return val;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
964 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
965
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
966
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89181
diff changeset
967 DEFUN ("string", Fstring, Sstring, 0, MANY, 0,
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
968 doc: /*
88640
90a6e8c61273 (Fstring): Doc fix.
Dave Love <fx@gnu.org>
parents: 88526
diff changeset
969 Concatenate all the argument characters and make the result a string.
90a6e8c61273 (Fstring): Doc fix.
Dave Love <fx@gnu.org>
parents: 88526
diff changeset
970 usage: (string &rest CHARACTERS) */)
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
971 (n, args)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
972 int n;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
973 Lisp_Object *args;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
974 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
975 int i;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
976 unsigned char *buf = (unsigned char *) alloca (MAX_MULTIBYTE_LENGTH * n);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
977 unsigned char *p = buf;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
978 int c;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
979
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
980 for (i = 0; i < n; i++)
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
981 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
982 CHECK_CHARACTER (args[i]);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
983 c = XINT (args[i]);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
984 p += CHAR_STRING (c, p);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
985 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
986
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
987 return make_string_from_bytes ((char *) buf, n, p - buf);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
988 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
989
90841
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
990 DEFUN ("unibyte-string", Funibyte_string, Sunibyte_string, 0, MANY, 0,
90942
ba60bd18bc0b (Funibyte_string): Add "usage: ..." to the docstring.
Kenichi Handa <handa@m17n.org>
parents: 90841
diff changeset
991 doc: /* Concatenate all the argument bytes and make the result a unibyte string.
ba60bd18bc0b (Funibyte_string): Add "usage: ..." to the docstring.
Kenichi Handa <handa@m17n.org>
parents: 90841
diff changeset
992 usage: (unibyte-string &rest BYTES) */)
90841
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
993 (n, args)
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
994 int n;
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
995 Lisp_Object *args;
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
996 {
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
997 int i;
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
998 unsigned char *buf = (unsigned char *) alloca (n);
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
999 unsigned char *p = buf;
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
1000 unsigned c;
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
1001
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
1002 for (i = 0; i < n; i++)
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
1003 {
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
1004 CHECK_NATNUM (args[i]);
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
1005 c = XFASTINT (args[i]);
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
1006 if (c >= 256)
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
1007 args_out_of_range_3 (args[i], make_number (0), make_number (255));
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
1008 *p++ = c;
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
1009 }
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
1010
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
1011 return make_string_from_bytes ((char *) buf, n, p - buf);
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
1012 }
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
1013
98380
c3d306455ee9 (Fchar_resolve_modifiers): Rewrite Elisp function
Martin Rudalics <rudalics@gmx.at>
parents: 97907
diff changeset
1014 DEFUN ("char-resolve-modifiers", Fchar_resolve_modifiers,
92494
b5a82292599c (char_resolve_modifier_mask): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 92483
diff changeset
1015 Schar_resolve_modifiers, 1, 1, 0,
b5a82292599c (char_resolve_modifier_mask): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 92483
diff changeset
1016 doc: /* Resolve modifiers in the character CHAR.
b5a82292599c (char_resolve_modifier_mask): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 92483
diff changeset
1017 The value is a character with modifiers resolved into the character
b5a82292599c (char_resolve_modifier_mask): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 92483
diff changeset
1018 code. Unresolved modifiers are kept in the value.
98380
c3d306455ee9 (Fchar_resolve_modifiers): Rewrite Elisp function
Martin Rudalics <rudalics@gmx.at>
parents: 97907
diff changeset
1019 usage: (char-resolve-modifiers CHAR) */)
92494
b5a82292599c (char_resolve_modifier_mask): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 92483
diff changeset
1020 (character)
b5a82292599c (char_resolve_modifier_mask): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 92483
diff changeset
1021 Lisp_Object character;
b5a82292599c (char_resolve_modifier_mask): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 92483
diff changeset
1022 {
b5a82292599c (char_resolve_modifier_mask): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 92483
diff changeset
1023 int c;
b5a82292599c (char_resolve_modifier_mask): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 92483
diff changeset
1024
b5a82292599c (char_resolve_modifier_mask): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 92483
diff changeset
1025 CHECK_NUMBER (character);
b5a82292599c (char_resolve_modifier_mask): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 92483
diff changeset
1026 c = XINT (character);
b5a82292599c (char_resolve_modifier_mask): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 92483
diff changeset
1027 return make_number (char_resolve_modifier_mask (c));
b5a82292599c (char_resolve_modifier_mask): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 92483
diff changeset
1028 }
b5a82292599c (char_resolve_modifier_mask): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 92483
diff changeset
1029
99453
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1030 DEFUN ("get-byte", Fget_byte, Sget_byte, 0, 2, 0,
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1031 doc: /* Return a byte value of a character at point.
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1032 Optional 1st arg POSITION, if non-nil, is a position of a character to get
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1033 a byte value.
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1034 Optional 2nd arg STRING, if non-nil, is a string of which first
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1035 character is a target to get a byte value. In this case, POSITION, if
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1036 non-nil, is an index of a target character in the string.
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1037
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1038 If the current buffer (or STRING) is multibyte, and the target
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1039 character is not ASCII nor 8-bit character, an error is signalled. */)
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1040 (position, string)
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1041 Lisp_Object position, string;
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1042 {
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1043 int c;
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1044 EMACS_INT pos;
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1045 unsigned char *p;
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1046
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1047 if (NILP (string))
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1048 {
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1049 if (NILP (position))
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1050 {
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1051 p = PT_ADDR;
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1052 }
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1053 else
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1054 {
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1055 CHECK_NUMBER_COERCE_MARKER (position);
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1056 if (XINT (position) < BEGV || XINT (position) >= ZV)
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1057 args_out_of_range_3 (position, make_number (BEGV), make_number (ZV));
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1058 pos = XFASTINT (position);
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1059 p = CHAR_POS_ADDR (pos);
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1060 }
99475
98e08333a580 (Fget_byte): Fix and make it faster for unibyte target.
Kenichi Handa <handa@m17n.org>
parents: 99453
diff changeset
1061 if (NILP (current_buffer->enable_multibyte_characters))
98e08333a580 (Fget_byte): Fix and make it faster for unibyte target.
Kenichi Handa <handa@m17n.org>
parents: 99453
diff changeset
1062 return make_number (*p);
99453
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1063 }
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1064 else
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1065 {
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1066 CHECK_STRING (string);
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1067 if (NILP (position))
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1068 {
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1069 p = SDATA (string);
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1070 }
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1071 else
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1072 {
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1073 CHECK_NATNUM (position);
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1074 if (XINT (position) >= SCHARS (string))
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1075 args_out_of_range (string, position);
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1076 pos = XFASTINT (position);
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1077 p = SDATA (string) + string_char_to_byte (string, pos);
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1078 }
99475
98e08333a580 (Fget_byte): Fix and make it faster for unibyte target.
Kenichi Handa <handa@m17n.org>
parents: 99453
diff changeset
1079 if (! STRING_MULTIBYTE (string))
98e08333a580 (Fget_byte): Fix and make it faster for unibyte target.
Kenichi Handa <handa@m17n.org>
parents: 99453
diff changeset
1080 return make_number (*p);
99453
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1081 }
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1082 c = STRING_CHAR (p, 0);
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1083 if (CHAR_BYTE8_P (c))
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1084 c = CHAR_TO_BYTE8 (c);
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1085 else if (! ASCII_CHAR_P (c))
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1086 error ("Not an ASCII nor an 8-bit character: %d", c);
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1087 return make_number (c);
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1088 }
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1089
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1090
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1091 void
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1092 init_character_once ()
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1093 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1094 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1095
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1096 #ifdef emacs
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1097
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1098 void
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1099 syms_of_character ()
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1100 {
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1101 DEFSYM (Qcharacterp, "characterp");
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1102 DEFSYM (Qauto_fill_chars, "auto-fill-chars");
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1103
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1104 staticpro (&Vchar_unify_table);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1105 Vchar_unify_table = Qnil;
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1106
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1107 defsubr (&Smax_char);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1108 defsubr (&Scharacterp);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1109 defsubr (&Sunibyte_char_to_multibyte);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1110 defsubr (&Smultibyte_char_to_unibyte);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1111 defsubr (&Schar_bytes);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1112 defsubr (&Schar_width);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1113 defsubr (&Sstring_width);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1114 defsubr (&Schar_direction);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1115 defsubr (&Sstring);
90841
fa02baec53ff (Funibyte_string): New function.
Kenichi Handa <handa@m17n.org>
parents: 90797
diff changeset
1116 defsubr (&Sunibyte_string);
92494
b5a82292599c (char_resolve_modifier_mask): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 92483
diff changeset
1117 defsubr (&Schar_resolve_modifiers);
99453
877b7365b646 (Fget_byte): New function.
Kenichi Handa <handa@m17n.org>
parents: 99079
diff changeset
1118 defsubr (&Sget_byte);
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1119
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1120 DEFVAR_LISP ("translation-table-vector", &Vtranslation_table_vector,
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1121 doc: /*
88926
f026b7e4fc61 (syms_of_character) <translation-table-vector>: Doc
Dave Love <fx@gnu.org>
parents: 88913
diff changeset
1122 Vector recording all translation tables ever defined.
f026b7e4fc61 (syms_of_character) <translation-table-vector>: Doc
Dave Love <fx@gnu.org>
parents: 88913
diff changeset
1123 Each element is a pair (SYMBOL . TABLE) relating the table to the
f026b7e4fc61 (syms_of_character) <translation-table-vector>: Doc
Dave Love <fx@gnu.org>
parents: 88913
diff changeset
1124 symbol naming it. The ID of a translation table is an index into this vector. */);
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1125 Vtranslation_table_vector = Fmake_vector (make_number (16), Qnil);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1126
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1127 DEFVAR_LISP ("auto-fill-chars", &Vauto_fill_chars,
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1128 doc: /*
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1129 A char-table for characters which invoke auto-filling.
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1130 Such characters have value t in this table. */);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1131 Vauto_fill_chars = Fmake_char_table (Qauto_fill_chars, Qnil);
88853
503c60238368 (syms_of_character): Fix CHAR_TABLE_SET call.
Dave Love <fx@gnu.org>
parents: 88743
diff changeset
1132 CHAR_TABLE_SET (Vauto_fill_chars, ' ', Qt);
503c60238368 (syms_of_character): Fix CHAR_TABLE_SET call.
Dave Love <fx@gnu.org>
parents: 88743
diff changeset
1133 CHAR_TABLE_SET (Vauto_fill_chars, '\n', Qt);
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1134
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1135 DEFVAR_LISP ("char-width-table", &Vchar_width_table,
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1136 doc: /*
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1137 A char-table for width (columns) of each character. */);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1138 Vchar_width_table = Fmake_char_table (Qnil, make_number (1));
88743
4570f1a4c391 (syms_of_character): Setup Vchar_width_table for
Kenichi Handa <handa@m17n.org>
parents: 88716
diff changeset
1139 char_table_set_range (Vchar_width_table, 0x80, 0x9F, make_number (4));
4570f1a4c391 (syms_of_character): Setup Vchar_width_table for
Kenichi Handa <handa@m17n.org>
parents: 88716
diff changeset
1140 char_table_set_range (Vchar_width_table, MAX_5_BYTE_CHAR + 1, MAX_CHAR,
4570f1a4c391 (syms_of_character): Setup Vchar_width_table for
Kenichi Handa <handa@m17n.org>
parents: 88716
diff changeset
1141 make_number (4));
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1142
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1143 DEFVAR_LISP ("char-direction-table", &Vchar_direction_table,
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1144 doc: /* A char-table for direction of each character. */);
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1145 Vchar_direction_table = Fmake_char_table (Qnil, make_number (1));
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1146
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1147 DEFVAR_LISP ("printable-chars", &Vprintable_chars,
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1148 doc: /* A char-table for each printable character. */);
88716
f617b1bf301b (syms_of_character): Set the default value of
Kenichi Handa <handa@m17n.org>
parents: 88640
diff changeset
1149 Vprintable_chars = Fmake_char_table (Qnil, Qnil);
89029
ad8f56efa7c6 (syms_of_character): Setup Vprintable_chars.
Kenichi Handa <handa@m17n.org>
parents: 89020
diff changeset
1150 Fset_char_table_range (Vprintable_chars,
ad8f56efa7c6 (syms_of_character): Setup Vprintable_chars.
Kenichi Handa <handa@m17n.org>
parents: 89020
diff changeset
1151 Fcons (make_number (32), make_number (126)), Qt);
ad8f56efa7c6 (syms_of_character): Setup Vprintable_chars.
Kenichi Handa <handa@m17n.org>
parents: 89020
diff changeset
1152 Fset_char_table_range (Vprintable_chars,
ad8f56efa7c6 (syms_of_character): Setup Vprintable_chars.
Kenichi Handa <handa@m17n.org>
parents: 89020
diff changeset
1153 Fcons (make_number (160),
ad8f56efa7c6 (syms_of_character): Setup Vprintable_chars.
Kenichi Handa <handa@m17n.org>
parents: 89020
diff changeset
1154 make_number (MAX_5_BYTE_CHAR)), Qt);
88878
a0ae1a5876c7 (Vscript_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 88853
diff changeset
1155
88913
76074dea1258 (Vscript_alist): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 88878
diff changeset
1156 DEFVAR_LISP ("char-script-table", &Vchar_script_table,
76074dea1258 (Vscript_alist): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 88878
diff changeset
1157 doc: /* Char table of script symbols.
76074dea1258 (Vscript_alist): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 88878
diff changeset
1158 It has one extra slot whose value is a list of script symbols. */);
76074dea1258 (Vscript_alist): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 88878
diff changeset
1159
76074dea1258 (Vscript_alist): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 88878
diff changeset
1160 /* Intern this now in case it isn't already done.
76074dea1258 (Vscript_alist): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 88878
diff changeset
1161 Setting this variable twice is harmless.
76074dea1258 (Vscript_alist): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 88878
diff changeset
1162 But don't staticpro it here--that is done in alloc.c. */
76074dea1258 (Vscript_alist): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 88878
diff changeset
1163 Qchar_table_extra_slots = intern ("char-table-extra-slots");
76074dea1258 (Vscript_alist): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 88878
diff changeset
1164 DEFSYM (Qchar_script_table, "char-script-table");
76074dea1258 (Vscript_alist): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 88878
diff changeset
1165 Fput (Qchar_script_table, Qchar_table_extra_slots, make_number (1));
76074dea1258 (Vscript_alist): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 88878
diff changeset
1166 Vchar_script_table = Fmake_char_table (Qchar_script_table, Qnil);
90403
81f1bbab281f (Vscript_representative_chars): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90256
diff changeset
1167
81f1bbab281f (Vscript_representative_chars): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90256
diff changeset
1168 DEFVAR_LISP ("script-representative-chars", &Vscript_representative_chars,
97907
3a2d65dc9abc (syms_of_character): Docstring of script-representative-chars fixed.
Kenichi Handa <handa@m17n.org>
parents: 97816
diff changeset
1169 doc: /* Alist of scripts vs the representative characters.
3a2d65dc9abc (syms_of_character): Docstring of script-representative-chars fixed.
Kenichi Handa <handa@m17n.org>
parents: 97816
diff changeset
1170 Each element is a cons (SCRIPT . CHARS), where SCRIPT is a script name symbol,
3a2d65dc9abc (syms_of_character): Docstring of script-representative-chars fixed.
Kenichi Handa <handa@m17n.org>
parents: 97816
diff changeset
1171 CHARS is a list or a vector of characters.
99079
ffe8b1e92732 * character.c (syms_of_character) <script-representative-chars>:
Juanma Barranquero <lekktu@gmail.com>
parents: 98380
diff changeset
1172 If it is a list, all characters in the list are necessary for supporting SCRIPT.
97907
3a2d65dc9abc (syms_of_character): Docstring of script-representative-chars fixed.
Kenichi Handa <handa@m17n.org>
parents: 97816
diff changeset
1173 If it is a vector, one of the characters in the vector is necessary.
3a2d65dc9abc (syms_of_character): Docstring of script-representative-chars fixed.
Kenichi Handa <handa@m17n.org>
parents: 97816
diff changeset
1174 This variable is used to find a font for a specific script. */);
90403
81f1bbab281f (Vscript_representative_chars): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90256
diff changeset
1175 Vscript_representative_chars = Qnil;
97816
9999d9194509 (Vunicode_category_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 96501
diff changeset
1176
9999d9194509 (Vunicode_category_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 96501
diff changeset
1177 DEFVAR_LISP ("unicode-category-table", &Vunicode_category_table,
9999d9194509 (Vunicode_category_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 96501
diff changeset
1178 doc: /* Char table of Unicode's "General Category".
99079
ffe8b1e92732 * character.c (syms_of_character) <script-representative-chars>:
Juanma Barranquero <lekktu@gmail.com>
parents: 98380
diff changeset
1179 All Unicode characters have one of the following values (symbol):
ffe8b1e92732 * character.c (syms_of_character) <script-representative-chars>:
Juanma Barranquero <lekktu@gmail.com>
parents: 98380
diff changeset
1180 Lu, Ll, Lt, Lm, Lo, Mn, Mc, Me, Nd, Nl, No, Pc, Pd, Ps, Pe, Pi, Pf, Po,
97816
9999d9194509 (Vunicode_category_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 96501
diff changeset
1181 Sm, Sc, Sk, So, Zs, Zl, Zp, Cc, Cf, Cs, Co, Cn
9999d9194509 (Vunicode_category_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 96501
diff changeset
1182 See The Unicode Standard for the meaning of those values. */);
9999d9194509 (Vunicode_category_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 96501
diff changeset
1183 /* The correct char-table is setup in characters.el. */
9999d9194509 (Vunicode_category_table): New variable.
Kenichi Handa <handa@m17n.org>
parents: 96501
diff changeset
1184 Vunicode_category_table = Qnil;
88363
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1185 }
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1186
13b9026422e0 New file.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1187 #endif /* emacs */
89911
cce857c68ba2 Add arch taglines
Miles Bader <miles@gnu.org>
parents: 89888
diff changeset
1188
cce857c68ba2 Add arch taglines
Miles Bader <miles@gnu.org>
parents: 89888
diff changeset
1189 /* arch-tag: b6665960-3c3d-4184-85cd-af4318197999
cce857c68ba2 Add arch taglines
Miles Bader <miles@gnu.org>
parents: 89888
diff changeset
1190 (do not change this comment) */