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., 59 Temple Place, Suite 330, Boston, MA
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 char_prop_list = mplist ();
101 = mchar_define_property ("name", Mstring);
103 = mchar_define_property ("category", Msymbol);
105 = mchar_define_property ("combining-class", Minteger);
107 = mchar_define_property ("bidirectional-category", Msymbol);
109 = mchar_define_property ("simple-case-folding", Minteger);
110 Mcomplicated_case_folding
111 = mchar_define_property ("complicated-case-folding", Mtext);
113 = mchar_define_property ("script", Msymbol);
115 mchar_define_property ("cased", Minteger);
116 mchar_define_property ("soft-dotted", Msymbol);
117 mchar_define_property ("case-mapping", Mplist);
127 for (p = char_prop_list; mplist_key (p) != Mnil; p = mplist_next (p))
129 MCharPropRecord *record = mplist_value (p);
133 if (record->type == Mstring)
134 mchartable_map (record->table, NULL, free_string, NULL);
135 M17N_OBJECT_UNREF (record->table);
139 M17N_OBJECT_UNREF (char_prop_list);
143 #endif /* !FOR_DOXYGEN || DOXYGEN_INTERNAL_MODULE */
147 /*** @addtogroup m17nCharacter
153 @brief Maximum character code.
155 The macro #MCHAR_MAX gives the maximum character code. */
158 @brief ʸ»ú¥³¡¼¥É¤ÎºÇÂçÃÍ.
160 ¥Þ¥¯¥í #MCHAR_MAX ¤Ïʸ»ú¥³¡¼¥É¤ÎºÇÂçÃͤòɽ¤¹¡£ */
164 #endif /* FOR_DOXYGEN */
167 @name Variables: Keys of character properties
169 These symbols are used as keys of character properties. */
172 @ingroup m17nCharacter
173 @name ÊÑ¿ô: ʸ»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼
175 ¤³¤ì¤é¤Î¥·¥ó¥Ü¥ë¤Ïʸ»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤Æ»È¤ï¤ì¤ë¡£*/
179 @brief Key for script.
181 The symbol #Mscript has the name <tt>"script"</tt> and is used as the key
182 of a character property. The value of such a property is a symbol
183 representing the script to which the character belongs.
185 Each symbol that represents a script has one of the names listed in
186 the <em>Unicode Technical Report #24</em>. */
189 @brief ¥¹¥¯¥ê¥×¥È¤òɽ¤ï¤¹¥¡¼.
191 ¥·¥ó¥Ü¥ë #Mscript ¤Ï <tt>"script"</tt>
192 ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Á¡¢Ê¸»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤Æ»È¤ï¤ì¤ë¡£
193 ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢¤³¤Îʸ»ú¤Î°¤¹¤ë¥¹¥¯¥ê¥×¥È¤òɽ¤ï¤¹¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£
195 ¥¹¥¯¥ê¥×¥È¤òɽ¤ï¤¹¥·¥ó¥Ü¥ë¤Î̾Á°¤Ï¡¢<em>Unicode Technical Report
196 #24</em> ¤Ë¥ê¥¹¥È¤µ¤ì¤Æ¤¤¤ë¤â¤Î¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ë¡£ */
203 @brief Key for character name.
205 The symbol #Mname has the name <tt>"name"</tt> and is used as
206 the key of a character property. The value of such a property is a
207 C-string representing the name of the character. */
210 @brief ̾Á°¤òɽ¤ï¤¹¥¡¼.
212 ¥·¥ó¥Ü¥ë #Mname ¤Ï <tt>"name"</tt>
213 ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Á¡¢Ê¸»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤Æ»È¤ï¤ì¤ë¡£
214 ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϤ½¤Îʸ»ú¤Î̾Á°¤òɽ¤ï¤¹ C ¤Îʸ»úÎó¤Ç¤¢¤ë¡£ */
221 @brief Key for general category.
223 The symbol #Mcategory has the name <tt>"category"</tt> and is
224 used as the key of a character property. The value of such a
225 property is a symbol representing the <em>general category</em> of
228 Each symbol that represents a general category has one of the
229 names listed as abbreviations for <em>General Category</em> in
233 @brief °ìÈÌ¥«¥Æ¥´¥ê¤òɽ¤ï¤¹¥¡¼.
235 ¥·¥ó¥Ü¥ë #Mcategory ¤Ï <tt>"category"</tt>
236 ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Á¡¢Ê¸»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤Æ»È¤ï¤ì¤ë¡£
237 ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢Âбþ¤¹¤ë <em>°ìÈÌ¥«¥Æ¥´¥ê</em> ¤òɽ¤ï¤¹¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£
239 °ìÈÌ¥«¥Æ¥´¥ê¤òɽ¤ï¤¹¥·¥ó¥Ü¥ë¤Î̾Á°¤Ï¡¢<em>General Category</em>
240 ¤Î¾Êά·Á¤È¤·¤Æ Unicode ¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤â¤Î¤Ç¤¢¤ë¡£ */
247 @brief Key for canonical combining class.
249 The symbol #Mcombining_class has the name
250 <tt>"combining-class"</tt> and is used as the key of a character
251 property. The value of such a property is an integer that
252 represents the <em>canonical combining class</em> of the character.
254 The meaning of each integer that represents a canonical combining
255 class is identical to the one defined in Unicode. */
258 @brief ɸ½à·ë¹ç¥¯¥é¥¹¤òɽ¤ï¤¹¥¡¼.
260 ¥·¥ó¥Ü¥ë #Mcombining_class ¤Ï <tt>"combining-class"</tt>
261 ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Á¡¢Ê¸»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤Æ»È¤ï¤ì¤ë¡£
262 ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢Âбþ¤¹¤ë @e ɸ½à·ë¹ç¥¯¥é¥¹ ¤òɽ¤ï¤¹À°¿ô¤Ç¤¢¤ë¡£
264 ɸ½à·ë¹ç¥¯¥é¥¹¤òɽ¤ï¤¹À°¿ô¤Î°ÕÌ£¤Ï¡¢Unicode
265 ¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤â¤Î¤ÈƱ¤¸¤Ç¤¢¤ë¡£ */
267 MSymbol Mcombining_class;
271 @brief Key for bidi category.
273 The symbol #Mbidi_category has the name <tt>"bidi-category"</tt>
274 and is used as the key of a character property. The value of such
275 a property is a symbol that represents the <em>bidirectional
276 category</em> of the character.
278 Each symbol that represents a bidirectional category has one of
279 the names listed as types of <em>Bidirectional Category</em> in
283 @brief ÁÐÊý¸þ¥«¥Æ¥´¥ê¤òɽ¤ï¤¹¥¡¼.
285 ¥·¥ó¥Ü¥ë #Mbidi_category ¤Ï <tt>"bidi-category"</tt>
286 ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Á¡¢Ê¸»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤Æ»È¤ï¤ì¤ë¡£
287 ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢Âбþ¤¹¤ë @e ÁÐÊý¸þ¥«¥Æ¥´¥ê ¤òɽ¤ï¤¹¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£
289 ÁÐÊý¸þ¥«¥Æ¥´¥ê¤òɽ¤ï¤¹¥·¥ó¥Ü¥ë¤Î̾Á°¤Ï¡¢<em>Bidirectional
290 Category</em> ¤Î·¿¤È¤·¤Æ Unicode ¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤â¤Î¤Ç¤¢¤ë¡£ */
292 MSymbol Mbidi_category;
296 @brief Key for corresponding single lowercase character.
298 The symbol #Msimple_case_folding has the name
299 <tt>"simple-case-folding"</tt> and is used as the key of a
300 character property. The value of such a property is the
301 corresponding single lowercase character that is used when
302 comparing M-texts ignoring cases.
304 If a character requires a complicated comparison (i.e. cannot be
305 compared by simply mapping to another single character), the value
306 of such a property is @c 0xFFFF. In this case, the character has
307 another property whose key is #Mcomplicated_case_folding. */
310 @brief Âбþ¤¹¤ë¾®Ê¸»ú°ìʸ»ú¤òɽ¤ï¤¹¥¡¼.
312 ¥·¥ó¥Ü¥ë #Msimple_case_folding ¤Ï <tt>"simple-case-folding"</tt>
313 ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Á¡¢Ê¸»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤Æ»È¤ï¤ì¤ë¡£
314 ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢Âбþ¤¹¤ë¾®Ê¸»ú°ìʸ»ú¤Ç¤¢¤ê¡¢Âçʸ»ú¡¿¾®Ê¸»ú¤Î¶èÊ̤ò̵»ë¤·¤¿Ê¸»úÎóÈæ³Ó¤ÎºÝ¤Ë»È¤ï¤ì¤ë¡£
316 Ê£»¨¤ÊÈæ³ÓÊýË¡¤òɬÍפȤ¹¤ëʸ»ú¤Ç¤¢¤Ã¤¿¾ì¹ç
317 ¡ÊÊ̤ΰìʸ»ú¤ÈÂбþÉÕ¤±¤ë¤³¤È¤Ë¤è¤Ã¤ÆÈæ³Ó¤Ç¤¤Ê¤¤¾ì¹ç¡Ë¡¢¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤÏ
318 @c 0xFFFF ¤Ë¤Ê¤ë¡£¤³¤Î¾ì¹ç¤½¤Îʸ»ú¤Ï¡¢#Mcomplicated_case_folding
319 ¤È¤¤¤¦¥¡¼¤Îʸ»ú¥×¥í¥Ñ¥Æ¥£¤ò»ý¤Ä¡£ */
321 MSymbol Msimple_case_folding;
323 @brief Key for corresponding multiple lowercase characters.
325 The symbol #Mcomplicated_case_folding has the name
326 <tt>"complicated-case-folding"</tt> and is used as the key of a
327 character property. The value of such a property is the
328 corresponding M-text that contains a sequence of lowercase
329 characters to be used for comparing M-texts ignoring case. */
332 @brief Âбþ¤¹¤ë¾®Ê¸»ú¤ÎÎó¤òɽ¤ï¤¹¥¡¼.
334 ¥·¥ó¥Ü¥ë #Mcomplicated_case_folding ¤Ï
335 <tt>"complicated-case-folding"</tt>
336 ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Á¡¢Ê¸»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤Æ»È¤ï¤ì¤ë¡£
337 ¤³¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢Âбþ¤¹¤ë¾®Ê¸»úÎ󤫤é¤Ê¤ë M-text ¤Ç¤¢¤ê¡¢Âçʸ»ú¡¿¾®Ê¸»ú¤Î¶èÊ̤ò̵»ë¤·¤¿Ê¸»úÎóÈæ³Ó¤ÎºÝ¤Ë»È
341 MSymbol Mcomplicated_case_folding;
347 @brief Define a character property.
349 The mchar_define_property () function searches the m17n database
350 for a data whose tags are \<#Mchar_table, $TYPE, $SYM \>.
351 Here, $SYM is a symbol whose name is $NAME. $TYPE must be
352 #Mstring, #Mtext, #Msymbol, #Minteger, or #Mplist.
355 If the operation was successful, mchar_define_property () returns
356 $SYM. Otherwise it returns #Mnil. */
359 @brief ʸ»ú¥×¥í¥Ñ¥Æ¥£¤òÄêµÁ¤¹¤ë.
361 ´Ø¿ô mchar_define_property () ¤Ï¡¢ \<#Mchar_table, $TYPE, $SYM \>
362 ¤È¤¤¤¦¥¿¥°¤ò»ý¤Ã¤¿¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò m17n ¸À¸ì¾ðÊó¥Ù¡¼¥¹¤«¤éõ¤¹¡£
363 ¤³¤³¤Ç $SYM ¤Ï $NAME ¤È¤¤¤¦Ì¾Á°¤Î¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£$TYPE ¤Ï#Mstring,
364 #Mtext, #Msymbol, #Minteger, #Mplist ¤Î¤¤¤º¤ì¤«¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
367 ½èÍý¤ËÀ®¸ù¤¹¤ì¤Ð mchar_define_property () ¤Ï$SYM ¤òÊÖ¤¹¡£
368 ¼ºÇÔ¤·¤¿¾ì¹ç¤Ï #Mnil ¤òÊÖ¤¹¡£ */
375 mchar_get_prop (), mchar_put_prop () */
378 mchar_define_property (const char *name, MSymbol type)
380 MSymbol key = msymbol (name);
381 MCharPropRecord *record;
383 record = mplist_get (char_prop_list, key);
387 M17N_OBJECT_UNREF (record->table);
391 MSTRUCT_CALLOC (record, MERROR_CHAR);
392 mplist_put (char_prop_list, key, record);
396 if (mdatabase__finder
397 && (record->mdb = (*mdatabase__finder) (Mchar_table, type, key, Mnil)))
399 record->table = NULL;
403 void *default_value = NULL;
406 if (type == Minteger)
407 default_value = (void *) -1;
408 record->table = mchartable (type, default_value);
417 @brief Get the value of a character property.
419 The mchar_get_prop () function searches character $C for the
420 character property whose key is $KEY.
423 If the operation was successful, mchar_get_prop () returns the
424 value of the character property. Otherwise it returns @c
428 @brief ʸ»ú¥×¥í¥Ñ¥Æ¥£¤ÎÃͤòÆÀ¤ë.
430 ´Ø¿ô mchar_get_prop () ¤Ï¡¢Ê¸»ú $C ¤Îʸ»ú¥×¥í¥Ñ¥Æ¥£¤Î¤¦¤Á¥¡¼¤¬
431 $KEY ¤Ç¤¢¤ë¤â¤Î¤òõ¤¹¡£
434 ½èÍý¤¬À®¸ù¤¹¤ì¤Ð mchar_get_prop () ¤Ï¸«¤Ä¤«¤Ã¤¿¥×¥í¥Ñ¥Æ¥£¤ÎÃͤòÊÖ¤¹¡£
435 ¼ºÇÔ¤·¤¿¾ì¹ç¤Ï @c NULL ¤òÊÖ¤¹¡£
437 @latexonly \IPAlabel{mchar_get_prop} @endlatexonly
441 @c MERROR_SYMBOL, @c MERROR_DB
444 mchar_define_property (), mchar_put_prop () */
447 mchar_get_prop (int c, MSymbol key)
449 MCharPropRecord *record;
451 record = mplist_get (char_prop_list, key);
456 record->table = (*mdatabase__loader) (record->mdb);
458 MERROR (MERROR_DB, NULL);
461 return mchartable_lookup (record->table, c);
467 @brief Set the value of a character property.
469 The mchar_put_prop () function searches character $C for the
470 character property whose key is $KEY and assigns $VAL to the value
471 of the found property.
474 If the operation was successful, mchar_put_prop () returns 0.
475 Otherwise, it returns -1. */
477 @brief ʸ»ú¥×¥í¥Ñ¥Æ¥£¤ÎÃͤòÀßÄꤹ¤ë.
479 ´Ø¿ô mchar_put_prop () ¤Ï¡¢Ê¸»ú $C ¤Îʸ»ú¥×¥í¥Ñ¥Æ¥£¤Î¤¦¤Á¥¡¼¤¬ $KEY
480 ¤Ç¤¢¤ë¤â¤Î¤òõ¤·¡¢¤½¤ÎÃͤȤ·¤Æ $VAL ¤òÀßÄꤹ¤ë¡£
483 ½èÍý¤¬À®¸ù¤¹¤ì¤Ð mchar_put_prop () ¤Ï0¤òÊÖ¤¹¡£¼ºÇÔ¤·¤¿¾ì¹ç¤Ï-1¤òÊÖ¤¹¡£ */
486 @c MERROR_SYMBOL, @c MERROR_DB
489 mchar_define_property (), mchar_get_prop () */
492 mchar_put_prop (int c, MSymbol key, void *val)
494 MCharPropRecord *record;
496 record = mplist_get (char_prop_list, key);
501 record->table = (*mdatabase__loader) (record->mdb);
503 MERROR (MERROR_DB, -1);
506 return mchartable_set (record->table, c, val);
512 @brief Get the char-table for a character property.
514 The mchar_get_prop_table () function returns a char-table that
515 contains the character property whose key is $KEY. If $TYPE is
516 not NULL, this function stores the type of the property in the
517 place pointed by $TYPE. See mchar_define_property () for types of
521 If $KEY is a valid character property key, this function returns a
522 char-table. Otherwise NULL is retuned. */
525 @brief ʸ»ú¥×¥í¥Ñ¥Æ¥£¤Îʸ»ú¥Æ¡¼¥Ö¥ë¤òÆÀ¤ë.
527 ´Ø¿ô mchar_get_prop_table () ¤Ï¡¢¥¡¼¤¬ $KEY ¤Ç¤¢¤ëʸ»ú¥×¥í¥Ñ¥Æ¥£
528 ¤ò´Þ¤àʸ»ú¥Æ¡¼¥Ö¥ë¤òÊÖ¤¹¡£¤â¤· $TYPE ¤¬ NULL ¤Ç¤Ê¤±¤ì¤Ð¡¢ $TYPE ¤Ç
529 »Ø¤µ¤ì¤ë¾ì½ê¤Ë¤½¤Îʸ»ú¤Î¥×¥í¥Ñ¥Æ¥£¤ò³ÊǼ¤¹¤ë¡£Ê¸»ú¥×¥í¥Ñ¥Æ¥£¤Î¼ïÎà
530 ¤Ë´Ø¤·¤Æ¤Ï mchar_define_property () ¤ò¸«¤è¡£
533 ¤â¤· $KEY ¤¬ÀµÅö¤Êʸ»ú¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤Ç¤¢¤ì¤Ð¡¢Ê¸»ú¥Æ¡¼¥Ö¥ë¤¬ÊÖ¤µ
534 ¤ì¤ë¡£¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï NULL ¤¬ÊÖ¤µ¤ì¤ë¡£ */
537 mchar_get_prop_table (MSymbol key, MSymbol *type)
539 MCharPropRecord *record;
541 record = mplist_get (char_prop_list, key);
546 record->table = (*mdatabase__loader) (record->mdb);
548 MERROR (MERROR_DB, NULL);
552 *type = record->type;
553 return record->table;