Blame src/fcint.h

Packit 352660
/*
Packit 352660
 * fontconfig/src/fcint.h
Packit 352660
 *
Packit 352660
 * Copyright © 2000 Keith Packard
Packit 352660
 *
Packit 352660
 * Permission to use, copy, modify, distribute, and sell this software and its
Packit 352660
 * documentation for any purpose is hereby granted without fee, provided that
Packit 352660
 * the above copyright notice appear in all copies and that both that
Packit 352660
 * copyright notice and this permission notice appear in supporting
Packit 352660
 * documentation, and that the name of the author(s) not be used in
Packit 352660
 * advertising or publicity pertaining to distribution of the software without
Packit 352660
 * specific, written prior permission.  The authors make no
Packit 352660
 * representations about the suitability of this software for any purpose.  It
Packit 352660
 * is provided "as is" without express or implied warranty.
Packit 352660
 *
Packit 352660
 * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
Packit 352660
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
Packit 352660
 * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
Packit 352660
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
Packit 352660
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
Packit 352660
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
Packit 352660
 * PERFORMANCE OF THIS SOFTWARE.
Packit 352660
 */
Packit 352660
Packit 352660
#ifndef _FCINT_H_
Packit 352660
#define _FCINT_H_
Packit 352660
Packit 352660
#ifdef HAVE_CONFIG_H
Packit 352660
#include <config.h>
Packit 352660
#endif
Packit 352660
Packit 352660
#include "fcstdint.h"
Packit 352660
Packit 352660
#include <stdlib.h>
Packit 352660
#include <stdio.h>
Packit 352660
#include <string.h>
Packit 352660
#include <ctype.h>
Packit 352660
#include <assert.h>
Packit 352660
#include <errno.h>
Packit 352660
#include <limits.h>
Packit 352660
#include <float.h>
Packit 352660
#include <math.h>
Packit 352660
#include <unistd.h>
Packit 352660
#include <stddef.h>
Packit 352660
#include <sys/types.h>
Packit 352660
#include <sys/stat.h>
Packit 352660
#include <time.h>
Packit 352660
#include <fontconfig/fontconfig.h>
Packit 352660
#include <fontconfig/fcprivate.h>
Packit 352660
#include "fcdeprecate.h"
Packit 352660
#include "fcmutex.h"
Packit 352660
#include "fcatomic.h"
Packit 352660
Packit 352660
#ifndef FC_CONFIG_PATH
Packit 352660
#define FC_CONFIG_PATH "fonts.conf"
Packit 352660
#endif
Packit 352660
Packit 352660
#ifdef _WIN32
Packit 352660
#  include "fcwindows.h"
Packit 352660
typedef UINT (WINAPI *pfnGetSystemWindowsDirectory)(LPSTR, UINT);
Packit 352660
typedef HRESULT (WINAPI *pfnSHGetFolderPathA)(HWND, int, HANDLE, DWORD, LPSTR);
Packit 352660
extern pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory;
Packit 352660
extern pfnSHGetFolderPathA pSHGetFolderPathA;
Packit 352660
#  define FC_SEARCH_PATH_SEPARATOR ';'
Packit 352660
#  define FC_DIR_SEPARATOR         '\\'
Packit 352660
#  define FC_DIR_SEPARATOR_S       "\\"
Packit 352660
#else
Packit 352660
#  define FC_SEARCH_PATH_SEPARATOR ':'
Packit 352660
#  define FC_DIR_SEPARATOR         '/'
Packit 352660
#  define FC_DIR_SEPARATOR_S       "/"
Packit 352660
#endif
Packit 352660
Packit 352660
#ifdef PATH_MAX
Packit 352660
#define FC_PATH_MAX	PATH_MAX
Packit 352660
#else
Packit 352660
#define FC_PATH_MAX	128
Packit 352660
#endif
Packit 352660
Packit 352660
#if __GNUC__ >= 4
Packit 352660
#define FC_UNUSED	__attribute__((unused))
Packit 352660
#else
Packit 352660
#define FC_UNUSED
Packit 352660
#endif
Packit 352660
Packit 352660
#define FC_DBG_MATCH	1
Packit 352660
#define FC_DBG_MATCHV	2
Packit 352660
#define FC_DBG_EDIT	4
Packit 352660
#define FC_DBG_FONTSET	8
Packit 352660
#define FC_DBG_CACHE	16
Packit 352660
#define FC_DBG_CACHEV	32
Packit 352660
#define FC_DBG_PARSE	64
Packit 352660
#define FC_DBG_SCAN	128
Packit 352660
#define FC_DBG_SCANV	256
Packit 352660
#define FC_DBG_CONFIG	1024
Packit 352660
#define FC_DBG_LANGSET	2048
Packit 352660
#define FC_DBG_MATCH2	4096
Packit 352660
Packit 352660
#define _FC_ASSERT_STATIC1(_line, _cond) typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1] FC_UNUSED
Packit 352660
#define _FC_ASSERT_STATIC0(_line, _cond) _FC_ASSERT_STATIC1 (_line, (_cond))
Packit 352660
#define FC_ASSERT_STATIC(_cond) _FC_ASSERT_STATIC0 (__LINE__, (_cond))
Packit 352660
Packit 352660
#define FC_MIN(a,b) ((a) < (b) ? (a) : (b))
Packit 352660
#define FC_MAX(a,b) ((a) > (b) ? (a) : (b))
Packit 352660
Packit 352660
/* slim_internal.h */
Packit 352660
#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun)
Packit 352660
#define FcPrivate		__attribute__((__visibility__("hidden")))
Packit 352660
#define HAVE_GNUC_ATTRIBUTE 1
Packit 352660
#include "fcalias.h"
Packit 352660
#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
Packit 352660
#define FcPrivate		__hidden
Packit 352660
#else /* not gcc >= 3.3 and not Sun Studio >= 8 */
Packit 352660
#define FcPrivate
Packit 352660
#endif
Packit 352660
Packit 352660
/* NLS */
Packit 352660
#ifdef ENABLE_NLS
Packit 352660
#include <libintl.h>
Packit 352660
#define _(x)		(dgettext(GETTEXT_PACKAGE, x))
Packit 352660
#else
Packit 352660
#define dgettext(d, s)	(s)
Packit 352660
#define _(x)		(x)
Packit 352660
#endif
Packit 352660
Packit 352660
#define N_(x)	x
Packit 352660
Packit 352660
FC_ASSERT_STATIC (sizeof (FcRef) == sizeof (int));
Packit 352660
Packit 352660
#define FcStrdup(s) ((FcChar8 *) strdup ((const char *) (s)))
Packit 352660
#define FcFree(s) (free ((FcChar8 *) (s)))
Packit 352660
Packit 352660
/*
Packit 352660
 * Serialized data structures use only offsets instead of pointers
Packit 352660
 * A low bit of 1 indicates an offset.
Packit 352660
 */
Packit 352660
Packit 352660
/* Is the provided pointer actually an offset? */
Packit 352660
#define FcIsEncodedOffset(p)	((((intptr_t) (p)) & 1) != 0)
Packit 352660
Packit 352660
/* Encode offset in a pointer of type t */
Packit 352660
#define FcOffsetEncode(o,t)	((t *) ((o) | 1))
Packit 352660
Packit 352660
/* Decode a pointer into an offset */
Packit 352660
#define FcOffsetDecode(p)	(((intptr_t) (p)) & ~1)
Packit 352660
Packit 352660
/* Compute pointer offset */
Packit 352660
#define FcPtrToOffset(b,p)	((intptr_t) (p) - (intptr_t) (b))
Packit 352660
Packit 352660
/* Given base address, offset and type, return a pointer */
Packit 352660
#define FcOffsetToPtr(b,o,t)	((t *) ((intptr_t) (b) + (o)))
Packit 352660
Packit 352660
/* Given base address, encoded offset and type, return a pointer */
Packit 352660
#define FcEncodedOffsetToPtr(b,p,t) FcOffsetToPtr(b,FcOffsetDecode(p),t)
Packit 352660
Packit 352660
/* Given base address, pointer and type, return an encoded offset */
Packit 352660
#define FcPtrToEncodedOffset(b,p,t) FcOffsetEncode(FcPtrToOffset(b,p),t)
Packit 352660
Packit 352660
/* Given a structure, offset member and type, return pointer */
Packit 352660
#define FcOffsetMember(s,m,t)	    FcOffsetToPtr(s,(s)->m,t)
Packit 352660
Packit 352660
/* Given a structure, encoded offset member and type, return pointer to member */
Packit 352660
#define FcEncodedOffsetMember(s,m,t) FcOffsetToPtr(s,FcOffsetDecode((s)->m), t)
Packit 352660
Packit 352660
/* Given a structure, member and type, convert the member to a pointer */
Packit 352660
#define FcPointerMember(s,m,t)	(FcIsEncodedOffset((s)->m) ? \
Packit 352660
				 FcEncodedOffsetMember (s,m,t) : \
Packit 352660
				 (s)->m)
Packit 352660
Packit 352660
/*
Packit 352660
 * Serialized values may hold strings, charsets and langsets as pointers,
Packit 352660
 * unfortunately FcValue is an exposed type so we can't just always use
Packit 352660
 * offsets
Packit 352660
 */
Packit 352660
#define FcValueString(v)	FcPointerMember(v,u.s,FcChar8)
Packit 352660
#define FcValueCharSet(v)	FcPointerMember(v,u.c,const FcCharSet)
Packit 352660
#define FcValueLangSet(v)	FcPointerMember(v,u.l,const FcLangSet)
Packit 352660
#define FcValueRange(v)		FcPointerMember(v,u.r,const FcRange)
Packit 352660
Packit 352660
typedef struct _FcValueList *FcValueListPtr;
Packit 352660
Packit 352660
typedef struct _FcValueList {
Packit 352660
    struct _FcValueList	*next;
Packit 352660
    FcValue		value;
Packit 352660
    FcValueBinding	binding;
Packit 352660
} FcValueList;
Packit 352660
Packit 352660
#define FcValueListNext(vl)	FcPointerMember(vl,next,FcValueList)
Packit 352660
			
Packit 352660
typedef int FcObject;
Packit 352660
Packit 352660
/* The 1024 is to leave some room for future added internal objects, such
Packit 352660
 * that caches from newer fontconfig can still be used with older fontconfig
Packit 352660
 * without getting confused. */
Packit 352660
#define FC_EXT_OBJ_INDEX	1024
Packit 352660
#define FC_OBJ_ID(_n_)	((_n_) & (~FC_EXT_OBJ_INDEX))
Packit 352660
Packit 352660
typedef struct _FcPatternElt *FcPatternEltPtr;
Packit 352660
Packit 352660
/*
Packit 352660
 * Pattern elts are stuck in a structure connected to the pattern,
Packit 352660
 * so they get moved around when the pattern is resized. Hence, the
Packit 352660
 * values field must be a pointer/offset instead of just an offset
Packit 352660
 */
Packit 352660
typedef struct _FcPatternElt {
Packit 352660
    FcObject		object;
Packit 352660
    FcValueList		*values;
Packit 352660
} FcPatternElt;
Packit 352660
Packit 352660
#define FcPatternEltValues(pe)	FcPointerMember(pe,values,FcValueList)
Packit 352660
Packit 352660
struct _FcPattern {
Packit 352660
    int		    num;
Packit 352660
    int		    size;
Packit 352660
    intptr_t	    elts_offset;
Packit 352660
    FcRef	    ref;
Packit 352660
};
Packit 352660
Packit 352660
#define FcPatternElts(p)	FcOffsetMember(p,elts_offset,FcPatternElt)
Packit 352660
Packit 352660
#define FcFontSetFonts(fs)	FcPointerMember(fs,fonts,FcPattern *)
Packit 352660
Packit 352660
#define FcFontSetFont(fs,i)	(FcIsEncodedOffset((fs)->fonts) ? \
Packit 352660
				 FcEncodedOffsetToPtr(fs, \
Packit 352660
						      FcFontSetFonts(fs)[i], \
Packit 352660
						      FcPattern) : \
Packit 352660
				 fs->fonts[i])
Packit 352660
						
Packit 352660
typedef enum _FcOp {
Packit 352660
    FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpRange, FcOpBool, FcOpCharSet, FcOpLangSet,
Packit 352660
    FcOpNil,
Packit 352660
    FcOpField, FcOpConst,
Packit 352660
    FcOpAssign, FcOpAssignReplace,
Packit 352660
    FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast,
Packit 352660
    FcOpDelete, FcOpDeleteAll,
Packit 352660
    FcOpQuest,
Packit 352660
    FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual,
Packit 352660
    FcOpContains, FcOpListing, FcOpNotContains,
Packit 352660
    FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual,
Packit 352660
    FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide,
Packit 352660
    FcOpNot, FcOpComma, FcOpFloor, FcOpCeil, FcOpRound, FcOpTrunc,
Packit 352660
    FcOpInvalid
Packit 352660
} FcOp;
Packit 352660
Packit 352660
typedef enum _FcOpFlags {
Packit 352660
	FcOpFlagIgnoreBlanks = 1U << 0
Packit 352660
} FcOpFlags;
Packit 352660
Packit 352660
#define FC_OP_GET_OP(_x_)	((_x_) & 0xffff)
Packit 352660
#define FC_OP_GET_FLAGS(_x_)	(((_x_) & 0xffff0000) >> 16)
Packit 352660
#define FC_OP(_x_,_f_)		(FC_OP_GET_OP (_x_) | ((_f_) << 16))
Packit 352660
Packit 352660
typedef struct _FcExprMatrix {
Packit 352660
  struct _FcExpr *xx, *xy, *yx, *yy;
Packit 352660
} FcExprMatrix;
Packit 352660
Packit 352660
typedef struct _FcExprName {
Packit 352660
  FcObject	object;
Packit 352660
  FcMatchKind	kind;
Packit 352660
} FcExprName;
Packit 352660
Packit 352660
struct _FcRange {
Packit 352660
    double begin;
Packit 352660
    double end;
Packit 352660
};
Packit 352660
Packit 352660
Packit 352660
typedef struct _FcExpr {
Packit 352660
    FcOp   op;
Packit 352660
    union {
Packit 352660
	int		ival;
Packit 352660
	double		dval;
Packit 352660
	const FcChar8	*sval;
Packit 352660
	FcExprMatrix	*mexpr;
Packit 352660
	FcBool		bval;
Packit 352660
	FcCharSet	*cval;
Packit 352660
	FcLangSet	*lval;
Packit 352660
	FcRange		*rval;
Packit 352660
Packit 352660
	FcExprName	name;
Packit 352660
	const FcChar8	*constant;
Packit 352660
	struct {
Packit 352660
	    struct _FcExpr *left, *right;
Packit 352660
	} tree;
Packit 352660
    } u;
Packit 352660
} FcExpr;
Packit 352660
Packit 352660
typedef struct _FcExprPage FcExprPage;
Packit 352660
Packit 352660
struct _FcExprPage {
Packit 352660
  FcExprPage *next_page;
Packit 352660
  FcExpr *next;
Packit 352660
  FcExpr exprs[(1024 - 2/* two pointers */ - 2/* malloc overhead */) * sizeof (void *) / sizeof (FcExpr)];
Packit 352660
  FcExpr end[FLEXIBLE_ARRAY_MEMBER];
Packit 352660
};
Packit 352660
Packit 352660
typedef enum _FcQual {
Packit 352660
    FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst
Packit 352660
} FcQual;
Packit 352660
Packit 352660
#define FcMatchDefault	((FcMatchKind) -1)
Packit 352660
Packit 352660
typedef struct _FcTest {
Packit 352660
    FcMatchKind		kind;
Packit 352660
    FcQual		qual;
Packit 352660
    FcObject		object;
Packit 352660
    FcOp		op;
Packit 352660
    FcExpr		*expr;
Packit 352660
} FcTest;
Packit 352660
Packit 352660
typedef struct _FcEdit {
Packit 352660
    FcObject	    object;
Packit 352660
    FcOp	    op;
Packit 352660
    FcExpr	    *expr;
Packit 352660
    FcValueBinding  binding;
Packit 352660
} FcEdit;
Packit 352660
Packit 352660
typedef void (* FcDestroyFunc) (void *data);
Packit 352660
Packit 352660
typedef struct _FcPtrList	FcPtrList;
Packit 352660
/* need to sync with FcConfigFileInfoIter at fontconfig.h */
Packit 352660
typedef struct _FcPtrListIter {
Packit 352660
    void *dummy1;
Packit 352660
    void *dummy2;
Packit 352660
    void *dummy3;
Packit 352660
} FcPtrListIter;
Packit 352660
Packit 352660
typedef enum _FcRuleType {
Packit 352660
    FcRuleUnknown, FcRuleTest, FcRuleEdit
Packit 352660
} FcRuleType;
Packit 352660
Packit 352660
typedef struct _FcRule {
Packit 352660
    struct _FcRule *next;
Packit 352660
    FcRuleType      type;
Packit 352660
    union {
Packit 352660
	FcTest *test;
Packit 352660
	FcEdit *edit;
Packit 352660
    } u;
Packit 352660
} FcRule;
Packit 352660
Packit 352660
typedef struct _FcRuleSet {
Packit 352660
    FcRef	ref;
Packit 352660
    FcChar8	*name;
Packit 352660
    FcChar8	*description;
Packit 352660
    FcChar8	*domain;
Packit 352660
    FcBool	enabled;
Packit 352660
    FcPtrList	*subst[FcMatchKindEnd];
Packit 352660
} FcRuleSet;
Packit 352660
Packit 352660
typedef struct _FcCharLeaf {
Packit 352660
    FcChar32	map[256/32];
Packit 352660
} FcCharLeaf;
Packit 352660
Packit 352660
struct _FcCharSet {
Packit 352660
    FcRef	    ref;	/* reference count */
Packit 352660
    int		    num;	/* size of leaves and numbers arrays */
Packit 352660
    intptr_t	    leaves_offset;
Packit 352660
    intptr_t	    numbers_offset;
Packit 352660
};
Packit 352660
Packit 352660
#define FcCharSetLeaves(c)	FcOffsetMember(c,leaves_offset,intptr_t)
Packit 352660
#define FcCharSetLeaf(c,i)	(FcOffsetToPtr(FcCharSetLeaves(c), \
Packit 352660
					       FcCharSetLeaves(c)[i], \
Packit 352660
					       FcCharLeaf))
Packit 352660
#define FcCharSetNumbers(c)	FcOffsetMember(c,numbers_offset,FcChar16)
Packit 352660
Packit 352660
#define FCSS_DEFAULT            0 /* default behavior */
Packit 352660
#define FCSS_ALLOW_DUPLICATES   1 /* allows for duplicate strings in the set */
Packit 352660
#define FCSS_GROW_BY_64         2 /* grows buffer by 64 elements instead of 1 */
Packit 352660
Packit 352660
#define FcStrSetHasControlBit(s,c)  (s->control & c)
Packit 352660
#define FcStrSetHasControlBits(s,c) ( (c) == (s->control & (c)) )
Packit 352660
Packit 352660
struct _FcStrSet {
Packit 352660
    FcRef	    ref;	/* reference count */
Packit 352660
    int		    num;
Packit 352660
    int		    size;
Packit 352660
    FcChar8	    **strs;
Packit 352660
    unsigned int    control;    /* control bits for set behavior */
Packit 352660
};
Packit 352660
Packit 352660
struct _FcStrList {
Packit 352660
    FcStrSet	    *set;
Packit 352660
    int		    n;
Packit 352660
};
Packit 352660
Packit 352660
typedef struct _FcStrBuf {
Packit 352660
    FcChar8 *buf;
Packit 352660
    FcBool  allocated;
Packit 352660
    FcBool  failed;
Packit 352660
    int	    len;
Packit 352660
    int	    size;
Packit 352660
    FcChar8 buf_static[16 * sizeof (void *)];
Packit 352660
} FcStrBuf;
Packit 352660
Packit 352660
typedef struct _FcHashTable	FcHashTable;
Packit 352660
Packit 352660
typedef FcChar32 (* FcHashFunc)	   (const void *data);
Packit 352660
typedef int	 (* FcCompareFunc) (const void *v1, const void *v2);
Packit 352660
typedef FcBool	 (* FcCopyFunc)	   (const void *src, void **dest);
Packit 352660
Packit 352660
Packit 352660
struct _FcCache {
Packit 352660
    unsigned int magic;              /* FC_CACHE_MAGIC_MMAP or FC_CACHE_ALLOC */
Packit 352660
    int		version;	    /* FC_CACHE_VERSION_NUMBER */
Packit 352660
    intptr_t	size;		    /* size of file */
Packit 352660
    intptr_t	dir;		    /* offset to dir name */
Packit 352660
    intptr_t	dirs;		    /* offset to subdirs */
Packit 352660
    int		dirs_count;	    /* number of subdir strings */
Packit 352660
    intptr_t	set;		    /* offset to font set */
Packit 352660
    int		checksum;	    /* checksum of directory state */
Packit 352660
    int64_t	checksum_nano;	    /* checksum of directory state */
Packit 352660
};
Packit 352660
Packit 352660
#undef FcCacheDir
Packit 352660
#undef FcCacheSubdir
Packit 352660
#define FcCacheDir(c)	FcOffsetMember(c,dir,FcChar8)
Packit 352660
#define FcCacheDirs(c)	FcOffsetMember(c,dirs,intptr_t)
Packit 352660
#define FcCacheSet(c)	FcOffsetMember(c,set,FcFontSet)
Packit 352660
#define FcCacheSubdir(c,i)  FcOffsetToPtr (FcCacheDirs(c),\
Packit 352660
					   FcCacheDirs(c)[i], \
Packit 352660
					   FcChar8)
Packit 352660
Packit 352660
/*
Packit 352660
 * Used while constructing a directory cache object
Packit 352660
 */
Packit 352660
Packit 352660
#define FC_SERIALIZE_HASH_SIZE	8191
Packit 352660
Packit 352660
typedef union _FcAlign {
Packit 352660
    double	d;
Packit 352660
    int		i;
Packit 352660
    intptr_t	ip;
Packit 352660
    FcBool	b;
Packit 352660
    void	*p;
Packit 352660
} FcAlign;
Packit 352660
Packit 352660
typedef struct _FcSerializeBucket {
Packit 352660
    struct _FcSerializeBucket *next;
Packit 352660
    const void	*object;
Packit 352660
    intptr_t	offset;
Packit 352660
} FcSerializeBucket;
Packit 352660
Packit 352660
typedef struct _FcCharSetFreezer FcCharSetFreezer;
Packit 352660
Packit 352660
typedef struct _FcSerialize {
Packit 352660
    intptr_t		size;
Packit 352660
    FcCharSetFreezer	*cs_freezer;
Packit 352660
    void		*linear;
Packit 352660
    FcSerializeBucket	*buckets[FC_SERIALIZE_HASH_SIZE];
Packit 352660
} FcSerialize;
Packit 352660
Packit 352660
/*
Packit 352660
 * To map adobe glyph names to unicode values, a precomputed hash
Packit 352660
 * table is used
Packit 352660
 */
Packit 352660
Packit 352660
typedef struct _FcGlyphName {
Packit 352660
    FcChar32	ucs;		/* unicode value */
Packit 352660
    FcChar8	name[1];	/* name extends beyond struct */
Packit 352660
} FcGlyphName;
Packit 352660
Packit 352660
/*
Packit 352660
 * To perform case-insensitive string comparisons, a table
Packit 352660
 * is used which holds three different kinds of folding data.
Packit 352660
 *
Packit 352660
 * The first is a range of upper case values mapping to a range
Packit 352660
 * of their lower case equivalents.  Within each range, the offset
Packit 352660
 * between upper and lower case is constant.
Packit 352660
 *
Packit 352660
 * The second is a range of upper case values which are interleaved
Packit 352660
 * with their lower case equivalents.
Packit 352660
 *
Packit 352660
 * The third is a set of raw unicode values mapping to a list
Packit 352660
 * of unicode values for comparison purposes.  This allows conversion
Packit 352660
 * of ß to "ss" so that SS, ss and ß all match.  A separate array
Packit 352660
 * holds the list of unicode values for each entry.
Packit 352660
 *
Packit 352660
 * These are packed into a single table.  Using a binary search,
Packit 352660
 * the appropriate entry can be located.
Packit 352660
 */
Packit 352660
Packit 352660
#define FC_CASE_FOLD_RANGE	    0
Packit 352660
#define FC_CASE_FOLD_EVEN_ODD	    1
Packit 352660
#define FC_CASE_FOLD_FULL	    2
Packit 352660
Packit 352660
typedef struct _FcCaseFold {
Packit 352660
    FcChar32	upper;
Packit 352660
    FcChar16	method : 2;
Packit 352660
    FcChar16	count : 14;
Packit 352660
    short    	offset;	    /* lower - upper for RANGE, table id for FULL */
Packit 352660
} FcCaseFold;
Packit 352660
Packit 352660
#define FC_MAX_FILE_LEN	    4096
Packit 352660
Packit 352660
#define FC_CACHE_MAGIC_MMAP	    0xFC02FC04
Packit 352660
#define FC_CACHE_MAGIC_ALLOC	    0xFC02FC05
Packit 352660
Packit 352660
struct _FcAtomic {
Packit 352660
    FcChar8	*file;		/* original file name */
Packit 352660
    FcChar8	*new;		/* temp file name -- write data here */
Packit 352660
    FcChar8	*lck;		/* lockfile name (used for locking) */
Packit 352660
    FcChar8	*tmp;		/* tmpfile name (used for locking) */
Packit 352660
};
Packit 352660
Packit 352660
struct _FcConfig {
Packit 352660
    /*
Packit 352660
     * File names loaded from the configuration -- saved here as the
Packit 352660
     * cache file must be consulted before the directories are scanned,
Packit 352660
     * and those directives may occur in any order
Packit 352660
     */
Packit 352660
    FcStrSet	*configDirs;	    /* directories to scan for fonts */
Packit 352660
    /*
Packit 352660
     * List of directories containing fonts,
Packit 352660
     * built by recursively scanning the set
Packit 352660
     * of configured directories
Packit 352660
     */
Packit 352660
    FcStrSet	*fontDirs;
Packit 352660
    /*
Packit 352660
     * List of directories containing cache files.
Packit 352660
     */
Packit 352660
    FcStrSet	*cacheDirs;
Packit 352660
    /*
Packit 352660
     * Names of all of the configuration files used
Packit 352660
     * to create this configuration
Packit 352660
     */
Packit 352660
    FcStrSet	*configFiles;	    /* config files loaded */
Packit 352660
    /*
Packit 352660
     * Substitution instructions for patterns and fonts;
Packit 352660
     * maxObjects is used to allocate appropriate intermediate storage
Packit 352660
     * while performing a whole set of substitutions
Packit 352660
     *
Packit 352660
     * 0.. substitutions for patterns
Packit 352660
     * 1.. substitutions for fonts
Packit 352660
     * 2.. substitutions for scanned fonts
Packit 352660
     */
Packit 352660
    FcPtrList	*subst[FcMatchKindEnd];
Packit 352660
    int		maxObjects;	    /* maximum number of tests in all substs */
Packit 352660
    /*
Packit 352660
     * List of patterns used to control font file selection
Packit 352660
     */
Packit 352660
    FcStrSet	*acceptGlobs;
Packit 352660
    FcStrSet	*rejectGlobs;
Packit 352660
    FcFontSet	*acceptPatterns;
Packit 352660
    FcFontSet	*rejectPatterns;
Packit 352660
    /*
Packit 352660
     * The set of fonts loaded from the listed directories; the
Packit 352660
     * order within the set does not determine the font selection,
Packit 352660
     * except in the case of identical matches in which case earlier fonts
Packit 352660
     * match preferrentially
Packit 352660
     */
Packit 352660
    FcFontSet	*fonts[FcSetApplication + 1];
Packit 352660
    /*
Packit 352660
     * Fontconfig can periodically rescan the system configuration
Packit 352660
     * and font directories.  This rescanning occurs when font
Packit 352660
     * listing requests are made, but no more often than rescanInterval
Packit 352660
     * seconds apart.
Packit 352660
     */
Packit 352660
    time_t	rescanTime;	    /* last time information was scanned */
Packit 352660
    int		rescanInterval;	    /* interval between scans */
Packit 352660
Packit 352660
    FcRef	ref;                /* reference count */
Packit 352660
Packit 352660
    FcExprPage  *expr_pool;	    /* pool of FcExpr's */
Packit 352660
Packit 352660
    FcChar8     *sysRoot;	    /* override the system root directory */
Packit 352660
    FcStrSet	*availConfigFiles;  /* config files available */
Packit 352660
    FcPtrList	*rulesetList;	    /* List of rulesets being installed */
Packit 352660
    FcHashTable *uuid_table;	    /* UUID table for cachedirs */
Packit 352660
};
Packit 352660
Packit 352660
typedef struct _FcFileTime {
Packit 352660
    time_t  time;
Packit 352660
    FcBool  set;
Packit 352660
} FcFileTime;
Packit 352660
Packit 352660
typedef struct _FcCharMap FcCharMap;
Packit 352660
Packit 352660
typedef struct _FcStatFS    FcStatFS;
Packit 352660
Packit 352660
struct _FcStatFS {
Packit 352660
    FcBool is_remote_fs;
Packit 352660
    FcBool is_mtime_broken;
Packit 352660
};
Packit 352660
Packit 352660
typedef struct _FcValuePromotionBuffer FcValuePromotionBuffer;
Packit 352660
Packit 352660
struct _FcValuePromotionBuffer {
Packit 352660
  union {
Packit 352660
    double d;
Packit 352660
    int i;
Packit 352660
    long l;
Packit 352660
    char c[256]; /* Enlarge as needed */
Packit 352660
  } u;
Packit 352660
};
Packit 352660
Packit 352660
/* fccache.c */
Packit 352660
Packit 352660
FcPrivate FcCache *
Packit 352660
FcDirCacheScan (const FcChar8 *dir, FcConfig *config);
Packit 352660
Packit 352660
FcPrivate FcCache *
Packit 352660
FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs);
Packit 352660
Packit 352660
FcPrivate FcCache *
Packit 352660
FcDirCacheRebuild (FcCache *cache, struct stat *dir_stat, FcStrSet *dirs);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcDirCacheWrite (FcCache *cache, FcConfig *config);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcDirCacheCreateTagFile (const FcChar8 *cache_dir);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcCacheObjectReference (void *object);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcCacheObjectDereference (void *object);
Packit 352660
Packit 352660
FcPrivate void *
Packit 352660
FcCacheAllocate (FcCache *cache, size_t len);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcCacheFini (void);
Packit 352660
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcDirCacheReference (FcCache *cache, int nref);
Packit 352660
Packit 352660
FcPrivate int
Packit 352660
FcDirCacheLock (const FcChar8 *dir,
Packit 352660
		FcConfig      *config);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcDirCacheUnlock (int fd);
Packit 352660
Packit 352660
/* fccfg.c */
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcConfigInit (void);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcConfigFini (void);
Packit 352660
Packit 352660
FcPrivate FcChar8 *
Packit 352660
FcConfigXdgCacheHome (void);
Packit 352660
Packit 352660
FcPrivate FcChar8 *
Packit 352660
FcConfigXdgConfigHome (void);
Packit 352660
Packit 352660
FcPrivate FcChar8 *
Packit 352660
FcConfigXdgDataHome (void);
Packit 352660
Packit 352660
FcPrivate FcExpr *
Packit 352660
FcConfigAllocExpr (FcConfig *config);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcConfigAddConfigDir (FcConfig	    *config,
Packit 352660
		      const FcChar8 *d);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcConfigAddFontDir (FcConfig	    *config,
Packit 352660
		    const FcChar8   *d);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcConfigAddCacheDir (FcConfig	    *config,
Packit 352660
		     const FcChar8  *d);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcConfigAddConfigFile (FcConfig		*config,
Packit 352660
		       const FcChar8	*f);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcConfigAddBlank (FcConfig	*config,
Packit 352660
		  FcChar32    	blank);
Packit 352660
Packit 352660
FcBool
Packit 352660
FcConfigAddRule (FcConfig	*config,
Packit 352660
		 FcRule		*rule,
Packit 352660
		 FcMatchKind	kind);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcConfigSetFonts (FcConfig	*config,
Packit 352660
		  FcFontSet	*fonts,
Packit 352660
		  FcSetName	set);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcConfigCompareValue (const FcValue *m,
Packit 352660
		      unsigned int   op_,
Packit 352660
		      const FcValue *v);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcConfigGlobAdd (FcConfig	*config,
Packit 352660
		 const FcChar8	*glob,
Packit 352660
		 FcBool		accept);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcConfigAcceptFilename (FcConfig	*config,
Packit 352660
			const FcChar8	*filename);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcConfigPatternsAdd (FcConfig	*config,
Packit 352660
		     FcPattern	*pattern,
Packit 352660
		     FcBool	accept);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcConfigAcceptFont (FcConfig	    *config,
Packit 352660
		    const FcPattern *font);
Packit 352660
Packit 352660
FcPrivate FcFileTime
Packit 352660
FcConfigModifiedTime (FcConfig *config);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcConfigAddCache (FcConfig *config, FcCache *cache,
Packit 352660
		  FcSetName set, FcStrSet *dirSet, FcChar8 *forDir);
Packit 352660
Packit 352660
FcPrivate FcRuleSet *
Packit 352660
FcRuleSetCreate (const FcChar8 *name);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcRuleSetDestroy (FcRuleSet *rs);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcRuleSetReference (FcRuleSet *rs);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcRuleSetEnable (FcRuleSet	*rs,
Packit 352660
		 FcBool		flag);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcRuleSetAddDescription (FcRuleSet	*rs,
Packit 352660
			 const FcChar8	*domain,
Packit 352660
			 const FcChar8	*description);
Packit 352660
Packit 352660
FcPrivate int
Packit 352660
FcRuleSetAdd (FcRuleSet		*rs,
Packit 352660
	      FcRule		*rule,
Packit 352660
	      FcMatchKind	kind);
Packit 352660
Packit 352660
/* fcserialize.c */
Packit 352660
FcPrivate intptr_t
Packit 352660
FcAlignSize (intptr_t size);
Packit 352660
Packit 352660
FcPrivate FcSerialize *
Packit 352660
FcSerializeCreate (void);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcSerializeDestroy (FcSerialize *serialize);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcSerializeAlloc (FcSerialize *serialize, const void *object, int size);
Packit 352660
Packit 352660
FcPrivate intptr_t
Packit 352660
FcSerializeReserve (FcSerialize *serialize, int size);
Packit 352660
Packit 352660
FcPrivate intptr_t
Packit 352660
FcSerializeOffset (FcSerialize *serialize, const void *object);
Packit 352660
Packit 352660
FcPrivate void *
Packit 352660
FcSerializePtr (FcSerialize *serialize, const void *object);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l);
Packit 352660
Packit 352660
FcPrivate FcLangSet *
Packit 352660
FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l);
Packit 352660
Packit 352660
/* fccharset.c */
Packit 352660
FcPrivate FcCharSet *
Packit 352660
FcCharSetPromote (FcValuePromotionBuffer *vbuf);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcLangCharSetPopulate (void);
Packit 352660
Packit 352660
FcPrivate FcCharSetFreezer *
Packit 352660
FcCharSetFreezerCreate (void);
Packit 352660
Packit 352660
FcPrivate const FcCharSet *
Packit 352660
FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcCharSetFreezerDestroy (FcCharSetFreezer *freezer);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c);
Packit 352660
Packit 352660
FcPrivate FcCharSet *
Packit 352660
FcNameParseCharSet (FcChar8 *string);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcNameUnparseValue (FcStrBuf    *buf,
Packit 352660
                    FcValue     *v0,
Packit 352660
		    FcChar8     *escape);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcNameUnparseValueList (FcStrBuf	*buf,
Packit 352660
			FcValueListPtr	v,
Packit 352660
			FcChar8		*escape);
Packit 352660
Packit 352660
FcPrivate FcCharLeaf *
Packit 352660
FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcCharSetSerializeAlloc(FcSerialize *serialize, const FcCharSet *cs);
Packit 352660
Packit 352660
FcPrivate FcCharSet *
Packit 352660
FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs);
Packit 352660
Packit 352660
FcPrivate FcChar16 *
Packit 352660
FcCharSetGetNumbers(const FcCharSet *c);
Packit 352660
Packit 352660
/* fccompat.c */
Packit 352660
FcPrivate int
Packit 352660
FcOpen(const char *pathname, int flags, ...);
Packit 352660
Packit 352660
FcPrivate int
Packit 352660
FcMakeTempfile (char *template);
Packit 352660
Packit 352660
FcPrivate int32_t
Packit 352660
FcRandom (void);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcMakeDirectory (const FcChar8 *dir);
Packit 352660
Packit 352660
FcPrivate ssize_t
Packit 352660
FcReadLink (const FcChar8 *pathname,
Packit 352660
	    FcChar8       *buf,
Packit 352660
	    size_t         bufsiz);
Packit 352660
Packit 352660
/* fcdbg.c */
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcValuePrintFile (FILE *f, const FcValue v);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcValuePrintWithPosition (const FcValue v, FcBool show_pos_mark);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcValueListPrintWithPosition (FcValueListPtr l, const FcValueListPtr pos);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcValueListPrint (FcValueListPtr l);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcLangSetPrint (const FcLangSet *ls);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcOpPrint (FcOp op);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcTestPrint (const FcTest *test);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcExprPrint (const FcExpr *expr);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcEditPrint (const FcEdit *edit);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcRulePrint (const FcRule *rule);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcCharSetPrint (const FcCharSet *c);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcPatternPrint2 (FcPattern *p1, FcPattern *p2, const FcObjectSet *os);
Packit 352660
Packit 352660
extern FcPrivate int FcDebugVal;
Packit 352660
Packit 352660
#define FcDebug() (FcDebugVal)
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcInitDebug (void);
Packit 352660
Packit 352660
/* fcdefault.c */
Packit 352660
FcPrivate FcChar8 *
Packit 352660
FcGetDefaultLang (void);
Packit 352660
Packit 352660
FcPrivate FcChar8 *
Packit 352660
FcGetPrgname (void);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcDefaultFini (void);
Packit 352660
Packit 352660
/* fcdir.c */
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcFileIsLink (const FcChar8 *file);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcFileIsFile (const FcChar8 *file);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcFileScanConfig (FcFontSet	*set,
Packit 352660
		  FcStrSet	*dirs,
Packit 352660
		  const FcChar8 *file,
Packit 352660
		  FcConfig	*config);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcDirScanConfig (FcFontSet	*set,
Packit 352660
		 FcStrSet	*dirs,
Packit 352660
		 const FcChar8	*dir,
Packit 352660
		 FcBool		force,
Packit 352660
		 FcConfig	*config);
Packit 352660
Packit 352660
/* fcfont.c */
Packit 352660
FcPrivate int
Packit 352660
FcFontDebug (void);
Packit 352660
Packit 352660
/* fcfs.c */
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s);
Packit 352660
Packit 352660
FcPrivate FcFontSet *
Packit 352660
FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s);
Packit 352660
Packit 352660
FcPrivate FcFontSet *
Packit 352660
FcFontSetDeserialize (const FcFontSet *set);
Packit 352660
Packit 352660
/* fcplist.c */
Packit 352660
FcPrivate FcPtrList *
Packit 352660
FcPtrListCreate (FcDestroyFunc func);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcPtrListDestroy (FcPtrList *list);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcPtrListIterInit (const FcPtrList	*list,
Packit 352660
		   FcPtrListIter	*iter);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcPtrListIterInitAtLast (FcPtrList	*list,
Packit 352660
			 FcPtrListIter	*iter);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPtrListIterNext (const FcPtrList	*list,
Packit 352660
		   FcPtrListIter	*iter);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPtrListIterIsValid (const FcPtrList		*list,
Packit 352660
		      const FcPtrListIter	*iter);
Packit 352660
Packit 352660
FcPrivate void *
Packit 352660
FcPtrListIterGetValue (const FcPtrList		*list,
Packit 352660
		       const FcPtrListIter	*iter);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPtrListIterAdd (FcPtrList	*list,
Packit 352660
		  FcPtrListIter	*iter,
Packit 352660
		void		*data);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPtrListIterRemove (FcPtrList		*list,
Packit 352660
		     FcPtrListIter	*iter);
Packit 352660
Packit 352660
/* fcinit.c */
Packit 352660
FcPrivate FcConfig *
Packit 352660
FcInitLoadOwnConfig (FcConfig *config);
Packit 352660
Packit 352660
FcPrivate FcConfig *
Packit 352660
FcInitLoadOwnConfigAndFonts (FcConfig *config);
Packit 352660
Packit 352660
/* fcxml.c */
Packit 352660
FcPrivate void
Packit 352660
FcConfigPathFini (void);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcTestDestroy (FcTest *test);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcEditDestroy (FcEdit *e);
Packit 352660
Packit 352660
void
Packit 352660
FcRuleDestroy (FcRule *rule);
Packit 352660
Packit 352660
/* fclang.c */
Packit 352660
FcPrivate FcLangSet *
Packit 352660
FcFreeTypeLangSet (const FcCharSet  *charset,
Packit 352660
		   const FcChar8    *exclusiveLang);
Packit 352660
Packit 352660
FcPrivate FcLangResult
Packit 352660
FcLangCompare (const FcChar8 *s1, const FcChar8 *s2);
Packit 352660
Packit 352660
FcPrivate FcLangSet *
Packit 352660
FcLangSetPromote (const FcChar8 *lang, FcValuePromotionBuffer *buf);
Packit 352660
Packit 352660
FcPrivate FcLangSet *
Packit 352660
FcNameParseLangSet (const FcChar8 *string);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls);
Packit 352660
Packit 352660
FcPrivate FcChar8 *
Packit 352660
FcNameUnparseEscaped (FcPattern *pat, FcBool escape);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcConfigParseOnly (FcConfig		*config,
Packit 352660
		   const FcChar8	*name,
Packit 352660
		   FcBool		complain);
Packit 352660
Packit 352660
FcPrivate FcChar8 *
Packit 352660
FcConfigRealFilename (FcConfig		*config,
Packit 352660
		      const FcChar8	*url);
Packit 352660
Packit 352660
/* fclist.c */
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcListPatternMatchAny (const FcPattern *p,
Packit 352660
		       const FcPattern *font);
Packit 352660
Packit 352660
/* fcmatch.c */
Packit 352660
Packit 352660
/* fcname.c */
Packit 352660
Packit 352660
enum {
Packit 352660
  FC_INVALID_OBJECT = 0,
Packit 352660
#define FC_OBJECT(NAME, Type, Cmp) FC_##NAME##_OBJECT,
Packit 352660
#include "fcobjs.h"
Packit 352660
#undef FC_OBJECT
Packit 352660
  FC_ONE_AFTER_MAX_BASE_OBJECT
Packit 352660
#define FC_MAX_BASE_OBJECT (FC_ONE_AFTER_MAX_BASE_OBJECT - 1)
Packit 352660
};
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcNameBool (const FcChar8 *v, FcBool *result);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcObjectValidType (FcObject object, FcType type);
Packit 352660
Packit 352660
FcPrivate FcObject
Packit 352660
FcObjectFromName (const char * name);
Packit 352660
Packit 352660
FcPrivate const char *
Packit 352660
FcObjectName (FcObject object);
Packit 352660
Packit 352660
FcPrivate FcObjectSet *
Packit 352660
FcObjectGetSet (void);
Packit 352660
Packit 352660
#define FcObjectCompare(a, b)	((int) a - (int) b)
Packit 352660
Packit 352660
/* fcpat.c */
Packit 352660
Packit 352660
FcPrivate FcValue
Packit 352660
FcValueCanonicalize (const FcValue *v);
Packit 352660
Packit 352660
FcPrivate FcValueListPtr
Packit 352660
FcValueListCreate (void);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcValueListDestroy (FcValueListPtr l);
Packit 352660
Packit 352660
FcPrivate FcValueListPtr
Packit 352660
FcValueListPrepend (FcValueListPtr vallist,
Packit 352660
		    FcValue        value,
Packit 352660
		    FcValueBinding binding);
Packit 352660
Packit 352660
FcPrivate FcValueListPtr
Packit 352660
FcValueListAppend (FcValueListPtr vallist,
Packit 352660
		   FcValue        value,
Packit 352660
		   FcValueBinding binding);
Packit 352660
Packit 352660
FcPrivate FcValueListPtr
Packit 352660
FcValueListDuplicate(FcValueListPtr orig);
Packit 352660
Packit 352660
FcPrivate FcPatternElt *
Packit 352660
FcPatternObjectFindElt (const FcPattern *p, FcObject object);
Packit 352660
Packit 352660
FcPrivate FcPatternElt *
Packit 352660
FcPatternObjectInsertElt (FcPattern *p, FcObject object);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPatternObjectListAdd (FcPattern	*p,
Packit 352660
			FcObject	object,
Packit 352660
			FcValueListPtr	list,
Packit 352660
			FcBool		append);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPatternObjectAddWithBinding  (FcPattern	*p,
Packit 352660
				FcObject	object,
Packit 352660
				FcValue		value,
Packit 352660
				FcValueBinding  binding,
Packit 352660
				FcBool		append);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append);
Packit 352660
Packit 352660
FcPrivate FcResult
Packit 352660
FcPatternObjectGetWithBinding (const FcPattern *p, FcObject object, int id, FcValue *v, FcValueBinding *b);
Packit 352660
Packit 352660
FcPrivate FcResult
Packit 352660
FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPatternObjectDel (FcPattern *p, FcObject object);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPatternObjectRemove (FcPattern *p, FcObject object, int id);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPatternObjectAddRange (FcPattern *p, FcObject object, const FcRange *r);
Packit 352660
Packit 352660
FcPrivate FcResult
Packit 352660
FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i);
Packit 352660
Packit 352660
FcPrivate FcResult
Packit 352660
FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d);
Packit 352660
Packit 352660
FcPrivate FcResult
Packit 352660
FcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 ** s);
Packit 352660
Packit 352660
FcPrivate FcResult
Packit 352660
FcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s);
Packit 352660
Packit 352660
FcPrivate FcResult
Packit 352660
FcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c);
Packit 352660
Packit 352660
FcPrivate FcResult
Packit 352660
FcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b);
Packit 352660
Packit 352660
FcPrivate FcResult
Packit 352660
FcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls);
Packit 352660
Packit 352660
FcPrivate FcResult
Packit 352660
FcPatternObjectGetRange (const FcPattern *p, FcObject object, int id, FcRange **r);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPatternAppend (FcPattern *p, FcPattern *s);
Packit 352660
Packit 352660
FcPrivate int
Packit 352660
FcPatternPosition (const FcPattern *p, const char *object);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPatternFindObjectIter (const FcPattern *pat, FcPatternIter *iter, FcObject object);
Packit 352660
Packit 352660
FcPrivate FcObject
Packit 352660
FcPatternIterGetObjectId (const FcPattern *pat, FcPatternIter *iter);
Packit 352660
Packit 352660
FcPrivate FcValueListPtr
Packit 352660
FcPatternIterGetValues (const FcPattern *pat, FcPatternIter *iter);
Packit 352660
Packit 352660
FcPrivate FcPattern *
Packit 352660
FcPatternCacheRewriteFile (const FcPattern *pat, FcCache *cache, const FcChar8 *relocated_font_file);
Packit 352660
Packit 352660
FcPrivate FcChar32
Packit 352660
FcStringHash (const FcChar8 *s);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat);
Packit 352660
Packit 352660
FcPrivate FcPattern *
Packit 352660
FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat);
Packit 352660
Packit 352660
FcPrivate FcValueList *
Packit 352660
FcValueListSerialize (FcSerialize *serialize, const FcValueList *pat);
Packit 352660
Packit 352660
/* fcrender.c */
Packit 352660
Packit 352660
/* fcmatrix.c */
Packit 352660
Packit 352660
extern FcPrivate const FcMatrix    FcIdentityMatrix;
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcMatrixFree (FcMatrix *mat);
Packit 352660
Packit 352660
/* fcrange.c */
Packit 352660
Packit 352660
FcPrivate FcRange *
Packit 352660
FcRangePromote (double v, FcValuePromotionBuffer *vbuf);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcRangeIsInRange (const FcRange *a, const FcRange *b);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcRangeCompare (FcOp op, const FcRange *a, const FcRange *b);
Packit 352660
Packit 352660
FcPrivate FcChar32
Packit 352660
FcRangeHash (const FcRange *r);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcRangeSerializeAlloc (FcSerialize *serialize, const FcRange *r);
Packit 352660
Packit 352660
FcPrivate FcRange *
Packit 352660
FcRangeSerialize (FcSerialize *serialize, const FcRange *r);
Packit 352660
Packit 352660
/* fcstat.c */
Packit 352660
Packit 352660
FcPrivate int
Packit 352660
FcStat (const FcChar8 *file, struct stat *statb);
Packit 352660
Packit 352660
FcPrivate int
Packit 352660
FcStatChecksum (const FcChar8 *file, struct stat *statb);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcIsFsMmapSafe (int fd);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcIsFsMtimeBroken (const FcChar8 *dir);
Packit 352660
Packit 352660
/* fcstr.c */
Packit 352660
FcPrivate FcStrSet *
Packit 352660
FcStrSetCreateEx (unsigned int control);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcStrSetAddLangs (FcStrSet *strs, const char *languages);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcStrSetSort (FcStrSet * set);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcStrBufDestroy (FcStrBuf *buf);
Packit 352660
Packit 352660
FcPrivate FcChar8 *
Packit 352660
FcStrBufDone (FcStrBuf *buf);
Packit 352660
Packit 352660
FcPrivate FcChar8 *
Packit 352660
FcStrBufDoneStatic (FcStrBuf *buf);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcStrBufChar (FcStrBuf *buf, FcChar8 c);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcStrBufString (FcStrBuf *buf, const FcChar8 *s);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len);
Packit 352660
Packit 352660
FcPrivate int
Packit 352660
FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
Packit 352660
Packit 352660
FcPrivate int
Packit 352660
FcStrCmpIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *delims);
Packit 352660
Packit 352660
FcPrivate const FcChar8 *
Packit 352660
FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
Packit 352660
Packit 352660
FcPrivate const FcChar8 *
Packit 352660
FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
Packit 352660
Packit 352660
FcPrivate const FcChar8 *
Packit 352660
FcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2);
Packit 352660
Packit 352660
FcPrivate int
Packit 352660
FcStrMatchIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *delims);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcStrGlobMatch (const FcChar8 *glob,
Packit 352660
		const FcChar8 *string);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcStrUsesHome (const FcChar8 *s);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcStrIsAbsoluteFilename (const FcChar8 *s);
Packit 352660
Packit 352660
FcPrivate FcChar8 *
Packit 352660
FcStrBuildFilename (const FcChar8 *path,
Packit 352660
		    ...);
Packit 352660
Packit 352660
FcPrivate FcChar8 *
Packit 352660
FcStrLastSlash (const FcChar8  *path);
Packit 352660
Packit 352660
FcPrivate FcChar32
Packit 352660
FcStrHashIgnoreCase (const FcChar8 *s);
Packit 352660
Packit 352660
FcPrivate FcChar8 *
Packit 352660
FcStrCanonFilename (const FcChar8 *s);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str);
Packit 352660
Packit 352660
FcPrivate FcChar8 *
Packit 352660
FcStrSerialize (FcSerialize *serialize, const FcChar8 *str);
Packit 352660
Packit 352660
/* fcobjs.c */
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcObjectFini (void);
Packit 352660
Packit 352660
FcPrivate FcObject
Packit 352660
FcObjectLookupIdByName (const char *str);
Packit 352660
Packit 352660
FcPrivate FcObject
Packit 352660
FcObjectLookupBuiltinIdByName (const char *str);
Packit 352660
Packit 352660
FcPrivate const char *
Packit 352660
FcObjectLookupOtherNameById (FcObject id);
Packit 352660
Packit 352660
FcPrivate const FcObjectType *
Packit 352660
FcObjectLookupOtherTypeById (FcObject id);
Packit 352660
Packit 352660
FcPrivate const FcObjectType *
Packit 352660
FcObjectLookupOtherTypeByName (const char *str);
Packit 352660
Packit 352660
/* fchash.c */
Packit 352660
FcPrivate FcBool
Packit 352660
FcHashStrCopy (const void  *src,
Packit 352660
	       void       **dest);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcHashUuidCopy (const void  *src,
Packit 352660
		void       **dest);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcHashUuidFree (void *data);
Packit 352660
Packit 352660
FcPrivate FcHashTable *
Packit 352660
FcHashTableCreate (FcHashFunc    hash_func,
Packit 352660
		   FcCompareFunc compare_func,
Packit 352660
		   FcCopyFunc    key_copy_func,
Packit 352660
		   FcCopyFunc    value_copy_func,
Packit 352660
		   FcDestroyFunc key_destroy_func,
Packit 352660
		   FcDestroyFunc value_destroy_func);
Packit 352660
Packit 352660
FcPrivate void
Packit 352660
FcHashTableDestroy (FcHashTable *table);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcHashTableFind (FcHashTable  *table,
Packit 352660
		 const void   *key,
Packit 352660
		 void        **value);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcHashTableAdd (FcHashTable *table,
Packit 352660
		void        *key,
Packit 352660
		void        *value);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcHashTableReplace (FcHashTable *table,
Packit 352660
		    void        *key,
Packit 352660
		    void        *value);
Packit 352660
Packit 352660
FcPrivate FcBool
Packit 352660
FcHashTableRemove (FcHashTable *table,
Packit 352660
		   void        *key);
Packit 352660
Packit 352660
#endif /* _FC_INT_H_ */