]>
Commit | Line | Data |
---|---|---|
24330d27 | 1 | /* |
317b8492 | 2 | * fontconfig/src/fcdbg.c |
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 | |
5aaf466d | 10 | * documentation, and that the name of the author(s) not be used in |
24330d27 | 11 | * advertising or publicity pertaining to distribution of the software without |
5aaf466d | 12 | * specific, written prior permission. The authors make no |
24330d27 KP |
13 | * representations about the suitability of this software for any purpose. It |
14 | * is provided "as is" without express or implied warranty. | |
15 | * | |
3074a73b | 16 | * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, |
24330d27 | 17 | * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO |
3074a73b | 18 | * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR |
24330d27 KP |
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 | ||
f045376c | 25 | #include "fcint.h" |
24330d27 KP |
26 | #include <stdio.h> |
27 | #include <stdlib.h> | |
24330d27 KP |
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: | |
4262e0b3 | 43 | printf (" \"%s\"", v.u.s); |
24330d27 KP |
44 | break; |
45 | case FcTypeBool: | |
46 | printf (" %s", v.u.b ? "FcTrue" : "FcFalse"); | |
47 | break; | |
48 | case FcTypeMatrix: | |
4262e0b3 | 49 | printf (" (%f %f; %f %f)", v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy); |
24330d27 KP |
50 | break; |
51 | case FcTypeCharSet: /* XXX */ | |
7ce19673 KP |
52 | printf (" "); |
53 | FcCharSetPrint (v.u.c); | |
d8d73958 KP |
54 | break; |
55 | case FcTypeLangSet: | |
55ef7dac | 56 | printf (" "); |
4262e0b3 | 57 | FcLangSetPrint (v.u.l); |
24330d27 | 58 | break; |
88c747e2 KP |
59 | case FcTypeFTFace: |
60 | printf (" face"); | |
61 | break; | |
24330d27 KP |
62 | } |
63 | } | |
64 | ||
65 | void | |
cd2ec1a9 | 66 | FcValueListPrint (FcValueListPtr l) |
24330d27 | 67 | { |
7ce19673 | 68 | for (; l != NULL; l = FcValueListNext(l)) |
7657345c | 69 | { |
7ce19673 KP |
70 | FcValuePrint (FcValueCanonicalize(&l->value)); |
71 | switch (l->binding) { | |
602e6b1f | 72 | case FcValueBindingWeak: |
7657345c | 73 | printf ("(w)"); |
602e6b1f KP |
74 | break; |
75 | case FcValueBindingStrong: | |
76 | printf ("(s)"); | |
77 | break; | |
78 | case FcValueBindingSame: | |
79 | printf ("(=)"); | |
80 | break; | |
81 | } | |
7657345c | 82 | } |
24330d27 KP |
83 | } |
84 | ||
85 | void | |
55ef7dac KP |
86 | FcLangSetPrint (const FcLangSet *ls) |
87 | { | |
88 | FcStrBuf buf; | |
89 | FcChar8 init_buf[1024]; | |
594dcef0 | 90 | |
55ef7dac KP |
91 | FcStrBufInit (&buf, init_buf, sizeof (init_buf)); |
92 | if (FcNameUnparseLangSet (&buf, ls) && FcStrBufChar (&buf,'\0')) | |
cd2ec1a9 | 93 | printf ("%s", buf.buf); |
55ef7dac | 94 | else |
cd2ec1a9 | 95 | printf ("langset (alloc error)"); |
55ef7dac KP |
96 | FcStrBufDestroy (&buf); |
97 | } | |
98 | ||
7ce19673 KP |
99 | void |
100 | FcCharSetPrint (const FcCharSet *c) | |
101 | { | |
102 | int i, j; | |
c0288648 KP |
103 | intptr_t *leaves = FcCharSetLeaves (c); |
104 | FcChar16 *numbers = FcCharSetNumbers (c); | |
594dcef0 | 105 | |
c2c6976d | 106 | #if 0 |
c0288648 KP |
107 | printf ("CharSet 0x%x\n", (intptr_t) c); |
108 | printf ("Leaves: +%d = 0x%x\n", c->leaves_offset, (intptr_t) leaves); | |
109 | printf ("Numbers: +%d = 0x%x\n", c->numbers_offset, (intptr_t) numbers); | |
594dcef0 | 110 | |
c0288648 KP |
111 | for (i = 0; i < c->num; i++) |
112 | { | |
594dcef0 BE |
113 | printf ("Page %d: %04x +%d = 0x%x\n", |
114 | i, numbers[i], leaves[i], | |
c0288648 KP |
115 | (intptr_t) FcOffsetToPtr (leaves, leaves[i], FcCharLeaf)); |
116 | } | |
c2c6976d | 117 | #endif |
c0288648 | 118 | |
7c12181f | 119 | printf ("\n"); |
7ce19673 KP |
120 | for (i = 0; i < c->num; i++) |
121 | { | |
c0288648 KP |
122 | intptr_t leaf_offset = leaves[i]; |
123 | FcCharLeaf *leaf = FcOffsetToPtr (leaves, leaf_offset, FcCharLeaf); | |
7ce19673 | 124 | |
7c12181f | 125 | printf ("\t"); |
c0288648 | 126 | printf ("%04x:", numbers[i]); |
7ce19673 KP |
127 | for (j = 0; j < 256/32; j++) |
128 | printf (" %08x", leaf->map[j]); | |
129 | printf ("\n"); | |
130 | } | |
131 | } | |
132 | ||
55ef7dac | 133 | void |
938bc633 | 134 | FcPatternPrint (const FcPattern *p) |
24330d27 KP |
135 | { |
136 | int i; | |
137 | FcPatternElt *e; | |
594dcef0 | 138 | |
24330d27 KP |
139 | if (!p) |
140 | { | |
141 | printf ("Null pattern\n"); | |
142 | return; | |
143 | } | |
b97a34b5 | 144 | printf ("Pattern has %d elts (size %d)\n", p->num, p->size); |
24330d27 KP |
145 | for (i = 0; i < p->num; i++) |
146 | { | |
7ce19673 KP |
147 | e = &FcPatternElts(p)[i]; |
148 | printf ("\t%s:", FcObjectName(e->object)); | |
f9806ab4 | 149 | FcValueListPrint (FcPatternEltValues(e)); |
24330d27 KP |
150 | printf ("\n"); |
151 | } | |
152 | printf ("\n"); | |
153 | } | |
154 | ||
155 | void | |
156 | FcOpPrint (FcOp op) | |
157 | { | |
158 | switch (op) { | |
159 | case FcOpInteger: printf ("Integer"); break; | |
160 | case FcOpDouble: printf ("Double"); break; | |
161 | case FcOpString: printf ("String"); break; | |
162 | case FcOpMatrix: printf ("Matrix"); break; | |
857b7efe | 163 | case FcOpRange: printf ("Range"); break; |
24330d27 KP |
164 | case FcOpBool: printf ("Bool"); break; |
165 | case FcOpCharSet: printf ("CharSet"); break; | |
166 | case FcOpField: printf ("Field"); break; | |
167 | case FcOpConst: printf ("Const"); break; | |
168 | case FcOpAssign: printf ("Assign"); break; | |
169 | case FcOpAssignReplace: printf ("AssignReplace"); break; | |
170 | case FcOpPrepend: printf ("Prepend"); break; | |
171 | case FcOpPrependFirst: printf ("PrependFirst"); break; | |
172 | case FcOpAppend: printf ("Append"); break; | |
173 | case FcOpAppendLast: printf ("AppendLast"); break; | |
174 | case FcOpQuest: printf ("Quest"); break; | |
175 | case FcOpOr: printf ("Or"); break; | |
176 | case FcOpAnd: printf ("And"); break; | |
177 | case FcOpEqual: printf ("Equal"); break; | |
24330d27 KP |
178 | case FcOpNotEqual: printf ("NotEqual"); break; |
179 | case FcOpLess: printf ("Less"); break; | |
180 | case FcOpLessEqual: printf ("LessEqual"); break; | |
181 | case FcOpMore: printf ("More"); break; | |
182 | case FcOpMoreEqual: printf ("MoreEqual"); break; | |
47d4f950 KP |
183 | case FcOpContains: printf ("Contains"); break; |
184 | case FcOpNotContains: printf ("NotContains"); break; | |
24330d27 KP |
185 | case FcOpPlus: printf ("Plus"); break; |
186 | case FcOpMinus: printf ("Minus"); break; | |
187 | case FcOpTimes: printf ("Times"); break; | |
188 | case FcOpDivide: printf ("Divide"); break; | |
189 | case FcOpNot: printf ("Not"); break; | |
190 | case FcOpNil: printf ("Nil"); break; | |
191 | case FcOpComma: printf ("Comma"); break; | |
3f7653c2 KP |
192 | case FcOpFloor: printf ("Floor"); break; |
193 | case FcOpCeil: printf ("Ceil"); break; | |
194 | case FcOpRound: printf ("Round"); break; | |
195 | case FcOpTrunc: printf ("Trunc"); break; | |
74a623e0 | 196 | case FcOpListing: printf ("Listing"); break; |
24330d27 KP |
197 | case FcOpInvalid: printf ("Invalid"); break; |
198 | } | |
199 | } | |
200 | ||
201 | void | |
938bc633 | 202 | FcExprPrint (const FcExpr *expr) |
24330d27 | 203 | { |
662b8796 KP |
204 | if (!expr) printf ("none"); |
205 | else switch (expr->op) { | |
24330d27 KP |
206 | case FcOpInteger: printf ("%d", expr->u.ival); break; |
207 | case FcOpDouble: printf ("%g", expr->u.dval); break; | |
208 | case FcOpString: printf ("\"%s\"", expr->u.sval); break; | |
209 | case FcOpMatrix: printf ("[%g %g %g %g]", | |
210 | expr->u.mval->xx, | |
211 | expr->u.mval->xy, | |
212 | expr->u.mval->yx, | |
8c96d1fc | 213 | expr->u.mval->yy); break; |
857b7efe | 214 | case FcOpRange: break; |
24330d27 | 215 | case FcOpBool: printf ("%s", expr->u.bval ? "true" : "false"); break; |
c2e7c611 | 216 | case FcOpCharSet: printf ("charset\n"); break; |
8c96d1fc | 217 | case FcOpNil: printf ("nil\n"); break; |
7ce19673 | 218 | case FcOpField: printf ("%s", FcObjectName(expr->u.object)); break; |
c2e7c611 | 219 | case FcOpConst: printf ("%s", expr->u.constant); break; |
24330d27 KP |
220 | case FcOpQuest: |
221 | FcExprPrint (expr->u.tree.left); | |
222 | printf (" quest "); | |
223 | FcExprPrint (expr->u.tree.right->u.tree.left); | |
224 | printf (" colon "); | |
225 | FcExprPrint (expr->u.tree.right->u.tree.right); | |
226 | break; | |
c2e7c611 KP |
227 | case FcOpAssign: |
228 | case FcOpAssignReplace: | |
229 | case FcOpPrependFirst: | |
230 | case FcOpPrepend: | |
231 | case FcOpAppend: | |
232 | case FcOpAppendLast: | |
24330d27 KP |
233 | case FcOpOr: |
234 | case FcOpAnd: | |
235 | case FcOpEqual: | |
24330d27 KP |
236 | case FcOpNotEqual: |
237 | case FcOpLess: | |
238 | case FcOpLessEqual: | |
239 | case FcOpMore: | |
240 | case FcOpMoreEqual: | |
47d4f950 | 241 | case FcOpContains: |
74a623e0 | 242 | case FcOpListing: |
47d4f950 | 243 | case FcOpNotContains: |
24330d27 KP |
244 | case FcOpPlus: |
245 | case FcOpMinus: | |
246 | case FcOpTimes: | |
247 | case FcOpDivide: | |
c2e7c611 | 248 | case FcOpComma: |
24330d27 KP |
249 | FcExprPrint (expr->u.tree.left); |
250 | printf (" "); | |
251 | switch (expr->op) { | |
c2e7c611 KP |
252 | case FcOpAssign: printf ("Assign"); break; |
253 | case FcOpAssignReplace: printf ("AssignReplace"); break; | |
254 | case FcOpPrependFirst: printf ("PrependFirst"); break; | |
255 | case FcOpPrepend: printf ("Prepend"); break; | |
256 | case FcOpAppend: printf ("Append"); break; | |
257 | case FcOpAppendLast: printf ("AppendLast"); break; | |
24330d27 KP |
258 | case FcOpOr: printf ("Or"); break; |
259 | case FcOpAnd: printf ("And"); break; | |
260 | case FcOpEqual: printf ("Equal"); break; | |
24330d27 KP |
261 | case FcOpNotEqual: printf ("NotEqual"); break; |
262 | case FcOpLess: printf ("Less"); break; | |
263 | case FcOpLessEqual: printf ("LessEqual"); break; | |
264 | case FcOpMore: printf ("More"); break; | |
265 | case FcOpMoreEqual: printf ("MoreEqual"); break; | |
47d4f950 | 266 | case FcOpContains: printf ("Contains"); break; |
74a623e0 | 267 | case FcOpListing: printf ("Listing"); break; |
47d4f950 | 268 | case FcOpNotContains: printf ("NotContains"); break; |
24330d27 KP |
269 | case FcOpPlus: printf ("Plus"); break; |
270 | case FcOpMinus: printf ("Minus"); break; | |
271 | case FcOpTimes: printf ("Times"); break; | |
272 | case FcOpDivide: printf ("Divide"); break; | |
c2e7c611 | 273 | case FcOpComma: printf ("Comma"); break; |
24330d27 KP |
274 | default: break; |
275 | } | |
276 | printf (" "); | |
277 | FcExprPrint (expr->u.tree.right); | |
278 | break; | |
279 | case FcOpNot: | |
280 | printf ("Not "); | |
281 | FcExprPrint (expr->u.tree.left); | |
282 | break; | |
3f7653c2 KP |
283 | case FcOpFloor: |
284 | printf ("Floor "); | |
285 | FcExprPrint (expr->u.tree.left); | |
286 | break; | |
287 | case FcOpCeil: | |
288 | printf ("Ceil "); | |
289 | FcExprPrint (expr->u.tree.left); | |
290 | break; | |
291 | case FcOpRound: | |
292 | printf ("Round "); | |
293 | FcExprPrint (expr->u.tree.left); | |
294 | break; | |
295 | case FcOpTrunc: | |
296 | printf ("Trunc "); | |
297 | FcExprPrint (expr->u.tree.left); | |
298 | break; | |
c2e7c611 | 299 | case FcOpInvalid: printf ("Invalid"); break; |
24330d27 KP |
300 | } |
301 | } | |
302 | ||
303 | void | |
938bc633 | 304 | FcTestPrint (const FcTest *test) |
24330d27 | 305 | { |
938bc633 KP |
306 | switch (test->kind) { |
307 | case FcMatchPattern: | |
308 | printf ("pattern "); | |
309 | break; | |
310 | case FcMatchFont: | |
311 | printf ("font "); | |
312 | break; | |
c2c6976d KP |
313 | case FcMatchScan: |
314 | printf ("scan "); | |
315 | break; | |
938bc633 | 316 | } |
24330d27 KP |
317 | switch (test->qual) { |
318 | case FcQualAny: | |
319 | printf ("any "); | |
320 | break; | |
321 | case FcQualAll: | |
322 | printf ("all "); | |
323 | break; | |
6f6563ed KP |
324 | case FcQualFirst: |
325 | printf ("first "); | |
326 | break; | |
327 | case FcQualNotFirst: | |
328 | printf ("not_first "); | |
329 | break; | |
24330d27 | 330 | } |
7ce19673 | 331 | printf ("%s ", FcObjectName (test->object)); |
24330d27 KP |
332 | FcOpPrint (test->op); |
333 | printf (" "); | |
334 | FcExprPrint (test->expr); | |
335 | printf ("\n"); | |
336 | } | |
337 | ||
338 | void | |
938bc633 | 339 | FcEditPrint (const FcEdit *edit) |
24330d27 | 340 | { |
7ce19673 | 341 | printf ("Edit %s ", FcObjectName (edit->object)); |
24330d27 KP |
342 | FcOpPrint (edit->op); |
343 | printf (" "); | |
344 | FcExprPrint (edit->expr); | |
345 | } | |
346 | ||
347 | void | |
938bc633 | 348 | FcSubstPrint (const FcSubst *subst) |
24330d27 KP |
349 | { |
350 | FcEdit *e; | |
351 | FcTest *t; | |
594dcef0 | 352 | |
24330d27 KP |
353 | printf ("match\n"); |
354 | for (t = subst->test; t; t = t->next) | |
355 | { | |
356 | printf ("\t"); | |
357 | FcTestPrint (t); | |
358 | } | |
359 | printf ("edit\n"); | |
360 | for (e = subst->edit; e; e = e->next) | |
361 | { | |
362 | printf ("\t"); | |
363 | FcEditPrint (e); | |
364 | printf (";\n"); | |
365 | } | |
366 | printf ("\n"); | |
367 | } | |
368 | ||
369 | void | |
938bc633 | 370 | FcFontSetPrint (const FcFontSet *s) |
24330d27 KP |
371 | { |
372 | int i; | |
373 | ||
374 | printf ("FontSet %d of %d\n", s->nfont, s->sfont); | |
375 | for (i = 0; i < s->nfont; i++) | |
376 | { | |
377 | printf ("Font %d ", i); | |
378 | FcPatternPrint (s->fonts[i]); | |
379 | } | |
380 | } | |
381 | ||
b97a34b5 PL |
382 | int FcDebugVal; |
383 | ||
384 | void | |
385 | FcInitDebug (void) | |
24330d27 | 386 | { |
b97a34b5 | 387 | char *e; |
24330d27 | 388 | |
b97a34b5 PL |
389 | e = getenv ("FC_DEBUG"); |
390 | if (e) | |
24330d27 | 391 | { |
b97a34b5 PL |
392 | printf ("FC_DEBUG=%s\n", e); |
393 | FcDebugVal = atoi (e); | |
394 | if (FcDebugVal < 0) | |
395 | FcDebugVal = 0; | |
24330d27 | 396 | } |
24330d27 | 397 | } |
23816bf9 KP |
398 | #define __fcdbg__ |
399 | #include "fcaliastail.h" | |
400 | #undef __fcdbg__ |