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