(parse_otf_command): Fix previous change.
[m17n/m17n-lib.git] / src / language.c
index b32265d..b31eeeb 100644 (file)
@@ -1,5 +1,5 @@
 /* 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
 
@@ -317,11 +317,21 @@ mscript__from_otf_tag (MSymbol otf_tag)
          && (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;
@@ -566,14 +576,22 @@ mlanguage_name_list (MSymbol language, MSymbol target,
        }
       if (MPLIST_TAIL_P (pl))
        {
-         pl = MPLIST_NEXT (MPLIST_NEXT (MPLIST_PLIST (plist)));
-         if (! (plist = mplist__assq (pl, language)))
-           plist = mplist__assq (pl, language2);
+         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 (! plist)
-    return NULL;
   plist = MPLIST_NEXT (MPLIST_PLIST (plist));
   if (territory != Mnil)
     {
@@ -726,7 +744,8 @@ mscript_list (void)
     $SCRIPT ¤Ï¥·¥ó¥Ü¥ë¤Ç¡¢¤½¤Î̾Á°¤Ï Unicode Character Database ¤Ë¼¨¤µ
     ¤ì¤Æ¤¤¤ë¥¹¥¯¥ê¥×¥È̾¤ò¤¹¤Ù¤Æ¾®Ê¸»ú¤Ë¤·¤¿¤â¤Î¤Ç¤¢¤ë¡£
 
-    @return ¤³¤Î´Ø¿ô¤Ï¡¢À°·Á¼° (well-formed) plist ¤òÊÖ¤¹¡£³Æ¥­¡¼¤Ï 
+    @return 
+    ¤³¤Î´Ø¿ô¤Ï¡¢À°·Á¼° (well-formed) plist ¤òÊÖ¤¹¡£³Æ¥­¡¼¤Ï 
     #Msymbol ¤Ç¤¢¤ê¡¢¸Ä¡¹¤ÎÃͤϠISO639-1 ¤ËÄê¤á¤é¤ì¤¿2ʸ»ú¸À¸ì¥³¡¼¥É
     (ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï ISO639-2 ¤ËÄê¤á¤é¤ì¤¿3ʸ»ú¸À¸ì¥³¡¼¥É) ¤ò̾
     Á°¤È¤¹¤ë¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£ÊÖ¤µ¤ì¤ë plist ¤ÏÊѹ¹¤·¤¿¤ê²òÊü¤·¤¿¤ê¤·¤Æ