]> git.wh0rd.org - fontconfig.git/blame - src/fcint.h
Revert to original FcFontSetMatch algorithm to avoid losing fonts.
[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
179c3995
KP
56#define FC_FONT_FILE_INVALID ((FcChar8 *) ".")
57#define FC_FONT_FILE_DIR ((FcChar8 *) ".dir")
c60ec7cc 58#define FC_GLOBAL_MAGIC_COOKIE "GLOBAL"
179c3995 59
daeed6e0
TL
60#ifdef _WIN32
61#define FC_SEARCH_PATH_SEPARATOR ';'
62#else
63#define FC_SEARCH_PATH_SEPARATOR ':'
64#endif
65
24330d27
KP
66#define FC_DBG_MATCH 1
67#define FC_DBG_MATCHV 2
68#define FC_DBG_EDIT 4
69#define FC_DBG_FONTSET 8
70#define FC_DBG_CACHE 16
71#define FC_DBG_CACHEV 32
72#define FC_DBG_PARSE 64
73#define FC_DBG_SCAN 128
4c003605 74#define FC_DBG_SCANV 256
24330d27 75#define FC_DBG_MEMORY 512
2d9c79c0 76#define FC_DBG_CONFIG 1024
24330d27
KP
77
78#define FC_MEM_CHARSET 0
d8d73958 79#define FC_MEM_CHARLEAF 1
24330d27
KP
80#define FC_MEM_FONTSET 2
81#define FC_MEM_FONTPTR 3
82#define FC_MEM_OBJECTSET 4
83#define FC_MEM_OBJECTPTR 5
84#define FC_MEM_MATRIX 6
85#define FC_MEM_PATTERN 7
86#define FC_MEM_PATELT 8
87#define FC_MEM_VALLIST 9
88#define FC_MEM_SUBSTATE 10
89#define FC_MEM_STRING 11
90#define FC_MEM_LISTBUCK 12
d8d73958
KP
91#define FC_MEM_STRSET 13
92#define FC_MEM_STRLIST 14
93#define FC_MEM_CONFIG 15
94#define FC_MEM_LANGSET 16
9dac3c59
KP
95#define FC_MEM_ATOMIC 17
96#define FC_MEM_BLANKS 18
97#define FC_MEM_CACHE 19
98#define FC_MEM_STRBUF 20
99#define FC_MEM_SUBST 21
100#define FC_MEM_OBJECTTYPE 22
101#define FC_MEM_CONSTANT 23
102#define FC_MEM_TEST 24
103#define FC_MEM_EXPR 25
104#define FC_MEM_VSTACK 26
105#define FC_MEM_ATTR 27
106#define FC_MEM_PSTACK 28
1c52c0f0 107#define FC_MEM_STATICSTR 29
d8d73958 108
1c52c0f0 109#define FC_MEM_NUM 30
24330d27 110
1c9fdcca
PL
111#define FC_BANK_DYNAMIC 0
112#define FC_BANK_FIRST 1
82f35f8b
PL
113#define FC_BANK_LANGS 0xfcfcfcfc
114
4c003605 115typedef enum _FcValueBinding {
dda7794f 116 FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame
4c003605
KP
117} FcValueBinding;
118
cd2ec1a9 119typedef struct _FcValueListPtr {
4262e0b3 120 int bank;
cd2ec1a9
PL
121 union {
122 int stat;
123 struct _FcValueList *dyn;
124 } u;
125} FcValueListPtr;
126
24330d27 127typedef struct _FcValueList {
cd2ec1a9
PL
128 FcValueListPtr next;
129
24330d27 130 FcValue value;
e709ddfa 131 FcValueBinding binding;
24330d27
KP
132} FcValueList;
133
4262e0b3
PL
134typedef int FcObjectPtr;
135
cd2ec1a9 136typedef struct _FcPatternEltPtr {
4262e0b3 137 int bank;
cd2ec1a9
PL
138 union {
139 int stat;
140 struct _FcPatternElt *dyn;
141 } u;
142} FcPatternEltPtr;
143
24330d27 144typedef struct _FcPatternElt {
cd2ec1a9
PL
145 FcObjectPtr object;
146 FcValueListPtr values;
24330d27
KP
147} FcPatternElt;
148
149struct _FcPattern {
150 int num;
151 int size;
cd2ec1a9 152 FcPatternEltPtr elts;
e709ddfa 153 int ref;
4262e0b3 154 int bank;
24330d27
KP
155};
156
157typedef enum _FcOp {
158 FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpBool, FcOpCharSet,
159 FcOpNil,
160 FcOpField, FcOpConst,
161 FcOpAssign, FcOpAssignReplace,
162 FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast,
163 FcOpQuest,
74a623e0
KP
164 FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual,
165 FcOpContains, FcOpListing, FcOpNotContains,
24330d27
KP
166 FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual,
167 FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide,
3f7653c2
KP
168 FcOpNot, FcOpComma, FcOpFloor, FcOpCeil, FcOpRound, FcOpTrunc,
169 FcOpInvalid
24330d27
KP
170} FcOp;
171
172typedef struct _FcExpr {
173 FcOp op;
174 union {
175 int ival;
176 double dval;
ccb3e93b 177 FcChar8 *sval;
24330d27
KP
178 FcMatrix *mval;
179 FcBool bval;
180 FcCharSet *cval;
181 char *field;
ccb3e93b 182 FcChar8 *constant;
24330d27
KP
183 struct {
184 struct _FcExpr *left, *right;
185 } tree;
186 } u;
187} FcExpr;
188
189typedef enum _FcQual {
6f6563ed 190 FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst
24330d27
KP
191} FcQual;
192
938bc633
KP
193#define FcMatchDefault ((FcMatchKind) -1)
194
24330d27
KP
195typedef struct _FcTest {
196 struct _FcTest *next;
938bc633 197 FcMatchKind kind;
24330d27
KP
198 FcQual qual;
199 const char *field;
200 FcOp op;
201 FcExpr *expr;
202} FcTest;
203
204typedef struct _FcEdit {
205 struct _FcEdit *next;
206 const char *field;
207 FcOp op;
208 FcExpr *expr;
6fff2cda 209 FcValueBinding binding;
24330d27
KP
210} FcEdit;
211
212typedef struct _FcSubst {
213 struct _FcSubst *next;
214 FcTest *test;
215 FcEdit *edit;
216} FcSubst;
217
20ac65ab 218typedef struct _FcCharLeaf {
24330d27 219 FcChar32 map[256/32];
20ac65ab 220} FcCharLeaf;
24330d27 221
d8d73958 222#define FC_REF_CONSTANT -1
82f4243f 223
24330d27 224struct _FcCharSet {
24330d27 225 int ref; /* reference count */
20ac65ab 226 int num; /* size of leaves and numbers arrays */
4262e0b3 227 int bank;
cd2ec1a9 228 union {
cd2ec1a9
PL
229 struct {
230 int leafidx_offset;
231 int numbers_offset;
232 } stat;
f23f5f38
PL
233 struct {
234 FcCharLeaf **leaves;
235 FcChar16 *numbers;
236 } dyn;
cd2ec1a9 237 } u;
24330d27
KP
238};
239
179c3995
KP
240struct _FcStrSet {
241 int ref; /* reference count */
242 int num;
243 int size;
4262e0b3 244 FcChar8 **strs;
179c3995
KP
245};
246
247struct _FcStrList {
248 FcStrSet *set;
249 int n;
250};
251
c2e7c611 252typedef struct _FcStrBuf {
24330d27
KP
253 FcChar8 *buf;
254 FcBool allocated;
255 FcBool failed;
256 int len;
257 int size;
c2e7c611 258} FcStrBuf;
24330d27 259
212c9f43 260typedef struct _FcCache {
31081737 261 int magic; /* FC_CACHE_MAGIC */
00f059e9
KP
262 int subdirs; /* number of subdir strings */
263 off_t pos; /* position of data block in file */
264 off_t count; /* number of bytes of data in block */
c7beacf9
PL
265 int bank; /* bank ID */
266 int pattern_count; /* number of FcPatterns */
267 int patternelt_count; /* number of FcPatternElts */
268 int valuelist_count; /* number of FcValueLists */
a9698bed
PL
269 int str_count; /* size of strings appearing as FcValues */
270 int langset_count; /* number of FcLangSets */
271 int charset_count; /* number of FcCharSets */
272 int charset_numbers_count;
4262e0b3
PL
273 int charset_leaf_count;
274 int charset_leaf_idx_count;
212c9f43
PL
275} FcCache;
276
7769c321
KP
277/*
278 * To map adobe glyph names to unicode values, a precomputed hash
279 * table is used
280 */
281
282typedef struct _FcGlyphName {
283 FcChar32 ucs; /* unicode value */
284 FcChar8 name[1]; /* name extends beyond struct */
285} FcGlyphName;
286
192296d8
KP
287/*
288 * To perform case-insensitive string comparisons, a table
289 * is used which holds three different kinds of folding data.
290 *
291 * The first is a range of upper case values mapping to a range
292 * of their lower case equivalents. Within each range, the offset
293 * between upper and lower case is constant.
294 *
295 * The second is a range of upper case values which are interleaved
296 * with their lower case equivalents.
297 *
298 * The third is a set of raw unicode values mapping to a list
299 * of unicode values for comparison purposes. This allows conversion
300 * of ß to "ss" so that SS, ss and ß all match. A separate array
301 * holds the list of unicode values for each entry.
302 *
303 * These are packed into a single table. Using a binary search,
304 * the appropriate entry can be located.
305 */
306
307#define FC_CASE_FOLD_RANGE 0
308#define FC_CASE_FOLD_EVEN_ODD 1
309#define FC_CASE_FOLD_FULL 2
310
311typedef struct _FcCaseFold {
312 FcChar32 upper;
313 FcChar16 method : 2;
314 FcChar16 count : 14;
315 short offset; /* lower - upper for RANGE, table id for FULL */
316} FcCaseFold;
317
2d9c79c0
KP
318#define FC_MAX_FILE_LEN 4096
319
4262e0b3
PL
320#define FC_STORAGE_STATIC 0x80
321#define fc_value_string(v) (((v)->type & FC_STORAGE_STATIC) ? ((FcChar8 *) v) + (v)->u.s_off : (v) -> u.s)
322#define fc_value_charset(v) (((v)->type & FC_STORAGE_STATIC) ? (const FcCharSet *)(((char *) v) + (v)->u.c_off) : (v) -> u.c)
323#define fc_value_langset(v) (((v)->type & FC_STORAGE_STATIC) ? (const FcLangSet *)(((char *) v) + (v)->u.l_off) : (v) -> u.l)
1c9fdcca 324#define fc_storage_type(v) ((v)->type & ~FC_STORAGE_STATIC)
4262e0b3 325
44415a07
PL
326#define fc_alignof(type) offsetof (struct { char c; type member; }, member)
327
c1c3ba06 328#define FC_CACHE_MAGIC 0xFC02FC04
327a7fd4 329
134f6011
KP
330struct _FcAtomic {
331 FcChar8 *file; /* original file name */
332 FcChar8 *new; /* temp file name -- write data here */
333 FcChar8 *lck; /* lockfile name (used for locking) */
334 FcChar8 *tmp; /* tmpfile name (used for locking) */
335};
336
24330d27
KP
337struct _FcBlanks {
338 int nblank;
339 int sblank;
340 FcChar32 *blanks;
341};
342
343struct _FcConfig {
344 /*
345 * File names loaded from the configuration -- saved here as the
346 * cache file must be consulted before the directories are scanned,
347 * and those directives may occur in any order
348 */
179c3995 349 FcStrSet *configDirs; /* directories to scan for fonts */
ccb3e93b 350 FcChar8 *cache; /* name of per-user cache file */
24330d27
KP
351 /*
352 * Set of allowed blank chars -- used to
353 * trim fonts of bogus glyphs
354 */
355 FcBlanks *blanks;
179c3995
KP
356 /*
357 * List of directories containing fonts,
358 * built by recursively scanning the set
359 * of configured directories
360 */
361 FcStrSet *fontDirs;
7410e40b
PL
362 /*
363 * List of directories containing cache files.
364 */
365 FcStrSet *cacheDirs;
24330d27
KP
366 /*
367 * Names of all of the configuration files used
368 * to create this configuration
369 */
179c3995 370 FcStrSet *configFiles; /* config files loaded */
24330d27
KP
371 /*
372 * Substitution instructions for patterns and fonts;
373 * maxObjects is used to allocate appropriate intermediate storage
374 * while performing a whole set of substitutions
375 */
376 FcSubst *substPattern; /* substitutions for patterns */
377 FcSubst *substFont; /* substitutions for fonts */
378 int maxObjects; /* maximum number of tests in all substs */
d47c9d6e
KP
379 /*
380 * List of patterns used to control font file selection
381 */
382 FcStrSet *acceptGlobs;
383 FcStrSet *rejectGlobs;
4f27c1c0
KP
384 FcFontSet *acceptPatterns;
385 FcFontSet *rejectPatterns;
24330d27
KP
386 /*
387 * The set of fonts loaded from the listed directories; the
388 * order within the set does not determine the font selection,
389 * except in the case of identical matches in which case earlier fonts
390 * match preferrentially
391 */
392 FcFontSet *fonts[FcSetApplication + 1];
179c3995
KP
393 /*
394 * Fontconfig can periodically rescan the system configuration
395 * and font directories. This rescanning occurs when font
396 * listing requests are made, but no more often than rescanInterval
397 * seconds apart.
398 */
399 time_t rescanTime; /* last time information was scanned */
400 int rescanInterval; /* interval between scans */
24330d27
KP
401};
402
6e9fc5de
KP
403extern FcConfig *_fcConfig;
404
2b25f00c
PL
405typedef struct _FcFileTime {
406 time_t time;
407 FcBool set;
408} FcFileTime;
409
69937bd9
KP
410typedef struct _FcCharMap FcCharMap;
411
44415a07
PL
412/* watch out; assumes that v is void * -PL */
413#define ALIGN(v,type) ((void *)(((uintptr_t)(v) + fc_alignof(type) - 1) & ~(fc_alignof(type) - 1)))
7fd7221e 414
24330d27
KP
415/* fcblanks.c */
416
417/* fccache.c */
418
4262e0b3 419FcFontSet *
00f059e9 420FcCacheRead (FcConfig *config);
24330d27
KP
421
422FcBool
7410e40b 423FcDirCacheWrite (FcFontSet *set, FcStrSet * dirs, const FcChar8 *dir, FcConfig *config);
4262e0b3 424
af180c40
KP
425FcBool
426FcDirCacheConsume (FILE *file, FcFontSet *set, FcStrSet *dirs,
427 const FcChar8 *dir, char *dirname);
428
2eb84374 429FcBool
cd9bca69 430FcDirCacheRead (FcFontSet * set, FcStrSet * dirs, const FcChar8 *dir, FcConfig *config);
2eb84374 431
b8948e85 432extern int *_fcBankId, *_fcBankIdx;
4262e0b3 433int
b8948e85
PL
434FcCacheBankToIndexMTF (int bank);
435
44415a07 436static inline int
b8948e85
PL
437FcCacheBankToIndex (int bank)
438{
19ea60bc 439 return (_fcBankId[*_fcBankIdx] == bank) ? *_fcBankIdx : FcCacheBankToIndexMTF(bank);
b8948e85 440}
e77c1718
PL
441
442const char *
443FcCacheFindBankDir (int bank);
212c9f43 444
24330d27
KP
445/* fccfg.c */
446
179c3995
KP
447FcBool
448FcConfigAddConfigDir (FcConfig *config,
449 const FcChar8 *d);
450
451FcBool
452FcConfigAddFontDir (FcConfig *config,
453 const FcChar8 *d);
454
24330d27 455FcBool
ccb3e93b
KP
456FcConfigAddDir (FcConfig *config,
457 const FcChar8 *d);
24330d27 458
7410e40b
PL
459FcBool
460FcConfigAddCacheDir (FcConfig *config,
461 const FcChar8 *d);
462
463FcStrList *
464FcConfigGetCacheDirs (FcConfig *config);
465
24330d27 466FcBool
ccb3e93b
KP
467FcConfigAddConfigFile (FcConfig *config,
468 const FcChar8 *f);
24330d27
KP
469
470FcBool
471FcConfigSetCache (FcConfig *config,
ccb3e93b 472 const FcChar8 *c);
24330d27
KP
473
474FcBool
475FcConfigAddBlank (FcConfig *config,
476 FcChar32 blank);
477
478FcBool
479FcConfigAddEdit (FcConfig *config,
480 FcTest *test,
481 FcEdit *edit,
482 FcMatchKind kind);
483
484void
485FcConfigSetFonts (FcConfig *config,
486 FcFontSet *fonts,
487 FcSetName set);
488
489FcBool
4262e0b3 490FcConfigCompareValue (const FcValue *m,
24330d27 491 FcOp op,
4262e0b3 492 const FcValue *v);
24330d27 493
d47c9d6e
KP
494FcBool
495FcConfigGlobAdd (FcConfig *config,
496 const FcChar8 *glob,
497 FcBool accept);
498
499FcBool
500FcConfigAcceptFilename (FcConfig *config,
501 const FcChar8 *filename);
502
4f27c1c0
KP
503FcBool
504FcConfigPatternsAdd (FcConfig *config,
505 FcPattern *pattern,
506 FcBool accept);
507
508FcBool
509FcConfigAcceptFont (FcConfig *config,
510 const FcPattern *font);
511
2b25f00c
PL
512FcFileTime
513FcConfigModifiedTime (FcConfig *config);
514
24330d27 515/* fccharset.c */
82f35f8b
PL
516void
517FcLangCharSetPopulate (void);
518
4c003605
KP
519FcCharSet *
520FcCharSetFreeze (FcCharSet *cs);
521
34cd0514
CW
522void
523FcCharSetThawAll (void);
524
24330d27 525FcBool
c2e7c611 526FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c);
24330d27
KP
527
528FcCharSet *
529FcNameParseCharSet (FcChar8 *string);
530
c647f6f1
KP
531FcCharLeaf *
532FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4);
69937bd9 533
cd2ec1a9 534void
4262e0b3 535FcCharSetNewBank (void);
cd2ec1a9 536
4262e0b3
PL
537int
538FcCharSetNeededBytes (const FcCharSet *c);
cd2ec1a9 539
7fd7221e
PL
540int
541FcCharSetNeededBytesAlign (void);
542
4262e0b3
PL
543void *
544FcCharSetDistributeBytes (FcCache * metadata,
545 void * block_ptr);
cd2ec1a9 546
4262e0b3
PL
547FcCharSet *
548FcCharSetSerialize(int bank, FcCharSet *c);
cd2ec1a9 549
4262e0b3 550void *
61571f3f 551FcCharSetUnserialize (FcCache * metadata, void *block_ptr);
cd2ec1a9
PL
552
553FcCharLeaf *
554FcCharSetGetLeaf(const FcCharSet *c, int i);
555
556FcChar16 *
557FcCharSetGetNumbers(const FcCharSet *c);
558
24330d27 559/* fcdbg.c */
24330d27 560void
cd2ec1a9 561FcValueListPrint (const FcValueListPtr l);
24330d27 562
793e946c
KP
563void
564FcLangSetPrint (const FcLangSet *ls);
565
24330d27
KP
566void
567FcOpPrint (FcOp op);
568
569void
938bc633 570FcTestPrint (const FcTest *test);
24330d27
KP
571
572void
938bc633 573FcExprPrint (const FcExpr *expr);
24330d27
KP
574
575void
938bc633 576FcEditPrint (const FcEdit *edit);
24330d27
KP
577
578void
938bc633 579FcSubstPrint (const FcSubst *subst);
24330d27 580
b97a34b5
PL
581extern int FcDebugVal;
582
44415a07 583static inline int
b97a34b5
PL
584FcDebug (void) { return FcDebugVal; }
585
586void
587FcInitDebug (void);
24330d27 588
90442681
PL
589/* fcdefault.c */
590FcChar8 *
591FcGetDefaultLang (void);
592
24330d27 593/* fcdir.c */
24330d27 594
2d9c79c0
KP
595FcBool
596FcFileIsDir (const FcChar8 *file);
597
d47c9d6e
KP
598FcBool
599FcFileScanConfig (FcFontSet *set,
600 FcStrSet *dirs,
d47c9d6e
KP
601 FcBlanks *blanks,
602 const FcChar8 *file,
603 FcBool force,
604 FcConfig *config);
605
606FcBool
607FcDirScanConfig (FcFontSet *set,
608 FcStrSet *dirs,
d47c9d6e
KP
609 FcBlanks *blanks,
610 const FcChar8 *dir,
611 FcBool force,
612 FcConfig *config);
613
24330d27
KP
614/* fcfont.c */
615int
616FcFontDebug (void);
617
82f4243f 618/* fcfreetype.c */
e50b9ae7
KP
619FcBool
620FcFreeTypeIsExclusiveLang (const FcChar8 *lang);
621
82f4243f
KP
622FcBool
623FcFreeTypeHasLang (FcPattern *pattern, const FcChar8 *lang);
624
c647f6f1
KP
625FcChar32
626FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map);
627
628FcChar32
629FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map);
630
631const FcCharMap *
632FcFreeTypeGetPrivateMap (FT_Encoding encoding);
633
24330d27 634/* fcfs.c */
cd2ec1a9
PL
635
636void
4262e0b3 637FcFontSetNewBank (void);
cd2ec1a9 638
4262e0b3
PL
639int
640FcFontSetNeededBytes (FcFontSet *s);
cd2ec1a9 641
7fd7221e
PL
642int
643FcFontSetNeededBytesAlign (void);
644
4262e0b3
PL
645void *
646FcFontSetDistributeBytes (FcCache * metadata, void * block_ptr);
cd2ec1a9 647
212c9f43 648FcBool
4262e0b3 649FcFontSetSerialize (int bank, FcFontSet * s);
212c9f43
PL
650
651FcBool
61571f3f 652FcFontSetUnserialize(FcCache * metadata, FcFontSet * s, void * block_ptr);
212c9f43 653
24330d27
KP
654/* fcgram.y */
655int
656FcConfigparse (void);
657
658int
659FcConfigwrap (void);
660
661void
662FcConfigerror (char *fmt, ...);
663
664char *
665FcConfigSaveField (const char *field);
666
24330d27
KP
667void
668FcTestDestroy (FcTest *test);
669
670FcExpr *
671FcExprCreateInteger (int i);
672
673FcExpr *
674FcExprCreateDouble (double d);
675
676FcExpr *
ccb3e93b 677FcExprCreateString (const FcChar8 *s);
24330d27
KP
678
679FcExpr *
680FcExprCreateMatrix (const FcMatrix *m);
681
682FcExpr *
683FcExprCreateBool (FcBool b);
684
685FcExpr *
686FcExprCreateNil (void);
687
688FcExpr *
689FcExprCreateField (const char *field);
690
691FcExpr *
ccb3e93b 692FcExprCreateConst (const FcChar8 *constant);
24330d27
KP
693
694FcExpr *
695FcExprCreateOp (FcExpr *left, FcOp op, FcExpr *right);
696
697void
698FcExprDestroy (FcExpr *e);
699
24330d27
KP
700void
701FcEditDestroy (FcEdit *e);
702
703/* fcinit.c */
704
705void
706FcMemReport (void);
707
708void
709FcMemAlloc (int kind, int size);
710
711void
712FcMemFree (int kind, int size);
713
82f4243f 714/* fclang.c */
d8d73958
KP
715FcLangSet *
716FcFreeTypeLangSet (const FcCharSet *charset,
e50b9ae7 717 const FcChar8 *exclusiveLang);
82f4243f
KP
718
719FcLangResult
720FcLangCompare (const FcChar8 *s1, const FcChar8 *s2);
721
722const FcCharSet *
723FcCharSetForLang (const FcChar8 *lang);
724
d8d73958
KP
725FcLangSet *
726FcLangSetPromote (const FcChar8 *lang);
727
728FcLangSet *
729FcNameParseLangSet (const FcChar8 *string);
730
731FcBool
732FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls);
733
cd2ec1a9 734void
4262e0b3 735FcLangSetNewBank (void);
cd2ec1a9 736
4262e0b3
PL
737int
738FcLangSetNeededBytes (const FcLangSet *l);
cd2ec1a9 739
7fd7221e
PL
740int
741FcLangSetNeededBytesAlign (void);
742
4262e0b3
PL
743void *
744FcLangSetDistributeBytes (FcCache * metadata,
745 void * block_ptr);
cd2ec1a9
PL
746
747FcLangSet *
4262e0b3 748FcLangSetSerialize (int bank, FcLangSet *l);
cd2ec1a9 749
4262e0b3 750void *
61571f3f 751FcLangSetUnserialize (FcCache * metadata, void *block_ptr);
212c9f43 752
24330d27
KP
753/* fclist.c */
754
4f27c1c0
KP
755FcBool
756FcListPatternMatchAny (const FcPattern *p,
757 const FcPattern *font);
758
24330d27
KP
759/* fcmatch.c */
760
761/* fcname.c */
24330d27
KP
762
763FcBool
ca60d2b5 764FcNameBool (const FcChar8 *v, FcBool *result);
24330d27 765
4262e0b3
PL
766void *
767FcObjectDistributeBytes (FcCache * metadata,
768 void * block_ptr);
769
770FcObjectPtr
771FcObjectToPtr (const char * si);
772
773int
7f37423d
PL
774FcObjectNeededBytes (void);
775
7fd7221e
PL
776int
777FcObjectNeededBytesAlign (void);
778
7f37423d 779void *
61571f3f 780FcObjectUnserialize (FcCache * metadata, void *block_ptr);
4262e0b3
PL
781
782void
7f37423d 783FcObjectSerialize (void);
4262e0b3 784
7f37423d
PL
785const char *
786FcObjectPtrU (FcObjectPtr p);
787
44415a07 788static inline int
9ab79bdf
PL
789FcObjectPtrCompare (const FcObjectPtr a, const FcObjectPtr b)
790{
791 return a - b;
792}
7f37423d
PL
793
794void
795FcObjectStaticNameFini (void);
4262e0b3 796
24330d27 797/* fcpat.c */
4262e0b3
PL
798
799FcValue
800FcValueCanonicalize (const FcValue *v);
801
24330d27 802void
cd2ec1a9
PL
803FcValueListDestroy (FcValueListPtr l);
804
24330d27 805FcPatternElt *
e9be9cd1
KP
806FcPatternFindElt (const FcPattern *p, const char *object);
807
808FcPatternElt *
809FcPatternInsertElt (FcPattern *p, const char *object);
24330d27 810
82f4243f
KP
811FcBool
812FcPatternAddWithBinding (FcPattern *p,
813 const char *object,
814 FcValue value,
815 FcValueBinding binding,
816 FcBool append);
817
34cd0514 818void
e1b9d091 819FcPatternFini (void);
34cd0514 820
4f27c1c0
KP
821FcBool
822FcPatternAppend (FcPattern *p, FcPattern *s);
823
8245771d
PL
824const FcChar8 *
825FcStrStaticName (const FcChar8 *name);
cd2ec1a9 826
7f37423d
PL
827FcChar32
828FcStringHash (const FcChar8 *s);
cd2ec1a9 829
cd2ec1a9 830void
4262e0b3 831FcPatternNewBank (void);
cd2ec1a9 832
4262e0b3
PL
833int
834FcPatternNeededBytes (FcPattern *p);
cd2ec1a9 835
7fd7221e
PL
836int
837FcPatternNeededBytesAlign (void);
838
4262e0b3
PL
839void *
840FcPatternDistributeBytes (FcCache * metadata, void * block_ptr);
cd2ec1a9 841
9ab79bdf
PL
842/* please don't access these outside of fcpat.c! only visible so that
843 * *PtrU can be inlined. */
81fe99fd
PL
844extern FcValueList ** _fcValueLists;
845extern FcPatternElt ** _fcPatternElts;
9ab79bdf 846
44415a07 847static inline FcValueList *
9ab79bdf
PL
848FcValueListPtrU (FcValueListPtr pi)
849{
850 if (pi.bank == FC_BANK_DYNAMIC)
851 return pi.u.dyn;
852
81fe99fd 853 return &_fcValueLists[FcCacheBankToIndex(pi.bank)][pi.u.stat];
9ab79bdf
PL
854}
855
44415a07 856static inline FcPatternElt *
9ab79bdf
PL
857FcPatternEltU (FcPatternEltPtr pei)
858{
859 if (pei.bank == FC_BANK_DYNAMIC)
860 return pei.u.dyn;
861
81fe99fd 862 return &_fcPatternElts[FcCacheBankToIndex(pei.bank)][pei.u.stat];
9ab79bdf 863}
cd2ec1a9 864
cd2ec1a9
PL
865FcValueListPtr
866FcValueListPtrCreateDynamic(FcValueList * p);
867
cd2ec1a9 868FcPattern *
4262e0b3 869FcPatternSerialize (int bank, FcPattern * p);
212c9f43 870
7f37423d 871void *
61571f3f 872FcPatternUnserialize (FcCache * metadata, void *block_ptr);
212c9f43 873
24330d27
KP
874/* fcrender.c */
875
876/* fcmatrix.c */
327a7fd4 877
4262e0b3 878extern const FcMatrix FcIdentityMatrix;
327a7fd4 879
24330d27
KP
880void
881FcMatrixFree (FcMatrix *mat);
882
883/* fcstr.c */
cd2ec1a9
PL
884void
885FcStrSetSort (FcStrSet * set);
886
ccb3e93b
KP
887FcChar8 *
888FcStrPlus (const FcChar8 *s1, const FcChar8 *s2);
24330d27
KP
889
890void
ccb3e93b 891FcStrFree (FcChar8 *s);
24330d27 892
c2e7c611
KP
893void
894FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size);
895
896void
897FcStrBufDestroy (FcStrBuf *buf);
898
899FcChar8 *
900FcStrBufDone (FcStrBuf *buf);
901
902FcBool
903FcStrBufChar (FcStrBuf *buf, FcChar8 c);
904
905FcBool
906FcStrBufString (FcStrBuf *buf, const FcChar8 *s);
907
908FcBool
909FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len);
910
82f4243f
KP
911int
912FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
913
11fec41c
KP
914const FcChar8 *
915FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
916
917const FcChar8 *
918FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
919
ff3f1f98
KP
920FcBool
921FcStrUsesHome (const FcChar8 *s);
922
daeed6e0
TL
923FcChar8 *
924FcStrLastSlash (const FcChar8 *path);
925
192296d8
KP
926FcChar32
927FcStrHashIgnoreCase (const FcChar8 *s);
928
0d9e31c8
KP
929FcChar8 *
930FcStrCanonFilename (const FcChar8 *s);
931
24330d27 932#endif /* _FC_INT_H_ */