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