fcint.h revision 18bd4a06
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)) 1040d39df38Smrg#define FC_ABS(a) ((a) < 0 ? -(a) : (a)) 1052c393a42Smrg 1062c393a42Smrg/* slim_internal.h */ 1072c393a42Smrg#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun) 1082c393a42Smrg#define FcPrivate __attribute__((__visibility__("hidden"))) 1092c393a42Smrg#define HAVE_GNUC_ATTRIBUTE 1 1102c393a42Smrg#include "fcalias.h" 1112c393a42Smrg#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) 1122c393a42Smrg#define FcPrivate __hidden 1132c393a42Smrg#else /* not gcc >= 3.3 and not Sun Studio >= 8 */ 1142c393a42Smrg#define FcPrivate 1152c393a42Smrg#endif 1162c393a42Smrg 1175e61939bSmrgFC_ASSERT_STATIC (sizeof (FcRef) == sizeof (int)); 1185e61939bSmrg 1192c393a42Smrgtypedef enum _FcValueBinding { 120d91dd368Smrg FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame, 121d91dd368Smrg /* to make sure sizeof (FcValueBinding) == 4 even with -fshort-enums */ 122d91dd368Smrg FcValueBindingEnd = INT_MAX 1232c393a42Smrg} FcValueBinding; 1242c393a42Smrg 1255e61939bSmrg#define FcStrdup(s) ((FcChar8 *) strdup ((const char *) (s))) 1265e61939bSmrg#define FcFree(s) (free ((FcChar8 *) (s))) 1275e61939bSmrg 1282c393a42Smrg/* 1292c393a42Smrg * Serialized data structures use only offsets instead of pointers 1302c393a42Smrg * A low bit of 1 indicates an offset. 1312c393a42Smrg */ 132898dab68Smrg 1332c393a42Smrg/* Is the provided pointer actually an offset? */ 1342c393a42Smrg#define FcIsEncodedOffset(p) ((((intptr_t) (p)) & 1) != 0) 1352c393a42Smrg 1362c393a42Smrg/* Encode offset in a pointer of type t */ 1372c393a42Smrg#define FcOffsetEncode(o,t) ((t *) ((o) | 1)) 1382c393a42Smrg 1392c393a42Smrg/* Decode a pointer into an offset */ 1402c393a42Smrg#define FcOffsetDecode(p) (((intptr_t) (p)) & ~1) 1412c393a42Smrg 1422c393a42Smrg/* Compute pointer offset */ 1432c393a42Smrg#define FcPtrToOffset(b,p) ((intptr_t) (p) - (intptr_t) (b)) 1442c393a42Smrg 1452c393a42Smrg/* Given base address, offset and type, return a pointer */ 1462c393a42Smrg#define FcOffsetToPtr(b,o,t) ((t *) ((intptr_t) (b) + (o))) 1472c393a42Smrg 1482c393a42Smrg/* Given base address, encoded offset and type, return a pointer */ 1492c393a42Smrg#define FcEncodedOffsetToPtr(b,p,t) FcOffsetToPtr(b,FcOffsetDecode(p),t) 1502c393a42Smrg 1512c393a42Smrg/* Given base address, pointer and type, return an encoded offset */ 1522c393a42Smrg#define FcPtrToEncodedOffset(b,p,t) FcOffsetEncode(FcPtrToOffset(b,p),t) 1532c393a42Smrg 1542c393a42Smrg/* Given a structure, offset member and type, return pointer */ 1552c393a42Smrg#define FcOffsetMember(s,m,t) FcOffsetToPtr(s,(s)->m,t) 1562c393a42Smrg 1572c393a42Smrg/* Given a structure, encoded offset member and type, return pointer to member */ 1582c393a42Smrg#define FcEncodedOffsetMember(s,m,t) FcOffsetToPtr(s,FcOffsetDecode((s)->m), t) 1592c393a42Smrg 1602c393a42Smrg/* Given a structure, member and type, convert the member to a pointer */ 1612c393a42Smrg#define FcPointerMember(s,m,t) (FcIsEncodedOffset((s)->m) ? \ 1622c393a42Smrg FcEncodedOffsetMember (s,m,t) : \ 1632c393a42Smrg (s)->m) 1642c393a42Smrg 1652c393a42Smrg/* 1662c393a42Smrg * Serialized values may hold strings, charsets and langsets as pointers, 1672c393a42Smrg * unfortunately FcValue is an exposed type so we can't just always use 1682c393a42Smrg * offsets 1692c393a42Smrg */ 1702c393a42Smrg#define FcValueString(v) FcPointerMember(v,u.s,FcChar8) 1712c393a42Smrg#define FcValueCharSet(v) FcPointerMember(v,u.c,const FcCharSet) 1722c393a42Smrg#define FcValueLangSet(v) FcPointerMember(v,u.l,const FcLangSet) 17318bd4a06Smrg#define FcValueRange(v) FcPointerMember(v,u.r,const FcRange) 1742c393a42Smrg 1752c393a42Smrgtypedef struct _FcValueList *FcValueListPtr; 1762c393a42Smrg 1772c393a42Smrgtypedef struct _FcValueList { 1782c393a42Smrg struct _FcValueList *next; 1792c393a42Smrg FcValue value; 1802c393a42Smrg FcValueBinding binding; 1812c393a42Smrg} FcValueList; 1822c393a42Smrg 1832c393a42Smrg#define FcValueListNext(vl) FcPointerMember(vl,next,FcValueList) 184898dab68Smrg 1852c393a42Smrgtypedef int FcObject; 1862c393a42Smrg 187d91dd368Smrg/* The 1024 is to leave some room for future added internal objects, such 188d91dd368Smrg * that caches from newer fontconfig can still be used with older fontconfig 189d91dd368Smrg * without getting confused. */ 190d91dd368Smrg#define FC_EXT_OBJ_INDEX 1024 191d91dd368Smrg#define FC_OBJ_ID(_n_) ((_n_) & (~FC_EXT_OBJ_INDEX)) 192d91dd368Smrg 1932c393a42Smrgtypedef struct _FcPatternElt *FcPatternEltPtr; 1942c393a42Smrg 1952c393a42Smrg/* 196898dab68Smrg * Pattern elts are stuck in a structure connected to the pattern, 1972c393a42Smrg * so they get moved around when the pattern is resized. Hence, the 1982c393a42Smrg * values field must be a pointer/offset instead of just an offset 1992c393a42Smrg */ 2002c393a42Smrgtypedef struct _FcPatternElt { 2012c393a42Smrg FcObject object; 2022c393a42Smrg FcValueList *values; 2032c393a42Smrg} FcPatternElt; 2042c393a42Smrg 2052c393a42Smrg#define FcPatternEltValues(pe) FcPointerMember(pe,values,FcValueList) 2062c393a42Smrg 2072c393a42Smrgstruct _FcPattern { 2082c393a42Smrg int num; 2092c393a42Smrg int size; 2102c393a42Smrg intptr_t elts_offset; 2115e61939bSmrg FcRef ref; 2122c393a42Smrg}; 2132c393a42Smrg 2142c393a42Smrg#define FcPatternElts(p) FcOffsetMember(p,elts_offset,FcPatternElt) 2152c393a42Smrg 2162c393a42Smrg#define FcFontSetFonts(fs) FcPointerMember(fs,fonts,FcPattern *) 2172c393a42Smrg 2182c393a42Smrg#define FcFontSetFont(fs,i) (FcIsEncodedOffset((fs)->fonts) ? \ 2192c393a42Smrg FcEncodedOffsetToPtr(fs, \ 2202c393a42Smrg FcFontSetFonts(fs)[i], \ 2212c393a42Smrg FcPattern) : \ 2222c393a42Smrg fs->fonts[i]) 2232c393a42Smrg 2242c393a42Smrgtypedef enum _FcOp { 225898dab68Smrg FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpRange, FcOpBool, FcOpCharSet, FcOpLangSet, 2262c393a42Smrg FcOpNil, 2272c393a42Smrg FcOpField, FcOpConst, 228898dab68Smrg FcOpAssign, FcOpAssignReplace, 2292c393a42Smrg FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast, 2305e61939bSmrg FcOpDelete, FcOpDeleteAll, 2312c393a42Smrg FcOpQuest, 232898dab68Smrg FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual, 2332c393a42Smrg FcOpContains, FcOpListing, FcOpNotContains, 2342c393a42Smrg FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual, 2352c393a42Smrg FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide, 2362c393a42Smrg FcOpNot, FcOpComma, FcOpFloor, FcOpCeil, FcOpRound, FcOpTrunc, 2372c393a42Smrg FcOpInvalid 2382c393a42Smrg} FcOp; 2392c393a42Smrg 240898dab68Smrgtypedef enum _FcOpFlags { 241898dab68Smrg FcOpFlagIgnoreBlanks = 1 << 0 242898dab68Smrg} FcOpFlags; 243898dab68Smrg 244898dab68Smrg#define FC_OP_GET_OP(_x_) ((_x_) & 0xffff) 245898dab68Smrg#define FC_OP_GET_FLAGS(_x_) (((_x_) & 0xffff0000) >> 16) 246898dab68Smrg#define FC_OP(_x_,_f_) (FC_OP_GET_OP (_x_) | ((_f_) << 16)) 247898dab68Smrg 2485e61939bSmrgtypedef struct _FcExprMatrix { 2495e61939bSmrg struct _FcExpr *xx, *xy, *yx, *yy; 2505e61939bSmrg} FcExprMatrix; 2515e61939bSmrg 2525e61939bSmrgtypedef struct _FcExprName { 2535e61939bSmrg FcObject object; 2545e61939bSmrg FcMatchKind kind; 2555e61939bSmrg} FcExprName; 2565e61939bSmrg 25718bd4a06Smrgstruct _FcRange { 25818bd4a06Smrg double begin; 25918bd4a06Smrg double end; 26018bd4a06Smrg}; 26118bd4a06Smrg 2625e61939bSmrg 2632c393a42Smrgtypedef struct _FcExpr { 2642c393a42Smrg FcOp op; 2652c393a42Smrg union { 26618bd4a06Smrg int ival; 26718bd4a06Smrg double dval; 26818bd4a06Smrg const FcChar8 *sval; 26918bd4a06Smrg FcExprMatrix *mexpr; 27018bd4a06Smrg FcBool bval; 27118bd4a06Smrg FcCharSet *cval; 27218bd4a06Smrg FcLangSet *lval; 27318bd4a06Smrg FcRange *rval; 27418bd4a06Smrg 27518bd4a06Smrg FcExprName name; 27618bd4a06Smrg const FcChar8 *constant; 2772c393a42Smrg struct { 2782c393a42Smrg struct _FcExpr *left, *right; 2792c393a42Smrg } tree; 2802c393a42Smrg } u; 2812c393a42Smrg} FcExpr; 2822c393a42Smrg 2830d39df38Smrgtypedef struct _FcExprPage FcExprPage; 2840d39df38Smrg 2850d39df38Smrgstruct _FcExprPage { 2860d39df38Smrg FcExprPage *next_page; 2870d39df38Smrg FcExpr *next; 2880d39df38Smrg FcExpr exprs[(1024 - 2/* two pointers */ - 2/* malloc overhead */) * sizeof (void *) / sizeof (FcExpr)]; 289898dab68Smrg FcExpr end[FLEXIBLE_ARRAY_MEMBER]; 2900d39df38Smrg}; 2910d39df38Smrg 2922c393a42Smrgtypedef enum _FcQual { 2932c393a42Smrg FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst 2942c393a42Smrg} FcQual; 2952c393a42Smrg 2962c393a42Smrg#define FcMatchDefault ((FcMatchKind) -1) 2972c393a42Smrg 2982c393a42Smrgtypedef struct _FcTest { 2992c393a42Smrg FcMatchKind kind; 3002c393a42Smrg FcQual qual; 3012c393a42Smrg FcObject object; 3022c393a42Smrg FcOp op; 3032c393a42Smrg FcExpr *expr; 3042c393a42Smrg} FcTest; 3052c393a42Smrg 3062c393a42Smrgtypedef struct _FcEdit { 3072c393a42Smrg FcObject object; 3082c393a42Smrg FcOp op; 3092c393a42Smrg FcExpr *expr; 3102c393a42Smrg FcValueBinding binding; 3112c393a42Smrg} FcEdit; 3122c393a42Smrg 313d91dd368Smrgtypedef enum _FcRuleType { 314d91dd368Smrg FcRuleUnknown, FcRuleTest, FcRuleEdit 315d91dd368Smrg} FcRuleType; 316d91dd368Smrg 317d91dd368Smrgtypedef struct _FcRule { 318d91dd368Smrg struct _FcRule *next; 319d91dd368Smrg FcRuleType type; 320d91dd368Smrg union { 321d91dd368Smrg FcTest *test; 322d91dd368Smrg FcEdit *edit; 323d91dd368Smrg } u; 324d91dd368Smrg} FcRule; 325d91dd368Smrg 3262c393a42Smrgtypedef struct _FcSubst { 3272c393a42Smrg struct _FcSubst *next; 328d91dd368Smrg FcRule *rule; 3292c393a42Smrg} FcSubst; 3302c393a42Smrg 3312c393a42Smrgtypedef struct _FcCharLeaf { 3322c393a42Smrg FcChar32 map[256/32]; 3332c393a42Smrg} FcCharLeaf; 3342c393a42Smrg 3352c393a42Smrgstruct _FcCharSet { 3365e61939bSmrg FcRef ref; /* reference count */ 3372c393a42Smrg int num; /* size of leaves and numbers arrays */ 3382c393a42Smrg intptr_t leaves_offset; 3392c393a42Smrg intptr_t numbers_offset; 3402c393a42Smrg}; 3412c393a42Smrg 3422c393a42Smrg#define FcCharSetLeaves(c) FcOffsetMember(c,leaves_offset,intptr_t) 3432c393a42Smrg#define FcCharSetLeaf(c,i) (FcOffsetToPtr(FcCharSetLeaves(c), \ 3442c393a42Smrg FcCharSetLeaves(c)[i], \ 3452c393a42Smrg FcCharLeaf)) 3462c393a42Smrg#define FcCharSetNumbers(c) FcOffsetMember(c,numbers_offset,FcChar16) 3472c393a42Smrg 34818bd4a06Smrg#define FCSS_DEFAULT 0 /* default behavior */ 34918bd4a06Smrg#define FCSS_ALLOW_DUPLICATES 1 /* allows for duplicate strings in the set */ 35018bd4a06Smrg#define FCSS_GROW_BY_64 2 /* grows buffer by 64 elements instead of 1 */ 35118bd4a06Smrg 35218bd4a06Smrg#define FcStrSetHasControlBit(s,c) (s->control & c) 35318bd4a06Smrg#define FcStrSetHasControlBits(s,c) ( (c) == (s->control & (c)) ) 35418bd4a06Smrg 3552c393a42Smrgstruct _FcStrSet { 3565e61939bSmrg FcRef ref; /* reference count */ 3572c393a42Smrg int num; 3582c393a42Smrg int size; 3592c393a42Smrg FcChar8 **strs; 36018bd4a06Smrg unsigned int control; /* control bits for set behavior */ 3612c393a42Smrg}; 3622c393a42Smrg 3632c393a42Smrgstruct _FcStrList { 3642c393a42Smrg FcStrSet *set; 3652c393a42Smrg int n; 3662c393a42Smrg}; 3672c393a42Smrg 3682c393a42Smrgtypedef struct _FcStrBuf { 3692c393a42Smrg FcChar8 *buf; 3702c393a42Smrg FcBool allocated; 3712c393a42Smrg FcBool failed; 3722c393a42Smrg int len; 3732c393a42Smrg int size; 3740d39df38Smrg FcChar8 buf_static[16 * sizeof (void *)]; 3752c393a42Smrg} FcStrBuf; 3762c393a42Smrg 3772c393a42Smrgstruct _FcCache { 3785e61939bSmrg unsigned int magic; /* FC_CACHE_MAGIC_MMAP or FC_CACHE_ALLOC */ 37918bd4a06Smrg int version; /* FC_CACHE_VERSION_NUMBER */ 3802c393a42Smrg intptr_t size; /* size of file */ 3812c393a42Smrg intptr_t dir; /* offset to dir name */ 3822c393a42Smrg intptr_t dirs; /* offset to subdirs */ 3832c393a42Smrg int dirs_count; /* number of subdir strings */ 3842c393a42Smrg intptr_t set; /* offset to font set */ 385898dab68Smrg int checksum; /* checksum of directory state */ 38618bd4a06Smrg int64_t checksum_nano; /* checksum of directory state */ 3872c393a42Smrg}; 3882c393a42Smrg 3892c393a42Smrg#undef FcCacheDir 3902c393a42Smrg#undef FcCacheSubdir 3912c393a42Smrg#define FcCacheDir(c) FcOffsetMember(c,dir,FcChar8) 3922c393a42Smrg#define FcCacheDirs(c) FcOffsetMember(c,dirs,intptr_t) 3932c393a42Smrg#define FcCacheSet(c) FcOffsetMember(c,set,FcFontSet) 3942c393a42Smrg#define FcCacheSubdir(c,i) FcOffsetToPtr (FcCacheDirs(c),\ 3952c393a42Smrg FcCacheDirs(c)[i], \ 3962c393a42Smrg FcChar8) 3972c393a42Smrg 3982c393a42Smrg/* 3992c393a42Smrg * Used while constructing a directory cache object 4002c393a42Smrg */ 4012c393a42Smrg 4022c393a42Smrg#define FC_SERIALIZE_HASH_SIZE 8191 4032c393a42Smrg 4040d39df38Smrgtypedef union _FcAlign { 4050d39df38Smrg double d; 4060d39df38Smrg int i; 4070d39df38Smrg intptr_t ip; 4080d39df38Smrg FcBool b; 4090d39df38Smrg void *p; 4100d39df38Smrg} FcAlign; 4110d39df38Smrg 4122c393a42Smrgtypedef struct _FcSerializeBucket { 4132c393a42Smrg struct _FcSerializeBucket *next; 4142c393a42Smrg const void *object; 4152c393a42Smrg intptr_t offset; 4162c393a42Smrg} FcSerializeBucket; 4172c393a42Smrg 4182c393a42Smrgtypedef struct _FcCharSetFreezer FcCharSetFreezer; 4192c393a42Smrg 4202c393a42Smrgtypedef struct _FcSerialize { 4212c393a42Smrg intptr_t size; 4222c393a42Smrg FcCharSetFreezer *cs_freezer; 4232c393a42Smrg void *linear; 4242c393a42Smrg FcSerializeBucket *buckets[FC_SERIALIZE_HASH_SIZE]; 4252c393a42Smrg} FcSerialize; 426898dab68Smrg 4272c393a42Smrg/* 4282c393a42Smrg * To map adobe glyph names to unicode values, a precomputed hash 4292c393a42Smrg * table is used 4302c393a42Smrg */ 4312c393a42Smrg 4322c393a42Smrgtypedef struct _FcGlyphName { 4332c393a42Smrg FcChar32 ucs; /* unicode value */ 4342c393a42Smrg FcChar8 name[1]; /* name extends beyond struct */ 4352c393a42Smrg} FcGlyphName; 4362c393a42Smrg 4372c393a42Smrg/* 4382c393a42Smrg * To perform case-insensitive string comparisons, a table 4392c393a42Smrg * is used which holds three different kinds of folding data. 440898dab68Smrg * 4412c393a42Smrg * The first is a range of upper case values mapping to a range 4422c393a42Smrg * of their lower case equivalents. Within each range, the offset 4432c393a42Smrg * between upper and lower case is constant. 4442c393a42Smrg * 4452c393a42Smrg * The second is a range of upper case values which are interleaved 4462c393a42Smrg * with their lower case equivalents. 447898dab68Smrg * 4482c393a42Smrg * The third is a set of raw unicode values mapping to a list 4492c393a42Smrg * of unicode values for comparison purposes. This allows conversion 4502c393a42Smrg * of ß to "ss" so that SS, ss and ß all match. A separate array 4512c393a42Smrg * holds the list of unicode values for each entry. 4522c393a42Smrg * 4532c393a42Smrg * These are packed into a single table. Using a binary search, 4542c393a42Smrg * the appropriate entry can be located. 4552c393a42Smrg */ 4562c393a42Smrg 4572c393a42Smrg#define FC_CASE_FOLD_RANGE 0 4582c393a42Smrg#define FC_CASE_FOLD_EVEN_ODD 1 4592c393a42Smrg#define FC_CASE_FOLD_FULL 2 4602c393a42Smrg 4612c393a42Smrgtypedef struct _FcCaseFold { 4622c393a42Smrg FcChar32 upper; 4632c393a42Smrg FcChar16 method : 2; 4642c393a42Smrg FcChar16 count : 14; 4652c393a42Smrg short offset; /* lower - upper for RANGE, table id for FULL */ 4662c393a42Smrg} FcCaseFold; 4672c393a42Smrg 4682c393a42Smrg#define FC_MAX_FILE_LEN 4096 4692c393a42Smrg 4702c393a42Smrg#define FC_CACHE_MAGIC_MMAP 0xFC02FC04 4712c393a42Smrg#define FC_CACHE_MAGIC_ALLOC 0xFC02FC05 4722c393a42Smrg 4732c393a42Smrgstruct _FcAtomic { 4742c393a42Smrg FcChar8 *file; /* original file name */ 4752c393a42Smrg FcChar8 *new; /* temp file name -- write data here */ 4762c393a42Smrg FcChar8 *lck; /* lockfile name (used for locking) */ 4772c393a42Smrg FcChar8 *tmp; /* tmpfile name (used for locking) */ 4782c393a42Smrg}; 4792c393a42Smrg 4802c393a42Smrgstruct _FcBlanks { 4812c393a42Smrg int nblank; 4822c393a42Smrg int sblank; 4832c393a42Smrg FcChar32 *blanks; 4842c393a42Smrg}; 4852c393a42Smrg 4862c393a42Smrgstruct _FcConfig { 4872c393a42Smrg /* 4882c393a42Smrg * File names loaded from the configuration -- saved here as the 4892c393a42Smrg * cache file must be consulted before the directories are scanned, 4902c393a42Smrg * and those directives may occur in any order 4912c393a42Smrg */ 4922c393a42Smrg FcStrSet *configDirs; /* directories to scan for fonts */ 4932c393a42Smrg /* 4942c393a42Smrg * Set of allowed blank chars -- used to 4952c393a42Smrg * trim fonts of bogus glyphs 4962c393a42Smrg */ 4972c393a42Smrg FcBlanks *blanks; 4982c393a42Smrg /* 4992c393a42Smrg * List of directories containing fonts, 500898dab68Smrg * built by recursively scanning the set 5012c393a42Smrg * of configured directories 5022c393a42Smrg */ 5032c393a42Smrg FcStrSet *fontDirs; 5042c393a42Smrg /* 5052c393a42Smrg * List of directories containing cache files. 5062c393a42Smrg */ 5072c393a42Smrg FcStrSet *cacheDirs; 5082c393a42Smrg /* 5092c393a42Smrg * Names of all of the configuration files used 5102c393a42Smrg * to create this configuration 5112c393a42Smrg */ 5122c393a42Smrg FcStrSet *configFiles; /* config files loaded */ 5132c393a42Smrg /* 5142c393a42Smrg * Substitution instructions for patterns and fonts; 5152c393a42Smrg * maxObjects is used to allocate appropriate intermediate storage 5162c393a42Smrg * while performing a whole set of substitutions 5172c393a42Smrg */ 5182c393a42Smrg FcSubst *substPattern; /* substitutions for patterns */ 5192c393a42Smrg FcSubst *substFont; /* substitutions for fonts */ 5202c393a42Smrg FcSubst *substScan; /* substitutions for scanned fonts */ 5212c393a42Smrg int maxObjects; /* maximum number of tests in all substs */ 5222c393a42Smrg /* 5232c393a42Smrg * List of patterns used to control font file selection 5242c393a42Smrg */ 5252c393a42Smrg FcStrSet *acceptGlobs; 5262c393a42Smrg FcStrSet *rejectGlobs; 5272c393a42Smrg FcFontSet *acceptPatterns; 5282c393a42Smrg FcFontSet *rejectPatterns; 5292c393a42Smrg /* 5302c393a42Smrg * The set of fonts loaded from the listed directories; the 5312c393a42Smrg * order within the set does not determine the font selection, 5322c393a42Smrg * except in the case of identical matches in which case earlier fonts 5332c393a42Smrg * match preferrentially 5342c393a42Smrg */ 5352c393a42Smrg FcFontSet *fonts[FcSetApplication + 1]; 5362c393a42Smrg /* 5372c393a42Smrg * Fontconfig can periodically rescan the system configuration 5382c393a42Smrg * and font directories. This rescanning occurs when font 5392c393a42Smrg * listing requests are made, but no more often than rescanInterval 5402c393a42Smrg * seconds apart. 5412c393a42Smrg */ 5422c393a42Smrg time_t rescanTime; /* last time information was scanned */ 5432c393a42Smrg int rescanInterval; /* interval between scans */ 5440d39df38Smrg 5455e61939bSmrg FcRef ref; /* reference count */ 5460d39df38Smrg 5475e61939bSmrg FcExprPage *expr_pool; /* pool of FcExpr's */ 548898dab68Smrg 5495e61939bSmrg FcChar8 *sysRoot; /* override the system root directory */ 5505e61939bSmrg}; 5512c393a42Smrg 5522c393a42Smrgtypedef struct _FcFileTime { 5532c393a42Smrg time_t time; 5542c393a42Smrg FcBool set; 5552c393a42Smrg} FcFileTime; 5562c393a42Smrg 5572c393a42Smrgtypedef struct _FcCharMap FcCharMap; 5582c393a42Smrg 559898dab68Smrgtypedef struct _FcStatFS FcStatFS; 560898dab68Smrg 561898dab68Smrgstruct _FcStatFS { 562898dab68Smrg FcBool is_remote_fs; 563898dab68Smrg FcBool is_mtime_broken; 564898dab68Smrg}; 565898dab68Smrg 5665e61939bSmrgtypedef struct _FcValuePromotionBuffer FcValuePromotionBuffer; 5675e61939bSmrg 5685e61939bSmrgstruct _FcValuePromotionBuffer { 5695e61939bSmrg union { 5705e61939bSmrg double d; 5715e61939bSmrg int i; 5725e61939bSmrg long l; 5735e61939bSmrg char c[256]; /* Enlarge as needed */ 5745e61939bSmrg } u; 5755e61939bSmrg}; 5765e61939bSmrg 5772c393a42Smrg/* fcblanks.c */ 5782c393a42Smrg 5792c393a42Smrg/* fccache.c */ 5802c393a42Smrg 5812c393a42SmrgFcPrivate FcCache * 5822c393a42SmrgFcDirCacheScan (const FcChar8 *dir, FcConfig *config); 5832c393a42Smrg 5842c393a42SmrgFcPrivate FcCache * 5852c393a42SmrgFcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs); 5862c393a42Smrg 587b2a52337SmrgFcPrivate FcCache * 588b2a52337SmrgFcDirCacheRebuild (FcCache *cache, struct stat *dir_stat, FcStrSet *dirs); 589b2a52337Smrg 5902c393a42SmrgFcPrivate FcBool 5912c393a42SmrgFcDirCacheWrite (FcCache *cache, FcConfig *config); 592898dab68Smrg 593898dab68SmrgFcPrivate FcBool 594898dab68SmrgFcDirCacheCreateTagFile (const FcChar8 *cache_dir); 595898dab68Smrg 5962c393a42SmrgFcPrivate void 5972c393a42SmrgFcCacheObjectReference (void *object); 5982c393a42Smrg 5992c393a42SmrgFcPrivate void 6002c393a42SmrgFcCacheObjectDereference (void *object); 6012c393a42Smrg 6022c393a42SmrgFcPrivate void 6032c393a42SmrgFcCacheFini (void); 604898dab68Smrg 6052c393a42SmrgFcPrivate void 6062c393a42SmrgFcDirCacheReference (FcCache *cache, int nref); 6072c393a42Smrg 60818bd4a06SmrgFcPrivate int 60918bd4a06SmrgFcDirCacheLock (const FcChar8 *dir, 61018bd4a06Smrg FcConfig *config); 61118bd4a06Smrg 61218bd4a06SmrgFcPrivate void 61318bd4a06SmrgFcDirCacheUnlock (int fd); 61418bd4a06Smrg 6152c393a42Smrg/* fccfg.c */ 6162c393a42Smrg 6175e61939bSmrgFcPrivate FcBool 6185e61939bSmrgFcConfigInit (void); 6195e61939bSmrg 6205e61939bSmrgFcPrivate void 6215e61939bSmrgFcConfigFini (void); 6225e61939bSmrg 623898dab68SmrgFcPrivate FcChar8 * 624898dab68SmrgFcConfigXdgCacheHome (void); 625898dab68Smrg 626898dab68SmrgFcPrivate FcChar8 * 627898dab68SmrgFcConfigXdgConfigHome (void); 628898dab68Smrg 629898dab68SmrgFcPrivate FcChar8 * 630898dab68SmrgFcConfigXdgDataHome (void); 631898dab68Smrg 6320d39df38SmrgFcPrivate FcExpr * 6330d39df38SmrgFcConfigAllocExpr (FcConfig *config); 6340d39df38Smrg 6352c393a42SmrgFcPrivate FcBool 6362c393a42SmrgFcConfigAddConfigDir (FcConfig *config, 6372c393a42Smrg const FcChar8 *d); 6382c393a42Smrg 6392c393a42SmrgFcPrivate FcBool 6402c393a42SmrgFcConfigAddFontDir (FcConfig *config, 6412c393a42Smrg const FcChar8 *d); 6422c393a42Smrg 6432c393a42SmrgFcPrivate FcBool 6442c393a42SmrgFcConfigAddDir (FcConfig *config, 6452c393a42Smrg const FcChar8 *d); 6462c393a42Smrg 6472c393a42SmrgFcPrivate FcBool 6482c393a42SmrgFcConfigAddCacheDir (FcConfig *config, 6492c393a42Smrg const FcChar8 *d); 6502c393a42Smrg 6512c393a42SmrgFcPrivate FcBool 6522c393a42SmrgFcConfigAddConfigFile (FcConfig *config, 6532c393a42Smrg const FcChar8 *f); 6542c393a42Smrg 6552c393a42SmrgFcPrivate FcBool 6562c393a42SmrgFcConfigAddBlank (FcConfig *config, 6572c393a42Smrg FcChar32 blank); 6582c393a42Smrg 659d91dd368SmrgFcBool 660d91dd368SmrgFcConfigAddRule (FcConfig *config, 661d91dd368Smrg FcRule *rule, 6622c393a42Smrg FcMatchKind kind); 6632c393a42Smrg 6642c393a42SmrgFcPrivate void 6652c393a42SmrgFcConfigSetFonts (FcConfig *config, 6662c393a42Smrg FcFontSet *fonts, 6672c393a42Smrg FcSetName set); 6682c393a42Smrg 6692c393a42SmrgFcPrivate FcBool 6702c393a42SmrgFcConfigCompareValue (const FcValue *m, 671d91dd368Smrg unsigned int op_, 6722c393a42Smrg const FcValue *v); 6732c393a42Smrg 6742c393a42SmrgFcPrivate FcBool 6752c393a42SmrgFcConfigGlobAdd (FcConfig *config, 6762c393a42Smrg const FcChar8 *glob, 6772c393a42Smrg FcBool accept); 6782c393a42Smrg 6792c393a42SmrgFcPrivate FcBool 6802c393a42SmrgFcConfigAcceptFilename (FcConfig *config, 6812c393a42Smrg const FcChar8 *filename); 6822c393a42Smrg 6832c393a42SmrgFcPrivate FcBool 6842c393a42SmrgFcConfigPatternsAdd (FcConfig *config, 6852c393a42Smrg FcPattern *pattern, 6862c393a42Smrg FcBool accept); 6872c393a42Smrg 6882c393a42SmrgFcPrivate FcBool 6892c393a42SmrgFcConfigAcceptFont (FcConfig *config, 6902c393a42Smrg const FcPattern *font); 6912c393a42Smrg 6922c393a42SmrgFcPrivate FcFileTime 6932c393a42SmrgFcConfigModifiedTime (FcConfig *config); 6942c393a42Smrg 6952c393a42SmrgFcPrivate FcBool 696898dab68SmrgFcConfigAddCache (FcConfig *config, FcCache *cache, 6972c393a42Smrg FcSetName set, FcStrSet *dirSet); 6982c393a42Smrg 6992c393a42Smrg/* fcserialize.c */ 7002c393a42SmrgFcPrivate intptr_t 7012c393a42SmrgFcAlignSize (intptr_t size); 702898dab68Smrg 7032c393a42SmrgFcPrivate FcSerialize * 7042c393a42SmrgFcSerializeCreate (void); 7052c393a42Smrg 7062c393a42SmrgFcPrivate void 7072c393a42SmrgFcSerializeDestroy (FcSerialize *serialize); 7082c393a42Smrg 7092c393a42SmrgFcPrivate FcBool 7102c393a42SmrgFcSerializeAlloc (FcSerialize *serialize, const void *object, int size); 7112c393a42Smrg 7122c393a42SmrgFcPrivate intptr_t 7132c393a42SmrgFcSerializeReserve (FcSerialize *serialize, int size); 7142c393a42Smrg 7152c393a42SmrgFcPrivate intptr_t 7162c393a42SmrgFcSerializeOffset (FcSerialize *serialize, const void *object); 7172c393a42Smrg 7182c393a42SmrgFcPrivate void * 7192c393a42SmrgFcSerializePtr (FcSerialize *serialize, const void *object); 7202c393a42Smrg 7212c393a42SmrgFcPrivate FcBool 7222c393a42SmrgFcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l); 7232c393a42Smrg 7242c393a42SmrgFcPrivate FcLangSet * 7252c393a42SmrgFcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l); 7262c393a42Smrg 7272c393a42Smrg/* fccharset.c */ 72818bd4a06SmrgFcPrivate FcCharSet * 72918bd4a06SmrgFcCharSetPromote (FcValuePromotionBuffer *vbuf); 73018bd4a06Smrg 7312c393a42SmrgFcPrivate void 7322c393a42SmrgFcLangCharSetPopulate (void); 7332c393a42Smrg 7342c393a42SmrgFcPrivate FcCharSetFreezer * 7352c393a42SmrgFcCharSetFreezerCreate (void); 7362c393a42Smrg 7372c393a42SmrgFcPrivate const FcCharSet * 7382c393a42SmrgFcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs); 7392c393a42Smrg 7402c393a42SmrgFcPrivate void 7412c393a42SmrgFcCharSetFreezerDestroy (FcCharSetFreezer *freezer); 7422c393a42Smrg 7432c393a42SmrgFcPrivate FcBool 7442c393a42SmrgFcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c); 7452c393a42Smrg 7462c393a42SmrgFcPrivate FcCharSet * 7472c393a42SmrgFcNameParseCharSet (FcChar8 *string); 7482c393a42Smrg 7490d39df38SmrgFcPrivate FcBool 7500d39df38SmrgFcNameUnparseValue (FcStrBuf *buf, 7510d39df38Smrg FcValue *v0, 7520d39df38Smrg FcChar8 *escape); 7530d39df38Smrg 7540d39df38SmrgFcPrivate FcBool 7550d39df38SmrgFcNameUnparseValueList (FcStrBuf *buf, 7560d39df38Smrg FcValueListPtr v, 7570d39df38Smrg FcChar8 *escape); 7580d39df38Smrg 7592c393a42SmrgFcPrivate FcCharLeaf * 7602c393a42SmrgFcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4); 7612c393a42Smrg 7622c393a42SmrgFcPrivate FcBool 7632c393a42SmrgFcCharSetSerializeAlloc(FcSerialize *serialize, const FcCharSet *cs); 7642c393a42Smrg 7652c393a42SmrgFcPrivate FcCharSet * 7662c393a42SmrgFcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs); 7672c393a42Smrg 7682c393a42SmrgFcPrivate FcChar16 * 7692c393a42SmrgFcCharSetGetNumbers(const FcCharSet *c); 7702c393a42Smrg 7715e61939bSmrg/* fccompat.c */ 7725e61939bSmrgFcPrivate int 7735e61939bSmrgFcOpen(const char *pathname, int flags, ...); 7745e61939bSmrg 7755e61939bSmrgFcPrivate int 7765e61939bSmrgFcMakeTempfile (char *template); 7775e61939bSmrg 7785e61939bSmrgFcPrivate int32_t 7795e61939bSmrgFcRandom (void); 7805e61939bSmrg 781d91dd368SmrgFcPrivate FcBool 782d91dd368SmrgFcMakeDirectory (const FcChar8 *dir); 783d91dd368Smrg 7842c393a42Smrg/* fcdbg.c */ 7855e61939bSmrg 7865e61939bSmrgFcPrivate void 7875e61939bSmrgFcValuePrintFile (FILE *f, const FcValue v); 7885e61939bSmrg 7892c393a42SmrgFcPrivate void 790898dab68SmrgFcValuePrintWithPosition (const FcValue v, FcBool show_pos_mark); 791898dab68Smrg 792898dab68SmrgFcPrivate void 793898dab68SmrgFcValueListPrintWithPosition (FcValueListPtr l, const FcValueListPtr pos); 794898dab68Smrg 795898dab68SmrgFcPrivate void 796898dab68SmrgFcValueListPrint (FcValueListPtr l); 7972c393a42Smrg 7982c393a42SmrgFcPrivate void 7992c393a42SmrgFcLangSetPrint (const FcLangSet *ls); 8002c393a42Smrg 8012c393a42SmrgFcPrivate void 8022c393a42SmrgFcOpPrint (FcOp op); 8032c393a42Smrg 8042c393a42SmrgFcPrivate void 8052c393a42SmrgFcTestPrint (const FcTest *test); 8062c393a42Smrg 8072c393a42SmrgFcPrivate void 8082c393a42SmrgFcExprPrint (const FcExpr *expr); 8092c393a42Smrg 8102c393a42SmrgFcPrivate void 8112c393a42SmrgFcEditPrint (const FcEdit *edit); 8122c393a42Smrg 8132c393a42SmrgFcPrivate void 8142c393a42SmrgFcSubstPrint (const FcSubst *subst); 8152c393a42Smrg 8162c393a42SmrgFcPrivate void 8172c393a42SmrgFcCharSetPrint (const FcCharSet *c); 818898dab68Smrg 81918bd4a06SmrgFcPrivate void 82018bd4a06SmrgFcPatternPrint2 (FcPattern *p1, FcPattern *p2, const FcObjectSet *os); 82118bd4a06Smrg 8222c393a42Smrgextern FcPrivate int FcDebugVal; 8232c393a42Smrg 8242c393a42Smrg#define FcDebug() (FcDebugVal) 8252c393a42Smrg 8262c393a42SmrgFcPrivate void 8272c393a42SmrgFcInitDebug (void); 8282c393a42Smrg 8292c393a42Smrg/* fcdefault.c */ 8302c393a42SmrgFcPrivate FcChar8 * 8312c393a42SmrgFcGetDefaultLang (void); 8322c393a42Smrg 8335e61939bSmrgFcPrivate FcChar8 * 8345e61939bSmrgFcGetPrgname (void); 8355e61939bSmrg 8365e61939bSmrgFcPrivate void 8375e61939bSmrgFcDefaultFini (void); 8385e61939bSmrg 8392c393a42Smrg/* fcdir.c */ 8402c393a42Smrg 8415e61939bSmrgFcPrivate FcBool 8425e61939bSmrgFcFileIsLink (const FcChar8 *file); 8435e61939bSmrg 844d91dd368SmrgFcPrivate FcBool 845d91dd368SmrgFcFileIsFile (const FcChar8 *file); 846d91dd368Smrg 8472c393a42SmrgFcPrivate FcBool 8482c393a42SmrgFcFileScanConfig (FcFontSet *set, 8492c393a42Smrg FcStrSet *dirs, 8502c393a42Smrg FcBlanks *blanks, 8512c393a42Smrg const FcChar8 *file, 8522c393a42Smrg FcConfig *config); 8532c393a42Smrg 8542c393a42SmrgFcPrivate FcBool 8552c393a42SmrgFcDirScanConfig (FcFontSet *set, 8562c393a42Smrg FcStrSet *dirs, 8572c393a42Smrg FcBlanks *blanks, 8582c393a42Smrg const FcChar8 *dir, 8592c393a42Smrg FcBool force, 8602c393a42Smrg FcConfig *config); 8612c393a42Smrg 8622c393a42Smrg/* fcfont.c */ 8632c393a42SmrgFcPrivate int 8642c393a42SmrgFcFontDebug (void); 8650d39df38Smrg 8662c393a42Smrg/* fcfs.c */ 8672c393a42Smrg 8682c393a42SmrgFcPrivate FcBool 8692c393a42SmrgFcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s); 8702c393a42Smrg 8712c393a42SmrgFcPrivate FcFontSet * 8722c393a42SmrgFcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s); 8732c393a42Smrg 874b2a52337SmrgFcPrivate FcFontSet * 875b2a52337SmrgFcFontSetDeserialize (const FcFontSet *set); 876b2a52337Smrg 8772c393a42Smrg/* fcinit.c */ 8785e61939bSmrgFcPrivate FcConfig * 8795e61939bSmrgFcInitLoadOwnConfig (FcConfig *config); 8802c393a42Smrg 8815e61939bSmrgFcPrivate FcConfig * 8825e61939bSmrgFcInitLoadOwnConfigAndFonts (FcConfig *config); 8832c393a42Smrg 8845e61939bSmrg/* fcxml.c */ 88518bd4a06SmrgFcPrivate void 88618bd4a06SmrgFcConfigPathFini (void); 88718bd4a06Smrg 8882c393a42SmrgFcPrivate void 8895e61939bSmrgFcTestDestroy (FcTest *test); 8902c393a42Smrg 8912c393a42SmrgFcPrivate void 8925e61939bSmrgFcEditDestroy (FcEdit *e); 8932c393a42Smrg 894d91dd368Smrgvoid 895d91dd368SmrgFcRuleDestroy (FcRule *rule); 896d91dd368Smrg 8972c393a42Smrg/* fclang.c */ 8982c393a42SmrgFcPrivate FcLangSet * 899898dab68SmrgFcFreeTypeLangSet (const FcCharSet *charset, 9002c393a42Smrg const FcChar8 *exclusiveLang); 9012c393a42Smrg 9022c393a42SmrgFcPrivate FcLangResult 9032c393a42SmrgFcLangCompare (const FcChar8 *s1, const FcChar8 *s2); 904898dab68Smrg 9052c393a42SmrgFcPrivate FcLangSet * 9065e61939bSmrgFcLangSetPromote (const FcChar8 *lang, FcValuePromotionBuffer *buf); 9072c393a42Smrg 9082c393a42SmrgFcPrivate FcLangSet * 9092c393a42SmrgFcNameParseLangSet (const FcChar8 *string); 9102c393a42Smrg 9112c393a42SmrgFcPrivate FcBool 9122c393a42SmrgFcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls); 9132c393a42Smrg 9142c393a42SmrgFcPrivate FcChar8 * 9152c393a42SmrgFcNameUnparseEscaped (FcPattern *pat, FcBool escape); 9162c393a42Smrg 9172c393a42Smrg/* fclist.c */ 9182c393a42Smrg 9192c393a42SmrgFcPrivate FcBool 9202c393a42SmrgFcListPatternMatchAny (const FcPattern *p, 9212c393a42Smrg const FcPattern *font); 9222c393a42Smrg 9232c393a42Smrg/* fcmatch.c */ 9242c393a42Smrg 9252c393a42Smrg/* fcname.c */ 9262c393a42Smrg 9275e61939bSmrgenum { 9285e61939bSmrg FC_INVALID_OBJECT = 0, 9295e61939bSmrg#define FC_OBJECT(NAME, Type, Cmp) FC_##NAME##_OBJECT, 9305e61939bSmrg#include "fcobjs.h" 9315e61939bSmrg#undef FC_OBJECT 9325e61939bSmrg FC_ONE_AFTER_MAX_BASE_OBJECT 9335e61939bSmrg#define FC_MAX_BASE_OBJECT (FC_ONE_AFTER_MAX_BASE_OBJECT - 1) 9345e61939bSmrg}; 9352c393a42Smrg 9362c393a42SmrgFcPrivate FcBool 9372c393a42SmrgFcNameBool (const FcChar8 *v, FcBool *result); 9382c393a42Smrg 9392c393a42SmrgFcPrivate FcBool 9402c393a42SmrgFcObjectValidType (FcObject object, FcType type); 9412c393a42Smrg 9422c393a42SmrgFcPrivate FcObject 9432c393a42SmrgFcObjectFromName (const char * name); 9442c393a42Smrg 9452c393a42SmrgFcPrivate const char * 9462c393a42SmrgFcObjectName (FcObject object); 9472c393a42Smrg 9480d39df38SmrgFcPrivate FcObjectSet * 9490d39df38SmrgFcObjectGetSet (void); 9500d39df38Smrg 9512c393a42Smrg#define FcObjectCompare(a, b) ((int) a - (int) b) 9522c393a42Smrg 9532c393a42Smrg/* fcpat.c */ 9542c393a42Smrg 9552c393a42SmrgFcPrivate FcValue 9562c393a42SmrgFcValueCanonicalize (const FcValue *v); 9572c393a42Smrg 958898dab68SmrgFcPrivate FcValueListPtr 959898dab68SmrgFcValueListCreate (void); 960898dab68Smrg 9612c393a42SmrgFcPrivate void 9622c393a42SmrgFcValueListDestroy (FcValueListPtr l); 9632c393a42Smrg 964898dab68SmrgFcPrivate FcValueListPtr 965898dab68SmrgFcValueListPrepend (FcValueListPtr vallist, 966898dab68Smrg FcValue value, 967898dab68Smrg FcValueBinding binding); 968898dab68Smrg 969898dab68SmrgFcPrivate FcValueListPtr 970898dab68SmrgFcValueListAppend (FcValueListPtr vallist, 971898dab68Smrg FcValue value, 972898dab68Smrg FcValueBinding binding); 973898dab68Smrg 974898dab68SmrgFcPrivate FcValueListPtr 975898dab68SmrgFcValueListDuplicate(FcValueListPtr orig); 976898dab68Smrg 9772c393a42SmrgFcPrivate FcPatternElt * 9782c393a42SmrgFcPatternObjectFindElt (const FcPattern *p, FcObject object); 9792c393a42Smrg 9802c393a42SmrgFcPrivate FcPatternElt * 9812c393a42SmrgFcPatternObjectInsertElt (FcPattern *p, FcObject object); 9822c393a42Smrg 983898dab68SmrgFcPrivate FcBool 984898dab68SmrgFcPatternObjectListAdd (FcPattern *p, 985898dab68Smrg FcObject object, 986898dab68Smrg FcValueListPtr list, 987898dab68Smrg FcBool append); 988898dab68Smrg 9892c393a42SmrgFcPrivate FcBool 9902c393a42SmrgFcPatternObjectAddWithBinding (FcPattern *p, 9912c393a42Smrg FcObject object, 9922c393a42Smrg FcValue value, 9932c393a42Smrg FcValueBinding binding, 9942c393a42Smrg FcBool append); 9952c393a42Smrg 9962c393a42SmrgFcPrivate FcBool 9972c393a42SmrgFcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append); 998898dab68Smrg 9992c393a42SmrgFcPrivate FcBool 10002c393a42SmrgFcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append); 1001898dab68Smrg 10022c393a42SmrgFcPrivate FcResult 10032c393a42SmrgFcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v); 1004898dab68Smrg 10052c393a42SmrgFcPrivate FcBool 10062c393a42SmrgFcPatternObjectDel (FcPattern *p, FcObject object); 10072c393a42Smrg 10082c393a42SmrgFcPrivate FcBool 10092c393a42SmrgFcPatternObjectRemove (FcPattern *p, FcObject object, int id); 10102c393a42Smrg 10112c393a42SmrgFcPrivate FcBool 10122c393a42SmrgFcPatternObjectAddInteger (FcPattern *p, FcObject object, int i); 10132c393a42Smrg 10142c393a42SmrgFcPrivate FcBool 10152c393a42SmrgFcPatternObjectAddDouble (FcPattern *p, FcObject object, double d); 10162c393a42Smrg 10172c393a42SmrgFcPrivate FcBool 10182c393a42SmrgFcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s); 10192c393a42Smrg 10202c393a42SmrgFcPrivate FcBool 10212c393a42SmrgFcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s); 10222c393a42Smrg 10232c393a42SmrgFcPrivate FcBool 10242c393a42SmrgFcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c); 10252c393a42Smrg 10262c393a42SmrgFcPrivate FcBool 10272c393a42SmrgFcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b); 10282c393a42Smrg 10292c393a42SmrgFcPrivate FcBool 10302c393a42SmrgFcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls); 10312c393a42Smrg 103218bd4a06SmrgFcPrivate FcBool 103318bd4a06SmrgFcPatternObjectAddRange (FcPattern *p, FcObject object, const FcRange *r); 103418bd4a06Smrg 10352c393a42SmrgFcPrivate FcResult 10362c393a42SmrgFcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i); 10372c393a42Smrg 10382c393a42SmrgFcPrivate FcResult 10392c393a42SmrgFcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d); 10402c393a42Smrg 10412c393a42SmrgFcPrivate FcResult 10422c393a42SmrgFcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 ** s); 10432c393a42Smrg 10442c393a42SmrgFcPrivate FcResult 10452c393a42SmrgFcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s); 10462c393a42Smrg 10472c393a42SmrgFcPrivate FcResult 10482c393a42SmrgFcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c); 10492c393a42Smrg 10502c393a42SmrgFcPrivate FcResult 10512c393a42SmrgFcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b); 10522c393a42Smrg 10532c393a42SmrgFcPrivate FcResult 10542c393a42SmrgFcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls); 10552c393a42Smrg 105618bd4a06SmrgFcPrivate FcResult 105718bd4a06SmrgFcPatternObjectGetRange (const FcPattern *p, FcObject object, int id, FcRange **r); 105818bd4a06Smrg 10592c393a42SmrgFcPrivate FcBool 10602c393a42SmrgFcPatternAppend (FcPattern *p, FcPattern *s); 10612c393a42Smrg 106218bd4a06SmrgFcPrivate int 106318bd4a06SmrgFcPatternPosition (const FcPattern *p, const char *object); 106418bd4a06Smrg 10652c393a42SmrgFcPrivate FcChar32 10662c393a42SmrgFcStringHash (const FcChar8 *s); 10672c393a42Smrg 10682c393a42SmrgFcPrivate FcBool 10692c393a42SmrgFcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat); 10702c393a42Smrg 10712c393a42SmrgFcPrivate FcPattern * 10722c393a42SmrgFcPatternSerialize (FcSerialize *serialize, const FcPattern *pat); 10732c393a42Smrg 10742c393a42SmrgFcPrivate FcBool 10752c393a42SmrgFcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat); 10762c393a42Smrg 10772c393a42SmrgFcPrivate FcValueList * 10782c393a42SmrgFcValueListSerialize (FcSerialize *serialize, const FcValueList *pat); 10792c393a42Smrg 10802c393a42Smrg/* fcrender.c */ 10812c393a42Smrg 10822c393a42Smrg/* fcmatrix.c */ 10832c393a42Smrg 10842c393a42Smrgextern FcPrivate const FcMatrix FcIdentityMatrix; 10852c393a42Smrg 10862c393a42SmrgFcPrivate void 10872c393a42SmrgFcMatrixFree (FcMatrix *mat); 10882c393a42Smrg 108918bd4a06Smrg/* fcrange.c */ 109018bd4a06Smrg 109118bd4a06SmrgFcPrivate FcRange * 109218bd4a06SmrgFcRangePromote (double v, FcValuePromotionBuffer *vbuf); 109318bd4a06Smrg 109418bd4a06SmrgFcPrivate FcBool 109518bd4a06SmrgFcRangeIsInRange (const FcRange *a, const FcRange *b); 109618bd4a06Smrg 109718bd4a06SmrgFcPrivate FcBool 109818bd4a06SmrgFcRangeCompare (FcOp op, const FcRange *a, const FcRange *b); 109918bd4a06Smrg 110018bd4a06SmrgFcPrivate FcChar32 110118bd4a06SmrgFcRangeHash (const FcRange *r); 110218bd4a06Smrg 110318bd4a06SmrgFcPrivate FcBool 110418bd4a06SmrgFcRangeSerializeAlloc (FcSerialize *serialize, const FcRange *r); 110518bd4a06Smrg 110618bd4a06SmrgFcPrivate FcRange * 110718bd4a06SmrgFcRangeSerialize (FcSerialize *serialize, const FcRange *r); 110818bd4a06Smrg 1109898dab68Smrg/* fcstat.c */ 1110898dab68Smrg 1111898dab68SmrgFcPrivate int 1112898dab68SmrgFcStat (const FcChar8 *file, struct stat *statb); 1113898dab68Smrg 1114898dab68SmrgFcPrivate int 1115898dab68SmrgFcStatChecksum (const FcChar8 *file, struct stat *statb); 1116898dab68Smrg 1117898dab68SmrgFcPrivate FcBool 1118898dab68SmrgFcIsFsMmapSafe (int fd); 1119898dab68Smrg 1120898dab68SmrgFcPrivate FcBool 1121898dab68SmrgFcIsFsMtimeBroken (const FcChar8 *dir); 1122898dab68Smrg 11232c393a42Smrg/* fcstr.c */ 112418bd4a06SmrgFcPrivate FcStrSet * 112518bd4a06SmrgFcStrSetCreateEx (unsigned int control); 112618bd4a06Smrg 1127898dab68SmrgFcPrivate FcBool 1128898dab68SmrgFcStrSetAddLangs (FcStrSet *strs, const char *languages); 1129898dab68Smrg 11302c393a42SmrgFcPrivate void 11312c393a42SmrgFcStrSetSort (FcStrSet * set); 11322c393a42Smrg 11332c393a42SmrgFcPrivate void 11342c393a42SmrgFcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size); 11352c393a42Smrg 11362c393a42SmrgFcPrivate void 11372c393a42SmrgFcStrBufDestroy (FcStrBuf *buf); 11382c393a42Smrg 11392c393a42SmrgFcPrivate FcChar8 * 11402c393a42SmrgFcStrBufDone (FcStrBuf *buf); 11412c393a42Smrg 11420d39df38SmrgFcPrivate FcChar8 * 11430d39df38SmrgFcStrBufDoneStatic (FcStrBuf *buf); 11440d39df38Smrg 11452c393a42SmrgFcPrivate FcBool 11462c393a42SmrgFcStrBufChar (FcStrBuf *buf, FcChar8 c); 11472c393a42Smrg 11482c393a42SmrgFcPrivate FcBool 11492c393a42SmrgFcStrBufString (FcStrBuf *buf, const FcChar8 *s); 11502c393a42Smrg 11512c393a42SmrgFcPrivate FcBool 11522c393a42SmrgFcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len); 11532c393a42Smrg 11542c393a42SmrgFcPrivate int 11552c393a42SmrgFcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2); 11562c393a42Smrg 11575e61939bSmrgFcPrivate int 11585e61939bSmrgFcStrCmpIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *delims); 11595e61939bSmrg 11602c393a42SmrgFcPrivate const FcChar8 * 11612c393a42SmrgFcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2); 11622c393a42Smrg 11632c393a42SmrgFcPrivate const FcChar8 * 11642c393a42SmrgFcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2); 11652c393a42Smrg 11662c393a42SmrgFcPrivate const FcChar8 * 11672c393a42SmrgFcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2); 11682c393a42Smrg 11695e61939bSmrgFcPrivate int 11705e61939bSmrgFcStrMatchIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *delims); 11715e61939bSmrg 11725e61939bSmrgFcPrivate FcBool 11735e61939bSmrgFcStrGlobMatch (const FcChar8 *glob, 11745e61939bSmrg const FcChar8 *string); 11755e61939bSmrg 11762c393a42SmrgFcPrivate FcBool 11772c393a42SmrgFcStrUsesHome (const FcChar8 *s); 11782c393a42Smrg 11795e61939bSmrgFcPrivate FcChar8 * 11805e61939bSmrgFcStrBuildFilename (const FcChar8 *path, 11815e61939bSmrg ...); 11825e61939bSmrg 11832c393a42SmrgFcPrivate FcChar8 * 11842c393a42SmrgFcStrLastSlash (const FcChar8 *path); 11852c393a42Smrg 11862c393a42SmrgFcPrivate FcChar32 11872c393a42SmrgFcStrHashIgnoreCase (const FcChar8 *s); 11882c393a42Smrg 11892c393a42SmrgFcPrivate FcChar8 * 11902c393a42SmrgFcStrCanonFilename (const FcChar8 *s); 11912c393a42Smrg 11922c393a42SmrgFcPrivate FcBool 11932c393a42SmrgFcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str); 11942c393a42Smrg 11952c393a42SmrgFcPrivate FcChar8 * 11962c393a42SmrgFcStrSerialize (FcSerialize *serialize, const FcChar8 *str); 11972c393a42Smrg 11985e61939bSmrg/* fcobjs.c */ 11995e61939bSmrg 120018bd4a06SmrgFcPrivate void 120118bd4a06SmrgFcObjectFini (void); 120218bd4a06Smrg 12035e61939bSmrgFcPrivate FcObject 12045e61939bSmrgFcObjectLookupIdByName (const char *str); 12055e61939bSmrg 12065e61939bSmrgFcPrivate FcObject 12075e61939bSmrgFcObjectLookupBuiltinIdByName (const char *str); 12085e61939bSmrg 12095e61939bSmrgFcPrivate const char * 12105e61939bSmrgFcObjectLookupOtherNameById (FcObject id); 12115e61939bSmrg 12125e61939bSmrgFcPrivate const FcObjectType * 12135e61939bSmrgFcObjectLookupOtherTypeById (FcObject id); 12145e61939bSmrg 12155e61939bSmrgFcPrivate const FcObjectType * 12165e61939bSmrgFcObjectLookupOtherTypeByName (const char *str); 12175e61939bSmrg 12182c393a42Smrg#endif /* _FC_INT_H_ */ 1219