fcint.h revision 898dab68
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
322c393a42Smrg#include <stdlib.h>
332c393a42Smrg#include <stdio.h>
342c393a42Smrg#ifdef HAVE_INTTYPES_H
352c393a42Smrg#include <inttypes.h>
362c393a42Smrg#elif defined(HAVE_STDINT_H)
372c393a42Smrg#include <stdint.h>
385d887b24Smrg#elif defined(__INTERIX)
395d887b24Smrg
405d887b24Smrg/* limits.h has a definition for ALIGN() that conflicts with the one below */
415d887b24Smrg#  include <limits.h>
425d887b24Smrg#  undef ALIGN
435d887b24Smrg/* Interix 3.x has a gcc that shadows this. */
445d887b24Smrg#  ifndef _INTPTR_T_DEFINED
455d887b24Smrg     typedef long intptr_t;
465d887b24Smrg#  define _INTPTR_T_DEFINED
475d887b24Smrg#  endif
485d887b24Smrg#  ifndef _UINTPTR_T_DEFINED
495d887b24Smrg     typedef unsigned long uintptr_t;
505d887b24Smrg#  define _UINTPTR_T_DEFINED
515d887b24Smrg#  endif
525d887b24Smrg
532c393a42Smrg#else
542c393a42Smrg#error missing C99 integer data types
552c393a42Smrg#endif
562c393a42Smrg#include <string.h>
572c393a42Smrg#include <ctype.h>
582c393a42Smrg#include <errno.h>
592c393a42Smrg#include <unistd.h>
602c393a42Smrg#include <stddef.h>
612c393a42Smrg#include <sys/types.h>
622c393a42Smrg#include <sys/stat.h>
632c393a42Smrg#include <time.h>
642c393a42Smrg#include <fontconfig/fontconfig.h>
652c393a42Smrg#include <fontconfig/fcprivate.h>
662c393a42Smrg#include "fcdeprecate.h"
672c393a42Smrg
682c393a42Smrg#ifndef FC_CONFIG_PATH
692c393a42Smrg#define FC_CONFIG_PATH "fonts.conf"
702c393a42Smrg#endif
712c393a42Smrg
722c393a42Smrg#ifdef _WIN32
73898dab68Smrg#  ifndef _WIN32_WINNT
74898dab68Smrg#    define _WIN32_WINNT 0x0500
75898dab68Smrg#  endif
76898dab68Smrg#  define WIN32_LEAN_AND_MEAN
77898dab68Smrg#  define STRICT
78898dab68Smrg#  include <windows.h>
79898dab68Smrgtypedef UINT (WINAPI *pfnGetSystemWindowsDirectory)(LPSTR, UINT);
80898dab68Smrgtypedef HRESULT (WINAPI *pfnSHGetFolderPathA)(HWND, int, HANDLE, DWORD, LPSTR);
81898dab68Smrgextern pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory;
82898dab68Smrgextern pfnSHGetFolderPathA pSHGetFolderPathA;
83898dab68Smrg#  define FC_SEARCH_PATH_SEPARATOR ';'
84898dab68Smrg#  define FC_DIR_SEPARATOR         '\\'
85898dab68Smrg#  define FC_DIR_SEPARATOR_S       "\\"
862c393a42Smrg#else
87898dab68Smrg#  define FC_SEARCH_PATH_SEPARATOR ':'
88898dab68Smrg#  define FC_DIR_SEPARATOR         '/'
89898dab68Smrg#  define FC_DIR_SEPARATOR_S       "/"
902c393a42Smrg#endif
912c393a42Smrg
922c393a42Smrg#define FC_DBG_MATCH	1
932c393a42Smrg#define FC_DBG_MATCHV	2
942c393a42Smrg#define FC_DBG_EDIT	4
952c393a42Smrg#define FC_DBG_FONTSET	8
962c393a42Smrg#define FC_DBG_CACHE	16
972c393a42Smrg#define FC_DBG_CACHEV	32
982c393a42Smrg#define FC_DBG_PARSE	64
992c393a42Smrg#define FC_DBG_SCAN	128
1002c393a42Smrg#define FC_DBG_SCANV	256
1012c393a42Smrg#define FC_DBG_MEMORY	512
1022c393a42Smrg#define FC_DBG_CONFIG	1024
1032c393a42Smrg#define FC_DBG_LANGSET	2048
1042c393a42Smrg#define FC_DBG_OBJTYPES	4096
1052c393a42Smrg
1062c393a42Smrg#define FC_MEM_CHARSET	    0
1072c393a42Smrg#define FC_MEM_CHARLEAF	    1
1082c393a42Smrg#define FC_MEM_FONTSET	    2
1092c393a42Smrg#define FC_MEM_FONTPTR	    3
1102c393a42Smrg#define FC_MEM_OBJECTSET    4
1112c393a42Smrg#define FC_MEM_OBJECTPTR    5
1122c393a42Smrg#define FC_MEM_MATRIX	    6
1132c393a42Smrg#define FC_MEM_PATTERN	    7
1142c393a42Smrg#define FC_MEM_PATELT	    8
1152c393a42Smrg#define FC_MEM_VALLIST	    9
1162c393a42Smrg#define FC_MEM_SUBSTATE	    10
1172c393a42Smrg#define FC_MEM_STRING	    11
1182c393a42Smrg#define FC_MEM_LISTBUCK	    12
1192c393a42Smrg#define FC_MEM_STRSET	    13
1202c393a42Smrg#define FC_MEM_STRLIST	    14
1212c393a42Smrg#define FC_MEM_CONFIG	    15
1222c393a42Smrg#define FC_MEM_LANGSET	    16
1232c393a42Smrg#define FC_MEM_ATOMIC	    17
1242c393a42Smrg#define FC_MEM_BLANKS	    18
1252c393a42Smrg#define FC_MEM_CACHE	    19
1262c393a42Smrg#define FC_MEM_STRBUF	    20
1272c393a42Smrg#define FC_MEM_SUBST	    21
1282c393a42Smrg#define FC_MEM_OBJECTTYPE   22
1292c393a42Smrg#define FC_MEM_CONSTANT	    23
1302c393a42Smrg#define FC_MEM_TEST	    24
1312c393a42Smrg#define FC_MEM_EXPR	    25
1322c393a42Smrg#define FC_MEM_VSTACK	    26
1332c393a42Smrg#define FC_MEM_ATTR	    27
1342c393a42Smrg#define FC_MEM_PSTACK	    28
135898dab68Smrg#define FC_MEM_SHAREDSTR    29
1362c393a42Smrg
1372c393a42Smrg#define FC_MEM_NUM	    30
1382c393a42Smrg
139898dab68Smrg#define _FC_ASSERT_STATIC1(_line, _cond) typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1]
140898dab68Smrg#define _FC_ASSERT_STATIC0(_line, _cond) _FC_ASSERT_STATIC1 (_line, (_cond))
141898dab68Smrg#define FC_ASSERT_STATIC(_cond) _FC_ASSERT_STATIC0 (__LINE__, (_cond))
142898dab68Smrg
1430d39df38Smrg#define FC_MIN(a,b) ((a) < (b) ? (a) : (b))
1440d39df38Smrg#define FC_MAX(a,b) ((a) > (b) ? (a) : (b))
1450d39df38Smrg#define FC_ABS(a)   ((a) < 0 ? -(a) : (a))
1462c393a42Smrg
1472c393a42Smrg/* slim_internal.h */
1482c393a42Smrg#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun)
1492c393a42Smrg#define FcPrivate		__attribute__((__visibility__("hidden")))
1502c393a42Smrg#define HAVE_GNUC_ATTRIBUTE 1
1512c393a42Smrg#include "fcalias.h"
1522c393a42Smrg#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
1532c393a42Smrg#define FcPrivate		__hidden
1542c393a42Smrg#else /* not gcc >= 3.3 and not Sun Studio >= 8 */
1552c393a42Smrg#define FcPrivate
1562c393a42Smrg#endif
1572c393a42Smrg
1582c393a42Smrgtypedef enum _FcValueBinding {
1592c393a42Smrg    FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame
1602c393a42Smrg} FcValueBinding;
1612c393a42Smrg
1622c393a42Smrg/*
1632c393a42Smrg * Serialized data structures use only offsets instead of pointers
1642c393a42Smrg * A low bit of 1 indicates an offset.
1652c393a42Smrg */
166898dab68Smrg
1672c393a42Smrg/* Is the provided pointer actually an offset? */
1682c393a42Smrg#define FcIsEncodedOffset(p)	((((intptr_t) (p)) & 1) != 0)
1692c393a42Smrg
1702c393a42Smrg/* Encode offset in a pointer of type t */
1712c393a42Smrg#define FcOffsetEncode(o,t)	((t *) ((o) | 1))
1722c393a42Smrg
1732c393a42Smrg/* Decode a pointer into an offset */
1742c393a42Smrg#define FcOffsetDecode(p)	(((intptr_t) (p)) & ~1)
1752c393a42Smrg
1762c393a42Smrg/* Compute pointer offset */
1772c393a42Smrg#define FcPtrToOffset(b,p)	((intptr_t) (p) - (intptr_t) (b))
1782c393a42Smrg
1792c393a42Smrg/* Given base address, offset and type, return a pointer */
1802c393a42Smrg#define FcOffsetToPtr(b,o,t)	((t *) ((intptr_t) (b) + (o)))
1812c393a42Smrg
1822c393a42Smrg/* Given base address, encoded offset and type, return a pointer */
1832c393a42Smrg#define FcEncodedOffsetToPtr(b,p,t) FcOffsetToPtr(b,FcOffsetDecode(p),t)
1842c393a42Smrg
1852c393a42Smrg/* Given base address, pointer and type, return an encoded offset */
1862c393a42Smrg#define FcPtrToEncodedOffset(b,p,t) FcOffsetEncode(FcPtrToOffset(b,p),t)
1872c393a42Smrg
1882c393a42Smrg/* Given a structure, offset member and type, return pointer */
1892c393a42Smrg#define FcOffsetMember(s,m,t)	    FcOffsetToPtr(s,(s)->m,t)
1902c393a42Smrg
1912c393a42Smrg/* Given a structure, encoded offset member and type, return pointer to member */
1922c393a42Smrg#define FcEncodedOffsetMember(s,m,t) FcOffsetToPtr(s,FcOffsetDecode((s)->m), t)
1932c393a42Smrg
1942c393a42Smrg/* Given a structure, member and type, convert the member to a pointer */
1952c393a42Smrg#define FcPointerMember(s,m,t)	(FcIsEncodedOffset((s)->m) ? \
1962c393a42Smrg				 FcEncodedOffsetMember (s,m,t) : \
1972c393a42Smrg				 (s)->m)
1982c393a42Smrg
1992c393a42Smrg/*
2002c393a42Smrg * Serialized values may hold strings, charsets and langsets as pointers,
2012c393a42Smrg * unfortunately FcValue is an exposed type so we can't just always use
2022c393a42Smrg * offsets
2032c393a42Smrg */
2042c393a42Smrg#define FcValueString(v)	FcPointerMember(v,u.s,FcChar8)
2052c393a42Smrg#define FcValueCharSet(v)	FcPointerMember(v,u.c,const FcCharSet)
2062c393a42Smrg#define FcValueLangSet(v)	FcPointerMember(v,u.l,const FcLangSet)
2072c393a42Smrg
2082c393a42Smrgtypedef struct _FcValueList *FcValueListPtr;
2092c393a42Smrg
2102c393a42Smrgtypedef struct _FcValueList {
2112c393a42Smrg    struct _FcValueList	*next;
2122c393a42Smrg    FcValue		value;
2132c393a42Smrg    FcValueBinding	binding;
2142c393a42Smrg} FcValueList;
2152c393a42Smrg
2162c393a42Smrg#define FcValueListNext(vl)	FcPointerMember(vl,next,FcValueList)
217898dab68Smrg
2182c393a42Smrgtypedef int FcObject;
2192c393a42Smrg
2202c393a42Smrgtypedef struct _FcPatternElt *FcPatternEltPtr;
2212c393a42Smrg
2222c393a42Smrg/*
223898dab68Smrg * Pattern elts are stuck in a structure connected to the pattern,
2242c393a42Smrg * so they get moved around when the pattern is resized. Hence, the
2252c393a42Smrg * values field must be a pointer/offset instead of just an offset
2262c393a42Smrg */
2272c393a42Smrgtypedef struct _FcPatternElt {
2282c393a42Smrg    FcObject		object;
2292c393a42Smrg    FcValueList		*values;
2302c393a42Smrg} FcPatternElt;
2312c393a42Smrg
2322c393a42Smrg#define FcPatternEltValues(pe)	FcPointerMember(pe,values,FcValueList)
2332c393a42Smrg
2342c393a42Smrgstruct _FcPattern {
2352c393a42Smrg    int		    num;
2362c393a42Smrg    int		    size;
2372c393a42Smrg    intptr_t	    elts_offset;
2382c393a42Smrg    int		    ref;
2392c393a42Smrg};
2402c393a42Smrg
2412c393a42Smrg#define FcPatternElts(p)	FcOffsetMember(p,elts_offset,FcPatternElt)
2422c393a42Smrg
2432c393a42Smrg#define FcFontSetFonts(fs)	FcPointerMember(fs,fonts,FcPattern *)
2442c393a42Smrg
2452c393a42Smrg#define FcFontSetFont(fs,i)	(FcIsEncodedOffset((fs)->fonts) ? \
2462c393a42Smrg				 FcEncodedOffsetToPtr(fs, \
2472c393a42Smrg						      FcFontSetFonts(fs)[i], \
2482c393a42Smrg						      FcPattern) : \
2492c393a42Smrg				 fs->fonts[i])
2502c393a42Smrg
2512c393a42Smrgtypedef enum _FcOp {
252898dab68Smrg    FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpRange, FcOpBool, FcOpCharSet, FcOpLangSet,
2532c393a42Smrg    FcOpNil,
2542c393a42Smrg    FcOpField, FcOpConst,
255898dab68Smrg    FcOpAssign, FcOpAssignReplace,
2562c393a42Smrg    FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast,
2572c393a42Smrg    FcOpQuest,
258898dab68Smrg    FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual,
2592c393a42Smrg    FcOpContains, FcOpListing, FcOpNotContains,
2602c393a42Smrg    FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual,
2612c393a42Smrg    FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide,
2622c393a42Smrg    FcOpNot, FcOpComma, FcOpFloor, FcOpCeil, FcOpRound, FcOpTrunc,
2632c393a42Smrg    FcOpInvalid
2642c393a42Smrg} FcOp;
2652c393a42Smrg
266898dab68Smrgtypedef enum _FcOpFlags {
267898dab68Smrg	FcOpFlagIgnoreBlanks = 1 << 0
268898dab68Smrg} FcOpFlags;
269898dab68Smrg
270898dab68Smrg#define FC_OP_GET_OP(_x_)	((_x_) & 0xffff)
271898dab68Smrg#define FC_OP_GET_FLAGS(_x_)	(((_x_) & 0xffff0000) >> 16)
272898dab68Smrg#define FC_OP(_x_,_f_)		(FC_OP_GET_OP (_x_) | ((_f_) << 16))
273898dab68Smrg
2742c393a42Smrgtypedef struct _FcExpr {
2752c393a42Smrg    FcOp   op;
2762c393a42Smrg    union {
2772c393a42Smrg	int	    ival;
2782c393a42Smrg	double	    dval;
279898dab68Smrg	const FcChar8	    *sval;
2802c393a42Smrg	FcMatrix    *mval;
2812c393a42Smrg	FcBool	    bval;
2822c393a42Smrg	FcCharSet   *cval;
283898dab68Smrg	FcLangSet   *lval;
2842c393a42Smrg	FcObject    object;
285898dab68Smrg	const FcChar8	    *constant;
2862c393a42Smrg	struct {
2872c393a42Smrg	    struct _FcExpr *left, *right;
2882c393a42Smrg	} tree;
2892c393a42Smrg    } u;
2902c393a42Smrg} FcExpr;
2912c393a42Smrg
2920d39df38Smrgtypedef struct _FcExprPage FcExprPage;
2930d39df38Smrg
2940d39df38Smrgstruct _FcExprPage {
2950d39df38Smrg  FcExprPage *next_page;
2960d39df38Smrg  FcExpr *next;
2970d39df38Smrg  FcExpr exprs[(1024 - 2/* two pointers */ - 2/* malloc overhead */) * sizeof (void *) / sizeof (FcExpr)];
298898dab68Smrg  FcExpr end[FLEXIBLE_ARRAY_MEMBER];
2990d39df38Smrg};
3000d39df38Smrg
3012c393a42Smrgtypedef enum _FcQual {
3022c393a42Smrg    FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst
3032c393a42Smrg} FcQual;
3042c393a42Smrg
3052c393a42Smrg#define FcMatchDefault	((FcMatchKind) -1)
3062c393a42Smrg
3072c393a42Smrgtypedef struct _FcTest {
3082c393a42Smrg    struct _FcTest	*next;
3092c393a42Smrg    FcMatchKind		kind;
3102c393a42Smrg    FcQual		qual;
3112c393a42Smrg    FcObject		object;
3122c393a42Smrg    FcOp		op;
3132c393a42Smrg    FcExpr		*expr;
3142c393a42Smrg} FcTest;
3152c393a42Smrg
3162c393a42Smrgtypedef struct _FcEdit {
3172c393a42Smrg    struct _FcEdit *next;
3182c393a42Smrg    FcObject	    object;
3192c393a42Smrg    FcOp	    op;
3202c393a42Smrg    FcExpr	    *expr;
3212c393a42Smrg    FcValueBinding  binding;
3222c393a42Smrg} FcEdit;
3232c393a42Smrg
3242c393a42Smrgtypedef struct _FcSubst {
3252c393a42Smrg    struct _FcSubst	*next;
3262c393a42Smrg    FcTest		*test;
3272c393a42Smrg    FcEdit		*edit;
3282c393a42Smrg} FcSubst;
3292c393a42Smrg
3302c393a42Smrgtypedef struct _FcCharLeaf {
3312c393a42Smrg    FcChar32	map[256/32];
3322c393a42Smrg} FcCharLeaf;
3332c393a42Smrg
3342c393a42Smrg#define FC_REF_CONSTANT	    -1
3352c393a42Smrg
3362c393a42Smrgstruct _FcCharSet {
3372c393a42Smrg    int		    ref;	/* reference count */
3382c393a42Smrg    int		    num;	/* size of leaves and numbers arrays */
3392c393a42Smrg    intptr_t	    leaves_offset;
3402c393a42Smrg    intptr_t	    numbers_offset;
3412c393a42Smrg};
3422c393a42Smrg
3432c393a42Smrg#define FcCharSetLeaves(c)	FcOffsetMember(c,leaves_offset,intptr_t)
3442c393a42Smrg#define FcCharSetLeaf(c,i)	(FcOffsetToPtr(FcCharSetLeaves(c), \
3452c393a42Smrg					       FcCharSetLeaves(c)[i], \
3462c393a42Smrg					       FcCharLeaf))
3472c393a42Smrg#define FcCharSetNumbers(c)	FcOffsetMember(c,numbers_offset,FcChar16)
3482c393a42Smrg
3492c393a42Smrgstruct _FcStrSet {
3502c393a42Smrg    int		    ref;	/* reference count */
3512c393a42Smrg    int		    num;
3522c393a42Smrg    int		    size;
3532c393a42Smrg    FcChar8	    **strs;
3542c393a42Smrg};
3552c393a42Smrg
3562c393a42Smrgstruct _FcStrList {
3572c393a42Smrg    FcStrSet	    *set;
3582c393a42Smrg    int		    n;
3592c393a42Smrg};
3602c393a42Smrg
3612c393a42Smrgtypedef struct _FcStrBuf {
3622c393a42Smrg    FcChar8 *buf;
3632c393a42Smrg    FcBool  allocated;
3642c393a42Smrg    FcBool  failed;
3652c393a42Smrg    int	    len;
3662c393a42Smrg    int	    size;
3670d39df38Smrg    FcChar8 buf_static[16 * sizeof (void *)];
3682c393a42Smrg} FcStrBuf;
3692c393a42Smrg
3702c393a42Smrgstruct _FcCache {
3712c393a42Smrg    int		magic;              /* FC_CACHE_MAGIC_MMAP or FC_CACHE_ALLOC */
3722c393a42Smrg    int		version;	    /* FC_CACHE_CONTENT_VERSION */
3732c393a42Smrg    intptr_t	size;		    /* size of file */
3742c393a42Smrg    intptr_t	dir;		    /* offset to dir name */
3752c393a42Smrg    intptr_t	dirs;		    /* offset to subdirs */
3762c393a42Smrg    int		dirs_count;	    /* number of subdir strings */
3772c393a42Smrg    intptr_t	set;		    /* offset to font set */
378898dab68Smrg    int		checksum;	    /* checksum of directory state */
3792c393a42Smrg};
3802c393a42Smrg
3812c393a42Smrg#undef FcCacheDir
3822c393a42Smrg#undef FcCacheSubdir
3832c393a42Smrg#define FcCacheDir(c)	FcOffsetMember(c,dir,FcChar8)
3842c393a42Smrg#define FcCacheDirs(c)	FcOffsetMember(c,dirs,intptr_t)
3852c393a42Smrg#define FcCacheSet(c)	FcOffsetMember(c,set,FcFontSet)
3862c393a42Smrg#define FcCacheSubdir(c,i)  FcOffsetToPtr (FcCacheDirs(c),\
3872c393a42Smrg					   FcCacheDirs(c)[i], \
3882c393a42Smrg					   FcChar8)
3892c393a42Smrg
3902c393a42Smrg/*
3912c393a42Smrg * Used while constructing a directory cache object
3922c393a42Smrg */
3932c393a42Smrg
3942c393a42Smrg#define FC_SERIALIZE_HASH_SIZE	8191
3952c393a42Smrg
3960d39df38Smrgtypedef union _FcAlign {
3970d39df38Smrg    double	d;
3980d39df38Smrg    int		i;
3990d39df38Smrg    intptr_t	ip;
4000d39df38Smrg    FcBool	b;
4010d39df38Smrg    void	*p;
4020d39df38Smrg} FcAlign;
4030d39df38Smrg
4042c393a42Smrgtypedef struct _FcSerializeBucket {
4052c393a42Smrg    struct _FcSerializeBucket *next;
4062c393a42Smrg    const void	*object;
4072c393a42Smrg    intptr_t	offset;
4082c393a42Smrg} FcSerializeBucket;
4092c393a42Smrg
4102c393a42Smrgtypedef struct _FcCharSetFreezer FcCharSetFreezer;
4112c393a42Smrg
4122c393a42Smrgtypedef struct _FcSerialize {
4132c393a42Smrg    intptr_t		size;
4142c393a42Smrg    FcCharSetFreezer	*cs_freezer;
4152c393a42Smrg    void		*linear;
4162c393a42Smrg    FcSerializeBucket	*buckets[FC_SERIALIZE_HASH_SIZE];
4172c393a42Smrg} FcSerialize;
418898dab68Smrg
4192c393a42Smrg/*
4202c393a42Smrg * To map adobe glyph names to unicode values, a precomputed hash
4212c393a42Smrg * table is used
4222c393a42Smrg */
4232c393a42Smrg
4242c393a42Smrgtypedef struct _FcGlyphName {
4252c393a42Smrg    FcChar32	ucs;		/* unicode value */
4262c393a42Smrg    FcChar8	name[1];	/* name extends beyond struct */
4272c393a42Smrg} FcGlyphName;
4282c393a42Smrg
4292c393a42Smrg/*
4302c393a42Smrg * To perform case-insensitive string comparisons, a table
4312c393a42Smrg * is used which holds three different kinds of folding data.
432898dab68Smrg *
4332c393a42Smrg * The first is a range of upper case values mapping to a range
4342c393a42Smrg * of their lower case equivalents.  Within each range, the offset
4352c393a42Smrg * between upper and lower case is constant.
4362c393a42Smrg *
4372c393a42Smrg * The second is a range of upper case values which are interleaved
4382c393a42Smrg * with their lower case equivalents.
439898dab68Smrg *
4402c393a42Smrg * The third is a set of raw unicode values mapping to a list
4412c393a42Smrg * of unicode values for comparison purposes.  This allows conversion
4422c393a42Smrg * of ß to "ss" so that SS, ss and ß all match.  A separate array
4432c393a42Smrg * holds the list of unicode values for each entry.
4442c393a42Smrg *
4452c393a42Smrg * These are packed into a single table.  Using a binary search,
4462c393a42Smrg * the appropriate entry can be located.
4472c393a42Smrg */
4482c393a42Smrg
4492c393a42Smrg#define FC_CASE_FOLD_RANGE	    0
4502c393a42Smrg#define FC_CASE_FOLD_EVEN_ODD	    1
4512c393a42Smrg#define FC_CASE_FOLD_FULL	    2
4522c393a42Smrg
4532c393a42Smrgtypedef struct _FcCaseFold {
4542c393a42Smrg    FcChar32	upper;
4552c393a42Smrg    FcChar16	method : 2;
4562c393a42Smrg    FcChar16	count : 14;
4572c393a42Smrg    short    	offset;	    /* lower - upper for RANGE, table id for FULL */
4582c393a42Smrg} FcCaseFold;
4592c393a42Smrg
4602c393a42Smrg#define FC_MAX_FILE_LEN	    4096
4612c393a42Smrg
4622c393a42Smrg#define FC_CACHE_MAGIC_MMAP	    0xFC02FC04
4632c393a42Smrg#define FC_CACHE_MAGIC_ALLOC	    0xFC02FC05
4640d39df38Smrg#define FC_CACHE_CONTENT_VERSION    3 /* also check FC_CACHE_VERSION */
4652c393a42Smrg
4662c393a42Smrgstruct _FcAtomic {
4672c393a42Smrg    FcChar8	*file;		/* original file name */
4682c393a42Smrg    FcChar8	*new;		/* temp file name -- write data here */
4692c393a42Smrg    FcChar8	*lck;		/* lockfile name (used for locking) */
4702c393a42Smrg    FcChar8	*tmp;		/* tmpfile name (used for locking) */
4712c393a42Smrg};
4722c393a42Smrg
4732c393a42Smrgstruct _FcBlanks {
4742c393a42Smrg    int		nblank;
4752c393a42Smrg    int		sblank;
4762c393a42Smrg    FcChar32	*blanks;
4772c393a42Smrg};
4782c393a42Smrg
4792c393a42Smrgstruct _FcConfig {
4802c393a42Smrg    /*
4812c393a42Smrg     * File names loaded from the configuration -- saved here as the
4822c393a42Smrg     * cache file must be consulted before the directories are scanned,
4832c393a42Smrg     * and those directives may occur in any order
4842c393a42Smrg     */
4852c393a42Smrg    FcStrSet	*configDirs;	    /* directories to scan for fonts */
4862c393a42Smrg    /*
4872c393a42Smrg     * Set of allowed blank chars -- used to
4882c393a42Smrg     * trim fonts of bogus glyphs
4892c393a42Smrg     */
4902c393a42Smrg    FcBlanks	*blanks;
4912c393a42Smrg    /*
4922c393a42Smrg     * List of directories containing fonts,
493898dab68Smrg     * built by recursively scanning the set
4942c393a42Smrg     * of configured directories
4952c393a42Smrg     */
4962c393a42Smrg    FcStrSet	*fontDirs;
4972c393a42Smrg    /*
4982c393a42Smrg     * List of directories containing cache files.
4992c393a42Smrg     */
5002c393a42Smrg    FcStrSet	*cacheDirs;
5012c393a42Smrg    /*
5022c393a42Smrg     * Names of all of the configuration files used
5032c393a42Smrg     * to create this configuration
5042c393a42Smrg     */
5052c393a42Smrg    FcStrSet	*configFiles;	    /* config files loaded */
5062c393a42Smrg    /*
5072c393a42Smrg     * Substitution instructions for patterns and fonts;
5082c393a42Smrg     * maxObjects is used to allocate appropriate intermediate storage
5092c393a42Smrg     * while performing a whole set of substitutions
5102c393a42Smrg     */
5112c393a42Smrg    FcSubst	*substPattern;	    /* substitutions for patterns */
5122c393a42Smrg    FcSubst	*substFont;	    /* substitutions for fonts */
5132c393a42Smrg    FcSubst	*substScan;	    /* substitutions for scanned fonts */
5142c393a42Smrg    int		maxObjects;	    /* maximum number of tests in all substs */
5152c393a42Smrg    /*
5162c393a42Smrg     * List of patterns used to control font file selection
5172c393a42Smrg     */
5182c393a42Smrg    FcStrSet	*acceptGlobs;
5192c393a42Smrg    FcStrSet	*rejectGlobs;
5202c393a42Smrg    FcFontSet	*acceptPatterns;
5212c393a42Smrg    FcFontSet	*rejectPatterns;
5222c393a42Smrg    /*
5232c393a42Smrg     * The set of fonts loaded from the listed directories; the
5242c393a42Smrg     * order within the set does not determine the font selection,
5252c393a42Smrg     * except in the case of identical matches in which case earlier fonts
5262c393a42Smrg     * match preferrentially
5272c393a42Smrg     */
5282c393a42Smrg    FcFontSet	*fonts[FcSetApplication + 1];
5292c393a42Smrg    /*
5302c393a42Smrg     * Fontconfig can periodically rescan the system configuration
5312c393a42Smrg     * and font directories.  This rescanning occurs when font
5322c393a42Smrg     * listing requests are made, but no more often than rescanInterval
5332c393a42Smrg     * seconds apart.
5342c393a42Smrg     */
5352c393a42Smrg    time_t	rescanTime;	    /* last time information was scanned */
5362c393a42Smrg    int		rescanInterval;	    /* interval between scans */
5370d39df38Smrg
5380d39df38Smrg    int		ref;                /* reference count */
5390d39df38Smrg
5400d39df38Smrg    FcExprPage *expr_pool;	    /* pool of FcExpr's */
5412c393a42Smrg};
542898dab68Smrg
5432c393a42Smrgextern FcPrivate FcConfig	*_fcConfig;
5442c393a42Smrg
5452c393a42Smrgtypedef struct _FcFileTime {
5462c393a42Smrg    time_t  time;
5472c393a42Smrg    FcBool  set;
5482c393a42Smrg} FcFileTime;
5492c393a42Smrg
5502c393a42Smrgtypedef struct _FcCharMap FcCharMap;
5512c393a42Smrg
552898dab68Smrgtypedef struct _FcRange	    FcRange;
553898dab68Smrg
554898dab68Smrgstruct _FcRange {
555898dab68Smrg    FcChar32 begin;
556898dab68Smrg    FcChar32 end;
557898dab68Smrg};
558898dab68Smrg
559898dab68Smrgtypedef struct _FcStatFS    FcStatFS;
560898dab68Smrg
561898dab68Smrgstruct _FcStatFS {
562898dab68Smrg    FcBool is_remote_fs;
563898dab68Smrg    FcBool is_mtime_broken;
564898dab68Smrg};
565898dab68Smrg
5662c393a42Smrg/* fcblanks.c */
5672c393a42Smrg
5682c393a42Smrg/* fccache.c */
5692c393a42Smrg
5702c393a42SmrgFcPrivate FcCache *
5712c393a42SmrgFcDirCacheScan (const FcChar8 *dir, FcConfig *config);
5722c393a42Smrg
5732c393a42SmrgFcPrivate FcCache *
5742c393a42SmrgFcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs);
5752c393a42Smrg
5762c393a42SmrgFcPrivate FcBool
5772c393a42SmrgFcDirCacheWrite (FcCache *cache, FcConfig *config);
578898dab68Smrg
579898dab68SmrgFcPrivate FcBool
580898dab68SmrgFcDirCacheCreateTagFile (const FcChar8 *cache_dir);
581898dab68Smrg
5822c393a42SmrgFcPrivate void
5832c393a42SmrgFcCacheObjectReference (void *object);
5842c393a42Smrg
5852c393a42SmrgFcPrivate void
5862c393a42SmrgFcCacheObjectDereference (void *object);
5872c393a42Smrg
5882c393a42SmrgFcPrivate void
5892c393a42SmrgFcCacheFini (void);
590898dab68Smrg
5912c393a42SmrgFcPrivate void
5922c393a42SmrgFcDirCacheReference (FcCache *cache, int nref);
5932c393a42Smrg
5942c393a42Smrg/* fccfg.c */
5952c393a42Smrg
596898dab68SmrgFcPrivate FcChar8 *
597898dab68SmrgFcConfigXdgCacheHome (void);
598898dab68Smrg
599898dab68SmrgFcPrivate FcChar8 *
600898dab68SmrgFcConfigXdgConfigHome (void);
601898dab68Smrg
602898dab68SmrgFcPrivate FcChar8 *
603898dab68SmrgFcConfigXdgDataHome (void);
604898dab68Smrg
6050d39df38SmrgFcPrivate FcExpr *
6060d39df38SmrgFcConfigAllocExpr (FcConfig *config);
6070d39df38Smrg
6082c393a42SmrgFcPrivate FcBool
6092c393a42SmrgFcConfigAddConfigDir (FcConfig	    *config,
6102c393a42Smrg		      const FcChar8 *d);
6112c393a42Smrg
6122c393a42SmrgFcPrivate FcBool
6132c393a42SmrgFcConfigAddFontDir (FcConfig	    *config,
6142c393a42Smrg		    const FcChar8   *d);
6152c393a42Smrg
6162c393a42SmrgFcPrivate FcBool
6172c393a42SmrgFcConfigAddDir (FcConfig	*config,
6182c393a42Smrg		const FcChar8	*d);
6192c393a42Smrg
6202c393a42SmrgFcPrivate FcBool
6212c393a42SmrgFcConfigAddCacheDir (FcConfig	    *config,
6222c393a42Smrg		     const FcChar8  *d);
6232c393a42Smrg
6242c393a42SmrgFcPrivate FcBool
6252c393a42SmrgFcConfigAddConfigFile (FcConfig		*config,
6262c393a42Smrg		       const FcChar8	*f);
6272c393a42Smrg
6282c393a42SmrgFcPrivate FcBool
6292c393a42SmrgFcConfigAddBlank (FcConfig	*config,
6302c393a42Smrg		  FcChar32    	blank);
6312c393a42Smrg
6322c393a42SmrgFcPrivate FcBool
6332c393a42SmrgFcConfigAddEdit (FcConfig	*config,
6342c393a42Smrg		 FcTest		*test,
6352c393a42Smrg		 FcEdit		*edit,
6362c393a42Smrg		 FcMatchKind	kind);
6372c393a42Smrg
6382c393a42SmrgFcPrivate void
6392c393a42SmrgFcConfigSetFonts (FcConfig	*config,
6402c393a42Smrg		  FcFontSet	*fonts,
6412c393a42Smrg		  FcSetName	set);
6422c393a42Smrg
6432c393a42SmrgFcPrivate FcBool
6442c393a42SmrgFcConfigCompareValue (const FcValue *m,
6452c393a42Smrg		      FcOp	    op,
6462c393a42Smrg		      const FcValue *v);
6472c393a42Smrg
6482c393a42SmrgFcPrivate FcBool
6492c393a42SmrgFcConfigGlobAdd (FcConfig	*config,
6502c393a42Smrg		 const FcChar8	*glob,
6512c393a42Smrg		 FcBool		accept);
6522c393a42Smrg
6532c393a42SmrgFcPrivate FcBool
6542c393a42SmrgFcConfigAcceptFilename (FcConfig	*config,
6552c393a42Smrg			const FcChar8	*filename);
6562c393a42Smrg
6572c393a42SmrgFcPrivate FcBool
6582c393a42SmrgFcConfigPatternsAdd (FcConfig	*config,
6592c393a42Smrg		     FcPattern	*pattern,
6602c393a42Smrg		     FcBool	accept);
6612c393a42Smrg
6622c393a42SmrgFcPrivate FcBool
6632c393a42SmrgFcConfigAcceptFont (FcConfig	    *config,
6642c393a42Smrg		    const FcPattern *font);
6652c393a42Smrg
6662c393a42SmrgFcPrivate FcFileTime
6672c393a42SmrgFcConfigModifiedTime (FcConfig *config);
6682c393a42Smrg
6692c393a42SmrgFcPrivate FcBool
670898dab68SmrgFcConfigAddCache (FcConfig *config, FcCache *cache,
6712c393a42Smrg		  FcSetName set, FcStrSet *dirSet);
6722c393a42Smrg
6732c393a42Smrg/* fcserialize.c */
6742c393a42SmrgFcPrivate intptr_t
6752c393a42SmrgFcAlignSize (intptr_t size);
676898dab68Smrg
6772c393a42SmrgFcPrivate FcSerialize *
6782c393a42SmrgFcSerializeCreate (void);
6792c393a42Smrg
6802c393a42SmrgFcPrivate void
6812c393a42SmrgFcSerializeDestroy (FcSerialize *serialize);
6822c393a42Smrg
6832c393a42SmrgFcPrivate FcBool
6842c393a42SmrgFcSerializeAlloc (FcSerialize *serialize, const void *object, int size);
6852c393a42Smrg
6862c393a42SmrgFcPrivate intptr_t
6872c393a42SmrgFcSerializeReserve (FcSerialize *serialize, int size);
6882c393a42Smrg
6892c393a42SmrgFcPrivate intptr_t
6902c393a42SmrgFcSerializeOffset (FcSerialize *serialize, const void *object);
6912c393a42Smrg
6922c393a42SmrgFcPrivate void *
6932c393a42SmrgFcSerializePtr (FcSerialize *serialize, const void *object);
6942c393a42Smrg
6952c393a42SmrgFcPrivate FcBool
6962c393a42SmrgFcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l);
6972c393a42Smrg
6982c393a42SmrgFcPrivate FcLangSet *
6992c393a42SmrgFcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l);
7002c393a42Smrg
7012c393a42Smrg/* fccharset.c */
7022c393a42SmrgFcPrivate void
7032c393a42SmrgFcLangCharSetPopulate (void);
7042c393a42Smrg
7052c393a42SmrgFcPrivate FcCharSetFreezer *
7062c393a42SmrgFcCharSetFreezerCreate (void);
7072c393a42Smrg
7082c393a42SmrgFcPrivate const FcCharSet *
7092c393a42SmrgFcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs);
7102c393a42Smrg
7112c393a42SmrgFcPrivate void
7122c393a42SmrgFcCharSetFreezerDestroy (FcCharSetFreezer *freezer);
7132c393a42Smrg
7142c393a42SmrgFcPrivate FcBool
7152c393a42SmrgFcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c);
7162c393a42Smrg
7172c393a42SmrgFcPrivate FcCharSet *
7182c393a42SmrgFcNameParseCharSet (FcChar8 *string);
7192c393a42Smrg
7200d39df38SmrgFcPrivate FcBool
7210d39df38SmrgFcNameUnparseValue (FcStrBuf    *buf,
7220d39df38Smrg                    FcValue     *v0,
7230d39df38Smrg		    FcChar8     *escape);
7240d39df38Smrg
7250d39df38SmrgFcPrivate FcBool
7260d39df38SmrgFcNameUnparseValueList (FcStrBuf	*buf,
7270d39df38Smrg			FcValueListPtr	v,
7280d39df38Smrg			FcChar8		*escape);
7290d39df38Smrg
7302c393a42SmrgFcPrivate FcCharLeaf *
7312c393a42SmrgFcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4);
7322c393a42Smrg
7332c393a42SmrgFcPrivate FcBool
7342c393a42SmrgFcCharSetSerializeAlloc(FcSerialize *serialize, const FcCharSet *cs);
7352c393a42Smrg
7362c393a42SmrgFcPrivate FcCharSet *
7372c393a42SmrgFcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs);
7382c393a42Smrg
7392c393a42SmrgFcPrivate FcChar16 *
7402c393a42SmrgFcCharSetGetNumbers(const FcCharSet *c);
7412c393a42Smrg
7422c393a42Smrg/* fcdbg.c */
7432c393a42SmrgFcPrivate void
744898dab68SmrgFcValuePrintWithPosition (const FcValue v, FcBool show_pos_mark);
745898dab68Smrg
746898dab68SmrgFcPrivate void
747898dab68SmrgFcValueListPrintWithPosition (FcValueListPtr l, const FcValueListPtr pos);
748898dab68Smrg
749898dab68SmrgFcPrivate void
750898dab68SmrgFcValueListPrint (FcValueListPtr l);
7512c393a42Smrg
7522c393a42SmrgFcPrivate void
7532c393a42SmrgFcLangSetPrint (const FcLangSet *ls);
7542c393a42Smrg
7552c393a42SmrgFcPrivate void
7562c393a42SmrgFcOpPrint (FcOp op);
7572c393a42Smrg
7582c393a42SmrgFcPrivate void
7592c393a42SmrgFcTestPrint (const FcTest *test);
7602c393a42Smrg
7612c393a42SmrgFcPrivate void
7622c393a42SmrgFcExprPrint (const FcExpr *expr);
7632c393a42Smrg
7642c393a42SmrgFcPrivate void
7652c393a42SmrgFcEditPrint (const FcEdit *edit);
7662c393a42Smrg
7672c393a42SmrgFcPrivate void
7682c393a42SmrgFcSubstPrint (const FcSubst *subst);
7692c393a42Smrg
7702c393a42SmrgFcPrivate void
7712c393a42SmrgFcCharSetPrint (const FcCharSet *c);
772898dab68Smrg
7732c393a42Smrgextern FcPrivate int FcDebugVal;
7742c393a42Smrg
7752c393a42Smrg#define FcDebug() (FcDebugVal)
7762c393a42Smrg
7772c393a42SmrgFcPrivate void
7782c393a42SmrgFcInitDebug (void);
7792c393a42Smrg
7802c393a42Smrg/* fcdefault.c */
7812c393a42SmrgFcPrivate FcChar8 *
7822c393a42SmrgFcGetDefaultLang (void);
7832c393a42Smrg
7842c393a42Smrg/* fcdir.c */
7852c393a42Smrg
7862c393a42SmrgFcPrivate FcBool
7872c393a42SmrgFcFileScanConfig (FcFontSet	*set,
7882c393a42Smrg		  FcStrSet	*dirs,
7892c393a42Smrg		  FcBlanks	*blanks,
7902c393a42Smrg		  const FcChar8 *file,
7912c393a42Smrg		  FcConfig	*config);
7922c393a42Smrg
7932c393a42SmrgFcPrivate FcBool
7942c393a42SmrgFcDirScanConfig (FcFontSet	*set,
7952c393a42Smrg		 FcStrSet	*dirs,
7962c393a42Smrg		 FcBlanks	*blanks,
7972c393a42Smrg		 const FcChar8	*dir,
7982c393a42Smrg		 FcBool		force,
7992c393a42Smrg		 FcConfig	*config);
8002c393a42Smrg
8012c393a42Smrg/* fcfont.c */
8022c393a42SmrgFcPrivate int
8032c393a42SmrgFcFontDebug (void);
8040d39df38Smrg
8052c393a42Smrg/* fcfs.c */
8062c393a42Smrg
8072c393a42SmrgFcPrivate FcBool
8082c393a42SmrgFcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s);
8092c393a42Smrg
8102c393a42SmrgFcPrivate FcFontSet *
8112c393a42SmrgFcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s);
8122c393a42Smrg
8130d39df38Smrg/* fcxml.c */
8142c393a42SmrgFcPrivate void
8152c393a42SmrgFcTestDestroy (FcTest *test);
8162c393a42Smrg
8172c393a42SmrgFcPrivate void
8182c393a42SmrgFcEditDestroy (FcEdit *e);
8192c393a42Smrg
8202c393a42Smrg/* fcinit.c */
8212c393a42Smrg
8222c393a42SmrgFcPrivate void
8232c393a42SmrgFcMemReport (void);
8242c393a42Smrg
8252c393a42SmrgFcPrivate void
8262c393a42SmrgFcMemAlloc (int kind, int size);
8272c393a42Smrg
8282c393a42SmrgFcPrivate void
8292c393a42SmrgFcMemFree (int kind, int size);
8302c393a42Smrg
8312c393a42Smrg/* fclang.c */
8322c393a42SmrgFcPrivate FcLangSet *
833898dab68SmrgFcFreeTypeLangSet (const FcCharSet  *charset,
8342c393a42Smrg		   const FcChar8    *exclusiveLang);
8352c393a42Smrg
836898dab68SmrgFcPrivate FcChar8 *
837898dab68SmrgFcLangNormalize (const FcChar8 *lang);
838898dab68Smrg
8392c393a42SmrgFcPrivate FcLangResult
8402c393a42SmrgFcLangCompare (const FcChar8 *s1, const FcChar8 *s2);
841898dab68Smrg
8422c393a42SmrgFcPrivate FcLangSet *
8432c393a42SmrgFcLangSetPromote (const FcChar8 *lang);
8442c393a42Smrg
8452c393a42SmrgFcPrivate FcLangSet *
8462c393a42SmrgFcNameParseLangSet (const FcChar8 *string);
8472c393a42Smrg
8482c393a42SmrgFcPrivate FcBool
8492c393a42SmrgFcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls);
8502c393a42Smrg
8512c393a42SmrgFcPrivate FcChar8 *
8522c393a42SmrgFcNameUnparseEscaped (FcPattern *pat, FcBool escape);
8532c393a42Smrg
8542c393a42Smrg/* fclist.c */
8552c393a42Smrg
8562c393a42SmrgFcPrivate FcBool
8572c393a42SmrgFcListPatternMatchAny (const FcPattern *p,
8582c393a42Smrg		       const FcPattern *font);
8592c393a42Smrg
8602c393a42Smrg/* fcmatch.c */
8612c393a42Smrg
8622c393a42Smrg/* fcname.c */
8632c393a42Smrg
8642c393a42Smrg/*
8652c393a42Smrg * NOTE -- this ordering is part of the cache file format.
8662c393a42Smrg * It must also match the ordering in fcname.c
8672c393a42Smrg */
8682c393a42Smrg
8692c393a42Smrg#define FC_FAMILY_OBJECT	1
8702c393a42Smrg#define FC_FAMILYLANG_OBJECT	2
8712c393a42Smrg#define FC_STYLE_OBJECT		3
8722c393a42Smrg#define FC_STYLELANG_OBJECT	4
8732c393a42Smrg#define FC_FULLNAME_OBJECT	5
8742c393a42Smrg#define FC_FULLNAMELANG_OBJECT	6
8752c393a42Smrg#define FC_SLANT_OBJECT		7
8762c393a42Smrg#define FC_WEIGHT_OBJECT	8
8772c393a42Smrg#define FC_WIDTH_OBJECT		9
8782c393a42Smrg#define FC_SIZE_OBJECT		10
8792c393a42Smrg#define FC_ASPECT_OBJECT	11
8802c393a42Smrg#define FC_PIXEL_SIZE_OBJECT	12
8812c393a42Smrg#define FC_SPACING_OBJECT	13
8822c393a42Smrg#define FC_FOUNDRY_OBJECT	14
8832c393a42Smrg#define FC_ANTIALIAS_OBJECT	15
8842c393a42Smrg#define FC_HINT_STYLE_OBJECT	16
8852c393a42Smrg#define FC_HINTING_OBJECT	17
8862c393a42Smrg#define FC_VERTICAL_LAYOUT_OBJECT	18
8872c393a42Smrg#define FC_AUTOHINT_OBJECT	19
888898dab68Smrg#define FC_GLOBAL_ADVANCE_OBJECT	20	/* deprecated */
8892c393a42Smrg#define FC_FILE_OBJECT		21
8902c393a42Smrg#define FC_INDEX_OBJECT		22
8912c393a42Smrg#define FC_RASTERIZER_OBJECT	23
8922c393a42Smrg#define FC_OUTLINE_OBJECT	24
8932c393a42Smrg#define FC_SCALABLE_OBJECT	25
8942c393a42Smrg#define FC_DPI_OBJECT		26
8952c393a42Smrg#define FC_RGBA_OBJECT		27
8962c393a42Smrg#define FC_SCALE_OBJECT		28
8972c393a42Smrg#define FC_MINSPACE_OBJECT	29
8982c393a42Smrg#define FC_CHAR_WIDTH_OBJECT	30
8992c393a42Smrg#define FC_CHAR_HEIGHT_OBJECT	31
9002c393a42Smrg#define FC_MATRIX_OBJECT	32
9012c393a42Smrg#define FC_CHARSET_OBJECT	33
9022c393a42Smrg#define FC_LANG_OBJECT		34
9032c393a42Smrg#define FC_FONTVERSION_OBJECT	35
9042c393a42Smrg#define FC_CAPABILITY_OBJECT	36
9052c393a42Smrg#define FC_FONTFORMAT_OBJECT	37
9062c393a42Smrg#define FC_EMBOLDEN_OBJECT	38
9072c393a42Smrg#define FC_EMBEDDED_BITMAP_OBJECT	39
9082c393a42Smrg#define FC_DECORATIVE_OBJECT	40
9092c393a42Smrg#define FC_LCD_FILTER_OBJECT	41
910898dab68Smrg#define FC_NAMELANG_OBJECT	42
911898dab68Smrg#define FC_MAX_BASE_OBJECT	FC_NAMELANG_OBJECT
9122c393a42Smrg
9132c393a42SmrgFcPrivate FcBool
9142c393a42SmrgFcNameBool (const FcChar8 *v, FcBool *result);
9152c393a42Smrg
9162c393a42SmrgFcPrivate FcBool
9172c393a42SmrgFcObjectValidType (FcObject object, FcType type);
9182c393a42Smrg
9192c393a42SmrgFcPrivate FcObject
9202c393a42SmrgFcObjectFromName (const char * name);
9212c393a42Smrg
9222c393a42SmrgFcPrivate const char *
9232c393a42SmrgFcObjectName (FcObject object);
9242c393a42Smrg
9250d39df38SmrgFcPrivate FcObjectSet *
9260d39df38SmrgFcObjectGetSet (void);
9270d39df38Smrg
9282c393a42SmrgFcPrivate FcBool
9292c393a42SmrgFcObjectInit (void);
9302c393a42Smrg
9312c393a42SmrgFcPrivate void
9322c393a42SmrgFcObjectFini (void);
9332c393a42Smrg
9342c393a42Smrg#define FcObjectCompare(a, b)	((int) a - (int) b)
9352c393a42Smrg
9362c393a42Smrg/* fcpat.c */
9372c393a42Smrg
9382c393a42SmrgFcPrivate FcValue
9392c393a42SmrgFcValueCanonicalize (const FcValue *v);
9402c393a42Smrg
941898dab68SmrgFcPrivate FcValueListPtr
942898dab68SmrgFcValueListCreate (void);
943898dab68Smrg
9442c393a42SmrgFcPrivate void
9452c393a42SmrgFcValueListDestroy (FcValueListPtr l);
9462c393a42Smrg
947898dab68SmrgFcPrivate FcValueListPtr
948898dab68SmrgFcValueListPrepend (FcValueListPtr vallist,
949898dab68Smrg		    FcValue        value,
950898dab68Smrg		    FcValueBinding binding);
951898dab68Smrg
952898dab68SmrgFcPrivate FcValueListPtr
953898dab68SmrgFcValueListAppend (FcValueListPtr vallist,
954898dab68Smrg		   FcValue        value,
955898dab68Smrg		   FcValueBinding binding);
956898dab68Smrg
957898dab68SmrgFcPrivate FcValueListPtr
958898dab68SmrgFcValueListDuplicate(FcValueListPtr orig);
959898dab68Smrg
9602c393a42SmrgFcPrivate FcPatternElt *
9612c393a42SmrgFcPatternObjectFindElt (const FcPattern *p, FcObject object);
9622c393a42Smrg
9632c393a42SmrgFcPrivate FcPatternElt *
9642c393a42SmrgFcPatternObjectInsertElt (FcPattern *p, FcObject object);
9652c393a42Smrg
966898dab68SmrgFcPrivate FcBool
967898dab68SmrgFcPatternObjectListAdd (FcPattern	*p,
968898dab68Smrg			FcObject	object,
969898dab68Smrg			FcValueListPtr	list,
970898dab68Smrg			FcBool		append);
971898dab68Smrg
9722c393a42SmrgFcPrivate FcBool
9732c393a42SmrgFcPatternObjectAddWithBinding  (FcPattern	*p,
9742c393a42Smrg				FcObject	object,
9752c393a42Smrg				FcValue		value,
9762c393a42Smrg				FcValueBinding  binding,
9772c393a42Smrg				FcBool		append);
9782c393a42Smrg
9792c393a42SmrgFcPrivate FcBool
9802c393a42SmrgFcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append);
981898dab68Smrg
9822c393a42SmrgFcPrivate FcBool
9832c393a42SmrgFcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append);
984898dab68Smrg
9852c393a42SmrgFcPrivate FcResult
9862c393a42SmrgFcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v);
987898dab68Smrg
9882c393a42SmrgFcPrivate FcBool
9892c393a42SmrgFcPatternObjectDel (FcPattern *p, FcObject object);
9902c393a42Smrg
9912c393a42SmrgFcPrivate FcBool
9922c393a42SmrgFcPatternObjectRemove (FcPattern *p, FcObject object, int id);
9932c393a42Smrg
9942c393a42SmrgFcPrivate FcBool
9952c393a42SmrgFcPatternObjectAddInteger (FcPattern *p, FcObject object, int i);
9962c393a42Smrg
9972c393a42SmrgFcPrivate FcBool
9982c393a42SmrgFcPatternObjectAddDouble (FcPattern *p, FcObject object, double d);
9992c393a42Smrg
10002c393a42SmrgFcPrivate FcBool
10012c393a42SmrgFcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s);
10022c393a42Smrg
10032c393a42SmrgFcPrivate FcBool
10042c393a42SmrgFcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s);
10052c393a42Smrg
10062c393a42SmrgFcPrivate FcBool
10072c393a42SmrgFcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c);
10082c393a42Smrg
10092c393a42SmrgFcPrivate FcBool
10102c393a42SmrgFcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b);
10112c393a42Smrg
10122c393a42SmrgFcPrivate FcBool
10132c393a42SmrgFcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls);
10142c393a42Smrg
10152c393a42SmrgFcPrivate FcResult
10162c393a42SmrgFcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i);
10172c393a42Smrg
10182c393a42SmrgFcPrivate FcResult
10192c393a42SmrgFcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d);
10202c393a42Smrg
10212c393a42SmrgFcPrivate FcResult
10222c393a42SmrgFcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 ** s);
10232c393a42Smrg
10242c393a42SmrgFcPrivate FcResult
10252c393a42SmrgFcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s);
10262c393a42Smrg
10272c393a42SmrgFcPrivate FcResult
10282c393a42SmrgFcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c);
10292c393a42Smrg
10302c393a42SmrgFcPrivate FcResult
10312c393a42SmrgFcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b);
10322c393a42Smrg
10332c393a42SmrgFcPrivate FcResult
10342c393a42SmrgFcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls);
10352c393a42Smrg
10362c393a42SmrgFcPrivate FcBool
10372c393a42SmrgFcPatternAppend (FcPattern *p, FcPattern *s);
10382c393a42Smrg
10392c393a42SmrgFcPrivate const FcChar8 *
1040898dab68SmrgFcSharedStr (const FcChar8 *name);
1041898dab68Smrg
1042898dab68SmrgFcPrivate FcBool
1043898dab68SmrgFcSharedStrFree (const FcChar8 *name);
10442c393a42Smrg
10452c393a42SmrgFcPrivate FcChar32
10462c393a42SmrgFcStringHash (const FcChar8 *s);
10472c393a42Smrg
10482c393a42SmrgFcPrivate FcBool
10492c393a42SmrgFcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat);
10502c393a42Smrg
10512c393a42SmrgFcPrivate FcPattern *
10522c393a42SmrgFcPatternSerialize (FcSerialize *serialize, const FcPattern *pat);
10532c393a42Smrg
10542c393a42SmrgFcPrivate FcBool
10552c393a42SmrgFcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat);
10562c393a42Smrg
10572c393a42SmrgFcPrivate FcValueList *
10582c393a42SmrgFcValueListSerialize (FcSerialize *serialize, const FcValueList *pat);
10592c393a42Smrg
10602c393a42Smrg/* fcrender.c */
10612c393a42Smrg
10622c393a42Smrg/* fcmatrix.c */
10632c393a42Smrg
10642c393a42Smrgextern FcPrivate const FcMatrix    FcIdentityMatrix;
10652c393a42Smrg
10662c393a42SmrgFcPrivate void
10672c393a42SmrgFcMatrixFree (FcMatrix *mat);
10682c393a42Smrg
1069898dab68Smrg/* fcstat.c */
1070898dab68Smrg
1071898dab68SmrgFcPrivate int
1072898dab68SmrgFcStat (const FcChar8 *file, struct stat *statb);
1073898dab68Smrg
1074898dab68SmrgFcPrivate int
1075898dab68SmrgFcStatChecksum (const FcChar8 *file, struct stat *statb);
1076898dab68Smrg
1077898dab68SmrgFcPrivate FcBool
1078898dab68SmrgFcIsFsMmapSafe (int fd);
1079898dab68Smrg
1080898dab68SmrgFcPrivate FcBool
1081898dab68SmrgFcIsFsMtimeBroken (const FcChar8 *dir);
1082898dab68Smrg
10832c393a42Smrg/* fcstr.c */
1084898dab68SmrgFcPrivate FcBool
1085898dab68SmrgFcStrSetAddLangs (FcStrSet *strs, const char *languages);
1086898dab68Smrg
10872c393a42SmrgFcPrivate void
10882c393a42SmrgFcStrSetSort (FcStrSet * set);
10892c393a42Smrg
10902c393a42SmrgFcPrivate void
10912c393a42SmrgFcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size);
10922c393a42Smrg
10932c393a42SmrgFcPrivate void
10942c393a42SmrgFcStrBufDestroy (FcStrBuf *buf);
10952c393a42Smrg
10962c393a42SmrgFcPrivate FcChar8 *
10972c393a42SmrgFcStrBufDone (FcStrBuf *buf);
10982c393a42Smrg
10990d39df38SmrgFcPrivate FcChar8 *
11000d39df38SmrgFcStrBufDoneStatic (FcStrBuf *buf);
11010d39df38Smrg
11022c393a42SmrgFcPrivate FcBool
11032c393a42SmrgFcStrBufChar (FcStrBuf *buf, FcChar8 c);
11042c393a42Smrg
11052c393a42SmrgFcPrivate FcBool
11062c393a42SmrgFcStrBufString (FcStrBuf *buf, const FcChar8 *s);
11072c393a42Smrg
11082c393a42SmrgFcPrivate FcBool
11092c393a42SmrgFcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len);
11102c393a42Smrg
11112c393a42SmrgFcPrivate int
11122c393a42SmrgFcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
11132c393a42Smrg
1114898dab68SmrgFcPrivate FcBool
1115898dab68SmrgFcStrRegexCmp (const FcChar8 *s, const FcChar8 *regex);
1116898dab68Smrg
1117898dab68SmrgFcPrivate FcBool
1118898dab68SmrgFcStrRegexCmpIgnoreCase (const FcChar8 *s, const FcChar8 *regex);
1119898dab68Smrg
11202c393a42SmrgFcPrivate const FcChar8 *
11212c393a42SmrgFcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
11222c393a42Smrg
11232c393a42SmrgFcPrivate const FcChar8 *
11242c393a42SmrgFcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
11252c393a42Smrg
11262c393a42SmrgFcPrivate const FcChar8 *
11272c393a42SmrgFcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2);
11282c393a42Smrg
11292c393a42SmrgFcPrivate FcBool
11302c393a42SmrgFcStrUsesHome (const FcChar8 *s);
11312c393a42Smrg
11322c393a42SmrgFcPrivate FcChar8 *
11332c393a42SmrgFcStrLastSlash (const FcChar8  *path);
11342c393a42Smrg
11352c393a42SmrgFcPrivate FcChar32
11362c393a42SmrgFcStrHashIgnoreCase (const FcChar8 *s);
11372c393a42Smrg
11382c393a42SmrgFcPrivate FcChar8 *
11392c393a42SmrgFcStrCanonFilename (const FcChar8 *s);
11402c393a42Smrg
11412c393a42SmrgFcPrivate FcBool
11422c393a42SmrgFcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str);
11432c393a42Smrg
11442c393a42SmrgFcPrivate FcChar8 *
11452c393a42SmrgFcStrSerialize (FcSerialize *serialize, const FcChar8 *str);
11462c393a42Smrg
11472c393a42Smrg#endif /* _FC_INT_H_ */
1148