fcint.h revision 5d887b24
12c393a42Smrg/*
22c393a42Smrg * $RCSId: xc/lib/fontconfig/src/fcint.h,v 1.27 2002/08/31 22:17:32 keithp Exp $
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
102c393a42Smrg * documentation, and that the name of Keith Packard not be used in
112c393a42Smrg * advertising or publicity pertaining to distribution of the software without
122c393a42Smrg * specific, written prior permission.  Keith Packard makes no
132c393a42Smrg * representations about the suitability of this software for any purpose.  It
142c393a42Smrg * is provided "as is" without express or implied warranty.
152c393a42Smrg *
162c393a42Smrg * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
172c393a42Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
182c393a42Smrg * EVENT SHALL KEITH PACKARD 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
732c393a42Smrg#define FC_SEARCH_PATH_SEPARATOR ';'
742c393a42Smrg#else
752c393a42Smrg#define FC_SEARCH_PATH_SEPARATOR ':'
762c393a42Smrg#endif
772c393a42Smrg
782c393a42Smrg#define FC_DBG_MATCH	1
792c393a42Smrg#define FC_DBG_MATCHV	2
802c393a42Smrg#define FC_DBG_EDIT	4
812c393a42Smrg#define FC_DBG_FONTSET	8
822c393a42Smrg#define FC_DBG_CACHE	16
832c393a42Smrg#define FC_DBG_CACHEV	32
842c393a42Smrg#define FC_DBG_PARSE	64
852c393a42Smrg#define FC_DBG_SCAN	128
862c393a42Smrg#define FC_DBG_SCANV	256
872c393a42Smrg#define FC_DBG_MEMORY	512
882c393a42Smrg#define FC_DBG_CONFIG	1024
892c393a42Smrg#define FC_DBG_LANGSET	2048
902c393a42Smrg#define FC_DBG_OBJTYPES	4096
912c393a42Smrg
922c393a42Smrg#define FC_MEM_CHARSET	    0
932c393a42Smrg#define FC_MEM_CHARLEAF	    1
942c393a42Smrg#define FC_MEM_FONTSET	    2
952c393a42Smrg#define FC_MEM_FONTPTR	    3
962c393a42Smrg#define FC_MEM_OBJECTSET    4
972c393a42Smrg#define FC_MEM_OBJECTPTR    5
982c393a42Smrg#define FC_MEM_MATRIX	    6
992c393a42Smrg#define FC_MEM_PATTERN	    7
1002c393a42Smrg#define FC_MEM_PATELT	    8
1012c393a42Smrg#define FC_MEM_VALLIST	    9
1022c393a42Smrg#define FC_MEM_SUBSTATE	    10
1032c393a42Smrg#define FC_MEM_STRING	    11
1042c393a42Smrg#define FC_MEM_LISTBUCK	    12
1052c393a42Smrg#define FC_MEM_STRSET	    13
1062c393a42Smrg#define FC_MEM_STRLIST	    14
1072c393a42Smrg#define FC_MEM_CONFIG	    15
1082c393a42Smrg#define FC_MEM_LANGSET	    16
1092c393a42Smrg#define FC_MEM_ATOMIC	    17
1102c393a42Smrg#define FC_MEM_BLANKS	    18
1112c393a42Smrg#define FC_MEM_CACHE	    19
1122c393a42Smrg#define FC_MEM_STRBUF	    20
1132c393a42Smrg#define FC_MEM_SUBST	    21
1142c393a42Smrg#define FC_MEM_OBJECTTYPE   22
1152c393a42Smrg#define FC_MEM_CONSTANT	    23
1162c393a42Smrg#define FC_MEM_TEST	    24
1172c393a42Smrg#define FC_MEM_EXPR	    25
1182c393a42Smrg#define FC_MEM_VSTACK	    26
1192c393a42Smrg#define FC_MEM_ATTR	    27
1202c393a42Smrg#define FC_MEM_PSTACK	    28
1212c393a42Smrg#define FC_MEM_STATICSTR    29
1222c393a42Smrg
1232c393a42Smrg#define FC_MEM_NUM	    30
1242c393a42Smrg
1252c393a42Smrg#define FC_BANK_DYNAMIC 0
1262c393a42Smrg#define FC_BANK_FIRST 1
1272c393a42Smrg#define FC_BANK_LANGS	    0xfcfcfcfc
1282c393a42Smrg
1292c393a42Smrg/* slim_internal.h */
1302c393a42Smrg#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun)
1312c393a42Smrg#define FcPrivate		__attribute__((__visibility__("hidden")))
1322c393a42Smrg#define HAVE_GNUC_ATTRIBUTE 1
1332c393a42Smrg#include "fcalias.h"
1342c393a42Smrg#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
1352c393a42Smrg#define FcPrivate		__hidden
1362c393a42Smrg#else /* not gcc >= 3.3 and not Sun Studio >= 8 */
1372c393a42Smrg#define FcPrivate
1382c393a42Smrg#endif
1392c393a42Smrg
1402c393a42Smrgtypedef enum _FcValueBinding {
1412c393a42Smrg    FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame
1422c393a42Smrg} FcValueBinding;
1432c393a42Smrg
1442c393a42Smrg/*
1452c393a42Smrg * Serialized data structures use only offsets instead of pointers
1462c393a42Smrg * A low bit of 1 indicates an offset.
1472c393a42Smrg */
1482c393a42Smrg
1492c393a42Smrg/* Is the provided pointer actually an offset? */
1502c393a42Smrg#define FcIsEncodedOffset(p)	((((intptr_t) (p)) & 1) != 0)
1512c393a42Smrg
1522c393a42Smrg/* Encode offset in a pointer of type t */
1532c393a42Smrg#define FcOffsetEncode(o,t)	((t *) ((o) | 1))
1542c393a42Smrg
1552c393a42Smrg/* Decode a pointer into an offset */
1562c393a42Smrg#define FcOffsetDecode(p)	(((intptr_t) (p)) & ~1)
1572c393a42Smrg
1582c393a42Smrg/* Compute pointer offset */
1592c393a42Smrg#define FcPtrToOffset(b,p)	((intptr_t) (p) - (intptr_t) (b))
1602c393a42Smrg
1612c393a42Smrg/* Given base address, offset and type, return a pointer */
1622c393a42Smrg#define FcOffsetToPtr(b,o,t)	((t *) ((intptr_t) (b) + (o)))
1632c393a42Smrg
1642c393a42Smrg/* Given base address, encoded offset and type, return a pointer */
1652c393a42Smrg#define FcEncodedOffsetToPtr(b,p,t) FcOffsetToPtr(b,FcOffsetDecode(p),t)
1662c393a42Smrg
1672c393a42Smrg/* Given base address, pointer and type, return an encoded offset */
1682c393a42Smrg#define FcPtrToEncodedOffset(b,p,t) FcOffsetEncode(FcPtrToOffset(b,p),t)
1692c393a42Smrg
1702c393a42Smrg/* Given a structure, offset member and type, return pointer */
1712c393a42Smrg#define FcOffsetMember(s,m,t)	    FcOffsetToPtr(s,(s)->m,t)
1722c393a42Smrg
1732c393a42Smrg/* Given a structure, encoded offset member and type, return pointer to member */
1742c393a42Smrg#define FcEncodedOffsetMember(s,m,t) FcOffsetToPtr(s,FcOffsetDecode((s)->m), t)
1752c393a42Smrg
1762c393a42Smrg/* Given a structure, member and type, convert the member to a pointer */
1772c393a42Smrg#define FcPointerMember(s,m,t)	(FcIsEncodedOffset((s)->m) ? \
1782c393a42Smrg				 FcEncodedOffsetMember (s,m,t) : \
1792c393a42Smrg				 (s)->m)
1802c393a42Smrg
1812c393a42Smrg/*
1822c393a42Smrg * Serialized values may hold strings, charsets and langsets as pointers,
1832c393a42Smrg * unfortunately FcValue is an exposed type so we can't just always use
1842c393a42Smrg * offsets
1852c393a42Smrg */
1862c393a42Smrg#define FcValueString(v)	FcPointerMember(v,u.s,FcChar8)
1872c393a42Smrg#define FcValueCharSet(v)	FcPointerMember(v,u.c,const FcCharSet)
1882c393a42Smrg#define FcValueLangSet(v)	FcPointerMember(v,u.l,const FcLangSet)
1892c393a42Smrg
1902c393a42Smrgtypedef struct _FcValueList *FcValueListPtr;
1912c393a42Smrg
1922c393a42Smrgtypedef struct _FcValueList {
1932c393a42Smrg    struct _FcValueList	*next;
1942c393a42Smrg    FcValue		value;
1952c393a42Smrg    FcValueBinding	binding;
1962c393a42Smrg} FcValueList;
1972c393a42Smrg
1982c393a42Smrg#define FcValueListNext(vl)	FcPointerMember(vl,next,FcValueList)
1992c393a42Smrg
2002c393a42Smrgtypedef int FcObject;
2012c393a42Smrg
2022c393a42Smrgtypedef struct _FcPatternElt *FcPatternEltPtr;
2032c393a42Smrg
2042c393a42Smrg/*
2052c393a42Smrg * Pattern elts are stuck in a structure connected to the pattern,
2062c393a42Smrg * so they get moved around when the pattern is resized. Hence, the
2072c393a42Smrg * values field must be a pointer/offset instead of just an offset
2082c393a42Smrg */
2092c393a42Smrgtypedef struct _FcPatternElt {
2102c393a42Smrg    FcObject		object;
2112c393a42Smrg    FcValueList		*values;
2122c393a42Smrg} FcPatternElt;
2132c393a42Smrg
2142c393a42Smrg#define FcPatternEltValues(pe)	FcPointerMember(pe,values,FcValueList)
2152c393a42Smrg
2162c393a42Smrgstruct _FcPattern {
2172c393a42Smrg    int		    num;
2182c393a42Smrg    int		    size;
2192c393a42Smrg    intptr_t	    elts_offset;
2202c393a42Smrg    int		    ref;
2212c393a42Smrg};
2222c393a42Smrg
2232c393a42Smrg#define FcPatternElts(p)	FcOffsetMember(p,elts_offset,FcPatternElt)
2242c393a42Smrg
2252c393a42Smrg#define FcFontSetFonts(fs)	FcPointerMember(fs,fonts,FcPattern *)
2262c393a42Smrg
2272c393a42Smrg#define FcFontSetFont(fs,i)	(FcIsEncodedOffset((fs)->fonts) ? \
2282c393a42Smrg				 FcEncodedOffsetToPtr(fs, \
2292c393a42Smrg						      FcFontSetFonts(fs)[i], \
2302c393a42Smrg						      FcPattern) : \
2312c393a42Smrg				 fs->fonts[i])
2322c393a42Smrg
2332c393a42Smrgtypedef enum _FcOp {
2342c393a42Smrg    FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpBool, FcOpCharSet,
2352c393a42Smrg    FcOpNil,
2362c393a42Smrg    FcOpField, FcOpConst,
2372c393a42Smrg    FcOpAssign, FcOpAssignReplace,
2382c393a42Smrg    FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast,
2392c393a42Smrg    FcOpQuest,
2402c393a42Smrg    FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual,
2412c393a42Smrg    FcOpContains, FcOpListing, FcOpNotContains,
2422c393a42Smrg    FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual,
2432c393a42Smrg    FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide,
2442c393a42Smrg    FcOpNot, FcOpComma, FcOpFloor, FcOpCeil, FcOpRound, FcOpTrunc,
2452c393a42Smrg    FcOpInvalid
2462c393a42Smrg} FcOp;
2472c393a42Smrg
2482c393a42Smrgtypedef struct _FcExpr {
2492c393a42Smrg    FcOp   op;
2502c393a42Smrg    union {
2512c393a42Smrg	int	    ival;
2522c393a42Smrg	double	    dval;
2532c393a42Smrg	FcChar8	    *sval;
2542c393a42Smrg	FcMatrix    *mval;
2552c393a42Smrg	FcBool	    bval;
2562c393a42Smrg	FcCharSet   *cval;
2572c393a42Smrg	FcObject    object;
2582c393a42Smrg	FcChar8	    *constant;
2592c393a42Smrg	struct {
2602c393a42Smrg	    struct _FcExpr *left, *right;
2612c393a42Smrg	} tree;
2622c393a42Smrg    } u;
2632c393a42Smrg} FcExpr;
2642c393a42Smrg
2652c393a42Smrgtypedef enum _FcQual {
2662c393a42Smrg    FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst
2672c393a42Smrg} FcQual;
2682c393a42Smrg
2692c393a42Smrg#define FcMatchDefault	((FcMatchKind) -1)
2702c393a42Smrg
2712c393a42Smrgtypedef struct _FcTest {
2722c393a42Smrg    struct _FcTest	*next;
2732c393a42Smrg    FcMatchKind		kind;
2742c393a42Smrg    FcQual		qual;
2752c393a42Smrg    FcObject		object;
2762c393a42Smrg    FcOp		op;
2772c393a42Smrg    FcExpr		*expr;
2782c393a42Smrg} FcTest;
2792c393a42Smrg
2802c393a42Smrgtypedef struct _FcEdit {
2812c393a42Smrg    struct _FcEdit *next;
2822c393a42Smrg    FcObject	    object;
2832c393a42Smrg    FcOp	    op;
2842c393a42Smrg    FcExpr	    *expr;
2852c393a42Smrg    FcValueBinding  binding;
2862c393a42Smrg} FcEdit;
2872c393a42Smrg
2882c393a42Smrgtypedef struct _FcSubst {
2892c393a42Smrg    struct _FcSubst	*next;
2902c393a42Smrg    FcTest		*test;
2912c393a42Smrg    FcEdit		*edit;
2922c393a42Smrg} FcSubst;
2932c393a42Smrg
2942c393a42Smrgtypedef struct _FcCharLeaf {
2952c393a42Smrg    FcChar32	map[256/32];
2962c393a42Smrg} FcCharLeaf;
2972c393a42Smrg
2982c393a42Smrg#define FC_REF_CONSTANT	    -1
2992c393a42Smrg
3002c393a42Smrgstruct _FcCharSet {
3012c393a42Smrg    int		    ref;	/* reference count */
3022c393a42Smrg    int		    num;	/* size of leaves and numbers arrays */
3032c393a42Smrg    intptr_t	    leaves_offset;
3042c393a42Smrg    intptr_t	    numbers_offset;
3052c393a42Smrg};
3062c393a42Smrg
3072c393a42Smrg#define FcCharSetLeaves(c)	FcOffsetMember(c,leaves_offset,intptr_t)
3082c393a42Smrg#define FcCharSetLeaf(c,i)	(FcOffsetToPtr(FcCharSetLeaves(c), \
3092c393a42Smrg					       FcCharSetLeaves(c)[i], \
3102c393a42Smrg					       FcCharLeaf))
3112c393a42Smrg#define FcCharSetNumbers(c)	FcOffsetMember(c,numbers_offset,FcChar16)
3122c393a42Smrg
3132c393a42Smrgstruct _FcStrSet {
3142c393a42Smrg    int		    ref;	/* reference count */
3152c393a42Smrg    int		    num;
3162c393a42Smrg    int		    size;
3172c393a42Smrg    FcChar8	    **strs;
3182c393a42Smrg};
3192c393a42Smrg
3202c393a42Smrgstruct _FcStrList {
3212c393a42Smrg    FcStrSet	    *set;
3222c393a42Smrg    int		    n;
3232c393a42Smrg};
3242c393a42Smrg
3252c393a42Smrgtypedef struct _FcStrBuf {
3262c393a42Smrg    FcChar8 *buf;
3272c393a42Smrg    FcBool  allocated;
3282c393a42Smrg    FcBool  failed;
3292c393a42Smrg    int	    len;
3302c393a42Smrg    int	    size;
3312c393a42Smrg} FcStrBuf;
3322c393a42Smrg
3332c393a42Smrgstruct _FcCache {
3342c393a42Smrg    int		magic;              /* FC_CACHE_MAGIC_MMAP or FC_CACHE_ALLOC */
3352c393a42Smrg    int		version;	    /* FC_CACHE_CONTENT_VERSION */
3362c393a42Smrg    intptr_t	size;		    /* size of file */
3372c393a42Smrg    intptr_t	dir;		    /* offset to dir name */
3382c393a42Smrg    intptr_t	dirs;		    /* offset to subdirs */
3392c393a42Smrg    int		dirs_count;	    /* number of subdir strings */
3402c393a42Smrg    intptr_t	set;		    /* offset to font set */
3412c393a42Smrg    int		mtime;		    /* low bits of directory mtime */
3422c393a42Smrg};
3432c393a42Smrg
3442c393a42Smrg#undef FcCacheDir
3452c393a42Smrg#undef FcCacheSubdir
3462c393a42Smrg#define FcCacheDir(c)	FcOffsetMember(c,dir,FcChar8)
3472c393a42Smrg#define FcCacheDirs(c)	FcOffsetMember(c,dirs,intptr_t)
3482c393a42Smrg#define FcCacheSet(c)	FcOffsetMember(c,set,FcFontSet)
3492c393a42Smrg#define FcCacheSubdir(c,i)  FcOffsetToPtr (FcCacheDirs(c),\
3502c393a42Smrg					   FcCacheDirs(c)[i], \
3512c393a42Smrg					   FcChar8)
3522c393a42Smrg
3532c393a42Smrg/*
3542c393a42Smrg * Used while constructing a directory cache object
3552c393a42Smrg */
3562c393a42Smrg
3572c393a42Smrg#define FC_SERIALIZE_HASH_SIZE	8191
3582c393a42Smrg
3592c393a42Smrgtypedef struct _FcSerializeBucket {
3602c393a42Smrg    struct _FcSerializeBucket *next;
3612c393a42Smrg    const void	*object;
3622c393a42Smrg    intptr_t	offset;
3632c393a42Smrg} FcSerializeBucket;
3642c393a42Smrg
3652c393a42Smrgtypedef struct _FcCharSetFreezer FcCharSetFreezer;
3662c393a42Smrg
3672c393a42Smrgtypedef struct _FcSerialize {
3682c393a42Smrg    intptr_t		size;
3692c393a42Smrg    FcCharSetFreezer	*cs_freezer;
3702c393a42Smrg    void		*linear;
3712c393a42Smrg    FcSerializeBucket	*buckets[FC_SERIALIZE_HASH_SIZE];
3722c393a42Smrg} FcSerialize;
3732c393a42Smrg
3742c393a42Smrg/*
3752c393a42Smrg * To map adobe glyph names to unicode values, a precomputed hash
3762c393a42Smrg * table is used
3772c393a42Smrg */
3782c393a42Smrg
3792c393a42Smrgtypedef struct _FcGlyphName {
3802c393a42Smrg    FcChar32	ucs;		/* unicode value */
3812c393a42Smrg    FcChar8	name[1];	/* name extends beyond struct */
3822c393a42Smrg} FcGlyphName;
3832c393a42Smrg
3842c393a42Smrg/*
3852c393a42Smrg * To perform case-insensitive string comparisons, a table
3862c393a42Smrg * is used which holds three different kinds of folding data.
3872c393a42Smrg *
3882c393a42Smrg * The first is a range of upper case values mapping to a range
3892c393a42Smrg * of their lower case equivalents.  Within each range, the offset
3902c393a42Smrg * between upper and lower case is constant.
3912c393a42Smrg *
3922c393a42Smrg * The second is a range of upper case values which are interleaved
3932c393a42Smrg * with their lower case equivalents.
3942c393a42Smrg *
3952c393a42Smrg * The third is a set of raw unicode values mapping to a list
3962c393a42Smrg * of unicode values for comparison purposes.  This allows conversion
3972c393a42Smrg * of ß to "ss" so that SS, ss and ß all match.  A separate array
3982c393a42Smrg * holds the list of unicode values for each entry.
3992c393a42Smrg *
4002c393a42Smrg * These are packed into a single table.  Using a binary search,
4012c393a42Smrg * the appropriate entry can be located.
4022c393a42Smrg */
4032c393a42Smrg
4042c393a42Smrg#define FC_CASE_FOLD_RANGE	    0
4052c393a42Smrg#define FC_CASE_FOLD_EVEN_ODD	    1
4062c393a42Smrg#define FC_CASE_FOLD_FULL	    2
4072c393a42Smrg
4082c393a42Smrgtypedef struct _FcCaseFold {
4092c393a42Smrg    FcChar32	upper;
4102c393a42Smrg    FcChar16	method : 2;
4112c393a42Smrg    FcChar16	count : 14;
4122c393a42Smrg    short    	offset;	    /* lower - upper for RANGE, table id for FULL */
4132c393a42Smrg} FcCaseFold;
4142c393a42Smrg
4152c393a42Smrg#define FC_MAX_FILE_LEN	    4096
4162c393a42Smrg
4172c393a42Smrg/* XXX remove these when we're ready */
4182c393a42Smrg
4192c393a42Smrg#define fc_value_string(v)	FcValueString(v)
4202c393a42Smrg#define fc_value_charset(v)	FcValueCharSet(v)
4212c393a42Smrg#define fc_value_langset(v)	FcValueLangSet(v)
4222c393a42Smrg#define fc_storage_type(v)	((v)->type)
4232c393a42Smrg
4242c393a42Smrg#define fc_alignof(type) offsetof (struct { char c; type member; }, member)
4252c393a42Smrg
4262c393a42Smrg#define FC_CACHE_MAGIC_MMAP	    0xFC02FC04
4272c393a42Smrg#define FC_CACHE_MAGIC_ALLOC	    0xFC02FC05
4282c393a42Smrg#define FC_CACHE_CONTENT_VERSION    2
4292c393a42Smrg
4302c393a42Smrgstruct _FcAtomic {
4312c393a42Smrg    FcChar8	*file;		/* original file name */
4322c393a42Smrg    FcChar8	*new;		/* temp file name -- write data here */
4332c393a42Smrg    FcChar8	*lck;		/* lockfile name (used for locking) */
4342c393a42Smrg    FcChar8	*tmp;		/* tmpfile name (used for locking) */
4352c393a42Smrg};
4362c393a42Smrg
4372c393a42Smrgstruct _FcBlanks {
4382c393a42Smrg    int		nblank;
4392c393a42Smrg    int		sblank;
4402c393a42Smrg    FcChar32	*blanks;
4412c393a42Smrg};
4422c393a42Smrg
4432c393a42Smrgstruct _FcConfig {
4442c393a42Smrg    /*
4452c393a42Smrg     * File names loaded from the configuration -- saved here as the
4462c393a42Smrg     * cache file must be consulted before the directories are scanned,
4472c393a42Smrg     * and those directives may occur in any order
4482c393a42Smrg     */
4492c393a42Smrg    FcStrSet	*configDirs;	    /* directories to scan for fonts */
4502c393a42Smrg    /*
4512c393a42Smrg     * Set of allowed blank chars -- used to
4522c393a42Smrg     * trim fonts of bogus glyphs
4532c393a42Smrg     */
4542c393a42Smrg    FcBlanks	*blanks;
4552c393a42Smrg    /*
4562c393a42Smrg     * List of directories containing fonts,
4572c393a42Smrg     * built by recursively scanning the set
4582c393a42Smrg     * of configured directories
4592c393a42Smrg     */
4602c393a42Smrg    FcStrSet	*fontDirs;
4612c393a42Smrg    /*
4622c393a42Smrg     * List of directories containing cache files.
4632c393a42Smrg     */
4642c393a42Smrg    FcStrSet	*cacheDirs;
4652c393a42Smrg    /*
4662c393a42Smrg     * Names of all of the configuration files used
4672c393a42Smrg     * to create this configuration
4682c393a42Smrg     */
4692c393a42Smrg    FcStrSet	*configFiles;	    /* config files loaded */
4702c393a42Smrg    /*
4712c393a42Smrg     * Substitution instructions for patterns and fonts;
4722c393a42Smrg     * maxObjects is used to allocate appropriate intermediate storage
4732c393a42Smrg     * while performing a whole set of substitutions
4742c393a42Smrg     */
4752c393a42Smrg    FcSubst	*substPattern;	    /* substitutions for patterns */
4762c393a42Smrg    FcSubst	*substFont;	    /* substitutions for fonts */
4772c393a42Smrg    FcSubst	*substScan;	    /* substitutions for scanned fonts */
4782c393a42Smrg    int		maxObjects;	    /* maximum number of tests in all substs */
4792c393a42Smrg    /*
4802c393a42Smrg     * List of patterns used to control font file selection
4812c393a42Smrg     */
4822c393a42Smrg    FcStrSet	*acceptGlobs;
4832c393a42Smrg    FcStrSet	*rejectGlobs;
4842c393a42Smrg    FcFontSet	*acceptPatterns;
4852c393a42Smrg    FcFontSet	*rejectPatterns;
4862c393a42Smrg    /*
4872c393a42Smrg     * The set of fonts loaded from the listed directories; the
4882c393a42Smrg     * order within the set does not determine the font selection,
4892c393a42Smrg     * except in the case of identical matches in which case earlier fonts
4902c393a42Smrg     * match preferrentially
4912c393a42Smrg     */
4922c393a42Smrg    FcFontSet	*fonts[FcSetApplication + 1];
4932c393a42Smrg    /*
4942c393a42Smrg     * Fontconfig can periodically rescan the system configuration
4952c393a42Smrg     * and font directories.  This rescanning occurs when font
4962c393a42Smrg     * listing requests are made, but no more often than rescanInterval
4972c393a42Smrg     * seconds apart.
4982c393a42Smrg     */
4992c393a42Smrg    time_t	rescanTime;	    /* last time information was scanned */
5002c393a42Smrg    int		rescanInterval;	    /* interval between scans */
5012c393a42Smrg};
5022c393a42Smrg
5032c393a42Smrgextern FcPrivate FcConfig	*_fcConfig;
5042c393a42Smrg
5052c393a42Smrgtypedef struct _FcFileTime {
5062c393a42Smrg    time_t  time;
5072c393a42Smrg    FcBool  set;
5082c393a42Smrg} FcFileTime;
5092c393a42Smrg
5102c393a42Smrgtypedef struct _FcCharMap FcCharMap;
5112c393a42Smrg
5122c393a42Smrg/* watch out; assumes that v is void * -PL */
5132c393a42Smrg#define ALIGN(v,type) ((void *)(((uintptr_t)(v) + fc_alignof(type) - 1) & ~(fc_alignof(type) - 1)))
5142c393a42Smrg
5152c393a42Smrg/* fcblanks.c */
5162c393a42Smrg
5172c393a42Smrg/* fccache.c */
5182c393a42Smrg
5192c393a42SmrgFcPrivate FcCache *
5202c393a42SmrgFcDirCacheScan (const FcChar8 *dir, FcConfig *config);
5212c393a42Smrg
5222c393a42SmrgFcPrivate FcCache *
5232c393a42SmrgFcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs);
5242c393a42Smrg
5252c393a42SmrgFcPrivate FcBool
5262c393a42SmrgFcDirCacheWrite (FcCache *cache, FcConfig *config);
5272c393a42Smrg
5282c393a42SmrgFcPrivate void
5292c393a42SmrgFcCacheObjectReference (void *object);
5302c393a42Smrg
5312c393a42SmrgFcPrivate void
5322c393a42SmrgFcCacheObjectDereference (void *object);
5332c393a42Smrg
5342c393a42SmrgFcPrivate void
5352c393a42SmrgFcCacheFini (void);
5362c393a42Smrg
5372c393a42SmrgFcPrivate void
5382c393a42SmrgFcDirCacheReference (FcCache *cache, int nref);
5392c393a42Smrg
5402c393a42Smrg/* fccfg.c */
5412c393a42Smrg
5422c393a42SmrgFcPrivate FcBool
5432c393a42SmrgFcConfigAddConfigDir (FcConfig	    *config,
5442c393a42Smrg		      const FcChar8 *d);
5452c393a42Smrg
5462c393a42SmrgFcPrivate FcBool
5472c393a42SmrgFcConfigAddFontDir (FcConfig	    *config,
5482c393a42Smrg		    const FcChar8   *d);
5492c393a42Smrg
5502c393a42SmrgFcPrivate FcBool
5512c393a42SmrgFcConfigAddDir (FcConfig	*config,
5522c393a42Smrg		const FcChar8	*d);
5532c393a42Smrg
5542c393a42SmrgFcPrivate FcBool
5552c393a42SmrgFcConfigAddCacheDir (FcConfig	    *config,
5562c393a42Smrg		     const FcChar8  *d);
5572c393a42Smrg
5582c393a42SmrgFcPrivate FcBool
5592c393a42SmrgFcConfigAddConfigFile (FcConfig		*config,
5602c393a42Smrg		       const FcChar8	*f);
5612c393a42Smrg
5622c393a42SmrgFcPrivate FcBool
5632c393a42SmrgFcConfigAddBlank (FcConfig	*config,
5642c393a42Smrg		  FcChar32    	blank);
5652c393a42Smrg
5662c393a42SmrgFcPrivate FcBool
5672c393a42SmrgFcConfigAddEdit (FcConfig	*config,
5682c393a42Smrg		 FcTest		*test,
5692c393a42Smrg		 FcEdit		*edit,
5702c393a42Smrg		 FcMatchKind	kind);
5712c393a42Smrg
5722c393a42SmrgFcPrivate void
5732c393a42SmrgFcConfigSetFonts (FcConfig	*config,
5742c393a42Smrg		  FcFontSet	*fonts,
5752c393a42Smrg		  FcSetName	set);
5762c393a42Smrg
5772c393a42SmrgFcPrivate FcBool
5782c393a42SmrgFcConfigCompareValue (const FcValue *m,
5792c393a42Smrg		      FcOp	    op,
5802c393a42Smrg		      const FcValue *v);
5812c393a42Smrg
5822c393a42SmrgFcPrivate FcBool
5832c393a42SmrgFcConfigGlobAdd (FcConfig	*config,
5842c393a42Smrg		 const FcChar8	*glob,
5852c393a42Smrg		 FcBool		accept);
5862c393a42Smrg
5872c393a42SmrgFcPrivate FcBool
5882c393a42SmrgFcConfigAcceptFilename (FcConfig	*config,
5892c393a42Smrg			const FcChar8	*filename);
5902c393a42Smrg
5912c393a42SmrgFcPrivate FcBool
5922c393a42SmrgFcConfigPatternsAdd (FcConfig	*config,
5932c393a42Smrg		     FcPattern	*pattern,
5942c393a42Smrg		     FcBool	accept);
5952c393a42Smrg
5962c393a42SmrgFcPrivate FcBool
5972c393a42SmrgFcConfigAcceptFont (FcConfig	    *config,
5982c393a42Smrg		    const FcPattern *font);
5992c393a42Smrg
6002c393a42SmrgFcPrivate FcFileTime
6012c393a42SmrgFcConfigModifiedTime (FcConfig *config);
6022c393a42Smrg
6032c393a42SmrgFcPrivate FcBool
6042c393a42SmrgFcConfigAddCache (FcConfig *config, FcCache *cache,
6052c393a42Smrg		  FcSetName set, FcStrSet *dirSet);
6062c393a42Smrg
6072c393a42Smrg/* fcserialize.c */
6082c393a42SmrgFcPrivate intptr_t
6092c393a42SmrgFcAlignSize (intptr_t size);
6102c393a42Smrg
6112c393a42SmrgFcPrivate FcSerialize *
6122c393a42SmrgFcSerializeCreate (void);
6132c393a42Smrg
6142c393a42SmrgFcPrivate void
6152c393a42SmrgFcSerializeDestroy (FcSerialize *serialize);
6162c393a42Smrg
6172c393a42SmrgFcPrivate FcBool
6182c393a42SmrgFcSerializeAlloc (FcSerialize *serialize, const void *object, int size);
6192c393a42Smrg
6202c393a42SmrgFcPrivate intptr_t
6212c393a42SmrgFcSerializeReserve (FcSerialize *serialize, int size);
6222c393a42Smrg
6232c393a42SmrgFcPrivate intptr_t
6242c393a42SmrgFcSerializeOffset (FcSerialize *serialize, const void *object);
6252c393a42Smrg
6262c393a42SmrgFcPrivate void *
6272c393a42SmrgFcSerializePtr (FcSerialize *serialize, const void *object);
6282c393a42Smrg
6292c393a42SmrgFcPrivate FcBool
6302c393a42SmrgFcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l);
6312c393a42Smrg
6322c393a42SmrgFcPrivate FcLangSet *
6332c393a42SmrgFcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l);
6342c393a42Smrg
6352c393a42Smrg/* fccharset.c */
6362c393a42SmrgFcPrivate void
6372c393a42SmrgFcLangCharSetPopulate (void);
6382c393a42Smrg
6392c393a42SmrgFcPrivate FcCharSetFreezer *
6402c393a42SmrgFcCharSetFreezerCreate (void);
6412c393a42Smrg
6422c393a42SmrgFcPrivate const FcCharSet *
6432c393a42SmrgFcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs);
6442c393a42Smrg
6452c393a42SmrgFcPrivate void
6462c393a42SmrgFcCharSetFreezerDestroy (FcCharSetFreezer *freezer);
6472c393a42Smrg
6482c393a42SmrgFcPrivate FcBool
6492c393a42SmrgFcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c);
6502c393a42Smrg
6512c393a42SmrgFcPrivate FcCharSet *
6522c393a42SmrgFcNameParseCharSet (FcChar8 *string);
6532c393a42Smrg
6542c393a42SmrgFcPrivate FcCharLeaf *
6552c393a42SmrgFcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4);
6562c393a42Smrg
6572c393a42SmrgFcPrivate FcBool
6582c393a42SmrgFcCharSetSerializeAlloc(FcSerialize *serialize, const FcCharSet *cs);
6592c393a42Smrg
6602c393a42SmrgFcPrivate FcCharSet *
6612c393a42SmrgFcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs);
6622c393a42Smrg
6632c393a42SmrgFcPrivate FcChar16 *
6642c393a42SmrgFcCharSetGetNumbers(const FcCharSet *c);
6652c393a42Smrg
6662c393a42Smrg/* fcdbg.c */
6672c393a42SmrgFcPrivate void
6682c393a42SmrgFcValueListPrint (const FcValueListPtr l);
6692c393a42Smrg
6702c393a42SmrgFcPrivate void
6712c393a42SmrgFcLangSetPrint (const FcLangSet *ls);
6722c393a42Smrg
6732c393a42SmrgFcPrivate void
6742c393a42SmrgFcOpPrint (FcOp op);
6752c393a42Smrg
6762c393a42SmrgFcPrivate void
6772c393a42SmrgFcTestPrint (const FcTest *test);
6782c393a42Smrg
6792c393a42SmrgFcPrivate void
6802c393a42SmrgFcExprPrint (const FcExpr *expr);
6812c393a42Smrg
6822c393a42SmrgFcPrivate void
6832c393a42SmrgFcEditPrint (const FcEdit *edit);
6842c393a42Smrg
6852c393a42SmrgFcPrivate void
6862c393a42SmrgFcSubstPrint (const FcSubst *subst);
6872c393a42Smrg
6882c393a42SmrgFcPrivate void
6892c393a42SmrgFcCharSetPrint (const FcCharSet *c);
6902c393a42Smrg
6912c393a42Smrgextern FcPrivate int FcDebugVal;
6922c393a42Smrg
6932c393a42Smrg#define FcDebug() (FcDebugVal)
6942c393a42Smrg
6952c393a42SmrgFcPrivate void
6962c393a42SmrgFcInitDebug (void);
6972c393a42Smrg
6982c393a42Smrg/* fcdefault.c */
6992c393a42SmrgFcPrivate FcChar8 *
7002c393a42SmrgFcGetDefaultLang (void);
7012c393a42Smrg
7022c393a42Smrg/* fcdir.c */
7032c393a42Smrg
7042c393a42SmrgFcPrivate FcBool
7052c393a42SmrgFcFileScanConfig (FcFontSet	*set,
7062c393a42Smrg		  FcStrSet	*dirs,
7072c393a42Smrg		  FcBlanks	*blanks,
7082c393a42Smrg		  const FcChar8 *file,
7092c393a42Smrg		  FcConfig	*config);
7102c393a42Smrg
7112c393a42SmrgFcPrivate FcBool
7122c393a42SmrgFcDirScanConfig (FcFontSet	*set,
7132c393a42Smrg		 FcStrSet	*dirs,
7142c393a42Smrg		 FcBlanks	*blanks,
7152c393a42Smrg		 const FcChar8	*dir,
7162c393a42Smrg		 FcBool		force,
7172c393a42Smrg		 FcConfig	*config);
7182c393a42Smrg
7192c393a42Smrg/* fcfont.c */
7202c393a42SmrgFcPrivate int
7212c393a42SmrgFcFontDebug (void);
7222c393a42Smrg
7232c393a42Smrg/* fcfs.c */
7242c393a42Smrg
7252c393a42SmrgFcPrivate FcBool
7262c393a42SmrgFcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s);
7272c393a42Smrg
7282c393a42SmrgFcPrivate FcFontSet *
7292c393a42SmrgFcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s);
7302c393a42Smrg
7312c393a42Smrg/* fcgram.y */
7322c393a42SmrgFcPrivate int
7332c393a42SmrgFcConfigparse (void);
7342c393a42Smrg
7352c393a42SmrgFcPrivate int
7362c393a42SmrgFcConfigwrap (void);
7372c393a42Smrg
7382c393a42SmrgFcPrivate void
7392c393a42SmrgFcConfigerror (char *fmt, ...);
7402c393a42Smrg
7412c393a42SmrgFcPrivate char *
7422c393a42SmrgFcConfigSaveField (const char *field);
7432c393a42Smrg
7442c393a42SmrgFcPrivate void
7452c393a42SmrgFcTestDestroy (FcTest *test);
7462c393a42Smrg
7472c393a42SmrgFcPrivate FcExpr *
7482c393a42SmrgFcExprCreateInteger (int i);
7492c393a42Smrg
7502c393a42SmrgFcPrivate FcExpr *
7512c393a42SmrgFcExprCreateDouble (double d);
7522c393a42Smrg
7532c393a42SmrgFcPrivate FcExpr *
7542c393a42SmrgFcExprCreateString (const FcChar8 *s);
7552c393a42Smrg
7562c393a42SmrgFcPrivate FcExpr *
7572c393a42SmrgFcExprCreateMatrix (const FcMatrix *m);
7582c393a42Smrg
7592c393a42SmrgFcPrivate FcExpr *
7602c393a42SmrgFcExprCreateBool (FcBool b);
7612c393a42Smrg
7622c393a42SmrgFcPrivate FcExpr *
7632c393a42SmrgFcExprCreateNil (void);
7642c393a42Smrg
7652c393a42SmrgFcPrivate FcExpr *
7662c393a42SmrgFcExprCreateField (const char *field);
7672c393a42Smrg
7682c393a42SmrgFcPrivate FcExpr *
7692c393a42SmrgFcExprCreateConst (const FcChar8 *constant);
7702c393a42Smrg
7712c393a42SmrgFcPrivate FcExpr *
7722c393a42SmrgFcExprCreateOp (FcExpr *left, FcOp op, FcExpr *right);
7732c393a42Smrg
7742c393a42SmrgFcPrivate void
7752c393a42SmrgFcExprDestroy (FcExpr *e);
7762c393a42Smrg
7772c393a42SmrgFcPrivate void
7782c393a42SmrgFcEditDestroy (FcEdit *e);
7792c393a42Smrg
7802c393a42Smrg/* fcinit.c */
7812c393a42Smrg
7822c393a42SmrgFcPrivate void
7832c393a42SmrgFcMemReport (void);
7842c393a42Smrg
7852c393a42SmrgFcPrivate void
7862c393a42SmrgFcMemAlloc (int kind, int size);
7872c393a42Smrg
7882c393a42SmrgFcPrivate void
7892c393a42SmrgFcMemFree (int kind, int size);
7902c393a42Smrg
7912c393a42Smrg/* fclang.c */
7922c393a42SmrgFcPrivate FcLangSet *
7932c393a42SmrgFcFreeTypeLangSet (const FcCharSet  *charset,
7942c393a42Smrg		   const FcChar8    *exclusiveLang);
7952c393a42Smrg
7962c393a42SmrgFcPrivate FcLangResult
7972c393a42SmrgFcLangCompare (const FcChar8 *s1, const FcChar8 *s2);
7982c393a42Smrg
7992c393a42SmrgFcPrivate FcLangSet *
8002c393a42SmrgFcLangSetPromote (const FcChar8 *lang);
8012c393a42Smrg
8022c393a42SmrgFcPrivate FcLangSet *
8032c393a42SmrgFcNameParseLangSet (const FcChar8 *string);
8042c393a42Smrg
8052c393a42SmrgFcPrivate FcBool
8062c393a42SmrgFcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls);
8072c393a42Smrg
8082c393a42SmrgFcPrivate FcChar8 *
8092c393a42SmrgFcNameUnparseEscaped (FcPattern *pat, FcBool escape);
8102c393a42Smrg
8112c393a42Smrg/* fclist.c */
8122c393a42Smrg
8132c393a42SmrgFcPrivate FcBool
8142c393a42SmrgFcListPatternMatchAny (const FcPattern *p,
8152c393a42Smrg		       const FcPattern *font);
8162c393a42Smrg
8172c393a42Smrg/* fcmatch.c */
8182c393a42Smrg
8192c393a42Smrg/* fcname.c */
8202c393a42Smrg
8212c393a42Smrg/*
8222c393a42Smrg * NOTE -- this ordering is part of the cache file format.
8232c393a42Smrg * It must also match the ordering in fcname.c
8242c393a42Smrg */
8252c393a42Smrg
8262c393a42Smrg#define FC_FAMILY_OBJECT	1
8272c393a42Smrg#define FC_FAMILYLANG_OBJECT	2
8282c393a42Smrg#define FC_STYLE_OBJECT		3
8292c393a42Smrg#define FC_STYLELANG_OBJECT	4
8302c393a42Smrg#define FC_FULLNAME_OBJECT	5
8312c393a42Smrg#define FC_FULLNAMELANG_OBJECT	6
8322c393a42Smrg#define FC_SLANT_OBJECT		7
8332c393a42Smrg#define FC_WEIGHT_OBJECT	8
8342c393a42Smrg#define FC_WIDTH_OBJECT		9
8352c393a42Smrg#define FC_SIZE_OBJECT		10
8362c393a42Smrg#define FC_ASPECT_OBJECT	11
8372c393a42Smrg#define FC_PIXEL_SIZE_OBJECT	12
8382c393a42Smrg#define FC_SPACING_OBJECT	13
8392c393a42Smrg#define FC_FOUNDRY_OBJECT	14
8402c393a42Smrg#define FC_ANTIALIAS_OBJECT	15
8412c393a42Smrg#define FC_HINT_STYLE_OBJECT	16
8422c393a42Smrg#define FC_HINTING_OBJECT	17
8432c393a42Smrg#define FC_VERTICAL_LAYOUT_OBJECT	18
8442c393a42Smrg#define FC_AUTOHINT_OBJECT	19
8452c393a42Smrg#define FC_GLOBAL_ADVANCE_OBJECT	20
8462c393a42Smrg#define FC_FILE_OBJECT		21
8472c393a42Smrg#define FC_INDEX_OBJECT		22
8482c393a42Smrg#define FC_RASTERIZER_OBJECT	23
8492c393a42Smrg#define FC_OUTLINE_OBJECT	24
8502c393a42Smrg#define FC_SCALABLE_OBJECT	25
8512c393a42Smrg#define FC_DPI_OBJECT		26
8522c393a42Smrg#define FC_RGBA_OBJECT		27
8532c393a42Smrg#define FC_SCALE_OBJECT		28
8542c393a42Smrg#define FC_MINSPACE_OBJECT	29
8552c393a42Smrg#define FC_CHAR_WIDTH_OBJECT	30
8562c393a42Smrg#define FC_CHAR_HEIGHT_OBJECT	31
8572c393a42Smrg#define FC_MATRIX_OBJECT	32
8582c393a42Smrg#define FC_CHARSET_OBJECT	33
8592c393a42Smrg#define FC_LANG_OBJECT		34
8602c393a42Smrg#define FC_FONTVERSION_OBJECT	35
8612c393a42Smrg#define FC_CAPABILITY_OBJECT	36
8622c393a42Smrg#define FC_FONTFORMAT_OBJECT	37
8632c393a42Smrg#define FC_EMBOLDEN_OBJECT	38
8642c393a42Smrg#define FC_EMBEDDED_BITMAP_OBJECT	39
8652c393a42Smrg#define FC_DECORATIVE_OBJECT	40
8662c393a42Smrg#define FC_LCD_FILTER_OBJECT	41
8672c393a42Smrg#define FC_MAX_BASE_OBJECT	FC_LCD_FILTER_OBJECT
8682c393a42Smrg
8692c393a42SmrgFcPrivate FcBool
8702c393a42SmrgFcNameBool (const FcChar8 *v, FcBool *result);
8712c393a42Smrg
8722c393a42SmrgFcPrivate FcBool
8732c393a42SmrgFcObjectValidType (FcObject object, FcType type);
8742c393a42Smrg
8752c393a42SmrgFcPrivate FcObject
8762c393a42SmrgFcObjectFromName (const char * name);
8772c393a42Smrg
8782c393a42SmrgFcPrivate const char *
8792c393a42SmrgFcObjectName (FcObject object);
8802c393a42Smrg
8812c393a42SmrgFcPrivate FcBool
8822c393a42SmrgFcObjectInit (void);
8832c393a42Smrg
8842c393a42SmrgFcPrivate void
8852c393a42SmrgFcObjectFini (void);
8862c393a42Smrg
8872c393a42Smrg#define FcObjectCompare(a, b)	((int) a - (int) b)
8882c393a42Smrg
8892c393a42Smrg/* fcpat.c */
8902c393a42Smrg
8912c393a42SmrgFcPrivate FcValue
8922c393a42SmrgFcValueCanonicalize (const FcValue *v);
8932c393a42Smrg
8942c393a42SmrgFcPrivate void
8952c393a42SmrgFcValueListDestroy (FcValueListPtr l);
8962c393a42Smrg
8972c393a42SmrgFcPrivate FcPatternElt *
8982c393a42SmrgFcPatternObjectFindElt (const FcPattern *p, FcObject object);
8992c393a42Smrg
9002c393a42SmrgFcPrivate FcPatternElt *
9012c393a42SmrgFcPatternObjectInsertElt (FcPattern *p, FcObject object);
9022c393a42Smrg
9032c393a42SmrgFcPrivate FcBool
9042c393a42SmrgFcPatternObjectAddWithBinding  (FcPattern	*p,
9052c393a42Smrg				FcObject	object,
9062c393a42Smrg				FcValue		value,
9072c393a42Smrg				FcValueBinding  binding,
9082c393a42Smrg				FcBool		append);
9092c393a42Smrg
9102c393a42SmrgFcPrivate FcBool
9112c393a42SmrgFcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append);
9122c393a42Smrg
9132c393a42SmrgFcPrivate FcBool
9142c393a42SmrgFcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append);
9152c393a42Smrg
9162c393a42SmrgFcPrivate FcResult
9172c393a42SmrgFcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v);
9182c393a42Smrg
9192c393a42SmrgFcPrivate FcBool
9202c393a42SmrgFcPatternObjectDel (FcPattern *p, FcObject object);
9212c393a42Smrg
9222c393a42SmrgFcPrivate FcBool
9232c393a42SmrgFcPatternObjectRemove (FcPattern *p, FcObject object, int id);
9242c393a42Smrg
9252c393a42SmrgFcPrivate FcBool
9262c393a42SmrgFcPatternObjectAddInteger (FcPattern *p, FcObject object, int i);
9272c393a42Smrg
9282c393a42SmrgFcPrivate FcBool
9292c393a42SmrgFcPatternObjectAddDouble (FcPattern *p, FcObject object, double d);
9302c393a42Smrg
9312c393a42SmrgFcPrivate FcBool
9322c393a42SmrgFcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s);
9332c393a42Smrg
9342c393a42SmrgFcPrivate FcBool
9352c393a42SmrgFcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s);
9362c393a42Smrg
9372c393a42SmrgFcPrivate FcBool
9382c393a42SmrgFcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c);
9392c393a42Smrg
9402c393a42SmrgFcPrivate FcBool
9412c393a42SmrgFcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b);
9422c393a42Smrg
9432c393a42SmrgFcPrivate FcBool
9442c393a42SmrgFcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls);
9452c393a42Smrg
9462c393a42SmrgFcPrivate FcResult
9472c393a42SmrgFcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i);
9482c393a42Smrg
9492c393a42SmrgFcPrivate FcResult
9502c393a42SmrgFcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d);
9512c393a42Smrg
9522c393a42SmrgFcPrivate FcResult
9532c393a42SmrgFcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 ** s);
9542c393a42Smrg
9552c393a42SmrgFcPrivate FcResult
9562c393a42SmrgFcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s);
9572c393a42Smrg
9582c393a42SmrgFcPrivate FcResult
9592c393a42SmrgFcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c);
9602c393a42Smrg
9612c393a42SmrgFcPrivate FcResult
9622c393a42SmrgFcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b);
9632c393a42Smrg
9642c393a42SmrgFcPrivate FcResult
9652c393a42SmrgFcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls);
9662c393a42Smrg
9672c393a42SmrgFcPrivate void
9682c393a42SmrgFcPatternFini (void);
9692c393a42Smrg
9702c393a42SmrgFcPrivate FcBool
9712c393a42SmrgFcPatternAppend (FcPattern *p, FcPattern *s);
9722c393a42Smrg
9732c393a42SmrgFcPrivate const FcChar8 *
9742c393a42SmrgFcStrStaticName (const FcChar8 *name);
9752c393a42Smrg
9762c393a42SmrgFcPrivate FcChar32
9772c393a42SmrgFcStringHash (const FcChar8 *s);
9782c393a42Smrg
9792c393a42SmrgFcPrivate FcBool
9802c393a42SmrgFcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat);
9812c393a42Smrg
9822c393a42SmrgFcPrivate FcPattern *
9832c393a42SmrgFcPatternSerialize (FcSerialize *serialize, const FcPattern *pat);
9842c393a42Smrg
9852c393a42SmrgFcPrivate FcBool
9862c393a42SmrgFcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat);
9872c393a42Smrg
9882c393a42SmrgFcPrivate FcValueList *
9892c393a42SmrgFcValueListSerialize (FcSerialize *serialize, const FcValueList *pat);
9902c393a42Smrg
9912c393a42Smrg/* fcrender.c */
9922c393a42Smrg
9932c393a42Smrg/* fcmatrix.c */
9942c393a42Smrg
9952c393a42Smrgextern FcPrivate const FcMatrix    FcIdentityMatrix;
9962c393a42Smrg
9972c393a42SmrgFcPrivate void
9982c393a42SmrgFcMatrixFree (FcMatrix *mat);
9992c393a42Smrg
10002c393a42Smrg/* fcstr.c */
10012c393a42SmrgFcPrivate void
10022c393a42SmrgFcStrSetSort (FcStrSet * set);
10032c393a42Smrg
10042c393a42SmrgFcPrivate void
10052c393a42SmrgFcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size);
10062c393a42Smrg
10072c393a42SmrgFcPrivate void
10082c393a42SmrgFcStrBufDestroy (FcStrBuf *buf);
10092c393a42Smrg
10102c393a42SmrgFcPrivate FcChar8 *
10112c393a42SmrgFcStrBufDone (FcStrBuf *buf);
10122c393a42Smrg
10132c393a42SmrgFcPrivate FcBool
10142c393a42SmrgFcStrBufChar (FcStrBuf *buf, FcChar8 c);
10152c393a42Smrg
10162c393a42SmrgFcPrivate FcBool
10172c393a42SmrgFcStrBufString (FcStrBuf *buf, const FcChar8 *s);
10182c393a42Smrg
10192c393a42SmrgFcPrivate FcBool
10202c393a42SmrgFcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len);
10212c393a42Smrg
10222c393a42SmrgFcPrivate int
10232c393a42SmrgFcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
10242c393a42Smrg
10252c393a42SmrgFcPrivate const FcChar8 *
10262c393a42SmrgFcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
10272c393a42Smrg
10282c393a42SmrgFcPrivate const FcChar8 *
10292c393a42SmrgFcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
10302c393a42Smrg
10312c393a42SmrgFcPrivate const FcChar8 *
10322c393a42SmrgFcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2);
10332c393a42Smrg
10342c393a42SmrgFcPrivate FcBool
10352c393a42SmrgFcStrUsesHome (const FcChar8 *s);
10362c393a42Smrg
10372c393a42SmrgFcPrivate FcChar8 *
10382c393a42SmrgFcStrLastSlash (const FcChar8  *path);
10392c393a42Smrg
10402c393a42SmrgFcPrivate FcChar32
10412c393a42SmrgFcStrHashIgnoreCase (const FcChar8 *s);
10422c393a42Smrg
10432c393a42SmrgFcPrivate FcChar8 *
10442c393a42SmrgFcStrCanonFilename (const FcChar8 *s);
10452c393a42Smrg
10462c393a42SmrgFcPrivate FcBool
10472c393a42SmrgFcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str);
10482c393a42Smrg
10492c393a42SmrgFcPrivate FcChar8 *
10502c393a42SmrgFcStrSerialize (FcSerialize *serialize, const FcChar8 *str);
10512c393a42Smrg
10522c393a42Smrg#endif /* _FC_INT_H_ */
1053