* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
+ * documentation, and that the name of the author(s) not be used in
* advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
+ * specific, written prior permission. The authors make no
* representations about the suitability of this software for any purpose. It
* is provided "as is" without express or implied warranty.
*
#define FC_MEM_NUM 30
-#define FC_BANK_DYNAMIC 0
-#define FC_BANK_FIRST 1
-#define FC_BANK_LANGS 0xfcfcfcfc
+#define _FC_ASSERT_STATIC1(_line, _cond) typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1]
+#define _FC_ASSERT_STATIC0(_line, _cond) _FC_ASSERT_STATIC1 (_line, (_cond))
+#define FC_ASSERT_STATIC(_cond) _FC_ASSERT_STATIC0 (__LINE__, (_cond))
#define FC_MIN(a,b) ((a) < (b) ? (a) : (b))
#define FC_MAX(a,b) ((a) > (b) ? (a) : (b))
* Serialized data structures use only offsets instead of pointers
* A low bit of 1 indicates an offset.
*/
-
+
/* Is the provided pointer actually an offset? */
#define FcIsEncodedOffset(p) ((((intptr_t) (p)) & 1) != 0)
} FcValueList;
#define FcValueListNext(vl) FcPointerMember(vl,next,FcValueList)
-
+
typedef int FcObject;
typedef struct _FcPatternElt *FcPatternEltPtr;
/*
- * Pattern elts are stuck in a structure connected to the pattern,
+ * Pattern elts are stuck in a structure connected to the pattern,
* so they get moved around when the pattern is resized. Hence, the
* values field must be a pointer/offset instead of just an offset
*/
fs->fonts[i])
typedef enum _FcOp {
- FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpBool, FcOpCharSet,
+ FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpRange, FcOpBool, FcOpCharSet, FcOpLangSet,
FcOpNil,
FcOpField, FcOpConst,
- FcOpAssign, FcOpAssignReplace,
+ FcOpAssign, FcOpAssignReplace,
FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast,
FcOpQuest,
- FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual,
+ FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual,
FcOpContains, FcOpListing, FcOpNotContains,
FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual,
FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide,
union {
int ival;
double dval;
- FcChar8 *sval;
+ const FcChar8 *sval;
FcMatrix *mval;
FcBool bval;
FcCharSet *cval;
+ FcLangSet *lval;
FcObject object;
- FcChar8 *constant;
+ const FcChar8 *constant;
struct {
struct _FcExpr *left, *right;
} tree;
FcExprPage *next_page;
FcExpr *next;
FcExpr exprs[(1024 - 2/* two pointers */ - 2/* malloc overhead */) * sizeof (void *) / sizeof (FcExpr)];
- FcExpr end[0];
+ FcExpr end[];
};
typedef enum _FcQual {
void *linear;
FcSerializeBucket *buckets[FC_SERIALIZE_HASH_SIZE];
} FcSerialize;
-
+
/*
* To map adobe glyph names to unicode values, a precomputed hash
* table is used
/*
* To perform case-insensitive string comparisons, a table
* is used which holds three different kinds of folding data.
- *
+ *
* The first is a range of upper case values mapping to a range
* of their lower case equivalents. Within each range, the offset
* between upper and lower case is constant.
*
* The second is a range of upper case values which are interleaved
* with their lower case equivalents.
- *
+ *
* The third is a set of raw unicode values mapping to a list
* of unicode values for comparison purposes. This allows conversion
* of ß to "ss" so that SS, ss and ß all match. A separate array
FcBlanks *blanks;
/*
* List of directories containing fonts,
- * built by recursively scanning the set
+ * built by recursively scanning the set
* of configured directories
*/
FcStrSet *fontDirs;
FcExprPage *expr_pool; /* pool of FcExpr's */
};
-
+
extern FcPrivate FcConfig *_fcConfig;
typedef struct _FcFileTime {
typedef struct _FcCharMap FcCharMap;
+typedef struct _FcRange FcRange;
+
+struct _FcRange {
+ FcChar32 begin;
+ FcChar32 end;
+};
+
/* fcblanks.c */
/* fccache.c */
FcPrivate FcBool
FcDirCacheWrite (FcCache *cache, FcConfig *config);
-
+
FcPrivate void
FcCacheObjectReference (void *object);
FcPrivate void
FcCacheFini (void);
-
+
FcPrivate void
FcDirCacheReference (FcCache *cache, int nref);
-#ifdef _WIN32
FcPrivate int
FcStat (const char *file, struct stat *statb);
-#else
-#define FcStat stat
-#endif
/* fccfg.c */
FcConfigModifiedTime (FcConfig *config);
FcPrivate FcBool
-FcConfigAddCache (FcConfig *config, FcCache *cache,
+FcConfigAddCache (FcConfig *config, FcCache *cache,
FcSetName set, FcStrSet *dirSet);
/* fcserialize.c */
FcPrivate intptr_t
FcAlignSize (intptr_t size);
-
+
FcPrivate FcSerialize *
FcSerializeCreate (void);
FcPrivate void
FcCharSetPrint (const FcCharSet *c);
-
+
extern FcPrivate int FcDebugVal;
#define FcDebug() (FcDebugVal)
/* fclang.c */
FcPrivate FcLangSet *
-FcFreeTypeLangSet (const FcCharSet *charset,
+FcFreeTypeLangSet (const FcCharSet *charset,
const FcChar8 *exclusiveLang);
FcPrivate FcLangResult
FcLangCompare (const FcChar8 *s1, const FcChar8 *s2);
-
+
FcPrivate FcLangSet *
FcLangSetPromote (const FcChar8 *lang);
FcPrivate FcBool
FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append);
-
+
FcPrivate FcBool
FcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append);
-
+
FcPrivate FcResult
FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v);
-
+
FcPrivate FcBool
FcPatternObjectDel (FcPattern *p, FcObject object);