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