]> git.wh0rd.org Git - fontconfig.git/blob - src/fcdbg.c
Reimplement FC_LANG as FcTypeLang, freeze patterns, other cleanup
[fontconfig.git] / src / fcdbg.c
1 /*
2  * $XFree86: xc/lib/fontconfig/src/fcdbg.c,v 1.8 2002/08/19 19:32:05 keithp Exp $
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 (const 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     case FcTypeLangSet:
55         printf (" langset");
56         break;
57     case FcTypeFTFace:
58         printf (" face");
59         break;
60     }
61 }
62
63 void
64 FcValueListPrint (const FcValueList *l)
65 {
66     for (; l; l = l->next)
67         FcValuePrint (l->value);
68 }
69
70 void
71 FcPatternPrint (const FcPattern *p)
72 {
73     int             i;
74     FcPatternElt   *e;
75     
76     if (!p)
77     {
78         printf ("Null pattern\n");
79         return;
80     }
81     printf ("Pattern %d of %d\n", p->num, p->size);
82     for (i = 0; i < p->num; i++)
83     {
84         e = &p->elts[i];
85         printf ("\t%s:", e->object);
86         FcValueListPrint (e->values);
87         printf ("\n");
88     }
89     printf ("\n");
90 }
91
92 void
93 FcOpPrint (FcOp op)
94 {
95     switch (op) {
96     case FcOpInteger: printf ("Integer"); break;
97     case FcOpDouble: printf ("Double"); break;
98     case FcOpString: printf ("String"); break;
99     case FcOpMatrix: printf ("Matrix"); break;
100     case FcOpBool: printf ("Bool"); break;
101     case FcOpCharSet: printf ("CharSet"); break;
102     case FcOpField: printf ("Field"); break;
103     case FcOpConst: printf ("Const"); break;
104     case FcOpAssign: printf ("Assign"); break;
105     case FcOpAssignReplace: printf ("AssignReplace"); break;
106     case FcOpPrepend: printf ("Prepend"); break;
107     case FcOpPrependFirst: printf ("PrependFirst"); break;
108     case FcOpAppend: printf ("Append"); break;
109     case FcOpAppendLast: printf ("AppendLast"); break;
110     case FcOpQuest: printf ("Quest"); break;
111     case FcOpOr: printf ("Or"); break;
112     case FcOpAnd: printf ("And"); break;
113     case FcOpEqual: printf ("Equal"); break;
114     case FcOpContains: printf ("Contains"); break;
115     case FcOpNotEqual: printf ("NotEqual"); break;
116     case FcOpLess: printf ("Less"); break;
117     case FcOpLessEqual: printf ("LessEqual"); break;
118     case FcOpMore: printf ("More"); break;
119     case FcOpMoreEqual: printf ("MoreEqual"); break;
120     case FcOpPlus: printf ("Plus"); break;
121     case FcOpMinus: printf ("Minus"); break;
122     case FcOpTimes: printf ("Times"); break;
123     case FcOpDivide: printf ("Divide"); break;
124     case FcOpNot: printf ("Not"); break;
125     case FcOpNil: printf ("Nil"); break;
126     case FcOpComma: printf ("Comma"); break;
127     case FcOpInvalid: printf ("Invalid"); break;
128     }
129 }
130
131 void
132 FcExprPrint (const FcExpr *expr)
133 {
134     switch (expr->op) {
135     case FcOpInteger: printf ("%d", expr->u.ival); break;
136     case FcOpDouble: printf ("%g", expr->u.dval); break;
137     case FcOpString: printf ("\"%s\"", expr->u.sval); break;
138     case FcOpMatrix: printf ("[%g %g %g %g]",
139                               expr->u.mval->xx,
140                               expr->u.mval->xy,
141                               expr->u.mval->yx,
142                               expr->u.mval->yy); break;
143     case FcOpBool: printf ("%s", expr->u.bval ? "true" : "false"); break;
144     case FcOpCharSet: printf ("charset\n"); break;
145     case FcOpNil: printf ("nil\n"); break;
146     case FcOpField: printf ("%s", expr->u.field); break;
147     case FcOpConst: printf ("%s", expr->u.constant); break;
148     case FcOpQuest:
149         FcExprPrint (expr->u.tree.left);
150         printf (" quest ");
151         FcExprPrint (expr->u.tree.right->u.tree.left);
152         printf (" colon ");
153         FcExprPrint (expr->u.tree.right->u.tree.right);
154         break;
155     case FcOpAssign:
156     case FcOpAssignReplace:
157     case FcOpPrependFirst:
158     case FcOpPrepend:
159     case FcOpAppend:
160     case FcOpAppendLast:
161     case FcOpOr:
162     case FcOpAnd:
163     case FcOpEqual:
164     case FcOpContains:
165     case FcOpNotEqual:
166     case FcOpLess:
167     case FcOpLessEqual:
168     case FcOpMore:
169     case FcOpMoreEqual:
170     case FcOpPlus:
171     case FcOpMinus:
172     case FcOpTimes:
173     case FcOpDivide:
174     case FcOpComma:
175         FcExprPrint (expr->u.tree.left);
176         printf (" ");
177         switch (expr->op) {
178         case FcOpAssign: printf ("Assign"); break;
179         case FcOpAssignReplace: printf ("AssignReplace"); break;
180         case FcOpPrependFirst: printf ("PrependFirst"); break;
181         case FcOpPrepend: printf ("Prepend"); break;
182         case FcOpAppend: printf ("Append"); break;
183         case FcOpAppendLast: printf ("AppendLast"); break;
184         case FcOpOr: printf ("Or"); break;
185         case FcOpAnd: printf ("And"); break;
186         case FcOpEqual: printf ("Equal"); break;
187         case FcOpContains: printf ("Contains"); break;
188         case FcOpNotEqual: printf ("NotEqual"); break;
189         case FcOpLess: printf ("Less"); break;
190         case FcOpLessEqual: printf ("LessEqual"); break;
191         case FcOpMore: printf ("More"); break;
192         case FcOpMoreEqual: printf ("MoreEqual"); break;
193         case FcOpPlus: printf ("Plus"); break;
194         case FcOpMinus: printf ("Minus"); break;
195         case FcOpTimes: printf ("Times"); break;
196         case FcOpDivide: printf ("Divide"); break;
197         case FcOpComma: printf ("Comma"); break;
198         default: break;
199         }
200         printf (" ");
201         FcExprPrint (expr->u.tree.right);
202         break;
203     case FcOpNot:
204         printf ("Not ");
205         FcExprPrint (expr->u.tree.left);
206         break;
207     case FcOpInvalid: printf ("Invalid"); break;
208     }
209 }
210
211 void
212 FcTestPrint (const FcTest *test)
213 {
214     switch (test->kind) {
215     case FcMatchPattern:
216         printf ("pattern ");
217         break;
218     case FcMatchFont:
219         printf ("font ");
220         break;
221     }
222     switch (test->qual) {
223     case FcQualAny:
224         printf ("any ");
225         break;
226     case FcQualAll:
227         printf ("all ");
228         break;
229     case FcQualFirst:
230         printf ("first ");
231         break;
232     case FcQualNotFirst:
233         printf ("not_first ");
234         break;
235     }
236     printf ("%s ", test->field);
237     FcOpPrint (test->op);
238     printf (" ");
239     FcExprPrint (test->expr);
240     printf ("\n");
241 }
242
243 void
244 FcEditPrint (const FcEdit *edit)
245 {
246     printf ("Edit %s ", edit->field);
247     FcOpPrint (edit->op);
248     printf (" ");
249     FcExprPrint (edit->expr);
250 }
251
252 void
253 FcSubstPrint (const FcSubst *subst)
254 {
255     FcEdit      *e;
256     FcTest      *t;
257     
258     printf ("match\n");
259     for (t = subst->test; t; t = t->next)
260     {
261         printf ("\t");
262         FcTestPrint (t);
263     }
264     printf ("edit\n");
265     for (e = subst->edit; e; e = e->next)
266     {
267         printf ("\t");
268         FcEditPrint (e);
269         printf (";\n");
270     }
271     printf ("\n");
272 }
273
274 void
275 FcFontSetPrint (const FcFontSet *s)
276 {
277     int     i;
278
279     printf ("FontSet %d of %d\n", s->nfont, s->sfont);
280     for (i = 0; i < s->nfont; i++)
281     {
282         printf ("Font %d ", i);
283         FcPatternPrint (s->fonts[i]);
284     }
285 }
286
287 int
288 FcDebug (void)
289 {
290     static int  initialized;
291     static int  debug;
292
293     if (!initialized)
294     {
295         char    *e;
296
297         initialized = 1;
298         e = getenv ("FC_DEBUG");
299         if (e)
300         {
301             printf ("FC_DEBUG=%s\n", e);
302             debug = atoi (e);
303             if (debug < 0)
304                 debug = 0;
305         }
306     }
307     return debug;
308 }