Bug 27765 - FcMatch() returns style in wrong language
[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 FcBool
546 FcDirCacheCreateTagFile (const FcChar8 *cache_dir);
547
548 FcPrivate void
549 FcCacheObjectReference (void *object);
550
551 FcPrivate void
552 FcCacheObjectDereference (void *object);
553
554 FcPrivate void
555 FcCacheFini (void);
556
557 FcPrivate void
558 FcDirCacheReference (FcCache *cache, int nref);
559
560 FcPrivate int
561 FcStat (const FcChar8 *file, struct stat *statb);
562
563 /* fccfg.c */
564
565 FcPrivate FcExpr *
566 FcConfigAllocExpr (FcConfig *config);
567
568 FcPrivate FcBool
569 FcConfigAddConfigDir (FcConfig      *config,
570                       const FcChar8 *d);
571
572 FcPrivate FcBool
573 FcConfigAddFontDir (FcConfig        *config,
574                     const FcChar8   *d);
575
576 FcPrivate FcBool
577 FcConfigAddDir (FcConfig        *config,
578                 const FcChar8   *d);
579
580 FcPrivate FcBool
581 FcConfigAddCacheDir (FcConfig       *config,
582                      const FcChar8  *d);
583
584 FcPrivate FcBool
585 FcConfigAddConfigFile (FcConfig         *config,
586                        const FcChar8    *f);
587
588 FcPrivate FcBool
589 FcConfigAddBlank (FcConfig      *config,
590                   FcChar32      blank);
591
592 FcPrivate FcBool
593 FcConfigAddEdit (FcConfig       *config,
594                  FcTest         *test,
595                  FcEdit         *edit,
596                  FcMatchKind    kind);
597
598 FcPrivate void
599 FcConfigSetFonts (FcConfig      *config,
600                   FcFontSet     *fonts,
601                   FcSetName     set);
602
603 FcPrivate FcBool
604 FcConfigCompareValue (const FcValue *m,
605                       FcOp          op,
606                       const FcValue *v);
607
608 FcPrivate FcBool
609 FcConfigGlobAdd (FcConfig       *config,
610                  const FcChar8  *glob,
611                  FcBool         accept);
612
613 FcPrivate FcBool
614 FcConfigAcceptFilename (FcConfig        *config,
615                         const FcChar8   *filename);
616
617 FcPrivate FcBool
618 FcConfigPatternsAdd (FcConfig   *config,
619                      FcPattern  *pattern,
620                      FcBool     accept);
621
622 FcPrivate FcBool
623 FcConfigAcceptFont (FcConfig        *config,
624                     const FcPattern *font);
625
626 FcPrivate FcFileTime
627 FcConfigModifiedTime (FcConfig *config);
628
629 FcPrivate FcBool
630 FcConfigAddCache (FcConfig *config, FcCache *cache,
631                   FcSetName set, FcStrSet *dirSet);
632
633 /* fcserialize.c */
634 FcPrivate intptr_t
635 FcAlignSize (intptr_t size);
636
637 FcPrivate FcSerialize *
638 FcSerializeCreate (void);
639
640 FcPrivate void
641 FcSerializeDestroy (FcSerialize *serialize);
642
643 FcPrivate FcBool
644 FcSerializeAlloc (FcSerialize *serialize, const void *object, int size);
645
646 FcPrivate intptr_t
647 FcSerializeReserve (FcSerialize *serialize, int size);
648
649 FcPrivate intptr_t
650 FcSerializeOffset (FcSerialize *serialize, const void *object);
651
652 FcPrivate void *
653 FcSerializePtr (FcSerialize *serialize, const void *object);
654
655 FcPrivate FcBool
656 FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l);
657
658 FcPrivate FcLangSet *
659 FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l);
660
661 /* fccharset.c */
662 FcPrivate void
663 FcLangCharSetPopulate (void);
664
665 FcPrivate FcCharSetFreezer *
666 FcCharSetFreezerCreate (void);
667
668 FcPrivate const FcCharSet *
669 FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs);
670
671 FcPrivate void
672 FcCharSetFreezerDestroy (FcCharSetFreezer *freezer);
673
674 FcPrivate FcBool
675 FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c);
676
677 FcPrivate FcCharSet *
678 FcNameParseCharSet (FcChar8 *string);
679
680 FcPrivate FcBool
681 FcNameUnparseValue (FcStrBuf    *buf,
682                     FcValue     *v0,
683                     FcChar8     *escape);
684
685 FcPrivate FcBool
686 FcNameUnparseValueList (FcStrBuf        *buf,
687                         FcValueListPtr  v,
688                         FcChar8         *escape);
689
690 FcPrivate FcCharLeaf *
691 FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4);
692
693 FcPrivate FcBool
694 FcCharSetSerializeAlloc(FcSerialize *serialize, const FcCharSet *cs);
695
696 FcPrivate FcCharSet *
697 FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs);
698
699 FcPrivate FcChar16 *
700 FcCharSetGetNumbers(const FcCharSet *c);
701
702 /* fcdbg.c */
703 FcPrivate void
704 FcValueListPrint (const FcValueListPtr l);
705
706 FcPrivate void
707 FcLangSetPrint (const FcLangSet *ls);
708
709 FcPrivate void
710 FcOpPrint (FcOp op);
711
712 FcPrivate void
713 FcTestPrint (const FcTest *test);
714
715 FcPrivate void
716 FcExprPrint (const FcExpr *expr);
717
718 FcPrivate void
719 FcEditPrint (const FcEdit *edit);
720
721 FcPrivate void
722 FcSubstPrint (const FcSubst *subst);
723
724 FcPrivate void
725 FcCharSetPrint (const FcCharSet *c);
726
727 extern FcPrivate int FcDebugVal;
728
729 #define FcDebug() (FcDebugVal)
730
731 FcPrivate void
732 FcInitDebug (void);
733
734 /* fcdefault.c */
735 FcPrivate FcChar8 *
736 FcGetDefaultLang (void);
737
738 /* fcdir.c */
739
740 FcPrivate FcBool
741 FcFileScanConfig (FcFontSet     *set,
742                   FcStrSet      *dirs,
743                   FcBlanks      *blanks,
744                   const FcChar8 *file,
745                   FcConfig      *config);
746
747 FcPrivate FcBool
748 FcDirScanConfig (FcFontSet      *set,
749                  FcStrSet       *dirs,
750                  FcBlanks       *blanks,
751                  const FcChar8  *dir,
752                  FcBool         force,
753                  FcConfig       *config);
754
755 /* fcfont.c */
756 FcPrivate int
757 FcFontDebug (void);
758
759 /* fcfs.c */
760
761 FcPrivate FcBool
762 FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s);
763
764 FcPrivate FcFontSet *
765 FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s);
766
767 /* fcxml.c */
768 FcPrivate void
769 FcTestDestroy (FcTest *test);
770
771 FcPrivate void
772 FcEditDestroy (FcEdit *e);
773
774 /* fcinit.c */
775
776 FcPrivate void
777 FcMemReport (void);
778
779 FcPrivate void
780 FcMemAlloc (int kind, int size);
781
782 FcPrivate void
783 FcMemFree (int kind, int size);
784
785 /* fclang.c */
786 FcPrivate FcLangSet *
787 FcFreeTypeLangSet (const FcCharSet  *charset,
788                    const FcChar8    *exclusiveLang);
789
790 FcPrivate FcLangResult
791 FcLangCompare (const FcChar8 *s1, const FcChar8 *s2);
792
793 FcPrivate FcLangSet *
794 FcLangSetPromote (const FcChar8 *lang);
795
796 FcPrivate FcLangSet *
797 FcNameParseLangSet (const FcChar8 *string);
798
799 FcPrivate FcBool
800 FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls);
801
802 FcPrivate FcChar8 *
803 FcNameUnparseEscaped (FcPattern *pat, FcBool escape);
804
805 /* fclist.c */
806
807 FcPrivate FcBool
808 FcListPatternMatchAny (const FcPattern *p,
809                        const FcPattern *font);
810
811 /* fcmatch.c */
812
813 /* fcname.c */
814
815 /*
816  * NOTE -- this ordering is part of the cache file format.
817  * It must also match the ordering in fcname.c
818  */
819
820 #define FC_FAMILY_OBJECT        1
821 #define FC_FAMILYLANG_OBJECT    2
822 #define FC_STYLE_OBJECT         3
823 #define FC_STYLELANG_OBJECT     4
824 #define FC_FULLNAME_OBJECT      5
825 #define FC_FULLNAMELANG_OBJECT  6
826 #define FC_SLANT_OBJECT         7
827 #define FC_WEIGHT_OBJECT        8
828 #define FC_WIDTH_OBJECT         9
829 #define FC_SIZE_OBJECT          10
830 #define FC_ASPECT_OBJECT        11
831 #define FC_PIXEL_SIZE_OBJECT    12
832 #define FC_SPACING_OBJECT       13
833 #define FC_FOUNDRY_OBJECT       14
834 #define FC_ANTIALIAS_OBJECT     15
835 #define FC_HINT_STYLE_OBJECT    16
836 #define FC_HINTING_OBJECT       17
837 #define FC_VERTICAL_LAYOUT_OBJECT       18
838 #define FC_AUTOHINT_OBJECT      19
839 #define FC_GLOBAL_ADVANCE_OBJECT        20
840 #define FC_FILE_OBJECT          21
841 #define FC_INDEX_OBJECT         22
842 #define FC_RASTERIZER_OBJECT    23
843 #define FC_OUTLINE_OBJECT       24
844 #define FC_SCALABLE_OBJECT      25
845 #define FC_DPI_OBJECT           26
846 #define FC_RGBA_OBJECT          27
847 #define FC_SCALE_OBJECT         28
848 #define FC_MINSPACE_OBJECT      29
849 #define FC_CHAR_WIDTH_OBJECT    30
850 #define FC_CHAR_HEIGHT_OBJECT   31
851 #define FC_MATRIX_OBJECT        32
852 #define FC_CHARSET_OBJECT       33
853 #define FC_LANG_OBJECT          34
854 #define FC_FONTVERSION_OBJECT   35
855 #define FC_CAPABILITY_OBJECT    36
856 #define FC_FONTFORMAT_OBJECT    37
857 #define FC_EMBOLDEN_OBJECT      38
858 #define FC_EMBEDDED_BITMAP_OBJECT       39
859 #define FC_DECORATIVE_OBJECT    40
860 #define FC_LCD_FILTER_OBJECT    41
861 #define FC_NAMELANG_OBJECT      42
862 #define FC_MAX_BASE_OBJECT      FC_NAMELANG_OBJECT
863
864 FcPrivate FcBool
865 FcNameBool (const FcChar8 *v, FcBool *result);
866
867 FcPrivate FcBool
868 FcObjectValidType (FcObject object, FcType type);
869
870 FcPrivate FcObject
871 FcObjectFromName (const char * name);
872
873 FcPrivate const char *
874 FcObjectName (FcObject object);
875
876 FcPrivate FcObjectSet *
877 FcObjectGetSet (void);
878
879 FcPrivate FcBool
880 FcObjectInit (void);
881
882 FcPrivate void
883 FcObjectFini (void);
884
885 #define FcObjectCompare(a, b)   ((int) a - (int) b)
886
887 /* fcpat.c */
888
889 FcPrivate FcValue
890 FcValueCanonicalize (const FcValue *v);
891
892 FcPrivate void
893 FcValueListDestroy (FcValueListPtr l);
894
895 FcPrivate FcPatternElt *
896 FcPatternObjectFindElt (const FcPattern *p, FcObject object);
897
898 FcPrivate FcPatternElt *
899 FcPatternObjectInsertElt (FcPattern *p, FcObject object);
900
901 FcPrivate FcBool
902 FcPatternObjectAddWithBinding  (FcPattern       *p,
903                                 FcObject        object,
904                                 FcValue         value,
905                                 FcValueBinding  binding,
906                                 FcBool          append);
907
908 FcPrivate FcBool
909 FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append);
910
911 FcPrivate FcBool
912 FcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append);
913
914 FcPrivate FcResult
915 FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v);
916
917 FcPrivate FcBool
918 FcPatternObjectDel (FcPattern *p, FcObject object);
919
920 FcPrivate FcBool
921 FcPatternObjectRemove (FcPattern *p, FcObject object, int id);
922
923 FcPrivate FcBool
924 FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i);
925
926 FcPrivate FcBool
927 FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d);
928
929 FcPrivate FcBool
930 FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s);
931
932 FcPrivate FcBool
933 FcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s);
934
935 FcPrivate FcBool
936 FcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c);
937
938 FcPrivate FcBool
939 FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b);
940
941 FcPrivate FcBool
942 FcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls);
943
944 FcPrivate FcResult
945 FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i);
946
947 FcPrivate FcResult
948 FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d);
949
950 FcPrivate FcResult
951 FcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 ** s);
952
953 FcPrivate FcResult
954 FcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s);
955
956 FcPrivate FcResult
957 FcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c);
958
959 FcPrivate FcResult
960 FcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b);
961
962 FcPrivate FcResult
963 FcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls);
964
965 FcPrivate FcBool
966 FcPatternAppend (FcPattern *p, FcPattern *s);
967
968 FcPrivate const FcChar8 *
969 FcSharedStr (const FcChar8 *name);
970
971 FcPrivate FcBool
972 FcSharedStrFree (const FcChar8 *name);
973
974 FcPrivate FcChar32
975 FcStringHash (const FcChar8 *s);
976
977 FcPrivate FcBool
978 FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat);
979
980 FcPrivate FcPattern *
981 FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat);
982
983 FcPrivate FcBool
984 FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat);
985
986 FcPrivate FcValueList *
987 FcValueListSerialize (FcSerialize *serialize, const FcValueList *pat);
988
989 /* fcrender.c */
990
991 /* fcmatrix.c */
992
993 extern FcPrivate const FcMatrix    FcIdentityMatrix;
994
995 FcPrivate void
996 FcMatrixFree (FcMatrix *mat);
997
998 /* fcstr.c */
999 FcPrivate void
1000 FcStrSetSort (FcStrSet * set);
1001
1002 FcPrivate void
1003 FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size);
1004
1005 FcPrivate void
1006 FcStrBufDestroy (FcStrBuf *buf);
1007
1008 FcPrivate FcChar8 *
1009 FcStrBufDone (FcStrBuf *buf);
1010
1011 FcPrivate FcChar8 *
1012 FcStrBufDoneStatic (FcStrBuf *buf);
1013
1014 FcPrivate FcBool
1015 FcStrBufChar (FcStrBuf *buf, FcChar8 c);
1016
1017 FcPrivate FcBool
1018 FcStrBufString (FcStrBuf *buf, const FcChar8 *s);
1019
1020 FcPrivate FcBool
1021 FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len);
1022
1023 FcPrivate int
1024 FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
1025
1026 FcPrivate FcBool
1027 FcStrRegexCmp (const FcChar8 *s, const FcChar8 *regex);
1028
1029 FcPrivate FcBool
1030 FcStrRegexCmpIgnoreCase (const FcChar8 *s, const FcChar8 *regex);
1031
1032 FcPrivate const FcChar8 *
1033 FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
1034
1035 FcPrivate const FcChar8 *
1036 FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
1037
1038 FcPrivate const FcChar8 *
1039 FcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2);
1040
1041 FcPrivate FcBool
1042 FcStrUsesHome (const FcChar8 *s);
1043
1044 FcPrivate FcChar8 *
1045 FcStrLastSlash (const FcChar8  *path);
1046
1047 FcPrivate FcChar32
1048 FcStrHashIgnoreCase (const FcChar8 *s);
1049
1050 FcPrivate FcChar8 *
1051 FcStrCanonFilename (const FcChar8 *s);
1052
1053 FcPrivate FcBool
1054 FcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str);
1055
1056 FcPrivate FcChar8 *
1057 FcStrSerialize (FcSerialize *serialize, const FcChar8 *str);
1058
1059 #endif /* _FC_INT_H_ */