2 * fontconfig/src/fcint.h
4 * Copyright © 2000 Keith Packard
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.
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.
41 #include <sys/types.h>
44 #include <fontconfig/fontconfig.h>
45 #include <fontconfig/fcprivate.h>
46 #include "fcdeprecate.h"
48 #ifndef FC_CONFIG_PATH
49 #define FC_CONFIG_PATH "fonts.conf"
54 # define _WIN32_WINNT 0x0500
56 # define WIN32_LEAN_AND_MEAN
59 typedef UINT (WINAPI *pfnGetSystemWindowsDirectory)(LPSTR, UINT);
60 typedef HRESULT (WINAPI *pfnSHGetFolderPathA)(HWND, int, HANDLE, DWORD, LPSTR);
61 extern pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory;
62 extern pfnSHGetFolderPathA pSHGetFolderPathA;
63 # define FC_SEARCH_PATH_SEPARATOR ';'
64 # define FC_DIR_SEPARATOR '\\'
65 # define FC_DIR_SEPARATOR_S "\\"
67 # define FC_SEARCH_PATH_SEPARATOR ':'
68 # define FC_DIR_SEPARATOR '/'
69 # define FC_DIR_SEPARATOR_S "/"
73 #define FC_UNUSED __attribute__((unused))
78 #define FC_DBG_MATCH 1
79 #define FC_DBG_MATCHV 2
81 #define FC_DBG_FONTSET 8
82 #define FC_DBG_CACHE 16
83 #define FC_DBG_CACHEV 32
84 #define FC_DBG_PARSE 64
85 #define FC_DBG_SCAN 128
86 #define FC_DBG_SCANV 256
87 #define FC_DBG_MEMORY 512
88 #define FC_DBG_CONFIG 1024
89 #define FC_DBG_LANGSET 2048
90 #define FC_DBG_OBJTYPES 4096
92 #define FC_MEM_CHARSET 0
93 #define FC_MEM_CHARLEAF 1
94 #define FC_MEM_FONTSET 2
95 #define FC_MEM_FONTPTR 3
96 #define FC_MEM_OBJECTSET 4
97 #define FC_MEM_OBJECTPTR 5
98 #define FC_MEM_MATRIX 6
99 #define FC_MEM_PATTERN 7
100 #define FC_MEM_PATELT 8
101 #define FC_MEM_VALLIST 9
102 #define FC_MEM_SUBSTATE 10
103 #define FC_MEM_STRING 11
104 #define FC_MEM_LISTBUCK 12
105 #define FC_MEM_STRSET 13
106 #define FC_MEM_STRLIST 14
107 #define FC_MEM_CONFIG 15
108 #define FC_MEM_LANGSET 16
109 #define FC_MEM_ATOMIC 17
110 #define FC_MEM_BLANKS 18
111 #define FC_MEM_CACHE 19
112 #define FC_MEM_STRBUF 20
113 #define FC_MEM_SUBST 21
114 #define FC_MEM_OBJECTTYPE 22
115 #define FC_MEM_CONSTANT 23
116 #define FC_MEM_TEST 24
117 #define FC_MEM_EXPR 25
118 #define FC_MEM_VSTACK 26
119 #define FC_MEM_ATTR 27
120 #define FC_MEM_PSTACK 28
121 #define FC_MEM_SHAREDSTR 29
123 #define FC_MEM_NUM 30
125 #define _FC_ASSERT_STATIC1(_line, _cond) typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1]
126 #define _FC_ASSERT_STATIC0(_line, _cond) _FC_ASSERT_STATIC1 (_line, (_cond))
127 #define FC_ASSERT_STATIC(_cond) _FC_ASSERT_STATIC0 (__LINE__, (_cond))
129 #define FC_MIN(a,b) ((a) < (b) ? (a) : (b))
130 #define FC_MAX(a,b) ((a) > (b) ? (a) : (b))
131 #define FC_ABS(a) ((a) < 0 ? -(a) : (a))
133 /* slim_internal.h */
134 #if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun)
135 #define FcPrivate __attribute__((__visibility__("hidden")))
136 #define HAVE_GNUC_ATTRIBUTE 1
138 #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
139 #define FcPrivate __hidden
140 #else /* not gcc >= 3.3 and not Sun Studio >= 8 */
144 typedef enum _FcValueBinding {
145 FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame
149 * Serialized data structures use only offsets instead of pointers
150 * A low bit of 1 indicates an offset.
153 /* Is the provided pointer actually an offset? */
154 #define FcIsEncodedOffset(p) ((((intptr_t) (p)) & 1) != 0)
156 /* Encode offset in a pointer of type t */
157 #define FcOffsetEncode(o,t) ((t *) ((o) | 1))
159 /* Decode a pointer into an offset */
160 #define FcOffsetDecode(p) (((intptr_t) (p)) & ~1)
162 /* Compute pointer offset */
163 #define FcPtrToOffset(b,p) ((intptr_t) (p) - (intptr_t) (b))
165 /* Given base address, offset and type, return a pointer */
166 #define FcOffsetToPtr(b,o,t) ((t *) ((intptr_t) (b) + (o)))
168 /* Given base address, encoded offset and type, return a pointer */
169 #define FcEncodedOffsetToPtr(b,p,t) FcOffsetToPtr(b,FcOffsetDecode(p),t)
171 /* Given base address, pointer and type, return an encoded offset */
172 #define FcPtrToEncodedOffset(b,p,t) FcOffsetEncode(FcPtrToOffset(b,p),t)
174 /* Given a structure, offset member and type, return pointer */
175 #define FcOffsetMember(s,m,t) FcOffsetToPtr(s,(s)->m,t)
177 /* Given a structure, encoded offset member and type, return pointer to member */
178 #define FcEncodedOffsetMember(s,m,t) FcOffsetToPtr(s,FcOffsetDecode((s)->m), t)
180 /* Given a structure, member and type, convert the member to a pointer */
181 #define FcPointerMember(s,m,t) (FcIsEncodedOffset((s)->m) ? \
182 FcEncodedOffsetMember (s,m,t) : \
186 * Serialized values may hold strings, charsets and langsets as pointers,
187 * unfortunately FcValue is an exposed type so we can't just always use
190 #define FcValueString(v) FcPointerMember(v,u.s,FcChar8)
191 #define FcValueCharSet(v) FcPointerMember(v,u.c,const FcCharSet)
192 #define FcValueLangSet(v) FcPointerMember(v,u.l,const FcLangSet)
194 typedef struct _FcValueList *FcValueListPtr;
196 typedef struct _FcValueList {
197 struct _FcValueList *next;
199 FcValueBinding binding;
202 #define FcValueListNext(vl) FcPointerMember(vl,next,FcValueList)
204 typedef int FcObject;
206 typedef struct _FcPatternElt *FcPatternEltPtr;
209 * Pattern elts are stuck in a structure connected to the pattern,
210 * so they get moved around when the pattern is resized. Hence, the
211 * values field must be a pointer/offset instead of just an offset
213 typedef struct _FcPatternElt {
218 #define FcPatternEltValues(pe) FcPointerMember(pe,values,FcValueList)
223 intptr_t elts_offset;
227 #define FcPatternElts(p) FcOffsetMember(p,elts_offset,FcPatternElt)
229 #define FcFontSetFonts(fs) FcPointerMember(fs,fonts,FcPattern *)
231 #define FcFontSetFont(fs,i) (FcIsEncodedOffset((fs)->fonts) ? \
232 FcEncodedOffsetToPtr(fs, \
233 FcFontSetFonts(fs)[i], \
238 FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpRange, FcOpBool, FcOpCharSet, FcOpLangSet,
240 FcOpField, FcOpConst,
241 FcOpAssign, FcOpAssignReplace,
242 FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast,
244 FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual,
245 FcOpContains, FcOpListing, FcOpNotContains,
246 FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual,
247 FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide,
248 FcOpNot, FcOpComma, FcOpFloor, FcOpCeil, FcOpRound, FcOpTrunc,
252 typedef enum _FcOpFlags {
253 FcOpFlagIgnoreBlanks = 1 << 0
256 #define FC_OP_GET_OP(_x_) ((_x_) & 0xffff)
257 #define FC_OP_GET_FLAGS(_x_) (((_x_) & 0xffff0000) >> 16)
258 #define FC_OP(_x_,_f_) (FC_OP_GET_OP (_x_) | ((_f_) << 16))
260 typedef struct _FcExprMatrix {
261 struct _FcExpr *xx, *xy, *yx, *yy;
264 typedef struct _FcExpr {
275 const FcChar8 *constant;
277 struct _FcExpr *left, *right;
282 typedef struct _FcExprPage FcExprPage;
285 FcExprPage *next_page;
287 FcExpr exprs[(1024 - 2/* two pointers */ - 2/* malloc overhead */) * sizeof (void *) / sizeof (FcExpr)];
288 FcExpr end[FLEXIBLE_ARRAY_MEMBER];
291 typedef enum _FcQual {
292 FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst
295 #define FcMatchDefault ((FcMatchKind) -1)
297 typedef struct _FcTest {
298 struct _FcTest *next;
306 typedef struct _FcEdit {
307 struct _FcEdit *next;
311 FcValueBinding binding;
314 typedef struct _FcSubst {
315 struct _FcSubst *next;
320 typedef struct _FcCharLeaf {
321 FcChar32 map[256/32];
324 #define FC_REF_CONSTANT -1
327 int ref; /* reference count */
328 int num; /* size of leaves and numbers arrays */
329 intptr_t leaves_offset;
330 intptr_t numbers_offset;
333 #define FcCharSetLeaves(c) FcOffsetMember(c,leaves_offset,intptr_t)
334 #define FcCharSetLeaf(c,i) (FcOffsetToPtr(FcCharSetLeaves(c), \
335 FcCharSetLeaves(c)[i], \
337 #define FcCharSetNumbers(c) FcOffsetMember(c,numbers_offset,FcChar16)
340 int ref; /* reference count */
351 typedef struct _FcStrBuf {
357 FcChar8 buf_static[16 * sizeof (void *)];
361 unsigned int magic; /* FC_CACHE_MAGIC_MMAP or FC_CACHE_ALLOC */
362 int version; /* FC_CACHE_CONTENT_VERSION */
363 intptr_t size; /* size of file */
364 intptr_t dir; /* offset to dir name */
365 intptr_t dirs; /* offset to subdirs */
366 int dirs_count; /* number of subdir strings */
367 intptr_t set; /* offset to font set */
368 int checksum; /* checksum of directory state */
373 #define FcCacheDir(c) FcOffsetMember(c,dir,FcChar8)
374 #define FcCacheDirs(c) FcOffsetMember(c,dirs,intptr_t)
375 #define FcCacheSet(c) FcOffsetMember(c,set,FcFontSet)
376 #define FcCacheSubdir(c,i) FcOffsetToPtr (FcCacheDirs(c),\
381 * Used while constructing a directory cache object
384 #define FC_SERIALIZE_HASH_SIZE 8191
386 typedef union _FcAlign {
394 typedef struct _FcSerializeBucket {
395 struct _FcSerializeBucket *next;
400 typedef struct _FcCharSetFreezer FcCharSetFreezer;
402 typedef struct _FcSerialize {
404 FcCharSetFreezer *cs_freezer;
406 FcSerializeBucket *buckets[FC_SERIALIZE_HASH_SIZE];
410 * To map adobe glyph names to unicode values, a precomputed hash
414 typedef struct _FcGlyphName {
415 FcChar32 ucs; /* unicode value */
416 FcChar8 name[1]; /* name extends beyond struct */
420 * To perform case-insensitive string comparisons, a table
421 * is used which holds three different kinds of folding data.
423 * The first is a range of upper case values mapping to a range
424 * of their lower case equivalents. Within each range, the offset
425 * between upper and lower case is constant.
427 * The second is a range of upper case values which are interleaved
428 * with their lower case equivalents.
430 * The third is a set of raw unicode values mapping to a list
431 * of unicode values for comparison purposes. This allows conversion
432 * of ß to "ss" so that SS, ss and ß all match. A separate array
433 * holds the list of unicode values for each entry.
435 * These are packed into a single table. Using a binary search,
436 * the appropriate entry can be located.
439 #define FC_CASE_FOLD_RANGE 0
440 #define FC_CASE_FOLD_EVEN_ODD 1
441 #define FC_CASE_FOLD_FULL 2
443 typedef struct _FcCaseFold {
447 short offset; /* lower - upper for RANGE, table id for FULL */
450 #define FC_MAX_FILE_LEN 4096
452 #define FC_CACHE_MAGIC_MMAP 0xFC02FC04
453 #define FC_CACHE_MAGIC_ALLOC 0xFC02FC05
454 #define FC_CACHE_CONTENT_VERSION 3
457 FcChar8 *file; /* original file name */
458 FcChar8 *new; /* temp file name -- write data here */
459 FcChar8 *lck; /* lockfile name (used for locking) */
460 FcChar8 *tmp; /* tmpfile name (used for locking) */
471 * File names loaded from the configuration -- saved here as the
472 * cache file must be consulted before the directories are scanned,
473 * and those directives may occur in any order
475 FcStrSet *configDirs; /* directories to scan for fonts */
477 * Set of allowed blank chars -- used to
478 * trim fonts of bogus glyphs
482 * List of directories containing fonts,
483 * built by recursively scanning the set
484 * of configured directories
488 * List of directories containing cache files.
492 * Names of all of the configuration files used
493 * to create this configuration
495 FcStrSet *configFiles; /* config files loaded */
497 * Substitution instructions for patterns and fonts;
498 * maxObjects is used to allocate appropriate intermediate storage
499 * while performing a whole set of substitutions
501 FcSubst *substPattern; /* substitutions for patterns */
502 FcSubst *substFont; /* substitutions for fonts */
503 FcSubst *substScan; /* substitutions for scanned fonts */
504 int maxObjects; /* maximum number of tests in all substs */
506 * List of patterns used to control font file selection
508 FcStrSet *acceptGlobs;
509 FcStrSet *rejectGlobs;
510 FcFontSet *acceptPatterns;
511 FcFontSet *rejectPatterns;
513 * The set of fonts loaded from the listed directories; the
514 * order within the set does not determine the font selection,
515 * except in the case of identical matches in which case earlier fonts
516 * match preferrentially
518 FcFontSet *fonts[FcSetApplication + 1];
520 * Fontconfig can periodically rescan the system configuration
521 * and font directories. This rescanning occurs when font
522 * listing requests are made, but no more often than rescanInterval
525 time_t rescanTime; /* last time information was scanned */
526 int rescanInterval; /* interval between scans */
528 int ref; /* reference count */
530 FcExprPage *expr_pool; /* pool of FcExpr's */
533 extern FcPrivate FcConfig *_fcConfig;
535 typedef struct _FcFileTime {
540 typedef struct _FcCharMap FcCharMap;
542 typedef struct _FcRange FcRange;
549 typedef struct _FcStatFS FcStatFS;
553 FcBool is_mtime_broken;
561 FcDirCacheScan (const FcChar8 *dir, FcConfig *config);
564 FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs);
567 FcDirCacheWrite (FcCache *cache, FcConfig *config);
570 FcDirCacheCreateTagFile (const FcChar8 *cache_dir);
573 FcCacheObjectReference (void *object);
576 FcCacheObjectDereference (void *object);
582 FcDirCacheReference (FcCache *cache, int nref);
587 FcConfigXdgCacheHome (void);
590 FcConfigXdgConfigHome (void);
593 FcConfigXdgDataHome (void);
596 FcConfigAllocExpr (FcConfig *config);
599 FcConfigAddConfigDir (FcConfig *config,
603 FcConfigAddFontDir (FcConfig *config,
607 FcConfigAddDir (FcConfig *config,
611 FcConfigAddCacheDir (FcConfig *config,
615 FcConfigAddConfigFile (FcConfig *config,
619 FcConfigAddBlank (FcConfig *config,
623 FcConfigAddEdit (FcConfig *config,
629 FcConfigSetFonts (FcConfig *config,
634 FcConfigCompareValue (const FcValue *m,
639 FcConfigGlobAdd (FcConfig *config,
644 FcConfigAcceptFilename (FcConfig *config,
645 const FcChar8 *filename);
648 FcConfigPatternsAdd (FcConfig *config,
653 FcConfigAcceptFont (FcConfig *config,
654 const FcPattern *font);
657 FcConfigModifiedTime (FcConfig *config);
660 FcConfigAddCache (FcConfig *config, FcCache *cache,
661 FcSetName set, FcStrSet *dirSet);
665 FcAlignSize (intptr_t size);
667 FcPrivate FcSerialize *
668 FcSerializeCreate (void);
671 FcSerializeDestroy (FcSerialize *serialize);
674 FcSerializeAlloc (FcSerialize *serialize, const void *object, int size);
677 FcSerializeReserve (FcSerialize *serialize, int size);
680 FcSerializeOffset (FcSerialize *serialize, const void *object);
683 FcSerializePtr (FcSerialize *serialize, const void *object);
686 FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l);
688 FcPrivate FcLangSet *
689 FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l);
693 FcLangCharSetPopulate (void);
695 FcPrivate FcCharSetFreezer *
696 FcCharSetFreezerCreate (void);
698 FcPrivate const FcCharSet *
699 FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs);
702 FcCharSetFreezerDestroy (FcCharSetFreezer *freezer);
705 FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c);
707 FcPrivate FcCharSet *
708 FcNameParseCharSet (FcChar8 *string);
711 FcNameUnparseValue (FcStrBuf *buf,
716 FcNameUnparseValueList (FcStrBuf *buf,
720 FcPrivate FcCharLeaf *
721 FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4);
724 FcCharSetSerializeAlloc(FcSerialize *serialize, const FcCharSet *cs);
726 FcPrivate FcCharSet *
727 FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs);
730 FcCharSetGetNumbers(const FcCharSet *c);
734 FcValuePrintWithPosition (const FcValue v, FcBool show_pos_mark);
737 FcValueListPrintWithPosition (FcValueListPtr l, const FcValueListPtr pos);
740 FcValueListPrint (FcValueListPtr l);
743 FcLangSetPrint (const FcLangSet *ls);
749 FcTestPrint (const FcTest *test);
752 FcExprPrint (const FcExpr *expr);
755 FcEditPrint (const FcEdit *edit);
758 FcSubstPrint (const FcSubst *subst);
761 FcCharSetPrint (const FcCharSet *c);
763 extern FcPrivate int FcDebugVal;
765 #define FcDebug() (FcDebugVal)
772 FcGetDefaultLang (void);
777 FcFileIsLink (const FcChar8 *file);
780 FcFileScanConfig (FcFontSet *set,
787 FcDirScanConfig (FcFontSet *set,
801 FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s);
803 FcPrivate FcFontSet *
804 FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s);
808 FcTestDestroy (FcTest *test);
811 FcEditDestroy (FcEdit *e);
819 FcMemAlloc (int kind, int size);
822 FcMemFree (int kind, int size);
825 FcPrivate FcLangSet *
826 FcFreeTypeLangSet (const FcCharSet *charset,
827 const FcChar8 *exclusiveLang);
830 FcLangNormalize (const FcChar8 *lang);
832 FcPrivate FcLangResult
833 FcLangCompare (const FcChar8 *s1, const FcChar8 *s2);
835 FcPrivate FcLangSet *
836 FcLangSetPromote (const FcChar8 *lang);
838 FcPrivate FcLangSet *
839 FcNameParseLangSet (const FcChar8 *string);
842 FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls);
845 FcNameUnparseEscaped (FcPattern *pat, FcBool escape);
850 FcListPatternMatchAny (const FcPattern *p,
851 const FcPattern *font);
858 * NOTE -- this ordering is part of the cache file format.
859 * It must also match the ordering in fcname.c
862 #define FC_FAMILY_OBJECT 1
863 #define FC_FAMILYLANG_OBJECT 2
864 #define FC_STYLE_OBJECT 3
865 #define FC_STYLELANG_OBJECT 4
866 #define FC_FULLNAME_OBJECT 5
867 #define FC_FULLNAMELANG_OBJECT 6
868 #define FC_SLANT_OBJECT 7
869 #define FC_WEIGHT_OBJECT 8
870 #define FC_WIDTH_OBJECT 9
871 #define FC_SIZE_OBJECT 10
872 #define FC_ASPECT_OBJECT 11
873 #define FC_PIXEL_SIZE_OBJECT 12
874 #define FC_SPACING_OBJECT 13
875 #define FC_FOUNDRY_OBJECT 14
876 #define FC_ANTIALIAS_OBJECT 15
877 #define FC_HINT_STYLE_OBJECT 16
878 #define FC_HINTING_OBJECT 17
879 #define FC_VERTICAL_LAYOUT_OBJECT 18
880 #define FC_AUTOHINT_OBJECT 19
881 #define FC_GLOBAL_ADVANCE_OBJECT 20 /* deprecated */
882 #define FC_FILE_OBJECT 21
883 #define FC_INDEX_OBJECT 22
884 #define FC_RASTERIZER_OBJECT 23
885 #define FC_OUTLINE_OBJECT 24
886 #define FC_SCALABLE_OBJECT 25
887 #define FC_DPI_OBJECT 26
888 #define FC_RGBA_OBJECT 27
889 #define FC_SCALE_OBJECT 28
890 #define FC_MINSPACE_OBJECT 29
891 #define FC_CHAR_WIDTH_OBJECT 30
892 #define FC_CHAR_HEIGHT_OBJECT 31
893 #define FC_MATRIX_OBJECT 32
894 #define FC_CHARSET_OBJECT 33
895 #define FC_LANG_OBJECT 34
896 #define FC_FONTVERSION_OBJECT 35
897 #define FC_CAPABILITY_OBJECT 36
898 #define FC_FONTFORMAT_OBJECT 37
899 #define FC_EMBOLDEN_OBJECT 38
900 #define FC_EMBEDDED_BITMAP_OBJECT 39
901 #define FC_DECORATIVE_OBJECT 40
902 #define FC_LCD_FILTER_OBJECT 41
903 #define FC_NAMELANG_OBJECT 42
904 #define FC_MAX_BASE_OBJECT FC_NAMELANG_OBJECT
907 FcNameBool (const FcChar8 *v, FcBool *result);
910 FcObjectValidType (FcObject object, FcType type);
913 FcObjectFromName (const char * name);
915 FcPrivate const char *
916 FcObjectName (FcObject object);
918 FcPrivate FcObjectSet *
919 FcObjectGetSet (void);
927 #define FcObjectCompare(a, b) ((int) a - (int) b)
932 FcValueCanonicalize (const FcValue *v);
934 FcPrivate FcValueListPtr
935 FcValueListCreate (void);
938 FcValueListDestroy (FcValueListPtr l);
940 FcPrivate FcValueListPtr
941 FcValueListPrepend (FcValueListPtr vallist,
943 FcValueBinding binding);
945 FcPrivate FcValueListPtr
946 FcValueListAppend (FcValueListPtr vallist,
948 FcValueBinding binding);
950 FcPrivate FcValueListPtr
951 FcValueListDuplicate(FcValueListPtr orig);
953 FcPrivate FcPatternElt *
954 FcPatternObjectFindElt (const FcPattern *p, FcObject object);
956 FcPrivate FcPatternElt *
957 FcPatternObjectInsertElt (FcPattern *p, FcObject object);
960 FcPatternObjectListAdd (FcPattern *p,
966 FcPatternObjectAddWithBinding (FcPattern *p,
969 FcValueBinding binding,
973 FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append);
976 FcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append);
979 FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v);
982 FcPatternObjectDel (FcPattern *p, FcObject object);
985 FcPatternObjectRemove (FcPattern *p, FcObject object, int id);
988 FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i);
991 FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d);
994 FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s);
997 FcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s);
1000 FcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c);
1003 FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b);
1006 FcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls);
1009 FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i);
1012 FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d);
1015 FcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 ** s);
1018 FcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s);
1021 FcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c);
1024 FcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b);
1027 FcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls);
1030 FcPatternAppend (FcPattern *p, FcPattern *s);
1032 FcPrivate const FcChar8 *
1033 FcSharedStr (const FcChar8 *name);
1036 FcSharedStrFree (const FcChar8 *name);
1039 FcStringHash (const FcChar8 *s);
1042 FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat);
1044 FcPrivate FcPattern *
1045 FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat);
1048 FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat);
1050 FcPrivate FcValueList *
1051 FcValueListSerialize (FcSerialize *serialize, const FcValueList *pat);
1057 extern FcPrivate const FcMatrix FcIdentityMatrix;
1060 FcMatrixFree (FcMatrix *mat);
1065 FcStat (const FcChar8 *file, struct stat *statb);
1068 FcStatChecksum (const FcChar8 *file, struct stat *statb);
1071 FcIsFsMmapSafe (int fd);
1074 FcIsFsMtimeBroken (const FcChar8 *dir);
1078 FcStrSetAddLangs (FcStrSet *strs, const char *languages);
1081 FcStrSetSort (FcStrSet * set);
1084 FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size);
1087 FcStrBufDestroy (FcStrBuf *buf);
1090 FcStrBufDone (FcStrBuf *buf);
1093 FcStrBufDoneStatic (FcStrBuf *buf);
1096 FcStrBufChar (FcStrBuf *buf, FcChar8 c);
1099 FcStrBufString (FcStrBuf *buf, const FcChar8 *s);
1102 FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len);
1105 FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
1108 FcStrRegexCmp (const FcChar8 *s, const FcChar8 *regex);
1111 FcStrRegexCmpIgnoreCase (const FcChar8 *s, const FcChar8 *regex);
1113 FcPrivate const FcChar8 *
1114 FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
1116 FcPrivate const FcChar8 *
1117 FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
1119 FcPrivate const FcChar8 *
1120 FcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2);
1123 FcStrUsesHome (const FcChar8 *s);
1126 FcStrLastSlash (const FcChar8 *path);
1129 FcStrHashIgnoreCase (const FcChar8 *s);
1132 FcStrCanonFilename (const FcChar8 *s);
1135 FcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str);
1138 FcStrSerialize (FcSerialize *serialize, const FcChar8 *str);
1140 #endif /* _FC_INT_H_ */