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