]> git.wh0rd.org - fontconfig.git/blame - src/fcdbg.c
#ifdef out old cache stuff, replace with first version of new mmapping
[fontconfig.git] / src / fcdbg.c
CommitLineData
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
29void
938bc633 30FcValuePrint (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
68void
cd2ec1a9 69FcValueListPrint (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
88void
55ef7dac
KP
89FcLangSetPrint (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
102void
938bc633 103FcPatternPrint (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
124void
125FcOpPrint (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
169void
938bc633 170FcExprPrint (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
270void
938bc633 271FcTestPrint (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
302void
938bc633 303FcEditPrint (const FcEdit *edit)
24330d27
KP
304{
305 printf ("Edit %s ", edit->field);
306 FcOpPrint (edit->op);
307 printf (" ");
308 FcExprPrint (edit->expr);
309}
310
311void
938bc633 312FcSubstPrint (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
333void
938bc633 334FcFontSetPrint (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
346int
347FcDebug (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}