/*
- * $XFree86: $
+ * fontconfig/src/fcdbg.c
*
- * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
+ * Copyright © 2000 Keith Packard
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* PERFORMANCE OF THIS SOFTWARE.
*/
+#include "fcint.h"
#include <stdio.h>
#include <stdlib.h>
-#include "fcint.h"
void
-FcValuePrint (FcValue v)
+FcValuePrint (const FcValue v)
{
switch (v.type) {
case FcTypeVoid:
printf (" <void>");
break;
case FcTypeInteger:
- printf (" %d", v.u.i);
+ printf (" %d(i)", v.u.i);
break;
case FcTypeDouble:
- printf (" %g", v.u.d);
+ printf (" %g(f)", v.u.d);
break;
case FcTypeString:
printf (" \"%s\"", v.u.s);
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 (" ");
+ FcLangSetPrint (v.u.l);
+ break;
+ case FcTypeFTFace:
+ printf (" face");
+ break;
+ }
+}
+
+void
+FcValueListPrint (FcValueListPtr l)
+{
+ for (; l != NULL; l = FcValueListNext(l))
+ {
+ FcValuePrint (FcValueCanonicalize(&l->value));
+ switch (l->binding) {
+ case FcValueBindingWeak:
+ printf ("(w)");
+ break;
+ case FcValueBindingStrong:
+ printf ("(s)");
+ break;
+ case FcValueBindingSame:
+ printf ("(=)");
+ break;
+ }
}
}
void
-FcValueListPrint (FcValueList *l)
+FcLangSetPrint (const FcLangSet *ls)
{
- for (; l; l = l->next)
- FcValuePrint (l->value);
+ FcStrBuf buf;
+ FcChar8 init_buf[1024];
+
+ FcStrBufInit (&buf, init_buf, sizeof (init_buf));
+ if (FcNameUnparseLangSet (&buf, ls) && FcStrBufChar (&buf,'\0'))
+ printf ("%s", buf.buf);
+ else
+ printf ("langset (alloc error)");
+ 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 (FcPattern *p)
+FcPatternPrint (const FcPattern *p)
{
int i;
FcPatternElt *e;
printf ("Null pattern\n");
return;
}
- printf ("Pattern %d of %d\n", p->num, p->size);
+ printf ("Pattern has %d elts (size %d)\n", p->num, p->size);
for (i = 0; i < p->num; i++)
{
- e = &p->elts[i];
- printf ("\t%s:", e->object);
- FcValueListPrint (e->values);
+ e = &FcPatternElts(p)[i];
+ printf ("\t%s:", FcObjectName(e->object));
+ FcValueListPrint (FcPatternEltValues(e));
printf ("\n");
}
printf ("\n");
case FcOpOr: printf ("Or"); break;
case FcOpAnd: printf ("And"); break;
case FcOpEqual: printf ("Equal"); break;
- case FcOpContains: printf ("Contains"); break;
case FcOpNotEqual: printf ("NotEqual"); break;
case FcOpLess: printf ("Less"); break;
case FcOpLessEqual: printf ("LessEqual"); break;
case FcOpMore: printf ("More"); break;
case FcOpMoreEqual: printf ("MoreEqual"); break;
+ case FcOpContains: printf ("Contains"); break;
+ case FcOpNotContains: printf ("NotContains"); break;
case FcOpPlus: printf ("Plus"); break;
case FcOpMinus: printf ("Minus"); break;
case FcOpTimes: printf ("Times"); break;
case FcOpNot: printf ("Not"); break;
case FcOpNil: printf ("Nil"); break;
case FcOpComma: printf ("Comma"); break;
+ case FcOpFloor: printf ("Floor"); break;
+ case FcOpCeil: printf ("Ceil"); break;
+ case FcOpRound: printf ("Round"); break;
+ case FcOpTrunc: printf ("Trunc"); break;
+ case FcOpListing: printf ("Listing"); break;
case FcOpInvalid: printf ("Invalid"); break;
}
}
void
-FcExprPrint (FcExpr *expr)
+FcExprPrint (const FcExpr *expr)
{
- switch (expr->op) {
+ if (!expr) printf ("none");
+ else switch (expr->op) {
case FcOpInteger: printf ("%d", expr->u.ival); break;
case FcOpDouble: printf ("%g", expr->u.dval); break;
case FcOpString: printf ("\"%s\"", expr->u.sval); break;
expr->u.mval->xx,
expr->u.mval->xy,
expr->u.mval->yx,
- expr->u.mval->yy);
+ expr->u.mval->yy); break;
case FcOpBool: printf ("%s", expr->u.bval ? "true" : "false"); break;
case FcOpCharSet: printf ("charset\n"); break;
- case FcOpNil: printf ("nil\n");
- case FcOpField: printf ("%s", expr->u.field); break;
+ case FcOpNil: printf ("nil\n"); 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);
case FcOpOr:
case FcOpAnd:
case FcOpEqual:
- case FcOpContains:
case FcOpNotEqual:
case FcOpLess:
case FcOpLessEqual:
case FcOpMore:
case FcOpMoreEqual:
+ case FcOpContains:
+ case FcOpListing:
+ case FcOpNotContains:
case FcOpPlus:
case FcOpMinus:
case FcOpTimes:
case FcOpOr: printf ("Or"); break;
case FcOpAnd: printf ("And"); break;
case FcOpEqual: printf ("Equal"); break;
- case FcOpContains: printf ("Contains"); break;
case FcOpNotEqual: printf ("NotEqual"); break;
case FcOpLess: printf ("Less"); break;
case FcOpLessEqual: printf ("LessEqual"); break;
case FcOpMore: printf ("More"); break;
case FcOpMoreEqual: printf ("MoreEqual"); break;
+ case FcOpContains: printf ("Contains"); break;
+ case FcOpListing: printf ("Listing"); break;
+ case FcOpNotContains: printf ("NotContains"); break;
case FcOpPlus: printf ("Plus"); break;
case FcOpMinus: printf ("Minus"); break;
case FcOpTimes: printf ("Times"); break;
printf ("Not ");
FcExprPrint (expr->u.tree.left);
break;
+ case FcOpFloor:
+ printf ("Floor ");
+ FcExprPrint (expr->u.tree.left);
+ break;
+ case FcOpCeil:
+ printf ("Ceil ");
+ FcExprPrint (expr->u.tree.left);
+ break;
+ case FcOpRound:
+ printf ("Round ");
+ FcExprPrint (expr->u.tree.left);
+ break;
+ case FcOpTrunc:
+ printf ("Trunc ");
+ FcExprPrint (expr->u.tree.left);
+ break;
case FcOpInvalid: printf ("Invalid"); break;
}
}
void
-FcTestPrint (FcTest *test)
+FcTestPrint (const FcTest *test)
{
+ switch (test->kind) {
+ case FcMatchPattern:
+ printf ("pattern ");
+ break;
+ case FcMatchFont:
+ printf ("font ");
+ break;
+ case FcMatchScan:
+ printf ("scan ");
+ break;
+ }
switch (test->qual) {
case FcQualAny:
printf ("any ");
case FcQualAll:
printf ("all ");
break;
+ case FcQualFirst:
+ printf ("first ");
+ break;
+ case FcQualNotFirst:
+ printf ("not_first ");
+ break;
}
- printf ("%s ", test->field);
+ printf ("%s ", FcObjectName (test->object));
FcOpPrint (test->op);
printf (" ");
FcExprPrint (test->expr);
}
void
-FcEditPrint (FcEdit *edit)
+FcEditPrint (const FcEdit *edit)
{
- printf ("Edit %s ", edit->field);
+ printf ("Edit %s ", FcObjectName (edit->object));
FcOpPrint (edit->op);
printf (" ");
FcExprPrint (edit->expr);
}
void
-FcSubstPrint (FcSubst *subst)
+FcSubstPrint (const FcSubst *subst)
{
FcEdit *e;
FcTest *t;
}
void
-FcFontSetPrint (FcFontSet *s)
+FcFontSetPrint (const FcFontSet *s)
{
int i;
}
}
-int
-FcDebug (void)
+int FcDebugVal;
+
+void
+FcInitDebug (void)
{
- static int initialized;
- static int debug;
+ char *e;
- if (!initialized)
+ e = getenv ("FC_DEBUG");
+ if (e)
{
- char *e;
-
- initialized = 1;
- e = getenv ("FC_DEBUG");
- if (e)
- {
- printf ("FC_DEBUG=%s\n", e);
- debug = atoi (e);
- if (debug < 0)
- debug = 0;
- }
+ printf ("FC_DEBUG=%s\n", e);
+ FcDebugVal = atoi (e);
+ if (FcDebugVal < 0)
+ FcDebugVal = 0;
}
- return debug;
}
+#define __fcdbg__
+#include "fcaliastail.h"
+#undef __fcdbg__