1 /* character.c -- character module.
2 Copyright (C) 2003, 2004
3 National Institute of Advanced Industrial Science and Technology (AIST)
4 Registration Number H15PRO112
6 This file is part of the m17n library.
8 The m17n library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Lesser General Public License
10 as published by the Free Software Foundation; either version 2.1 of
11 the License, or (at your option) any later version.
13 The m17n library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
18 You should have received a copy of the GNU Lesser General Public
19 License along with the m17n library; if not, write to the Free
20 Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24 @addtogroup m17nCharacter
25 @brief Character objects and API for them.
27 The m17n library represents a @e character by a character code (an
28 integer). The minimum character code is @c 0. The maximum
29 character code is defined by the macro #MCHAR_MAX. It is
30 assured that #MCHAR_MAX is not smaller than @c 0x3FFFFF (22
33 Characters @c 0 to @c 0x10FFFF are equivalent to the Unicode
34 characters of the same code values.
36 A character can have zero or more properties called @e character
37 @e properties. A character property consists of a @e key and a
38 @e value, where key is a symbol and value is anything that can be
39 cast to <tt>(void *)</tt>. "The character property that belongs
40 to character C and whose key is K" may be shortened to "the K
44 @addtogroup m17nCharacter
45 @brief ʸ»ú¥ª¥Ö¥¸¥§¥¯¥È¤È¤½¤ì¤Ë´Ø¤¹¤ë API.
47 m17n ¥é¥¤¥Ö¥é¥ê¤Ï @e ʸ»ú ¤òʸ»ú¥³¡¼¥É¡ÊÀ°¿ô¡Ë¤Çɽ¸½¤¹¤ë¡£
48 ºÇ¾®¤Îʸ»ú¥³¡¼¥É¤Ï @c 0 ¤Ç¤¢¤ê¡¢ºÇÂç¤Îʸ»ú¥³¡¼¥É¤Ï¥Þ¥¯¥í #MCHAR_MAX
49 ¤Ë¤è¤Ã¤ÆÄêµÁ¤µ¤ì¤Æ¤¤¤ë¡£#MCHAR_MAX ¤Ï @c 0x3FFFFF¡Ê22¥Ó¥Ã¥È¡Ë
50 °Ê¾å¤Ç¤¢¤ë¤³¤È¤¬Êݾڤµ¤ì¤Æ¤¤¤ë¡£
52 @c 0 ¤«¤é @c 0x10FFFF ¤Þ¤Ç¤Îʸ»ú¤Ï¡¢¤½¤ì¤ÈƱ¤¸Ãͤò»ý¤Ä Unicode
53 ¤Îʸ»ú¤Ë³ä¤êÅö¤Æ¤é¤ì¤Æ¤¤¤ë¡£
55 ³Æʸ»ú¤Ï @e ʸ»ú¥×¥í¥Ñ¥Æ¥£ ¤È¸Æ¤Ö¥×¥í¥Ñ¥Æ¥£¤ò 0 ¸Ä°Ê¾å»ý¤Ä¤³¤È¤¬¤Ç¤¤ë¡£
56 ʸ»ú¥×¥í¥Ñ¥Æ¥£¤Ï @e ¥¡¼ ¤È @e ÃÍ ¤«¤é¤Ê¤ë¡£
57 ¥¡¼¤Ï¥·¥ó¥Ü¥ë¤Ç¤¢¤ê¡¢ÃÍ¤Ï <tt>(void *)</tt> ·¿¤Ë¥¥ã¥¹¥È¤Ç¤¤ë¤â¤Î¤Ê¤é²¿¤Ç¤â¤è¤¤¡£
58 ¡Öʸ»ú C ¤Îʸ»ú¥×¥í¥Ñ¥Æ¥£¤Î¤¦¤Á¥¡¼¤¬ K ¤Ç¤¢¤ë¤â¤Î¡×¤ò´Êñ¤Ë¡Öʸ»ú C
59 ¤Î K ¥×¥í¥Ñ¥Æ¥£¡×¤È¸Æ¤Ö¤³¤È¤¬¤¢¤ë¡£ */
62 #if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
63 /*** @addtogroup m17nInternal
73 #include "m17n-core.h"
74 #include "m17n-misc.h"
84 static MPlist *char_prop_list;
87 free_string (int from, int to, void *str, void *arg)
98 Mname = msymbol ("name");
99 Mcategory = msymbol ("category");
100 Mcombining_class = msymbol ("combining-class");
101 Mbidi_category = msymbol ("bidirectional-category");
102 Msimple_case_folding = msymbol ("simple-case-folding");
103 Mcomplicated_case_folding = msymbol ("complicated-case-folding");
104 Mscript = msymbol ("script");
116 for (p = char_prop_list; mplist_key (p) != Mnil; p = mplist_next (p))
118 MCharPropRecord *record = mplist_value (p);
122 if (record->type == Mstring)
123 mchartable_map (record->table, NULL, free_string, NULL);
124 M17N_OBJECT_UNREF (record->table);
128 M17N_OBJECT_UNREF (char_prop_list);
133 mchar__define_prop (MSymbol key, MSymbol type, void *mdb)
135 MCharPropRecord *record;
138 record = mplist_get (char_prop_list, key);
140 char_prop_list = mplist (), record = NULL;
144 M17N_OBJECT_UNREF (record->table);
148 MSTRUCT_CALLOC (record, MERROR_CHAR);
149 mplist_put (char_prop_list, key, record);
156 record->table = NULL;
160 void *default_value = NULL;
162 if (type == Minteger)
163 default_value = (void *) -1;
164 record->table = mchartable (type, default_value);
170 #endif /* !FOR_DOXYGEN || DOXYGEN_INTERNAL_MODULE */
174 /*** @addtogroup m17nCharacter
180 @brief Maximum character code.
182 The macro #MCHAR_MAX gives the maximum character code. */
185 @brief ʸ»ú¥³¡¼¥É¤ÎºÇÂçÃÍ.
187 ¥Þ¥¯¥í #MCHAR_MAX ¤Ïʸ»ú¥³¡¼¥É¤ÎºÇÂçÃͤòɽ¤¹¡£ */
191 #endif /* FOR_DOXYGEN */
194 @name Variables: Keys of character properties
196 These symbols are used as keys of character properties. */
199 @ingroup m17nCharacter
200 @name ÊÑ¿ô: ʸ»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼
202 ¤³¤ì¤é¤Î¥·¥ó¥Ü¥ë¤Ïʸ»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤Æ»È¤ï¤ì¤ë¡£*/
206 @brief Key for script.
208 The symbol #Mscript has the name <tt>"script"</tt> and is used as the key
209 of a character property. The value of such a property is a symbol
210 representing the script to which the character belongs.
212 Each symbol that represents a script has one of the names listed in
213 the <em>Unicode Technical Report #24</em>. */
216 @brief ¥¹¥¯¥ê¥×¥È¤òɽ¤ï¤¹¥¡¼.
218 ¥·¥ó¥Ü¥ë #Mscript ¤Ï <tt>"script"</tt>
219 ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Á¡¢Ê¸»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤Æ»È¤ï¤ì¤ë¡£
220 ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢¤³¤Îʸ»ú¤Î°¤¹¤ë¥¹¥¯¥ê¥×¥È¤òɽ¤ï¤¹¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£
222 ¥¹¥¯¥ê¥×¥È¤òɽ¤ï¤¹¥·¥ó¥Ü¥ë¤Î̾Á°¤Ï¡¢<em>Unicode Technical Report
223 #24</em> ¤Ë¥ê¥¹¥È¤µ¤ì¤Æ¤¤¤ë¤â¤Î¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ë¡£ */
230 @brief Key for character name.
232 The symbol #Mname has the name <tt>"name"</tt> and is used as
233 the key of a character property. The value of such a property is a
234 C-string representing the name of the character. */
237 @brief ̾Á°¤òɽ¤ï¤¹¥¡¼.
239 ¥·¥ó¥Ü¥ë #Mname ¤Ï <tt>"name"</tt>
240 ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Á¡¢Ê¸»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤Æ»È¤ï¤ì¤ë¡£
241 ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϤ½¤Îʸ»ú¤Î̾Á°¤òɽ¤ï¤¹ C ¤Îʸ»úÎó¤Ç¤¢¤ë¡£ */
248 @brief Key for general category.
250 The symbol #Mcategory has the name <tt>"category"</tt> and is
251 used as the key of a character property. The value of such a
252 property is a symbol representing the <em>general category</em> of
255 Each symbol that represents a general category has one of the
256 names listed as abbreviations for <em>General Category</em> in
260 @brief °ìÈÌ¥«¥Æ¥´¥ê¤òɽ¤ï¤¹¥¡¼.
262 ¥·¥ó¥Ü¥ë #Mcategory ¤Ï <tt>"category"</tt>
263 ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Á¡¢Ê¸»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤Æ»È¤ï¤ì¤ë¡£
264 ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢Âбþ¤¹¤ë <em>°ìÈÌ¥«¥Æ¥´¥ê</em> ¤òɽ¤ï¤¹¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£
266 °ìÈÌ¥«¥Æ¥´¥ê¤òɽ¤ï¤¹¥·¥ó¥Ü¥ë¤Î̾Á°¤Ï¡¢<em>General Category</em>
267 ¤Î¾Êά·Á¤È¤·¤Æ Unicode ¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤â¤Î¤Ç¤¢¤ë¡£ */
274 @brief Key for canonical combining class.
276 The symbol #Mcombining_class has the name
277 <tt>"combining-class"</tt> and is used as the key of a character
278 property. The value of such a property is an integer that
279 represents the <em>canonical combining class</em> of the character.
281 The meaning of each integer that represents a canonical combining
282 class is identical to the one defined in Unicode. */
285 @brief ɸ½à·ë¹ç¥¯¥é¥¹¤òɽ¤ï¤¹¥¡¼.
287 ¥·¥ó¥Ü¥ë #Mcombining_class ¤Ï <tt>"combining-class"</tt>
288 ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Á¡¢Ê¸»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤Æ»È¤ï¤ì¤ë¡£
289 ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢Âбþ¤¹¤ë @e ɸ½à·ë¹ç¥¯¥é¥¹ ¤òɽ¤ï¤¹À°¿ô¤Ç¤¢¤ë¡£
291 ɸ½à·ë¹ç¥¯¥é¥¹¤òɽ¤ï¤¹À°¿ô¤Î°ÕÌ£¤Ï¡¢Unicode
292 ¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤â¤Î¤ÈƱ¤¸¤Ç¤¢¤ë¡£ */
294 MSymbol Mcombining_class;
298 @brief Key for bidi category.
300 The symbol #Mbidi_category has the name <tt>"bidi-category"</tt>
301 and is used as the key of a character property. The value of such
302 a property is a symbol that represents the <em>bidirectional
303 category</em> of the character.
305 Each symbol that represents a bidirectional category has one of
306 the names listed as types of <em>Bidirectional Category</em> in
310 @brief ÁÐÊý¸þ¥«¥Æ¥´¥ê¤òɽ¤ï¤¹¥¡¼.
312 ¥·¥ó¥Ü¥ë #Mbidi_category ¤Ï <tt>"bidi-category"</tt>
313 ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Á¡¢Ê¸»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤Æ»È¤ï¤ì¤ë¡£
314 ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢Âбþ¤¹¤ë @e ÁÐÊý¸þ¥«¥Æ¥´¥ê ¤òɽ¤ï¤¹¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£
316 ÁÐÊý¸þ¥«¥Æ¥´¥ê¤òɽ¤ï¤¹¥·¥ó¥Ü¥ë¤Î̾Á°¤Ï¡¢<em>Bidirectional
317 Category</em> ¤Î·¿¤È¤·¤Æ Unicode ¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤â¤Î¤Ç¤¢¤ë¡£ */
319 MSymbol Mbidi_category;
323 @brief Key for corresponding single lowercase character.
325 The symbol #Msimple_case_folding has the name
326 <tt>"simple-case-folding"</tt> and is used as the key of a
327 character property. The value of such a property is the
328 corresponding single lowercase character that is used when
329 comparing M-texts ignoring cases.
331 If a character requires a complicated comparison (i.e. cannot be
332 compared by simply mapping to another single character), the value
333 of such a property is @c 0xFFFF. In this case, the character has
334 another property whose key is #Mcomplicated_case_folding. */
337 @brief Âбþ¤¹¤ë¾®Ê¸»ú°ìʸ»ú¤òɽ¤ï¤¹¥¡¼.
339 ¥·¥ó¥Ü¥ë #Msimple_case_folding ¤Ï <tt>"simple-case-folding"</tt>
340 ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Á¡¢Ê¸»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤Æ»È¤ï¤ì¤ë¡£
341 ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢Âбþ¤¹¤ë¾®Ê¸»ú°ìʸ»ú¤Ç¤¢¤ê¡¢Âçʸ»ú¡¿¾®Ê¸»ú¤Î¶èÊ̤ò̵»ë¤·¤¿Ê¸»úÎóÈæ³Ó¤ÎºÝ¤Ë»È¤ï¤ì¤ë¡£
343 Ê£»¨¤ÊÈæ³ÓÊýË¡¤òɬÍפȤ¹¤ëʸ»ú¤Ç¤¢¤Ã¤¿¾ì¹ç
344 ¡ÊÊ̤ΰìʸ»ú¤ÈÂбþÉÕ¤±¤ë¤³¤È¤Ë¤è¤Ã¤ÆÈæ³Ó¤Ç¤¤Ê¤¤¾ì¹ç¡Ë¡¢¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤÏ
345 @c 0xFFFF ¤Ë¤Ê¤ë¡£¤³¤Î¾ì¹ç¤½¤Îʸ»ú¤Ï¡¢#Mcomplicated_case_folding
346 ¤È¤¤¤¦¥¡¼¤Îʸ»ú¥×¥í¥Ñ¥Æ¥£¤ò»ý¤Ä¡£ */
348 MSymbol Msimple_case_folding;
350 @brief Key for corresponding multiple lowercase characters.
352 The symbol #Mcomplicated_case_folding has the name
353 <tt>"complicated-case-folding"</tt> and is used as the key of a
354 character property. The value of such a property is the
355 corresponding M-text that contains a sequence of lowercase
356 characters to be used for comparing M-texts ignoring case. */
359 @brief Âбþ¤¹¤ë¾®Ê¸»ú¤ÎÎó¤òɽ¤ï¤¹¥¡¼.
361 ¥·¥ó¥Ü¥ë #Mcomplicated_case_folding ¤Ï
362 <tt>"complicated-case-folding"</tt>
363 ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Á¡¢Ê¸»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤Æ»È¤ï¤ì¤ë¡£
364 ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢Âбþ¤¹¤ë¾®Ê¸»úÎ󤫤é¤Ê¤ë M-text ¤Ç¤¢¤ê¡¢Âçʸ»ú¡¿¾®Ê¸»ú¤Î¶èÊ̤ò̵»ë¤·¤¿Ê¸»úÎóÈæ³Ó¤ÎºÝ¤Ë»È
368 MSymbol Mcomplicated_case_folding;
374 @brief Define a character property.
376 The mchar_define_property () function searches the m17n database
377 for a data whose tags are \<#Mchar_table, $TYPE, $SYM \>.
378 Here, $SYM is a symbol whose name is $NAME. $TYPE must be
379 #Mstring, #Mtext, #Msymbol, #Minteger, or #Mplist.
382 If the operation was successful, mchar_define_property () returns
383 $SYM. Otherwise it returns #Mnil. */
386 @brief ʸ»ú¥×¥í¥Ñ¥Æ¥£¤òÄêµÁ¤¹¤ë.
388 ´Ø¿ô mchar_define_property () ¤Ï¡¢ \<#Mchar_table, $TYPE, $SYM \>
389 ¤È¤¤¤¦¥¿¥°¤ò»ý¤Ã¤¿¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò m17n ¸À¸ì¾ðÊó¥Ù¡¼¥¹¤«¤éõ¤¹¡£
390 ¤³¤³¤Ç $SYM ¤Ï $NAME ¤È¤¤¤¦Ì¾Á°¤Î¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£$TYPE ¤Ï#Mstring,
391 #Mtext, #Msymbol, #Minteger, #Mplist ¤Î¤¤¤º¤ì¤«¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
394 ½èÍý¤ËÀ®¸ù¤¹¤ì¤Ð mchar_define_property () ¤Ï$SYM ¤òÊÖ¤¹¡£
395 ¼ºÇÔ¤·¤¿¾ì¹ç¤Ï #Mnil ¤òÊÖ¤¹¡£ */
402 mchar_get_prop (), mchar_put_prop () */
405 mchar_define_property (const char *name, MSymbol type)
407 MSymbol key = msymbol (name);
410 if (mdatabase__finder)
411 mdb = (*mdatabase__finder) (Mchar_table, type, key, Mnil);
414 mchar__define_prop (key, type, mdb);
421 @brief Get the value of a character property.
423 The mchar_get_prop () function searches character $C for the
424 character property whose key is $KEY.
427 If the operation was successful, mchar_get_prop () returns the
428 value of the character property. Otherwise it returns @c
432 @brief ʸ»ú¥×¥í¥Ñ¥Æ¥£¤ÎÃͤòÆÀ¤ë.
434 ´Ø¿ô mchar_get_prop () ¤Ï¡¢Ê¸»ú $C ¤Îʸ»ú¥×¥í¥Ñ¥Æ¥£¤Î¤¦¤Á¥¡¼¤¬
435 $KEY ¤Ç¤¢¤ë¤â¤Î¤òõ¤¹¡£
438 ½èÍý¤¬À®¸ù¤¹¤ì¤Ð mchar_get_prop () ¤Ï¸«¤Ä¤«¤Ã¤¿¥×¥í¥Ñ¥Æ¥£¤ÎÃͤòÊÖ¤¹¡£
439 ¼ºÇÔ¤·¤¿¾ì¹ç¤Ï @c NULL ¤òÊÖ¤¹¡£
441 @latexonly \IPAlabel{mchar_get_prop} @endlatexonly
445 @c MERROR_SYMBOL, @c MERROR_DB
448 mchar_define_property (), mchar_put_prop () */
451 mchar_get_prop (int c, MSymbol key)
453 MCharPropRecord *record;
455 if (! char_prop_list)
457 record = mplist_get (char_prop_list, key);
462 record->table = (*mdatabase__loader) (record->mdb);
464 MERROR (MERROR_DB, NULL);
467 return mchartable_lookup (record->table, c);
473 @brief Set the value of a character property.
475 The mchar_put_prop () function searches character $C for the
476 character property whose key is $KEY and assigns $VAL to the value
477 of the found property.
480 If the operation was successful, mchar_put_prop () returns 0.
481 Otherwise, it returns -1. */
483 @brief ʸ»ú¥×¥í¥Ñ¥Æ¥£¤ÎÃͤòÀßÄꤹ¤ë.
485 ´Ø¿ô mchar_put_prop () ¤Ï¡¢Ê¸»ú $C ¤Îʸ»ú¥×¥í¥Ñ¥Æ¥£¤Î¤¦¤Á¥¡¼¤¬ $KEY
486 ¤Ç¤¢¤ë¤â¤Î¤òõ¤·¡¢¤½¤ÎÃͤȤ·¤Æ $VAL ¤òÀßÄꤹ¤ë¡£
489 ½èÍý¤¬À®¸ù¤¹¤ì¤Ð mchar_put_prop () ¤Ï0¤òÊÖ¤¹¡£¼ºÇÔ¤·¤¿¾ì¹ç¤Ï-1¤òÊÖ¤¹¡£ */
492 @c MERROR_SYMBOL, @c MERROR_DB
495 mchar_define_property (), mchar_get_prop () */
498 mchar_put_prop (int c, MSymbol key, void *val)
500 MCharPropRecord *record;
502 if (! char_prop_list)
503 MERROR (MERROR_CHAR, -1);
504 record = mplist_get (char_prop_list, key);
509 record->table = (*mdatabase__loader) (record->mdb);
511 MERROR (MERROR_DB, -1);
514 return mchartable_set (record->table, c, val);
520 @brief Get the char-table for a character property.
522 The mchar_get_prop_table () function returns a char-table that
523 contains the character property whose key is $KEY. If $TYPE is
524 not NULL, this function stores the type of the property in the
525 place pointed by $TYPE. See mchar_define_property () for types of
529 If $KEY is a valid character property key, this function returns a
530 char-table. Otherwise NULL is retuned. */
533 @brief ʸ»ú¥×¥í¥Ñ¥Æ¥£¤Îʸ»ú¥Æ¡¼¥Ö¥ë¤òÆÀ¤ë.
535 ´Ø¿ô mchar_get_prop_table () ¤Ï¡¢¥¡¼¤¬ $KEY ¤Ç¤¢¤ëʸ»ú¥×¥í¥Ñ¥Æ¥£
536 ¤ò´Þ¤àʸ»ú¥Æ¡¼¥Ö¥ë¤òÊÖ¤¹¡£¤â¤· $TYPE ¤¬ NULL ¤Ç¤Ê¤±¤ì¤Ð¡¢ $TYPE ¤Ç
537 »Ø¤µ¤ì¤ë¾ì½ê¤Ë¤½¤Îʸ»ú¤Î¥×¥í¥Ñ¥Æ¥£¤ò³ÊǼ¤¹¤ë¡£Ê¸»ú¥×¥í¥Ñ¥Æ¥£¤Î¼ïÎà
538 ¤Ë´Ø¤·¤Æ¤Ï mchar_define_property () ¤ò¸«¤è¡£
541 ¤â¤· $KEY ¤¬ÀµÅö¤Êʸ»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤Ç¤¢¤ì¤Ð¡¢Ê¸»ú¥Æ¡¼¥Ö¥ë¤¬ÊÖ¤µ
542 ¤ì¤ë¡£¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï NULL ¤¬ÊÖ¤µ¤ì¤ë¡£ */
545 mchar_get_prop_table (MSymbol key, MSymbol *type)
547 MCharPropRecord *record;
549 if (! char_prop_list)
551 record = mplist_get (char_prop_list, key);
556 record->table = (*mdatabase__loader) (record->mdb);
558 MERROR (MERROR_DB, NULL);
562 *type = record->type;
563 return record->table;