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