fcint.h revision 46bb3e47
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>
437872e0a1Smrg#ifdef HAVE_UNISTD_H
442c393a42Smrg#include <unistd.h>
457872e0a1Smrg#endif
462c393a42Smrg#include <stddef.h>
472c393a42Smrg#include <sys/types.h>
482c393a42Smrg#include <sys/stat.h>
492c393a42Smrg#include <time.h>
502c393a42Smrg#include <fontconfig/fontconfig.h>
512c393a42Smrg#include <fontconfig/fcprivate.h>
522c393a42Smrg#include "fcdeprecate.h"
535e61939bSmrg#include "fcmutex.h"
545e61939bSmrg#include "fcatomic.h"
552c393a42Smrg
562c393a42Smrg#ifndef FC_CONFIG_PATH
572c393a42Smrg#define FC_CONFIG_PATH "fonts.conf"
582c393a42Smrg#endif
592c393a42Smrg
607872e0a1Smrg#ifdef _WIN32
617872e0a1Smrg#define FC_LIKELY(expr) (expr)
627872e0a1Smrg#define FC_UNLIKELY(expr) (expr)
637872e0a1Smrg#else
647872e0a1Smrg#define FC_LIKELY(expr) (__builtin_expect (((expr) ? 1 : 0), 1))
657872e0a1Smrg#define FC_UNLIKELY(expr) (__builtin_expect (((expr) ? 1 : 0), 0))
667872e0a1Smrg#endif
677872e0a1Smrg
682c393a42Smrg#ifdef _WIN32
695e61939bSmrg#  include "fcwindows.h"
70898dab68Smrgtypedef UINT (WINAPI *pfnGetSystemWindowsDirectory)(LPSTR, UINT);
71898dab68Smrgtypedef HRESULT (WINAPI *pfnSHGetFolderPathA)(HWND, int, HANDLE, DWORD, LPSTR);
72898dab68Smrgextern pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory;
73898dab68Smrgextern pfnSHGetFolderPathA pSHGetFolderPathA;
74898dab68Smrg#  define FC_SEARCH_PATH_SEPARATOR ';'
75898dab68Smrg#  define FC_DIR_SEPARATOR         '\\'
76898dab68Smrg#  define FC_DIR_SEPARATOR_S       "\\"
772c393a42Smrg#else
78898dab68Smrg#  define FC_SEARCH_PATH_SEPARATOR ':'
79898dab68Smrg#  define FC_DIR_SEPARATOR         '/'
80898dab68Smrg#  define FC_DIR_SEPARATOR_S       "/"
812c393a42Smrg#endif
822c393a42Smrg
8318bd4a06Smrg#ifdef PATH_MAX
8418bd4a06Smrg#define FC_PATH_MAX	PATH_MAX
8518bd4a06Smrg#else
8618bd4a06Smrg#define FC_PATH_MAX	128
8718bd4a06Smrg#endif
8818bd4a06Smrg
895e61939bSmrg#if __GNUC__ >= 4
905e61939bSmrg#define FC_UNUSED	__attribute__((unused))
915e61939bSmrg#else
925e61939bSmrg#define FC_UNUSED
935e61939bSmrg#endif
945e61939bSmrg
957872e0a1Smrg#ifndef FC_UINT64_FORMAT
967872e0a1Smrg#define FC_UINT64_FORMAT	"llu"
977872e0a1Smrg#endif
987872e0a1Smrg
992c393a42Smrg#define FC_DBG_MATCH	1
1002c393a42Smrg#define FC_DBG_MATCHV	2
1012c393a42Smrg#define FC_DBG_EDIT	4
1022c393a42Smrg#define FC_DBG_FONTSET	8
1032c393a42Smrg#define FC_DBG_CACHE	16
1042c393a42Smrg#define FC_DBG_CACHEV	32
1052c393a42Smrg#define FC_DBG_PARSE	64
1062c393a42Smrg#define FC_DBG_SCAN	128
1072c393a42Smrg#define FC_DBG_SCANV	256
1082c393a42Smrg#define FC_DBG_CONFIG	1024
1092c393a42Smrg#define FC_DBG_LANGSET	2048
11018bd4a06Smrg#define FC_DBG_MATCH2	4096
1112c393a42Smrg
112d91dd368Smrg#define _FC_ASSERT_STATIC1(_line, _cond) typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1] FC_UNUSED
113898dab68Smrg#define _FC_ASSERT_STATIC0(_line, _cond) _FC_ASSERT_STATIC1 (_line, (_cond))
114898dab68Smrg#define FC_ASSERT_STATIC(_cond) _FC_ASSERT_STATIC0 (__LINE__, (_cond))
115898dab68Smrg
1160d39df38Smrg#define FC_MIN(a,b) ((a) < (b) ? (a) : (b))
1170d39df38Smrg#define FC_MAX(a,b) ((a) > (b) ? (a) : (b))
1182c393a42Smrg
1192c393a42Smrg/* slim_internal.h */
1202c393a42Smrg#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun)
1212c393a42Smrg#define FcPrivate		__attribute__((__visibility__("hidden")))
1222c393a42Smrg#define HAVE_GNUC_ATTRIBUTE 1
1232c393a42Smrg#include "fcalias.h"
1242c393a42Smrg#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
1252c393a42Smrg#define FcPrivate		__hidden
1262c393a42Smrg#else /* not gcc >= 3.3 and not Sun Studio >= 8 */
1272c393a42Smrg#define FcPrivate
1282c393a42Smrg#endif
1292c393a42Smrg
1301887081fSmrg/* NLS */
1311887081fSmrg#ifdef ENABLE_NLS
1321887081fSmrg#include <libintl.h>
1331887081fSmrg#define _(x)		(dgettext(GETTEXT_PACKAGE, x))
1341887081fSmrg#else
1351887081fSmrg#define dgettext(d, s)	(s)
1361887081fSmrg#define _(x)		(x)
1371887081fSmrg#endif
1385e61939bSmrg
1391887081fSmrg#define N_(x)	x
1401887081fSmrg
1411887081fSmrgFC_ASSERT_STATIC (sizeof (FcRef) == sizeof (int));
1422c393a42Smrg
1435e61939bSmrg#define FcStrdup(s) ((FcChar8 *) strdup ((const char *) (s)))
1445e61939bSmrg#define FcFree(s) (free ((FcChar8 *) (s)))
1455e61939bSmrg
1462c393a42Smrg/*
1472c393a42Smrg * Serialized data structures use only offsets instead of pointers
1482c393a42Smrg * A low bit of 1 indicates an offset.
1492c393a42Smrg */
150898dab68Smrg
1512c393a42Smrg/* Is the provided pointer actually an offset? */
1522c393a42Smrg#define FcIsEncodedOffset(p)	((((intptr_t) (p)) & 1) != 0)
1532c393a42Smrg
1542c393a42Smrg/* Encode offset in a pointer of type t */
1557872e0a1Smrg#define FcOffsetEncode(o,t)	((t *) (intptr_t) ((o) | 1))
1562c393a42Smrg
1572c393a42Smrg/* Decode a pointer into an offset */
1582c393a42Smrg#define FcOffsetDecode(p)	(((intptr_t) (p)) & ~1)
1592c393a42Smrg
1602c393a42Smrg/* Compute pointer offset */
1617872e0a1Smrg#define FcPtrToOffset(b,p)	((ptrdiff_t) ((intptr_t) (p) - (intptr_t) (b)))
1622c393a42Smrg
1632c393a42Smrg/* Given base address, offset and type, return a pointer */
1647872e0a1Smrg#define FcOffsetToPtr(b,o,t)	((t *) ((intptr_t) (b) + (ptrdiff_t) (o)))
1652c393a42Smrg
1662c393a42Smrg/* Given base address, encoded offset and type, return a pointer */
1672c393a42Smrg#define FcEncodedOffsetToPtr(b,p,t) FcOffsetToPtr(b,FcOffsetDecode(p),t)
1682c393a42Smrg
1692c393a42Smrg/* Given base address, pointer and type, return an encoded offset */
1702c393a42Smrg#define FcPtrToEncodedOffset(b,p,t) FcOffsetEncode(FcPtrToOffset(b,p),t)
1712c393a42Smrg
1722c393a42Smrg/* Given a structure, offset member and type, return pointer */
1732c393a42Smrg#define FcOffsetMember(s,m,t)	    FcOffsetToPtr(s,(s)->m,t)
1742c393a42Smrg
1752c393a42Smrg/* Given a structure, encoded offset member and type, return pointer to member */
1762c393a42Smrg#define FcEncodedOffsetMember(s,m,t) FcOffsetToPtr(s,FcOffsetDecode((s)->m), t)
1772c393a42Smrg
1782c393a42Smrg/* Given a structure, member and type, convert the member to a pointer */
1792c393a42Smrg#define FcPointerMember(s,m,t)	(FcIsEncodedOffset((s)->m) ? \
1802c393a42Smrg				 FcEncodedOffsetMember (s,m,t) : \
1812c393a42Smrg				 (s)->m)
1822c393a42Smrg
1832c393a42Smrg/*
1842c393a42Smrg * Serialized values may hold strings, charsets and langsets as pointers,
1852c393a42Smrg * unfortunately FcValue is an exposed type so we can't just always use
1862c393a42Smrg * offsets
1872c393a42Smrg */
1882c393a42Smrg#define FcValueString(v)	FcPointerMember(v,u.s,FcChar8)
1892c393a42Smrg#define FcValueCharSet(v)	FcPointerMember(v,u.c,const FcCharSet)
1902c393a42Smrg#define FcValueLangSet(v)	FcPointerMember(v,u.l,const FcLangSet)
19118bd4a06Smrg#define FcValueRange(v)		FcPointerMember(v,u.r,const FcRange)
1922c393a42Smrg
1932c393a42Smrgtypedef struct _FcValueList *FcValueListPtr;
1942c393a42Smrg
1952c393a42Smrgtypedef struct _FcValueList {
1962c393a42Smrg    struct _FcValueList	*next;
1972c393a42Smrg    FcValue		value;
1982c393a42Smrg    FcValueBinding	binding;
1992c393a42Smrg} FcValueList;
2002c393a42Smrg
2012c393a42Smrg#define FcValueListNext(vl)	FcPointerMember(vl,next,FcValueList)
20246bb3e47Smrg
2032c393a42Smrgtypedef int FcObject;
2042c393a42Smrg
205d91dd368Smrg/* The 1024 is to leave some room for future added internal objects, such
206d91dd368Smrg * that caches from newer fontconfig can still be used with older fontconfig
207d91dd368Smrg * without getting confused. */
208d91dd368Smrg#define FC_EXT_OBJ_INDEX	1024
209d91dd368Smrg#define FC_OBJ_ID(_n_)	((_n_) & (~FC_EXT_OBJ_INDEX))
210d91dd368Smrg
2112c393a42Smrgtypedef struct _FcPatternElt *FcPatternEltPtr;
2122c393a42Smrg
2132c393a42Smrg/*
214898dab68Smrg * Pattern elts are stuck in a structure connected to the pattern,
2152c393a42Smrg * so they get moved around when the pattern is resized. Hence, the
2162c393a42Smrg * values field must be a pointer/offset instead of just an offset
2172c393a42Smrg */
2182c393a42Smrgtypedef struct _FcPatternElt {
2192c393a42Smrg    FcObject		object;
2202c393a42Smrg    FcValueList		*values;
2212c393a42Smrg} FcPatternElt;
2222c393a42Smrg
2232c393a42Smrg#define FcPatternEltValues(pe)	FcPointerMember(pe,values,FcValueList)
2242c393a42Smrg
2252c393a42Smrgstruct _FcPattern {
2262c393a42Smrg    int		    num;
2272c393a42Smrg    int		    size;
2282c393a42Smrg    intptr_t	    elts_offset;
2295e61939bSmrg    FcRef	    ref;
2302c393a42Smrg};
2312c393a42Smrg
2322c393a42Smrg#define FcPatternElts(p)	FcOffsetMember(p,elts_offset,FcPatternElt)
2332c393a42Smrg
2342c393a42Smrg#define FcFontSetFonts(fs)	FcPointerMember(fs,fonts,FcPattern *)
2352c393a42Smrg
2362c393a42Smrg#define FcFontSetFont(fs,i)	(FcIsEncodedOffset((fs)->fonts) ? \
2372c393a42Smrg				 FcEncodedOffsetToPtr(fs, \
2382c393a42Smrg						      FcFontSetFonts(fs)[i], \
2392c393a42Smrg						      FcPattern) : \
2402c393a42Smrg				 fs->fonts[i])
24146bb3e47Smrg
2422c393a42Smrgtypedef enum _FcOp {
243898dab68Smrg    FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpRange, FcOpBool, FcOpCharSet, FcOpLangSet,
2442c393a42Smrg    FcOpNil,
2452c393a42Smrg    FcOpField, FcOpConst,
246898dab68Smrg    FcOpAssign, FcOpAssignReplace,
2472c393a42Smrg    FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast,
2485e61939bSmrg    FcOpDelete, FcOpDeleteAll,
2492c393a42Smrg    FcOpQuest,
250898dab68Smrg    FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual,
2512c393a42Smrg    FcOpContains, FcOpListing, FcOpNotContains,
2522c393a42Smrg    FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual,
2532c393a42Smrg    FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide,
2542c393a42Smrg    FcOpNot, FcOpComma, FcOpFloor, FcOpCeil, FcOpRound, FcOpTrunc,
2552c393a42Smrg    FcOpInvalid
2562c393a42Smrg} FcOp;
2572c393a42Smrg
258898dab68Smrgtypedef enum _FcOpFlags {
2591887081fSmrg	FcOpFlagIgnoreBlanks = 1U << 0
260898dab68Smrg} FcOpFlags;
261898dab68Smrg
262898dab68Smrg#define FC_OP_GET_OP(_x_)	((_x_) & 0xffff)
263898dab68Smrg#define FC_OP_GET_FLAGS(_x_)	(((_x_) & 0xffff0000) >> 16)
264898dab68Smrg#define FC_OP(_x_,_f_)		(FC_OP_GET_OP (_x_) | ((_f_) << 16))
265898dab68Smrg
2665e61939bSmrgtypedef struct _FcExprMatrix {
2675e61939bSmrg  struct _FcExpr *xx, *xy, *yx, *yy;
2685e61939bSmrg} FcExprMatrix;
2695e61939bSmrg
2705e61939bSmrgtypedef struct _FcExprName {
2715e61939bSmrg  FcObject	object;
2725e61939bSmrg  FcMatchKind	kind;
2735e61939bSmrg} FcExprName;
2745e61939bSmrg
27518bd4a06Smrgstruct _FcRange {
27618bd4a06Smrg    double begin;
27718bd4a06Smrg    double end;
27818bd4a06Smrg};
27918bd4a06Smrg
2805e61939bSmrg
2812c393a42Smrgtypedef struct _FcExpr {
2822c393a42Smrg    FcOp   op;
2832c393a42Smrg    union {
28418bd4a06Smrg	int		ival;
28518bd4a06Smrg	double		dval;
28618bd4a06Smrg	const FcChar8	*sval;
28718bd4a06Smrg	FcExprMatrix	*mexpr;
28818bd4a06Smrg	FcBool		bval;
28918bd4a06Smrg	FcCharSet	*cval;
29018bd4a06Smrg	FcLangSet	*lval;
29118bd4a06Smrg	FcRange		*rval;
29218bd4a06Smrg
29318bd4a06Smrg	FcExprName	name;
29418bd4a06Smrg	const FcChar8	*constant;
2952c393a42Smrg	struct {
2962c393a42Smrg	    struct _FcExpr *left, *right;
2972c393a42Smrg	} tree;
2982c393a42Smrg    } u;
2992c393a42Smrg} FcExpr;
3002c393a42Smrg
3010d39df38Smrgtypedef struct _FcExprPage FcExprPage;
3020d39df38Smrg
3030d39df38Smrgstruct _FcExprPage {
3040d39df38Smrg  FcExprPage *next_page;
3050d39df38Smrg  FcExpr *next;
3060d39df38Smrg  FcExpr exprs[(1024 - 2/* two pointers */ - 2/* malloc overhead */) * sizeof (void *) / sizeof (FcExpr)];
307898dab68Smrg  FcExpr end[FLEXIBLE_ARRAY_MEMBER];
3080d39df38Smrg};
3090d39df38Smrg
3102c393a42Smrgtypedef enum _FcQual {
3112c393a42Smrg    FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst
3122c393a42Smrg} FcQual;
3132c393a42Smrg
3142c393a42Smrg#define FcMatchDefault	((FcMatchKind) -1)
3152c393a42Smrg
3162c393a42Smrgtypedef struct _FcTest {
3172c393a42Smrg    FcMatchKind		kind;
3182c393a42Smrg    FcQual		qual;
3192c393a42Smrg    FcObject		object;
3202c393a42Smrg    FcOp		op;
3212c393a42Smrg    FcExpr		*expr;
3222c393a42Smrg} FcTest;
3232c393a42Smrg
3242c393a42Smrgtypedef struct _FcEdit {
3252c393a42Smrg    FcObject	    object;
3262c393a42Smrg    FcOp	    op;
3272c393a42Smrg    FcExpr	    *expr;
3282c393a42Smrg    FcValueBinding  binding;
3292c393a42Smrg} FcEdit;
3302c393a42Smrg
3311887081fSmrgtypedef void (* FcDestroyFunc) (void *data);
3321887081fSmrg
3331887081fSmrgtypedef struct _FcPtrList	FcPtrList;
3341887081fSmrg/* need to sync with FcConfigFileInfoIter at fontconfig.h */
3351887081fSmrgtypedef struct _FcPtrListIter {
3361887081fSmrg    void *dummy1;
3371887081fSmrg    void *dummy2;
3381887081fSmrg    void *dummy3;
3391887081fSmrg} FcPtrListIter;
3401887081fSmrg
341d91dd368Smrgtypedef enum _FcRuleType {
342d91dd368Smrg    FcRuleUnknown, FcRuleTest, FcRuleEdit
343d91dd368Smrg} FcRuleType;
344d91dd368Smrg
345d91dd368Smrgtypedef struct _FcRule {
346d91dd368Smrg    struct _FcRule *next;
347d91dd368Smrg    FcRuleType      type;
348d91dd368Smrg    union {
349d91dd368Smrg	FcTest *test;
350d91dd368Smrg	FcEdit *edit;
351d91dd368Smrg    } u;
352d91dd368Smrg} FcRule;
353d91dd368Smrg
3541887081fSmrgtypedef struct _FcRuleSet {
3551887081fSmrg    FcRef	ref;
3561887081fSmrg    FcChar8	*name;
3571887081fSmrg    FcChar8	*description;
3581887081fSmrg    FcChar8	*domain;
3591887081fSmrg    FcBool	enabled;
3601887081fSmrg    FcPtrList	*subst[FcMatchKindEnd];
3611887081fSmrg} FcRuleSet;
3622c393a42Smrg
3632c393a42Smrgtypedef struct _FcCharLeaf {
3642c393a42Smrg    FcChar32	map[256/32];
3652c393a42Smrg} FcCharLeaf;
3662c393a42Smrg
3672c393a42Smrgstruct _FcCharSet {
3685e61939bSmrg    FcRef	    ref;	/* reference count */
3692c393a42Smrg    int		    num;	/* size of leaves and numbers arrays */
3702c393a42Smrg    intptr_t	    leaves_offset;
3712c393a42Smrg    intptr_t	    numbers_offset;
3722c393a42Smrg};
3732c393a42Smrg
3742c393a42Smrg#define FcCharSetLeaves(c)	FcOffsetMember(c,leaves_offset,intptr_t)
3752c393a42Smrg#define FcCharSetLeaf(c,i)	(FcOffsetToPtr(FcCharSetLeaves(c), \
3762c393a42Smrg					       FcCharSetLeaves(c)[i], \
3772c393a42Smrg					       FcCharLeaf))
3782c393a42Smrg#define FcCharSetNumbers(c)	FcOffsetMember(c,numbers_offset,FcChar16)
3792c393a42Smrg
38018bd4a06Smrg#define FCSS_DEFAULT            0 /* default behavior */
38118bd4a06Smrg#define FCSS_ALLOW_DUPLICATES   1 /* allows for duplicate strings in the set */
38218bd4a06Smrg#define FCSS_GROW_BY_64         2 /* grows buffer by 64 elements instead of 1 */
38318bd4a06Smrg
38418bd4a06Smrg#define FcStrSetHasControlBit(s,c)  (s->control & c)
38518bd4a06Smrg#define FcStrSetHasControlBits(s,c) ( (c) == (s->control & (c)) )
38618bd4a06Smrg
3872c393a42Smrgstruct _FcStrSet {
3885e61939bSmrg    FcRef	    ref;	/* reference count */
3892c393a42Smrg    int		    num;
3902c393a42Smrg    int		    size;
3912c393a42Smrg    FcChar8	    **strs;
39218bd4a06Smrg    unsigned int    control;    /* control bits for set behavior */
3932c393a42Smrg};
3942c393a42Smrg
3952c393a42Smrgstruct _FcStrList {
3962c393a42Smrg    FcStrSet	    *set;
3972c393a42Smrg    int		    n;
3982c393a42Smrg};
3992c393a42Smrg
4002c393a42Smrgtypedef struct _FcStrBuf {
4012c393a42Smrg    FcChar8 *buf;
4022c393a42Smrg    FcBool  allocated;
4032c393a42Smrg    FcBool  failed;
4042c393a42Smrg    int	    len;
4052c393a42Smrg    int	    size;
4060d39df38Smrg    FcChar8 buf_static[16 * sizeof (void *)];
4072c393a42Smrg} FcStrBuf;
4082c393a42Smrg
4091887081fSmrgtypedef struct _FcHashTable	FcHashTable;
4101887081fSmrg
4111887081fSmrgtypedef FcChar32 (* FcHashFunc)	   (const void *data);
4121887081fSmrgtypedef int	 (* FcCompareFunc) (const void *v1, const void *v2);
4131887081fSmrgtypedef FcBool	 (* FcCopyFunc)	   (const void *src, void **dest);
4141887081fSmrg
4151887081fSmrg
4162c393a42Smrgstruct _FcCache {
4175e61939bSmrg    unsigned int magic;              /* FC_CACHE_MAGIC_MMAP or FC_CACHE_ALLOC */
41818bd4a06Smrg    int		version;	    /* FC_CACHE_VERSION_NUMBER */
4192c393a42Smrg    intptr_t	size;		    /* size of file */
4202c393a42Smrg    intptr_t	dir;		    /* offset to dir name */
4212c393a42Smrg    intptr_t	dirs;		    /* offset to subdirs */
4222c393a42Smrg    int		dirs_count;	    /* number of subdir strings */
4232c393a42Smrg    intptr_t	set;		    /* offset to font set */
424898dab68Smrg    int		checksum;	    /* checksum of directory state */
42518bd4a06Smrg    int64_t	checksum_nano;	    /* checksum of directory state */
4262c393a42Smrg};
4272c393a42Smrg
4282c393a42Smrg#undef FcCacheDir
4292c393a42Smrg#undef FcCacheSubdir
4302c393a42Smrg#define FcCacheDir(c)	FcOffsetMember(c,dir,FcChar8)
4312c393a42Smrg#define FcCacheDirs(c)	FcOffsetMember(c,dirs,intptr_t)
4322c393a42Smrg#define FcCacheSet(c)	FcOffsetMember(c,set,FcFontSet)
4332c393a42Smrg#define FcCacheSubdir(c,i)  FcOffsetToPtr (FcCacheDirs(c),\
4342c393a42Smrg					   FcCacheDirs(c)[i], \
4352c393a42Smrg					   FcChar8)
4362c393a42Smrg
4372c393a42Smrg/*
4382c393a42Smrg * Used while constructing a directory cache object
4392c393a42Smrg */
4402c393a42Smrg
4410d39df38Smrgtypedef union _FcAlign {
4420d39df38Smrg    double	d;
4430d39df38Smrg    int		i;
4440d39df38Smrg    intptr_t	ip;
4450d39df38Smrg    FcBool	b;
4460d39df38Smrg    void	*p;
4470d39df38Smrg} FcAlign;
4480d39df38Smrg
4492c393a42Smrgtypedef struct _FcSerializeBucket {
4507872e0a1Smrg    const void	*object; /* key */
4517872e0a1Smrg    uintptr_t	hash;    /* hash of key */
4527872e0a1Smrg    intptr_t	offset;  /* value */
4532c393a42Smrg} FcSerializeBucket;
4542c393a42Smrg
4552c393a42Smrgtypedef struct _FcCharSetFreezer FcCharSetFreezer;
4562c393a42Smrg
4572c393a42Smrgtypedef struct _FcSerialize {
4582c393a42Smrg    intptr_t		size;
4592c393a42Smrg    FcCharSetFreezer	*cs_freezer;
4602c393a42Smrg    void		*linear;
4617872e0a1Smrg    FcSerializeBucket	*buckets;
4627872e0a1Smrg    size_t		buckets_count;
4637872e0a1Smrg    size_t		buckets_used;
4647872e0a1Smrg    size_t		buckets_used_max;
4652c393a42Smrg} FcSerialize;
466898dab68Smrg
4672c393a42Smrg/*
4682c393a42Smrg * To map adobe glyph names to unicode values, a precomputed hash
4692c393a42Smrg * table is used
4702c393a42Smrg */
4712c393a42Smrg
4722c393a42Smrgtypedef struct _FcGlyphName {
4732c393a42Smrg    FcChar32	ucs;		/* unicode value */
4742c393a42Smrg    FcChar8	name[1];	/* name extends beyond struct */
4752c393a42Smrg} FcGlyphName;
4762c393a42Smrg
4772c393a42Smrg/*
4782c393a42Smrg * To perform case-insensitive string comparisons, a table
4792c393a42Smrg * is used which holds three different kinds of folding data.
480898dab68Smrg *
4812c393a42Smrg * The first is a range of upper case values mapping to a range
4822c393a42Smrg * of their lower case equivalents.  Within each range, the offset
4832c393a42Smrg * between upper and lower case is constant.
4842c393a42Smrg *
4852c393a42Smrg * The second is a range of upper case values which are interleaved
4862c393a42Smrg * with their lower case equivalents.
487898dab68Smrg *
4882c393a42Smrg * The third is a set of raw unicode values mapping to a list
4892c393a42Smrg * of unicode values for comparison purposes.  This allows conversion
4902c393a42Smrg * of ß to "ss" so that SS, ss and ß all match.  A separate array
4912c393a42Smrg * holds the list of unicode values for each entry.
4922c393a42Smrg *
4932c393a42Smrg * These are packed into a single table.  Using a binary search,
4942c393a42Smrg * the appropriate entry can be located.
4952c393a42Smrg */
4962c393a42Smrg
4972c393a42Smrg#define FC_CASE_FOLD_RANGE	    0
4982c393a42Smrg#define FC_CASE_FOLD_EVEN_ODD	    1
4992c393a42Smrg#define FC_CASE_FOLD_FULL	    2
5002c393a42Smrg
5012c393a42Smrgtypedef struct _FcCaseFold {
5022c393a42Smrg    FcChar32	upper;
5032c393a42Smrg    FcChar16	method : 2;
5042c393a42Smrg    FcChar16	count : 14;
5052c393a42Smrg    short    	offset;	    /* lower - upper for RANGE, table id for FULL */
5062c393a42Smrg} FcCaseFold;
5072c393a42Smrg
5082c393a42Smrg#define FC_MAX_FILE_LEN	    4096
5092c393a42Smrg
5102c393a42Smrg#define FC_CACHE_MAGIC_MMAP	    0xFC02FC04
5112c393a42Smrg#define FC_CACHE_MAGIC_ALLOC	    0xFC02FC05
5122c393a42Smrg
5132c393a42Smrgstruct _FcAtomic {
5142c393a42Smrg    FcChar8	*file;		/* original file name */
5152c393a42Smrg    FcChar8	*new;		/* temp file name -- write data here */
5162c393a42Smrg    FcChar8	*lck;		/* lockfile name (used for locking) */
5172c393a42Smrg    FcChar8	*tmp;		/* tmpfile name (used for locking) */
5182c393a42Smrg};
5192c393a42Smrg
5202c393a42Smrgstruct _FcConfig {
5212c393a42Smrg    /*
5222c393a42Smrg     * File names loaded from the configuration -- saved here as the
5232c393a42Smrg     * cache file must be consulted before the directories are scanned,
5242c393a42Smrg     * and those directives may occur in any order
5252c393a42Smrg     */
5262c393a42Smrg    FcStrSet	*configDirs;	    /* directories to scan for fonts */
5277872e0a1Smrg    FcStrSet	*configMapDirs;	    /* mapped names to generate cache entries */
5282c393a42Smrg    /*
5292c393a42Smrg     * List of directories containing fonts,
530898dab68Smrg     * built by recursively scanning the set
5312c393a42Smrg     * of configured directories
5322c393a42Smrg     */
5332c393a42Smrg    FcStrSet	*fontDirs;
5342c393a42Smrg    /*
5352c393a42Smrg     * List of directories containing cache files.
5362c393a42Smrg     */
5372c393a42Smrg    FcStrSet	*cacheDirs;
5382c393a42Smrg    /*
5392c393a42Smrg     * Names of all of the configuration files used
5402c393a42Smrg     * to create this configuration
5412c393a42Smrg     */
5422c393a42Smrg    FcStrSet	*configFiles;	    /* config files loaded */
5432c393a42Smrg    /*
5442c393a42Smrg     * Substitution instructions for patterns and fonts;
5452c393a42Smrg     * maxObjects is used to allocate appropriate intermediate storage
5462c393a42Smrg     * while performing a whole set of substitutions
5471887081fSmrg     *
5481887081fSmrg     * 0.. substitutions for patterns
5491887081fSmrg     * 1.. substitutions for fonts
5501887081fSmrg     * 2.. substitutions for scanned fonts
5512c393a42Smrg     */
5521887081fSmrg    FcPtrList	*subst[FcMatchKindEnd];
5532c393a42Smrg    int		maxObjects;	    /* maximum number of tests in all substs */
5542c393a42Smrg    /*
5552c393a42Smrg     * List of patterns used to control font file selection
5562c393a42Smrg     */
5572c393a42Smrg    FcStrSet	*acceptGlobs;
5582c393a42Smrg    FcStrSet	*rejectGlobs;
5592c393a42Smrg    FcFontSet	*acceptPatterns;
5602c393a42Smrg    FcFontSet	*rejectPatterns;
5612c393a42Smrg    /*
5622c393a42Smrg     * The set of fonts loaded from the listed directories; the
5632c393a42Smrg     * order within the set does not determine the font selection,
5642c393a42Smrg     * except in the case of identical matches in which case earlier fonts
5652c393a42Smrg     * match preferrentially
5662c393a42Smrg     */
5672c393a42Smrg    FcFontSet	*fonts[FcSetApplication + 1];
5682c393a42Smrg    /*
5692c393a42Smrg     * Fontconfig can periodically rescan the system configuration
5702c393a42Smrg     * and font directories.  This rescanning occurs when font
5712c393a42Smrg     * listing requests are made, but no more often than rescanInterval
5722c393a42Smrg     * seconds apart.
5732c393a42Smrg     */
5742c393a42Smrg    time_t	rescanTime;	    /* last time information was scanned */
5752c393a42Smrg    int		rescanInterval;	    /* interval between scans */
5760d39df38Smrg
5775e61939bSmrg    FcRef	ref;                /* reference count */
5780d39df38Smrg
5795e61939bSmrg    FcExprPage  *expr_pool;	    /* pool of FcExpr's */
580898dab68Smrg
5815e61939bSmrg    FcChar8     *sysRoot;	    /* override the system root directory */
5821887081fSmrg    FcStrSet	*availConfigFiles;  /* config files available */
5831887081fSmrg    FcPtrList	*rulesetList;	    /* List of rulesets being installed */
5845e61939bSmrg};
5852c393a42Smrg
5862c393a42Smrgtypedef struct _FcFileTime {
5872c393a42Smrg    time_t  time;
5882c393a42Smrg    FcBool  set;
5892c393a42Smrg} FcFileTime;
5902c393a42Smrg
5912c393a42Smrgtypedef struct _FcCharMap FcCharMap;
5922c393a42Smrg
593898dab68Smrgtypedef struct _FcStatFS    FcStatFS;
594898dab68Smrg
595898dab68Smrgstruct _FcStatFS {
596898dab68Smrg    FcBool is_remote_fs;
597898dab68Smrg    FcBool is_mtime_broken;
598898dab68Smrg};
599898dab68Smrg
6005e61939bSmrgtypedef struct _FcValuePromotionBuffer FcValuePromotionBuffer;
6015e61939bSmrg
6025e61939bSmrgstruct _FcValuePromotionBuffer {
6035e61939bSmrg  union {
6045e61939bSmrg    double d;
6055e61939bSmrg    int i;
6065e61939bSmrg    long l;
6075e61939bSmrg    char c[256]; /* Enlarge as needed */
6085e61939bSmrg  } u;
6095e61939bSmrg};
6105e61939bSmrg
6112c393a42Smrg/* fccache.c */
6122c393a42Smrg
6132c393a42SmrgFcPrivate FcCache *
6142c393a42SmrgFcDirCacheScan (const FcChar8 *dir, FcConfig *config);
6152c393a42Smrg
6162c393a42SmrgFcPrivate FcCache *
6172c393a42SmrgFcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs);
6182c393a42Smrg
619b2a52337SmrgFcPrivate FcCache *
620b2a52337SmrgFcDirCacheRebuild (FcCache *cache, struct stat *dir_stat, FcStrSet *dirs);
621b2a52337Smrg
6222c393a42SmrgFcPrivate FcBool
6232c393a42SmrgFcDirCacheWrite (FcCache *cache, FcConfig *config);
624898dab68Smrg
625898dab68SmrgFcPrivate FcBool
626898dab68SmrgFcDirCacheCreateTagFile (const FcChar8 *cache_dir);
627898dab68Smrg
6282c393a42SmrgFcPrivate void
6292c393a42SmrgFcCacheObjectReference (void *object);
6302c393a42Smrg
6312c393a42SmrgFcPrivate void
6322c393a42SmrgFcCacheObjectDereference (void *object);
6332c393a42Smrg
6341887081fSmrgFcPrivate void *
6351887081fSmrgFcCacheAllocate (FcCache *cache, size_t len);
6361887081fSmrg
6372c393a42SmrgFcPrivate void
6382c393a42SmrgFcCacheFini (void);
639898dab68Smrg
6401887081fSmrg
6412c393a42SmrgFcPrivate void
6422c393a42SmrgFcDirCacheReference (FcCache *cache, int nref);
6432c393a42Smrg
64418bd4a06SmrgFcPrivate int
64518bd4a06SmrgFcDirCacheLock (const FcChar8 *dir,
64618bd4a06Smrg		FcConfig      *config);
64718bd4a06Smrg
64818bd4a06SmrgFcPrivate void
64918bd4a06SmrgFcDirCacheUnlock (int fd);
65018bd4a06Smrg
6512c393a42Smrg/* fccfg.c */
6522c393a42Smrg
6535e61939bSmrgFcPrivate FcBool
6545e61939bSmrgFcConfigInit (void);
6555e61939bSmrg
6565e61939bSmrgFcPrivate void
6575e61939bSmrgFcConfigFini (void);
6585e61939bSmrg
659898dab68SmrgFcPrivate FcChar8 *
660898dab68SmrgFcConfigXdgCacheHome (void);
661898dab68Smrg
662898dab68SmrgFcPrivate FcChar8 *
663898dab68SmrgFcConfigXdgConfigHome (void);
664898dab68Smrg
665898dab68SmrgFcPrivate FcChar8 *
666898dab68SmrgFcConfigXdgDataHome (void);
667898dab68Smrg
6687872e0a1SmrgFcPrivate FcStrSet *
6697872e0a1SmrgFcConfigXdgDataDirs (void);
6707872e0a1Smrg
6710d39df38SmrgFcPrivate FcExpr *
6720d39df38SmrgFcConfigAllocExpr (FcConfig *config);
6730d39df38Smrg
6742c393a42SmrgFcPrivate FcBool
6752c393a42SmrgFcConfigAddConfigDir (FcConfig	    *config,
6762c393a42Smrg		      const FcChar8 *d);
6772c393a42Smrg
6782c393a42SmrgFcPrivate FcBool
6792c393a42SmrgFcConfigAddFontDir (FcConfig	    *config,
6807872e0a1Smrg		    const FcChar8   *d,
6817872e0a1Smrg		    const FcChar8   *m,
6827872e0a1Smrg		    const FcChar8   *salt);
6837872e0a1Smrg
6847872e0a1SmrgFcPrivate FcBool
6857872e0a1SmrgFcConfigResetFontDirs (FcConfig *config);
6867872e0a1Smrg
6877872e0a1SmrgFcPrivate FcChar8 *
6887872e0a1SmrgFcConfigMapFontPath(FcConfig		*config,
6897872e0a1Smrg		    const FcChar8	*path);
6907872e0a1Smrg
6917872e0a1SmrgFcPrivate const FcChar8 *
6927872e0a1SmrgFcConfigMapSalt (FcConfig      *config,
6937872e0a1Smrg		 const FcChar8 *path);
6942c393a42Smrg
6952c393a42SmrgFcPrivate FcBool
6962c393a42SmrgFcConfigAddCacheDir (FcConfig	    *config,
6972c393a42Smrg		     const FcChar8  *d);
6982c393a42Smrg
6992c393a42SmrgFcPrivate FcBool
7002c393a42SmrgFcConfigAddConfigFile (FcConfig		*config,
7012c393a42Smrg		       const FcChar8	*f);
7022c393a42Smrg
7032c393a42SmrgFcPrivate FcBool
7042c393a42SmrgFcConfigAddBlank (FcConfig	*config,
7052c393a42Smrg		  FcChar32    	blank);
7062c393a42Smrg
707d91dd368SmrgFcBool
708d91dd368SmrgFcConfigAddRule (FcConfig	*config,
709d91dd368Smrg		 FcRule		*rule,
7102c393a42Smrg		 FcMatchKind	kind);
7112c393a42Smrg
7122c393a42SmrgFcPrivate void
7132c393a42SmrgFcConfigSetFonts (FcConfig	*config,
7142c393a42Smrg		  FcFontSet	*fonts,
7152c393a42Smrg		  FcSetName	set);
7162c393a42Smrg
7172c393a42SmrgFcPrivate FcBool
7182c393a42SmrgFcConfigCompareValue (const FcValue *m,
719d91dd368Smrg		      unsigned int   op_,
7202c393a42Smrg		      const FcValue *v);
7212c393a42Smrg
7222c393a42SmrgFcPrivate FcBool
7232c393a42SmrgFcConfigGlobAdd (FcConfig	*config,
7242c393a42Smrg		 const FcChar8	*glob,
7252c393a42Smrg		 FcBool		accept);
7262c393a42Smrg
7272c393a42SmrgFcPrivate FcBool
7282c393a42SmrgFcConfigAcceptFilename (FcConfig	*config,
7292c393a42Smrg			const FcChar8	*filename);
7302c393a42Smrg
7312c393a42SmrgFcPrivate FcBool
7322c393a42SmrgFcConfigPatternsAdd (FcConfig	*config,
7332c393a42Smrg		     FcPattern	*pattern,
7342c393a42Smrg		     FcBool	accept);
7352c393a42Smrg
7362c393a42SmrgFcPrivate FcBool
7372c393a42SmrgFcConfigAcceptFont (FcConfig	    *config,
7382c393a42Smrg		    const FcPattern *font);
7392c393a42Smrg
7402c393a42SmrgFcPrivate FcFileTime
7412c393a42SmrgFcConfigModifiedTime (FcConfig *config);
7422c393a42Smrg
7432c393a42SmrgFcPrivate FcBool
744898dab68SmrgFcConfigAddCache (FcConfig *config, FcCache *cache,
7451887081fSmrg		  FcSetName set, FcStrSet *dirSet, FcChar8 *forDir);
7461887081fSmrg
7471887081fSmrgFcPrivate FcRuleSet *
7481887081fSmrgFcRuleSetCreate (const FcChar8 *name);
7491887081fSmrg
7501887081fSmrgFcPrivate void
7511887081fSmrgFcRuleSetDestroy (FcRuleSet *rs);
7521887081fSmrg
7531887081fSmrgFcPrivate void
7541887081fSmrgFcRuleSetReference (FcRuleSet *rs);
7551887081fSmrg
7561887081fSmrgFcPrivate void
7571887081fSmrgFcRuleSetEnable (FcRuleSet	*rs,
7581887081fSmrg		 FcBool		flag);
7591887081fSmrg
7601887081fSmrgFcPrivate void
7611887081fSmrgFcRuleSetAddDescription (FcRuleSet	*rs,
7621887081fSmrg			 const FcChar8	*domain,
7631887081fSmrg			 const FcChar8	*description);
7641887081fSmrg
7651887081fSmrgFcPrivate int
7661887081fSmrgFcRuleSetAdd (FcRuleSet		*rs,
7671887081fSmrg	      FcRule		*rule,
7681887081fSmrg	      FcMatchKind	kind);
7692c393a42Smrg
7702c393a42Smrg/* fcserialize.c */
7712c393a42SmrgFcPrivate intptr_t
7722c393a42SmrgFcAlignSize (intptr_t size);
773898dab68Smrg
7742c393a42SmrgFcPrivate FcSerialize *
7752c393a42SmrgFcSerializeCreate (void);
7762c393a42Smrg
7772c393a42SmrgFcPrivate void
7782c393a42SmrgFcSerializeDestroy (FcSerialize *serialize);
7792c393a42Smrg
7802c393a42SmrgFcPrivate FcBool
7812c393a42SmrgFcSerializeAlloc (FcSerialize *serialize, const void *object, int size);
7822c393a42Smrg
7832c393a42SmrgFcPrivate intptr_t
7842c393a42SmrgFcSerializeReserve (FcSerialize *serialize, int size);
7852c393a42Smrg
7862c393a42SmrgFcPrivate intptr_t
7872c393a42SmrgFcSerializeOffset (FcSerialize *serialize, const void *object);
7882c393a42Smrg
7892c393a42SmrgFcPrivate void *
7902c393a42SmrgFcSerializePtr (FcSerialize *serialize, const void *object);
7912c393a42Smrg
7922c393a42SmrgFcPrivate FcBool
7932c393a42SmrgFcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l);
7942c393a42Smrg
7952c393a42SmrgFcPrivate FcLangSet *
7962c393a42SmrgFcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l);
7972c393a42Smrg
7982c393a42Smrg/* fccharset.c */
79918bd4a06SmrgFcPrivate FcCharSet *
80018bd4a06SmrgFcCharSetPromote (FcValuePromotionBuffer *vbuf);
80118bd4a06Smrg
8022c393a42SmrgFcPrivate void
8032c393a42SmrgFcLangCharSetPopulate (void);
8042c393a42Smrg
8052c393a42SmrgFcPrivate FcCharSetFreezer *
8062c393a42SmrgFcCharSetFreezerCreate (void);
8072c393a42Smrg
8082c393a42SmrgFcPrivate const FcCharSet *
8092c393a42SmrgFcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs);
8102c393a42Smrg
8112c393a42SmrgFcPrivate void
8122c393a42SmrgFcCharSetFreezerDestroy (FcCharSetFreezer *freezer);
8132c393a42Smrg
8142c393a42SmrgFcPrivate FcBool
8152c393a42SmrgFcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c);
8162c393a42Smrg
8172c393a42SmrgFcPrivate FcCharSet *
8182c393a42SmrgFcNameParseCharSet (FcChar8 *string);
8192c393a42Smrg
8200d39df38SmrgFcPrivate FcBool
8210d39df38SmrgFcNameUnparseValue (FcStrBuf    *buf,
8220d39df38Smrg                    FcValue     *v0,
8230d39df38Smrg		    FcChar8     *escape);
8240d39df38Smrg
8250d39df38SmrgFcPrivate FcBool
8260d39df38SmrgFcNameUnparseValueList (FcStrBuf	*buf,
8270d39df38Smrg			FcValueListPtr	v,
8280d39df38Smrg			FcChar8		*escape);
8290d39df38Smrg
8302c393a42SmrgFcPrivate FcCharLeaf *
8312c393a42SmrgFcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4);
8322c393a42Smrg
8332c393a42SmrgFcPrivate FcBool
8342c393a42SmrgFcCharSetSerializeAlloc(FcSerialize *serialize, const FcCharSet *cs);
8352c393a42Smrg
8362c393a42SmrgFcPrivate FcCharSet *
8372c393a42SmrgFcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs);
8382c393a42Smrg
8392c393a42SmrgFcPrivate FcChar16 *
8402c393a42SmrgFcCharSetGetNumbers(const FcCharSet *c);
8412c393a42Smrg
8425e61939bSmrg/* fccompat.c */
8435e61939bSmrgFcPrivate int
8445e61939bSmrgFcOpen(const char *pathname, int flags, ...);
8455e61939bSmrg
8465e61939bSmrgFcPrivate int
8475e61939bSmrgFcMakeTempfile (char *template);
8485e61939bSmrg
8495e61939bSmrgFcPrivate int32_t
8505e61939bSmrgFcRandom (void);
8515e61939bSmrg
852d91dd368SmrgFcPrivate FcBool
853d91dd368SmrgFcMakeDirectory (const FcChar8 *dir);
854d91dd368Smrg
8551887081fSmrgFcPrivate ssize_t
8561887081fSmrgFcReadLink (const FcChar8 *pathname,
8571887081fSmrg	    FcChar8       *buf,
8581887081fSmrg	    size_t         bufsiz);
8591887081fSmrg
8602c393a42Smrg/* fcdbg.c */
8615e61939bSmrg
8625e61939bSmrgFcPrivate void
8635e61939bSmrgFcValuePrintFile (FILE *f, const FcValue v);
8645e61939bSmrg
8652c393a42SmrgFcPrivate void
866898dab68SmrgFcValuePrintWithPosition (const FcValue v, FcBool show_pos_mark);
867898dab68Smrg
868898dab68SmrgFcPrivate void
869898dab68SmrgFcValueListPrintWithPosition (FcValueListPtr l, const FcValueListPtr pos);
870898dab68Smrg
871898dab68SmrgFcPrivate void
872898dab68SmrgFcValueListPrint (FcValueListPtr l);
8732c393a42Smrg
8742c393a42SmrgFcPrivate void
8752c393a42SmrgFcLangSetPrint (const FcLangSet *ls);
8762c393a42Smrg
8772c393a42SmrgFcPrivate void
8782c393a42SmrgFcOpPrint (FcOp op);
8792c393a42Smrg
8802c393a42SmrgFcPrivate void
8812c393a42SmrgFcTestPrint (const FcTest *test);
8822c393a42Smrg
8832c393a42SmrgFcPrivate void
8842c393a42SmrgFcExprPrint (const FcExpr *expr);
8852c393a42Smrg
8862c393a42SmrgFcPrivate void
8872c393a42SmrgFcEditPrint (const FcEdit *edit);
8882c393a42Smrg
8892c393a42SmrgFcPrivate void
8901887081fSmrgFcRulePrint (const FcRule *rule);
8912c393a42Smrg
8922c393a42SmrgFcPrivate void
8932c393a42SmrgFcCharSetPrint (const FcCharSet *c);
894898dab68Smrg
89518bd4a06SmrgFcPrivate void
89618bd4a06SmrgFcPatternPrint2 (FcPattern *p1, FcPattern *p2, const FcObjectSet *os);
89718bd4a06Smrg
8982c393a42Smrgextern FcPrivate int FcDebugVal;
8992c393a42Smrg
9002c393a42Smrg#define FcDebug() (FcDebugVal)
9012c393a42Smrg
9022c393a42SmrgFcPrivate void
9032c393a42SmrgFcInitDebug (void);
9042c393a42Smrg
9052c393a42Smrg/* fcdefault.c */
9062c393a42SmrgFcPrivate FcChar8 *
9072c393a42SmrgFcGetDefaultLang (void);
9082c393a42Smrg
9095e61939bSmrgFcPrivate FcChar8 *
9105e61939bSmrgFcGetPrgname (void);
9115e61939bSmrg
91246bb3e47SmrgFcPrivate FcChar8 *
91346bb3e47SmrgFcGetDesktopName (void);
91446bb3e47Smrg
9155e61939bSmrgFcPrivate void
9165e61939bSmrgFcDefaultFini (void);
9175e61939bSmrg
9182c393a42Smrg/* fcdir.c */
9192c393a42Smrg
9205e61939bSmrgFcPrivate FcBool
9215e61939bSmrgFcFileIsLink (const FcChar8 *file);
9225e61939bSmrg
923d91dd368SmrgFcPrivate FcBool
924d91dd368SmrgFcFileIsFile (const FcChar8 *file);
925d91dd368Smrg
9262c393a42SmrgFcPrivate FcBool
9272c393a42SmrgFcFileScanConfig (FcFontSet	*set,
9282c393a42Smrg		  FcStrSet	*dirs,
9292c393a42Smrg		  const FcChar8 *file,
9302c393a42Smrg		  FcConfig	*config);
9312c393a42Smrg
9322c393a42SmrgFcPrivate FcBool
9332c393a42SmrgFcDirScanConfig (FcFontSet	*set,
9342c393a42Smrg		 FcStrSet	*dirs,
9352c393a42Smrg		 const FcChar8	*dir,
9362c393a42Smrg		 FcBool		force,
9372c393a42Smrg		 FcConfig	*config);
9382c393a42Smrg
9392c393a42Smrg/* fcfont.c */
9402c393a42SmrgFcPrivate int
9412c393a42SmrgFcFontDebug (void);
9420d39df38Smrg
9432c393a42Smrg/* fcfs.c */
9442c393a42Smrg
9452c393a42SmrgFcPrivate FcBool
9462c393a42SmrgFcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s);
9472c393a42Smrg
9482c393a42SmrgFcPrivate FcFontSet *
9492c393a42SmrgFcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s);
9502c393a42Smrg
951b2a52337SmrgFcPrivate FcFontSet *
952b2a52337SmrgFcFontSetDeserialize (const FcFontSet *set);
953b2a52337Smrg
9541887081fSmrg/* fcplist.c */
9551887081fSmrgFcPrivate FcPtrList *
9561887081fSmrgFcPtrListCreate (FcDestroyFunc func);
9571887081fSmrg
9581887081fSmrgFcPrivate void
9591887081fSmrgFcPtrListDestroy (FcPtrList *list);
9601887081fSmrg
9611887081fSmrgFcPrivate void
9621887081fSmrgFcPtrListIterInit (const FcPtrList	*list,
9631887081fSmrg		   FcPtrListIter	*iter);
9641887081fSmrg
9651887081fSmrgFcPrivate void
9661887081fSmrgFcPtrListIterInitAtLast (FcPtrList	*list,
9671887081fSmrg			 FcPtrListIter	*iter);
9681887081fSmrg
9691887081fSmrgFcPrivate FcBool
9701887081fSmrgFcPtrListIterNext (const FcPtrList	*list,
9711887081fSmrg		   FcPtrListIter	*iter);
9721887081fSmrg
9731887081fSmrgFcPrivate FcBool
9741887081fSmrgFcPtrListIterIsValid (const FcPtrList		*list,
9751887081fSmrg		      const FcPtrListIter	*iter);
9761887081fSmrg
9771887081fSmrgFcPrivate void *
9781887081fSmrgFcPtrListIterGetValue (const FcPtrList		*list,
9791887081fSmrg		       const FcPtrListIter	*iter);
9801887081fSmrg
9811887081fSmrgFcPrivate FcBool
9821887081fSmrgFcPtrListIterAdd (FcPtrList	*list,
9831887081fSmrg		  FcPtrListIter	*iter,
9841887081fSmrg		void		*data);
9851887081fSmrg
9861887081fSmrgFcPrivate FcBool
9871887081fSmrgFcPtrListIterRemove (FcPtrList		*list,
9881887081fSmrg		     FcPtrListIter	*iter);
9891887081fSmrg
9902c393a42Smrg/* fcinit.c */
9915e61939bSmrgFcPrivate FcConfig *
9925e61939bSmrgFcInitLoadOwnConfig (FcConfig *config);
9932c393a42Smrg
9945e61939bSmrgFcPrivate FcConfig *
9955e61939bSmrgFcInitLoadOwnConfigAndFonts (FcConfig *config);
9962c393a42Smrg
9975e61939bSmrg/* fcxml.c */
99818bd4a06SmrgFcPrivate void
99918bd4a06SmrgFcConfigPathFini (void);
100018bd4a06Smrg
10012c393a42SmrgFcPrivate void
10025e61939bSmrgFcTestDestroy (FcTest *test);
10032c393a42Smrg
10042c393a42SmrgFcPrivate void
10055e61939bSmrgFcEditDestroy (FcEdit *e);
10062c393a42Smrg
1007d91dd368Smrgvoid
1008d91dd368SmrgFcRuleDestroy (FcRule *rule);
1009d91dd368Smrg
10102c393a42Smrg/* fclang.c */
10112c393a42SmrgFcPrivate FcLangSet *
1012898dab68SmrgFcFreeTypeLangSet (const FcCharSet  *charset,
10132c393a42Smrg		   const FcChar8    *exclusiveLang);
10142c393a42Smrg
10152c393a42SmrgFcPrivate FcLangResult
10162c393a42SmrgFcLangCompare (const FcChar8 *s1, const FcChar8 *s2);
1017898dab68Smrg
10182c393a42SmrgFcPrivate FcLangSet *
10195e61939bSmrgFcLangSetPromote (const FcChar8 *lang, FcValuePromotionBuffer *buf);
10202c393a42Smrg
10212c393a42SmrgFcPrivate FcLangSet *
10222c393a42SmrgFcNameParseLangSet (const FcChar8 *string);
10232c393a42Smrg
10242c393a42SmrgFcPrivate FcBool
10252c393a42SmrgFcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls);
10262c393a42Smrg
10272c393a42SmrgFcPrivate FcChar8 *
10282c393a42SmrgFcNameUnparseEscaped (FcPattern *pat, FcBool escape);
10292c393a42Smrg
10301887081fSmrgFcPrivate FcBool
10311887081fSmrgFcConfigParseOnly (FcConfig		*config,
10321887081fSmrg		   const FcChar8	*name,
10331887081fSmrg		   FcBool		complain);
10341887081fSmrg
10351887081fSmrgFcPrivate FcChar8 *
10361887081fSmrgFcConfigRealFilename (FcConfig		*config,
10371887081fSmrg		      const FcChar8	*url);
10381887081fSmrg
10392c393a42Smrg/* fclist.c */
10402c393a42Smrg
10412c393a42SmrgFcPrivate FcBool
10422c393a42SmrgFcListPatternMatchAny (const FcPattern *p,
10432c393a42Smrg		       const FcPattern *font);
10442c393a42Smrg
10452c393a42Smrg/* fcmatch.c */
10462c393a42Smrg
10472c393a42Smrg/* fcname.c */
10482c393a42Smrg
10495e61939bSmrgenum {
10505e61939bSmrg  FC_INVALID_OBJECT = 0,
10515e61939bSmrg#define FC_OBJECT(NAME, Type, Cmp) FC_##NAME##_OBJECT,
10525e61939bSmrg#include "fcobjs.h"
10535e61939bSmrg#undef FC_OBJECT
10545e61939bSmrg  FC_ONE_AFTER_MAX_BASE_OBJECT
10555e61939bSmrg#define FC_MAX_BASE_OBJECT (FC_ONE_AFTER_MAX_BASE_OBJECT - 1)
10565e61939bSmrg};
10572c393a42Smrg
10587872e0a1SmrgFcPrivate FcBool
10597872e0a1SmrgFcNameConstantWithObjectCheck (const FcChar8 *string, const char *object, int *result);
10607872e0a1Smrg
10612c393a42SmrgFcPrivate FcBool
10622c393a42SmrgFcNameBool (const FcChar8 *v, FcBool *result);
10632c393a42Smrg
10642c393a42SmrgFcPrivate FcBool
10652c393a42SmrgFcObjectValidType (FcObject object, FcType type);
10662c393a42Smrg
10672c393a42SmrgFcPrivate FcObject
10682c393a42SmrgFcObjectFromName (const char * name);
10692c393a42Smrg
10702c393a42SmrgFcPrivate const char *
10712c393a42SmrgFcObjectName (FcObject object);
10722c393a42Smrg
10730d39df38SmrgFcPrivate FcObjectSet *
10740d39df38SmrgFcObjectGetSet (void);
10750d39df38Smrg
10762c393a42Smrg#define FcObjectCompare(a, b)	((int) a - (int) b)
10772c393a42Smrg
10782c393a42Smrg/* fcpat.c */
10792c393a42Smrg
10802c393a42SmrgFcPrivate FcValue
10812c393a42SmrgFcValueCanonicalize (const FcValue *v);
10822c393a42Smrg
1083898dab68SmrgFcPrivate FcValueListPtr
1084898dab68SmrgFcValueListCreate (void);
1085898dab68Smrg
10862c393a42SmrgFcPrivate void
10872c393a42SmrgFcValueListDestroy (FcValueListPtr l);
10882c393a42Smrg
1089898dab68SmrgFcPrivate FcValueListPtr
1090898dab68SmrgFcValueListPrepend (FcValueListPtr vallist,
1091898dab68Smrg		    FcValue        value,
1092898dab68Smrg		    FcValueBinding binding);
1093898dab68Smrg
1094898dab68SmrgFcPrivate FcValueListPtr
1095898dab68SmrgFcValueListAppend (FcValueListPtr vallist,
1096898dab68Smrg		   FcValue        value,
1097898dab68Smrg		   FcValueBinding binding);
1098898dab68Smrg
1099898dab68SmrgFcPrivate FcValueListPtr
1100898dab68SmrgFcValueListDuplicate(FcValueListPtr orig);
1101898dab68Smrg
11022c393a42SmrgFcPrivate FcPatternElt *
11032c393a42SmrgFcPatternObjectFindElt (const FcPattern *p, FcObject object);
11042c393a42Smrg
11052c393a42SmrgFcPrivate FcPatternElt *
11062c393a42SmrgFcPatternObjectInsertElt (FcPattern *p, FcObject object);
11072c393a42Smrg
1108898dab68SmrgFcPrivate FcBool
1109898dab68SmrgFcPatternObjectListAdd (FcPattern	*p,
1110898dab68Smrg			FcObject	object,
1111898dab68Smrg			FcValueListPtr	list,
1112898dab68Smrg			FcBool		append);
1113898dab68Smrg
11142c393a42SmrgFcPrivate FcBool
11152c393a42SmrgFcPatternObjectAddWithBinding  (FcPattern	*p,
11162c393a42Smrg				FcObject	object,
11172c393a42Smrg				FcValue		value,
11182c393a42Smrg				FcValueBinding  binding,
11192c393a42Smrg				FcBool		append);
11202c393a42Smrg
11212c393a42SmrgFcPrivate FcBool
11222c393a42SmrgFcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append);
1123898dab68Smrg
11242c393a42SmrgFcPrivate FcBool
11252c393a42SmrgFcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append);
1126898dab68Smrg
11271887081fSmrgFcPrivate FcResult
11281887081fSmrgFcPatternObjectGetWithBinding (const FcPattern *p, FcObject object, int id, FcValue *v, FcValueBinding *b);
11291887081fSmrg
11302c393a42SmrgFcPrivate FcResult
11312c393a42SmrgFcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v);
1132898dab68Smrg
11332c393a42SmrgFcPrivate FcBool
11342c393a42SmrgFcPatternObjectDel (FcPattern *p, FcObject object);
11352c393a42Smrg
11362c393a42SmrgFcPrivate FcBool
11372c393a42SmrgFcPatternObjectRemove (FcPattern *p, FcObject object, int id);
11382c393a42Smrg
11392c393a42SmrgFcPrivate FcBool
11402c393a42SmrgFcPatternObjectAddInteger (FcPattern *p, FcObject object, int i);
11412c393a42Smrg
11422c393a42SmrgFcPrivate FcBool
11432c393a42SmrgFcPatternObjectAddDouble (FcPattern *p, FcObject object, double d);
11442c393a42Smrg
11452c393a42SmrgFcPrivate FcBool
11462c393a42SmrgFcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s);
11472c393a42Smrg
11482c393a42SmrgFcPrivate FcBool
11492c393a42SmrgFcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s);
11502c393a42Smrg
11512c393a42SmrgFcPrivate FcBool
11522c393a42SmrgFcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c);
11532c393a42Smrg
11542c393a42SmrgFcPrivate FcBool
11552c393a42SmrgFcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b);
11562c393a42Smrg
11572c393a42SmrgFcPrivate FcBool
11582c393a42SmrgFcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls);
11592c393a42Smrg
116018bd4a06SmrgFcPrivate FcBool
116118bd4a06SmrgFcPatternObjectAddRange (FcPattern *p, FcObject object, const FcRange *r);
116218bd4a06Smrg
11632c393a42SmrgFcPrivate FcResult
11642c393a42SmrgFcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i);
11652c393a42Smrg
11662c393a42SmrgFcPrivate FcResult
11672c393a42SmrgFcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d);
11682c393a42Smrg
11692c393a42SmrgFcPrivate FcResult
11702c393a42SmrgFcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 ** s);
11712c393a42Smrg
11722c393a42SmrgFcPrivate FcResult
11732c393a42SmrgFcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s);
11742c393a42Smrg
11752c393a42SmrgFcPrivate FcResult
11762c393a42SmrgFcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c);
11772c393a42Smrg
11782c393a42SmrgFcPrivate FcResult
11792c393a42SmrgFcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b);
11802c393a42Smrg
11812c393a42SmrgFcPrivate FcResult
11822c393a42SmrgFcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls);
11832c393a42Smrg
118418bd4a06SmrgFcPrivate FcResult
118518bd4a06SmrgFcPatternObjectGetRange (const FcPattern *p, FcObject object, int id, FcRange **r);
118618bd4a06Smrg
11872c393a42SmrgFcPrivate FcBool
11882c393a42SmrgFcPatternAppend (FcPattern *p, FcPattern *s);
11892c393a42Smrg
119018bd4a06SmrgFcPrivate int
119118bd4a06SmrgFcPatternPosition (const FcPattern *p, const char *object);
119218bd4a06Smrg
11931887081fSmrgFcPrivate FcBool
11941887081fSmrgFcPatternFindObjectIter (const FcPattern *pat, FcPatternIter *iter, FcObject object);
11951887081fSmrg
11961887081fSmrgFcPrivate FcObject
11971887081fSmrgFcPatternIterGetObjectId (const FcPattern *pat, FcPatternIter *iter);
11981887081fSmrg
11991887081fSmrgFcPrivate FcValueListPtr
12001887081fSmrgFcPatternIterGetValues (const FcPattern *pat, FcPatternIter *iter);
12011887081fSmrg
12021887081fSmrgFcPrivate FcPattern *
12031887081fSmrgFcPatternCacheRewriteFile (const FcPattern *pat, FcCache *cache, const FcChar8 *relocated_font_file);
12041887081fSmrg
12052c393a42SmrgFcPrivate FcChar32
12062c393a42SmrgFcStringHash (const FcChar8 *s);
12072c393a42Smrg
12082c393a42SmrgFcPrivate FcBool
12092c393a42SmrgFcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat);
12102c393a42Smrg
12112c393a42SmrgFcPrivate FcPattern *
12122c393a42SmrgFcPatternSerialize (FcSerialize *serialize, const FcPattern *pat);
12132c393a42Smrg
12142c393a42SmrgFcPrivate FcBool
12152c393a42SmrgFcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat);
12162c393a42Smrg
12172c393a42SmrgFcPrivate FcValueList *
12182c393a42SmrgFcValueListSerialize (FcSerialize *serialize, const FcValueList *pat);
12192c393a42Smrg
12202c393a42Smrg/* fcrender.c */
12212c393a42Smrg
12222c393a42Smrg/* fcmatrix.c */
12232c393a42Smrg
12242c393a42Smrgextern FcPrivate const FcMatrix    FcIdentityMatrix;
12252c393a42Smrg
12262c393a42SmrgFcPrivate void
12272c393a42SmrgFcMatrixFree (FcMatrix *mat);
12282c393a42Smrg
122918bd4a06Smrg/* fcrange.c */
123018bd4a06Smrg
123118bd4a06SmrgFcPrivate FcRange *
123218bd4a06SmrgFcRangePromote (double v, FcValuePromotionBuffer *vbuf);
123318bd4a06Smrg
123418bd4a06SmrgFcPrivate FcBool
123518bd4a06SmrgFcRangeIsInRange (const FcRange *a, const FcRange *b);
123618bd4a06Smrg
123718bd4a06SmrgFcPrivate FcBool
123818bd4a06SmrgFcRangeCompare (FcOp op, const FcRange *a, const FcRange *b);
123918bd4a06Smrg
124018bd4a06SmrgFcPrivate FcChar32
124118bd4a06SmrgFcRangeHash (const FcRange *r);
124218bd4a06Smrg
124318bd4a06SmrgFcPrivate FcBool
124418bd4a06SmrgFcRangeSerializeAlloc (FcSerialize *serialize, const FcRange *r);
124518bd4a06Smrg
124618bd4a06SmrgFcPrivate FcRange *
124718bd4a06SmrgFcRangeSerialize (FcSerialize *serialize, const FcRange *r);
124818bd4a06Smrg
1249898dab68Smrg/* fcstat.c */
1250898dab68Smrg
1251898dab68SmrgFcPrivate int
1252898dab68SmrgFcStat (const FcChar8 *file, struct stat *statb);
1253898dab68Smrg
1254898dab68SmrgFcPrivate int
1255898dab68SmrgFcStatChecksum (const FcChar8 *file, struct stat *statb);
1256898dab68Smrg
1257898dab68SmrgFcPrivate FcBool
1258898dab68SmrgFcIsFsMmapSafe (int fd);
1259898dab68Smrg
1260898dab68SmrgFcPrivate FcBool
1261898dab68SmrgFcIsFsMtimeBroken (const FcChar8 *dir);
1262898dab68Smrg
12632c393a42Smrg/* fcstr.c */
126418bd4a06SmrgFcPrivate FcStrSet *
126518bd4a06SmrgFcStrSetCreateEx (unsigned int control);
126618bd4a06Smrg
12677872e0a1SmrgFcPrivate FcBool
12687872e0a1SmrgFcStrSetInsert (FcStrSet *set, const FcChar8 *s, int pos);
12697872e0a1Smrg
1270898dab68SmrgFcPrivate FcBool
1271898dab68SmrgFcStrSetAddLangs (FcStrSet *strs, const char *languages);
1272898dab68Smrg
12732c393a42SmrgFcPrivate void
12742c393a42SmrgFcStrSetSort (FcStrSet * set);
12752c393a42Smrg
12767872e0a1SmrgFcPrivate FcBool
12777872e0a1SmrgFcStrSetMemberAB (FcStrSet *set, const FcChar8 *a, FcChar8 *b, FcChar8 **ret);
12787872e0a1Smrg
12797872e0a1SmrgFcPrivate FcBool
12807872e0a1SmrgFcStrSetAddTriple (FcStrSet *set, const FcChar8 *a, const FcChar8 *b, const FcChar8 *c);
12817872e0a1Smrg
12827872e0a1SmrgFcPrivate const FcChar8 *
12837872e0a1SmrgFcStrTripleSecond (FcChar8 *s);
12847872e0a1Smrg
12857872e0a1SmrgFcPrivate const FcChar8 *
12867872e0a1SmrgFcStrTripleThird (FcChar8 *str);
12877872e0a1Smrg
12887872e0a1SmrgFcPrivate FcBool
12897872e0a1SmrgFcStrSetAddFilenamePairWithSalt (FcStrSet *strs, const FcChar8 *d, const FcChar8 *m, const FcChar8 *salt);
12907872e0a1Smrg
12917872e0a1SmrgFcPrivate FcBool
12927872e0a1SmrgFcStrSetDeleteAll (FcStrSet *set);
12937872e0a1Smrg
12942c393a42SmrgFcPrivate void
12952c393a42SmrgFcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size);
12962c393a42Smrg
12972c393a42SmrgFcPrivate void
12982c393a42SmrgFcStrBufDestroy (FcStrBuf *buf);
12992c393a42Smrg
13002c393a42SmrgFcPrivate FcChar8 *
13012c393a42SmrgFcStrBufDone (FcStrBuf *buf);
13022c393a42Smrg
13030d39df38SmrgFcPrivate FcChar8 *
13040d39df38SmrgFcStrBufDoneStatic (FcStrBuf *buf);
13050d39df38Smrg
13062c393a42SmrgFcPrivate FcBool
13072c393a42SmrgFcStrBufChar (FcStrBuf *buf, FcChar8 c);
13082c393a42Smrg
13092c393a42SmrgFcPrivate FcBool
13102c393a42SmrgFcStrBufString (FcStrBuf *buf, const FcChar8 *s);
13112c393a42Smrg
13122c393a42SmrgFcPrivate FcBool
13132c393a42SmrgFcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len);
13142c393a42Smrg
13152c393a42SmrgFcPrivate int
13162c393a42SmrgFcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
13172c393a42Smrg
13185e61939bSmrgFcPrivate int
13195e61939bSmrgFcStrCmpIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *delims);
13205e61939bSmrg
13212c393a42SmrgFcPrivate const FcChar8 *
13222c393a42SmrgFcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
13232c393a42Smrg
13242c393a42SmrgFcPrivate const FcChar8 *
13252c393a42SmrgFcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
13262c393a42Smrg
13272c393a42SmrgFcPrivate const FcChar8 *
13282c393a42SmrgFcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2);
13292c393a42Smrg
13305e61939bSmrgFcPrivate int
13315e61939bSmrgFcStrMatchIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *delims);
13325e61939bSmrg
13335e61939bSmrgFcPrivate FcBool
13345e61939bSmrgFcStrGlobMatch (const FcChar8 *glob,
13355e61939bSmrg		const FcChar8 *string);
13365e61939bSmrg
13372c393a42SmrgFcPrivate FcBool
13382c393a42SmrgFcStrUsesHome (const FcChar8 *s);
13392c393a42Smrg
13401887081fSmrgFcPrivate FcBool
13411887081fSmrgFcStrIsAbsoluteFilename (const FcChar8 *s);
13421887081fSmrg
13432c393a42SmrgFcPrivate FcChar8 *
13442c393a42SmrgFcStrLastSlash (const FcChar8  *path);
13452c393a42Smrg
13462c393a42SmrgFcPrivate FcChar32
13472c393a42SmrgFcStrHashIgnoreCase (const FcChar8 *s);
13482c393a42Smrg
13497872e0a1SmrgFcPrivate FcChar32
13507872e0a1SmrgFcStrHashIgnoreBlanksAndCase (const FcChar8 *s);
13517872e0a1Smrg
13527872e0a1SmrgFcPrivate FcChar8 *
13537872e0a1SmrgFcStrRealPath (const FcChar8 *path);
13547872e0a1Smrg
13552c393a42SmrgFcPrivate FcChar8 *
13562c393a42SmrgFcStrCanonFilename (const FcChar8 *s);
13572c393a42Smrg
13582c393a42SmrgFcPrivate FcBool
13592c393a42SmrgFcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str);
13602c393a42Smrg
13612c393a42SmrgFcPrivate FcChar8 *
13622c393a42SmrgFcStrSerialize (FcSerialize *serialize, const FcChar8 *str);
13632c393a42Smrg
13645e61939bSmrg/* fcobjs.c */
13655e61939bSmrg
136618bd4a06SmrgFcPrivate void
136718bd4a06SmrgFcObjectFini (void);
136818bd4a06Smrg
13695e61939bSmrgFcPrivate FcObject
13705e61939bSmrgFcObjectLookupIdByName (const char *str);
13715e61939bSmrg
13725e61939bSmrgFcPrivate FcObject
13735e61939bSmrgFcObjectLookupBuiltinIdByName (const char *str);
13745e61939bSmrg
13755e61939bSmrgFcPrivate const char *
13765e61939bSmrgFcObjectLookupOtherNameById (FcObject id);
13775e61939bSmrg
13785e61939bSmrgFcPrivate const FcObjectType *
13795e61939bSmrgFcObjectLookupOtherTypeById (FcObject id);
13805e61939bSmrg
13815e61939bSmrgFcPrivate const FcObjectType *
13825e61939bSmrgFcObjectLookupOtherTypeByName (const char *str);
13835e61939bSmrg
13841887081fSmrg/* fchash.c */
13851887081fSmrgFcPrivate FcBool
13861887081fSmrgFcHashStrCopy (const void  *src,
13871887081fSmrg	       void       **dest);
13881887081fSmrg
13891887081fSmrgFcPrivate FcBool
13901887081fSmrgFcHashUuidCopy (const void  *src,
13911887081fSmrg		void       **dest);
13921887081fSmrg
13931887081fSmrgFcPrivate void
13941887081fSmrgFcHashUuidFree (void *data);
13951887081fSmrg
13961887081fSmrgFcPrivate FcHashTable *
13971887081fSmrgFcHashTableCreate (FcHashFunc    hash_func,
13981887081fSmrg		   FcCompareFunc compare_func,
13991887081fSmrg		   FcCopyFunc    key_copy_func,
14001887081fSmrg		   FcCopyFunc    value_copy_func,
14011887081fSmrg		   FcDestroyFunc key_destroy_func,
14021887081fSmrg		   FcDestroyFunc value_destroy_func);
14031887081fSmrg
14041887081fSmrgFcPrivate void
14051887081fSmrgFcHashTableDestroy (FcHashTable *table);
14061887081fSmrg
14071887081fSmrgFcPrivate FcBool
14081887081fSmrgFcHashTableFind (FcHashTable  *table,
14091887081fSmrg		 const void   *key,
14101887081fSmrg		 void        **value);
14111887081fSmrg
14121887081fSmrgFcPrivate FcBool
14131887081fSmrgFcHashTableAdd (FcHashTable *table,
14141887081fSmrg		void        *key,
14151887081fSmrg		void        *value);
14161887081fSmrg
14171887081fSmrgFcPrivate FcBool
14181887081fSmrgFcHashTableReplace (FcHashTable *table,
14191887081fSmrg		    void        *key,
14201887081fSmrg		    void        *value);
14211887081fSmrg
14221887081fSmrgFcPrivate FcBool
14231887081fSmrgFcHashTableRemove (FcHashTable *table,
14241887081fSmrg		   void        *key);
14251887081fSmrg
14262c393a42Smrg#endif /* _FC_INT_H_ */
1427