fcdbg.c revision c9710b42
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) { 332c393a42Smrg case FcTypeVoid: 34c9710b42Smrg fprintf (f, "<void>"); 352c393a42Smrg break; 362c393a42Smrg case FcTypeInteger: 37c9710b42Smrg fprintf (f, "%d(i)", v.u.i); 382c393a42Smrg break; 392c393a42Smrg case FcTypeDouble: 40c9710b42Smrg fprintf (f, "%g(f)", v.u.d); 412c393a42Smrg break; 422c393a42Smrg case FcTypeString: 43c9710b42Smrg fprintf (f, "\"%s\"", v.u.s); 442c393a42Smrg break; 452c393a42Smrg case FcTypeBool: 46c9710b42Smrg fprintf (f, "%s", v.u.b ? "True" : "False"); 472c393a42Smrg break; 482c393a42Smrg case FcTypeMatrix: 49c9710b42Smrg fprintf (f, "[%g %g; %g %g]", v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy); 502c393a42Smrg break; 512c393a42Smrg case FcTypeCharSet: /* XXX */ 52c9710b42Smrg if (f == stdout) 53c9710b42Smrg FcCharSetPrint (v.u.c); 542c393a42Smrg break; 552c393a42Smrg case FcTypeLangSet: 562c393a42Smrg FcLangSetPrint (v.u.l); 572c393a42Smrg break; 582c393a42Smrg case FcTypeFTFace: 59c9710b42Smrg fprintf (f, "face"); 602c393a42Smrg break; 612c393a42Smrg } 622c393a42Smrg} 632c393a42Smrg 64c9710b42Smrgvoid 65c9710b42SmrgFcValuePrintFile (FILE *f, const FcValue v) 66c9710b42Smrg{ 67c9710b42Smrg fprintf (f, " "); 68c9710b42Smrg _FcValuePrintFile (f, v); 69c9710b42Smrg} 70c9710b42Smrg 71ca08ab68Smrgvoid 72ca08ab68SmrgFcValuePrint (const FcValue v) 73ca08ab68Smrg{ 74ca08ab68Smrg printf (" "); 75c9710b42Smrg _FcValuePrintFile (stdout, v); 76ca08ab68Smrg} 77ca08ab68Smrg 78ca08ab68Smrgvoid 79ca08ab68SmrgFcValuePrintWithPosition (const FcValue v, FcBool show_pos_mark) 80ca08ab68Smrg{ 81ca08ab68Smrg if (show_pos_mark) 82c9710b42Smrg printf (" [marker] "); 83ca08ab68Smrg else 84ca08ab68Smrg printf (" "); 85c9710b42Smrg _FcValuePrintFile (stdout, v); 86ca08ab68Smrg} 87ca08ab68Smrg 88ca08ab68Smrgstatic void 89ca08ab68SmrgFcValueBindingPrint (const FcValueListPtr l) 90ca08ab68Smrg{ 91ca08ab68Smrg switch (l->binding) { 92ca08ab68Smrg case FcValueBindingWeak: 93ca08ab68Smrg printf ("(w)"); 94ca08ab68Smrg break; 95ca08ab68Smrg case FcValueBindingStrong: 96ca08ab68Smrg printf ("(s)"); 97ca08ab68Smrg break; 98ca08ab68Smrg case FcValueBindingSame: 99ca08ab68Smrg printf ("(=)"); 100ca08ab68Smrg break; 101ca08ab68Smrg } 102ca08ab68Smrg} 103ca08ab68Smrg 104ca08ab68Smrgvoid 105ca08ab68SmrgFcValueListPrintWithPosition (FcValueListPtr l, const FcValueListPtr pos) 106ca08ab68Smrg{ 107ca08ab68Smrg for (; l != NULL; l = FcValueListNext(l)) 108ca08ab68Smrg { 109ca08ab68Smrg FcValuePrintWithPosition (FcValueCanonicalize (&l->value), pos != NULL && l == pos); 110ca08ab68Smrg FcValueBindingPrint (l); 111ca08ab68Smrg } 112ca08ab68Smrg if (!pos) 113c9710b42Smrg printf (" [marker]"); 114ca08ab68Smrg} 115ca08ab68Smrg 1162c393a42Smrgvoid 1172c393a42SmrgFcValueListPrint (FcValueListPtr l) 1182c393a42Smrg{ 1192c393a42Smrg for (; l != NULL; l = FcValueListNext(l)) 1202c393a42Smrg { 121ca08ab68Smrg FcValuePrint (FcValueCanonicalize (&l->value)); 122ca08ab68Smrg FcValueBindingPrint (l); 1232c393a42Smrg } 1242c393a42Smrg} 1252c393a42Smrg 1262c393a42Smrgvoid 1272c393a42SmrgFcLangSetPrint (const FcLangSet *ls) 1282c393a42Smrg{ 1292c393a42Smrg FcStrBuf buf; 1302c393a42Smrg FcChar8 init_buf[1024]; 131ca08ab68Smrg 1322c393a42Smrg FcStrBufInit (&buf, init_buf, sizeof (init_buf)); 1332c393a42Smrg if (FcNameUnparseLangSet (&buf, ls) && FcStrBufChar (&buf,'\0')) 1342c393a42Smrg printf ("%s", buf.buf); 1352c393a42Smrg else 1362c393a42Smrg printf ("langset (alloc error)"); 1372c393a42Smrg FcStrBufDestroy (&buf); 1382c393a42Smrg} 1392c393a42Smrg 1402c393a42Smrgvoid 1412c393a42SmrgFcCharSetPrint (const FcCharSet *c) 1422c393a42Smrg{ 1432c393a42Smrg int i, j; 1442c393a42Smrg intptr_t *leaves = FcCharSetLeaves (c); 1452c393a42Smrg FcChar16 *numbers = FcCharSetNumbers (c); 146ca08ab68Smrg 1472c393a42Smrg#if 0 1482c393a42Smrg printf ("CharSet 0x%x\n", (intptr_t) c); 1492c393a42Smrg printf ("Leaves: +%d = 0x%x\n", c->leaves_offset, (intptr_t) leaves); 1502c393a42Smrg printf ("Numbers: +%d = 0x%x\n", c->numbers_offset, (intptr_t) numbers); 151ca08ab68Smrg 1522c393a42Smrg for (i = 0; i < c->num; i++) 1532c393a42Smrg { 154ca08ab68Smrg printf ("Page %d: %04x +%d = 0x%x\n", 155ca08ab68Smrg i, numbers[i], leaves[i], 1562c393a42Smrg (intptr_t) FcOffsetToPtr (leaves, leaves[i], FcCharLeaf)); 1572c393a42Smrg } 1582c393a42Smrg#endif 1592c393a42Smrg 160a6844aabSmrg printf ("\n"); 1612c393a42Smrg for (i = 0; i < c->num; i++) 1622c393a42Smrg { 1632c393a42Smrg intptr_t leaf_offset = leaves[i]; 1642c393a42Smrg FcCharLeaf *leaf = FcOffsetToPtr (leaves, leaf_offset, FcCharLeaf); 1652c393a42Smrg 166a6844aabSmrg printf ("\t"); 1672c393a42Smrg printf ("%04x:", numbers[i]); 1682c393a42Smrg for (j = 0; j < 256/32; j++) 1692c393a42Smrg printf (" %08x", leaf->map[j]); 1702c393a42Smrg printf ("\n"); 1712c393a42Smrg } 1722c393a42Smrg} 1732c393a42Smrg 1742c393a42Smrgvoid 1752c393a42SmrgFcPatternPrint (const FcPattern *p) 1762c393a42Smrg{ 1772c393a42Smrg int i; 1782c393a42Smrg FcPatternElt *e; 179ca08ab68Smrg 1802c393a42Smrg if (!p) 1812c393a42Smrg { 1822c393a42Smrg printf ("Null pattern\n"); 1832c393a42Smrg return; 1842c393a42Smrg } 1852c393a42Smrg printf ("Pattern has %d elts (size %d)\n", p->num, p->size); 1862c393a42Smrg for (i = 0; i < p->num; i++) 1872c393a42Smrg { 1882c393a42Smrg e = &FcPatternElts(p)[i]; 1892c393a42Smrg printf ("\t%s:", FcObjectName(e->object)); 190a6844aabSmrg FcValueListPrint (FcPatternEltValues(e)); 1912c393a42Smrg printf ("\n"); 1922c393a42Smrg } 1932c393a42Smrg printf ("\n"); 1942c393a42Smrg} 1952c393a42Smrg 196ca08ab68Smrg#define FcOpFlagsPrint(_o_) \ 197ca08ab68Smrg { \ 198ca08ab68Smrg int f = FC_OP_GET_FLAGS (_o_); \ 199ca08ab68Smrg if (f & FcOpFlagIgnoreBlanks) \ 200ca08ab68Smrg printf ("(ignore blanks)"); \ 201ca08ab68Smrg } 202ca08ab68Smrg 2032c393a42Smrgvoid 204ca08ab68SmrgFcOpPrint (FcOp op_) 2052c393a42Smrg{ 206ca08ab68Smrg FcOp op = FC_OP_GET_OP (op_); 207ca08ab68Smrg 2082c393a42Smrg switch (op) { 2092c393a42Smrg case FcOpInteger: printf ("Integer"); break; 2102c393a42Smrg case FcOpDouble: printf ("Double"); break; 2112c393a42Smrg case FcOpString: printf ("String"); break; 2122c393a42Smrg case FcOpMatrix: printf ("Matrix"); break; 213ca08ab68Smrg case FcOpRange: printf ("Range"); break; 2142c393a42Smrg case FcOpBool: printf ("Bool"); break; 2152c393a42Smrg case FcOpCharSet: printf ("CharSet"); break; 216ca08ab68Smrg case FcOpLangSet: printf ("LangSet"); break; 2172c393a42Smrg case FcOpField: printf ("Field"); break; 2182c393a42Smrg case FcOpConst: printf ("Const"); break; 2192c393a42Smrg case FcOpAssign: printf ("Assign"); break; 2202c393a42Smrg case FcOpAssignReplace: printf ("AssignReplace"); break; 2212c393a42Smrg case FcOpPrepend: printf ("Prepend"); break; 2222c393a42Smrg case FcOpPrependFirst: printf ("PrependFirst"); break; 2232c393a42Smrg case FcOpAppend: printf ("Append"); break; 2242c393a42Smrg case FcOpAppendLast: printf ("AppendLast"); break; 225c9710b42Smrg case FcOpDelete: printf ("Delete"); break; 226c9710b42Smrg case FcOpDeleteAll: printf ("DeleteAll"); break; 2272c393a42Smrg case FcOpQuest: printf ("Quest"); break; 2282c393a42Smrg case FcOpOr: printf ("Or"); break; 2292c393a42Smrg case FcOpAnd: printf ("And"); break; 230ca08ab68Smrg case FcOpEqual: printf ("Equal"); FcOpFlagsPrint (op_); break; 231ca08ab68Smrg case FcOpNotEqual: printf ("NotEqual"); FcOpFlagsPrint (op_); break; 2322c393a42Smrg case FcOpLess: printf ("Less"); break; 2332c393a42Smrg case FcOpLessEqual: printf ("LessEqual"); break; 2342c393a42Smrg case FcOpMore: printf ("More"); break; 2352c393a42Smrg case FcOpMoreEqual: printf ("MoreEqual"); break; 2362c393a42Smrg case FcOpContains: printf ("Contains"); break; 2372c393a42Smrg case FcOpNotContains: printf ("NotContains"); break; 2382c393a42Smrg case FcOpPlus: printf ("Plus"); break; 2392c393a42Smrg case FcOpMinus: printf ("Minus"); break; 2402c393a42Smrg case FcOpTimes: printf ("Times"); break; 2412c393a42Smrg case FcOpDivide: printf ("Divide"); break; 2422c393a42Smrg case FcOpNot: printf ("Not"); break; 2432c393a42Smrg case FcOpNil: printf ("Nil"); break; 2442c393a42Smrg case FcOpComma: printf ("Comma"); break; 2452c393a42Smrg case FcOpFloor: printf ("Floor"); break; 2462c393a42Smrg case FcOpCeil: printf ("Ceil"); break; 2472c393a42Smrg case FcOpRound: printf ("Round"); break; 2482c393a42Smrg case FcOpTrunc: printf ("Trunc"); break; 249ca08ab68Smrg case FcOpListing: printf ("Listing"); FcOpFlagsPrint (op_); break; 2502c393a42Smrg case FcOpInvalid: printf ("Invalid"); break; 2512c393a42Smrg } 2522c393a42Smrg} 2532c393a42Smrg 2542c393a42Smrgvoid 2552c393a42SmrgFcExprPrint (const FcExpr *expr) 2562c393a42Smrg{ 2572c393a42Smrg if (!expr) printf ("none"); 258ca08ab68Smrg else switch (FC_OP_GET_OP (expr->op)) { 2592c393a42Smrg case FcOpInteger: printf ("%d", expr->u.ival); break; 2602c393a42Smrg case FcOpDouble: printf ("%g", expr->u.dval); break; 2612c393a42Smrg case FcOpString: printf ("\"%s\"", expr->u.sval); break; 262c9710b42Smrg case FcOpMatrix: 263c9710b42Smrg printf ("["); 264c9710b42Smrg FcExprPrint (expr->u.mexpr->xx); 265c9710b42Smrg printf (" "); 266c9710b42Smrg FcExprPrint (expr->u.mexpr->xy); 267c9710b42Smrg printf ("; "); 268c9710b42Smrg FcExprPrint (expr->u.mexpr->yx); 269c9710b42Smrg printf (" "); 270c9710b42Smrg FcExprPrint (expr->u.mexpr->yy); 271c9710b42Smrg printf ("]"); 272c9710b42Smrg break; 273ca08ab68Smrg case FcOpRange: break; 2742c393a42Smrg case FcOpBool: printf ("%s", expr->u.bval ? "true" : "false"); break; 2752c393a42Smrg case FcOpCharSet: printf ("charset\n"); break; 276ca08ab68Smrg case FcOpLangSet: 277ca08ab68Smrg printf ("langset:"); 278ca08ab68Smrg FcLangSetPrint(expr->u.lval); 279ca08ab68Smrg printf ("\n"); 280ca08ab68Smrg break; 2812c393a42Smrg case FcOpNil: printf ("nil\n"); break; 282c9710b42Smrg case FcOpField: printf ("%s ", FcObjectName(expr->u.name.object)); 283c9710b42Smrg switch ((int) expr->u.name.kind) { 284c9710b42Smrg case FcMatchPattern: 285c9710b42Smrg printf ("(pattern) "); 286c9710b42Smrg break; 287c9710b42Smrg case FcMatchFont: 288c9710b42Smrg printf ("(font) "); 289c9710b42Smrg break; 290c9710b42Smrg } 291c9710b42Smrg break; 2922c393a42Smrg case FcOpConst: printf ("%s", expr->u.constant); break; 2932c393a42Smrg case FcOpQuest: 2942c393a42Smrg FcExprPrint (expr->u.tree.left); 2952c393a42Smrg printf (" quest "); 2962c393a42Smrg FcExprPrint (expr->u.tree.right->u.tree.left); 2972c393a42Smrg printf (" colon "); 2982c393a42Smrg FcExprPrint (expr->u.tree.right->u.tree.right); 2992c393a42Smrg break; 3002c393a42Smrg case FcOpAssign: 3012c393a42Smrg case FcOpAssignReplace: 3022c393a42Smrg case FcOpPrependFirst: 3032c393a42Smrg case FcOpPrepend: 3042c393a42Smrg case FcOpAppend: 3052c393a42Smrg case FcOpAppendLast: 3062c393a42Smrg case FcOpOr: 3072c393a42Smrg case FcOpAnd: 3082c393a42Smrg case FcOpEqual: 3092c393a42Smrg case FcOpNotEqual: 3102c393a42Smrg case FcOpLess: 3112c393a42Smrg case FcOpLessEqual: 3122c393a42Smrg case FcOpMore: 3132c393a42Smrg case FcOpMoreEqual: 3142c393a42Smrg case FcOpContains: 3152c393a42Smrg case FcOpListing: 3162c393a42Smrg case FcOpNotContains: 3172c393a42Smrg case FcOpPlus: 3182c393a42Smrg case FcOpMinus: 3192c393a42Smrg case FcOpTimes: 3202c393a42Smrg case FcOpDivide: 3212c393a42Smrg case FcOpComma: 3222c393a42Smrg FcExprPrint (expr->u.tree.left); 3232c393a42Smrg printf (" "); 324ca08ab68Smrg switch (FC_OP_GET_OP (expr->op)) { 3252c393a42Smrg case FcOpAssign: printf ("Assign"); break; 3262c393a42Smrg case FcOpAssignReplace: printf ("AssignReplace"); break; 3272c393a42Smrg case FcOpPrependFirst: printf ("PrependFirst"); break; 3282c393a42Smrg case FcOpPrepend: printf ("Prepend"); break; 3292c393a42Smrg case FcOpAppend: printf ("Append"); break; 3302c393a42Smrg case FcOpAppendLast: printf ("AppendLast"); break; 3312c393a42Smrg case FcOpOr: printf ("Or"); break; 3322c393a42Smrg case FcOpAnd: printf ("And"); break; 333ca08ab68Smrg case FcOpEqual: printf ("Equal"); FcOpFlagsPrint (expr->op); break; 334ca08ab68Smrg case FcOpNotEqual: printf ("NotEqual"); FcOpFlagsPrint (expr->op); break; 3352c393a42Smrg case FcOpLess: printf ("Less"); break; 3362c393a42Smrg case FcOpLessEqual: printf ("LessEqual"); break; 3372c393a42Smrg case FcOpMore: printf ("More"); break; 3382c393a42Smrg case FcOpMoreEqual: printf ("MoreEqual"); break; 3392c393a42Smrg case FcOpContains: printf ("Contains"); break; 340ca08ab68Smrg case FcOpListing: printf ("Listing"); FcOpFlagsPrint (expr->op); break; 3412c393a42Smrg case FcOpNotContains: printf ("NotContains"); break; 3422c393a42Smrg case FcOpPlus: printf ("Plus"); break; 3432c393a42Smrg case FcOpMinus: printf ("Minus"); break; 3442c393a42Smrg case FcOpTimes: printf ("Times"); break; 3452c393a42Smrg case FcOpDivide: printf ("Divide"); break; 3462c393a42Smrg case FcOpComma: printf ("Comma"); break; 3472c393a42Smrg default: break; 3482c393a42Smrg } 3492c393a42Smrg printf (" "); 3502c393a42Smrg FcExprPrint (expr->u.tree.right); 3512c393a42Smrg break; 3522c393a42Smrg case FcOpNot: 3532c393a42Smrg printf ("Not "); 3542c393a42Smrg FcExprPrint (expr->u.tree.left); 3552c393a42Smrg break; 3562c393a42Smrg case FcOpFloor: 3572c393a42Smrg printf ("Floor "); 3582c393a42Smrg FcExprPrint (expr->u.tree.left); 3592c393a42Smrg break; 3602c393a42Smrg case FcOpCeil: 3612c393a42Smrg printf ("Ceil "); 3622c393a42Smrg FcExprPrint (expr->u.tree.left); 3632c393a42Smrg break; 3642c393a42Smrg case FcOpRound: 3652c393a42Smrg printf ("Round "); 3662c393a42Smrg FcExprPrint (expr->u.tree.left); 3672c393a42Smrg break; 3682c393a42Smrg case FcOpTrunc: 3692c393a42Smrg printf ("Trunc "); 3702c393a42Smrg FcExprPrint (expr->u.tree.left); 3712c393a42Smrg break; 3722c393a42Smrg case FcOpInvalid: printf ("Invalid"); break; 3732c393a42Smrg } 3742c393a42Smrg} 3752c393a42Smrg 3762c393a42Smrgvoid 3772c393a42SmrgFcTestPrint (const FcTest *test) 3782c393a42Smrg{ 3792c393a42Smrg switch (test->kind) { 3802c393a42Smrg case FcMatchPattern: 3812c393a42Smrg printf ("pattern "); 3822c393a42Smrg break; 3832c393a42Smrg case FcMatchFont: 3842c393a42Smrg printf ("font "); 3852c393a42Smrg break; 3862c393a42Smrg case FcMatchScan: 3872c393a42Smrg printf ("scan "); 3882c393a42Smrg break; 3892c393a42Smrg } 3902c393a42Smrg switch (test->qual) { 3912c393a42Smrg case FcQualAny: 3922c393a42Smrg printf ("any "); 3932c393a42Smrg break; 3942c393a42Smrg case FcQualAll: 3952c393a42Smrg printf ("all "); 3962c393a42Smrg break; 3972c393a42Smrg case FcQualFirst: 3982c393a42Smrg printf ("first "); 3992c393a42Smrg break; 4002c393a42Smrg case FcQualNotFirst: 4012c393a42Smrg printf ("not_first "); 4022c393a42Smrg break; 4032c393a42Smrg } 4042c393a42Smrg printf ("%s ", FcObjectName (test->object)); 4052c393a42Smrg FcOpPrint (test->op); 4062c393a42Smrg printf (" "); 4072c393a42Smrg FcExprPrint (test->expr); 4082c393a42Smrg printf ("\n"); 4092c393a42Smrg} 4102c393a42Smrg 4112c393a42Smrgvoid 4122c393a42SmrgFcEditPrint (const FcEdit *edit) 4132c393a42Smrg{ 4142c393a42Smrg printf ("Edit %s ", FcObjectName (edit->object)); 4152c393a42Smrg FcOpPrint (edit->op); 4162c393a42Smrg printf (" "); 4172c393a42Smrg FcExprPrint (edit->expr); 4182c393a42Smrg} 4192c393a42Smrg 4202c393a42Smrgvoid 4212c393a42SmrgFcSubstPrint (const FcSubst *subst) 4222c393a42Smrg{ 4232c393a42Smrg FcEdit *e; 4242c393a42Smrg FcTest *t; 425ca08ab68Smrg 4262c393a42Smrg printf ("match\n"); 4272c393a42Smrg for (t = subst->test; t; t = t->next) 4282c393a42Smrg { 4292c393a42Smrg printf ("\t"); 4302c393a42Smrg FcTestPrint (t); 4312c393a42Smrg } 4322c393a42Smrg printf ("edit\n"); 4332c393a42Smrg for (e = subst->edit; e; e = e->next) 4342c393a42Smrg { 4352c393a42Smrg printf ("\t"); 4362c393a42Smrg FcEditPrint (e); 4372c393a42Smrg printf (";\n"); 4382c393a42Smrg } 4392c393a42Smrg printf ("\n"); 4402c393a42Smrg} 4412c393a42Smrg 4422c393a42Smrgvoid 4432c393a42SmrgFcFontSetPrint (const FcFontSet *s) 4442c393a42Smrg{ 4452c393a42Smrg int i; 4462c393a42Smrg 4472c393a42Smrg printf ("FontSet %d of %d\n", s->nfont, s->sfont); 4482c393a42Smrg for (i = 0; i < s->nfont; i++) 4492c393a42Smrg { 4502c393a42Smrg printf ("Font %d ", i); 4512c393a42Smrg FcPatternPrint (s->fonts[i]); 4522c393a42Smrg } 4532c393a42Smrg} 4542c393a42Smrg 4552c393a42Smrgint FcDebugVal; 4562c393a42Smrg 4572c393a42Smrgvoid 4582c393a42SmrgFcInitDebug (void) 4592c393a42Smrg{ 460c9710b42Smrg if (!FcDebugVal) { 461c9710b42Smrg char *e; 4622c393a42Smrg 463c9710b42Smrg e = getenv ("FC_DEBUG"); 464c9710b42Smrg if (e) 465c9710b42Smrg { 466c9710b42Smrg printf ("FC_DEBUG=%s\n", e); 467c9710b42Smrg FcDebugVal = atoi (e); 468c9710b42Smrg if (FcDebugVal < 0) 469c9710b42Smrg FcDebugVal = 0; 470c9710b42Smrg } 4712c393a42Smrg } 4722c393a42Smrg} 4732c393a42Smrg#define __fcdbg__ 4742c393a42Smrg#include "fcaliastail.h" 4752c393a42Smrg#undef __fcdbg__ 476