]> git.wh0rd.org - fontconfig.git/blame - src/fcint.h
Segfault scanning non-font files. Disallow scan edit of user vars. (#8767)
[fontconfig.git] / src / fcint.h
CommitLineData
24330d27 1/*
793e946c 2 * $RCSId: xc/lib/fontconfig/src/fcint.h,v 1.27 2002/08/31 22:17:32 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#ifndef _FCINT_H_
26#define _FCINT_H_
27
91fe51b4
PL
28#ifdef HAVE_CONFIG_H
29#include <config.h>
30#endif
31
24330d27
KP
32#include <stdlib.h>
33#include <stdio.h>
dc70c15a
PL
34#ifdef HAVE_INTTYPES_H
35#include <inttypes.h>
91fe51b4 36#elif defined(HAVE_STDINT_H)
7fd7221e 37#include <stdint.h>
91fe51b4
PL
38#else
39#error missing C99 integer data types
dc70c15a 40#endif
24330d27
KP
41#include <string.h>
42#include <ctype.h>
43#include <errno.h>
44#include <unistd.h>
45#include <sys/types.h>
46#include <sys/stat.h>
179c3995 47#include <time.h>
24330d27
KP
48#include <fontconfig/fontconfig.h>
49#include <fontconfig/fcprivate.h>
be094850 50#include <fontconfig/fcfreetype.h>
24330d27 51
24330d27
KP
52#ifndef FC_CONFIG_PATH
53#define FC_CONFIG_PATH "fonts.conf"
54#endif
55
daeed6e0
TL
56#ifdef _WIN32
57#define FC_SEARCH_PATH_SEPARATOR ';'
58#else
59#define FC_SEARCH_PATH_SEPARATOR ':'
60#endif
61
24330d27
KP
62#define FC_DBG_MATCH 1
63#define FC_DBG_MATCHV 2
64#define FC_DBG_EDIT 4
65#define FC_DBG_FONTSET 8
66#define FC_DBG_CACHE 16
67#define FC_DBG_CACHEV 32
68#define FC_DBG_PARSE 64
69#define FC_DBG_SCAN 128
4c003605 70#define FC_DBG_SCANV 256
24330d27 71#define FC_DBG_MEMORY 512
2d9c79c0 72#define FC_DBG_CONFIG 1024
7ce19673 73#define FC_DBG_LANGSET 2048
bc5e487f 74#define FC_DBG_OBJTYPES 4096
24330d27
KP
75
76#define FC_MEM_CHARSET 0
d8d73958 77#define FC_MEM_CHARLEAF 1
24330d27
KP
78#define FC_MEM_FONTSET 2
79#define FC_MEM_FONTPTR 3
80#define FC_MEM_OBJECTSET 4
81#define FC_MEM_OBJECTPTR 5
82#define FC_MEM_MATRIX 6
83#define FC_MEM_PATTERN 7
84#define FC_MEM_PATELT 8
85#define FC_MEM_VALLIST 9
86#define FC_MEM_SUBSTATE 10
87#define FC_MEM_STRING 11
88#define FC_MEM_LISTBUCK 12
d8d73958
KP
89#define FC_MEM_STRSET 13
90#define FC_MEM_STRLIST 14
91#define FC_MEM_CONFIG 15
92#define FC_MEM_LANGSET 16
9dac3c59
KP
93#define FC_MEM_ATOMIC 17
94#define FC_MEM_BLANKS 18
95#define FC_MEM_CACHE 19
96#define FC_MEM_STRBUF 20
97#define FC_MEM_SUBST 21
98#define FC_MEM_OBJECTTYPE 22
99#define FC_MEM_CONSTANT 23
100#define FC_MEM_TEST 24
101#define FC_MEM_EXPR 25
102#define FC_MEM_VSTACK 26
103#define FC_MEM_ATTR 27
104#define FC_MEM_PSTACK 28
1c52c0f0 105#define FC_MEM_STATICSTR 29
d8d73958 106
1c52c0f0 107#define FC_MEM_NUM 30
24330d27 108
1c9fdcca
PL
109#define FC_BANK_DYNAMIC 0
110#define FC_BANK_FIRST 1
82f35f8b
PL
111#define FC_BANK_LANGS 0xfcfcfcfc
112
4984242e
KP
113/* slim_internal.h */
114#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__)
115#define FcPrivate __attribute__((__visibility__("hidden")))
f6cfbe16
KP
116#define HAVE_GNUC_ATTRIBUTE 1
117#include "fcalias.h"
4984242e
KP
118#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
119#define FcPrivate __hidden
120#else /* not gcc >= 3.3 and not Sun Studio >= 8 */
121#define FcPrivate
122#endif
123
4c003605 124typedef enum _FcValueBinding {
dda7794f 125 FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame
4c003605
KP
126} FcValueBinding;
127
7ce19673
KP
128/*
129 * Serialized data structures use only offsets instead of pointers
130 * A low bit of 1 indicates an offset.
131 */
132
133/* Is the provided pointer actually an offset? */
134#define FcIsEncodedOffset(p) ((((intptr_t) (p)) & 1) != 0)
cd2ec1a9 135
7ce19673
KP
136/* Encode offset in a pointer of type t */
137#define FcOffsetEncode(o,t) ((t *) ((o) | 1))
138
139/* Decode a pointer into an offset */
140#define FcOffsetDecode(p) (((intptr_t) (p)) & ~1)
141
142/* Compute pointer offset */
143#define FcPtrToOffset(b,p) ((intptr_t) (p) - (intptr_t) (b))
144
145/* Given base address, offset and type, return a pointer */
146#define FcOffsetToPtr(b,o,t) ((t *) ((intptr_t) (b) + (o)))
147
148/* Given base address, encoded offset and type, return a pointer */
149#define FcEncodedOffsetToPtr(b,p,t) FcOffsetToPtr(b,FcOffsetDecode(p),t)
cd2ec1a9 150
7ce19673
KP
151/* Given base address, pointer and type, return an encoded offset */
152#define FcPtrToEncodedOffset(b,p,t) FcOffsetEncode(FcPtrToOffset(b,p),t)
153
154/* Given a structure, offset member and type, return pointer */
155#define FcOffsetMember(s,m,t) FcOffsetToPtr(s,(s)->m,t)
156
157/* Given a structure, encoded offset member and type, return pointer to member */
158#define FcEncodedOffsetMember(s,m,t) FcOffsetToPtr(s,FcOffsetDecode((s)->m), t)
159
160/* Given a structure, member and type, convert the member to a pointer */
161#define FcPointerMember(s,m,t) (FcIsEncodedOffset((s)->m) ? \
162 FcEncodedOffsetMember (s,m,t) : \
163 (s)->m)
164
165/*
166 * Serialized values may hold strings, charsets and langsets as pointers,
167 * unfortunately FcValue is an exposed type so we can't just always use
168 * offsets
169 */
170#define FcValueString(v) FcPointerMember(v,u.s,FcChar8)
171#define FcValueCharSet(v) FcPointerMember(v,u.c,const FcCharSet)
172#define FcValueLangSet(v) FcPointerMember(v,u.l,const FcLangSet)
173
174typedef struct _FcValueList *FcValueListPtr;
175
176typedef struct _FcValueList {
177 struct _FcValueList *next;
178 FcValue value;
179 FcValueBinding binding;
24330d27
KP
180} FcValueList;
181
7ce19673
KP
182#define FcValueListNext(vl) FcPointerMember(vl,next,FcValueList)
183
184typedef int FcObject;
4262e0b3 185
7ce19673 186typedef struct _FcPatternElt *FcPatternEltPtr;
cd2ec1a9 187
7ce19673
KP
188/*
189 * Pattern elts are stuck in a structure connected to the pattern,
190 * so they get moved around when the pattern is resized. Hence, the
191 * values field must be a pointer/offset instead of just an offset
192 */
24330d27 193typedef struct _FcPatternElt {
7ce19673
KP
194 FcObject object;
195 FcValueList *values;
24330d27
KP
196} FcPatternElt;
197
7ce19673
KP
198#define FcPatternEltValues(pe) FcPointerMember(pe,values,FcValueList)
199
24330d27
KP
200struct _FcPattern {
201 int num;
202 int size;
7ce19673 203 intptr_t elts_offset;
e709ddfa 204 int ref;
24330d27
KP
205};
206
7ce19673
KP
207#define FcPatternElts(p) FcOffsetMember(p,elts_offset,FcPatternElt)
208
209#define FcFontSetFonts(fs) FcPointerMember(fs,fonts,FcPattern *)
c0288648 210
7ce19673 211#define FcFontSetFont(fs,i) (FcIsEncodedOffset((fs)->fonts) ? \
09bd9ae2 212 FcEncodedOffsetToPtr(fs, \
c0288648
KP
213 FcFontSetFonts(fs)[i], \
214 FcPattern) : \
215 fs->fonts[i])
7ce19673 216
24330d27
KP
217typedef enum _FcOp {
218 FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpBool, FcOpCharSet,
219 FcOpNil,
220 FcOpField, FcOpConst,
221 FcOpAssign, FcOpAssignReplace,
222 FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast,
223 FcOpQuest,
74a623e0
KP
224 FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual,
225 FcOpContains, FcOpListing, FcOpNotContains,
24330d27
KP
226 FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual,
227 FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide,
3f7653c2
KP
228 FcOpNot, FcOpComma, FcOpFloor, FcOpCeil, FcOpRound, FcOpTrunc,
229 FcOpInvalid
24330d27
KP
230} FcOp;
231
232typedef struct _FcExpr {
233 FcOp op;
234 union {
235 int ival;
236 double dval;
ccb3e93b 237 FcChar8 *sval;
24330d27
KP
238 FcMatrix *mval;
239 FcBool bval;
240 FcCharSet *cval;
7ce19673 241 FcObject object;
ccb3e93b 242 FcChar8 *constant;
24330d27
KP
243 struct {
244 struct _FcExpr *left, *right;
245 } tree;
246 } u;
247} FcExpr;
248
249typedef enum _FcQual {
6f6563ed 250 FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst
24330d27
KP
251} FcQual;
252
938bc633
KP
253#define FcMatchDefault ((FcMatchKind) -1)
254
24330d27
KP
255typedef struct _FcTest {
256 struct _FcTest *next;
938bc633 257 FcMatchKind kind;
24330d27 258 FcQual qual;
7ce19673 259 FcObject object;
24330d27
KP
260 FcOp op;
261 FcExpr *expr;
262} FcTest;
263
264typedef struct _FcEdit {
265 struct _FcEdit *next;
7ce19673 266 FcObject object;
24330d27
KP
267 FcOp op;
268 FcExpr *expr;
6fff2cda 269 FcValueBinding binding;
24330d27
KP
270} FcEdit;
271
272typedef struct _FcSubst {
273 struct _FcSubst *next;
274 FcTest *test;
275 FcEdit *edit;
276} FcSubst;
277
20ac65ab 278typedef struct _FcCharLeaf {
24330d27 279 FcChar32 map[256/32];
20ac65ab 280} FcCharLeaf;
24330d27 281
d8d73958 282#define FC_REF_CONSTANT -1
82f4243f 283
24330d27 284struct _FcCharSet {
24330d27 285 int ref; /* reference count */
20ac65ab 286 int num; /* size of leaves and numbers arrays */
7ce19673
KP
287 intptr_t leaves_offset;
288 intptr_t numbers_offset;
24330d27
KP
289};
290
7ce19673
KP
291#define FcCharSetLeaves(c) FcOffsetMember(c,leaves_offset,intptr_t)
292#define FcCharSetLeaf(c,i) (FcOffsetToPtr(FcCharSetLeaves(c), \
293 FcCharSetLeaves(c)[i], \
294 FcCharLeaf))
295#define FcCharSetNumbers(c) FcOffsetMember(c,numbers_offset,FcChar16)
296
179c3995
KP
297struct _FcStrSet {
298 int ref; /* reference count */
299 int num;
300 int size;
4262e0b3 301 FcChar8 **strs;
179c3995
KP
302};
303
304struct _FcStrList {
305 FcStrSet *set;
306 int n;
307};
308
c2e7c611 309typedef struct _FcStrBuf {
24330d27
KP
310 FcChar8 *buf;
311 FcBool allocated;
312 FcBool failed;
313 int len;
314 int size;
c2e7c611 315} FcStrBuf;
24330d27 316
4984242e 317struct _FcCache {
bc5e487f
KP
318 int magic; /* FC_CACHE_MAGIC_MMAP or FC_CACHE_ALLOC */
319 int version; /* FC_CACHE_CONTENT_VERSION */
c50ea916 320 intptr_t size; /* size of file */
7ce19673
KP
321 intptr_t dir; /* offset to dir name */
322 intptr_t dirs; /* offset to subdirs */
323 int dirs_count; /* number of subdir strings */
324 intptr_t set; /* offset to font set */
4984242e 325};
212c9f43 326
23816bf9
KP
327#undef FcCacheDir
328#undef FcCacheSubdir
7ce19673
KP
329#define FcCacheDir(c) FcOffsetMember(c,dir,FcChar8)
330#define FcCacheDirs(c) FcOffsetMember(c,dirs,intptr_t)
331#define FcCacheSet(c) FcOffsetMember(c,set,FcFontSet)
4984242e
KP
332#define FcCacheSubdir(c,i) FcOffsetToPtr (FcCacheDirs(c),\
333 FcCacheDirs(c)[i], \
bc5e487f 334 FcChar8)
7ce19673
KP
335
336/*
337 * Used while constructing a directory cache object
338 */
339
340#define FC_SERIALIZE_HASH_SIZE 8191
341
342typedef struct _FcSerializeBucket {
343 struct _FcSerializeBucket *next;
344 const void *object;
345 intptr_t offset;
346} FcSerializeBucket;
347
bc5e487f
KP
348typedef struct _FcCharSetFreezer FcCharSetFreezer;
349
7ce19673
KP
350typedef struct _FcSerialize {
351 intptr_t size;
bc5e487f 352 FcCharSetFreezer *cs_freezer;
7ce19673
KP
353 void *linear;
354 FcSerializeBucket *buckets[FC_SERIALIZE_HASH_SIZE];
355} FcSerialize;
356
7769c321
KP
357/*
358 * To map adobe glyph names to unicode values, a precomputed hash
359 * table is used
360 */
361
362typedef struct _FcGlyphName {
363 FcChar32 ucs; /* unicode value */
364 FcChar8 name[1]; /* name extends beyond struct */
365} FcGlyphName;
366
192296d8
KP
367/*
368 * To perform case-insensitive string comparisons, a table
369 * is used which holds three different kinds of folding data.
370 *
371 * The first is a range of upper case values mapping to a range
372 * of their lower case equivalents. Within each range, the offset
373 * between upper and lower case is constant.
374 *
375 * The second is a range of upper case values which are interleaved
376 * with their lower case equivalents.
377 *
378 * The third is a set of raw unicode values mapping to a list
379 * of unicode values for comparison purposes. This allows conversion
380 * of ß to "ss" so that SS, ss and ß all match. A separate array
381 * holds the list of unicode values for each entry.
382 *
383 * These are packed into a single table. Using a binary search,
384 * the appropriate entry can be located.
385 */
386
387#define FC_CASE_FOLD_RANGE 0
388#define FC_CASE_FOLD_EVEN_ODD 1
389#define FC_CASE_FOLD_FULL 2
390
391typedef struct _FcCaseFold {
392 FcChar32 upper;
393 FcChar16 method : 2;
394 FcChar16 count : 14;
395 short offset; /* lower - upper for RANGE, table id for FULL */
396} FcCaseFold;
397
2d9c79c0
KP
398#define FC_MAX_FILE_LEN 4096
399
7ce19673
KP
400/* XXX remove these when we're ready */
401
402#define fc_value_string(v) FcValueString(v)
403#define fc_value_charset(v) FcValueCharSet(v)
404#define fc_value_langset(v) FcValueLangSet(v)
405#define fc_storage_type(v) ((v)->type)
4262e0b3 406
44415a07
PL
407#define fc_alignof(type) offsetof (struct { char c; type member; }, member)
408
bc5e487f
KP
409#define FC_CACHE_MAGIC_MMAP 0xFC02FC04
410#define FC_CACHE_MAGIC_ALLOC 0xFC02FC05
411#define FC_CACHE_CONTENT_VERSION 1
327a7fd4 412
134f6011
KP
413struct _FcAtomic {
414 FcChar8 *file; /* original file name */
415 FcChar8 *new; /* temp file name -- write data here */
416 FcChar8 *lck; /* lockfile name (used for locking) */
417 FcChar8 *tmp; /* tmpfile name (used for locking) */
418};
419
24330d27
KP
420struct _FcBlanks {
421 int nblank;
422 int sblank;
423 FcChar32 *blanks;
424};
425
426struct _FcConfig {
427 /*
428 * File names loaded from the configuration -- saved here as the
429 * cache file must be consulted before the directories are scanned,
430 * and those directives may occur in any order
431 */
179c3995 432 FcStrSet *configDirs; /* directories to scan for fonts */
24330d27
KP
433 /*
434 * Set of allowed blank chars -- used to
435 * trim fonts of bogus glyphs
436 */
437 FcBlanks *blanks;
179c3995
KP
438 /*
439 * List of directories containing fonts,
440 * built by recursively scanning the set
441 * of configured directories
442 */
443 FcStrSet *fontDirs;
7410e40b
PL
444 /*
445 * List of directories containing cache files.
446 */
447 FcStrSet *cacheDirs;
24330d27
KP
448 /*
449 * Names of all of the configuration files used
450 * to create this configuration
451 */
179c3995 452 FcStrSet *configFiles; /* config files loaded */
24330d27
KP
453 /*
454 * Substitution instructions for patterns and fonts;
455 * maxObjects is used to allocate appropriate intermediate storage
456 * while performing a whole set of substitutions
457 */
458 FcSubst *substPattern; /* substitutions for patterns */
459 FcSubst *substFont; /* substitutions for fonts */
c2c6976d 460 FcSubst *substScan; /* substitutions for scanned fonts */
24330d27 461 int maxObjects; /* maximum number of tests in all substs */
d47c9d6e
KP
462 /*
463 * List of patterns used to control font file selection
464 */
465 FcStrSet *acceptGlobs;
466 FcStrSet *rejectGlobs;
4f27c1c0
KP
467 FcFontSet *acceptPatterns;
468 FcFontSet *rejectPatterns;
24330d27
KP
469 /*
470 * The set of fonts loaded from the listed directories; the
471 * order within the set does not determine the font selection,
472 * except in the case of identical matches in which case earlier fonts
473 * match preferrentially
474 */
475 FcFontSet *fonts[FcSetApplication + 1];
179c3995
KP
476 /*
477 * Fontconfig can periodically rescan the system configuration
478 * and font directories. This rescanning occurs when font
479 * listing requests are made, but no more often than rescanInterval
480 * seconds apart.
481 */
482 time_t rescanTime; /* last time information was scanned */
483 int rescanInterval; /* interval between scans */
24330d27
KP
484};
485
4984242e 486extern FcPrivate FcConfig *_fcConfig;
6e9fc5de 487
2b25f00c
PL
488typedef struct _FcFileTime {
489 time_t time;
490 FcBool set;
491} FcFileTime;
492
69937bd9
KP
493typedef struct _FcCharMap FcCharMap;
494
44415a07
PL
495/* watch out; assumes that v is void * -PL */
496#define ALIGN(v,type) ((void *)(((uintptr_t)(v) + fc_alignof(type) - 1) & ~(fc_alignof(type) - 1)))
7fd7221e 497
24330d27
KP
498/* fcblanks.c */
499
500/* fccache.c */
501
4984242e 502FcPrivate FcCache *
bc5e487f
KP
503FcDirCacheScan (const FcChar8 *dir, FcConfig *config);
504
4984242e 505FcPrivate FcCache *
bc5e487f
KP
506FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, FcStrSet *dirs);
507
4984242e 508FcPrivate FcBool
bc5e487f
KP
509FcDirCacheWrite (FcCache *cache, FcConfig *config);
510
9e612141
KP
511FcPrivate void
512FcCacheObjectReference (void *object);
513
514FcPrivate void
515FcCacheObjectDereference (void *object);
516
8fe2104a
KP
517FcPrivate void
518FcCacheFini (void);
519
23816bf9 520FcPrivate void
17389539
KP
521FcDirCacheReference (FcCache *cache, int nref);
522
24330d27
KP
523/* fccfg.c */
524
4984242e 525FcPrivate FcBool
179c3995
KP
526FcConfigAddConfigDir (FcConfig *config,
527 const FcChar8 *d);
528
4984242e 529FcPrivate FcBool
179c3995
KP
530FcConfigAddFontDir (FcConfig *config,
531 const FcChar8 *d);
532
4984242e 533FcPrivate FcBool
ccb3e93b
KP
534FcConfigAddDir (FcConfig *config,
535 const FcChar8 *d);
24330d27 536
4984242e 537FcPrivate FcBool
7410e40b
PL
538FcConfigAddCacheDir (FcConfig *config,
539 const FcChar8 *d);
540
4984242e 541FcPrivate FcBool
ccb3e93b
KP
542FcConfigAddConfigFile (FcConfig *config,
543 const FcChar8 *f);
24330d27 544
4984242e 545FcPrivate FcBool
24330d27
KP
546FcConfigAddBlank (FcConfig *config,
547 FcChar32 blank);
548
4984242e 549FcPrivate FcBool
24330d27
KP
550FcConfigAddEdit (FcConfig *config,
551 FcTest *test,
552 FcEdit *edit,
553 FcMatchKind kind);
554
4984242e 555FcPrivate void
24330d27
KP
556FcConfigSetFonts (FcConfig *config,
557 FcFontSet *fonts,
558 FcSetName set);
559
4984242e 560FcPrivate FcBool
4262e0b3 561FcConfigCompareValue (const FcValue *m,
24330d27 562 FcOp op,
4262e0b3 563 const FcValue *v);
24330d27 564
4984242e 565FcPrivate FcBool
d47c9d6e
KP
566FcConfigGlobAdd (FcConfig *config,
567 const FcChar8 *glob,
568 FcBool accept);
569
4984242e 570FcPrivate FcBool
d47c9d6e
KP
571FcConfigAcceptFilename (FcConfig *config,
572 const FcChar8 *filename);
573
4984242e 574FcPrivate FcBool
4f27c1c0
KP
575FcConfigPatternsAdd (FcConfig *config,
576 FcPattern *pattern,
577 FcBool accept);
578
4984242e 579FcPrivate FcBool
4f27c1c0
KP
580FcConfigAcceptFont (FcConfig *config,
581 const FcPattern *font);
582
4984242e 583FcPrivate FcFileTime
2b25f00c
PL
584FcConfigModifiedTime (FcConfig *config);
585
4984242e 586FcPrivate FcBool
97c3d5b6
KP
587FcConfigAddCache (FcConfig *config, FcCache *cache,
588 FcSetName set, FcStrSet *dirSet);
2d3387fd
KP
589
590/* fcserialize.c */
4984242e 591FcPrivate intptr_t
7ce19673
KP
592FcAlignSize (intptr_t size);
593
4984242e 594FcPrivate FcSerialize *
7ce19673
KP
595FcSerializeCreate (void);
596
4984242e 597FcPrivate void
7ce19673
KP
598FcSerializeDestroy (FcSerialize *serialize);
599
4984242e 600FcPrivate FcBool
7ce19673
KP
601FcSerializeAlloc (FcSerialize *serialize, const void *object, int size);
602
4984242e 603FcPrivate intptr_t
7ce19673
KP
604FcSerializeReserve (FcSerialize *serialize, int size);
605
4984242e 606FcPrivate intptr_t
7ce19673
KP
607FcSerializeOffset (FcSerialize *serialize, const void *object);
608
4984242e 609FcPrivate void *
7ce19673
KP
610FcSerializePtr (FcSerialize *serialize, const void *object);
611
4984242e 612FcPrivate FcBool
7ce19673
KP
613FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l);
614
4984242e 615FcPrivate FcLangSet *
7ce19673
KP
616FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l);
617
24330d27 618/* fccharset.c */
4984242e 619FcPrivate void
82f35f8b
PL
620FcLangCharSetPopulate (void);
621
4984242e 622FcPrivate FcCharSetFreezer *
18b6857c
KP
623FcCharSetFreezerCreate (void);
624
4984242e 625FcPrivate const FcCharSet *
18b6857c
KP
626FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs);
627
4984242e 628FcPrivate void
bc5e487f 629FcCharSetFreezerDestroy (FcCharSetFreezer *freezer);
34cd0514 630
4984242e 631FcPrivate FcBool
c2e7c611 632FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c);
24330d27 633
4984242e 634FcPrivate FcCharSet *
24330d27
KP
635FcNameParseCharSet (FcChar8 *string);
636
4984242e 637FcPrivate FcCharLeaf *
c647f6f1 638FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4);
69937bd9 639
4984242e 640FcPrivate FcBool
7ce19673 641FcCharSetSerializeAlloc(FcSerialize *serialize, const FcCharSet *cs);
cd2ec1a9 642
4984242e 643FcPrivate FcCharSet *
7ce19673 644FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs);
cd2ec1a9 645
4984242e 646FcPrivate FcChar16 *
cd2ec1a9
PL
647FcCharSetGetNumbers(const FcCharSet *c);
648
24330d27 649/* fcdbg.c */
4984242e 650FcPrivate void
cd2ec1a9 651FcValueListPrint (const FcValueListPtr l);
24330d27 652
4984242e 653FcPrivate void
793e946c
KP
654FcLangSetPrint (const FcLangSet *ls);
655
4984242e 656FcPrivate void
24330d27
KP
657FcOpPrint (FcOp op);
658
4984242e 659FcPrivate void
938bc633 660FcTestPrint (const FcTest *test);
24330d27 661
4984242e 662FcPrivate void
938bc633 663FcExprPrint (const FcExpr *expr);
24330d27 664
4984242e 665FcPrivate void
938bc633 666FcEditPrint (const FcEdit *edit);
24330d27 667
4984242e 668FcPrivate void
938bc633 669FcSubstPrint (const FcSubst *subst);
24330d27 670
4984242e 671FcPrivate void
7ce19673
KP
672FcCharSetPrint (const FcCharSet *c);
673
4984242e 674extern FcPrivate int FcDebugVal;
b97a34b5 675
4984242e 676#define FcDebug() (FcDebugVal)
b97a34b5 677
4984242e 678FcPrivate void
b97a34b5 679FcInitDebug (void);
24330d27 680
90442681 681/* fcdefault.c */
4984242e 682FcPrivate FcChar8 *
90442681
PL
683FcGetDefaultLang (void);
684
24330d27 685/* fcdir.c */
24330d27 686
4984242e 687FcPrivate FcBool
d47c9d6e
KP
688FcFileScanConfig (FcFontSet *set,
689 FcStrSet *dirs,
d47c9d6e
KP
690 FcBlanks *blanks,
691 const FcChar8 *file,
d47c9d6e
KP
692 FcConfig *config);
693
4984242e 694FcPrivate FcBool
d47c9d6e
KP
695FcDirScanConfig (FcFontSet *set,
696 FcStrSet *dirs,
d47c9d6e 697 FcBlanks *blanks,
bc5e487f 698 const FcChar8 *dir,
d47c9d6e
KP
699 FcBool force,
700 FcConfig *config);
701
24330d27 702/* fcfont.c */
4984242e 703FcPrivate int
24330d27
KP
704FcFontDebug (void);
705
82f4243f 706/* fcfreetype.c */
4984242e 707FcPrivate FcBool
e50b9ae7
KP
708FcFreeTypeIsExclusiveLang (const FcChar8 *lang);
709
4984242e 710FcPrivate FcBool
82f4243f
KP
711FcFreeTypeHasLang (FcPattern *pattern, const FcChar8 *lang);
712
4984242e 713FcPrivate FcChar32
c647f6f1
KP
714FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map);
715
4984242e 716FcPrivate FcChar32
c647f6f1
KP
717FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map);
718
4984242e 719FcPrivate const FcCharMap *
c647f6f1
KP
720FcFreeTypeGetPrivateMap (FT_Encoding encoding);
721
24330d27 722/* fcfs.c */
cd2ec1a9 723
4984242e 724FcPrivate FcBool
7ce19673 725FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s);
212c9f43 726
4984242e 727FcPrivate FcFontSet *
7ce19673
KP
728FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s);
729
24330d27 730/* fcgram.y */
4984242e 731FcPrivate int
24330d27
KP
732FcConfigparse (void);
733
4984242e 734FcPrivate int
24330d27
KP
735FcConfigwrap (void);
736
4984242e 737FcPrivate void
24330d27
KP
738FcConfigerror (char *fmt, ...);
739
4984242e 740FcPrivate char *
24330d27
KP
741FcConfigSaveField (const char *field);
742
4984242e 743FcPrivate void
24330d27
KP
744FcTestDestroy (FcTest *test);
745
4984242e 746FcPrivate FcExpr *
24330d27
KP
747FcExprCreateInteger (int i);
748
4984242e 749FcPrivate FcExpr *
24330d27
KP
750FcExprCreateDouble (double d);
751
4984242e 752FcPrivate FcExpr *
ccb3e93b 753FcExprCreateString (const FcChar8 *s);
24330d27 754
4984242e 755FcPrivate FcExpr *
24330d27
KP
756FcExprCreateMatrix (const FcMatrix *m);
757
4984242e 758FcPrivate FcExpr *
24330d27
KP
759FcExprCreateBool (FcBool b);
760
4984242e 761FcPrivate FcExpr *
24330d27
KP
762FcExprCreateNil (void);
763
4984242e 764FcPrivate FcExpr *
24330d27
KP
765FcExprCreateField (const char *field);
766
4984242e 767FcPrivate FcExpr *
ccb3e93b 768FcExprCreateConst (const FcChar8 *constant);
24330d27 769
4984242e 770FcPrivate FcExpr *
24330d27
KP
771FcExprCreateOp (FcExpr *left, FcOp op, FcExpr *right);
772
4984242e 773FcPrivate void
24330d27
KP
774FcExprDestroy (FcExpr *e);
775
4984242e 776FcPrivate void
24330d27
KP
777FcEditDestroy (FcEdit *e);
778
779/* fcinit.c */
780
4984242e 781FcPrivate void
24330d27
KP
782FcMemReport (void);
783
4984242e 784FcPrivate void
24330d27
KP
785FcMemAlloc (int kind, int size);
786
4984242e 787FcPrivate void
24330d27
KP
788FcMemFree (int kind, int size);
789
82f4243f 790/* fclang.c */
4984242e 791FcPrivate FcLangSet *
d8d73958 792FcFreeTypeLangSet (const FcCharSet *charset,
e50b9ae7 793 const FcChar8 *exclusiveLang);
82f4243f 794
4984242e 795FcPrivate FcLangResult
82f4243f
KP
796FcLangCompare (const FcChar8 *s1, const FcChar8 *s2);
797
4984242e 798FcPrivate const FcCharSet *
82f4243f
KP
799FcCharSetForLang (const FcChar8 *lang);
800
4984242e 801FcPrivate FcLangSet *
d8d73958
KP
802FcLangSetPromote (const FcChar8 *lang);
803
4984242e 804FcPrivate FcLangSet *
d8d73958
KP
805FcNameParseLangSet (const FcChar8 *string);
806
4984242e 807FcPrivate FcBool
d8d73958
KP
808FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls);
809
4984242e 810FcPrivate FcChar8 *
f57783d2
KP
811FcNameUnparseEscaped (FcPattern *pat, FcBool escape);
812
24330d27
KP
813/* fclist.c */
814
4984242e 815FcPrivate FcBool
4f27c1c0
KP
816FcListPatternMatchAny (const FcPattern *p,
817 const FcPattern *font);
818
24330d27
KP
819/* fcmatch.c */
820
821/* fcname.c */
24330d27 822
7ce19673
KP
823/*
824 * NOTE -- this ordering is part of the cache file format.
825 * It must also match the ordering in fcname.c
826 */
4262e0b3 827
7ce19673
KP
828#define FC_FAMILY_OBJECT 1
829#define FC_FAMILYLANG_OBJECT 2
830#define FC_STYLE_OBJECT 3
831#define FC_STYLELANG_OBJECT 4
832#define FC_FULLNAME_OBJECT 5
833#define FC_FULLNAMELANG_OBJECT 6
834#define FC_SLANT_OBJECT 7
835#define FC_WEIGHT_OBJECT 8
836#define FC_WIDTH_OBJECT 9
837#define FC_SIZE_OBJECT 10
838#define FC_ASPECT_OBJECT 11
839#define FC_PIXEL_SIZE_OBJECT 12
840#define FC_SPACING_OBJECT 13
841#define FC_FOUNDRY_OBJECT 14
842#define FC_ANTIALIAS_OBJECT 15
843#define FC_HINT_STYLE_OBJECT 16
844#define FC_HINTING_OBJECT 17
845#define FC_VERTICAL_LAYOUT_OBJECT 18
846#define FC_AUTOHINT_OBJECT 19
847#define FC_GLOBAL_ADVANCE_OBJECT 20
848#define FC_FILE_OBJECT 21
849#define FC_INDEX_OBJECT 22
850#define FC_RASTERIZER_OBJECT 23
851#define FC_OUTLINE_OBJECT 24
852#define FC_SCALABLE_OBJECT 25
853#define FC_DPI_OBJECT 26
854#define FC_RGBA_OBJECT 27
855#define FC_SCALE_OBJECT 28
856#define FC_MINSPACE_OBJECT 29
857#define FC_CHAR_WIDTH_OBJECT 30
858#define FC_CHAR_HEIGHT_OBJECT 31
859#define FC_MATRIX_OBJECT 32
860#define FC_CHARSET_OBJECT 33
861#define FC_LANG_OBJECT 34
862#define FC_FONTVERSION_OBJECT 35
863#define FC_CAPABILITY_OBJECT 36
864#define FC_FONTFORMAT_OBJECT 37
865#define FC_EMBOLDEN_OBJECT 38
866#define FC_EMBEDDED_BITMAP_OBJECT 39
c2c6976d 867#define FC_DECORATIVE_OBJECT 40
0f963b0d 868#define FC_MAX_BASE_OBJECT FC_DECORATIVE_OBJECT
7f37423d 869
4984242e 870FcPrivate FcBool
7ce19673 871FcNameBool (const FcChar8 *v, FcBool *result);
7fd7221e 872
4984242e 873FcPrivate FcBool
7ce19673 874FcObjectValidType (FcObject object, FcType type);
4262e0b3 875
4984242e 876FcPrivate FcObject
7ce19673 877FcObjectFromName (const char * name);
4262e0b3 878
4984242e 879FcPrivate const char *
7ce19673 880FcObjectName (FcObject object);
7f37423d 881
4984242e 882FcPrivate FcBool
09f9f6f6 883FcObjectInit (void);
7f37423d 884
4984242e 885FcPrivate void
09f9f6f6
KP
886FcObjectFini (void);
887
888#define FcObjectCompare(a, b) ((int) a - (int) b)
4262e0b3 889
24330d27 890/* fcpat.c */
4262e0b3 891
4984242e 892FcPrivate FcValue
4262e0b3
PL
893FcValueCanonicalize (const FcValue *v);
894
4984242e 895FcPrivate void
cd2ec1a9
PL
896FcValueListDestroy (FcValueListPtr l);
897
4984242e 898FcPrivate FcPatternElt *
7ce19673 899FcPatternObjectFindElt (const FcPattern *p, FcObject object);
e9be9cd1 900
4984242e 901FcPrivate FcPatternElt *
7ce19673 902FcPatternObjectInsertElt (FcPattern *p, FcObject object);
24330d27 903
4984242e 904FcPrivate FcBool
7ce19673
KP
905FcPatternObjectAddWithBinding (FcPattern *p,
906 FcObject object,
907 FcValue value,
908 FcValueBinding binding,
909 FcBool append);
82f4243f 910
4984242e 911FcPrivate FcBool
7ce19673
KP
912FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append);
913
4984242e 914FcPrivate FcBool
7ce19673
KP
915FcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append);
916
4984242e 917FcPrivate FcResult
7ce19673
KP
918FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v);
919
4984242e 920FcPrivate FcBool
7ce19673 921FcPatternObjectDel (FcPattern *p, FcObject object);
34cd0514 922
4984242e 923FcPrivate FcBool
7ce19673 924FcPatternObjectRemove (FcPattern *p, FcObject object, int id);
4f27c1c0 925
4984242e 926FcPrivate FcBool
7ce19673 927FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i);
cd2ec1a9 928
4984242e 929FcPrivate FcBool
7ce19673 930FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d);
cd2ec1a9 931
4984242e 932FcPrivate FcBool
7ce19673 933FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s);
cd2ec1a9 934
4984242e 935FcPrivate FcBool
7ce19673 936FcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s);
cd2ec1a9 937
4984242e 938FcPrivate FcBool
7ce19673 939FcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c);
7fd7221e 940
4984242e 941FcPrivate FcBool
7ce19673 942FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b);
cd2ec1a9 943
4984242e 944FcPrivate FcBool
7ce19673
KP
945FcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls);
946
4984242e 947FcPrivate FcResult
7ce19673
KP
948FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i);
949
4984242e 950FcPrivate FcResult
7ce19673 951FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d);
9ab79bdf 952
4984242e 953FcPrivate FcResult
7ce19673 954FcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 ** s);
9ab79bdf 955
4984242e 956FcPrivate FcResult
7ce19673 957FcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s);
9ab79bdf 958
4984242e 959FcPrivate FcResult
7ce19673 960FcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c);
9ab79bdf 961
4984242e 962FcPrivate FcResult
7ce19673 963FcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b);
cd2ec1a9 964
4984242e 965FcPrivate FcResult
7ce19673
KP
966FcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls);
967
4984242e 968FcPrivate void
7ce19673
KP
969FcPatternFini (void);
970
4984242e 971FcPrivate FcBool
7ce19673
KP
972FcPatternAppend (FcPattern *p, FcPattern *s);
973
4984242e 974FcPrivate const FcChar8 *
7ce19673
KP
975FcStrStaticName (const FcChar8 *name);
976
4984242e 977FcPrivate FcChar32
7ce19673
KP
978FcStringHash (const FcChar8 *s);
979
4984242e 980FcPrivate FcBool
7ce19673 981FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat);
cd2ec1a9 982
4984242e 983FcPrivate FcPattern *
7ce19673 984FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat);
212c9f43 985
4984242e 986FcPrivate FcBool
7ce19673
KP
987FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat);
988
4984242e 989FcPrivate FcValueList *
7ce19673 990FcValueListSerialize (FcSerialize *serialize, const FcValueList *pat);
212c9f43 991
24330d27
KP
992/* fcrender.c */
993
994/* fcmatrix.c */
327a7fd4 995
4984242e 996extern FcPrivate const FcMatrix FcIdentityMatrix;
327a7fd4 997
4984242e 998FcPrivate void
24330d27
KP
999FcMatrixFree (FcMatrix *mat);
1000
1001/* fcstr.c */
4984242e 1002FcPrivate void
cd2ec1a9
PL
1003FcStrSetSort (FcStrSet * set);
1004
4984242e 1005FcPrivate void
c2e7c611
KP
1006FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size);
1007
4984242e 1008FcPrivate void
c2e7c611
KP
1009FcStrBufDestroy (FcStrBuf *buf);
1010
4984242e 1011FcPrivate FcChar8 *
c2e7c611
KP
1012FcStrBufDone (FcStrBuf *buf);
1013
4984242e 1014FcPrivate FcBool
c2e7c611
KP
1015FcStrBufChar (FcStrBuf *buf, FcChar8 c);
1016
4984242e 1017FcPrivate FcBool
c2e7c611
KP
1018FcStrBufString (FcStrBuf *buf, const FcChar8 *s);
1019
4984242e 1020FcPrivate FcBool
c2e7c611
KP
1021FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len);
1022
4984242e 1023FcPrivate int
82f4243f
KP
1024FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
1025
4984242e 1026FcPrivate const FcChar8 *
11fec41c
KP
1027FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
1028
4984242e 1029FcPrivate const FcChar8 *
11fec41c
KP
1030FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
1031
4984242e 1032FcPrivate FcBool
ff3f1f98
KP
1033FcStrUsesHome (const FcChar8 *s);
1034
4984242e 1035FcPrivate FcChar8 *
daeed6e0
TL
1036FcStrLastSlash (const FcChar8 *path);
1037
4984242e 1038FcPrivate FcChar32
192296d8
KP
1039FcStrHashIgnoreCase (const FcChar8 *s);
1040
4984242e 1041FcPrivate FcChar8 *
0d9e31c8
KP
1042FcStrCanonFilename (const FcChar8 *s);
1043
4984242e 1044FcPrivate FcBool
7ce19673
KP
1045FcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str);
1046
4984242e 1047FcPrivate FcChar8 *
7ce19673
KP
1048FcStrSerialize (FcSerialize *serialize, const FcChar8 *str);
1049
24330d27 1050#endif /* _FC_INT_H_ */