source: trunk/poppler/fontconfig-2.3.2-os2/src/fcdbg.c @ 2

Last change on this file since 2 was 2, checked in by Eugene Romanenko, 15 years ago

First import

File size: 9.1 KB
Line 
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
29void
30FcValuePrint (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
64void
65FcValueListPrint (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
84void
85FcLangSetPrint (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
98void
99FcPatternPrint (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
120void
121FcOpPrint (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 FcOpFloor: printf ("Floor"); break;
157    case FcOpCeil: printf ("Ceil"); break;
158    case FcOpRound: printf ("Round"); break;
159    case FcOpTrunc: printf ("Trunc"); break;
160    case FcOpListing: printf ("Listing"); break;
161    case FcOpInvalid: printf ("Invalid"); break;
162    }
163}
164
165void
166FcExprPrint (const FcExpr *expr)
167{
168    if (!expr) printf ("none");
169    else switch (expr->op) {
170    case FcOpInteger: printf ("%d", expr->u.ival); break;
171    case FcOpDouble: printf ("%g", expr->u.dval); break;
172    case FcOpString: printf ("\"%s\"", expr->u.sval); break;
173    case FcOpMatrix: printf ("[%g %g %g %g]",
174                              expr->u.mval->xx,
175                              expr->u.mval->xy,
176                              expr->u.mval->yx,
177                              expr->u.mval->yy); break;
178    case FcOpBool: printf ("%s", expr->u.bval ? "true" : "false"); break;
179    case FcOpCharSet: printf ("charset\n"); break;
180    case FcOpNil: printf ("nil\n"); break;
181    case FcOpField: printf ("%s", expr->u.field); break;
182    case FcOpConst: printf ("%s", expr->u.constant); break;
183    case FcOpQuest:
184        FcExprPrint (expr->u.tree.left);
185        printf (" quest ");
186        FcExprPrint (expr->u.tree.right->u.tree.left);
187        printf (" colon ");
188        FcExprPrint (expr->u.tree.right->u.tree.right);
189        break;
190    case FcOpAssign:
191    case FcOpAssignReplace:
192    case FcOpPrependFirst:
193    case FcOpPrepend:
194    case FcOpAppend:
195    case FcOpAppendLast:
196    case FcOpOr:
197    case FcOpAnd:
198    case FcOpEqual:
199    case FcOpNotEqual:
200    case FcOpLess:
201    case FcOpLessEqual:
202    case FcOpMore:
203    case FcOpMoreEqual:
204    case FcOpContains:
205    case FcOpListing:
206    case FcOpNotContains:
207    case FcOpPlus:
208    case FcOpMinus:
209    case FcOpTimes:
210    case FcOpDivide:
211    case FcOpComma:
212        FcExprPrint (expr->u.tree.left);
213        printf (" ");
214        switch (expr->op) {
215        case FcOpAssign: printf ("Assign"); break;
216        case FcOpAssignReplace: printf ("AssignReplace"); break;
217        case FcOpPrependFirst: printf ("PrependFirst"); break;
218        case FcOpPrepend: printf ("Prepend"); break;
219        case FcOpAppend: printf ("Append"); break;
220        case FcOpAppendLast: printf ("AppendLast"); break;
221        case FcOpOr: printf ("Or"); break;
222        case FcOpAnd: printf ("And"); break;
223        case FcOpEqual: printf ("Equal"); break;
224        case FcOpNotEqual: printf ("NotEqual"); break;
225        case FcOpLess: printf ("Less"); break;
226        case FcOpLessEqual: printf ("LessEqual"); break;
227        case FcOpMore: printf ("More"); break;
228        case FcOpMoreEqual: printf ("MoreEqual"); break;
229        case FcOpContains: printf ("Contains"); break;
230        case FcOpListing: printf ("Listing"); break;
231        case FcOpNotContains: printf ("NotContains"); break;
232        case FcOpPlus: printf ("Plus"); break;
233        case FcOpMinus: printf ("Minus"); break;
234        case FcOpTimes: printf ("Times"); break;
235        case FcOpDivide: printf ("Divide"); break;
236        case FcOpComma: printf ("Comma"); break;
237        default: break;
238        }
239        printf (" ");
240        FcExprPrint (expr->u.tree.right);
241        break;
242    case FcOpNot:
243        printf ("Not ");
244        FcExprPrint (expr->u.tree.left);
245        break;
246    case FcOpFloor:
247        printf ("Floor ");
248        FcExprPrint (expr->u.tree.left);
249        break;
250    case FcOpCeil:
251        printf ("Ceil ");
252        FcExprPrint (expr->u.tree.left);
253        break;
254    case FcOpRound:
255        printf ("Round ");
256        FcExprPrint (expr->u.tree.left);
257        break;
258    case FcOpTrunc:
259        printf ("Trunc ");
260        FcExprPrint (expr->u.tree.left);
261        break;
262    case FcOpInvalid: printf ("Invalid"); break;
263    }
264}
265
266void
267FcTestPrint (const FcTest *test)
268{
269    switch (test->kind) {
270    case FcMatchPattern:
271        printf ("pattern ");
272        break;
273    case FcMatchFont:
274        printf ("font ");
275        break;
276    }
277    switch (test->qual) {
278    case FcQualAny:
279        printf ("any ");
280        break;
281    case FcQualAll:
282        printf ("all ");
283        break;
284    case FcQualFirst:
285        printf ("first ");
286        break;
287    case FcQualNotFirst:
288        printf ("not_first ");
289        break;
290    }
291    printf ("%s ", test->field);
292    FcOpPrint (test->op);
293    printf (" ");
294    FcExprPrint (test->expr);
295    printf ("\n");
296}
297
298void
299FcEditPrint (const FcEdit *edit)
300{
301    printf ("Edit %s ", edit->field);
302    FcOpPrint (edit->op);
303    printf (" ");
304    FcExprPrint (edit->expr);
305}
306
307void
308FcSubstPrint (const FcSubst *subst)
309{
310    FcEdit      *e;
311    FcTest      *t;
312   
313    printf ("match\n");
314    for (t = subst->test; t; t = t->next)
315    {
316        printf ("\t");
317        FcTestPrint (t);
318    }
319    printf ("edit\n");
320    for (e = subst->edit; e; e = e->next)
321    {
322        printf ("\t");
323        FcEditPrint (e);
324        printf (";\n");
325    }
326    printf ("\n");
327}
328
329void
330FcFontSetPrint (const FcFontSet *s)
331{
332    int     i;
333
334    printf ("FontSet %d of %d\n", s->nfont, s->sfont);
335    for (i = 0; i < s->nfont; i++)
336    {
337        printf ("Font %d ", i);
338        FcPatternPrint (s->fonts[i]);
339    }
340}
341
342int
343FcDebug (void)
344{
345    static int  initialized;
346    static int  debug;
347
348    if (!initialized)
349    {
350        char    *e;
351
352        initialized = 1;
353        e = getenv ("FC_DEBUG");
354        if (e)
355        {
356            printf ("FC_DEBUG=%s\n", e);
357            debug = atoi (e);
358            if (debug < 0)
359                debug = 0;
360        }
361    }
362    return debug;
363}
Note: See TracBrowser for help on using the repository browser.