]> git.wh0rd.org - fontconfig.git/blobdiff - src/fclang.c
Revert "Fix FcNameUnparseLangSet()" and redo it
[fontconfig.git] / src / fclang.c
index 9d1858de2031dd01afba970ed3e3ddee195c417f..ab7ae5381b6d020da2305594d3dd543e491088b4 100644 (file)
@@ -61,7 +61,7 @@ FcFreeTypeLangSet (const FcCharSet  *charset,
        return 0;
     if (FcDebug() & FC_DBG_LANGSET) 
     {
-       printf ("font charset\n");
+       printf ("font charset");
        FcCharSetPrint (charset);
        printf ("\n");
     }
@@ -69,7 +69,7 @@ FcFreeTypeLangSet (const FcCharSet  *charset,
     {
        if (FcDebug() & FC_DBG_LANGSET) 
        {
-           printf ("%s charset\n", fcLangCharSets[i].lang);
+           printf ("%s charset", fcLangCharSets[i].lang);
            FcCharSetPrint (&fcLangCharSets[i].charset);
            printf ("\n");
        }
@@ -551,20 +551,27 @@ bail0:
 FcBool
 FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls)
 {
-    int                i;
+    int                i, bit;
+    FcChar32   bits;
     FcBool     first = FcTrue;
 
-    for (i = 0; i < NUM_LANG_CHAR_SET; i++)
-       if (FcLangSetBitGet (ls, i))
-           {
-               if (!first)
-                   if (!FcStrBufChar (buf, '|'))
+    for (i = 0; i < NUM_LANG_SET_MAP; i++)
+    {
+       if ((bits = ls->map[i]))
+       {
+           for (bit = 0; bit <= 31; bit++)
+               if (bits & (1 << bit))
+               {
+                   int id = (i << 5) | bit;
+                   if (!first)
+                       if (!FcStrBufChar (buf, '|'))
+                           return FcFalse;
+                   if (!FcStrBufString (buf, fcLangCharSets[fcLangCharSetIndicesInv[id]].lang))
                        return FcFalse;
-               if (!FcStrBufString (buf, fcLangCharSets[i].lang))
-                   return FcFalse;
-               first = FcFalse;
-           }
-
+                   first = FcFalse;
+               }
+       }
+    }
     if (ls->extra)
     {
        FcStrList   *list = FcStrListCreate (ls->extra);
@@ -686,10 +693,10 @@ FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb)
                if (missing & (1 << j)) 
                {
                    if (!FcLangSetContainsLang (lsa,
-                                               fcLangCharSets[i*32 + j].lang))
+                                               fcLangCharSets[fcLangCharSetIndicesInv[i*32 + j]].lang))
                    {
                        if (FcDebug() & FC_DBG_MATCHV)
-                           printf ("\tMissing bitmap %s\n", fcLangCharSets[i*32+j].lang);
+                           printf ("\tMissing bitmap %s\n", fcLangCharSets[fcLangCharSetIndicesInv[i*32+j]].lang);
                        return FcFalse;
                    }
                }