*** empty log message ***
[m17n/m17n-lib.git] / src / fontset.c
index bb35823..2f2ca55 100644 (file)
@@ -1,5 +1,5 @@
 /* fontset.c -- fontset module.
-   Copyright (C) 2003, 2004
+   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H15PRO112
 
@@ -74,6 +74,8 @@
 #include "font.h"
 #include "fontset.h"
 
+static int mdebug_flag = MDEBUG_FONTSET;
+
 static M17NObjectArray fontset_table;
 
 struct MFontset
@@ -298,13 +300,15 @@ realize_fontset_elements (MFrame *frame, MRealizedFontset *realized)
 {
   MFontset *fontset = realized->fontset;
   MPlist *per_script, *per_charset, *font_group;
-  MPlist *plist, *pl, *p;
+  MPlist *plist, *p;
 
   realized->per_script = per_script = mplist ();
   /* The actual elements of per_script are realized on demand.  */
 #if 0
   MPLIST_DO (plist, fontset->per_script)
     {
+      MPlist *pl;
+
       per_lang = mplist ();
       per_script = mplist_add (per_script, MPLIST_KEY (plist), per_lang);
       MPLIST_DO (pl, MPLIST_PLIST (plist))
@@ -319,11 +323,11 @@ realize_fontset_elements (MFrame *frame, MRealizedFontset *realized)
 #endif
 
   realized->per_charset = per_charset = mplist ();
-  MPLIST_DO (pl, fontset->per_charset)
+  MPLIST_DO (plist, fontset->per_charset)
     {
       font_group = mplist ();
       per_charset = mplist_add (per_charset, MPLIST_KEY (plist), font_group);
-      MPLIST_DO (p, MPLIST_PLIST (pl))
+      MPLIST_DO (p, MPLIST_PLIST (plist))
        font_group = mplist_add (font_group, MPLIST_KEY (p), MPLIST_VAL (p));
     }
   realized->fallback = font_group = mplist ();
@@ -750,6 +754,17 @@ mfont__lookup_fontset (MRealizedFontset *realized, MGlyph *g, int *num,
   MPlist *plist;
   MRealizedFont *rfont = NULL;
 
+  if (MDEBUG_FLAG ())
+    {
+      int i;
+
+      MDEBUG_PRINT1 (" [FONTSET] fontset looking up for %s:",
+                    script ? script->name : "none");
+      for (i = 0; i < *num; i++)
+       MDEBUG_PRINT1 (" U+%04X", g[i].g.c);
+      MDEBUG_PRINT ("\n");
+    }
+
   if (realized->tick != realized->fontset->tick)
     update_fontset_elements (realized);
 
@@ -757,7 +772,7 @@ mfont__lookup_fontset (MRealizedFontset *realized, MGlyph *g, int *num,
       && (per_charset = mplist_get (realized->per_charset, charset)) != NULL
       && (rfont = try_font_group (realized, &realized->request, per_charset,
                                  g, num, size)))
-    return rfont;
+    goto done;
 
   if (script != Mnil)
     {
@@ -786,7 +801,7 @@ mfont__lookup_fontset (MRealizedFontset *realized, MGlyph *g, int *num,
       if ((per_lang = mplist_get (per_script, language))
          && (rfont = try_font_group (realized, &request, per_lang,
                                      g, num, size)))
-       return rfont;
+       goto done;
 
       if (per_lang && *num > 1)
        *num = 1;
@@ -798,7 +813,7 @@ mfont__lookup_fontset (MRealizedFontset *realized, MGlyph *g, int *num,
                && (rfont = try_font_group (realized, &request,
                                            MPLIST_PLIST (plist),
                                            g, num, size)))
-             return rfont;
+             goto done;
        }
       else
        {
@@ -806,7 +821,7 @@ mfont__lookup_fontset (MRealizedFontset *realized, MGlyph *g, int *num,
          if ((per_lang = mplist_get (per_script, Mt))
              && (rfont = try_font_group (realized, &request, per_lang,
                                          g, num, size)))
-           return rfont;
+           goto done;
 
          if (per_lang && *num > 1)
            *num = 1;
@@ -817,10 +832,10 @@ mfont__lookup_fontset (MRealizedFontset *realized, MGlyph *g, int *num,
                && (rfont = try_font_group (realized, &request,
                                            MPLIST_PLIST (plist),
                                            g, num, size)))
-             return rfont;
+             goto done;
        }
       if (ignore_fallback)
-       return NULL;
+       goto done;
     }
 
   if (language != Mnil)
@@ -836,30 +851,25 @@ mfont__lookup_fontset (MRealizedFontset *realized, MGlyph *g, int *num,
        if ((per_lang = mplist_get (MPLIST_PLIST (plist), language))
            && (rfont = try_font_group (realized, &request, per_lang,
                                        g, num, size)))
-         return rfont;
+         goto done;
       }
 
   /* Try fallback fonts.  */
-  if ((rfont = try_font_group (realized, &realized->request,
-                              realized->fallback, g, num, size)))
-    return rfont;
-
-  return NULL;
-
-  /* At last try all fonts.  */
-  MPLIST_DO (per_script, realized->per_script)
+  rfont = try_font_group (realized, &realized->request,
+                         realized->fallback, g, num, size);
+ done:
+  if (MDEBUG_FLAG ())
     {
-      MPLIST_DO (per_lang, MPLIST_PLIST (per_script))
-       if ((rfont = try_font_group (realized, &realized->request,
-                                    MPLIST_PLIST (per_lang), g, num, size)))
-         return rfont;
+      if (rfont)
+       {
+         MSymbol family = mfont_get_prop (rfont->font, Mfamily);
+         MDEBUG_PRINT1 (" [FONTSET] found %s\n", family->name);
+       }
+      else
+       MDEBUG_PRINT (" [FONTSET] not found\n");
     }
-  MPLIST_DO (per_charset, realized->per_charset)
-    if ((rfont = try_font_group (realized, &realized->request,
-                                MPLIST_PLIST (per_charset), g, num, size)))
-      return rfont;
 
-  return NULL;
+  return rfont;
 }
 
 MRealizedFont *
@@ -1217,7 +1227,7 @@ mfontset_copy (MFontset *fontset, char *name)
     ¤¬Éé¤Ê¤é¤Ð¡¢ºÇÄã¤ÎÍ¥ÀèÅÙ¤ò»ý¤Ä¡£$HOW ¤¬ 0 ¤Ê¤é¤Ð¡¢$FONT 
     ¤Ï´ØÏ¢ÉÕ¤±¤é¤ì¤¿¤â¤Î¤ËÂФ¹¤ëÍ£°ì¤ÎÍøÍѲÄǽ¤Ê¥Õ¥©¥ó¥È¤È¤Ê¤ê¡¢Â¾¤Î¥Õ¥©¥ó¥È¤Ï¥°¥ë¡¼¥×¤«¤é¼è¤ê½ü¤«¤ì¤ë¡£
 
-    $LAYOUTER_NAME ¤Ï @c Mnil ¤Ç¤¢¤ë¤«¡¢@ref flt 
+    $LAYOUTER_NAME ¤Ï @c Mnil ¤Ç¤¢¤ë¤«¡¢@ref mdbFLT 
     ¡Ê¥Õ¥©¥ó¥È¥ì¥¤¥¢¥¦¥È¥Æ¡¼¥Ö¥ë¡Ë¤ò¼¨¤¹¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£¥·¥ó¥Ü¥ë¤Ç¤¢¤ì¤Ð¡¢$FONT ¤òÍѤ¤¤Æ
     M-text ¤òɽ¼¨¤¹¤ëºÝ¤Ë¤Ï¡¢¤½¤Î¥Õ¥©¥ó¥È¥ì¥¤¥¢¥¦¥È¥Æ¡¼¥Ö¥ë¤ò»È¤Ã¤Æʸ»úÎ󤫤饰¥ê¥Õ¥³¡¼¥ÉÎó¤òÀ¸À®¤¹¤ë¡£