fcint.h revision 1887081f
12c393a42Smrg/* 20d39df38Smrg * fontconfig/src/fcint.h 32c393a42Smrg * 42c393a42Smrg * Copyright © 2000 Keith Packard 52c393a42Smrg * 62c393a42Smrg * Permission to use, copy, modify, distribute, and sell this software and its 72c393a42Smrg * documentation for any purpose is hereby granted without fee, provided that 82c393a42Smrg * the above copyright notice appear in all copies and that both that 92c393a42Smrg * copyright notice and this permission notice appear in supporting 10898dab68Smrg * documentation, and that the name of the author(s) not be used in 112c393a42Smrg * advertising or publicity pertaining to distribution of the software without 12898dab68Smrg * specific, written prior permission. The authors make no 132c393a42Smrg * representations about the suitability of this software for any purpose. It 142c393a42Smrg * is provided "as is" without express or implied warranty. 152c393a42Smrg * 160d39df38Smrg * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 172c393a42Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 180d39df38Smrg * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR 192c393a42Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 202c393a42Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 212c393a42Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 222c393a42Smrg * PERFORMANCE OF THIS SOFTWARE. 232c393a42Smrg */ 242c393a42Smrg 252c393a42Smrg#ifndef _FCINT_H_ 262c393a42Smrg#define _FCINT_H_ 272c393a42Smrg 282c393a42Smrg#ifdef HAVE_CONFIG_H 292c393a42Smrg#include <config.h> 302c393a42Smrg#endif 312c393a42Smrg 325e61939bSmrg#include "fcstdint.h" 335e61939bSmrg 342c393a42Smrg#include <stdlib.h> 352c393a42Smrg#include <stdio.h> 362c393a42Smrg#include <string.h> 372c393a42Smrg#include <ctype.h> 385e61939bSmrg#include <assert.h> 392c393a42Smrg#include <errno.h> 40d91dd368Smrg#include <limits.h> 4118bd4a06Smrg#include <float.h> 4218bd4a06Smrg#include <math.h> 432c393a42Smrg#include <unistd.h> 442c393a42Smrg#include <stddef.h> 452c393a42Smrg#include <sys/types.h> 462c393a42Smrg#include <sys/stat.h> 472c393a42Smrg#include <time.h> 482c393a42Smrg#include <fontconfig/fontconfig.h> 492c393a42Smrg#include <fontconfig/fcprivate.h> 502c393a42Smrg#include "fcdeprecate.h" 515e61939bSmrg#include "fcmutex.h" 525e61939bSmrg#include "fcatomic.h" 532c393a42Smrg 542c393a42Smrg#ifndef FC_CONFIG_PATH 552c393a42Smrg#define FC_CONFIG_PATH "fonts.conf" 562c393a42Smrg#endif 572c393a42Smrg 582c393a42Smrg#ifdef _WIN32 595e61939bSmrg# include "fcwindows.h" 60898dab68Smrgtypedef UINT (WINAPI *pfnGetSystemWindowsDirectory)(LPSTR, UINT); 61898dab68Smrgtypedef HRESULT (WINAPI *pfnSHGetFolderPathA)(HWND, int, HANDLE, DWORD, LPSTR); 62898dab68Smrgextern pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory; 63898dab68Smrgextern pfnSHGetFolderPathA pSHGetFolderPathA; 64898dab68Smrg# define FC_SEARCH_PATH_SEPARATOR ';' 65898dab68Smrg# define FC_DIR_SEPARATOR '\\' 66898dab68Smrg# define FC_DIR_SEPARATOR_S "\\" 672c393a42Smrg#else 68898dab68Smrg# define FC_SEARCH_PATH_SEPARATOR ':' 69898dab68Smrg# define FC_DIR_SEPARATOR '/' 70898dab68Smrg# define FC_DIR_SEPARATOR_S "/" 712c393a42Smrg#endif 722c393a42Smrg 7318bd4a06Smrg#ifdef PATH_MAX 7418bd4a06Smrg#define FC_PATH_MAX PATH_MAX 7518bd4a06Smrg#else 7618bd4a06Smrg#define FC_PATH_MAX 128 7718bd4a06Smrg#endif 7818bd4a06Smrg 795e61939bSmrg#if __GNUC__ >= 4 805e61939bSmrg#define FC_UNUSED __attribute__((unused)) 815e61939bSmrg#else 825e61939bSmrg#define FC_UNUSED 835e61939bSmrg#endif 845e61939bSmrg 852c393a42Smrg#define FC_DBG_MATCH 1 862c393a42Smrg#define FC_DBG_MATCHV 2 872c393a42Smrg#define FC_DBG_EDIT 4 882c393a42Smrg#define FC_DBG_FONTSET 8 892c393a42Smrg#define FC_DBG_CACHE 16 902c393a42Smrg#define FC_DBG_CACHEV 32 912c393a42Smrg#define FC_DBG_PARSE 64 922c393a42Smrg#define FC_DBG_SCAN 128 932c393a42Smrg#define FC_DBG_SCANV 256 942c393a42Smrg#define FC_DBG_CONFIG 1024 952c393a42Smrg#define FC_DBG_LANGSET 2048 9618bd4a06Smrg#define FC_DBG_MATCH2 4096 972c393a42Smrg 98d91dd368Smrg#define _FC_ASSERT_STATIC1(_line, _cond) typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1] FC_UNUSED 99898dab68Smrg#define _FC_ASSERT_STATIC0(_line, _cond) _FC_ASSERT_STATIC1 (_line, (_cond)) 100898dab68Smrg#define FC_ASSERT_STATIC(_cond) _FC_ASSERT_STATIC0 (__LINE__, (_cond)) 101898dab68Smrg 1020d39df38Smrg#define FC_MIN(a,b) ((a) < (b) ? (a) : (b)) 1030d39df38Smrg#define FC_MAX(a,b) ((a) > (b) ? (a) : (b)) 1042c393a42Smrg 1052c393a42Smrg/* slim_internal.h */ 1062c393a42Smrg#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun) 1072c393a42Smrg#define FcPrivate __attribute__((__visibility__("hidden"))) 1082c393a42Smrg#define HAVE_GNUC_ATTRIBUTE 1 1092c393a42Smrg#include "fcalias.h" 1102c393a42Smrg#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) 1112c393a42Smrg#define FcPrivate __hidden 1122c393a42Smrg#else /* not gcc >= 3.3 and not Sun Studio >= 8 */ 1132c393a42Smrg#define FcPrivate 1142c393a42Smrg#endif 1152c393a42Smrg 1161887081fSmrg/* NLS */ 1171887081fSmrg#ifdef ENABLE_NLS 1181887081fSmrg#include <libintl.h> 1191887081fSmrg#define _(x) (dgettext(GETTEXT_PACKAGE, x)) 1201887081fSmrg#else 1211887081fSmrg#define dgettext(d, s) (s) 1221887081fSmrg#define _(x) (x) 1231887081fSmrg#endif 1245e61939bSmrg 1251887081fSmrg#define N_(x) x 1261887081fSmrg 1271887081fSmrgFC_ASSERT_STATIC (sizeof (FcRef) == sizeof (int)); 1282c393a42Smrg 1295e61939bSmrg#define FcStrdup(s) ((FcChar8 *) strdup ((const char *) (s))) 1305e61939bSmrg#define FcFree(s) (free ((FcChar8 *) (s))) 1315e61939bSmrg 1322c393a42Smrg/* 1332c393a42Smrg * Serialized data structures use only offsets instead of pointers 1342c393a42Smrg * A low bit of 1 indicates an offset. 1352c393a42Smrg */ 136898dab68Smrg 1372c393a42Smrg/* Is the provided pointer actually an offset? */ 1382c393a42Smrg#define FcIsEncodedOffset(p) ((((intptr_t) (p)) & 1) != 0) 1392c393a42Smrg 1402c393a42Smrg/* Encode offset in a pointer of type t */ 1412c393a42Smrg#define FcOffsetEncode(o,t) ((t *) ((o) | 1)) 1422c393a42Smrg 1432c393a42Smrg/* Decode a pointer into an offset */ 1442c393a42Smrg#define FcOffsetDecode(p) (((intptr_t) (p)) & ~1) 1452c393a42Smrg 1462c393a42Smrg/* Compute pointer offset */ 1472c393a42Smrg#define FcPtrToOffset(b,p) ((intptr_t) (p) - (intptr_t) (b)) 1482c393a42Smrg 1492c393a42Smrg/* Given base address, offset and type, return a pointer */ 1502c393a42Smrg#define FcOffsetToPtr(b,o,t) ((t *) ((intptr_t) (b) + (o))) 1512c393a42Smrg 1522c393a42Smrg/* Given base address, encoded offset and type, return a pointer */ 1532c393a42Smrg#define FcEncodedOffsetToPtr(b,p,t) FcOffsetToPtr(b,FcOffsetDecode(p),t) 1542c393a42Smrg 1552c393a42Smrg/* Given base address, pointer and type, return an encoded offset */ 1562c393a42Smrg#define FcPtrToEncodedOffset(b,p,t) FcOffsetEncode(FcPtrToOffset(b,p),t) 1572c393a42Smrg 1582c393a42Smrg/* Given a structure, offset member and type, return pointer */ 1592c393a42Smrg#define FcOffsetMember(s,m,t) FcOffsetToPtr(s,(s)->m,t) 1602c393a42Smrg 1612c393a42Smrg/* Given a structure, encoded offset member and type, return pointer to member */ 1622c393a42Smrg#define FcEncodedOffsetMember(s,m,t) FcOffsetToPtr(s,FcOffsetDecode((s)->m), t) 1632c393a42Smrg 1642c393a42Smrg/* Given a structure, member and type, convert the member to a pointer */ 1652c393a42Smrg#define FcPointerMember(s,m,t) (FcIsEncodedOffset((s)->m) ? \ 1662c393a42Smrg FcEncodedOffsetMember (s,m,t) : \ 1672c393a42Smrg (s)->m) 1682c393a42Smrg 1692c393a42Smrg/* 1702c393a42Smrg * Serialized values may hold strings, charsets and langsets as pointers, 1712c393a42Smrg * unfortunately FcValue is an exposed type so we can't just always use 1722c393a42Smrg * offsets 1732c393a42Smrg */ 1742c393a42Smrg#define FcValueString(v) FcPointerMember(v,u.s,FcChar8) 1752c393a42Smrg#define FcValueCharSet(v) FcPointerMember(v,u.c,const FcCharSet) 1762c393a42Smrg#define FcValueLangSet(v) FcPointerMember(v,u.l,const FcLangSet) 17718bd4a06Smrg#define FcValueRange(v) FcPointerMember(v,u.r,const FcRange) 1782c393a42Smrg 1792c393a42Smrgtypedef struct _FcValueList *FcValueListPtr; 1802c393a42Smrg 1812c393a42Smrgtypedef struct _FcValueList { 1822c393a42Smrg struct _FcValueList *next; 1832c393a42Smrg FcValue value; 1842c393a42Smrg FcValueBinding binding; 1852c393a42Smrg} FcValueList; 1862c393a42Smrg 1872c393a42Smrg#define FcValueListNext(vl) FcPointerMember(vl,next,FcValueList) 188898dab68Smrg 1892c393a42Smrgtypedef int FcObject; 1902c393a42Smrg 191d91dd368Smrg/* The 1024 is to leave some room for future added internal objects, such 192d91dd368Smrg * that caches from newer fontconfig can still be used with older fontconfig 193d91dd368Smrg * without getting confused. */ 194d91dd368Smrg#define FC_EXT_OBJ_INDEX 1024 195d91dd368Smrg#define FC_OBJ_ID(_n_) ((_n_) & (~FC_EXT_OBJ_INDEX)) 196d91dd368Smrg 1972c393a42Smrgtypedef struct _FcPatternElt *FcPatternEltPtr; 1982c393a42Smrg 1992c393a42Smrg/* 200898dab68Smrg * Pattern elts are stuck in a structure connected to the pattern, 2012c393a42Smrg * so they get moved around when the pattern is resized. Hence, the 2022c393a42Smrg * values field must be a pointer/offset instead of just an offset 2032c393a42Smrg */ 2042c393a42Smrgtypedef struct _FcPatternElt { 2052c393a42Smrg FcObject object; 2062c393a42Smrg FcValueList *values; 2072c393a42Smrg} FcPatternElt; 2082c393a42Smrg 2092c393a42Smrg#define FcPatternEltValues(pe) FcPointerMember(pe,values,FcValueList) 2102c393a42Smrg 2112c393a42Smrgstruct _FcPattern { 2122c393a42Smrg int num; 2132c393a42Smrg int size; 2142c393a42Smrg intptr_t elts_offset; 2155e61939bSmrg FcRef ref; 2162c393a42Smrg}; 2172c393a42Smrg 2182c393a42Smrg#define FcPatternElts(p) FcOffsetMember(p,elts_offset,FcPatternElt) 2192c393a42Smrg 2202c393a42Smrg#define FcFontSetFonts(fs) FcPointerMember(fs,fonts,FcPattern *) 2212c393a42Smrg 2222c393a42Smrg#define FcFontSetFont(fs,i) (FcIsEncodedOffset((fs)->fonts) ? \ 2232c393a42Smrg FcEncodedOffsetToPtr(fs, \ 2242c393a42Smrg FcFontSetFonts(fs)[i], \ 2252c393a42Smrg FcPattern) : \ 2262c393a42Smrg fs->fonts[i]) 2272c393a42Smrg 2282c393a42Smrgtypedef enum _FcOp { 229898dab68Smrg FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpRange, FcOpBool, FcOpCharSet, FcOpLangSet, 2302c393a42Smrg FcOpNil, 2312c393a42Smrg FcOpField, FcOpConst, 232898dab68Smrg FcOpAssign, FcOpAssignReplace, 2332c393a42Smrg FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast, 2345e61939bSmrg FcOpDelete, FcOpDeleteAll, 2352c393a42Smrg FcOpQuest, 236898dab68Smrg FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual, 2372c393a42Smrg FcOpContains, FcOpListing, FcOpNotContains, 2382c393a42Smrg FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual, 2392c393a42Smrg FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide, 2402c393a42Smrg FcOpNot, FcOpComma, FcOpFloor, FcOpCeil, FcOpRound, FcOpTrunc, 2412c393a42Smrg FcOpInvalid 2422c393a42Smrg} FcOp; 2432c393a42Smrg 244898dab68Smrgtypedef enum _FcOpFlags { 2451887081fSmrg FcOpFlagIgnoreBlanks = 1U << 0 246898dab68Smrg} FcOpFlags; 247898dab68Smrg 248898dab68Smrg#define FC_OP_GET_OP(_x_) ((_x_) & 0xffff) 249898dab68Smrg#define FC_OP_GET_FLAGS(_x_) (((_x_) & 0xffff0000) >> 16) 250898dab68Smrg#define FC_OP(_x_,_f_) (FC_OP_GET_OP (_x_) | ((_f_) << 16)) 251898dab68Smrg 2525e61939bSmrgtypedef struct _FcExprMatrix { 2535e61939bSmrg struct _FcExpr *xx, *xy, *yx, *yy; 2545e61939bSmrg} FcExprMatrix; 2555e61939bSmrg 2565e61939bSmrgtypedef struct _FcExprName { 2575e61939bSmrg FcObject object; 2585e61939bSmrg FcMatchKind kind; 2595e61939bSmrg} FcExprName; 2605e61939bSmrg 26118bd4a06Smrgstruct _FcRange { 26218bd4a06Smrg double begin; 26318bd4a06Smrg double end; 26418bd4a06Smrg}; 26518bd4a06Smrg 2665e61939bSmrg 2672c393a42Smrgtypedef struct _FcExpr { 2682c393a42Smrg FcOp op; 2692c393a42Smrg union { 27018bd4a06Smrg int ival; 27118bd4a06Smrg double dval; 27218bd4a06Smrg const FcChar8 *sval; 27318bd4a06Smrg FcExprMatrix *mexpr; 27418bd4a06Smrg FcBool bval; 27518bd4a06Smrg FcCharSet *cval; 27618bd4a06Smrg FcLangSet *lval; 27718bd4a06Smrg FcRange *rval; 27818bd4a06Smrg 27918bd4a06Smrg FcExprName name; 28018bd4a06Smrg const FcChar8 *constant; 2812c393a42Smrg struct { 2822c393a42Smrg struct _FcExpr *left, *right; 2832c393a42Smrg } tree; 2842c393a42Smrg } u; 2852c393a42Smrg} FcExpr; 2862c393a42Smrg 2870d39df38Smrgtypedef struct _FcExprPage FcExprPage; 2880d39df38Smrg 2890d39df38Smrgstruct _FcExprPage { 2900d39df38Smrg FcExprPage *next_page; 2910d39df38Smrg FcExpr *next; 2920d39df38Smrg FcExpr exprs[(1024 - 2/* two pointers */ - 2/* malloc overhead */) * sizeof (void *) / sizeof (FcExpr)]; 293898dab68Smrg FcExpr end[FLEXIBLE_ARRAY_MEMBER]; 2940d39df38Smrg}; 2950d39df38Smrg 2962c393a42Smrgtypedef enum _FcQual { 2972c393a42Smrg FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst 2982c393a42Smrg} FcQual; 2992c393a42Smrg 3002c393a42Smrg#define FcMatchDefault ((FcMatchKind) -1) 3012c393a42Smrg 3022c393a42Smrgtypedef struct _FcTest { 3032c393a42Smrg FcMatchKind kind; 3042c393a42Smrg FcQual qual; 3052c393a42Smrg FcObject object; 3062c393a42Smrg FcOp op; 3072c393a42Smrg FcExpr *expr; 3082c393a42Smrg} FcTest; 3092c393a42Smrg 3102c393a42Smrgtypedef struct _FcEdit { 3112c393a42Smrg FcObject object; 3122c393a42Smrg FcOp op; 3132c393a42Smrg FcExpr *expr; 3142c393a42Smrg FcValueBinding binding; 3152c393a42Smrg} FcEdit; 3162c393a42Smrg 3171887081fSmrgtypedef void (* FcDestroyFunc) (void *data); 3181887081fSmrg 3191887081fSmrgtypedef struct _FcPtrList FcPtrList; 3201887081fSmrg/* need to sync with FcConfigFileInfoIter at fontconfig.h */ 3211887081fSmrgtypedef struct _FcPtrListIter { 3221887081fSmrg void *dummy1; 3231887081fSmrg void *dummy2; 3241887081fSmrg void *dummy3; 3251887081fSmrg} FcPtrListIter; 3261887081fSmrg 327d91dd368Smrgtypedef enum _FcRuleType { 328d91dd368Smrg FcRuleUnknown, FcRuleTest, FcRuleEdit 329d91dd368Smrg} FcRuleType; 330d91dd368Smrg 331d91dd368Smrgtypedef struct _FcRule { 332d91dd368Smrg struct _FcRule *next; 333d91dd368Smrg FcRuleType type; 334d91dd368Smrg union { 335d91dd368Smrg FcTest *test; 336d91dd368Smrg FcEdit *edit; 337d91dd368Smrg } u; 338d91dd368Smrg} FcRule; 339d91dd368Smrg 3401887081fSmrgtypedef struct _FcRuleSet { 3411887081fSmrg FcRef ref; 3421887081fSmrg FcChar8 *name; 3431887081fSmrg FcChar8 *description; 3441887081fSmrg FcChar8 *domain; 3451887081fSmrg FcBool enabled; 3461887081fSmrg FcPtrList *subst[FcMatchKindEnd]; 3471887081fSmrg} FcRuleSet; 3482c393a42Smrg 3492c393a42Smrgtypedef struct _FcCharLeaf { 3502c393a42Smrg FcChar32 map[256/32]; 3512c393a42Smrg} FcCharLeaf; 3522c393a42Smrg 3532c393a42Smrgstruct _FcCharSet { 3545e61939bSmrg FcRef ref; /* reference count */ 3552c393a42Smrg int num; /* size of leaves and numbers arrays */ 3562c393a42Smrg intptr_t leaves_offset; 3572c393a42Smrg intptr_t numbers_offset; 3582c393a42Smrg}; 3592c393a42Smrg 3602c393a42Smrg#define FcCharSetLeaves(c) FcOffsetMember(c,leaves_offset,intptr_t) 3612c393a42Smrg#define FcCharSetLeaf(c,i) (FcOffsetToPtr(FcCharSetLeaves(c), \ 3622c393a42Smrg FcCharSetLeaves(c)[i], \ 3632c393a42Smrg FcCharLeaf)) 3642c393a42Smrg#define FcCharSetNumbers(c) FcOffsetMember(c,numbers_offset,FcChar16) 3652c393a42Smrg 36618bd4a06Smrg#define FCSS_DEFAULT 0 /* default behavior */ 36718bd4a06Smrg#define FCSS_ALLOW_DUPLICATES 1 /* allows for duplicate strings in the set */ 36818bd4a06Smrg#define FCSS_GROW_BY_64 2 /* grows buffer by 64 elements instead of 1 */ 36918bd4a06Smrg 37018bd4a06Smrg#define FcStrSetHasControlBit(s,c) (s->control & c) 37118bd4a06Smrg#define FcStrSetHasControlBits(s,c) ( (c) == (s->control & (c)) ) 37218bd4a06Smrg 3732c393a42Smrgstruct _FcStrSet { 3745e61939bSmrg FcRef ref; /* reference count */ 3752c393a42Smrg int num; 3762c393a42Smrg int size; 3772c393a42Smrg FcChar8 **strs; 37818bd4a06Smrg unsigned int control; /* control bits for set behavior */ 3792c393a42Smrg}; 3802c393a42Smrg 3812c393a42Smrgstruct _FcStrList { 3822c393a42Smrg FcStrSet *set; 3832c393a42Smrg int n; 3842c393a42Smrg}; 3852c393a42Smrg 3862c393a42Smrgtypedef struct _FcStrBuf { 3872c393a42Smrg FcChar8 *buf; 3882c393a42Smrg FcBool allocated; 3892c393a42Smrg FcBool failed; 3902c393a42Smrg int len; 3912c393a42Smrg int size; 3920d39df38Smrg FcChar8 buf_static[16 * sizeof (void *)]; 3932c393a42Smrg} FcStrBuf; 3942c393a42Smrg 3951887081fSmrgtypedef struct _FcHashTable FcHashTable; 3961887081fSmrg 3971887081fSmrgtypedef FcChar32 (* FcHashFunc) (const void *data); 3981887081fSmrgtypedef int (* FcCompareFunc) (const void *v1, const void *v2); 3991887081fSmrgtypedef FcBool (* FcCopyFunc) (const void *src, void **dest); 4001887081fSmrg 4011887081fSmrg 4022c393a42Smrgstruct _FcCache { 4035e61939bSmrg unsigned int magic; /* FC_CACHE_MAGIC_MMAP or FC_CACHE_ALLOC */ 40418bd4a06Smrg int version; /* FC_CACHE_VERSION_NUMBER */ 4052c393a42Smrg intptr_t size; /* size of file */ 4062c393a42Smrg intptr_t dir; /* offset to dir name */ 4072c393a42Smrg intptr_t dirs; /* offset to subdirs */ 4082c393a42Smrg int dirs_count; /* number of subdir strings */ 4092c393a42Smrg intptr_t set; /* offset to font set */ 410898dab68Smrg int checksum; /* checksum of directory state */ 41118bd4a06Smrg int64_t checksum_nano; /* checksum of directory state */ 4122c393a42Smrg}; 4132c393a42Smrg 4142c393a42Smrg#undef FcCacheDir 4152c393a42Smrg#undef FcCacheSubdir 4162c393a42Smrg#define FcCacheDir(c) FcOffsetMember(c,dir,FcChar8) 4172c393a42Smrg#define FcCacheDirs(c) FcOffsetMember(c,dirs,intptr_t) 4182c393a42Smrg#define FcCacheSet(c) FcOffsetMember(c,set,FcFontSet) 4192c393a42Smrg#define FcCacheSubdir(c,i) FcOffsetToPtr (FcCacheDirs(c),\ 4202c393a42Smrg FcCacheDirs(c)[i], \ 4212c393a42Smrg FcChar8) 4222c393a42Smrg 4232c393a42Smrg/* 4242c393a42Smrg * Used while constructing a directory cache object 4252c393a42Smrg */ 4262c393a42Smrg 4272c393a42Smrg#define FC_SERIALIZE_HASH_SIZE 8191 4282c393a42Smrg 4290d39df38Smrgtypedef union _FcAlign { 4300d39df38Smrg double d; 4310d39df38Smrg int i; 4320d39df38Smrg intptr_t ip; 4330d39df38Smrg FcBool b; 4340d39df38Smrg void *p; 4350d39df38Smrg} FcAlign; 4360d39df38Smrg 4372c393a42Smrgtypedef struct _FcSerializeBucket { 4382c393a42Smrg struct _FcSerializeBucket *next; 4392c393a42Smrg const void *object; 4402c393a42Smrg intptr_t offset; 4412c393a42Smrg} FcSerializeBucket; 4422c393a42Smrg 4432c393a42Smrgtypedef struct _FcCharSetFreezer FcCharSetFreezer; 4442c393a42Smrg 4452c393a42Smrgtypedef struct _FcSerialize { 4462c393a42Smrg intptr_t size; 4472c393a42Smrg FcCharSetFreezer *cs_freezer; 4482c393a42Smrg void *linear; 4492c393a42Smrg FcSerializeBucket *buckets[FC_SERIALIZE_HASH_SIZE]; 4502c393a42Smrg} FcSerialize; 451898dab68Smrg 4522c393a42Smrg/* 4532c393a42Smrg * To map adobe glyph names to unicode values, a precomputed hash 4542c393a42Smrg * table is used 4552c393a42Smrg */ 4562c393a42Smrg 4572c393a42Smrgtypedef struct _FcGlyphName { 4582c393a42Smrg FcChar32 ucs; /* unicode value */ 4592c393a42Smrg FcChar8 name[1]; /* name extends beyond struct */ 4602c393a42Smrg} FcGlyphName; 4612c393a42Smrg 4622c393a42Smrg/* 4632c393a42Smrg * To perform case-insensitive string comparisons, a table 4642c393a42Smrg * is used which holds three different kinds of folding data. 465898dab68Smrg * 4662c393a42Smrg * The first is a range of upper case values mapping to a range 4672c393a42Smrg * of their lower case equivalents. Within each range, the offset 4682c393a42Smrg * between upper and lower case is constant. 4692c393a42Smrg * 4702c393a42Smrg * The second is a range of upper case values which are interleaved 4712c393a42Smrg * with their lower case equivalents. 472898dab68Smrg * 4732c393a42Smrg * The third is a set of raw unicode values mapping to a list 4742c393a42Smrg * of unicode values for comparison purposes. This allows conversion 4752c393a42Smrg * of ß to "ss" so that SS, ss and ß all match. A separate array 4762c393a42Smrg * holds the list of unicode values for each entry. 4772c393a42Smrg * 4782c393a42Smrg * These are packed into a single table. Using a binary search, 4792c393a42Smrg * the appropriate entry can be located. 4802c393a42Smrg */ 4812c393a42Smrg 4822c393a42Smrg#define FC_CASE_FOLD_RANGE 0 4832c393a42Smrg#define FC_CASE_FOLD_EVEN_ODD 1 4842c393a42Smrg#define FC_CASE_FOLD_FULL 2 4852c393a42Smrg 4862c393a42Smrgtypedef struct _FcCaseFold { 4872c393a42Smrg FcChar32 upper; 4882c393a42Smrg FcChar16 method : 2; 4892c393a42Smrg FcChar16 count : 14; 4902c393a42Smrg short offset; /* lower - upper for RANGE, table id for FULL */ 4912c393a42Smrg} FcCaseFold; 4922c393a42Smrg 4932c393a42Smrg#define FC_MAX_FILE_LEN 4096 4942c393a42Smrg 4952c393a42Smrg#define FC_CACHE_MAGIC_MMAP 0xFC02FC04 4962c393a42Smrg#define FC_CACHE_MAGIC_ALLOC 0xFC02FC05 4972c393a42Smrg 4982c393a42Smrgstruct _FcAtomic { 4992c393a42Smrg FcChar8 *file; /* original file name */ 5002c393a42Smrg FcChar8 *new; /* temp file name -- write data here */ 5012c393a42Smrg FcChar8 *lck; /* lockfile name (used for locking) */ 5022c393a42Smrg FcChar8 *tmp; /* tmpfile name (used for locking) */ 5032c393a42Smrg}; 5042c393a42Smrg 5052c393a42Smrgstruct _FcConfig { 5062c393a42Smrg /* 5072c393a42Smrg * File names loaded from the configuration -- saved here as the 5082c393a42Smrg * cache file must be consulted before the directories are scanned, 5092c393a42Smrg * and those directives may occur in any order 5102c393a42Smrg */ 5112c393a42Smrg FcStrSet *configDirs; /* directories to scan for fonts */ 5122c393a42Smrg /* 5132c393a42Smrg * List of directories containing fonts, 514898dab68Smrg * built by recursively scanning the set 5152c393a42Smrg * of configured directories 5162c393a42Smrg */ 5172c393a42Smrg FcStrSet *fontDirs; 5182c393a42Smrg /* 5192c393a42Smrg * List of directories containing cache files. 5202c393a42Smrg */ 5212c393a42Smrg FcStrSet *cacheDirs; 5222c393a42Smrg /* 5232c393a42Smrg * Names of all of the configuration files used 5242c393a42Smrg * to create this configuration 5252c393a42Smrg */ 5262c393a42Smrg FcStrSet *configFiles; /* config files loaded */ 5272c393a42Smrg /* 5282c393a42Smrg * Substitution instructions for patterns and fonts; 5292c393a42Smrg * maxObjects is used to allocate appropriate intermediate storage 5302c393a42Smrg * while performing a whole set of substitutions 5311887081fSmrg * 5321887081fSmrg * 0.. substitutions for patterns 5331887081fSmrg * 1.. substitutions for fonts 5341887081fSmrg * 2.. substitutions for scanned fonts 5352c393a42Smrg */ 5361887081fSmrg FcPtrList *subst[FcMatchKindEnd]; 5372c393a42Smrg int maxObjects; /* maximum number of tests in all substs */ 5382c393a42Smrg /* 5392c393a42Smrg * List of patterns used to control font file selection 5402c393a42Smrg */ 5412c393a42Smrg FcStrSet *acceptGlobs; 5422c393a42Smrg FcStrSet *rejectGlobs; 5432c393a42Smrg FcFontSet *acceptPatterns; 5442c393a42Smrg FcFontSet *rejectPatterns; 5452c393a42Smrg /* 5462c393a42Smrg * The set of fonts loaded from the listed directories; the 5472c393a42Smrg * order within the set does not determine the font selection, 5482c393a42Smrg * except in the case of identical matches in which case earlier fonts 5492c393a42Smrg * match preferrentially 5502c393a42Smrg */ 5512c393a42Smrg FcFontSet *fonts[FcSetApplication + 1]; 5522c393a42Smrg /* 5532c393a42Smrg * Fontconfig can periodically rescan the system configuration 5542c393a42Smrg * and font directories. This rescanning occurs when font 5552c393a42Smrg * listing requests are made, but no more often than rescanInterval 5562c393a42Smrg * seconds apart. 5572c393a42Smrg */ 5582c393a42Smrg time_t rescanTime; /* last time information was scanned */ 5592c393a42Smrg int rescanInterval; /* interval between scans */ 5600d39df38Smrg 5615e61939bSmrg FcRef ref; /* reference count */ 5620d39df38Smrg 5635e61939bSmrg FcExprPage *expr_pool; /* pool of FcExpr's */ 564898dab68Smrg 5655e61939bSmrg FcChar8 *sysRoot; /* override the system root directory */ 5661887081fSmrg FcStrSet *availConfigFiles; /* config files available */ 5671887081fSmrg FcPtrList *rulesetList; /* List of rulesets being installed */ 5681887081fSmrg FcHashTable *uuid_table; /* UUID table for cachedirs */ 5695e61939bSmrg}; 5702c393a42Smrg 5712c393a42Smrgtypedef struct _FcFileTime { 5722c393a42Smrg time_t time; 5732c393a42Smrg FcBool set; 5742c393a42Smrg} FcFileTime; 5752c393a42Smrg 5762c393a42Smrgtypedef struct _FcCharMap FcCharMap; 5772c393a42Smrg 578898dab68Smrgtypedef struct _FcStatFS FcStatFS; 579898dab68Smrg 580898dab68Smrgstruct _FcStatFS { 581898dab68Smrg FcBool is_remote_fs; 582898dab68Smrg FcBool is_mtime_broken; 583898dab68Smrg}; 584898dab68Smrg 5855e61939bSmrgtypedef struct _FcValuePromotionBuffer FcValuePromotionBuffer; 5865e61939bSmrg 5875e61939bSmrgstruct _FcValuePromotionBuffer { 5885e61939bSmrg union { 5895e61939bSmrg double d; 5905e61939bSmrg int i; 5915e61939bSmrg long l; 5925e61939bSmrg char c[256]; /* Enlarge as needed */ 5935e61939bSmrg } u; 5945e61939bSmrg}; 5955e61939bSmrg 5962c393a42Smrg/* fccache.c */ 5972c393a42Smrg 5982c393a42SmrgFcPrivate FcCache * 5992c393a42SmrgFcDirCacheScan (const FcChar8 *dir, FcConfig *config); 6002c393a42Smrg 6012c393a42SmrgFcPrivate FcCache * 6022c393a42SmrgFcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs); 6032c393a42Smrg 604b2a52337SmrgFcPrivate FcCache * 605b2a52337SmrgFcDirCacheRebuild (FcCache *cache, struct stat *dir_stat, FcStrSet *dirs); 606b2a52337Smrg 6072c393a42SmrgFcPrivate FcBool 6082c393a42SmrgFcDirCacheWrite (FcCache *cache, FcConfig *config); 609898dab68Smrg 610898dab68SmrgFcPrivate FcBool 611898dab68SmrgFcDirCacheCreateTagFile (const FcChar8 *cache_dir); 612898dab68Smrg 6132c393a42SmrgFcPrivate void 6142c393a42SmrgFcCacheObjectReference (void *object); 6152c393a42Smrg 6162c393a42SmrgFcPrivate void 6172c393a42SmrgFcCacheObjectDereference (void *object); 6182c393a42Smrg 6191887081fSmrgFcPrivate void * 6201887081fSmrgFcCacheAllocate (FcCache *cache, size_t len); 6211887081fSmrg 6222c393a42SmrgFcPrivate void 6232c393a42SmrgFcCacheFini (void); 624898dab68Smrg 6251887081fSmrg 6262c393a42SmrgFcPrivate void 6272c393a42SmrgFcDirCacheReference (FcCache *cache, int nref); 6282c393a42Smrg 62918bd4a06SmrgFcPrivate int 63018bd4a06SmrgFcDirCacheLock (const FcChar8 *dir, 63118bd4a06Smrg FcConfig *config); 63218bd4a06Smrg 63318bd4a06SmrgFcPrivate void 63418bd4a06SmrgFcDirCacheUnlock (int fd); 63518bd4a06Smrg 6362c393a42Smrg/* fccfg.c */ 6372c393a42Smrg 6385e61939bSmrgFcPrivate FcBool 6395e61939bSmrgFcConfigInit (void); 6405e61939bSmrg 6415e61939bSmrgFcPrivate void 6425e61939bSmrgFcConfigFini (void); 6435e61939bSmrg 644898dab68SmrgFcPrivate FcChar8 * 645898dab68SmrgFcConfigXdgCacheHome (void); 646898dab68Smrg 647898dab68SmrgFcPrivate FcChar8 * 648898dab68SmrgFcConfigXdgConfigHome (void); 649898dab68Smrg 650898dab68SmrgFcPrivate FcChar8 * 651898dab68SmrgFcConfigXdgDataHome (void); 652898dab68Smrg 6530d39df38SmrgFcPrivate FcExpr * 6540d39df38SmrgFcConfigAllocExpr (FcConfig *config); 6550d39df38Smrg 6562c393a42SmrgFcPrivate FcBool 6572c393a42SmrgFcConfigAddConfigDir (FcConfig *config, 6582c393a42Smrg const FcChar8 *d); 6592c393a42Smrg 6602c393a42SmrgFcPrivate FcBool 6612c393a42SmrgFcConfigAddFontDir (FcConfig *config, 6622c393a42Smrg const FcChar8 *d); 6632c393a42Smrg 6642c393a42SmrgFcPrivate FcBool 6652c393a42SmrgFcConfigAddCacheDir (FcConfig *config, 6662c393a42Smrg const FcChar8 *d); 6672c393a42Smrg 6682c393a42SmrgFcPrivate FcBool 6692c393a42SmrgFcConfigAddConfigFile (FcConfig *config, 6702c393a42Smrg const FcChar8 *f); 6712c393a42Smrg 6722c393a42SmrgFcPrivate FcBool 6732c393a42SmrgFcConfigAddBlank (FcConfig *config, 6742c393a42Smrg FcChar32 blank); 6752c393a42Smrg 676d91dd368SmrgFcBool 677d91dd368SmrgFcConfigAddRule (FcConfig *config, 678d91dd368Smrg FcRule *rule, 6792c393a42Smrg FcMatchKind kind); 6802c393a42Smrg 6812c393a42SmrgFcPrivate void 6822c393a42SmrgFcConfigSetFonts (FcConfig *config, 6832c393a42Smrg FcFontSet *fonts, 6842c393a42Smrg FcSetName set); 6852c393a42Smrg 6862c393a42SmrgFcPrivate FcBool 6872c393a42SmrgFcConfigCompareValue (const FcValue *m, 688d91dd368Smrg unsigned int op_, 6892c393a42Smrg const FcValue *v); 6902c393a42Smrg 6912c393a42SmrgFcPrivate FcBool 6922c393a42SmrgFcConfigGlobAdd (FcConfig *config, 6932c393a42Smrg const FcChar8 *glob, 6942c393a42Smrg FcBool accept); 6952c393a42Smrg 6962c393a42SmrgFcPrivate FcBool 6972c393a42SmrgFcConfigAcceptFilename (FcConfig *config, 6982c393a42Smrg const FcChar8 *filename); 6992c393a42Smrg 7002c393a42SmrgFcPrivate FcBool 7012c393a42SmrgFcConfigPatternsAdd (FcConfig *config, 7022c393a42Smrg FcPattern *pattern, 7032c393a42Smrg FcBool accept); 7042c393a42Smrg 7052c393a42SmrgFcPrivate FcBool 7062c393a42SmrgFcConfigAcceptFont (FcConfig *config, 7072c393a42Smrg const FcPattern *font); 7082c393a42Smrg 7092c393a42SmrgFcPrivate FcFileTime 7102c393a42SmrgFcConfigModifiedTime (FcConfig *config); 7112c393a42Smrg 7122c393a42SmrgFcPrivate FcBool 713898dab68SmrgFcConfigAddCache (FcConfig *config, FcCache *cache, 7141887081fSmrg FcSetName set, FcStrSet *dirSet, FcChar8 *forDir); 7151887081fSmrg 7161887081fSmrgFcPrivate FcRuleSet * 7171887081fSmrgFcRuleSetCreate (const FcChar8 *name); 7181887081fSmrg 7191887081fSmrgFcPrivate void 7201887081fSmrgFcRuleSetDestroy (FcRuleSet *rs); 7211887081fSmrg 7221887081fSmrgFcPrivate void 7231887081fSmrgFcRuleSetReference (FcRuleSet *rs); 7241887081fSmrg 7251887081fSmrgFcPrivate void 7261887081fSmrgFcRuleSetEnable (FcRuleSet *rs, 7271887081fSmrg FcBool flag); 7281887081fSmrg 7291887081fSmrgFcPrivate void 7301887081fSmrgFcRuleSetAddDescription (FcRuleSet *rs, 7311887081fSmrg const FcChar8 *domain, 7321887081fSmrg const FcChar8 *description); 7331887081fSmrg 7341887081fSmrgFcPrivate int 7351887081fSmrgFcRuleSetAdd (FcRuleSet *rs, 7361887081fSmrg FcRule *rule, 7371887081fSmrg FcMatchKind kind); 7382c393a42Smrg 7392c393a42Smrg/* fcserialize.c */ 7402c393a42SmrgFcPrivate intptr_t 7412c393a42SmrgFcAlignSize (intptr_t size); 742898dab68Smrg 7432c393a42SmrgFcPrivate FcSerialize * 7442c393a42SmrgFcSerializeCreate (void); 7452c393a42Smrg 7462c393a42SmrgFcPrivate void 7472c393a42SmrgFcSerializeDestroy (FcSerialize *serialize); 7482c393a42Smrg 7492c393a42SmrgFcPrivate FcBool 7502c393a42SmrgFcSerializeAlloc (FcSerialize *serialize, const void *object, int size); 7512c393a42Smrg 7522c393a42SmrgFcPrivate intptr_t 7532c393a42SmrgFcSerializeReserve (FcSerialize *serialize, int size); 7542c393a42Smrg 7552c393a42SmrgFcPrivate intptr_t 7562c393a42SmrgFcSerializeOffset (FcSerialize *serialize, const void *object); 7572c393a42Smrg 7582c393a42SmrgFcPrivate void * 7592c393a42SmrgFcSerializePtr (FcSerialize *serialize, const void *object); 7602c393a42Smrg 7612c393a42SmrgFcPrivate FcBool 7622c393a42SmrgFcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l); 7632c393a42Smrg 7642c393a42SmrgFcPrivate FcLangSet * 7652c393a42SmrgFcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l); 7662c393a42Smrg 7672c393a42Smrg/* fccharset.c */ 76818bd4a06SmrgFcPrivate FcCharSet * 76918bd4a06SmrgFcCharSetPromote (FcValuePromotionBuffer *vbuf); 77018bd4a06Smrg 7712c393a42SmrgFcPrivate void 7722c393a42SmrgFcLangCharSetPopulate (void); 7732c393a42Smrg 7742c393a42SmrgFcPrivate FcCharSetFreezer * 7752c393a42SmrgFcCharSetFreezerCreate (void); 7762c393a42Smrg 7772c393a42SmrgFcPrivate const FcCharSet * 7782c393a42SmrgFcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs); 7792c393a42Smrg 7802c393a42SmrgFcPrivate void 7812c393a42SmrgFcCharSetFreezerDestroy (FcCharSetFreezer *freezer); 7822c393a42Smrg 7832c393a42SmrgFcPrivate FcBool 7842c393a42SmrgFcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c); 7852c393a42Smrg 7862c393a42SmrgFcPrivate FcCharSet * 7872c393a42SmrgFcNameParseCharSet (FcChar8 *string); 7882c393a42Smrg 7890d39df38SmrgFcPrivate FcBool 7900d39df38SmrgFcNameUnparseValue (FcStrBuf *buf, 7910d39df38Smrg FcValue *v0, 7920d39df38Smrg FcChar8 *escape); 7930d39df38Smrg 7940d39df38SmrgFcPrivate FcBool 7950d39df38SmrgFcNameUnparseValueList (FcStrBuf *buf, 7960d39df38Smrg FcValueListPtr v, 7970d39df38Smrg FcChar8 *escape); 7980d39df38Smrg 7992c393a42SmrgFcPrivate FcCharLeaf * 8002c393a42SmrgFcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4); 8012c393a42Smrg 8022c393a42SmrgFcPrivate FcBool 8032c393a42SmrgFcCharSetSerializeAlloc(FcSerialize *serialize, const FcCharSet *cs); 8042c393a42Smrg 8052c393a42SmrgFcPrivate FcCharSet * 8062c393a42SmrgFcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs); 8072c393a42Smrg 8082c393a42SmrgFcPrivate FcChar16 * 8092c393a42SmrgFcCharSetGetNumbers(const FcCharSet *c); 8102c393a42Smrg 8115e61939bSmrg/* fccompat.c */ 8125e61939bSmrgFcPrivate int 8135e61939bSmrgFcOpen(const char *pathname, int flags, ...); 8145e61939bSmrg 8155e61939bSmrgFcPrivate int 8165e61939bSmrgFcMakeTempfile (char *template); 8175e61939bSmrg 8185e61939bSmrgFcPrivate int32_t 8195e61939bSmrgFcRandom (void); 8205e61939bSmrg 821d91dd368SmrgFcPrivate FcBool 822d91dd368SmrgFcMakeDirectory (const FcChar8 *dir); 823d91dd368Smrg 8241887081fSmrgFcPrivate ssize_t 8251887081fSmrgFcReadLink (const FcChar8 *pathname, 8261887081fSmrg FcChar8 *buf, 8271887081fSmrg size_t bufsiz); 8281887081fSmrg 8292c393a42Smrg/* fcdbg.c */ 8305e61939bSmrg 8315e61939bSmrgFcPrivate void 8325e61939bSmrgFcValuePrintFile (FILE *f, const FcValue v); 8335e61939bSmrg 8342c393a42SmrgFcPrivate void 835898dab68SmrgFcValuePrintWithPosition (const FcValue v, FcBool show_pos_mark); 836898dab68Smrg 837898dab68SmrgFcPrivate void 838898dab68SmrgFcValueListPrintWithPosition (FcValueListPtr l, const FcValueListPtr pos); 839898dab68Smrg 840898dab68SmrgFcPrivate void 841898dab68SmrgFcValueListPrint (FcValueListPtr l); 8422c393a42Smrg 8432c393a42SmrgFcPrivate void 8442c393a42SmrgFcLangSetPrint (const FcLangSet *ls); 8452c393a42Smrg 8462c393a42SmrgFcPrivate void 8472c393a42SmrgFcOpPrint (FcOp op); 8482c393a42Smrg 8492c393a42SmrgFcPrivate void 8502c393a42SmrgFcTestPrint (const FcTest *test); 8512c393a42Smrg 8522c393a42SmrgFcPrivate void 8532c393a42SmrgFcExprPrint (const FcExpr *expr); 8542c393a42Smrg 8552c393a42SmrgFcPrivate void 8562c393a42SmrgFcEditPrint (const FcEdit *edit); 8572c393a42Smrg 8582c393a42SmrgFcPrivate void 8591887081fSmrgFcRulePrint (const FcRule *rule); 8602c393a42Smrg 8612c393a42SmrgFcPrivate void 8622c393a42SmrgFcCharSetPrint (const FcCharSet *c); 863898dab68Smrg 86418bd4a06SmrgFcPrivate void 86518bd4a06SmrgFcPatternPrint2 (FcPattern *p1, FcPattern *p2, const FcObjectSet *os); 86618bd4a06Smrg 8672c393a42Smrgextern FcPrivate int FcDebugVal; 8682c393a42Smrg 8692c393a42Smrg#define FcDebug() (FcDebugVal) 8702c393a42Smrg 8712c393a42SmrgFcPrivate void 8722c393a42SmrgFcInitDebug (void); 8732c393a42Smrg 8742c393a42Smrg/* fcdefault.c */ 8752c393a42SmrgFcPrivate FcChar8 * 8762c393a42SmrgFcGetDefaultLang (void); 8772c393a42Smrg 8785e61939bSmrgFcPrivate FcChar8 * 8795e61939bSmrgFcGetPrgname (void); 8805e61939bSmrg 8815e61939bSmrgFcPrivate void 8825e61939bSmrgFcDefaultFini (void); 8835e61939bSmrg 8842c393a42Smrg/* fcdir.c */ 8852c393a42Smrg 8865e61939bSmrgFcPrivate FcBool 8875e61939bSmrgFcFileIsLink (const FcChar8 *file); 8885e61939bSmrg 889d91dd368SmrgFcPrivate FcBool 890d91dd368SmrgFcFileIsFile (const FcChar8 *file); 891d91dd368Smrg 8922c393a42SmrgFcPrivate FcBool 8932c393a42SmrgFcFileScanConfig (FcFontSet *set, 8942c393a42Smrg FcStrSet *dirs, 8952c393a42Smrg const FcChar8 *file, 8962c393a42Smrg FcConfig *config); 8972c393a42Smrg 8982c393a42SmrgFcPrivate FcBool 8992c393a42SmrgFcDirScanConfig (FcFontSet *set, 9002c393a42Smrg FcStrSet *dirs, 9012c393a42Smrg const FcChar8 *dir, 9022c393a42Smrg FcBool force, 9032c393a42Smrg FcConfig *config); 9042c393a42Smrg 9052c393a42Smrg/* fcfont.c */ 9062c393a42SmrgFcPrivate int 9072c393a42SmrgFcFontDebug (void); 9080d39df38Smrg 9092c393a42Smrg/* fcfs.c */ 9102c393a42Smrg 9112c393a42SmrgFcPrivate FcBool 9122c393a42SmrgFcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s); 9132c393a42Smrg 9142c393a42SmrgFcPrivate FcFontSet * 9152c393a42SmrgFcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s); 9162c393a42Smrg 917b2a52337SmrgFcPrivate FcFontSet * 918b2a52337SmrgFcFontSetDeserialize (const FcFontSet *set); 919b2a52337Smrg 9201887081fSmrg/* fcplist.c */ 9211887081fSmrgFcPrivate FcPtrList * 9221887081fSmrgFcPtrListCreate (FcDestroyFunc func); 9231887081fSmrg 9241887081fSmrgFcPrivate void 9251887081fSmrgFcPtrListDestroy (FcPtrList *list); 9261887081fSmrg 9271887081fSmrgFcPrivate void 9281887081fSmrgFcPtrListIterInit (const FcPtrList *list, 9291887081fSmrg FcPtrListIter *iter); 9301887081fSmrg 9311887081fSmrgFcPrivate void 9321887081fSmrgFcPtrListIterInitAtLast (FcPtrList *list, 9331887081fSmrg FcPtrListIter *iter); 9341887081fSmrg 9351887081fSmrgFcPrivate FcBool 9361887081fSmrgFcPtrListIterNext (const FcPtrList *list, 9371887081fSmrg FcPtrListIter *iter); 9381887081fSmrg 9391887081fSmrgFcPrivate FcBool 9401887081fSmrgFcPtrListIterIsValid (const FcPtrList *list, 9411887081fSmrg const FcPtrListIter *iter); 9421887081fSmrg 9431887081fSmrgFcPrivate void * 9441887081fSmrgFcPtrListIterGetValue (const FcPtrList *list, 9451887081fSmrg const FcPtrListIter *iter); 9461887081fSmrg 9471887081fSmrgFcPrivate FcBool 9481887081fSmrgFcPtrListIterAdd (FcPtrList *list, 9491887081fSmrg FcPtrListIter *iter, 9501887081fSmrg void *data); 9511887081fSmrg 9521887081fSmrgFcPrivate FcBool 9531887081fSmrgFcPtrListIterRemove (FcPtrList *list, 9541887081fSmrg FcPtrListIter *iter); 9551887081fSmrg 9562c393a42Smrg/* fcinit.c */ 9575e61939bSmrgFcPrivate FcConfig * 9585e61939bSmrgFcInitLoadOwnConfig (FcConfig *config); 9592c393a42Smrg 9605e61939bSmrgFcPrivate FcConfig * 9615e61939bSmrgFcInitLoadOwnConfigAndFonts (FcConfig *config); 9622c393a42Smrg 9635e61939bSmrg/* fcxml.c */ 96418bd4a06SmrgFcPrivate void 96518bd4a06SmrgFcConfigPathFini (void); 96618bd4a06Smrg 9672c393a42SmrgFcPrivate void 9685e61939bSmrgFcTestDestroy (FcTest *test); 9692c393a42Smrg 9702c393a42SmrgFcPrivate void 9715e61939bSmrgFcEditDestroy (FcEdit *e); 9722c393a42Smrg 973d91dd368Smrgvoid 974d91dd368SmrgFcRuleDestroy (FcRule *rule); 975d91dd368Smrg 9762c393a42Smrg/* fclang.c */ 9772c393a42SmrgFcPrivate FcLangSet * 978898dab68SmrgFcFreeTypeLangSet (const FcCharSet *charset, 9792c393a42Smrg const FcChar8 *exclusiveLang); 9802c393a42Smrg 9812c393a42SmrgFcPrivate FcLangResult 9822c393a42SmrgFcLangCompare (const FcChar8 *s1, const FcChar8 *s2); 983898dab68Smrg 9842c393a42SmrgFcPrivate FcLangSet * 9855e61939bSmrgFcLangSetPromote (const FcChar8 *lang, FcValuePromotionBuffer *buf); 9862c393a42Smrg 9872c393a42SmrgFcPrivate FcLangSet * 9882c393a42SmrgFcNameParseLangSet (const FcChar8 *string); 9892c393a42Smrg 9902c393a42SmrgFcPrivate FcBool 9912c393a42SmrgFcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls); 9922c393a42Smrg 9932c393a42SmrgFcPrivate FcChar8 * 9942c393a42SmrgFcNameUnparseEscaped (FcPattern *pat, FcBool escape); 9952c393a42Smrg 9961887081fSmrgFcPrivate FcBool 9971887081fSmrgFcConfigParseOnly (FcConfig *config, 9981887081fSmrg const FcChar8 *name, 9991887081fSmrg FcBool complain); 10001887081fSmrg 10011887081fSmrgFcPrivate FcChar8 * 10021887081fSmrgFcConfigRealFilename (FcConfig *config, 10031887081fSmrg const FcChar8 *url); 10041887081fSmrg 10052c393a42Smrg/* fclist.c */ 10062c393a42Smrg 10072c393a42SmrgFcPrivate FcBool 10082c393a42SmrgFcListPatternMatchAny (const FcPattern *p, 10092c393a42Smrg const FcPattern *font); 10102c393a42Smrg 10112c393a42Smrg/* fcmatch.c */ 10122c393a42Smrg 10132c393a42Smrg/* fcname.c */ 10142c393a42Smrg 10155e61939bSmrgenum { 10165e61939bSmrg FC_INVALID_OBJECT = 0, 10175e61939bSmrg#define FC_OBJECT(NAME, Type, Cmp) FC_##NAME##_OBJECT, 10185e61939bSmrg#include "fcobjs.h" 10195e61939bSmrg#undef FC_OBJECT 10205e61939bSmrg FC_ONE_AFTER_MAX_BASE_OBJECT 10215e61939bSmrg#define FC_MAX_BASE_OBJECT (FC_ONE_AFTER_MAX_BASE_OBJECT - 1) 10225e61939bSmrg}; 10232c393a42Smrg 10242c393a42SmrgFcPrivate FcBool 10252c393a42SmrgFcNameBool (const FcChar8 *v, FcBool *result); 10262c393a42Smrg 10272c393a42SmrgFcPrivate FcBool 10282c393a42SmrgFcObjectValidType (FcObject object, FcType type); 10292c393a42Smrg 10302c393a42SmrgFcPrivate FcObject 10312c393a42SmrgFcObjectFromName (const char * name); 10322c393a42Smrg 10332c393a42SmrgFcPrivate const char * 10342c393a42SmrgFcObjectName (FcObject object); 10352c393a42Smrg 10360d39df38SmrgFcPrivate FcObjectSet * 10370d39df38SmrgFcObjectGetSet (void); 10380d39df38Smrg 10392c393a42Smrg#define FcObjectCompare(a, b) ((int) a - (int) b) 10402c393a42Smrg 10412c393a42Smrg/* fcpat.c */ 10422c393a42Smrg 10432c393a42SmrgFcPrivate FcValue 10442c393a42SmrgFcValueCanonicalize (const FcValue *v); 10452c393a42Smrg 1046898dab68SmrgFcPrivate FcValueListPtr 1047898dab68SmrgFcValueListCreate (void); 1048898dab68Smrg 10492c393a42SmrgFcPrivate void 10502c393a42SmrgFcValueListDestroy (FcValueListPtr l); 10512c393a42Smrg 1052898dab68SmrgFcPrivate FcValueListPtr 1053898dab68SmrgFcValueListPrepend (FcValueListPtr vallist, 1054898dab68Smrg FcValue value, 1055898dab68Smrg FcValueBinding binding); 1056898dab68Smrg 1057898dab68SmrgFcPrivate FcValueListPtr 1058898dab68SmrgFcValueListAppend (FcValueListPtr vallist, 1059898dab68Smrg FcValue value, 1060898dab68Smrg FcValueBinding binding); 1061898dab68Smrg 1062898dab68SmrgFcPrivate FcValueListPtr 1063898dab68SmrgFcValueListDuplicate(FcValueListPtr orig); 1064898dab68Smrg 10652c393a42SmrgFcPrivate FcPatternElt * 10662c393a42SmrgFcPatternObjectFindElt (const FcPattern *p, FcObject object); 10672c393a42Smrg 10682c393a42SmrgFcPrivate FcPatternElt * 10692c393a42SmrgFcPatternObjectInsertElt (FcPattern *p, FcObject object); 10702c393a42Smrg 1071898dab68SmrgFcPrivate FcBool 1072898dab68SmrgFcPatternObjectListAdd (FcPattern *p, 1073898dab68Smrg FcObject object, 1074898dab68Smrg FcValueListPtr list, 1075898dab68Smrg FcBool append); 1076898dab68Smrg 10772c393a42SmrgFcPrivate FcBool 10782c393a42SmrgFcPatternObjectAddWithBinding (FcPattern *p, 10792c393a42Smrg FcObject object, 10802c393a42Smrg FcValue value, 10812c393a42Smrg FcValueBinding binding, 10822c393a42Smrg FcBool append); 10832c393a42Smrg 10842c393a42SmrgFcPrivate FcBool 10852c393a42SmrgFcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append); 1086898dab68Smrg 10872c393a42SmrgFcPrivate FcBool 10882c393a42SmrgFcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append); 1089898dab68Smrg 10901887081fSmrgFcPrivate FcResult 10911887081fSmrgFcPatternObjectGetWithBinding (const FcPattern *p, FcObject object, int id, FcValue *v, FcValueBinding *b); 10921887081fSmrg 10932c393a42SmrgFcPrivate FcResult 10942c393a42SmrgFcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v); 1095898dab68Smrg 10962c393a42SmrgFcPrivate FcBool 10972c393a42SmrgFcPatternObjectDel (FcPattern *p, FcObject object); 10982c393a42Smrg 10992c393a42SmrgFcPrivate FcBool 11002c393a42SmrgFcPatternObjectRemove (FcPattern *p, FcObject object, int id); 11012c393a42Smrg 11022c393a42SmrgFcPrivate FcBool 11032c393a42SmrgFcPatternObjectAddInteger (FcPattern *p, FcObject object, int i); 11042c393a42Smrg 11052c393a42SmrgFcPrivate FcBool 11062c393a42SmrgFcPatternObjectAddDouble (FcPattern *p, FcObject object, double d); 11072c393a42Smrg 11082c393a42SmrgFcPrivate FcBool 11092c393a42SmrgFcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s); 11102c393a42Smrg 11112c393a42SmrgFcPrivate FcBool 11122c393a42SmrgFcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s); 11132c393a42Smrg 11142c393a42SmrgFcPrivate FcBool 11152c393a42SmrgFcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c); 11162c393a42Smrg 11172c393a42SmrgFcPrivate FcBool 11182c393a42SmrgFcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b); 11192c393a42Smrg 11202c393a42SmrgFcPrivate FcBool 11212c393a42SmrgFcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls); 11222c393a42Smrg 112318bd4a06SmrgFcPrivate FcBool 112418bd4a06SmrgFcPatternObjectAddRange (FcPattern *p, FcObject object, const FcRange *r); 112518bd4a06Smrg 11262c393a42SmrgFcPrivate FcResult 11272c393a42SmrgFcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i); 11282c393a42Smrg 11292c393a42SmrgFcPrivate FcResult 11302c393a42SmrgFcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d); 11312c393a42Smrg 11322c393a42SmrgFcPrivate FcResult 11332c393a42SmrgFcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 ** s); 11342c393a42Smrg 11352c393a42SmrgFcPrivate FcResult 11362c393a42SmrgFcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s); 11372c393a42Smrg 11382c393a42SmrgFcPrivate FcResult 11392c393a42SmrgFcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c); 11402c393a42Smrg 11412c393a42SmrgFcPrivate FcResult 11422c393a42SmrgFcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b); 11432c393a42Smrg 11442c393a42SmrgFcPrivate FcResult 11452c393a42SmrgFcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls); 11462c393a42Smrg 114718bd4a06SmrgFcPrivate FcResult 114818bd4a06SmrgFcPatternObjectGetRange (const FcPattern *p, FcObject object, int id, FcRange **r); 114918bd4a06Smrg 11502c393a42SmrgFcPrivate FcBool 11512c393a42SmrgFcPatternAppend (FcPattern *p, FcPattern *s); 11522c393a42Smrg 115318bd4a06SmrgFcPrivate int 115418bd4a06SmrgFcPatternPosition (const FcPattern *p, const char *object); 115518bd4a06Smrg 11561887081fSmrgFcPrivate FcBool 11571887081fSmrgFcPatternFindObjectIter (const FcPattern *pat, FcPatternIter *iter, FcObject object); 11581887081fSmrg 11591887081fSmrgFcPrivate FcObject 11601887081fSmrgFcPatternIterGetObjectId (const FcPattern *pat, FcPatternIter *iter); 11611887081fSmrg 11621887081fSmrgFcPrivate FcValueListPtr 11631887081fSmrgFcPatternIterGetValues (const FcPattern *pat, FcPatternIter *iter); 11641887081fSmrg 11651887081fSmrgFcPrivate FcPattern * 11661887081fSmrgFcPatternCacheRewriteFile (const FcPattern *pat, FcCache *cache, const FcChar8 *relocated_font_file); 11671887081fSmrg 11682c393a42SmrgFcPrivate FcChar32 11692c393a42SmrgFcStringHash (const FcChar8 *s); 11702c393a42Smrg 11712c393a42SmrgFcPrivate FcBool 11722c393a42SmrgFcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat); 11732c393a42Smrg 11742c393a42SmrgFcPrivate FcPattern * 11752c393a42SmrgFcPatternSerialize (FcSerialize *serialize, const FcPattern *pat); 11762c393a42Smrg 11772c393a42SmrgFcPrivate FcBool 11782c393a42SmrgFcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat); 11792c393a42Smrg 11802c393a42SmrgFcPrivate FcValueList * 11812c393a42SmrgFcValueListSerialize (FcSerialize *serialize, const FcValueList *pat); 11822c393a42Smrg 11832c393a42Smrg/* fcrender.c */ 11842c393a42Smrg 11852c393a42Smrg/* fcmatrix.c */ 11862c393a42Smrg 11872c393a42Smrgextern FcPrivate const FcMatrix FcIdentityMatrix; 11882c393a42Smrg 11892c393a42SmrgFcPrivate void 11902c393a42SmrgFcMatrixFree (FcMatrix *mat); 11912c393a42Smrg 119218bd4a06Smrg/* fcrange.c */ 119318bd4a06Smrg 119418bd4a06SmrgFcPrivate FcRange * 119518bd4a06SmrgFcRangePromote (double v, FcValuePromotionBuffer *vbuf); 119618bd4a06Smrg 119718bd4a06SmrgFcPrivate FcBool 119818bd4a06SmrgFcRangeIsInRange (const FcRange *a, const FcRange *b); 119918bd4a06Smrg 120018bd4a06SmrgFcPrivate FcBool 120118bd4a06SmrgFcRangeCompare (FcOp op, const FcRange *a, const FcRange *b); 120218bd4a06Smrg 120318bd4a06SmrgFcPrivate FcChar32 120418bd4a06SmrgFcRangeHash (const FcRange *r); 120518bd4a06Smrg 120618bd4a06SmrgFcPrivate FcBool 120718bd4a06SmrgFcRangeSerializeAlloc (FcSerialize *serialize, const FcRange *r); 120818bd4a06Smrg 120918bd4a06SmrgFcPrivate FcRange * 121018bd4a06SmrgFcRangeSerialize (FcSerialize *serialize, const FcRange *r); 121118bd4a06Smrg 1212898dab68Smrg/* fcstat.c */ 1213898dab68Smrg 1214898dab68SmrgFcPrivate int 1215898dab68SmrgFcStat (const FcChar8 *file, struct stat *statb); 1216898dab68Smrg 1217898dab68SmrgFcPrivate int 1218898dab68SmrgFcStatChecksum (const FcChar8 *file, struct stat *statb); 1219898dab68Smrg 1220898dab68SmrgFcPrivate FcBool 1221898dab68SmrgFcIsFsMmapSafe (int fd); 1222898dab68Smrg 1223898dab68SmrgFcPrivate FcBool 1224898dab68SmrgFcIsFsMtimeBroken (const FcChar8 *dir); 1225898dab68Smrg 12262c393a42Smrg/* fcstr.c */ 122718bd4a06SmrgFcPrivate FcStrSet * 122818bd4a06SmrgFcStrSetCreateEx (unsigned int control); 122918bd4a06Smrg 1230898dab68SmrgFcPrivate FcBool 1231898dab68SmrgFcStrSetAddLangs (FcStrSet *strs, const char *languages); 1232898dab68Smrg 12332c393a42SmrgFcPrivate void 12342c393a42SmrgFcStrSetSort (FcStrSet * set); 12352c393a42Smrg 12362c393a42SmrgFcPrivate void 12372c393a42SmrgFcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size); 12382c393a42Smrg 12392c393a42SmrgFcPrivate void 12402c393a42SmrgFcStrBufDestroy (FcStrBuf *buf); 12412c393a42Smrg 12422c393a42SmrgFcPrivate FcChar8 * 12432c393a42SmrgFcStrBufDone (FcStrBuf *buf); 12442c393a42Smrg 12450d39df38SmrgFcPrivate FcChar8 * 12460d39df38SmrgFcStrBufDoneStatic (FcStrBuf *buf); 12470d39df38Smrg 12482c393a42SmrgFcPrivate FcBool 12492c393a42SmrgFcStrBufChar (FcStrBuf *buf, FcChar8 c); 12502c393a42Smrg 12512c393a42SmrgFcPrivate FcBool 12522c393a42SmrgFcStrBufString (FcStrBuf *buf, const FcChar8 *s); 12532c393a42Smrg 12542c393a42SmrgFcPrivate FcBool 12552c393a42SmrgFcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len); 12562c393a42Smrg 12572c393a42SmrgFcPrivate int 12582c393a42SmrgFcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2); 12592c393a42Smrg 12605e61939bSmrgFcPrivate int 12615e61939bSmrgFcStrCmpIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *delims); 12625e61939bSmrg 12632c393a42SmrgFcPrivate const FcChar8 * 12642c393a42SmrgFcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2); 12652c393a42Smrg 12662c393a42SmrgFcPrivate const FcChar8 * 12672c393a42SmrgFcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2); 12682c393a42Smrg 12692c393a42SmrgFcPrivate const FcChar8 * 12702c393a42SmrgFcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2); 12712c393a42Smrg 12725e61939bSmrgFcPrivate int 12735e61939bSmrgFcStrMatchIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *delims); 12745e61939bSmrg 12755e61939bSmrgFcPrivate FcBool 12765e61939bSmrgFcStrGlobMatch (const FcChar8 *glob, 12775e61939bSmrg const FcChar8 *string); 12785e61939bSmrg 12792c393a42SmrgFcPrivate FcBool 12802c393a42SmrgFcStrUsesHome (const FcChar8 *s); 12812c393a42Smrg 12821887081fSmrgFcPrivate FcBool 12831887081fSmrgFcStrIsAbsoluteFilename (const FcChar8 *s); 12841887081fSmrg 12855e61939bSmrgFcPrivate FcChar8 * 12865e61939bSmrgFcStrBuildFilename (const FcChar8 *path, 12875e61939bSmrg ...); 12885e61939bSmrg 12892c393a42SmrgFcPrivate FcChar8 * 12902c393a42SmrgFcStrLastSlash (const FcChar8 *path); 12912c393a42Smrg 12922c393a42SmrgFcPrivate FcChar32 12932c393a42SmrgFcStrHashIgnoreCase (const FcChar8 *s); 12942c393a42Smrg 12952c393a42SmrgFcPrivate FcChar8 * 12962c393a42SmrgFcStrCanonFilename (const FcChar8 *s); 12972c393a42Smrg 12982c393a42SmrgFcPrivate FcBool 12992c393a42SmrgFcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str); 13002c393a42Smrg 13012c393a42SmrgFcPrivate FcChar8 * 13022c393a42SmrgFcStrSerialize (FcSerialize *serialize, const FcChar8 *str); 13032c393a42Smrg 13045e61939bSmrg/* fcobjs.c */ 13055e61939bSmrg 130618bd4a06SmrgFcPrivate void 130718bd4a06SmrgFcObjectFini (void); 130818bd4a06Smrg 13095e61939bSmrgFcPrivate FcObject 13105e61939bSmrgFcObjectLookupIdByName (const char *str); 13115e61939bSmrg 13125e61939bSmrgFcPrivate FcObject 13135e61939bSmrgFcObjectLookupBuiltinIdByName (const char *str); 13145e61939bSmrg 13155e61939bSmrgFcPrivate const char * 13165e61939bSmrgFcObjectLookupOtherNameById (FcObject id); 13175e61939bSmrg 13185e61939bSmrgFcPrivate const FcObjectType * 13195e61939bSmrgFcObjectLookupOtherTypeById (FcObject id); 13205e61939bSmrg 13215e61939bSmrgFcPrivate const FcObjectType * 13225e61939bSmrgFcObjectLookupOtherTypeByName (const char *str); 13235e61939bSmrg 13241887081fSmrg/* fchash.c */ 13251887081fSmrgFcPrivate FcBool 13261887081fSmrgFcHashStrCopy (const void *src, 13271887081fSmrg void **dest); 13281887081fSmrg 13291887081fSmrgFcPrivate FcBool 13301887081fSmrgFcHashUuidCopy (const void *src, 13311887081fSmrg void **dest); 13321887081fSmrg 13331887081fSmrgFcPrivate void 13341887081fSmrgFcHashUuidFree (void *data); 13351887081fSmrg 13361887081fSmrgFcPrivate FcHashTable * 13371887081fSmrgFcHashTableCreate (FcHashFunc hash_func, 13381887081fSmrg FcCompareFunc compare_func, 13391887081fSmrg FcCopyFunc key_copy_func, 13401887081fSmrg FcCopyFunc value_copy_func, 13411887081fSmrg FcDestroyFunc key_destroy_func, 13421887081fSmrg FcDestroyFunc value_destroy_func); 13431887081fSmrg 13441887081fSmrgFcPrivate void 13451887081fSmrgFcHashTableDestroy (FcHashTable *table); 13461887081fSmrg 13471887081fSmrgFcPrivate FcBool 13481887081fSmrgFcHashTableFind (FcHashTable *table, 13491887081fSmrg const void *key, 13501887081fSmrg void **value); 13511887081fSmrg 13521887081fSmrgFcPrivate FcBool 13531887081fSmrgFcHashTableAdd (FcHashTable *table, 13541887081fSmrg void *key, 13551887081fSmrg void *value); 13561887081fSmrg 13571887081fSmrgFcPrivate FcBool 13581887081fSmrgFcHashTableReplace (FcHashTable *table, 13591887081fSmrg void *key, 13601887081fSmrg void *value); 13611887081fSmrg 13621887081fSmrgFcPrivate FcBool 13631887081fSmrgFcHashTableRemove (FcHashTable *table, 13641887081fSmrg void *key); 13651887081fSmrg 13662c393a42Smrg#endif /* _FC_INT_H_ */ 1367