/* language.c -- language (and script) module.
- Copyright (C) 2003, 2004, 2006
+ Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
National Institute of Advanced Industrial Science and Technology (AIST)
Registration Number H15PRO112
&& (p = MPLIST_NEXT (p)) /* char list */
&& ! MPLIST_TAIL_P (p)
&& (p = MPLIST_NEXT (p)) /* otf tag */
- && MPLIST_SYMBOL_P (p)
- && otf_tag == MPLIST_SYMBOL (p))
+ && ! MPLIST_TAIL_P (p))
{
- script = MPLIST_SYMBOL (pl);
- break;
+ if (MPLIST_SYMBOL_P (p))
+ {
+ if (otf_tag == MPLIST_SYMBOL (p))
+ return MPLIST_SYMBOL (pl);
+ }
+ else if (MPLIST_PLIST (p))
+ {
+ MPlist *p0;
+
+ MPLIST_DO (p0, MPLIST_PLIST (p))
+ if (MPLIST_SYMBOL_P (p0) && otf_tag == MPLIST_SYMBOL (p0))
+ return MPLIST_SYMBOL (pl);
+ }
}
}
return script;
MPLIST_DO (pl, plist)
{
- MPlist *p = MPLIST_PLIST (pl);
+ MPlist *p = MPLIST_PLIST (pl), *p0;
if (MPLIST_SYMBOL (p) == script
&& (territory == Mnil
|| mplist_find_by_value (MPLIST_PLIST (MPLIST_NEXT (p)),
- territory)))
- break;
+ 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_PLIST (pl));
+ MPlist *p = MPLIST_NEXT (MPLIST_PLIST (pl)), *p0;
- if (territory == Mnil
- || mplist_find_by_value (MPLIST_VAL (MPLIST_NEXT (p)),
- territory))
- break;
+ 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))
- pl = plist;
+ {
+ 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;
+ }
}
- /* PL = ((SCRIPT (TERRITORY ...) (LANG-CODE NAME ...) ...) ...) */
- plist = MPLIST_PLIST (pl);
- plist = MPLIST_NEXT (MPLIST_NEXT (plist));
- pl = mplist__assq (plist, language);
- if (! pl && language2 != Mnil)
- pl = mplist__assq (plist, language2);
- if (! pl)
- return NULL;
- plist = MPLIST_PLIST (pl);
- plist = MPLIST_NEXT (plist);
+ plist = MPLIST_NEXT (MPLIST_PLIST (plist));
if (territory != Mnil)
{
- pl = MPLIST_NEXT (pl);
- MPLIST_DO (pl, plist)
+ MPLIST_DO (pl, MPLIST_NEXT (plist))
if (MPLIST_SYMBOL_P (pl) && MPLIST_SYMBOL (pl) == territory)
break;
if (! MPLIST_TAIL_P (pl)
$SCRIPT ¤Ï¥·¥ó¥Ü¥ë¤Ç¡¢¤½¤Î̾Á°¤Ï Unicode Character Database ¤Ë¼¨¤µ
¤ì¤Æ¤¤¤ë¥¹¥¯¥ê¥×¥È̾¤ò¤¹¤Ù¤Æ¾®Ê¸»ú¤Ë¤·¤¿¤â¤Î¤Ç¤¢¤ë¡£
- @return ¤³¤Î´Ø¿ô¤Ï¡¢À°·Á¼° (well-formed) plist ¤òÊÖ¤¹¡£³Æ¥¡¼¤Ï
+ @return
+ ¤³¤Î´Ø¿ô¤Ï¡¢À°·Á¼° (well-formed) plist ¤òÊÖ¤¹¡£³Æ¥¡¼¤Ï
#Msymbol ¤Ç¤¢¤ê¡¢¸Ä¡¹¤ÎÃÍ¤Ï ISO639-1 ¤ËÄê¤á¤é¤ì¤¿2ʸ»ú¸À¸ì¥³¡¼¥É
(ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï ISO639-2 ¤ËÄê¤á¤é¤ì¤¿3ʸ»ú¸À¸ì¥³¡¼¥É) ¤ò̾
Á°¤È¤¹¤ë¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£ÊÖ¤µ¤ì¤ë plist ¤ÏÊѹ¹¤·¤¿¤ê²òÊü¤·¤¿¤ê¤·¤Æ