#include <config.h>
#include <stdlib.h>
#include <string.h>
+#include <ctype.h>
#include <locale.h>
#include "m17n.h"
#include "m17n-misc.h"
return 0;
}
+static MPlist *
+load_lang_name (MSymbol target3, MSymbol target2)
+{
+ MPlist *plist, *pl, *p;
+
+ plist = mplist ();
+ mplist_add (plist, Msymbol, target3);
+ pl = mdatabase_list (Mlanguage, Mname, target3, Mnil);
+ if (! pl && target2 != Mnil)
+ pl = mdatabase_list (Mlanguage, Mname, target2, Mnil);
+ if (pl)
+ {
+ MPLIST_DO (p, pl)
+ {
+ MDatabase *mdb = MPLIST_VAL (p);
+ MPlist *p0 = mdatabase_load (mdb), *p1, *territories;
+ MSymbol script = mdatabase_tag (mdb)[3];
+
+ if (MPLIST_PLIST_P (p0))
+ {
+ p1 = MPLIST_PLIST (p0);
+ if (MPLIST_SYMBOL_P (p1) && MPLIST_SYMBOL (p1) == Mlanguage)
+ {
+ p1 = MPLIST_NEXT (MPLIST_NEXT (MPLIST_NEXT (MPLIST_NEXT (p1))));
+ territories = p1;
+ while (! MPLIST_TAIL_P (p1))
+ {
+ if (MPLIST_SYMBOL_P (p1))
+ p1 = MPLIST_NEXT (p1);
+ else
+ mplist__pop_unref (p1);
+ }
+ M17N_OBJECT_REF (territories);
+ mplist__pop_unref (p0);
+ }
+ else
+ territories = mplist ();
+ mplist_push (p0, Mplist, territories);
+ M17N_OBJECT_UNREF (territories);
+ mplist_push (p0, Msymbol, script);
+ mplist_add (plist, Mplist, p0);
+ M17N_OBJECT_UNREF (p0);
+ }
+ }
+ M17N_OBJECT_UNREF (pl);
+ }
+ mplist_push (langname_list, Mplist, plist);
+ M17N_OBJECT_UNREF (plist);
+ return plist;
+}
+
\f
/* Internal API */
MText *mt = MPLIST_MTEXT (pl);
if (mtext_nbytes (mt) == MSYMBOL_NAMELEN (language)
- && memcmp (MTEXT_DATA (MPLIST_MTEXT (pl)),
- MSYMBOL_NAME (language),
- MSYMBOL_NAMELEN (language)) == 0)
+ && strncasecmp ((char *) MTEXT_DATA (MPLIST_MTEXT (pl)),
+ MSYMBOL_NAME (language),
+ MSYMBOL_NAMELEN (language)) == 0)
return MPLIST_PLIST (plist);
}
}
mscript_list (). */
/***ja
- @brief 3\e$BJ8;z8@8l%3!<%I$r%j%9%H$9$k\e(B.
+ @brief 3ʸ»ú¸À¸ì¥³¡¼¥É¤ò¥ê¥¹¥È¤¹¤ë.
- \e$B4X?t\e(B mlanguage_list () \e$B$O!"@07A<0\e(B (well-formed) plist \e$B$rJV$9!#3F%-!<\e(B
- \e$B$O\e(B #Msymbol \e$B$G$"$j!"8D!9$NCM$O\e(B ISO639-2 \e$B$KDj$a$i$l$?\e(B3\e$BJ8;z8@8l%3!<\e(B
- \e$B%I$rL>A0$H$9$k%7%s%\%k$G$"$k!#\e(B
+ ´Ø¿ô mlanguage_list () ¤Ï¡¢À°·Á¼° (well-formed) plist ¤òÊÖ¤¹¡£³Æ¥¡¼
+ ¤Ï #Msymbol ¤Ç¤¢¤ê¡¢¸Ä¡¹¤ÎÃÍ¤Ï ISO639-2 ¤ËÄê¤á¤é¤ì¤¿3ʸ»ú¸À¸ì¥³¡¼
+ ¥É¤ò̾Á°¤È¤¹¤ë¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£
@return
- \e$B$3$N4X?t$,JV$9\e(B plist \e$B$O!"8F$S=P$7B&$,\e(B m17n_object_unref () \e$B$r;H$C\e(B
- \e$B$F2rJ|$9$kI,MW$,$"$k!#\e(B
+ ¤³¤Î´Ø¿ô¤¬ÊÖ¤¹ plist ¤Ï¡¢¸Æ¤Ó½Ð¤·Â¦¤¬ m17n_object_unref () ¤ò»È¤Ã
+ ¤Æ²òÊü¤¹¤ëɬÍפ¬¤¢¤ë¡£
@seealso
mscript_list (). */
symbol. Otherwise, it returns #Mnil.
@seealso
- mlanguage_names (), mlanguage_text (). */
+ mlanguage_name_list (), mlanguage_text (). */
/***ja
- @brief \e$B8@8l%3!<%I$rF@$k\e(B.
+ @brief ¸À¸ì¥³¡¼¥É¤òÆÀ¤ë.
- \e$B4X?t\e(B mlanguage_code () \e$B$O!"\e(B$LANGUAGE \e$B$KBP1~$7$?\e(B ISO-639 \e$B8@8l%3!<%I\e(B
- \e$B$,L>A0$G$"$k$h$&$J%7%s%\%k$rJV$9!#\e(B$LANGUAGE \e$B$O%7%s%\%k$G$"$j!"$=$N\e(B
- \e$BL>A0$O!"\e(BISO639-2 3\e$BJ8;z8@8l%3!<%I!"\e(BISO639-1 2\e$BJ8;z8@8l%3!<%I!"1Q8lL>!"\e(B
- \e$B$N$$$:$l$+$G$"$k!#\e(B
+ ´Ø¿ô mlanguage_code () ¤Ï¡¢$LANGUAGE ¤ËÂбþ¤·¤¿ ISO-639 ¸À¸ì¥³¡¼¥É
+ ¤¬Ì¾Á°¤Ç¤¢¤ë¤è¤¦¤Ê¥·¥ó¥Ü¥ë¤òÊÖ¤¹¡£$LANGUAGE ¤Ï¥·¥ó¥Ü¥ë¤Ç¤¢¤ê¡¢¤½¤Î
+ ̾Á°¤Ï¡¢ISO639-2 3ʸ»ú¸À¸ì¥³¡¼¥É¡¢ISO639-1 2ʸ»ú¸À¸ì¥³¡¼¥É¡¢±Ñ¸ì̾¡¢
+ ¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ë¡£
- $LEN \e$B$OJV$5$l$k8@8l%3!<%I$N<oN`$r7hDj$9$k!#\e(B$LEN \e$B$,\e(B3\e$B$N>l9g$O\e(B
- ISO639-2 3\e$BJ8;z8@8l%3!<%I$,JV$5$l$k!#\e(B2\e$B$N>l9g$O!"$b$7Dj5A$5$l$F$$$l\e(B
- \e$B$P\e(B ISO639-1 2\e$BJ8;z8@8l%3!<%I$,!"$=$&$G$J$1$l$P\e(B #Mnil \e$B$,JV$5$l$k!#\e(B0
- \e$B$N>l9g$O!"$b$7Dj5A$5$l$F$$$l$P\e(B2\e$BJ8;z%3!<%I$,!"$=$&$G$J$1$l$P\e(B3\e$BJ8;z%3!<\e(B
- \e$B%I$,JV$5$l$k!#\e(B
+ $LEN ¤ÏÊÖ¤µ¤ì¤ë¸À¸ì¥³¡¼¥É¤Î¼ïÎà¤ò·èÄꤹ¤ë¡£$LEN ¤¬3¤Î¾ì¹ç¤Ï
+ ISO639-2 3ʸ»ú¸À¸ì¥³¡¼¥É¤¬ÊÖ¤µ¤ì¤ë¡£2¤Î¾ì¹ç¤Ï¡¢¤â¤·ÄêµÁ¤µ¤ì¤Æ¤¤¤ì
+ ¤Ð ISO639-1 2ʸ»ú¸À¸ì¥³¡¼¥É¤¬¡¢¤½¤¦¤Ç¤Ê¤±¤ì¤Ð #Mnil ¤¬ÊÖ¤µ¤ì¤ë¡£0
+ ¤Î¾ì¹ç¤Ï¡¢¤â¤·ÄêµÁ¤µ¤ì¤Æ¤¤¤ì¤Ð2ʸ»ú¥³¡¼¥É¤¬¡¢¤½¤¦¤Ç¤Ê¤±¤ì¤Ð3ʸ»ú¥³¡¼
+ ¥É¤¬ÊÖ¤µ¤ì¤ë¡£
@return
- \e$B$b$7>pJs$,F@$i$l$l$P!"$3$N4X?t$O\e(B #Mnil \e$B0J30$N%7%s%\%k$rJV$9!#$=$&\e(B
- \e$B$G$J$1$l$P\e(B #Mnil \e$B$rJV$9!#\e(B
+ ¤â¤·¾ðÊó¤¬ÆÀ¤é¤ì¤ì¤Ð¡¢¤³¤Î´Ø¿ô¤Ï #Mnil °Ê³°¤Î¥·¥ó¥Ü¥ë¤òÊÖ¤¹¡£¤½¤¦
+ ¤Ç¤Ê¤±¤ì¤Ð #Mnil ¤òÊÖ¤¹¡£
@seealso
mlanguage_name (), mlanguage_text (). */
@brief Return the language names written in the specified language.
The mlanguage_name_list () function returns a plist of LANGUAGE's
- names written in TARGET language.
+ names written in TARGET language. SCRIPT and TERRITORY, if not #Mnil,
+ specifies which script and territory to concern at first.
LANGUAGE and TARGET must be a symbol whose name is an ISO639-2
3-letter language code or an ISO639-1 2-letter language codes.
TARGET may be #Mnil, in which case, the language of the current
locale is used. If locale is not set or is C, English is used.
+ SCRIPT and TERRITORY must be a symbol whose name is a script and
+ territory name of a locale (e.g. "TW", "SG") respectively.
+
@return
- If the information is available, this function returns a non-empty
- plist whose keys are #Mtext and values are M-texts of the
- translated language names. Otherwise, @c NULL is returned.
+ If the translation is available, this function returns a non-empty
+ plist. The first element has key #MText and the value is an
+ M-text of a translated language name. If the succeeding elements
+ also have key #MText, their values are M-texts of alternate
+ translations.
+
+ If no translation is available, @c NULL is returned.
+
The returned plist should not be modified nor freed.
@seealso
mlanguage_code (), mlanguage_text (). */
MPlist *
-mlanguage_name_list (MSymbol language, MSymbol target)
+mlanguage_name_list (MSymbol language, MSymbol target,
+ MSymbol script, MSymbol territory)
{
- MPlist *plist;
+ MPlist *plist, *pl;
+ MSymbol language2, target2;
plist = mlanguage__info (language);
if (! plist)
return NULL;
- language = mplist_value (plist);
+ language = MPLIST_SYMBOL (plist);
+ language2 = MPLIST_SYMBOL (MPLIST_NEXT (plist));
if (target != Mnil)
{
plist = mlanguage__info (target);
if (! plist)
return NULL;
- target = mplist_value (plist);
+ target = MPLIST_SYMBOL (plist);
+ target2 = MPLIST_SYMBOL (MPLIST_NEXT (plist));
}
else
{
MLocale *locale = mlocale_set (LC_MESSAGES, NULL);
if (! locale)
- target = msymbol ("eng");
+ {
+ target = msymbol ("eng");
+ target2 = msymbol ("en");
+ script = territory = Mnil;
+ }
else
{
target = mlocale_get_prop (locale, Mlanguage);
plist = mlanguage__info (target);
if (! plist)
return NULL;
- target = mplist_value (plist);
+ target = MPLIST_SYMBOL (plist);
+ target2 = MPLIST_SYMBOL (MPLIST_NEXT (plist));
+ script = mlocale_get_prop (locale, Mscript);
+ territory = mlocale_get_prop (locale, Mterritory);
}
}
- /* Now both LANGUAGE and TARGET are 3-letter codes. */
- if (langname_list)
- plist = mplist_get (langname_list, target);
+ /* Now both LANGUAGE and TARGET are 3-letter codes. */
+ if (! langname_list)
+ langname_list = mplist ();
+ plist = mplist__assq (langname_list, target);
+ if (plist)
+ plist = MPLIST_PLIST (plist);
else
- langname_list = mplist (), plist = NULL;
- if (! plist)
+ plist = load_lang_name (target, target2);
+
+ /* PLIST = (TARGET (SCRIPT (TERRITORY ...) (LANG-CODE NAME ...) ...) ...) */
+ plist = MPLIST_NEXT (plist);
+ if (MPLIST_TAIL_P (plist))
+ return NULL;
+
+ MPLIST_DO (pl, plist)
+ {
+ MPlist *p = MPLIST_PLIST (pl), *p0;
+
+ if (MPLIST_SYMBOL (p) == script
+ && (territory == Mnil
+ || mplist_find_by_value (MPLIST_PLIST (MPLIST_NEXT (p)),
+ territory))
+ && (p = MPLIST_NEXT (MPLIST_NEXT (p)))
+ && ((p0 = mplist__assq (p, language))
+ || (p0 = mplist__assq (p, language2))))
+ {
+ plist = p0;
+ break;
+ }
+ }
+ if (MPLIST_TAIL_P (pl))
{
- MDatabase *mdb = mdatabase_find (Mlanguage, Mname, target, Mnil);
+ MPLIST_DO (pl, plist)
+ {
+ MPlist *p = MPLIST_NEXT (MPLIST_PLIST (pl)), *p0;
+
+ if ((territory == Mnil
+ || mplist_find_by_value (MPLIST_VAL (p), territory))
+ && (p = MPLIST_NEXT (MPLIST_NEXT (p)))
+ && ((p0 = mplist__assq (p, language))
+ || (p0 = mplist__assq (p, language2))))
+ {
+ plist = p0;
+ break;
+ }
+ }
+ if (MPLIST_TAIL_P (pl))
+ {
+ MPLIST_DO (pl, plist)
+ {
+ MPlist *p = MPLIST_NEXT (MPLIST_NEXT (MPLIST_PLIST (pl))), *p0;
+
+ if ((p0 = mplist__assq (p, language))
+ || (p0 = mplist__assq (p, language2)))
+ {
+ plist = p0;
+ break;
+ }
+ }
+ if (MPLIST_TAIL_P (pl))
+ return NULL;
+ }
+ }
- if (! mdb
- || ! (plist = mdatabase_load (mdb)))
- plist = mplist ();
- else
- mplist__pop_unref (plist);
- langname_list = mplist_push (langname_list, target, plist);
- MPLIST_SET_NESTED_P (langname_list);
+ plist = MPLIST_NEXT (MPLIST_PLIST (plist));
+ if (territory != Mnil)
+ {
+ MPLIST_DO (pl, MPLIST_NEXT (plist))
+ if (MPLIST_SYMBOL_P (pl) && MPLIST_SYMBOL (pl) == territory)
+ break;
+ if (! MPLIST_TAIL_P (pl)
+ && (pl = MPLIST_NEXT (pl))
+ && MPLIST_MTEXT_P (pl))
+ return pl;
}
- /* PLIST == ((LANGUAGE TRANSLATED) ...) */
- plist = mplist__assq (plist, language);
- if (! plist || MPLIST_TAIL_P (plist))
- return NULL;
- plist = MPLIST_PLIST (plist);
- plist = MPLIST_NEXT (plist);
- return plist;
+ MPLIST_DO (plist, plist)
+ if (MPLIST_MTEXT_P (plist))
+ break;
+ return (MPLIST_MTEXT_P (plist) ? plist : NULL);
}
/*=*/
mlanguage_code (), mlanguage_name (). */
/***ja
- @brief \e$BM?$($i$l$?8@8l<+?H$G=q$+$l$?8@8lL>$rJV$9\e(B.
+ @brief Í¿¤¨¤é¤ì¤¿¸À¸ì¼«¿È¤Ç½ñ¤«¤ì¤¿¸À¸ì̾¤òÊÖ¤¹.
- \e$B4X?t\e(B mlanguage_text () \e$B$O!"8@8l\e(B $LANGUAGE \e$B$G=q$+$l$?\e(B $LANGUAGE \e$B$N\e(B
- \e$BL>A0$r\e(B M-text \e$B$N7A<0$GJV$9!#$=$N8@8l$NBeI=E*$JJ8;z$,$o$+$C$F$$$k>l\e(B
- \e$B9g$O!"JV$5$l$k\e(B M-text \e$B$N3FJ8;z$K!"%-!<$,\e(B #Mtext \e$B$GCM$,$=$NBeI=E*$J\e(B
- \e$BJ8;z$r4^$`\e(B M-text \e$B$G$"$k$h$&$J%F%-%9%H%W%m%Q%F%#$,IU2C$5$l$k!#\e(B
+ ´Ø¿ô mlanguage_text () ¤Ï¡¢¸À¸ì $LANGUAGE ¤Ç½ñ¤«¤ì¤¿ $LANGUAGE ¤Î
+ ̾Á°¤ò M-text ¤Î·Á¼°¤ÇÊÖ¤¹¡£¤½¤Î¸À¸ì¤ÎÂåɽŪ¤Êʸ»ú¤¬¤ï¤«¤Ã¤Æ¤¤¤ë¾ì
+ ¹ç¤Ï¡¢ÊÖ¤µ¤ì¤ë M-text ¤Î³Æʸ»ú¤Ë¡¢¥¡¼¤¬ #Mtext ¤ÇÃͤ¬¤½¤ÎÂåɽŪ¤Ê
+ ʸ»ú¤ò´Þ¤à M-text ¤Ç¤¢¤ë¤è¤¦¤Ê¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤¬Éղ䵤ì¤ë¡£
@return
- \e$B5a$a$k>pJs$,F@$i$l$?>l9g!"$3$N4X?t$,JV$9\e(B M-text \e$B$rJQ99$7$?$j2rJ|$7\e(B
- \e$B$?$j$7$F$O$$$1$J$$!#>pJs$,F@$i$l$J$+$C$?>l9g$O\e(B @c NULL \e$B$,JV$5$l$k!#\e(B
+ µá¤á¤ë¾ðÊó¤¬ÆÀ¤é¤ì¤¿¾ì¹ç¡¢¤³¤Î´Ø¿ô¤¬ÊÖ¤¹ M-text ¤òÊѹ¹¤·¤¿¤ê²òÊü¤·
+ ¤¿¤ê¤·¤Æ¤Ï¤¤¤±¤Ê¤¤¡£¾ðÊó¤¬ÆÀ¤é¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï @c NULL ¤¬ÊÖ¤µ¤ì¤ë¡£
@seealso
mlanguage_code (), mlanguage_name (). */
mscript_language_list (), mlanguage_list (). */
/***ja
- @brief \e$B%9%/%j%W%HL>$r%j%9%H$9$k\e(B.
+ @brief ¥¹¥¯¥ê¥×¥È̾¤ò¥ê¥¹¥È¤¹¤ë.
- \e$B4X?t\e(B mscript_list () \e$B$O!"@07A<0\e(B (well-formed) plist \e$B$rJV$9!#3F%-!<\e(B
- \e$B$O\e(B #Msymbol \e$B$G$"$j!"8D!9$NCM$O%9%/%j%W%HL>$rL>A0$H$9$k%7%s%\%k$G$"\e(B
- \e$B$k!#\e(B
+ ´Ø¿ô mscript_list () ¤Ï¡¢À°·Á¼° (well-formed) plist ¤òÊÖ¤¹¡£³Æ¥¡¼
+ ¤Ï #Msymbol ¤Ç¤¢¤ê¡¢¸Ä¡¹¤ÎÃͤϥ¹¥¯¥ê¥×¥È̾¤ò̾Á°¤È¤¹¤ë¥·¥ó¥Ü¥ë¤Ç¤¢
+ ¤ë¡£
@return
- \e$B$3$N4X?t$,JV$9\e(B plist \e$B$O!"8F$S=P$7B&$,\e(B m17n_object_unref () \e$B$r;H$C\e(B
- \e$B$F2rJ|$9$kI,MW$,$"$k!#\e(B
+ ¤³¤Î´Ø¿ô¤¬ÊÖ¤¹ plist ¤Ï¡¢¸Æ¤Ó½Ð¤·Â¦¤¬ m17n_object_unref () ¤ò»È¤Ã
+ ¤Æ²òÊü¤¹¤ëɬÍפ¬¤¢¤ë¡£
@seealso
mscript_language_list (), mlanguage_list (). */
mscript_list (), mlanguage_list (). */
/***ja
- @brief \e$BM?$($i$l$?%9%/%j%W%H$rMQ$$$k8@8l$r%j%9%H$9$k\e(B.
+ @brief Í¿¤¨¤é¤ì¤¿¥¹¥¯¥ê¥×¥È¤òÍѤ¤¤ë¸À¸ì¤ò¥ê¥¹¥È¤¹¤ë.
- \e$B4X?t\e(B mscript_language_list () \e$B$O!"\e(B$SCRIPT \e$B$rMQ$$$k8@8l$r%j%9%H$9$k!#\e(B
- $SCRIPT \e$B$O%7%s%\%k$G!"$=$NL>A0$O\e(B Unicode Character Database \e$B$K<($5\e(B
- \e$B$l$F$$$k%9%/%j%W%HL>$r$9$Y$F>.J8;z$K$7$?$b$N$G$"$k!#\e(B
+ ´Ø¿ô mscript_language_list () ¤Ï¡¢$SCRIPT ¤òÍѤ¤¤ë¸À¸ì¤ò¥ê¥¹¥È¤¹¤ë¡£
+ $SCRIPT ¤Ï¥·¥ó¥Ü¥ë¤Ç¡¢¤½¤Î̾Á°¤Ï Unicode Character Database ¤Ë¼¨¤µ
+ ¤ì¤Æ¤¤¤ë¥¹¥¯¥ê¥×¥È̾¤ò¤¹¤Ù¤Æ¾®Ê¸»ú¤Ë¤·¤¿¤â¤Î¤Ç¤¢¤ë¡£
- @return \e$B$3$N4X?t$O!"@07A<0\e(B (well-formed) plist \e$B$rJV$9!#3F%-!<$O\e(B
- #Msymbol \e$B$G$"$j!"8D!9$NCM$O\e(B ISO639-1 \e$B$KDj$a$i$l$?\e(B2\e$BJ8;z8@8l%3!<%I\e(B
- (\e$BDj5A$5$l$F$$$J$$>l9g$O\e(B ISO639-2 \e$B$KDj$a$i$l$?\e(B3\e$BJ8;z8@8l%3!<%I\e(B) \e$B$rL>\e(B
- \e$BA0$H$9$k%7%s%\%k$G$"$k!#JV$5$l$k\e(B plist \e$B$OJQ99$7$?$j2rJ|$7$?$j$7$F\e(B
- \e$B$O$J$i$J$$!#\e(B$SCRIPT \e$B$,L$CN$N>l9g$O\e(B @c NULL \e$B$,JV$5$l$k!#\e(B
+ @return
+ ¤³¤Î´Ø¿ô¤Ï¡¢À°·Á¼° (well-formed) plist ¤òÊÖ¤¹¡£³Æ¥¡¼¤Ï
+ #Msymbol ¤Ç¤¢¤ê¡¢¸Ä¡¹¤ÎÃÍ¤Ï ISO639-1 ¤ËÄê¤á¤é¤ì¤¿2ʸ»ú¸À¸ì¥³¡¼¥É
+ (ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï ISO639-2 ¤ËÄê¤á¤é¤ì¤¿3ʸ»ú¸À¸ì¥³¡¼¥É) ¤ò̾
+ Á°¤È¤¹¤ë¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£ÊÖ¤µ¤ì¤ë plist ¤ÏÊѹ¹¤·¤¿¤ê²òÊü¤·¤¿¤ê¤·¤Æ
+ ¤Ï¤Ê¤é¤Ê¤¤¡£$SCRIPT ¤¬Ì¤ÃΤξì¹ç¤Ï @c NULL ¤¬ÊÖ¤µ¤ì¤ë¡£
@seealso
mscript_list (), mlanguage_list (). */
@name Obsolete functions
*/
/***ja
- @name Obsolete \e$B$J4X?t\e(B
+ @name Obsolete ¤Ê´Ø¿ô
*/
/*** @{ */
mlanguage_code (), mlanguage_text (). */
/***ja
- @brief \e$B8@8l$N1Q8lL>$rF@$k\e(B.
+ @brief ¸À¸ì¤Î±Ñ¸ì̾¤òÆÀ¤ë.
- \e$B4X?t\e(B mlanguage_name () \e$B$O!"\e(B$LANGUAGE \e$B$N1Q8lL>$rL>A0$H$9$k$h$&$J%7\e(B
- \e$B%s%\%k$rJV$9!#\e(B$LANGUAGE \e$B$O%7%s%\%k$G$"$j!"$=$NL>A0$O!"\e(BISO639-2 3\e$BJ8\e(B
- \e$B;z8@8l%3!<%I!"\e(BISO639-1 2\e$BJ8;z8@8l%3!<%I!"1Q8lL>!"$N$$$:$l$+$G$"$k!#\e(B
+ ´Ø¿ô mlanguage_name () ¤Ï¡¢$LANGUAGE ¤Î±Ñ¸ì̾¤ò̾Á°¤È¤¹¤ë¤è¤¦¤Ê¥·
+ ¥ó¥Ü¥ë¤òÊÖ¤¹¡£$LANGUAGE ¤Ï¥·¥ó¥Ü¥ë¤Ç¤¢¤ê¡¢¤½¤Î̾Á°¤Ï¡¢ISO639-2 3ʸ
+ »ú¸À¸ì¥³¡¼¥É¡¢ISO639-1 2ʸ»ú¸À¸ì¥³¡¼¥É¡¢±Ñ¸ì̾¡¢¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ë¡£
@return
- \e$B5a$a$F$$$k>pJs$,F@$i$l$k$J$i!"$3$N4X?t$O\e(B #Mnil \e$B0J30$N%7%s%\%k$rJV\e(B
- \e$B$9!#$=$&$G$J$1$l$P\e(B #Mnil \e$B$rJV$9!#\e(B
+ µá¤á¤Æ¤¤¤ë¾ðÊó¤¬ÆÀ¤é¤ì¤ë¤Ê¤é¡¢¤³¤Î´Ø¿ô¤Ï #Mnil °Ê³°¤Î¥·¥ó¥Ü¥ë¤òÊÖ
+ ¤¹¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð #Mnil ¤òÊÖ¤¹¡£
@seealso
mlanguage_code (), mlanguage_text (). */
{
MPlist *plist = mlanguage__info (language);
MText *mt;
+ char *str;
if (! plist) /* 3-letter code */
return Mnil;
if (MPLIST_TAIL_P (plist))
return Mnil;
plist = MPLIST_NEXT (plist); /* english name */
- if (MPLIST_MTEXT_P (plist))
+ if (! MPLIST_MTEXT_P (plist))
return Mnil;
mt = MPLIST_MTEXT (plist);
- if (mtext_nbytes (mt) != MSYMBOL_NAMELEN (language)
- || memcmp (MTEXT_DATA (MPLIST_MTEXT (plist)),
- MSYMBOL_NAME (language),
- MSYMBOL_NAMELEN (language)))
- return Mnil;
- return language;
+ str = alloca (mtext_nbytes (mt));
+ memcpy (str, MTEXT_DATA (mt), mtext_nbytes (mt));
+ str[0] = tolower (str[0]);
+ return msymbol__with_len (str, mtext_nbytes (mt));
}
/*=*/
+/*
+ Local Variables:
+ coding: euc-japan
+ End:
+*/