X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=src%2Ffcint.h;h=96de69591f4f548d2562e309457867d2c1e42a0b;hb=2d3387fd720f33f80847ae6cbb83d94c9a52fde3;hp=529548c20eb47e49e4a6065dc7881418872a00f1;hpb=4262e0b3853bc2153270eb33d09a063f852f3f90;p=fontconfig.git diff --git a/src/fcint.h b/src/fcint.h index 529548c..96de695 100644 --- a/src/fcint.h +++ b/src/fcint.h @@ -25,8 +25,19 @@ #ifndef _FCINT_H_ #define _FCINT_H_ +#ifdef HAVE_CONFIG_H +#include +#endif + #include #include +#ifdef HAVE_INTTYPES_H +#include +#elif defined(HAVE_STDINT_H) +#include +#else +#error missing C99 integer data types +#endif #include #include #include @@ -37,15 +48,6 @@ #include #include #include -#ifdef HAVE_CONFIG_H -#include -#endif - -/* unused */ -typedef struct _FcSymbolic { - const char *name; - int value; -} FcSymbolic; #ifndef FC_CONFIG_PATH #define FC_CONFIG_PATH "fonts.conf" @@ -53,6 +55,7 @@ typedef struct _FcSymbolic { #define FC_FONT_FILE_INVALID ((FcChar8 *) ".") #define FC_FONT_FILE_DIR ((FcChar8 *) ".dir") +#define FC_GLOBAL_MAGIC_COOKIE "GLOBAL" #ifdef _WIN32 #define FC_SEARCH_PATH_SEPARATOR ';' @@ -71,6 +74,7 @@ typedef struct _FcSymbolic { #define FC_DBG_SCANV 256 #define FC_DBG_MEMORY 512 #define FC_DBG_CONFIG 1024 +#define FC_DBG_LANGSET 2048 #define FC_MEM_CHARSET 0 #define FC_MEM_CHARLEAF 1 @@ -105,48 +109,103 @@ typedef struct _FcSymbolic { #define FC_MEM_NUM 30 +#define FC_BANK_DYNAMIC 0 +#define FC_BANK_FIRST 1 +#define FC_BANK_LANGS 0xfcfcfcfc + typedef enum _FcValueBinding { FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame } FcValueBinding; -typedef struct _FcValueListPtr { - int bank; - union { - int stat; - struct _FcValueList *dyn; - } u; -} FcValueListPtr; +/* + * Serialized data structures use only offsets instead of pointers + * A low bit of 1 indicates an offset. + */ + +/* Is the provided pointer actually an offset? */ +#define FcIsEncodedOffset(p) ((((intptr_t) (p)) & 1) != 0) -typedef struct _FcValueList { - FcValueListPtr next; +/* Encode offset in a pointer of type t */ +#define FcOffsetEncode(o,t) ((t *) ((o) | 1)) + +/* Decode a pointer into an offset */ +#define FcOffsetDecode(p) (((intptr_t) (p)) & ~1) + +/* Compute pointer offset */ +#define FcPtrToOffset(b,p) ((intptr_t) (p) - (intptr_t) (b)) + +/* Given base address, offset and type, return a pointer */ +#define FcOffsetToPtr(b,o,t) ((t *) ((intptr_t) (b) + (o))) + +/* Given base address, encoded offset and type, return a pointer */ +#define FcEncodedOffsetToPtr(b,p,t) FcOffsetToPtr(b,FcOffsetDecode(p),t) + +/* Given base address, pointer and type, return an encoded offset */ +#define FcPtrToEncodedOffset(b,p,t) FcOffsetEncode(FcPtrToOffset(b,p),t) + +/* Given a structure, offset member and type, return pointer */ +#define FcOffsetMember(s,m,t) FcOffsetToPtr(s,(s)->m,t) + +/* Given a structure, encoded offset member and type, return pointer to member */ +#define FcEncodedOffsetMember(s,m,t) FcOffsetToPtr(s,FcOffsetDecode((s)->m), t) - FcValue value; - FcValueBinding binding; +/* Given a structure, member and type, convert the member to a pointer */ +#define FcPointerMember(s,m,t) (FcIsEncodedOffset((s)->m) ? \ + FcEncodedOffsetMember (s,m,t) : \ + (s)->m) + +/* + * Serialized values may hold strings, charsets and langsets as pointers, + * unfortunately FcValue is an exposed type so we can't just always use + * offsets + */ +#define FcValueString(v) FcPointerMember(v,u.s,FcChar8) +#define FcValueCharSet(v) FcPointerMember(v,u.c,const FcCharSet) +#define FcValueLangSet(v) FcPointerMember(v,u.l,const FcLangSet) + +typedef struct _FcValueList *FcValueListPtr; + +typedef struct _FcValueList { + struct _FcValueList *next; + FcValue value; + FcValueBinding binding; } FcValueList; -typedef int FcObjectPtr; +#define FcValueListNext(vl) FcPointerMember(vl,next,FcValueList) + +typedef int FcObject; -typedef struct _FcPatternEltPtr { - int bank; - union { - int stat; - struct _FcPatternElt *dyn; - } u; -} FcPatternEltPtr; +typedef struct _FcPatternElt *FcPatternEltPtr; +/* + * Pattern elts are stuck in a structure connected to the pattern, + * so they get moved around when the pattern is resized. Hence, the + * values field must be a pointer/offset instead of just an offset + */ typedef struct _FcPatternElt { - FcObjectPtr object; - FcValueListPtr values; + FcObject object; + FcValueList *values; } FcPatternElt; +#define FcPatternEltValues(pe) FcPointerMember(pe,values,FcValueList) + struct _FcPattern { int num; int size; - FcPatternEltPtr elts; + intptr_t elts_offset; int ref; - int bank; }; +#define FcPatternElts(p) FcOffsetMember(p,elts_offset,FcPatternElt) + +#define FcFontSetFonts(fs) FcPointerMember(fs,fonts,FcPattern *) + +#define FcFontSetFont(fs,i) (FcIsEncodedOffset((fs)->fonts) ? \ + FcEncodedOffsetToPtr(FcFontSetFonts(fs), \ + FcFontSetFonts(fs)[i], \ + FcPattern) : \ + fs->fonts[i]) + typedef enum _FcOp { FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpBool, FcOpCharSet, FcOpNil, @@ -171,7 +230,7 @@ typedef struct _FcExpr { FcMatrix *mval; FcBool bval; FcCharSet *cval; - char *field; + FcObject object; FcChar8 *constant; struct { struct _FcExpr *left, *right; @@ -189,14 +248,14 @@ typedef struct _FcTest { struct _FcTest *next; FcMatchKind kind; FcQual qual; - const char *field; + FcObject object; FcOp op; FcExpr *expr; } FcTest; typedef struct _FcEdit { struct _FcEdit *next; - const char *field; + FcObject object; FcOp op; FcExpr *expr; FcValueBinding binding; @@ -217,19 +276,16 @@ typedef struct _FcCharLeaf { struct _FcCharSet { int ref; /* reference count */ int num; /* size of leaves and numbers arrays */ - int bank; - union { - struct { - FcCharLeaf **leaves; - FcChar16 *numbers; - } dyn; - struct { - int leafidx_offset; - int numbers_offset; - } stat; - } u; + intptr_t leaves_offset; + intptr_t numbers_offset; }; +#define FcCharSetLeaves(c) FcOffsetMember(c,leaves_offset,intptr_t) +#define FcCharSetLeaf(c,i) (FcOffsetToPtr(FcCharSetLeaves(c), \ + FcCharSetLeaves(c)[i], \ + FcCharLeaf)) +#define FcCharSetNumbers(c) FcOffsetMember(c,numbers_offset,FcChar16) + struct _FcStrSet { int ref; /* reference count */ int num; @@ -251,20 +307,36 @@ typedef struct _FcStrBuf { } FcStrBuf; typedef struct _FcCache { - int magic; - int count; - int bank; - int pattern_count; - int patternelt_count; - int valuelist_count; - int str_count; - int langset_count; - int charset_count; - int charset_numbers_count; - int charset_leaf_count; - int charset_leaf_idx_count; + int magic; /* FC_CACHE_MAGIC */ + off_t size; /* size of file */ + intptr_t dir; /* offset to dir name */ + intptr_t dirs; /* offset to subdirs */ + int dirs_count; /* number of subdir strings */ + intptr_t set; /* offset to font set */ } FcCache; +#define FcCacheDir(c) FcOffsetMember(c,dir,FcChar8) +#define FcCacheDirs(c) FcOffsetMember(c,dirs,intptr_t) +#define FcCacheSet(c) FcOffsetMember(c,set,FcFontSet) + +/* + * Used while constructing a directory cache object + */ + +#define FC_SERIALIZE_HASH_SIZE 8191 + +typedef struct _FcSerializeBucket { + struct _FcSerializeBucket *next; + const void *object; + intptr_t offset; +} FcSerializeBucket; + +typedef struct _FcSerialize { + intptr_t size; + void *linear; + FcSerializeBucket *buckets[FC_SERIALIZE_HASH_SIZE]; +} FcSerialize; + /* * To map adobe glyph names to unicode values, a precomputed hash * table is used @@ -308,61 +380,17 @@ typedef struct _FcCaseFold { #define FC_MAX_FILE_LEN 4096 -#define FC_STORAGE_STATIC 0x80 -#define fc_value_string(v) (((v)->type & FC_STORAGE_STATIC) ? ((FcChar8 *) v) + (v)->u.s_off : (v) -> u.s) -#define fc_value_charset(v) (((v)->type & FC_STORAGE_STATIC) ? (const FcCharSet *)(((char *) v) + (v)->u.c_off) : (v) -> u.c) -#define fc_value_langset(v) (((v)->type & FC_STORAGE_STATIC) ? (const FcLangSet *)(((char *) v) + (v)->u.l_off) : (v) -> u.l) +/* XXX remove these when we're ready */ -/* - * The per-user ~/.fonts.cache- file is loaded into - * this data structure. Each directory gets a substructure - * which is validated by comparing the directory timestamp with - * that saved in the cache. When valid, the entire directory cache - * can be immediately loaded without reading the directory. Otherwise, - * the files are checked individually; updated files are loaded into the - * cache which is then rewritten to the users home directory - */ +#define fc_value_string(v) FcValueString(v) +#define fc_value_charset(v) FcValueCharSet(v) +#define fc_value_langset(v) FcValueLangSet(v) +#define fc_storage_type(v) ((v)->type) -#define FC_CACHE_MAGIC 0x12345678 -#define FC_GLOBAL_CACHE_DIR_HASH_SIZE 37 -#define FC_GLOBAL_CACHE_FILE_HASH_SIZE 67 - -typedef struct _FcGlobalCacheInfo { - unsigned int hash; - FcChar8 *file; - time_t time; - FcBool referenced; -} FcGlobalCacheInfo; - -typedef struct _FcGlobalCacheFile { - struct _FcGlobalCacheFile *next; - FcGlobalCacheInfo info; - int id; - FcChar8 *name; -} FcGlobalCacheFile; - -typedef struct _FcGlobalCacheDir FcGlobalCacheDir; - -typedef struct _FcGlobalCacheSubdir { - struct _FcGlobalCacheSubdir *next; - FcGlobalCacheDir *ent; -} FcGlobalCacheSubdir; - -struct _FcGlobalCacheDir { - struct _FcGlobalCacheDir *next; - FcGlobalCacheInfo info; - int len; - FcGlobalCacheFile *ents[FC_GLOBAL_CACHE_FILE_HASH_SIZE]; - FcGlobalCacheSubdir *subdirs; -}; +#define fc_alignof(type) offsetof (struct { char c; type member; }, member) -typedef struct _FcGlobalCache { - FcGlobalCacheDir *ents[FC_GLOBAL_CACHE_DIR_HASH_SIZE]; - FcBool updated; - FcBool broken; - int entries; - int referenced; -} FcGlobalCache; +#define FC_CACHE_MAGIC 0xFC02FC04 +#define FC_CACHE_MAGIC_COPY 0xFC02FC05 struct _FcAtomic { FcChar8 *file; /* original file name */ @@ -377,6 +405,11 @@ struct _FcBlanks { FcChar32 *blanks; }; +typedef struct _FcCacheList { + struct _FcCacheList *next; + FcCache *cache; +} FcCacheList; + struct _FcConfig { /* * File names loaded from the configuration -- saved here as the @@ -384,7 +417,6 @@ struct _FcConfig { * and those directives may occur in any order */ FcStrSet *configDirs; /* directories to scan for fonts */ - FcChar8 *cache; /* name of per-user cache file */ /* * Set of allowed blank chars -- used to * trim fonts of bogus glyphs @@ -396,6 +428,10 @@ struct _FcConfig { * of configured directories */ FcStrSet *fontDirs; + /* + * List of directories containing cache files. + */ + FcStrSet *cacheDirs; /* * Names of all of the configuration files used * to create this configuration @@ -423,6 +459,11 @@ struct _FcConfig { * match preferrentially */ FcFontSet *fonts[FcSetApplication + 1]; + /* + * Font cache information is mapped from cache files + * the configuration is destroyed, the files need to be unmapped + */ + FcCacheList *caches; /* * Fontconfig can periodically rescan the system configuration * and font directories. This rescanning occurs when font @@ -435,35 +476,38 @@ struct _FcConfig { extern FcConfig *_fcConfig; +typedef struct _FcFileTime { + time_t time; + FcBool set; +} FcFileTime; + typedef struct _FcCharMap FcCharMap; +/* watch out; assumes that v is void * -PL */ +#define ALIGN(v,type) ((void *)(((uintptr_t)(v) + fc_alignof(type) - 1) & ~(fc_alignof(type) - 1))) + /* fcblanks.c */ /* fccache.c */ -void -FcCacheForce(FcBool force); - -FcBool -FcCacheSerialize (int bank, FcConfig * config); - FcFontSet * FcCacheRead (FcConfig *config); FcBool -FcDirCacheRead (FcFontSet * set, const FcChar8 *dir); +FcDirCacheWrite (FcFontSet *set, FcStrSet * dirs, const FcChar8 *dir, FcConfig *config); FcBool -FcDirCacheWrite (int bank, FcFontSet *set, const FcChar8 *dir); +FcDirCacheConsume (FILE *file, FcFontSet *set, FcStrSet *dirs, + const FcChar8 *dir, char *dirname); + +FcCache * +FcDirCacheMap (int fd, off_t size); -int -FcCacheBankCount (void); +void +FcDirCacheUnmap (FcCache *cache); FcBool -FcCacheHaveBank (int bank); - -int -FcCacheBankToIndex (int bank); +FcDirCacheRead (FcFontSet * set, FcStrSet * dirs, const FcChar8 *dir, FcConfig *config); /* fccfg.c */ @@ -480,12 +524,15 @@ FcConfigAddDir (FcConfig *config, const FcChar8 *d); FcBool -FcConfigAddConfigFile (FcConfig *config, - const FcChar8 *f); +FcConfigAddCacheDir (FcConfig *config, + const FcChar8 *d); + +FcStrList * +FcConfigGetCacheDirs (FcConfig *config); FcBool -FcConfigSetCache (FcConfig *config, - const FcChar8 *c); +FcConfigAddConfigFile (FcConfig *config, + const FcChar8 *f); FcBool FcConfigAddBlank (FcConfig *config, @@ -525,7 +572,44 @@ FcBool FcConfigAcceptFont (FcConfig *config, const FcPattern *font); +FcFileTime +FcConfigModifiedTime (FcConfig *config); + +FcBool +FcConfigAddCache (FcConfig *config, FcCache *cache); + +/* fcserialize.c */ +intptr_t +FcAlignSize (intptr_t size); + +FcSerialize * +FcSerializeCreate (void); + +void +FcSerializeDestroy (FcSerialize *serialize); + +FcBool +FcSerializeAlloc (FcSerialize *serialize, const void *object, int size); + +intptr_t +FcSerializeReserve (FcSerialize *serialize, int size); + +intptr_t +FcSerializeOffset (FcSerialize *serialize, const void *object); + +void * +FcSerializePtr (FcSerialize *serialize, const void *object); + +FcBool +FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l); + +FcLangSet * +FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l); + /* fccharset.c */ +void +FcLangCharSetPopulate (void); + FcCharSet * FcCharSetFreeze (FcCharSet *cs); @@ -541,24 +625,11 @@ FcNameParseCharSet (FcChar8 *string); FcCharLeaf * FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4); -void -FcCharSetNewBank (void); - -int -FcCharSetNeededBytes (const FcCharSet *c); - -void * -FcCharSetDistributeBytes (FcCache * metadata, - void * block_ptr); +FcBool +FcCharSetSerializeAlloc(FcSerialize *serialize, const FcCharSet *cs); FcCharSet * -FcCharSetSerialize(int bank, FcCharSet *c); - -void * -FcCharSetUnserialize (FcCache metadata, void *block_ptr); - -FcCharLeaf * -FcCharSetGetLeaf(const FcCharSet *c, int i); +FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs); FcChar16 * FcCharSetGetNumbers(const FcCharSet *c); @@ -585,8 +656,20 @@ FcEditPrint (const FcEdit *edit); void FcSubstPrint (const FcSubst *subst); -int -FcDebug (void); +void +FcCharSetPrint (const FcCharSet *c); + +extern int FcDebugVal; + +static inline int +FcDebug (void) { return FcDebugVal; } + +void +FcInitDebug (void); + +/* fcdefault.c */ +FcChar8 * +FcGetDefaultLang (void); /* fcdir.c */ @@ -596,7 +679,6 @@ FcFileIsDir (const FcChar8 *file); FcBool FcFileScanConfig (FcFontSet *set, FcStrSet *dirs, - FcFileCache *cache, FcBlanks *blanks, const FcChar8 *file, FcBool force, @@ -605,7 +687,6 @@ FcFileScanConfig (FcFontSet *set, FcBool FcDirScanConfig (FcFontSet *set, FcStrSet *dirs, - FcFileCache *cache, FcBlanks *blanks, const FcChar8 *dir, FcBool force, @@ -633,21 +714,12 @@ FcFreeTypeGetPrivateMap (FT_Encoding encoding); /* fcfs.c */ -void -FcFontSetNewBank (void); - -int -FcFontSetNeededBytes (FcFontSet *s); - -void * -FcFontSetDistributeBytes (FcCache * metadata, void * block_ptr); - FcBool -FcFontSetSerialize (int bank, FcFontSet * s); - -FcBool -FcFontSetUnserialize(FcCache metadata, FcFontSet * s, void * block_ptr); +FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s); +FcFontSet * +FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s); + /* fcgram.y */ int FcConfigparse (void); @@ -728,22 +800,6 @@ FcNameParseLangSet (const FcChar8 *string); FcBool FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls); -void -FcLangSetNewBank (void); - -int -FcLangSetNeededBytes (const FcLangSet *l); - -void * -FcLangSetDistributeBytes (FcCache * metadata, - void * block_ptr); - -FcLangSet * -FcLangSetSerialize (int bank, FcLangSet *l); - -void * -FcLangSetUnserialize (FcCache metadata, void *block_ptr); - /* fclist.c */ FcBool @@ -754,27 +810,70 @@ FcListPatternMatchAny (const FcPattern *p, /* fcname.c */ +/* + * NOTE -- this ordering is part of the cache file format. + * It must also match the ordering in fcname.c + */ + +#define FC_FAMILY_OBJECT 1 +#define FC_FAMILYLANG_OBJECT 2 +#define FC_STYLE_OBJECT 3 +#define FC_STYLELANG_OBJECT 4 +#define FC_FULLNAME_OBJECT 5 +#define FC_FULLNAMELANG_OBJECT 6 +#define FC_SLANT_OBJECT 7 +#define FC_WEIGHT_OBJECT 8 +#define FC_WIDTH_OBJECT 9 +#define FC_SIZE_OBJECT 10 +#define FC_ASPECT_OBJECT 11 +#define FC_PIXEL_SIZE_OBJECT 12 +#define FC_SPACING_OBJECT 13 +#define FC_FOUNDRY_OBJECT 14 +#define FC_ANTIALIAS_OBJECT 15 +#define FC_HINT_STYLE_OBJECT 16 +#define FC_HINTING_OBJECT 17 +#define FC_VERTICAL_LAYOUT_OBJECT 18 +#define FC_AUTOHINT_OBJECT 19 +#define FC_GLOBAL_ADVANCE_OBJECT 20 +#define FC_FILE_OBJECT 21 +#define FC_INDEX_OBJECT 22 +#define FC_RASTERIZER_OBJECT 23 +#define FC_OUTLINE_OBJECT 24 +#define FC_SCALABLE_OBJECT 25 +#define FC_DPI_OBJECT 26 +#define FC_RGBA_OBJECT 27 +#define FC_SCALE_OBJECT 28 +#define FC_MINSPACE_OBJECT 29 +#define FC_CHAR_WIDTH_OBJECT 30 +#define FC_CHAR_HEIGHT_OBJECT 31 +#define FC_MATRIX_OBJECT 32 +#define FC_CHARSET_OBJECT 33 +#define FC_LANG_OBJECT 34 +#define FC_FONTVERSION_OBJECT 35 +#define FC_CAPABILITY_OBJECT 36 +#define FC_FONTFORMAT_OBJECT 37 +#define FC_EMBOLDEN_OBJECT 38 +#define FC_EMBEDDED_BITMAP_OBJECT 39 + FcBool FcNameBool (const FcChar8 *v, FcBool *result); -void -FcObjectNewBank(void); +FcBool +FcObjectValidType (FcObject object, FcType type); -void * -FcObjectDistributeBytes (FcCache * metadata, - void * block_ptr); +FcObject +FcObjectFromName (const char * name); -FcObjectPtr -FcObjectToPtr (const char * si); +const char * +FcObjectName (FcObject object); -int -FcObjectNeededBytes (FcObjectPtr p); +FcBool +FcObjectInit (void); void -FcObjectUnserialize (FcCache metadata, FcConfig * config, void *block_ptr); +FcObjectFini (void); -FcObjectPtr -FcObjectSerialize (FcObjectPtr s); +#define FcObjectCompare(a, b) ((int) a - (int) b) /* fcpat.c */ @@ -785,59 +884,98 @@ void FcValueListDestroy (FcValueListPtr l); FcPatternElt * -FcPatternFindElt (const FcPattern *p, const char *object); +FcPatternObjectFindElt (const FcPattern *p, FcObject object); FcPatternElt * -FcPatternInsertElt (FcPattern *p, const char *object); +FcPatternObjectInsertElt (FcPattern *p, FcObject object); FcBool -FcPatternAddWithBinding (FcPattern *p, - const char *object, - FcValue value, - FcValueBinding binding, - FcBool append); +FcPatternObjectAddWithBinding (FcPattern *p, + FcObject object, + FcValue value, + FcValueBinding binding, + FcBool append); -FcPattern * -FcPatternFreeze (FcPattern *p); +FcBool +FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append); + +FcBool +FcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append); + +FcResult +FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v); + +FcBool +FcPatternObjectDel (FcPattern *p, FcObject object); -void -FcPatternFini (void); +FcBool +FcPatternObjectRemove (FcPattern *p, FcObject object, int id); FcBool -FcPatternAppend (FcPattern *p, FcPattern *s); +FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i); -const char * -FcObjectStaticName (const char *name); +FcBool +FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d); -const char * -FcObjectPtrU (FcObjectPtr p); +FcBool +FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s); -int -FcObjectPtrCompare (FcObjectPtr a, FcObjectPtr b); +FcBool +FcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s); -void -FcPatternNewBank (void); +FcBool +FcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c); -int -FcPatternNeededBytes (FcPattern *p); +FcBool +FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b); -void * -FcPatternDistributeBytes (FcCache * metadata, void * block_ptr); +FcBool +FcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls); -FcValueList * -FcValueListPtrU(FcValueListPtr p); +FcResult +FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i); -FcPatternElt * -FcPatternEltU (FcPatternEltPtr pei); +FcResult +FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d); -FcValueListPtr -FcValueListPtrCreateDynamic(FcValueList * p); +FcResult +FcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 ** s); -FcPattern * -FcPatternSerialize (int bank, FcPattern * p); +FcResult +FcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s); + +FcResult +FcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c); + +FcResult +FcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b); + +FcResult +FcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls); + +void +FcPatternFini (void); + +FcBool +FcPatternAppend (FcPattern *p, FcPattern *s); + +const FcChar8 * +FcStrStaticName (const FcChar8 *name); + +FcChar32 +FcStringHash (const FcChar8 *s); + +FcBool +FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat); FcPattern * -FcPatternUnserialize (FcCache metadata, void *block_ptr); +FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat); + +FcBool +FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat); + +FcValueList * +FcValueListSerialize (FcSerialize *serialize, const FcValueList *pat); /* fcrender.c */ @@ -894,4 +1032,13 @@ FcStrLastSlash (const FcChar8 *path); FcChar32 FcStrHashIgnoreCase (const FcChar8 *s); +FcChar8 * +FcStrCanonFilename (const FcChar8 *s); + +FcBool +FcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str); + +FcChar8 * +FcStrSerialize (FcSerialize *serialize, const FcChar8 *str); + #endif /* _FC_INT_H_ */