]> git.wh0rd.org Git - fontconfig.git/blob - src/fcdbg.c
Switch fontconfig from libxml2 to expat
[fontconfig.git] / src / fcdbg.c
1 /*
2  * $XFree86: $
3  *
4  * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
5  *
6  * Permission to use, copy, modify, distribute, and sell this software and its
7  * documentation for any purpose is hereby granted without fee, provided that
8  * the above copyright notice appear in all copies and that both that
9  * copyright notice and this permission notice appear in supporting
10  * documentation, and that the name of Keith Packard not be used in
11  * advertising or publicity pertaining to distribution of the software without
12  * specific, written prior permission.  Keith Packard makes no
13  * representations about the suitability of this software for any purpose.  It
14  * is provided "as is" without express or implied warranty.
15  *
16  * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
17  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
18  * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
19  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
20  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
21  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
22  * PERFORMANCE OF THIS SOFTWARE.
23  */
24
25 #include <stdio.h>
26 #include <stdlib.h>
27 #include "fcint.h"
28
29 void
30 FcValuePrint (FcValue v)
31 {
32     switch (v.type) {
33     case FcTypeVoid:
34         printf (" <void>");
35         break;
36     case FcTypeInteger:
37         printf (" %d", v.u.i);
38         break;
39     case FcTypeDouble:
40         printf (" %g", v.u.d);
41         break;
42     case FcTypeString:
43         printf (" \"%s\"", v.u.s);
44         break;
45     case FcTypeBool:
46         printf (" %s", v.u.b ? "FcTrue" : "FcFalse");
47         break;
48     case FcTypeMatrix:
49         printf (" (%f %f; %f %f)", v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy);
50         break;
51     case FcTypeCharSet: /* XXX */
52         printf (" set");
53         break;
54     }
55 }
56
57 void
58 FcValueListPrint (FcValueList *l)
59 {
60     for (; l; l = l->next)
61         FcValuePrint (l->value);
62 }
63
64 void
65 FcPatternPrint (FcPattern *p)
66 {
67     int             i;
68     FcPatternElt   *e;
69     
70     if (!p)
71     {
72         printf ("Null pattern\n");
73         return;
74     }
75     printf ("Pattern %d of %d\n", p->num, p->size);
76     for (i = 0; i < p->num; i++)
77     {
78         e = &p->elts[i];
79         printf ("\t%s:", e->object);
80         FcValueListPrint (e->values);
81         printf ("\n");
82     }
83     printf ("\n");
84 }
85
86 void
87 FcOpPrint (FcOp op)
88 {
89     switch (op) {
90     case FcOpInteger: printf ("Integer"); break;
91     case FcOpDouble: printf ("Double"); break;
92     case FcOpString: printf ("String"); break;
93     case FcOpMatrix: printf ("Matrix"); break;
94     case FcOpBool: printf ("Bool"); break;
95     case FcOpCharSet: printf ("CharSet"); break;
96     case FcOpField: printf ("Field"); break;
97     case FcOpConst: printf ("Const"); break;
98     case FcOpAssign: printf ("Assign"); break;
99     case FcOpAssignReplace: printf ("AssignReplace"); break;
100     case FcOpPrepend: printf ("Prepend"); break;
101     case FcOpPrependFirst: printf ("PrependFirst"); break;
102     case FcOpAppend: printf ("Append"); break;
103     case FcOpAppendLast: printf ("AppendLast"); break;
104     case FcOpQuest: printf ("Quest"); break;
105     case FcOpOr: printf ("Or"); break;
106     case FcOpAnd: printf ("And"); break;
107     case FcOpEqual: printf ("Equal"); break;
108     case FcOpContains: printf ("Contains"); break;
109     case FcOpNotEqual: printf ("NotEqual"); break;
110     case FcOpLess: printf ("Less"); break;
111     case FcOpLessEqual: printf ("LessEqual"); break;
112     case FcOpMore: printf ("More"); break;
113     case FcOpMoreEqual: printf ("MoreEqual"); break;
114     case FcOpPlus: printf ("Plus"); break;
115     case FcOpMinus: printf ("Minus"); break;
116     case FcOpTimes: printf ("Times"); break;
117     case FcOpDivide: printf ("Divide"); break;
118     case FcOpNot: printf ("Not"); break;
119     case FcOpNil: printf ("Nil"); break;
120     case FcOpComma: printf ("Comma"); break;
121     case FcOpInvalid: printf ("Invalid"); break;
122     }
123 }
124
125 void
126 FcExprPrint (FcExpr *expr)
127 {
128     switch (expr->op) {
129     case FcOpInteger: printf ("%d", expr->u.ival); break;
130     case FcOpDouble: printf ("%g", expr->u.dval); break;
131     case FcOpString: printf ("\"%s\"", expr->u.sval); break;
132     case FcOpMatrix: printf ("[%g %g %g %g]",
133                               expr->u.mval->xx,
134                               expr->u.mval->xy,
135                               expr->u.mval->yx,
136                               expr->u.mval->yy);
137     case FcOpBool: printf ("%s", expr->u.bval ? "true" : "false"); break;
138     case FcOpCharSet: printf ("charset\n"); break;
139     case FcOpNil: printf ("nil\n");
140     case FcOpField: printf ("%s", expr->u.field); break;
141     case FcOpConst: printf ("%s", expr->u.constant); break;
142     case FcOpQuest:
143         FcExprPrint (expr->u.tree.left);
144         printf (" quest ");
145         FcExprPrint (expr->u.tree.right->u.tree.left);
146         printf (" colon ");
147         FcExprPrint (expr->u.tree.right->u.tree.right);
148         break;
149     case FcOpAssign:
150     case FcOpAssignReplace:
151     case FcOpPrependFirst:
152     case FcOpPrepend:
153     case FcOpAppend:
154     case FcOpAppendLast:
155     case FcOpOr:
156     case FcOpAnd:
157     case FcOpEqual:
158     case FcOpContains:
159     case FcOpNotEqual:
160     case FcOpLess:
161     case FcOpLessEqual:
162     case FcOpMore:
163     case FcOpMoreEqual:
164     case FcOpPlus:
165     case FcOpMinus:
166     case FcOpTimes:
167     case FcOpDivide:
168     case FcOpComma:
169         FcExprPrint (expr->u.tree.left);
170         printf (" ");
171         switch (expr->op) {
172         case FcOpAssign: printf ("Assign"); break;
173         case FcOpAssignReplace: printf ("AssignReplace"); break;
174         case FcOpPrependFirst: printf ("PrependFirst"); break;
175         case FcOpPrepend: printf ("Prepend"); break;
176         case FcOpAppend: printf ("Append"); break;
177         case FcOpAppendLast: printf ("AppendLast"); break;
178         case FcOpOr: printf ("Or"); break;
179         case FcOpAnd: printf ("And"); break;
180         case FcOpEqual: printf ("Equal"); break;
181         case FcOpContains: printf ("Contains"); break;
182         case FcOpNotEqual: printf ("NotEqual"); break;
183         case FcOpLess: printf ("Less"); break;
184         case FcOpLessEqual: printf ("LessEqual"); break;
185         case FcOpMore: printf ("More"); break;
186         case FcOpMoreEqual: printf ("MoreEqual"); break;
187         case FcOpPlus: printf ("Plus"); break;
188         case FcOpMinus: printf ("Minus"); break;
189         case FcOpTimes: printf ("Times"); break;
190         case FcOpDivide: printf ("Divide"); break;
191         case FcOpComma: printf ("Comma"); break;
192         default: break;
193         }
194         printf (" ");
195         FcExprPrint (expr->u.tree.right);
196         break;
197     case FcOpNot:
198         printf ("Not ");
199         FcExprPrint (expr->u.tree.left);
200         break;
201     case FcOpInvalid: printf ("Invalid"); break;
202     }
203 }
204
205 void
206 FcTestPrint (FcTest *test)
207 {
208     switch (test->qual) {
209     case FcQualAny:
210         printf ("any ");
211         break;
212     case FcQualAll:
213         printf ("all ");
214         break;
215     }
216     printf ("%s ", test->field);
217     FcOpPrint (test->op);
218     printf (" ");
219     FcExprPrint (test->expr);
220     printf ("\n");
221 }
222
223 void
224 FcEditPrint (FcEdit *edit)
225 {
226     printf ("Edit %s ", edit->field);
227     FcOpPrint (edit->op);
228     printf (" ");
229     FcExprPrint (edit->expr);
230 }
231
232 void
233 FcSubstPrint (FcSubst *subst)
234 {
235     FcEdit      *e;
236     FcTest      *t;
237     
238     printf ("match\n");
239     for (t = subst->test; t; t = t->next)
240     {
241         printf ("\t");
242         FcTestPrint (t);
243     }
244     printf ("edit\n");
245     for (e = subst->edit; e; e = e->next)
246     {
247         printf ("\t");
248         FcEditPrint (e);
249         printf (";\n");
250     }
251     printf ("\n");
252 }
253
254 void
255 FcFontSetPrint (FcFontSet *s)
256 {
257     int     i;
258
259     printf ("FontSet %d of %d\n", s->nfont, s->sfont);
260     for (i = 0; i < s->nfont; i++)
261     {
262         printf ("Font %d ", i);
263         FcPatternPrint (s->fonts[i]);
264     }
265 }
266
267 int
268 FcDebug (void)
269 {
270     static int  initialized;
271     static int  debug;
272
273     if (!initialized)
274     {
275         char    *e;
276
277         initialized = 1;
278         e = getenv ("FC_DEBUG");
279         if (e)
280         {
281             printf ("FC_DEBUG=%s\n", e);
282             debug = atoi (e);
283             if (debug < 0)
284                 debug = 0;
285         }
286     }
287     return debug;
288 }