fcint.h revision b2a52337
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> 412c393a42Smrg#include <unistd.h> 422c393a42Smrg#include <stddef.h> 432c393a42Smrg#include <sys/types.h> 442c393a42Smrg#include <sys/stat.h> 452c393a42Smrg#include <time.h> 462c393a42Smrg#include <fontconfig/fontconfig.h> 472c393a42Smrg#include <fontconfig/fcprivate.h> 482c393a42Smrg#include "fcdeprecate.h" 495e61939bSmrg#include "fcmutex.h" 505e61939bSmrg#include "fcatomic.h" 512c393a42Smrg 522c393a42Smrg#ifndef FC_CONFIG_PATH 532c393a42Smrg#define FC_CONFIG_PATH "fonts.conf" 542c393a42Smrg#endif 552c393a42Smrg 562c393a42Smrg#ifdef _WIN32 575e61939bSmrg# include "fcwindows.h" 58898dab68Smrgtypedef UINT (WINAPI *pfnGetSystemWindowsDirectory)(LPSTR, UINT); 59898dab68Smrgtypedef HRESULT (WINAPI *pfnSHGetFolderPathA)(HWND, int, HANDLE, DWORD, LPSTR); 60898dab68Smrgextern pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory; 61898dab68Smrgextern pfnSHGetFolderPathA pSHGetFolderPathA; 62898dab68Smrg# define FC_SEARCH_PATH_SEPARATOR ';' 63898dab68Smrg# define FC_DIR_SEPARATOR '\\' 64898dab68Smrg# define FC_DIR_SEPARATOR_S "\\" 652c393a42Smrg#else 66898dab68Smrg# define FC_SEARCH_PATH_SEPARATOR ':' 67898dab68Smrg# define FC_DIR_SEPARATOR '/' 68898dab68Smrg# define FC_DIR_SEPARATOR_S "/" 692c393a42Smrg#endif 702c393a42Smrg 715e61939bSmrg#if __GNUC__ >= 4 725e61939bSmrg#define FC_UNUSED __attribute__((unused)) 735e61939bSmrg#else 745e61939bSmrg#define FC_UNUSED 755e61939bSmrg#endif 765e61939bSmrg 772c393a42Smrg#define FC_DBG_MATCH 1 782c393a42Smrg#define FC_DBG_MATCHV 2 792c393a42Smrg#define FC_DBG_EDIT 4 802c393a42Smrg#define FC_DBG_FONTSET 8 812c393a42Smrg#define FC_DBG_CACHE 16 822c393a42Smrg#define FC_DBG_CACHEV 32 832c393a42Smrg#define FC_DBG_PARSE 64 842c393a42Smrg#define FC_DBG_SCAN 128 852c393a42Smrg#define FC_DBG_SCANV 256 862c393a42Smrg#define FC_DBG_CONFIG 1024 872c393a42Smrg#define FC_DBG_LANGSET 2048 882c393a42Smrg 89d91dd368Smrg#define _FC_ASSERT_STATIC1(_line, _cond) typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1] FC_UNUSED 90898dab68Smrg#define _FC_ASSERT_STATIC0(_line, _cond) _FC_ASSERT_STATIC1 (_line, (_cond)) 91898dab68Smrg#define FC_ASSERT_STATIC(_cond) _FC_ASSERT_STATIC0 (__LINE__, (_cond)) 92898dab68Smrg 930d39df38Smrg#define FC_MIN(a,b) ((a) < (b) ? (a) : (b)) 940d39df38Smrg#define FC_MAX(a,b) ((a) > (b) ? (a) : (b)) 950d39df38Smrg#define FC_ABS(a) ((a) < 0 ? -(a) : (a)) 962c393a42Smrg 972c393a42Smrg/* slim_internal.h */ 982c393a42Smrg#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun) 992c393a42Smrg#define FcPrivate __attribute__((__visibility__("hidden"))) 1002c393a42Smrg#define HAVE_GNUC_ATTRIBUTE 1 1012c393a42Smrg#include "fcalias.h" 1022c393a42Smrg#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) 1032c393a42Smrg#define FcPrivate __hidden 1042c393a42Smrg#else /* not gcc >= 3.3 and not Sun Studio >= 8 */ 1052c393a42Smrg#define FcPrivate 1062c393a42Smrg#endif 1072c393a42Smrg 1085e61939bSmrgFC_ASSERT_STATIC (sizeof (FcRef) == sizeof (int)); 1095e61939bSmrg 1102c393a42Smrgtypedef enum _FcValueBinding { 111d91dd368Smrg FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame, 112d91dd368Smrg /* to make sure sizeof (FcValueBinding) == 4 even with -fshort-enums */ 113d91dd368Smrg FcValueBindingEnd = INT_MAX 1142c393a42Smrg} FcValueBinding; 1152c393a42Smrg 1165e61939bSmrg#define FcStrdup(s) ((FcChar8 *) strdup ((const char *) (s))) 1175e61939bSmrg#define FcFree(s) (free ((FcChar8 *) (s))) 1185e61939bSmrg 1192c393a42Smrg/* 1202c393a42Smrg * Serialized data structures use only offsets instead of pointers 1212c393a42Smrg * A low bit of 1 indicates an offset. 1222c393a42Smrg */ 123898dab68Smrg 1242c393a42Smrg/* Is the provided pointer actually an offset? */ 1252c393a42Smrg#define FcIsEncodedOffset(p) ((((intptr_t) (p)) & 1) != 0) 1262c393a42Smrg 1272c393a42Smrg/* Encode offset in a pointer of type t */ 1282c393a42Smrg#define FcOffsetEncode(o,t) ((t *) ((o) | 1)) 1292c393a42Smrg 1302c393a42Smrg/* Decode a pointer into an offset */ 1312c393a42Smrg#define FcOffsetDecode(p) (((intptr_t) (p)) & ~1) 1322c393a42Smrg 1332c393a42Smrg/* Compute pointer offset */ 1342c393a42Smrg#define FcPtrToOffset(b,p) ((intptr_t) (p) - (intptr_t) (b)) 1352c393a42Smrg 1362c393a42Smrg/* Given base address, offset and type, return a pointer */ 1372c393a42Smrg#define FcOffsetToPtr(b,o,t) ((t *) ((intptr_t) (b) + (o))) 1382c393a42Smrg 1392c393a42Smrg/* Given base address, encoded offset and type, return a pointer */ 1402c393a42Smrg#define FcEncodedOffsetToPtr(b,p,t) FcOffsetToPtr(b,FcOffsetDecode(p),t) 1412c393a42Smrg 1422c393a42Smrg/* Given base address, pointer and type, return an encoded offset */ 1432c393a42Smrg#define FcPtrToEncodedOffset(b,p,t) FcOffsetEncode(FcPtrToOffset(b,p),t) 1442c393a42Smrg 1452c393a42Smrg/* Given a structure, offset member and type, return pointer */ 1462c393a42Smrg#define FcOffsetMember(s,m,t) FcOffsetToPtr(s,(s)->m,t) 1472c393a42Smrg 1482c393a42Smrg/* Given a structure, encoded offset member and type, return pointer to member */ 1492c393a42Smrg#define FcEncodedOffsetMember(s,m,t) FcOffsetToPtr(s,FcOffsetDecode((s)->m), t) 1502c393a42Smrg 1512c393a42Smrg/* Given a structure, member and type, convert the member to a pointer */ 1522c393a42Smrg#define FcPointerMember(s,m,t) (FcIsEncodedOffset((s)->m) ? \ 1532c393a42Smrg FcEncodedOffsetMember (s,m,t) : \ 1542c393a42Smrg (s)->m) 1552c393a42Smrg 1562c393a42Smrg/* 1572c393a42Smrg * Serialized values may hold strings, charsets and langsets as pointers, 1582c393a42Smrg * unfortunately FcValue is an exposed type so we can't just always use 1592c393a42Smrg * offsets 1602c393a42Smrg */ 1612c393a42Smrg#define FcValueString(v) FcPointerMember(v,u.s,FcChar8) 1622c393a42Smrg#define FcValueCharSet(v) FcPointerMember(v,u.c,const FcCharSet) 1632c393a42Smrg#define FcValueLangSet(v) FcPointerMember(v,u.l,const FcLangSet) 1642c393a42Smrg 1652c393a42Smrgtypedef struct _FcValueList *FcValueListPtr; 1662c393a42Smrg 1672c393a42Smrgtypedef struct _FcValueList { 1682c393a42Smrg struct _FcValueList *next; 1692c393a42Smrg FcValue value; 1702c393a42Smrg FcValueBinding binding; 1712c393a42Smrg} FcValueList; 1722c393a42Smrg 1732c393a42Smrg#define FcValueListNext(vl) FcPointerMember(vl,next,FcValueList) 174898dab68Smrg 1752c393a42Smrgtypedef int FcObject; 1762c393a42Smrg 177d91dd368Smrg/* The 1024 is to leave some room for future added internal objects, such 178d91dd368Smrg * that caches from newer fontconfig can still be used with older fontconfig 179d91dd368Smrg * without getting confused. */ 180d91dd368Smrg#define FC_EXT_OBJ_INDEX 1024 181d91dd368Smrg#define FC_OBJ_ID(_n_) ((_n_) & (~FC_EXT_OBJ_INDEX)) 182d91dd368Smrg 1832c393a42Smrgtypedef struct _FcPatternElt *FcPatternEltPtr; 1842c393a42Smrg 1852c393a42Smrg/* 186898dab68Smrg * Pattern elts are stuck in a structure connected to the pattern, 1872c393a42Smrg * so they get moved around when the pattern is resized. Hence, the 1882c393a42Smrg * values field must be a pointer/offset instead of just an offset 1892c393a42Smrg */ 1902c393a42Smrgtypedef struct _FcPatternElt { 1912c393a42Smrg FcObject object; 1922c393a42Smrg FcValueList *values; 1932c393a42Smrg} FcPatternElt; 1942c393a42Smrg 1952c393a42Smrg#define FcPatternEltValues(pe) FcPointerMember(pe,values,FcValueList) 1962c393a42Smrg 1972c393a42Smrgstruct _FcPattern { 1982c393a42Smrg int num; 1992c393a42Smrg int size; 2002c393a42Smrg intptr_t elts_offset; 2015e61939bSmrg FcRef ref; 2022c393a42Smrg}; 2032c393a42Smrg 2042c393a42Smrg#define FcPatternElts(p) FcOffsetMember(p,elts_offset,FcPatternElt) 2052c393a42Smrg 2062c393a42Smrg#define FcFontSetFonts(fs) FcPointerMember(fs,fonts,FcPattern *) 2072c393a42Smrg 2082c393a42Smrg#define FcFontSetFont(fs,i) (FcIsEncodedOffset((fs)->fonts) ? \ 2092c393a42Smrg FcEncodedOffsetToPtr(fs, \ 2102c393a42Smrg FcFontSetFonts(fs)[i], \ 2112c393a42Smrg FcPattern) : \ 2122c393a42Smrg fs->fonts[i]) 2132c393a42Smrg 2142c393a42Smrgtypedef enum _FcOp { 215898dab68Smrg FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpRange, FcOpBool, FcOpCharSet, FcOpLangSet, 2162c393a42Smrg FcOpNil, 2172c393a42Smrg FcOpField, FcOpConst, 218898dab68Smrg FcOpAssign, FcOpAssignReplace, 2192c393a42Smrg FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast, 2205e61939bSmrg FcOpDelete, FcOpDeleteAll, 2212c393a42Smrg FcOpQuest, 222898dab68Smrg FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual, 2232c393a42Smrg FcOpContains, FcOpListing, FcOpNotContains, 2242c393a42Smrg FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual, 2252c393a42Smrg FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide, 2262c393a42Smrg FcOpNot, FcOpComma, FcOpFloor, FcOpCeil, FcOpRound, FcOpTrunc, 2272c393a42Smrg FcOpInvalid 2282c393a42Smrg} FcOp; 2292c393a42Smrg 230898dab68Smrgtypedef enum _FcOpFlags { 231898dab68Smrg FcOpFlagIgnoreBlanks = 1 << 0 232898dab68Smrg} FcOpFlags; 233898dab68Smrg 234898dab68Smrg#define FC_OP_GET_OP(_x_) ((_x_) & 0xffff) 235898dab68Smrg#define FC_OP_GET_FLAGS(_x_) (((_x_) & 0xffff0000) >> 16) 236898dab68Smrg#define FC_OP(_x_,_f_) (FC_OP_GET_OP (_x_) | ((_f_) << 16)) 237898dab68Smrg 2385e61939bSmrgtypedef struct _FcExprMatrix { 2395e61939bSmrg struct _FcExpr *xx, *xy, *yx, *yy; 2405e61939bSmrg} FcExprMatrix; 2415e61939bSmrg 2425e61939bSmrgtypedef struct _FcExprName { 2435e61939bSmrg FcObject object; 2445e61939bSmrg FcMatchKind kind; 2455e61939bSmrg} FcExprName; 2465e61939bSmrg 2475e61939bSmrg 2482c393a42Smrgtypedef struct _FcExpr { 2492c393a42Smrg FcOp op; 2502c393a42Smrg union { 2512c393a42Smrg int ival; 2522c393a42Smrg double dval; 253898dab68Smrg const FcChar8 *sval; 2545e61939bSmrg FcExprMatrix *mexpr; 2552c393a42Smrg FcBool bval; 2562c393a42Smrg FcCharSet *cval; 257898dab68Smrg FcLangSet *lval; 2585e61939bSmrg 2595e61939bSmrg FcExprName name; 260898dab68Smrg const FcChar8 *constant; 2612c393a42Smrg struct { 2622c393a42Smrg struct _FcExpr *left, *right; 2632c393a42Smrg } tree; 2642c393a42Smrg } u; 2652c393a42Smrg} FcExpr; 2662c393a42Smrg 2670d39df38Smrgtypedef struct _FcExprPage FcExprPage; 2680d39df38Smrg 2690d39df38Smrgstruct _FcExprPage { 2700d39df38Smrg FcExprPage *next_page; 2710d39df38Smrg FcExpr *next; 2720d39df38Smrg FcExpr exprs[(1024 - 2/* two pointers */ - 2/* malloc overhead */) * sizeof (void *) / sizeof (FcExpr)]; 273898dab68Smrg FcExpr end[FLEXIBLE_ARRAY_MEMBER]; 2740d39df38Smrg}; 2750d39df38Smrg 2762c393a42Smrgtypedef enum _FcQual { 2772c393a42Smrg FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst 2782c393a42Smrg} FcQual; 2792c393a42Smrg 2802c393a42Smrg#define FcMatchDefault ((FcMatchKind) -1) 2812c393a42Smrg 2822c393a42Smrgtypedef struct _FcTest { 2832c393a42Smrg FcMatchKind kind; 2842c393a42Smrg FcQual qual; 2852c393a42Smrg FcObject object; 2862c393a42Smrg FcOp op; 2872c393a42Smrg FcExpr *expr; 2882c393a42Smrg} FcTest; 2892c393a42Smrg 2902c393a42Smrgtypedef struct _FcEdit { 2912c393a42Smrg FcObject object; 2922c393a42Smrg FcOp op; 2932c393a42Smrg FcExpr *expr; 2942c393a42Smrg FcValueBinding binding; 2952c393a42Smrg} FcEdit; 2962c393a42Smrg 297d91dd368Smrgtypedef enum _FcRuleType { 298d91dd368Smrg FcRuleUnknown, FcRuleTest, FcRuleEdit 299d91dd368Smrg} FcRuleType; 300d91dd368Smrg 301d91dd368Smrgtypedef struct _FcRule { 302d91dd368Smrg struct _FcRule *next; 303d91dd368Smrg FcRuleType type; 304d91dd368Smrg union { 305d91dd368Smrg FcTest *test; 306d91dd368Smrg FcEdit *edit; 307d91dd368Smrg } u; 308d91dd368Smrg} FcRule; 309d91dd368Smrg 3102c393a42Smrgtypedef struct _FcSubst { 3112c393a42Smrg struct _FcSubst *next; 312d91dd368Smrg FcRule *rule; 3132c393a42Smrg} FcSubst; 3142c393a42Smrg 3152c393a42Smrgtypedef struct _FcCharLeaf { 3162c393a42Smrg FcChar32 map[256/32]; 3172c393a42Smrg} FcCharLeaf; 3182c393a42Smrg 3192c393a42Smrgstruct _FcCharSet { 3205e61939bSmrg FcRef ref; /* reference count */ 3212c393a42Smrg int num; /* size of leaves and numbers arrays */ 3222c393a42Smrg intptr_t leaves_offset; 3232c393a42Smrg intptr_t numbers_offset; 3242c393a42Smrg}; 3252c393a42Smrg 3262c393a42Smrg#define FcCharSetLeaves(c) FcOffsetMember(c,leaves_offset,intptr_t) 3272c393a42Smrg#define FcCharSetLeaf(c,i) (FcOffsetToPtr(FcCharSetLeaves(c), \ 3282c393a42Smrg FcCharSetLeaves(c)[i], \ 3292c393a42Smrg FcCharLeaf)) 3302c393a42Smrg#define FcCharSetNumbers(c) FcOffsetMember(c,numbers_offset,FcChar16) 3312c393a42Smrg 3322c393a42Smrgstruct _FcStrSet { 3335e61939bSmrg FcRef ref; /* reference count */ 3342c393a42Smrg int num; 3352c393a42Smrg int size; 3362c393a42Smrg FcChar8 **strs; 3372c393a42Smrg}; 3382c393a42Smrg 3392c393a42Smrgstruct _FcStrList { 3402c393a42Smrg FcStrSet *set; 3412c393a42Smrg int n; 3422c393a42Smrg}; 3432c393a42Smrg 3442c393a42Smrgtypedef struct _FcStrBuf { 3452c393a42Smrg FcChar8 *buf; 3462c393a42Smrg FcBool allocated; 3472c393a42Smrg FcBool failed; 3482c393a42Smrg int len; 3492c393a42Smrg int size; 3500d39df38Smrg FcChar8 buf_static[16 * sizeof (void *)]; 3512c393a42Smrg} FcStrBuf; 3522c393a42Smrg 3532c393a42Smrgstruct _FcCache { 3545e61939bSmrg unsigned int magic; /* FC_CACHE_MAGIC_MMAP or FC_CACHE_ALLOC */ 3552c393a42Smrg int version; /* FC_CACHE_CONTENT_VERSION */ 3562c393a42Smrg intptr_t size; /* size of file */ 3572c393a42Smrg intptr_t dir; /* offset to dir name */ 3582c393a42Smrg intptr_t dirs; /* offset to subdirs */ 3592c393a42Smrg int dirs_count; /* number of subdir strings */ 3602c393a42Smrg intptr_t set; /* offset to font set */ 361898dab68Smrg int checksum; /* checksum of directory state */ 3622c393a42Smrg}; 3632c393a42Smrg 3642c393a42Smrg#undef FcCacheDir 3652c393a42Smrg#undef FcCacheSubdir 3662c393a42Smrg#define FcCacheDir(c) FcOffsetMember(c,dir,FcChar8) 3672c393a42Smrg#define FcCacheDirs(c) FcOffsetMember(c,dirs,intptr_t) 3682c393a42Smrg#define FcCacheSet(c) FcOffsetMember(c,set,FcFontSet) 3692c393a42Smrg#define FcCacheSubdir(c,i) FcOffsetToPtr (FcCacheDirs(c),\ 3702c393a42Smrg FcCacheDirs(c)[i], \ 3712c393a42Smrg FcChar8) 3722c393a42Smrg 3732c393a42Smrg/* 3742c393a42Smrg * Used while constructing a directory cache object 3752c393a42Smrg */ 3762c393a42Smrg 3772c393a42Smrg#define FC_SERIALIZE_HASH_SIZE 8191 3782c393a42Smrg 3790d39df38Smrgtypedef union _FcAlign { 3800d39df38Smrg double d; 3810d39df38Smrg int i; 3820d39df38Smrg intptr_t ip; 3830d39df38Smrg FcBool b; 3840d39df38Smrg void *p; 3850d39df38Smrg} FcAlign; 3860d39df38Smrg 3872c393a42Smrgtypedef struct _FcSerializeBucket { 3882c393a42Smrg struct _FcSerializeBucket *next; 3892c393a42Smrg const void *object; 3902c393a42Smrg intptr_t offset; 3912c393a42Smrg} FcSerializeBucket; 3922c393a42Smrg 3932c393a42Smrgtypedef struct _FcCharSetFreezer FcCharSetFreezer; 3942c393a42Smrg 3952c393a42Smrgtypedef struct _FcSerialize { 3962c393a42Smrg intptr_t size; 3972c393a42Smrg FcCharSetFreezer *cs_freezer; 3982c393a42Smrg void *linear; 3992c393a42Smrg FcSerializeBucket *buckets[FC_SERIALIZE_HASH_SIZE]; 4002c393a42Smrg} FcSerialize; 401898dab68Smrg 4022c393a42Smrg/* 4032c393a42Smrg * To map adobe glyph names to unicode values, a precomputed hash 4042c393a42Smrg * table is used 4052c393a42Smrg */ 4062c393a42Smrg 4072c393a42Smrgtypedef struct _FcGlyphName { 4082c393a42Smrg FcChar32 ucs; /* unicode value */ 4092c393a42Smrg FcChar8 name[1]; /* name extends beyond struct */ 4102c393a42Smrg} FcGlyphName; 4112c393a42Smrg 4122c393a42Smrg/* 4132c393a42Smrg * To perform case-insensitive string comparisons, a table 4142c393a42Smrg * is used which holds three different kinds of folding data. 415898dab68Smrg * 4162c393a42Smrg * The first is a range of upper case values mapping to a range 4172c393a42Smrg * of their lower case equivalents. Within each range, the offset 4182c393a42Smrg * between upper and lower case is constant. 4192c393a42Smrg * 4202c393a42Smrg * The second is a range of upper case values which are interleaved 4212c393a42Smrg * with their lower case equivalents. 422898dab68Smrg * 4232c393a42Smrg * The third is a set of raw unicode values mapping to a list 4242c393a42Smrg * of unicode values for comparison purposes. This allows conversion 4252c393a42Smrg * of ß to "ss" so that SS, ss and ß all match. A separate array 4262c393a42Smrg * holds the list of unicode values for each entry. 4272c393a42Smrg * 4282c393a42Smrg * These are packed into a single table. Using a binary search, 4292c393a42Smrg * the appropriate entry can be located. 4302c393a42Smrg */ 4312c393a42Smrg 4322c393a42Smrg#define FC_CASE_FOLD_RANGE 0 4332c393a42Smrg#define FC_CASE_FOLD_EVEN_ODD 1 4342c393a42Smrg#define FC_CASE_FOLD_FULL 2 4352c393a42Smrg 4362c393a42Smrgtypedef struct _FcCaseFold { 4372c393a42Smrg FcChar32 upper; 4382c393a42Smrg FcChar16 method : 2; 4392c393a42Smrg FcChar16 count : 14; 4402c393a42Smrg short offset; /* lower - upper for RANGE, table id for FULL */ 4412c393a42Smrg} FcCaseFold; 4422c393a42Smrg 4432c393a42Smrg#define FC_MAX_FILE_LEN 4096 4442c393a42Smrg 4452c393a42Smrg#define FC_CACHE_MAGIC_MMAP 0xFC02FC04 4462c393a42Smrg#define FC_CACHE_MAGIC_ALLOC 0xFC02FC05 4475e61939bSmrg#define FC_CACHE_CONTENT_VERSION 4 4482c393a42Smrg 4492c393a42Smrgstruct _FcAtomic { 4502c393a42Smrg FcChar8 *file; /* original file name */ 4512c393a42Smrg FcChar8 *new; /* temp file name -- write data here */ 4522c393a42Smrg FcChar8 *lck; /* lockfile name (used for locking) */ 4532c393a42Smrg FcChar8 *tmp; /* tmpfile name (used for locking) */ 4542c393a42Smrg}; 4552c393a42Smrg 4562c393a42Smrgstruct _FcBlanks { 4572c393a42Smrg int nblank; 4582c393a42Smrg int sblank; 4592c393a42Smrg FcChar32 *blanks; 4602c393a42Smrg}; 4612c393a42Smrg 4622c393a42Smrgstruct _FcConfig { 4632c393a42Smrg /* 4642c393a42Smrg * File names loaded from the configuration -- saved here as the 4652c393a42Smrg * cache file must be consulted before the directories are scanned, 4662c393a42Smrg * and those directives may occur in any order 4672c393a42Smrg */ 4682c393a42Smrg FcStrSet *configDirs; /* directories to scan for fonts */ 4692c393a42Smrg /* 4702c393a42Smrg * Set of allowed blank chars -- used to 4712c393a42Smrg * trim fonts of bogus glyphs 4722c393a42Smrg */ 4732c393a42Smrg FcBlanks *blanks; 4742c393a42Smrg /* 4752c393a42Smrg * List of directories containing fonts, 476898dab68Smrg * built by recursively scanning the set 4772c393a42Smrg * of configured directories 4782c393a42Smrg */ 4792c393a42Smrg FcStrSet *fontDirs; 4802c393a42Smrg /* 4812c393a42Smrg * List of directories containing cache files. 4822c393a42Smrg */ 4832c393a42Smrg FcStrSet *cacheDirs; 4842c393a42Smrg /* 4852c393a42Smrg * Names of all of the configuration files used 4862c393a42Smrg * to create this configuration 4872c393a42Smrg */ 4882c393a42Smrg FcStrSet *configFiles; /* config files loaded */ 4892c393a42Smrg /* 4902c393a42Smrg * Substitution instructions for patterns and fonts; 4912c393a42Smrg * maxObjects is used to allocate appropriate intermediate storage 4922c393a42Smrg * while performing a whole set of substitutions 4932c393a42Smrg */ 4942c393a42Smrg FcSubst *substPattern; /* substitutions for patterns */ 4952c393a42Smrg FcSubst *substFont; /* substitutions for fonts */ 4962c393a42Smrg FcSubst *substScan; /* substitutions for scanned fonts */ 4972c393a42Smrg int maxObjects; /* maximum number of tests in all substs */ 4982c393a42Smrg /* 4992c393a42Smrg * List of patterns used to control font file selection 5002c393a42Smrg */ 5012c393a42Smrg FcStrSet *acceptGlobs; 5022c393a42Smrg FcStrSet *rejectGlobs; 5032c393a42Smrg FcFontSet *acceptPatterns; 5042c393a42Smrg FcFontSet *rejectPatterns; 5052c393a42Smrg /* 5062c393a42Smrg * The set of fonts loaded from the listed directories; the 5072c393a42Smrg * order within the set does not determine the font selection, 5082c393a42Smrg * except in the case of identical matches in which case earlier fonts 5092c393a42Smrg * match preferrentially 5102c393a42Smrg */ 5112c393a42Smrg FcFontSet *fonts[FcSetApplication + 1]; 5122c393a42Smrg /* 5132c393a42Smrg * Fontconfig can periodically rescan the system configuration 5142c393a42Smrg * and font directories. This rescanning occurs when font 5152c393a42Smrg * listing requests are made, but no more often than rescanInterval 5162c393a42Smrg * seconds apart. 5172c393a42Smrg */ 5182c393a42Smrg time_t rescanTime; /* last time information was scanned */ 5192c393a42Smrg int rescanInterval; /* interval between scans */ 5200d39df38Smrg 5215e61939bSmrg FcRef ref; /* reference count */ 5220d39df38Smrg 5235e61939bSmrg FcExprPage *expr_pool; /* pool of FcExpr's */ 524898dab68Smrg 5255e61939bSmrg FcChar8 *sysRoot; /* override the system root directory */ 5265e61939bSmrg}; 5272c393a42Smrg 5282c393a42Smrgtypedef struct _FcFileTime { 5292c393a42Smrg time_t time; 5302c393a42Smrg FcBool set; 5312c393a42Smrg} FcFileTime; 5322c393a42Smrg 5332c393a42Smrgtypedef struct _FcCharMap FcCharMap; 5342c393a42Smrg 535898dab68Smrgtypedef struct _FcRange FcRange; 536898dab68Smrg 537898dab68Smrgstruct _FcRange { 538898dab68Smrg FcChar32 begin; 539898dab68Smrg FcChar32 end; 540898dab68Smrg}; 541898dab68Smrg 542898dab68Smrgtypedef struct _FcStatFS FcStatFS; 543898dab68Smrg 544898dab68Smrgstruct _FcStatFS { 545898dab68Smrg FcBool is_remote_fs; 546898dab68Smrg FcBool is_mtime_broken; 547898dab68Smrg}; 548898dab68Smrg 5495e61939bSmrgtypedef struct _FcValuePromotionBuffer FcValuePromotionBuffer; 5505e61939bSmrg 5515e61939bSmrgstruct _FcValuePromotionBuffer { 5525e61939bSmrg union { 5535e61939bSmrg double d; 5545e61939bSmrg int i; 5555e61939bSmrg long l; 5565e61939bSmrg char c[256]; /* Enlarge as needed */ 5575e61939bSmrg } u; 5585e61939bSmrg}; 5595e61939bSmrg 5602c393a42Smrg/* fcblanks.c */ 5612c393a42Smrg 5622c393a42Smrg/* fccache.c */ 5632c393a42Smrg 5642c393a42SmrgFcPrivate FcCache * 5652c393a42SmrgFcDirCacheScan (const FcChar8 *dir, FcConfig *config); 5662c393a42Smrg 5672c393a42SmrgFcPrivate FcCache * 5682c393a42SmrgFcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs); 5692c393a42Smrg 570b2a52337SmrgFcPrivate FcCache * 571b2a52337SmrgFcDirCacheRebuild (FcCache *cache, struct stat *dir_stat, FcStrSet *dirs); 572b2a52337Smrg 5732c393a42SmrgFcPrivate FcBool 5742c393a42SmrgFcDirCacheWrite (FcCache *cache, FcConfig *config); 575898dab68Smrg 576898dab68SmrgFcPrivate FcBool 577898dab68SmrgFcDirCacheCreateTagFile (const FcChar8 *cache_dir); 578898dab68Smrg 5792c393a42SmrgFcPrivate void 5802c393a42SmrgFcCacheObjectReference (void *object); 5812c393a42Smrg 5822c393a42SmrgFcPrivate void 5832c393a42SmrgFcCacheObjectDereference (void *object); 5842c393a42Smrg 5852c393a42SmrgFcPrivate void 5862c393a42SmrgFcCacheFini (void); 587898dab68Smrg 5882c393a42SmrgFcPrivate void 5892c393a42SmrgFcDirCacheReference (FcCache *cache, int nref); 5902c393a42Smrg 5912c393a42Smrg/* fccfg.c */ 5922c393a42Smrg 5935e61939bSmrgFcPrivate FcBool 5945e61939bSmrgFcConfigInit (void); 5955e61939bSmrg 5965e61939bSmrgFcPrivate void 5975e61939bSmrgFcConfigFini (void); 5985e61939bSmrg 599898dab68SmrgFcPrivate FcChar8 * 600898dab68SmrgFcConfigXdgCacheHome (void); 601898dab68Smrg 602898dab68SmrgFcPrivate FcChar8 * 603898dab68SmrgFcConfigXdgConfigHome (void); 604898dab68Smrg 605898dab68SmrgFcPrivate FcChar8 * 606898dab68SmrgFcConfigXdgDataHome (void); 607898dab68Smrg 6080d39df38SmrgFcPrivate FcExpr * 6090d39df38SmrgFcConfigAllocExpr (FcConfig *config); 6100d39df38Smrg 6112c393a42SmrgFcPrivate FcBool 6122c393a42SmrgFcConfigAddConfigDir (FcConfig *config, 6132c393a42Smrg const FcChar8 *d); 6142c393a42Smrg 6152c393a42SmrgFcPrivate FcBool 6162c393a42SmrgFcConfigAddFontDir (FcConfig *config, 6172c393a42Smrg const FcChar8 *d); 6182c393a42Smrg 6192c393a42SmrgFcPrivate FcBool 6202c393a42SmrgFcConfigAddDir (FcConfig *config, 6212c393a42Smrg const FcChar8 *d); 6222c393a42Smrg 6232c393a42SmrgFcPrivate FcBool 6242c393a42SmrgFcConfigAddCacheDir (FcConfig *config, 6252c393a42Smrg const FcChar8 *d); 6262c393a42Smrg 6272c393a42SmrgFcPrivate FcBool 6282c393a42SmrgFcConfigAddConfigFile (FcConfig *config, 6292c393a42Smrg const FcChar8 *f); 6302c393a42Smrg 6312c393a42SmrgFcPrivate FcBool 6322c393a42SmrgFcConfigAddBlank (FcConfig *config, 6332c393a42Smrg FcChar32 blank); 6342c393a42Smrg 635d91dd368SmrgFcBool 636d91dd368SmrgFcConfigAddRule (FcConfig *config, 637d91dd368Smrg FcRule *rule, 6382c393a42Smrg FcMatchKind kind); 6392c393a42Smrg 6402c393a42SmrgFcPrivate void 6412c393a42SmrgFcConfigSetFonts (FcConfig *config, 6422c393a42Smrg FcFontSet *fonts, 6432c393a42Smrg FcSetName set); 6442c393a42Smrg 6452c393a42SmrgFcPrivate FcBool 6462c393a42SmrgFcConfigCompareValue (const FcValue *m, 647d91dd368Smrg unsigned int op_, 6482c393a42Smrg const FcValue *v); 6492c393a42Smrg 6502c393a42SmrgFcPrivate FcBool 6512c393a42SmrgFcConfigGlobAdd (FcConfig *config, 6522c393a42Smrg const FcChar8 *glob, 6532c393a42Smrg FcBool accept); 6542c393a42Smrg 6552c393a42SmrgFcPrivate FcBool 6562c393a42SmrgFcConfigAcceptFilename (FcConfig *config, 6572c393a42Smrg const FcChar8 *filename); 6582c393a42Smrg 6592c393a42SmrgFcPrivate FcBool 6602c393a42SmrgFcConfigPatternsAdd (FcConfig *config, 6612c393a42Smrg FcPattern *pattern, 6622c393a42Smrg FcBool accept); 6632c393a42Smrg 6642c393a42SmrgFcPrivate FcBool 6652c393a42SmrgFcConfigAcceptFont (FcConfig *config, 6662c393a42Smrg const FcPattern *font); 6672c393a42Smrg 6682c393a42SmrgFcPrivate FcFileTime 6692c393a42SmrgFcConfigModifiedTime (FcConfig *config); 6702c393a42Smrg 6712c393a42SmrgFcPrivate FcBool 672898dab68SmrgFcConfigAddCache (FcConfig *config, FcCache *cache, 6732c393a42Smrg FcSetName set, FcStrSet *dirSet); 6742c393a42Smrg 6752c393a42Smrg/* fcserialize.c */ 6762c393a42SmrgFcPrivate intptr_t 6772c393a42SmrgFcAlignSize (intptr_t size); 678898dab68Smrg 6792c393a42SmrgFcPrivate FcSerialize * 6802c393a42SmrgFcSerializeCreate (void); 6812c393a42Smrg 6822c393a42SmrgFcPrivate void 6832c393a42SmrgFcSerializeDestroy (FcSerialize *serialize); 6842c393a42Smrg 6852c393a42SmrgFcPrivate FcBool 6862c393a42SmrgFcSerializeAlloc (FcSerialize *serialize, const void *object, int size); 6872c393a42Smrg 6882c393a42SmrgFcPrivate intptr_t 6892c393a42SmrgFcSerializeReserve (FcSerialize *serialize, int size); 6902c393a42Smrg 6912c393a42SmrgFcPrivate intptr_t 6922c393a42SmrgFcSerializeOffset (FcSerialize *serialize, const void *object); 6932c393a42Smrg 6942c393a42SmrgFcPrivate void * 6952c393a42SmrgFcSerializePtr (FcSerialize *serialize, const void *object); 6962c393a42Smrg 6972c393a42SmrgFcPrivate FcBool 6982c393a42SmrgFcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l); 6992c393a42Smrg 7002c393a42SmrgFcPrivate FcLangSet * 7012c393a42SmrgFcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l); 7022c393a42Smrg 7032c393a42Smrg/* fccharset.c */ 7042c393a42SmrgFcPrivate void 7052c393a42SmrgFcLangCharSetPopulate (void); 7062c393a42Smrg 7072c393a42SmrgFcPrivate FcCharSetFreezer * 7082c393a42SmrgFcCharSetFreezerCreate (void); 7092c393a42Smrg 7102c393a42SmrgFcPrivate const FcCharSet * 7112c393a42SmrgFcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs); 7122c393a42Smrg 7132c393a42SmrgFcPrivate void 7142c393a42SmrgFcCharSetFreezerDestroy (FcCharSetFreezer *freezer); 7152c393a42Smrg 7162c393a42SmrgFcPrivate FcBool 7172c393a42SmrgFcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c); 7182c393a42Smrg 7192c393a42SmrgFcPrivate FcCharSet * 7202c393a42SmrgFcNameParseCharSet (FcChar8 *string); 7212c393a42Smrg 7220d39df38SmrgFcPrivate FcBool 7230d39df38SmrgFcNameUnparseValue (FcStrBuf *buf, 7240d39df38Smrg FcValue *v0, 7250d39df38Smrg FcChar8 *escape); 7260d39df38Smrg 7270d39df38SmrgFcPrivate FcBool 7280d39df38SmrgFcNameUnparseValueList (FcStrBuf *buf, 7290d39df38Smrg FcValueListPtr v, 7300d39df38Smrg FcChar8 *escape); 7310d39df38Smrg 7322c393a42SmrgFcPrivate FcCharLeaf * 7332c393a42SmrgFcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4); 7342c393a42Smrg 7352c393a42SmrgFcPrivate FcBool 7362c393a42SmrgFcCharSetSerializeAlloc(FcSerialize *serialize, const FcCharSet *cs); 7372c393a42Smrg 7382c393a42SmrgFcPrivate FcCharSet * 7392c393a42SmrgFcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs); 7402c393a42Smrg 7412c393a42SmrgFcPrivate FcChar16 * 7422c393a42SmrgFcCharSetGetNumbers(const FcCharSet *c); 7432c393a42Smrg 7445e61939bSmrg/* fccompat.c */ 7455e61939bSmrgFcPrivate int 7465e61939bSmrgFcOpen(const char *pathname, int flags, ...); 7475e61939bSmrg 7485e61939bSmrgFcPrivate int 7495e61939bSmrgFcMakeTempfile (char *template); 7505e61939bSmrg 7515e61939bSmrgFcPrivate int32_t 7525e61939bSmrgFcRandom (void); 7535e61939bSmrg 754d91dd368SmrgFcPrivate FcBool 755d91dd368SmrgFcMakeDirectory (const FcChar8 *dir); 756d91dd368Smrg 7572c393a42Smrg/* fcdbg.c */ 7585e61939bSmrg 7595e61939bSmrgFcPrivate void 7605e61939bSmrgFcValuePrintFile (FILE *f, const FcValue v); 7615e61939bSmrg 7622c393a42SmrgFcPrivate void 763898dab68SmrgFcValuePrintWithPosition (const FcValue v, FcBool show_pos_mark); 764898dab68Smrg 765898dab68SmrgFcPrivate void 766898dab68SmrgFcValueListPrintWithPosition (FcValueListPtr l, const FcValueListPtr pos); 767898dab68Smrg 768898dab68SmrgFcPrivate void 769898dab68SmrgFcValueListPrint (FcValueListPtr l); 7702c393a42Smrg 7712c393a42SmrgFcPrivate void 7722c393a42SmrgFcLangSetPrint (const FcLangSet *ls); 7732c393a42Smrg 7742c393a42SmrgFcPrivate void 7752c393a42SmrgFcOpPrint (FcOp op); 7762c393a42Smrg 7772c393a42SmrgFcPrivate void 7782c393a42SmrgFcTestPrint (const FcTest *test); 7792c393a42Smrg 7802c393a42SmrgFcPrivate void 7812c393a42SmrgFcExprPrint (const FcExpr *expr); 7822c393a42Smrg 7832c393a42SmrgFcPrivate void 7842c393a42SmrgFcEditPrint (const FcEdit *edit); 7852c393a42Smrg 7862c393a42SmrgFcPrivate void 7872c393a42SmrgFcSubstPrint (const FcSubst *subst); 7882c393a42Smrg 7892c393a42SmrgFcPrivate void 7902c393a42SmrgFcCharSetPrint (const FcCharSet *c); 791898dab68Smrg 7922c393a42Smrgextern FcPrivate int FcDebugVal; 7932c393a42Smrg 7942c393a42Smrg#define FcDebug() (FcDebugVal) 7952c393a42Smrg 7962c393a42SmrgFcPrivate void 7972c393a42SmrgFcInitDebug (void); 7982c393a42Smrg 7992c393a42Smrg/* fcdefault.c */ 8002c393a42SmrgFcPrivate FcChar8 * 8012c393a42SmrgFcGetDefaultLang (void); 8022c393a42Smrg 8035e61939bSmrgFcPrivate FcChar8 * 8045e61939bSmrgFcGetPrgname (void); 8055e61939bSmrg 8065e61939bSmrgFcPrivate void 8075e61939bSmrgFcDefaultFini (void); 8085e61939bSmrg 8092c393a42Smrg/* fcdir.c */ 8102c393a42Smrg 8115e61939bSmrgFcPrivate FcBool 8125e61939bSmrgFcFileIsLink (const FcChar8 *file); 8135e61939bSmrg 814d91dd368SmrgFcPrivate FcBool 815d91dd368SmrgFcFileIsFile (const FcChar8 *file); 816d91dd368Smrg 8172c393a42SmrgFcPrivate FcBool 8182c393a42SmrgFcFileScanConfig (FcFontSet *set, 8192c393a42Smrg FcStrSet *dirs, 8202c393a42Smrg FcBlanks *blanks, 8212c393a42Smrg const FcChar8 *file, 8222c393a42Smrg FcConfig *config); 8232c393a42Smrg 8242c393a42SmrgFcPrivate FcBool 8252c393a42SmrgFcDirScanConfig (FcFontSet *set, 8262c393a42Smrg FcStrSet *dirs, 8272c393a42Smrg FcBlanks *blanks, 8282c393a42Smrg const FcChar8 *dir, 8292c393a42Smrg FcBool force, 8302c393a42Smrg FcConfig *config); 8312c393a42Smrg 8322c393a42Smrg/* fcfont.c */ 8332c393a42SmrgFcPrivate int 8342c393a42SmrgFcFontDebug (void); 8350d39df38Smrg 8362c393a42Smrg/* fcfs.c */ 8372c393a42Smrg 8382c393a42SmrgFcPrivate FcBool 8392c393a42SmrgFcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s); 8402c393a42Smrg 8412c393a42SmrgFcPrivate FcFontSet * 8422c393a42SmrgFcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s); 8432c393a42Smrg 844b2a52337SmrgFcPrivate FcFontSet * 845b2a52337SmrgFcFontSetDeserialize (const FcFontSet *set); 846b2a52337Smrg 8475e61939bSmrg/* fchash.c */ 8485e61939bSmrgFcPrivate FcChar8 * 8495e61939bSmrgFcHashGetSHA256Digest (const FcChar8 *input_strings, 8505e61939bSmrg size_t len); 8512c393a42Smrg 8525e61939bSmrgFcPrivate FcChar8 * 8535e61939bSmrgFcHashGetSHA256DigestFromFile (const FcChar8 *filename); 8545e61939bSmrg 8555e61939bSmrgFcPrivate FcChar8 * 8565e61939bSmrgFcHashGetSHA256DigestFromMemory (const char *fontdata, 8575e61939bSmrg size_t length); 8582c393a42Smrg 8592c393a42Smrg/* fcinit.c */ 8605e61939bSmrgFcPrivate FcConfig * 8615e61939bSmrgFcInitLoadOwnConfig (FcConfig *config); 8622c393a42Smrg 8635e61939bSmrgFcPrivate FcConfig * 8645e61939bSmrgFcInitLoadOwnConfigAndFonts (FcConfig *config); 8652c393a42Smrg 8665e61939bSmrg/* fcxml.c */ 8672c393a42SmrgFcPrivate void 8685e61939bSmrgFcTestDestroy (FcTest *test); 8692c393a42Smrg 8702c393a42SmrgFcPrivate void 8715e61939bSmrgFcEditDestroy (FcEdit *e); 8722c393a42Smrg 873d91dd368Smrgvoid 874d91dd368SmrgFcRuleDestroy (FcRule *rule); 875d91dd368Smrg 8762c393a42Smrg/* fclang.c */ 8772c393a42SmrgFcPrivate FcLangSet * 878898dab68SmrgFcFreeTypeLangSet (const FcCharSet *charset, 8792c393a42Smrg const FcChar8 *exclusiveLang); 8802c393a42Smrg 8812c393a42SmrgFcPrivate FcLangResult 8822c393a42SmrgFcLangCompare (const FcChar8 *s1, const FcChar8 *s2); 883898dab68Smrg 8842c393a42SmrgFcPrivate FcLangSet * 8855e61939bSmrgFcLangSetPromote (const FcChar8 *lang, FcValuePromotionBuffer *buf); 8862c393a42Smrg 8872c393a42SmrgFcPrivate FcLangSet * 8882c393a42SmrgFcNameParseLangSet (const FcChar8 *string); 8892c393a42Smrg 8902c393a42SmrgFcPrivate FcBool 8912c393a42SmrgFcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls); 8922c393a42Smrg 8932c393a42SmrgFcPrivate FcChar8 * 8942c393a42SmrgFcNameUnparseEscaped (FcPattern *pat, FcBool escape); 8952c393a42Smrg 8962c393a42Smrg/* fclist.c */ 8972c393a42Smrg 8982c393a42SmrgFcPrivate FcBool 8992c393a42SmrgFcListPatternMatchAny (const FcPattern *p, 9002c393a42Smrg const FcPattern *font); 9012c393a42Smrg 9022c393a42Smrg/* fcmatch.c */ 9032c393a42Smrg 9042c393a42Smrg/* fcname.c */ 9052c393a42Smrg 9065e61939bSmrgenum { 9075e61939bSmrg FC_INVALID_OBJECT = 0, 9085e61939bSmrg#define FC_OBJECT(NAME, Type, Cmp) FC_##NAME##_OBJECT, 9095e61939bSmrg#include "fcobjs.h" 9105e61939bSmrg#undef FC_OBJECT 9115e61939bSmrg FC_ONE_AFTER_MAX_BASE_OBJECT 9125e61939bSmrg#define FC_MAX_BASE_OBJECT (FC_ONE_AFTER_MAX_BASE_OBJECT - 1) 9135e61939bSmrg}; 9142c393a42Smrg 9152c393a42SmrgFcPrivate FcBool 9162c393a42SmrgFcNameBool (const FcChar8 *v, FcBool *result); 9172c393a42Smrg 9182c393a42SmrgFcPrivate FcBool 9192c393a42SmrgFcObjectValidType (FcObject object, FcType type); 9202c393a42Smrg 9212c393a42SmrgFcPrivate FcObject 9222c393a42SmrgFcObjectFromName (const char * name); 9232c393a42Smrg 9242c393a42SmrgFcPrivate const char * 9252c393a42SmrgFcObjectName (FcObject object); 9262c393a42Smrg 9270d39df38SmrgFcPrivate FcObjectSet * 9280d39df38SmrgFcObjectGetSet (void); 9290d39df38Smrg 9302c393a42Smrg#define FcObjectCompare(a, b) ((int) a - (int) b) 9312c393a42Smrg 9322c393a42Smrg/* fcpat.c */ 9332c393a42Smrg 9342c393a42SmrgFcPrivate FcValue 9352c393a42SmrgFcValueCanonicalize (const FcValue *v); 9362c393a42Smrg 937898dab68SmrgFcPrivate FcValueListPtr 938898dab68SmrgFcValueListCreate (void); 939898dab68Smrg 9402c393a42SmrgFcPrivate void 9412c393a42SmrgFcValueListDestroy (FcValueListPtr l); 9422c393a42Smrg 943898dab68SmrgFcPrivate FcValueListPtr 944898dab68SmrgFcValueListPrepend (FcValueListPtr vallist, 945898dab68Smrg FcValue value, 946898dab68Smrg FcValueBinding binding); 947898dab68Smrg 948898dab68SmrgFcPrivate FcValueListPtr 949898dab68SmrgFcValueListAppend (FcValueListPtr vallist, 950898dab68Smrg FcValue value, 951898dab68Smrg FcValueBinding binding); 952898dab68Smrg 953898dab68SmrgFcPrivate FcValueListPtr 954898dab68SmrgFcValueListDuplicate(FcValueListPtr orig); 955898dab68Smrg 9562c393a42SmrgFcPrivate FcPatternElt * 9572c393a42SmrgFcPatternObjectFindElt (const FcPattern *p, FcObject object); 9582c393a42Smrg 9592c393a42SmrgFcPrivate FcPatternElt * 9602c393a42SmrgFcPatternObjectInsertElt (FcPattern *p, FcObject object); 9612c393a42Smrg 962898dab68SmrgFcPrivate FcBool 963898dab68SmrgFcPatternObjectListAdd (FcPattern *p, 964898dab68Smrg FcObject object, 965898dab68Smrg FcValueListPtr list, 966898dab68Smrg FcBool append); 967898dab68Smrg 9682c393a42SmrgFcPrivate FcBool 9692c393a42SmrgFcPatternObjectAddWithBinding (FcPattern *p, 9702c393a42Smrg FcObject object, 9712c393a42Smrg FcValue value, 9722c393a42Smrg FcValueBinding binding, 9732c393a42Smrg FcBool append); 9742c393a42Smrg 9752c393a42SmrgFcPrivate FcBool 9762c393a42SmrgFcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append); 977898dab68Smrg 9782c393a42SmrgFcPrivate FcBool 9792c393a42SmrgFcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append); 980898dab68Smrg 9812c393a42SmrgFcPrivate FcResult 9822c393a42SmrgFcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v); 983898dab68Smrg 9842c393a42SmrgFcPrivate FcBool 9852c393a42SmrgFcPatternObjectDel (FcPattern *p, FcObject object); 9862c393a42Smrg 9872c393a42SmrgFcPrivate FcBool 9882c393a42SmrgFcPatternObjectRemove (FcPattern *p, FcObject object, int id); 9892c393a42Smrg 9902c393a42SmrgFcPrivate FcBool 9912c393a42SmrgFcPatternObjectAddInteger (FcPattern *p, FcObject object, int i); 9922c393a42Smrg 9932c393a42SmrgFcPrivate FcBool 9942c393a42SmrgFcPatternObjectAddDouble (FcPattern *p, FcObject object, double d); 9952c393a42Smrg 9962c393a42SmrgFcPrivate FcBool 9972c393a42SmrgFcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s); 9982c393a42Smrg 9992c393a42SmrgFcPrivate FcBool 10002c393a42SmrgFcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s); 10012c393a42Smrg 10022c393a42SmrgFcPrivate FcBool 10032c393a42SmrgFcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c); 10042c393a42Smrg 10052c393a42SmrgFcPrivate FcBool 10062c393a42SmrgFcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b); 10072c393a42Smrg 10082c393a42SmrgFcPrivate FcBool 10092c393a42SmrgFcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls); 10102c393a42Smrg 10112c393a42SmrgFcPrivate FcResult 10122c393a42SmrgFcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i); 10132c393a42Smrg 10142c393a42SmrgFcPrivate FcResult 10152c393a42SmrgFcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d); 10162c393a42Smrg 10172c393a42SmrgFcPrivate FcResult 10182c393a42SmrgFcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 ** s); 10192c393a42Smrg 10202c393a42SmrgFcPrivate FcResult 10212c393a42SmrgFcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s); 10222c393a42Smrg 10232c393a42SmrgFcPrivate FcResult 10242c393a42SmrgFcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c); 10252c393a42Smrg 10262c393a42SmrgFcPrivate FcResult 10272c393a42SmrgFcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b); 10282c393a42Smrg 10292c393a42SmrgFcPrivate FcResult 10302c393a42SmrgFcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls); 10312c393a42Smrg 10322c393a42SmrgFcPrivate FcBool 10332c393a42SmrgFcPatternAppend (FcPattern *p, FcPattern *s); 10342c393a42Smrg 10352c393a42SmrgFcPrivate FcChar32 10362c393a42SmrgFcStringHash (const FcChar8 *s); 10372c393a42Smrg 10382c393a42SmrgFcPrivate FcBool 10392c393a42SmrgFcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat); 10402c393a42Smrg 10412c393a42SmrgFcPrivate FcPattern * 10422c393a42SmrgFcPatternSerialize (FcSerialize *serialize, const FcPattern *pat); 10432c393a42Smrg 10442c393a42SmrgFcPrivate FcBool 10452c393a42SmrgFcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat); 10462c393a42Smrg 10472c393a42SmrgFcPrivate FcValueList * 10482c393a42SmrgFcValueListSerialize (FcSerialize *serialize, const FcValueList *pat); 10492c393a42Smrg 10502c393a42Smrg/* fcrender.c */ 10512c393a42Smrg 10522c393a42Smrg/* fcmatrix.c */ 10532c393a42Smrg 10542c393a42Smrgextern FcPrivate const FcMatrix FcIdentityMatrix; 10552c393a42Smrg 10562c393a42SmrgFcPrivate void 10572c393a42SmrgFcMatrixFree (FcMatrix *mat); 10582c393a42Smrg 1059898dab68Smrg/* fcstat.c */ 1060898dab68Smrg 1061898dab68SmrgFcPrivate int 1062898dab68SmrgFcStat (const FcChar8 *file, struct stat *statb); 1063898dab68Smrg 1064898dab68SmrgFcPrivate int 1065898dab68SmrgFcStatChecksum (const FcChar8 *file, struct stat *statb); 1066898dab68Smrg 1067898dab68SmrgFcPrivate FcBool 1068898dab68SmrgFcIsFsMmapSafe (int fd); 1069898dab68Smrg 1070898dab68SmrgFcPrivate FcBool 1071898dab68SmrgFcIsFsMtimeBroken (const FcChar8 *dir); 1072898dab68Smrg 10732c393a42Smrg/* fcstr.c */ 1074898dab68SmrgFcPrivate FcBool 1075898dab68SmrgFcStrSetAddLangs (FcStrSet *strs, const char *languages); 1076898dab68Smrg 10772c393a42SmrgFcPrivate void 10782c393a42SmrgFcStrSetSort (FcStrSet * set); 10792c393a42Smrg 10802c393a42SmrgFcPrivate void 10812c393a42SmrgFcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size); 10822c393a42Smrg 10832c393a42SmrgFcPrivate void 10842c393a42SmrgFcStrBufDestroy (FcStrBuf *buf); 10852c393a42Smrg 10862c393a42SmrgFcPrivate FcChar8 * 10872c393a42SmrgFcStrBufDone (FcStrBuf *buf); 10882c393a42Smrg 10890d39df38SmrgFcPrivate FcChar8 * 10900d39df38SmrgFcStrBufDoneStatic (FcStrBuf *buf); 10910d39df38Smrg 10922c393a42SmrgFcPrivate FcBool 10932c393a42SmrgFcStrBufChar (FcStrBuf *buf, FcChar8 c); 10942c393a42Smrg 10952c393a42SmrgFcPrivate FcBool 10962c393a42SmrgFcStrBufString (FcStrBuf *buf, const FcChar8 *s); 10972c393a42Smrg 10982c393a42SmrgFcPrivate FcBool 10992c393a42SmrgFcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len); 11002c393a42Smrg 11012c393a42SmrgFcPrivate int 11022c393a42SmrgFcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2); 11032c393a42Smrg 11045e61939bSmrgFcPrivate int 11055e61939bSmrgFcStrCmpIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *delims); 11065e61939bSmrg 1107898dab68SmrgFcPrivate FcBool 1108898dab68SmrgFcStrRegexCmp (const FcChar8 *s, const FcChar8 *regex); 1109898dab68Smrg 1110898dab68SmrgFcPrivate FcBool 1111898dab68SmrgFcStrRegexCmpIgnoreCase (const FcChar8 *s, const FcChar8 *regex); 1112898dab68Smrg 11132c393a42SmrgFcPrivate const FcChar8 * 11142c393a42SmrgFcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2); 11152c393a42Smrg 11162c393a42SmrgFcPrivate const FcChar8 * 11172c393a42SmrgFcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2); 11182c393a42Smrg 11192c393a42SmrgFcPrivate const FcChar8 * 11202c393a42SmrgFcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2); 11212c393a42Smrg 11225e61939bSmrgFcPrivate int 11235e61939bSmrgFcStrMatchIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *delims); 11245e61939bSmrg 11255e61939bSmrgFcPrivate FcBool 11265e61939bSmrgFcStrGlobMatch (const FcChar8 *glob, 11275e61939bSmrg const FcChar8 *string); 11285e61939bSmrg 11292c393a42SmrgFcPrivate FcBool 11302c393a42SmrgFcStrUsesHome (const FcChar8 *s); 11312c393a42Smrg 11325e61939bSmrgFcPrivate FcChar8 * 11335e61939bSmrgFcStrBuildFilename (const FcChar8 *path, 11345e61939bSmrg ...); 11355e61939bSmrg 11362c393a42SmrgFcPrivate FcChar8 * 11372c393a42SmrgFcStrLastSlash (const FcChar8 *path); 11382c393a42Smrg 11392c393a42SmrgFcPrivate FcChar32 11402c393a42SmrgFcStrHashIgnoreCase (const FcChar8 *s); 11412c393a42Smrg 11422c393a42SmrgFcPrivate FcChar8 * 11432c393a42SmrgFcStrCanonFilename (const FcChar8 *s); 11442c393a42Smrg 11452c393a42SmrgFcPrivate FcBool 11462c393a42SmrgFcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str); 11472c393a42Smrg 11482c393a42SmrgFcPrivate FcChar8 * 11492c393a42SmrgFcStrSerialize (FcSerialize *serialize, const FcChar8 *str); 11502c393a42Smrg 11515e61939bSmrg/* fcobjs.c */ 11525e61939bSmrg 11535e61939bSmrgFcPrivate FcObject 11545e61939bSmrgFcObjectLookupIdByName (const char *str); 11555e61939bSmrg 11565e61939bSmrgFcPrivate FcObject 11575e61939bSmrgFcObjectLookupBuiltinIdByName (const char *str); 11585e61939bSmrg 11595e61939bSmrgFcPrivate const char * 11605e61939bSmrgFcObjectLookupOtherNameById (FcObject id); 11615e61939bSmrg 11625e61939bSmrgFcPrivate const FcObjectType * 11635e61939bSmrgFcObjectLookupOtherTypeById (FcObject id); 11645e61939bSmrg 11655e61939bSmrgFcPrivate const FcObjectType * 11665e61939bSmrgFcObjectLookupOtherTypeByName (const char *str); 11675e61939bSmrg 11682c393a42Smrg#endif /* _FC_INT_H_ */ 1169