fcdbg.c revision 6fc018e4
12c393a42Smrg/* 2a6844aabSmrg * fontconfig/src/fcdbg.c 32c393a42Smrg * 42c393a42Smrg * Copyright © 2000 Keith Packard 52c393a42Smrg * 62c393a42Smrg * Permission to use, copy, modify, distribute, and sell this software and its 72c393a42Smrg * documentation for any purpose is hereby granted without fee, provided that 82c393a42Smrg * the above copyright notice appear in all copies and that both that 92c393a42Smrg * copyright notice and this permission notice appear in supporting 10ca08ab68Smrg * documentation, and that the name of the author(s) not be used in 112c393a42Smrg * advertising or publicity pertaining to distribution of the software without 12ca08ab68Smrg * specific, written prior permission. The authors make no 132c393a42Smrg * representations about the suitability of this software for any purpose. It 142c393a42Smrg * is provided "as is" without express or implied warranty. 152c393a42Smrg * 16a6844aabSmrg * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 172c393a42Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 18a6844aabSmrg * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR 192c393a42Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 202c393a42Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 212c393a42Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 222c393a42Smrg * PERFORMANCE OF THIS SOFTWARE. 232c393a42Smrg */ 242c393a42Smrg 252c393a42Smrg#include "fcint.h" 262c393a42Smrg#include <stdio.h> 272c393a42Smrg#include <stdlib.h> 282c393a42Smrg 29ca08ab68Smrgstatic void 30c9710b42Smrg_FcValuePrintFile (FILE *f, const FcValue v) 312c393a42Smrg{ 322c393a42Smrg switch (v.type) { 336fc018e4Smrg case FcTypeUnknown: 346fc018e4Smrg fprintf (f, "<unknown>"); 356fc018e4Smrg break; 362c393a42Smrg case FcTypeVoid: 37c9710b42Smrg fprintf (f, "<void>"); 382c393a42Smrg break; 392c393a42Smrg case FcTypeInteger: 40c9710b42Smrg fprintf (f, "%d(i)", v.u.i); 412c393a42Smrg break; 422c393a42Smrg case FcTypeDouble: 43c9710b42Smrg fprintf (f, "%g(f)", v.u.d); 442c393a42Smrg break; 452c393a42Smrg case FcTypeString: 46c9710b42Smrg fprintf (f, "\"%s\"", v.u.s); 472c393a42Smrg break; 482c393a42Smrg case FcTypeBool: 49c9710b42Smrg fprintf (f, "%s", v.u.b ? "True" : "False"); 502c393a42Smrg break; 512c393a42Smrg case FcTypeMatrix: 52c9710b42Smrg fprintf (f, "[%g %g; %g %g]", v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy); 532c393a42Smrg break; 542c393a42Smrg case FcTypeCharSet: /* XXX */ 55c9710b42Smrg if (f == stdout) 56c9710b42Smrg FcCharSetPrint (v.u.c); 572c393a42Smrg break; 582c393a42Smrg case FcTypeLangSet: 592c393a42Smrg FcLangSetPrint (v.u.l); 602c393a42Smrg break; 612c393a42Smrg case FcTypeFTFace: 62c9710b42Smrg fprintf (f, "face"); 632c393a42Smrg break; 642c393a42Smrg } 652c393a42Smrg} 662c393a42Smrg 67c9710b42Smrgvoid 68c9710b42SmrgFcValuePrintFile (FILE *f, const FcValue v) 69c9710b42Smrg{ 70c9710b42Smrg fprintf (f, " "); 71c9710b42Smrg _FcValuePrintFile (f, v); 72c9710b42Smrg} 73c9710b42Smrg 74ca08ab68Smrgvoid 75ca08ab68SmrgFcValuePrint (const FcValue v) 76ca08ab68Smrg{ 77ca08ab68Smrg printf (" "); 78c9710b42Smrg _FcValuePrintFile (stdout, v); 79ca08ab68Smrg} 80ca08ab68Smrg 81ca08ab68Smrgvoid 82ca08ab68SmrgFcValuePrintWithPosition (const FcValue v, FcBool show_pos_mark) 83ca08ab68Smrg{ 84ca08ab68Smrg if (show_pos_mark) 85c9710b42Smrg printf (" [marker] "); 86ca08ab68Smrg else 87ca08ab68Smrg printf (" "); 88c9710b42Smrg _FcValuePrintFile (stdout, v); 89ca08ab68Smrg} 90ca08ab68Smrg 91ca08ab68Smrgstatic void 92ca08ab68SmrgFcValueBindingPrint (const FcValueListPtr l) 93ca08ab68Smrg{ 94ca08ab68Smrg switch (l->binding) { 95ca08ab68Smrg case FcValueBindingWeak: 96ca08ab68Smrg printf ("(w)"); 97ca08ab68Smrg break; 98ca08ab68Smrg case FcValueBindingStrong: 99ca08ab68Smrg printf ("(s)"); 100ca08ab68Smrg break; 101ca08ab68Smrg case FcValueBindingSame: 102ca08ab68Smrg printf ("(=)"); 103ca08ab68Smrg break; 1046fc018e4Smrg default: 1056fc018e4Smrg /* shouldn't be reached */ 1066fc018e4Smrg printf ("(?)"); 1076fc018e4Smrg break; 108ca08ab68Smrg } 109ca08ab68Smrg} 110ca08ab68Smrg 111ca08ab68Smrgvoid 112ca08ab68SmrgFcValueListPrintWithPosition (FcValueListPtr l, const FcValueListPtr pos) 113ca08ab68Smrg{ 114ca08ab68Smrg for (; l != NULL; l = FcValueListNext(l)) 115ca08ab68Smrg { 116ca08ab68Smrg FcValuePrintWithPosition (FcValueCanonicalize (&l->value), pos != NULL && l == pos); 117ca08ab68Smrg FcValueBindingPrint (l); 118ca08ab68Smrg } 119ca08ab68Smrg if (!pos) 120c9710b42Smrg printf (" [marker]"); 121ca08ab68Smrg} 122ca08ab68Smrg 1232c393a42Smrgvoid 1242c393a42SmrgFcValueListPrint (FcValueListPtr l) 1252c393a42Smrg{ 1262c393a42Smrg for (; l != NULL; l = FcValueListNext(l)) 1272c393a42Smrg { 128ca08ab68Smrg FcValuePrint (FcValueCanonicalize (&l->value)); 129ca08ab68Smrg FcValueBindingPrint (l); 1302c393a42Smrg } 1312c393a42Smrg} 1322c393a42Smrg 1332c393a42Smrgvoid 1342c393a42SmrgFcLangSetPrint (const FcLangSet *ls) 1352c393a42Smrg{ 1362c393a42Smrg FcStrBuf buf; 1372c393a42Smrg FcChar8 init_buf[1024]; 138ca08ab68Smrg 1392c393a42Smrg FcStrBufInit (&buf, init_buf, sizeof (init_buf)); 1402c393a42Smrg if (FcNameUnparseLangSet (&buf, ls) && FcStrBufChar (&buf,'\0')) 1412c393a42Smrg printf ("%s", buf.buf); 1422c393a42Smrg else 1432c393a42Smrg printf ("langset (alloc error)"); 1442c393a42Smrg FcStrBufDestroy (&buf); 1452c393a42Smrg} 1462c393a42Smrg 1472c393a42Smrgvoid 1482c393a42SmrgFcCharSetPrint (const FcCharSet *c) 1492c393a42Smrg{ 1502c393a42Smrg int i, j; 1512c393a42Smrg intptr_t *leaves = FcCharSetLeaves (c); 1522c393a42Smrg FcChar16 *numbers = FcCharSetNumbers (c); 153ca08ab68Smrg 1542c393a42Smrg#if 0 1552c393a42Smrg printf ("CharSet 0x%x\n", (intptr_t) c); 1562c393a42Smrg printf ("Leaves: +%d = 0x%x\n", c->leaves_offset, (intptr_t) leaves); 1572c393a42Smrg printf ("Numbers: +%d = 0x%x\n", c->numbers_offset, (intptr_t) numbers); 158ca08ab68Smrg 1592c393a42Smrg for (i = 0; i < c->num; i++) 1602c393a42Smrg { 161ca08ab68Smrg printf ("Page %d: %04x +%d = 0x%x\n", 162ca08ab68Smrg i, numbers[i], leaves[i], 1632c393a42Smrg (intptr_t) FcOffsetToPtr (leaves, leaves[i], FcCharLeaf)); 1642c393a42Smrg } 1652c393a42Smrg#endif 1662c393a42Smrg 167a6844aabSmrg printf ("\n"); 1682c393a42Smrg for (i = 0; i < c->num; i++) 1692c393a42Smrg { 1702c393a42Smrg intptr_t leaf_offset = leaves[i]; 1712c393a42Smrg FcCharLeaf *leaf = FcOffsetToPtr (leaves, leaf_offset, FcCharLeaf); 1722c393a42Smrg 173a6844aabSmrg printf ("\t"); 1742c393a42Smrg printf ("%04x:", numbers[i]); 1752c393a42Smrg for (j = 0; j < 256/32; j++) 1762c393a42Smrg printf (" %08x", leaf->map[j]); 1772c393a42Smrg printf ("\n"); 1782c393a42Smrg } 1792c393a42Smrg} 1802c393a42Smrg 1812c393a42Smrgvoid 1822c393a42SmrgFcPatternPrint (const FcPattern *p) 1832c393a42Smrg{ 1842c393a42Smrg int i; 1852c393a42Smrg FcPatternElt *e; 186ca08ab68Smrg 1872c393a42Smrg if (!p) 1882c393a42Smrg { 1892c393a42Smrg printf ("Null pattern\n"); 1902c393a42Smrg return; 1912c393a42Smrg } 1922c393a42Smrg printf ("Pattern has %d elts (size %d)\n", p->num, p->size); 1932c393a42Smrg for (i = 0; i < p->num; i++) 1942c393a42Smrg { 1952c393a42Smrg e = &FcPatternElts(p)[i]; 1962c393a42Smrg printf ("\t%s:", FcObjectName(e->object)); 197a6844aabSmrg FcValueListPrint (FcPatternEltValues(e)); 1982c393a42Smrg printf ("\n"); 1992c393a42Smrg } 2002c393a42Smrg printf ("\n"); 2012c393a42Smrg} 2022c393a42Smrg 203ca08ab68Smrg#define FcOpFlagsPrint(_o_) \ 204ca08ab68Smrg { \ 205ca08ab68Smrg int f = FC_OP_GET_FLAGS (_o_); \ 206ca08ab68Smrg if (f & FcOpFlagIgnoreBlanks) \ 207ca08ab68Smrg printf ("(ignore blanks)"); \ 208ca08ab68Smrg } 209ca08ab68Smrg 2102c393a42Smrgvoid 211ca08ab68SmrgFcOpPrint (FcOp op_) 2122c393a42Smrg{ 213ca08ab68Smrg FcOp op = FC_OP_GET_OP (op_); 214ca08ab68Smrg 2152c393a42Smrg switch (op) { 2162c393a42Smrg case FcOpInteger: printf ("Integer"); break; 2172c393a42Smrg case FcOpDouble: printf ("Double"); break; 2182c393a42Smrg case FcOpString: printf ("String"); break; 2192c393a42Smrg case FcOpMatrix: printf ("Matrix"); break; 220ca08ab68Smrg case FcOpRange: printf ("Range"); break; 2212c393a42Smrg case FcOpBool: printf ("Bool"); break; 2222c393a42Smrg case FcOpCharSet: printf ("CharSet"); break; 223ca08ab68Smrg case FcOpLangSet: printf ("LangSet"); break; 2242c393a42Smrg case FcOpField: printf ("Field"); break; 2252c393a42Smrg case FcOpConst: printf ("Const"); break; 2262c393a42Smrg case FcOpAssign: printf ("Assign"); break; 2272c393a42Smrg case FcOpAssignReplace: printf ("AssignReplace"); break; 2282c393a42Smrg case FcOpPrepend: printf ("Prepend"); break; 2292c393a42Smrg case FcOpPrependFirst: printf ("PrependFirst"); break; 2302c393a42Smrg case FcOpAppend: printf ("Append"); break; 2312c393a42Smrg case FcOpAppendLast: printf ("AppendLast"); break; 232c9710b42Smrg case FcOpDelete: printf ("Delete"); break; 233c9710b42Smrg case FcOpDeleteAll: printf ("DeleteAll"); break; 2342c393a42Smrg case FcOpQuest: printf ("Quest"); break; 2352c393a42Smrg case FcOpOr: printf ("Or"); break; 2362c393a42Smrg case FcOpAnd: printf ("And"); break; 237ca08ab68Smrg case FcOpEqual: printf ("Equal"); FcOpFlagsPrint (op_); break; 238ca08ab68Smrg case FcOpNotEqual: printf ("NotEqual"); FcOpFlagsPrint (op_); break; 2392c393a42Smrg case FcOpLess: printf ("Less"); break; 2402c393a42Smrg case FcOpLessEqual: printf ("LessEqual"); break; 2412c393a42Smrg case FcOpMore: printf ("More"); break; 2422c393a42Smrg case FcOpMoreEqual: printf ("MoreEqual"); break; 2432c393a42Smrg case FcOpContains: printf ("Contains"); break; 2442c393a42Smrg case FcOpNotContains: printf ("NotContains"); break; 2452c393a42Smrg case FcOpPlus: printf ("Plus"); break; 2462c393a42Smrg case FcOpMinus: printf ("Minus"); break; 2472c393a42Smrg case FcOpTimes: printf ("Times"); break; 2482c393a42Smrg case FcOpDivide: printf ("Divide"); break; 2492c393a42Smrg case FcOpNot: printf ("Not"); break; 2502c393a42Smrg case FcOpNil: printf ("Nil"); break; 2512c393a42Smrg case FcOpComma: printf ("Comma"); break; 2522c393a42Smrg case FcOpFloor: printf ("Floor"); break; 2532c393a42Smrg case FcOpCeil: printf ("Ceil"); break; 2542c393a42Smrg case FcOpRound: printf ("Round"); break; 2552c393a42Smrg case FcOpTrunc: printf ("Trunc"); break; 256ca08ab68Smrg case FcOpListing: printf ("Listing"); FcOpFlagsPrint (op_); break; 2572c393a42Smrg case FcOpInvalid: printf ("Invalid"); break; 2582c393a42Smrg } 2592c393a42Smrg} 2602c393a42Smrg 2612c393a42Smrgvoid 2622c393a42SmrgFcExprPrint (const FcExpr *expr) 2632c393a42Smrg{ 2642c393a42Smrg if (!expr) printf ("none"); 265ca08ab68Smrg else switch (FC_OP_GET_OP (expr->op)) { 2662c393a42Smrg case FcOpInteger: printf ("%d", expr->u.ival); break; 2672c393a42Smrg case FcOpDouble: printf ("%g", expr->u.dval); break; 2682c393a42Smrg case FcOpString: printf ("\"%s\"", expr->u.sval); break; 269c9710b42Smrg case FcOpMatrix: 270c9710b42Smrg printf ("["); 271c9710b42Smrg FcExprPrint (expr->u.mexpr->xx); 272c9710b42Smrg printf (" "); 273c9710b42Smrg FcExprPrint (expr->u.mexpr->xy); 274c9710b42Smrg printf ("; "); 275c9710b42Smrg FcExprPrint (expr->u.mexpr->yx); 276c9710b42Smrg printf (" "); 277c9710b42Smrg FcExprPrint (expr->u.mexpr->yy); 278c9710b42Smrg printf ("]"); 279c9710b42Smrg break; 280ca08ab68Smrg case FcOpRange: break; 2812c393a42Smrg case FcOpBool: printf ("%s", expr->u.bval ? "true" : "false"); break; 2822c393a42Smrg case FcOpCharSet: printf ("charset\n"); break; 283ca08ab68Smrg case FcOpLangSet: 284ca08ab68Smrg printf ("langset:"); 285ca08ab68Smrg FcLangSetPrint(expr->u.lval); 286ca08ab68Smrg printf ("\n"); 287ca08ab68Smrg break; 2882c393a42Smrg case FcOpNil: printf ("nil\n"); break; 289c9710b42Smrg case FcOpField: printf ("%s ", FcObjectName(expr->u.name.object)); 290c9710b42Smrg switch ((int) expr->u.name.kind) { 291c9710b42Smrg case FcMatchPattern: 292c9710b42Smrg printf ("(pattern) "); 293c9710b42Smrg break; 294c9710b42Smrg case FcMatchFont: 295c9710b42Smrg printf ("(font) "); 296c9710b42Smrg break; 297c9710b42Smrg } 298c9710b42Smrg break; 2992c393a42Smrg case FcOpConst: printf ("%s", expr->u.constant); break; 3002c393a42Smrg case FcOpQuest: 3012c393a42Smrg FcExprPrint (expr->u.tree.left); 3022c393a42Smrg printf (" quest "); 3032c393a42Smrg FcExprPrint (expr->u.tree.right->u.tree.left); 3042c393a42Smrg printf (" colon "); 3052c393a42Smrg FcExprPrint (expr->u.tree.right->u.tree.right); 3062c393a42Smrg break; 3072c393a42Smrg case FcOpAssign: 3082c393a42Smrg case FcOpAssignReplace: 3092c393a42Smrg case FcOpPrependFirst: 3102c393a42Smrg case FcOpPrepend: 3112c393a42Smrg case FcOpAppend: 3122c393a42Smrg case FcOpAppendLast: 3132c393a42Smrg case FcOpOr: 3142c393a42Smrg case FcOpAnd: 3152c393a42Smrg case FcOpEqual: 3162c393a42Smrg case FcOpNotEqual: 3172c393a42Smrg case FcOpLess: 3182c393a42Smrg case FcOpLessEqual: 3192c393a42Smrg case FcOpMore: 3202c393a42Smrg case FcOpMoreEqual: 3212c393a42Smrg case FcOpContains: 3222c393a42Smrg case FcOpListing: 3232c393a42Smrg case FcOpNotContains: 3242c393a42Smrg case FcOpPlus: 3252c393a42Smrg case FcOpMinus: 3262c393a42Smrg case FcOpTimes: 3272c393a42Smrg case FcOpDivide: 3282c393a42Smrg case FcOpComma: 3292c393a42Smrg FcExprPrint (expr->u.tree.left); 3302c393a42Smrg printf (" "); 331ca08ab68Smrg switch (FC_OP_GET_OP (expr->op)) { 3322c393a42Smrg case FcOpAssign: printf ("Assign"); break; 3332c393a42Smrg case FcOpAssignReplace: printf ("AssignReplace"); break; 3342c393a42Smrg case FcOpPrependFirst: printf ("PrependFirst"); break; 3352c393a42Smrg case FcOpPrepend: printf ("Prepend"); break; 3362c393a42Smrg case FcOpAppend: printf ("Append"); break; 3372c393a42Smrg case FcOpAppendLast: printf ("AppendLast"); break; 3382c393a42Smrg case FcOpOr: printf ("Or"); break; 3392c393a42Smrg case FcOpAnd: printf ("And"); break; 340ca08ab68Smrg case FcOpEqual: printf ("Equal"); FcOpFlagsPrint (expr->op); break; 341ca08ab68Smrg case FcOpNotEqual: printf ("NotEqual"); FcOpFlagsPrint (expr->op); break; 3422c393a42Smrg case FcOpLess: printf ("Less"); break; 3432c393a42Smrg case FcOpLessEqual: printf ("LessEqual"); break; 3442c393a42Smrg case FcOpMore: printf ("More"); break; 3452c393a42Smrg case FcOpMoreEqual: printf ("MoreEqual"); break; 3462c393a42Smrg case FcOpContains: printf ("Contains"); break; 347ca08ab68Smrg case FcOpListing: printf ("Listing"); FcOpFlagsPrint (expr->op); break; 3482c393a42Smrg case FcOpNotContains: printf ("NotContains"); break; 3492c393a42Smrg case FcOpPlus: printf ("Plus"); break; 3502c393a42Smrg case FcOpMinus: printf ("Minus"); break; 3512c393a42Smrg case FcOpTimes: printf ("Times"); break; 3522c393a42Smrg case FcOpDivide: printf ("Divide"); break; 3532c393a42Smrg case FcOpComma: printf ("Comma"); break; 3542c393a42Smrg default: break; 3552c393a42Smrg } 3562c393a42Smrg printf (" "); 3572c393a42Smrg FcExprPrint (expr->u.tree.right); 3582c393a42Smrg break; 3592c393a42Smrg case FcOpNot: 3602c393a42Smrg printf ("Not "); 3612c393a42Smrg FcExprPrint (expr->u.tree.left); 3622c393a42Smrg break; 3632c393a42Smrg case FcOpFloor: 3642c393a42Smrg printf ("Floor "); 3652c393a42Smrg FcExprPrint (expr->u.tree.left); 3662c393a42Smrg break; 3672c393a42Smrg case FcOpCeil: 3682c393a42Smrg printf ("Ceil "); 3692c393a42Smrg FcExprPrint (expr->u.tree.left); 3702c393a42Smrg break; 3712c393a42Smrg case FcOpRound: 3722c393a42Smrg printf ("Round "); 3732c393a42Smrg FcExprPrint (expr->u.tree.left); 3742c393a42Smrg break; 3752c393a42Smrg case FcOpTrunc: 3762c393a42Smrg printf ("Trunc "); 3772c393a42Smrg FcExprPrint (expr->u.tree.left); 3782c393a42Smrg break; 3792c393a42Smrg case FcOpInvalid: printf ("Invalid"); break; 3802c393a42Smrg } 3812c393a42Smrg} 3822c393a42Smrg 3832c393a42Smrgvoid 3842c393a42SmrgFcTestPrint (const FcTest *test) 3852c393a42Smrg{ 3862c393a42Smrg switch (test->kind) { 3872c393a42Smrg case FcMatchPattern: 3882c393a42Smrg printf ("pattern "); 3892c393a42Smrg break; 3902c393a42Smrg case FcMatchFont: 3912c393a42Smrg printf ("font "); 3922c393a42Smrg break; 3932c393a42Smrg case FcMatchScan: 3942c393a42Smrg printf ("scan "); 3952c393a42Smrg break; 3962c393a42Smrg } 3972c393a42Smrg switch (test->qual) { 3982c393a42Smrg case FcQualAny: 3992c393a42Smrg printf ("any "); 4002c393a42Smrg break; 4012c393a42Smrg case FcQualAll: 4022c393a42Smrg printf ("all "); 4032c393a42Smrg break; 4042c393a42Smrg case FcQualFirst: 4052c393a42Smrg printf ("first "); 4062c393a42Smrg break; 4072c393a42Smrg case FcQualNotFirst: 4082c393a42Smrg printf ("not_first "); 4092c393a42Smrg break; 4102c393a42Smrg } 4112c393a42Smrg printf ("%s ", FcObjectName (test->object)); 4122c393a42Smrg FcOpPrint (test->op); 4132c393a42Smrg printf (" "); 4142c393a42Smrg FcExprPrint (test->expr); 4152c393a42Smrg printf ("\n"); 4162c393a42Smrg} 4172c393a42Smrg 4182c393a42Smrgvoid 4192c393a42SmrgFcEditPrint (const FcEdit *edit) 4202c393a42Smrg{ 4212c393a42Smrg printf ("Edit %s ", FcObjectName (edit->object)); 4222c393a42Smrg FcOpPrint (edit->op); 4232c393a42Smrg printf (" "); 4242c393a42Smrg FcExprPrint (edit->expr); 4252c393a42Smrg} 4262c393a42Smrg 4272c393a42Smrgvoid 4282c393a42SmrgFcSubstPrint (const FcSubst *subst) 4292c393a42Smrg{ 4306fc018e4Smrg FcRule *r; 4316fc018e4Smrg FcRuleType last_type = FcRuleUnknown; 432ca08ab68Smrg 4332c393a42Smrg printf ("match\n"); 4346fc018e4Smrg for (r = subst->rule; r; r = r->next) 4352c393a42Smrg { 4366fc018e4Smrg if (last_type != r->type) 4376fc018e4Smrg { 4386fc018e4Smrg switch (r->type) { 4396fc018e4Smrg case FcRuleTest: 4406fc018e4Smrg printf ("[test]\n"); 4416fc018e4Smrg break; 4426fc018e4Smrg case FcRuleEdit: 4436fc018e4Smrg printf ("[edit]\n"); 4446fc018e4Smrg break; 4456fc018e4Smrg default: 4466fc018e4Smrg break; 4476fc018e4Smrg } 4486fc018e4Smrg last_type = r->type; 4496fc018e4Smrg } 4502c393a42Smrg printf ("\t"); 4516fc018e4Smrg switch (r->type) { 4526fc018e4Smrg case FcRuleTest: 4536fc018e4Smrg FcTestPrint (r->u.test); 4546fc018e4Smrg break; 4556fc018e4Smrg case FcRuleEdit: 4566fc018e4Smrg FcEditPrint (r->u.edit); 4576fc018e4Smrg printf (";\n"); 4586fc018e4Smrg break; 4596fc018e4Smrg default: 4606fc018e4Smrg break; 4616fc018e4Smrg } 4622c393a42Smrg } 4632c393a42Smrg printf ("\n"); 4642c393a42Smrg} 4652c393a42Smrg 4662c393a42Smrgvoid 4672c393a42SmrgFcFontSetPrint (const FcFontSet *s) 4682c393a42Smrg{ 4692c393a42Smrg int i; 4702c393a42Smrg 4712c393a42Smrg printf ("FontSet %d of %d\n", s->nfont, s->sfont); 4722c393a42Smrg for (i = 0; i < s->nfont; i++) 4732c393a42Smrg { 4742c393a42Smrg printf ("Font %d ", i); 4752c393a42Smrg FcPatternPrint (s->fonts[i]); 4762c393a42Smrg } 4772c393a42Smrg} 4782c393a42Smrg 4792c393a42Smrgint FcDebugVal; 4802c393a42Smrg 4812c393a42Smrgvoid 4822c393a42SmrgFcInitDebug (void) 4832c393a42Smrg{ 484c9710b42Smrg if (!FcDebugVal) { 485c9710b42Smrg char *e; 4862c393a42Smrg 487c9710b42Smrg e = getenv ("FC_DEBUG"); 488c9710b42Smrg if (e) 489c9710b42Smrg { 490c9710b42Smrg printf ("FC_DEBUG=%s\n", e); 491c9710b42Smrg FcDebugVal = atoi (e); 492c9710b42Smrg if (FcDebugVal < 0) 493c9710b42Smrg FcDebugVal = 0; 494c9710b42Smrg } 4952c393a42Smrg } 4962c393a42Smrg} 4972c393a42Smrg#define __fcdbg__ 4982c393a42Smrg#include "fcaliastail.h" 4992c393a42Smrg#undef __fcdbg__ 500