]> git.wh0rd.org - fontconfig.git/blame - src/fcint.h
Add warning flags to fc-cache build. Clean up warnings in fc-cache.
[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
2d3387fd
KP
587FcConfigAddCache (FcConfig *config, FcCache *cache);
588
589/* fcserialize.c */
4984242e 590FcPrivate intptr_t
7ce19673
KP
591FcAlignSize (intptr_t size);
592
4984242e 593FcPrivate FcSerialize *
7ce19673
KP
594FcSerializeCreate (void);
595
4984242e 596FcPrivate void
7ce19673
KP
597FcSerializeDestroy (FcSerialize *serialize);
598
4984242e 599FcPrivate FcBool
7ce19673
KP
600FcSerializeAlloc (FcSerialize *serialize, const void *object, int size);
601
4984242e 602FcPrivate intptr_t
7ce19673
KP
603FcSerializeReserve (FcSerialize *serialize, int size);
604
4984242e 605FcPrivate intptr_t
7ce19673
KP
606FcSerializeOffset (FcSerialize *serialize, const void *object);
607
4984242e 608FcPrivate void *
7ce19673
KP
609FcSerializePtr (FcSerialize *serialize, const void *object);
610
4984242e 611FcPrivate FcBool
7ce19673
KP
612FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l);
613
4984242e 614FcPrivate FcLangSet *
7ce19673
KP
615FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l);
616
24330d27 617/* fccharset.c */
4984242e 618FcPrivate void
82f35f8b
PL
619FcLangCharSetPopulate (void);
620
4984242e 621FcPrivate FcCharSetFreezer *
18b6857c
KP
622FcCharSetFreezerCreate (void);
623
4984242e 624FcPrivate const FcCharSet *
18b6857c
KP
625FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs);
626
4984242e 627FcPrivate void
bc5e487f 628FcCharSetFreezerDestroy (FcCharSetFreezer *freezer);
34cd0514 629
4984242e 630FcPrivate FcBool
c2e7c611 631FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c);
24330d27 632
4984242e 633FcPrivate FcCharSet *
24330d27
KP
634FcNameParseCharSet (FcChar8 *string);
635
4984242e 636FcPrivate FcCharLeaf *
c647f6f1 637FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4);
69937bd9 638
4984242e 639FcPrivate FcBool
7ce19673 640FcCharSetSerializeAlloc(FcSerialize *serialize, const FcCharSet *cs);
cd2ec1a9 641
4984242e 642FcPrivate FcCharSet *
7ce19673 643FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs);
cd2ec1a9 644
4984242e 645FcPrivate FcChar16 *
cd2ec1a9
PL
646FcCharSetGetNumbers(const FcCharSet *c);
647
24330d27 648/* fcdbg.c */
4984242e 649FcPrivate void
cd2ec1a9 650FcValueListPrint (const FcValueListPtr l);
24330d27 651
4984242e 652FcPrivate void
793e946c
KP
653FcLangSetPrint (const FcLangSet *ls);
654
4984242e 655FcPrivate void
24330d27
KP
656FcOpPrint (FcOp op);
657
4984242e 658FcPrivate void
938bc633 659FcTestPrint (const FcTest *test);
24330d27 660
4984242e 661FcPrivate void
938bc633 662FcExprPrint (const FcExpr *expr);
24330d27 663
4984242e 664FcPrivate void
938bc633 665FcEditPrint (const FcEdit *edit);
24330d27 666
4984242e 667FcPrivate void
938bc633 668FcSubstPrint (const FcSubst *subst);
24330d27 669
4984242e 670FcPrivate void
7ce19673
KP
671FcCharSetPrint (const FcCharSet *c);
672
4984242e 673extern FcPrivate int FcDebugVal;
b97a34b5 674
4984242e 675#define FcDebug() (FcDebugVal)
b97a34b5 676
4984242e 677FcPrivate void
b97a34b5 678FcInitDebug (void);
24330d27 679
90442681 680/* fcdefault.c */
4984242e 681FcPrivate FcChar8 *
90442681
PL
682FcGetDefaultLang (void);
683
24330d27 684/* fcdir.c */
24330d27 685
4984242e 686FcPrivate FcBool
d47c9d6e
KP
687FcFileScanConfig (FcFontSet *set,
688 FcStrSet *dirs,
d47c9d6e
KP
689 FcBlanks *blanks,
690 const FcChar8 *file,
d47c9d6e
KP
691 FcConfig *config);
692
4984242e 693FcPrivate FcBool
d47c9d6e
KP
694FcDirScanConfig (FcFontSet *set,
695 FcStrSet *dirs,
d47c9d6e 696 FcBlanks *blanks,
bc5e487f 697 const FcChar8 *dir,
d47c9d6e
KP
698 FcBool force,
699 FcConfig *config);
700
24330d27 701/* fcfont.c */
4984242e 702FcPrivate int
24330d27
KP
703FcFontDebug (void);
704
82f4243f 705/* fcfreetype.c */
4984242e 706FcPrivate FcBool
e50b9ae7
KP
707FcFreeTypeIsExclusiveLang (const FcChar8 *lang);
708
4984242e 709FcPrivate FcBool
82f4243f
KP
710FcFreeTypeHasLang (FcPattern *pattern, const FcChar8 *lang);
711
4984242e 712FcPrivate FcChar32
c647f6f1
KP
713FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map);
714
4984242e 715FcPrivate FcChar32
c647f6f1
KP
716FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map);
717
4984242e 718FcPrivate const FcCharMap *
c647f6f1
KP
719FcFreeTypeGetPrivateMap (FT_Encoding encoding);
720
24330d27 721/* fcfs.c */
cd2ec1a9 722
4984242e 723FcPrivate FcBool
7ce19673 724FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s);
212c9f43 725
4984242e 726FcPrivate FcFontSet *
7ce19673
KP
727FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s);
728
24330d27 729/* fcgram.y */
4984242e 730FcPrivate int
24330d27
KP
731FcConfigparse (void);
732
4984242e 733FcPrivate int
24330d27
KP
734FcConfigwrap (void);
735
4984242e 736FcPrivate void
24330d27
KP
737FcConfigerror (char *fmt, ...);
738
4984242e 739FcPrivate char *
24330d27
KP
740FcConfigSaveField (const char *field);
741
4984242e 742FcPrivate void
24330d27
KP
743FcTestDestroy (FcTest *test);
744
4984242e 745FcPrivate FcExpr *
24330d27
KP
746FcExprCreateInteger (int i);
747
4984242e 748FcPrivate FcExpr *
24330d27
KP
749FcExprCreateDouble (double d);
750
4984242e 751FcPrivate FcExpr *
ccb3e93b 752FcExprCreateString (const FcChar8 *s);
24330d27 753
4984242e 754FcPrivate FcExpr *
24330d27
KP
755FcExprCreateMatrix (const FcMatrix *m);
756
4984242e 757FcPrivate FcExpr *
24330d27
KP
758FcExprCreateBool (FcBool b);
759
4984242e 760FcPrivate FcExpr *
24330d27
KP
761FcExprCreateNil (void);
762
4984242e 763FcPrivate FcExpr *
24330d27
KP
764FcExprCreateField (const char *field);
765
4984242e 766FcPrivate FcExpr *
ccb3e93b 767FcExprCreateConst (const FcChar8 *constant);
24330d27 768
4984242e 769FcPrivate FcExpr *
24330d27
KP
770FcExprCreateOp (FcExpr *left, FcOp op, FcExpr *right);
771
4984242e 772FcPrivate void
24330d27
KP
773FcExprDestroy (FcExpr *e);
774
4984242e 775FcPrivate void
24330d27
KP
776FcEditDestroy (FcEdit *e);
777
778/* fcinit.c */
779
4984242e 780FcPrivate void
24330d27
KP
781FcMemReport (void);
782
4984242e 783FcPrivate void
24330d27
KP
784FcMemAlloc (int kind, int size);
785
4984242e 786FcPrivate void
24330d27
KP
787FcMemFree (int kind, int size);
788
82f4243f 789/* fclang.c */
4984242e 790FcPrivate FcLangSet *
d8d73958 791FcFreeTypeLangSet (const FcCharSet *charset,
e50b9ae7 792 const FcChar8 *exclusiveLang);
82f4243f 793
4984242e 794FcPrivate FcLangResult
82f4243f
KP
795FcLangCompare (const FcChar8 *s1, const FcChar8 *s2);
796
4984242e 797FcPrivate const FcCharSet *
82f4243f
KP
798FcCharSetForLang (const FcChar8 *lang);
799
4984242e 800FcPrivate FcLangSet *
d8d73958
KP
801FcLangSetPromote (const FcChar8 *lang);
802
4984242e 803FcPrivate FcLangSet *
d8d73958
KP
804FcNameParseLangSet (const FcChar8 *string);
805
4984242e 806FcPrivate FcBool
d8d73958
KP
807FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls);
808
4984242e 809FcPrivate FcChar8 *
f57783d2
KP
810FcNameUnparseEscaped (FcPattern *pat, FcBool escape);
811
24330d27
KP
812/* fclist.c */
813
4984242e 814FcPrivate FcBool
4f27c1c0
KP
815FcListPatternMatchAny (const FcPattern *p,
816 const FcPattern *font);
817
24330d27
KP
818/* fcmatch.c */
819
820/* fcname.c */
24330d27 821
7ce19673
KP
822/*
823 * NOTE -- this ordering is part of the cache file format.
824 * It must also match the ordering in fcname.c
825 */
4262e0b3 826
7ce19673
KP
827#define FC_FAMILY_OBJECT 1
828#define FC_FAMILYLANG_OBJECT 2
829#define FC_STYLE_OBJECT 3
830#define FC_STYLELANG_OBJECT 4
831#define FC_FULLNAME_OBJECT 5
832#define FC_FULLNAMELANG_OBJECT 6
833#define FC_SLANT_OBJECT 7
834#define FC_WEIGHT_OBJECT 8
835#define FC_WIDTH_OBJECT 9
836#define FC_SIZE_OBJECT 10
837#define FC_ASPECT_OBJECT 11
838#define FC_PIXEL_SIZE_OBJECT 12
839#define FC_SPACING_OBJECT 13
840#define FC_FOUNDRY_OBJECT 14
841#define FC_ANTIALIAS_OBJECT 15
842#define FC_HINT_STYLE_OBJECT 16
843#define FC_HINTING_OBJECT 17
844#define FC_VERTICAL_LAYOUT_OBJECT 18
845#define FC_AUTOHINT_OBJECT 19
846#define FC_GLOBAL_ADVANCE_OBJECT 20
847#define FC_FILE_OBJECT 21
848#define FC_INDEX_OBJECT 22
849#define FC_RASTERIZER_OBJECT 23
850#define FC_OUTLINE_OBJECT 24
851#define FC_SCALABLE_OBJECT 25
852#define FC_DPI_OBJECT 26
853#define FC_RGBA_OBJECT 27
854#define FC_SCALE_OBJECT 28
855#define FC_MINSPACE_OBJECT 29
856#define FC_CHAR_WIDTH_OBJECT 30
857#define FC_CHAR_HEIGHT_OBJECT 31
858#define FC_MATRIX_OBJECT 32
859#define FC_CHARSET_OBJECT 33
860#define FC_LANG_OBJECT 34
861#define FC_FONTVERSION_OBJECT 35
862#define FC_CAPABILITY_OBJECT 36
863#define FC_FONTFORMAT_OBJECT 37
864#define FC_EMBOLDEN_OBJECT 38
865#define FC_EMBEDDED_BITMAP_OBJECT 39
c2c6976d 866#define FC_DECORATIVE_OBJECT 40
7f37423d 867
4984242e 868FcPrivate FcBool
7ce19673 869FcNameBool (const FcChar8 *v, FcBool *result);
7fd7221e 870
4984242e 871FcPrivate FcBool
7ce19673 872FcObjectValidType (FcObject object, FcType type);
4262e0b3 873
4984242e 874FcPrivate FcObject
7ce19673 875FcObjectFromName (const char * name);
4262e0b3 876
4984242e 877FcPrivate const char *
7ce19673 878FcObjectName (FcObject object);
7f37423d 879
4984242e 880FcPrivate FcBool
09f9f6f6 881FcObjectInit (void);
7f37423d 882
4984242e 883FcPrivate void
09f9f6f6
KP
884FcObjectFini (void);
885
886#define FcObjectCompare(a, b) ((int) a - (int) b)
4262e0b3 887
24330d27 888/* fcpat.c */
4262e0b3 889
4984242e 890FcPrivate FcValue
4262e0b3
PL
891FcValueCanonicalize (const FcValue *v);
892
4984242e 893FcPrivate void
cd2ec1a9
PL
894FcValueListDestroy (FcValueListPtr l);
895
4984242e 896FcPrivate FcPatternElt *
7ce19673 897FcPatternObjectFindElt (const FcPattern *p, FcObject object);
e9be9cd1 898
4984242e 899FcPrivate FcPatternElt *
7ce19673 900FcPatternObjectInsertElt (FcPattern *p, FcObject object);
24330d27 901
4984242e 902FcPrivate FcBool
7ce19673
KP
903FcPatternObjectAddWithBinding (FcPattern *p,
904 FcObject object,
905 FcValue value,
906 FcValueBinding binding,
907 FcBool append);
82f4243f 908
4984242e 909FcPrivate FcBool
7ce19673
KP
910FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append);
911
4984242e 912FcPrivate FcBool
7ce19673
KP
913FcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append);
914
4984242e 915FcPrivate FcResult
7ce19673
KP
916FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v);
917
4984242e 918FcPrivate FcBool
7ce19673 919FcPatternObjectDel (FcPattern *p, FcObject object);
34cd0514 920
4984242e 921FcPrivate FcBool
7ce19673 922FcPatternObjectRemove (FcPattern *p, FcObject object, int id);
4f27c1c0 923
4984242e 924FcPrivate FcBool
7ce19673 925FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i);
cd2ec1a9 926
4984242e 927FcPrivate FcBool
7ce19673 928FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d);
cd2ec1a9 929
4984242e 930FcPrivate FcBool
7ce19673 931FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s);
cd2ec1a9 932
4984242e 933FcPrivate FcBool
7ce19673 934FcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s);
cd2ec1a9 935
4984242e 936FcPrivate FcBool
7ce19673 937FcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c);
7fd7221e 938
4984242e 939FcPrivate FcBool
7ce19673 940FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b);
cd2ec1a9 941
4984242e 942FcPrivate FcBool
7ce19673
KP
943FcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls);
944
4984242e 945FcPrivate FcResult
7ce19673
KP
946FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i);
947
4984242e 948FcPrivate FcResult
7ce19673 949FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d);
9ab79bdf 950
4984242e 951FcPrivate FcResult
7ce19673 952FcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 ** s);
9ab79bdf 953
4984242e 954FcPrivate FcResult
7ce19673 955FcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s);
9ab79bdf 956
4984242e 957FcPrivate FcResult
7ce19673 958FcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c);
9ab79bdf 959
4984242e 960FcPrivate FcResult
7ce19673 961FcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b);
cd2ec1a9 962
4984242e 963FcPrivate FcResult
7ce19673
KP
964FcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls);
965
4984242e 966FcPrivate void
7ce19673
KP
967FcPatternFini (void);
968
4984242e 969FcPrivate FcBool
7ce19673
KP
970FcPatternAppend (FcPattern *p, FcPattern *s);
971
4984242e 972FcPrivate const FcChar8 *
7ce19673
KP
973FcStrStaticName (const FcChar8 *name);
974
4984242e 975FcPrivate FcChar32
7ce19673
KP
976FcStringHash (const FcChar8 *s);
977
4984242e 978FcPrivate FcBool
7ce19673 979FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat);
cd2ec1a9 980
4984242e 981FcPrivate FcPattern *
7ce19673 982FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat);
212c9f43 983
4984242e 984FcPrivate FcBool
7ce19673
KP
985FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat);
986
4984242e 987FcPrivate FcValueList *
7ce19673 988FcValueListSerialize (FcSerialize *serialize, const FcValueList *pat);
212c9f43 989
24330d27
KP
990/* fcrender.c */
991
992/* fcmatrix.c */
327a7fd4 993
4984242e 994extern FcPrivate const FcMatrix FcIdentityMatrix;
327a7fd4 995
4984242e 996FcPrivate void
24330d27
KP
997FcMatrixFree (FcMatrix *mat);
998
999/* fcstr.c */
4984242e 1000FcPrivate void
cd2ec1a9
PL
1001FcStrSetSort (FcStrSet * set);
1002
4984242e 1003FcPrivate void
c2e7c611
KP
1004FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size);
1005
4984242e 1006FcPrivate void
c2e7c611
KP
1007FcStrBufDestroy (FcStrBuf *buf);
1008
4984242e 1009FcPrivate FcChar8 *
c2e7c611
KP
1010FcStrBufDone (FcStrBuf *buf);
1011
4984242e 1012FcPrivate FcBool
c2e7c611
KP
1013FcStrBufChar (FcStrBuf *buf, FcChar8 c);
1014
4984242e 1015FcPrivate FcBool
c2e7c611
KP
1016FcStrBufString (FcStrBuf *buf, const FcChar8 *s);
1017
4984242e 1018FcPrivate FcBool
c2e7c611
KP
1019FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len);
1020
4984242e 1021FcPrivate int
82f4243f
KP
1022FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
1023
4984242e 1024FcPrivate const FcChar8 *
11fec41c
KP
1025FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
1026
4984242e 1027FcPrivate const FcChar8 *
11fec41c
KP
1028FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
1029
4984242e 1030FcPrivate FcBool
ff3f1f98
KP
1031FcStrUsesHome (const FcChar8 *s);
1032
4984242e 1033FcPrivate FcChar8 *
daeed6e0
TL
1034FcStrLastSlash (const FcChar8 *path);
1035
4984242e 1036FcPrivate FcChar32
192296d8
KP
1037FcStrHashIgnoreCase (const FcChar8 *s);
1038
4984242e 1039FcPrivate FcChar8 *
0d9e31c8
KP
1040FcStrCanonFilename (const FcChar8 *s);
1041
4984242e 1042FcPrivate FcBool
7ce19673
KP
1043FcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str);
1044
4984242e 1045FcPrivate FcChar8 *
7ce19673
KP
1046FcStrSerialize (FcSerialize *serialize, const FcChar8 *str);
1047
24330d27 1048#endif /* _FC_INT_H_ */