]> git.wh0rd.org - fontconfig.git/blobdiff - src/fcdbg.c
Add FcMatchScan to resolve Delicious font matching issues (bug #6769)
[fontconfig.git] / src / fcdbg.c
index e5481890fa7245a4abdcafcd8c0755fc7d419d3e..98b57e6c38b16de02745b68a3a00d0f0a25c6f19 100644 (file)
@@ -22,9 +22,9 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
+#include "fcint.h"
 #include <stdio.h>
 #include <stdlib.h>
-#include "fcint.h"
 
 void
 FcValuePrint (const FcValue v)
@@ -49,7 +49,8 @@ FcValuePrint (const FcValue v)
        printf (" (%f %f; %f %f)", v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy);
        break;
     case FcTypeCharSet:        /* XXX */
-       printf (" set");
+       printf (" ");
+       FcCharSetPrint (v.u.c);
        break;
     case FcTypeLangSet:
        printf (" ");
@@ -64,10 +65,10 @@ FcValuePrint (const FcValue v)
 void
 FcValueListPrint (FcValueListPtr l)
 {
-    for (; FcValueListPtrU(l); l = FcValueListPtrU(l)->next)
+    for (; l != NULL; l = FcValueListNext(l))
     {
-       FcValuePrint (FcValueCanonicalize(&FcValueListPtrU(l)->value));
-       switch (FcValueListPtrU(l)->binding) {
+       FcValuePrint (FcValueCanonicalize(&l->value));
+       switch (l->binding) {
        case FcValueBindingWeak:
            printf ("(w)");
            break;
@@ -95,6 +96,40 @@ FcLangSetPrint (const FcLangSet *ls)
     FcStrBufDestroy (&buf);
 }
 
+void
+FcCharSetPrint (const FcCharSet *c)
+{
+    int        i, j;
+    intptr_t   *leaves = FcCharSetLeaves (c);
+    FcChar16   *numbers = FcCharSetNumbers (c);
+    
+#if 0
+    printf ("CharSet  0x%x\n", (intptr_t) c);
+    printf ("Leaves:  +%d = 0x%x\n", c->leaves_offset, (intptr_t) leaves);
+    printf ("Numbers: +%d = 0x%x\n", c->numbers_offset, (intptr_t) numbers);
+    
+    for (i = 0; i < c->num; i++)
+    {
+       printf ("Page %d: %04x +%d = 0x%x\n", 
+               i, numbers[i], leaves[i], 
+               (intptr_t) FcOffsetToPtr (leaves, leaves[i], FcCharLeaf));
+    }
+#endif
+               
+    for (i = 0; i < c->num; i++)
+    {
+       intptr_t        leaf_offset = leaves[i];
+       FcCharLeaf      *leaf = FcOffsetToPtr (leaves, leaf_offset, FcCharLeaf);
+       
+       if (i)
+           printf ("\t");
+       printf ("%04x:", numbers[i]);
+       for (j = 0; j < 256/32; j++)
+           printf (" %08x", leaf->map[j]);
+       printf ("\n");
+    }
+}
+
 void
 FcPatternPrint (const FcPattern *p)
 {
@@ -109,15 +144,15 @@ FcPatternPrint (const FcPattern *p)
     printf ("Pattern has %d elts (size %d)\n", p->num, p->size);
     for (i = 0; i < p->num; i++)
     {
-       e = FcPatternEltU(p->elts) + i;
-       printf ("\t%s:", FcObjectPtrU(e->object));
+       e = &FcPatternElts(p)[i];
+       printf ("\t%s:", FcObjectName(e->object));
        /* so that fc-match properly displays file: foo... */
-       if (e->object == FcObjectToPtr(FC_FILE))
+       if (e->object == FC_FILE_OBJECT)
        {
            FcChar8 * s;
-           FcPatternGetString (p, FC_FILE, 0, &s);
+           FcPatternObjectGetString (p, FC_FILE_OBJECT, 0, &s);
            printf (" \"%s\"", s);
-           switch (FcValueListPtrU(e->values)->binding) {
+           switch (FcPatternEltValues(e)->binding) {
            case FcValueBindingWeak:
                printf ("(w)");
                break;
@@ -130,7 +165,7 @@ FcPatternPrint (const FcPattern *p)
            }
        }
        else
-           FcValueListPrint (e->values);
+           FcValueListPrint (FcPatternEltValues(e));
        printf ("\n");
     }
     printf ("\n");
@@ -197,7 +232,7 @@ FcExprPrint (const FcExpr *expr)
     case FcOpBool: printf ("%s", expr->u.bval ? "true" : "false"); break;
     case FcOpCharSet: printf ("charset\n"); break;
     case FcOpNil: printf ("nil\n"); break;
-    case FcOpField: printf ("%s", expr->u.field); break;
+    case FcOpField: printf ("%s", FcObjectName(expr->u.object)); break;
     case FcOpConst: printf ("%s", expr->u.constant); break;
     case FcOpQuest:
        FcExprPrint (expr->u.tree.left);
@@ -292,6 +327,9 @@ FcTestPrint (const FcTest *test)
     case FcMatchFont:
        printf ("font ");
        break;
+    case FcMatchScan:
+       printf ("scan ");
+       break;
     }
     switch (test->qual) {
     case FcQualAny:
@@ -307,7 +345,7 @@ FcTestPrint (const FcTest *test)
        printf ("not_first ");
        break;
     }
-    printf ("%s ", test->field);
+    printf ("%s ", FcObjectName (test->object));
     FcOpPrint (test->op);
     printf (" ");
     FcExprPrint (test->expr);
@@ -317,7 +355,7 @@ FcTestPrint (const FcTest *test)
 void
 FcEditPrint (const FcEdit *edit)
 {
-    printf ("Edit %s ", edit->field);
+    printf ("Edit %s ", FcObjectName (edit->object));
     FcOpPrint (edit->op);
     printf (" ");
     FcExprPrint (edit->expr);