]> git.wh0rd.org - fontconfig.git/blobdiff - fontconfig/fontconfig.h
Change version to 2.3.96
[fontconfig.git] / fontconfig / fontconfig.h
index d7e102390d97872ac80924ad31a436e0fc90b318..6ca1cf4548773d5d9b0b227906c3a1ccffaefec3 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * $XFree86: xc/lib/fontconfig/fontconfig/fontconfig.h,v 1.15 2002/06/02 20:52:06 keithp Exp $
+ * $RCSId: xc/lib/fontconfig/fontconfig/fontconfig.h,v 1.30 2002/09/26 00:17:27 keithp Exp $
  *
- * Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc.
+ * Copyright © 2001 Keith Packard
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
 
 #include <stdarg.h>
 
+#if defined(__GNUC__) && (__GNUC__ >= 4)
+#define FC_ATTRIBUTE_SENTINEL(x) __attribute__((__sentinel__(0)))
+#else
+#define FC_ATTRIBUTE_SENTINEL(x)
+#endif
+
 typedef unsigned char  FcChar8;
 typedef unsigned short FcChar16;
 typedef unsigned int   FcChar32;
 typedef int            FcBool;
 
 /*
- * Current Fontconfig version number
+ * Current Fontconfig version number.  This same number
+ * must appear in the fontconfig configure.in file. Yes,
+ * it'a a pain to synchronize version numbers like this.
  */
-#define FC_MAJOR       1
-#define FC_MINOR       0
-#define FC_REVISION    1
+
+#define FC_MAJOR       2
+#define FC_MINOR       3
+#define FC_REVISION    96
 
 #define FC_VERSION     ((FC_MAJOR * 10000) + (FC_MINOR * 100) + (FC_REVISION))
 
+/*
+ * Current font cache file format version
+ * This is appended to the cache files so that multiple
+ * versions of the library will peacefully coexist
+ *
+ * Change this value whenever the disk format for the cache file
+ * changes in any non-compatible way.  Try to avoid such changes as
+ * it means multiple copies of the font information.
+ */
+
+#define FC_CACHE_VERSION    "2"
+
 #define FcTrue         1
 #define FcFalse                0
 
@@ -55,9 +76,11 @@ typedef int          FcBool;
 #define FC_FOUNDRY         "foundry"           /* String */
 #define FC_ANTIALIAS       "antialias"         /* Bool (depends) */
 #define FC_HINTING         "hinting"           /* Bool (true) */
+#define FC_HINT_STYLE      "hintstyle"         /* Int */
 #define FC_VERTICAL_LAYOUT  "verticallayout"   /* Bool (false) */
 #define FC_AUTOHINT        "autohint"          /* Bool (false) */
 #define FC_GLOBAL_ADVANCE   "globaladvance"    /* Bool (true) */
+#define FC_WIDTH           "width"             /* Int */
 #define FC_FILE                    "file"              /* String */
 #define FC_INDEX           "index"             /* Int */
 #define FC_FT_FACE         "ftface"            /* FT_Face */
@@ -68,78 +91,78 @@ typedef int         FcBool;
 #define FC_DPI             "dpi"               /* double */
 #define FC_RGBA                    "rgba"              /* Int */
 #define FC_MINSPACE        "minspace"          /* Bool use minimum line spacing */
-#define FC_SOURCE          "source"            /* String (X11, freetype) */
+#define FC_SOURCE          "source"            /* String (deprecated) */
 #define FC_CHARSET         "charset"           /* CharSet */
-#define FC_LANG                    "lang"              /* String OS/2 CodePageRange */
-
-#define FC_DIR_CACHE_FILE          "fonts.cache"
-#define FC_USER_CACHE_FILE         ".fonts.cache"
+#define FC_LANG                    "lang"              /* String RFC 3066 langs */
+#define FC_FONTVERSION     "fontversion"       /* Int from 'head' table */
+#define FC_FULLNAME        "fullname"          /* String */
+#define FC_FAMILYLANG      "familylang"        /* String RFC 3066 langs */
+#define FC_STYLELANG       "stylelang"         /* String RFC 3066 langs */
+#define FC_FULLNAMELANG            "fullnamelang"      /* String RFC 3066 langs */
+#define FC_CAPABILITY       "capability"       /* String */
+#define FC_FONTFORMAT      "fontformat"        /* String */
+#define FC_EMBOLDEN        "embolden"          /* Bool - true if emboldening needed*/
+#define FC_EMBEDDED_BITMAP  "embeddedbitmap"   /* Bool - true to enable embedded bitmaps */
+#define FC_DECORATIVE      "decorative"        /* Bool - true if style is a decorative variant */
+
+#define FC_CACHE_SUFFIX                    ".cache-"FC_CACHE_VERSION
+#define FC_DIR_CACHE_FILE          "fonts.cache-"FC_CACHE_VERSION
+#define FC_USER_CACHE_FILE         ".fonts.cache-"FC_CACHE_VERSION
 
 /* Adjust outline rasterizer */
 #define FC_CHAR_WIDTH      "charwidth" /* Int */
 #define FC_CHAR_HEIGHT     "charheight"/* Int */
 #define FC_MATRIX          "matrix"    /* FcMatrix */
 
-#define FC_WEIGHT_LIGHT            0
-#define FC_WEIGHT_MEDIUM    100
-#define FC_WEIGHT_DEMIBOLD  180
-#define FC_WEIGHT_BOLD     200
-#define FC_WEIGHT_BLACK            210
-
-#define FC_SLANT_ROMAN     0
-#define FC_SLANT_ITALIC            100
-#define FC_SLANT_OBLIQUE    110
-
-#define FC_PROPORTIONAL            0
-#define FC_MONO                    100
-#define FC_CHARCELL        110
+#define FC_WEIGHT_THIN             0
+#define FC_WEIGHT_EXTRALIGHT       40
+#define FC_WEIGHT_ULTRALIGHT       FC_WEIGHT_EXTRALIGHT
+#define FC_WEIGHT_LIGHT                    50
+#define FC_WEIGHT_BOOK             75
+#define FC_WEIGHT_REGULAR          80
+#define FC_WEIGHT_NORMAL           FC_WEIGHT_REGULAR
+#define FC_WEIGHT_MEDIUM           100
+#define FC_WEIGHT_DEMIBOLD         180
+#define FC_WEIGHT_SEMIBOLD         FC_WEIGHT_DEMIBOLD
+#define FC_WEIGHT_BOLD             200
+#define FC_WEIGHT_EXTRABOLD        205
+#define FC_WEIGHT_ULTRABOLD        FC_WEIGHT_EXTRABOLD
+#define FC_WEIGHT_BLACK                    210
+#define FC_WEIGHT_HEAVY                    FC_WEIGHT_BLACK
+
+#define FC_SLANT_ROMAN             0
+#define FC_SLANT_ITALIC                    100
+#define FC_SLANT_OBLIQUE           110
+
+#define FC_WIDTH_ULTRACONDENSED            50
+#define FC_WIDTH_EXTRACONDENSED            63
+#define FC_WIDTH_CONDENSED         75
+#define FC_WIDTH_SEMICONDENSED     87
+#define FC_WIDTH_NORMAL                    100
+#define FC_WIDTH_SEMIEXPANDED      113
+#define FC_WIDTH_EXPANDED          125
+#define FC_WIDTH_EXTRAEXPANDED     150
+#define FC_WIDTH_ULTRAEXPANDED     200
+
+#define FC_PROPORTIONAL                    0
+#define FC_DUAL                            90
+#define FC_MONO                            100
+#define FC_CHARCELL                110
 
 /* sub-pixel order */
-#define FC_RGBA_NONE       0
+#define FC_RGBA_UNKNOWN            0
 #define FC_RGBA_RGB        1
 #define FC_RGBA_BGR        2
 #define FC_RGBA_VRGB       3
 #define FC_RGBA_VBGR       4
-
-/* language groups from the OS/2 CodePageRange bits */
-#define FC_LANG_LATIN_1                        "latin1"                /* 0 */
-#define FC_LANG_LATIN_2_EASTERN_EUROPE "latin2easterneurope"   /* 1 */
-#define FC_LANG_CYRILLIC               "cyrillic"              /* 2 */
-#define FC_LANG_GREEK                  "greek"                 /* 3 */
-#define FC_LANG_TURKISH                        "turkish"               /* 4 */
-#define FC_LANG_HEBREW                 "hebrew"                /* 5 */
-#define FC_LANG_ARABIC                 "arabic"                /* 6 */
-#define FC_LANG_WINDOWS_BALTIC         "windowsbaltic"         /* 7 */
-#define FC_LANG_VIETNAMESE             "vietnamese"            /* 8 */
-/* 9-15 reserved for Alternate ANSI */
-#define FC_LANG_THAI                   "thai"                  /* 16 */
-#define FC_LANG_JAPANESE               "japanese"              /* 17 */
-#define FC_LANG_SIMPLIFIED_CHINESE     "simplifiedchinese"     /* 18 */
-#define FC_LANG_KOREAN_WANSUNG         "koreanwansung"         /* 19 */
-#define FC_LANG_TRADITIONAL_CHINESE    "traditionalchinese"    /* 20 */
-#define FC_LANG_KOREAN_JOHAB           "koreanjohab"           /* 21 */
-/* 22-28 reserved for Alternate ANSI & OEM */
-#define FC_LANG_MACINTOSH              "macintosh"             /* 29 */
-#define FC_LANG_OEM                    "oem"                   /* 30 */
-#define FC_LANG_SYMBOL                 "symbol"                /* 31 */
-/* 32-47 reserved for OEM */
-#define FC_LANG_IBM_GREEK              "ibmgreek"              /* 48 */
-#define FC_LANG_MSDOS_RUSSIAN          "msdosrussian"          /* 49 */
-#define FC_LANG_MSDOS_NORDIC           "msdosnordic"           /* 50 */
-#define FC_LANG_ARABIC_864             "arabic864"             /* 51 */
-#define FC_LANG_MSDOS_CANADIAN_FRENCH  "msdoscanadianfrench"   /* 52 */
-#define FC_LANG_HEBREW_862             "hebrew862"             /* 53 */
-#define FC_LANG_MSDOS_ICELANDIC                "msdosicelandic"        /* 54 */
-#define FC_LANG_MSDOS_PORTUGUESE       "msdosportuguese"       /* 55 */
-#define FC_LANG_IBM_TURKISH            "ibmturkish"            /* 56 */
-#define FC_LANG_IBM_CYRILLIC           "ibmcyrillic"           /* 57 */
-#define FC_LANG_LATIN_2                        "latin2"                /* 58 */
-#define FC_LANG_MSDOS_BALTIC           "msdosbaltic"           /* 59 */
-#define FC_LANG_GREEK_437_G            "greek437g"             /* 60 */
-#define FC_LANG_ARABIC_ASMO_708                "arabicasmo708"         /* 61 */
-#define FC_LANG_WE_LATIN_1             "welatin1"              /* 62 */
-#define FC_LANG_US                     "us"                    /* 63 */
-
+#define FC_RGBA_NONE       5
+
+/* hinting style */
+#define FC_HINT_NONE        0
+#define FC_HINT_SLIGHT      1
+#define FC_HINT_MEDIUM      2
+#define FC_HINT_FULL        3
 typedef enum _FcType {
     FcTypeVoid, 
     FcTypeInteger, 
@@ -148,7 +171,8 @@ typedef enum _FcType {
     FcTypeBool,
     FcTypeMatrix,
     FcTypeCharSet,
-    FcTypeFTFace
+    FcTypeFTFace,
+    FcTypeLangSet
 } FcType;
 
 typedef struct _FcMatrix {
@@ -177,9 +201,14 @@ typedef struct _FcConstant {
 } FcConstant;
 
 typedef enum _FcResult {
-    FcResultMatch, FcResultNoMatch, FcResultTypeMismatch, FcResultNoId
+    FcResultMatch, FcResultNoMatch, FcResultTypeMismatch, FcResultNoId,
+    FcResultOutOfMemory
 } FcResult;
 
+typedef struct _FcPattern   FcPattern;
+
+typedef struct _FcLangSet   FcLangSet;
+
 typedef struct _FcValue {
     FcType     type;
     union {
@@ -190,11 +219,11 @@ typedef struct _FcValue {
        const FcMatrix  *m;
        const FcCharSet *c;
        void            *f;
+       const FcPattern *p;
+       const FcLangSet *l;
     } u;
 } FcValue;
 
-typedef struct _FcPattern   FcPattern;
-
 typedef struct _FcFontSet {
     int                nfont;
     int                sfont;
@@ -208,9 +237,13 @@ typedef struct _FcObjectSet {
 } FcObjectSet;
     
 typedef enum _FcMatchKind {
-    FcMatchPattern, FcMatchFont 
+    FcMatchPattern, FcMatchFont, FcMatchScan
 } FcMatchKind;
 
+typedef enum _FcLangResult {
+    FcLangEqual, FcLangDifferentCountry, FcLangDifferentLang
+} FcLangResult;
+
 typedef enum _FcSetName {
     FcSetSystem = 0,
     FcSetApplication = 1
@@ -226,9 +259,11 @@ typedef struct _FcAtomic FcAtomic;
 #define _FCFUNCPROTOEND
 #endif
 
+typedef enum { FcEndianBig, FcEndianLittle } FcEndian;
+
 typedef struct _FcConfig    FcConfig;
 
-typedef struct _FcFileCache FcFileCache;
+typedef struct _FcGlobalCache  FcFileCache;
 
 typedef struct _FcBlanks    FcBlanks;
 
@@ -238,6 +273,9 @@ typedef struct _FcStrSet    FcStrSet;
 
 _FCFUNCPROTOBEGIN
 
+FcBool
+FcDirCacheValid (const FcChar8 *cache_file);
+
 /* fcblanks.c */
 FcBlanks *
 FcBlanksCreate (void);
@@ -252,6 +290,12 @@ FcBool
 FcBlanksIsMember (FcBlanks *b, FcChar32 ucs4);
 
 /* fccfg.c */
+FcChar8 *
+FcConfigHome (void);
+
+FcBool
+FcConfigEnableHome (FcBool enable);
+
 FcChar8 *
 FcConfigFilename (const FcChar8 *url);
     
@@ -309,6 +353,12 @@ FcConfigAppFontAddDir (FcConfig        *config,
 void
 FcConfigAppFontClear (FcConfig     *config);
 
+FcBool
+FcConfigSubstituteWithPat (FcConfig    *config,
+                          FcPattern    *p,
+                          FcPattern    *p_pat,
+                          FcMatchKind  kind);
+
 FcBool
 FcConfigSubstitute (FcConfig   *config,
                    FcPattern   *p,
@@ -370,13 +420,13 @@ FcCharSetNextPage (const FcCharSet  *a,
 
 /* fcdbg.c */
 void
-FcValuePrint (FcValue v);
+FcValuePrint (const FcValue v);
 
 void
-FcPatternPrint (FcPattern *p);
+FcPatternPrint (const FcPattern *p);
 
 void
-FcFontSetPrint (FcFontSet *s);
+FcFontSetPrint (const FcFontSet *s);
 
 /* fcdefault.c */
 void
@@ -402,9 +452,6 @@ FcDirScan (FcFontSet            *set,
 FcBool
 FcDirSave (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir);
 
-FcBool
-FcDirCacheValid (const FcChar8 *dir);
-
 /* fcfreetype.c */
 FcPattern *
 FcFreeTypeQuery (const FcChar8 *file, int id, FcBlanks *blanks, int *count);
@@ -430,6 +477,9 @@ FcInitLoadConfigAndFonts (void);
 FcBool
 FcInit (void);
 
+void
+FcFini (void);
+
 int
 FcGetVersion (void);
 
@@ -439,6 +489,34 @@ FcInitReinitialize (void);
 FcBool
 FcInitBringUptoDate (void);
 
+/* fclang.c */
+FcLangSet *
+FcLangSetCreate (void);
+
+void
+FcLangSetDestroy (FcLangSet *ls);
+
+FcLangSet *
+FcLangSetCopy (const FcLangSet *ls);
+
+FcBool
+FcLangSetAdd (FcLangSet *ls, const FcChar8 *lang);
+
+FcLangResult
+FcLangSetHasLang (const FcLangSet *ls, const FcChar8 *lang);
+
+FcLangResult
+FcLangSetCompare (const FcLangSet *lsa, const FcLangSet *lsb);
+
+FcBool
+FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb);
+
+FcBool
+FcLangSetEqual (const FcLangSet *lsa, const FcLangSet *lsb);
+
+FcChar32
+FcLangSetHash (const FcLangSet *ls);
+
 /* fclist.c */
 FcObjectSet *
 FcObjectSetCreate (void);
@@ -453,7 +531,7 @@ FcObjectSet *
 FcObjectSetVaBuild (const char *first, va_list va);
 
 FcObjectSet *
-FcObjectSetBuild (const char *first, ...);
+FcObjectSetBuild (const char *first, ...) FC_ATTRIBUTE_SENTINEL(0);
 
 FcFontSet *
 FcFontSetList (FcConfig            *config,
@@ -583,7 +661,10 @@ FcPattern *
 FcPatternCreate (void);
 
 FcPattern *
-FcPatternDuplicate (FcPattern *p);
+FcPatternDuplicate (const FcPattern *p);
+
+void
+FcPatternReference (FcPattern *p);
 
 void
 FcValueDestroy (FcValue v);
@@ -609,12 +690,18 @@ FcPatternHash (const FcPattern *p);
 FcBool
 FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append);
     
+FcBool
+FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append);
+    
 FcResult
-FcPatternGet (FcPattern *p, const char *object, int id, FcValue *v);
+FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v);
     
 FcBool
 FcPatternDel (FcPattern *p, const char *object);
 
+FcBool
+FcPatternRemove (FcPattern *p, const char *object, int id);
+
 FcBool
 FcPatternAddInteger (FcPattern *p, const char *object, int i);
 
@@ -633,29 +720,35 @@ FcPatternAddCharSet (FcPattern *p, const char *object, const FcCharSet *c);
 FcBool
 FcPatternAddBool (FcPattern *p, const char *object, FcBool b);
 
+FcBool
+FcPatternAddLangSet (FcPattern *p, const char *object, const FcLangSet *ls);
+
+FcResult
+FcPatternGetInteger (const FcPattern *p, const char *object, int n, int *i);
+
 FcResult
-FcPatternGetInteger (FcPattern *p, const char *object, int n, int *i);
+FcPatternGetDouble (const FcPattern *p, const char *object, int n, double *d);
 
 FcResult
-FcPatternGetDouble (FcPattern *p, const char *object, int n, double *d);
+FcPatternGetString (const FcPattern *p, const char *object, int n, FcChar8 ** s);
 
 FcResult
-FcPatternGetString (FcPattern *p, const char *object, int n, FcChar8 ** s);
+FcPatternGetMatrix (const FcPattern *p, const char *object, int n, FcMatrix **s);
 
 FcResult
-FcPatternGetMatrix (FcPattern *p, const char *object, int n, FcMatrix **s);
+FcPatternGetCharSet (const FcPattern *p, const char *object, int n, FcCharSet **c);
 
 FcResult
-FcPatternGetCharSet (FcPattern *p, const char *object, int n, FcCharSet **c);
+FcPatternGetBool (const FcPattern *p, const char *object, int n, FcBool *b);
 
 FcResult
-FcPatternGetBool (FcPattern *p, const char *object, int n, FcBool *b);
+FcPatternGetLangSet (const FcPattern *p, const char *object, int n, FcLangSet **ls);
 
 FcPattern *
 FcPatternVaBuild (FcPattern *orig, va_list va);
     
 FcPattern *
-FcPatternBuild (FcPattern *orig, ...);
+FcPatternBuild (FcPattern *orig, ...) FC_ATTRIBUTE_SENTINEL(0);
 
 /* fcstr.c */
 
@@ -665,7 +758,13 @@ FcStrCopy (const FcChar8 *s);
 FcChar8 *
 FcStrCopyFilename (const FcChar8 *s);
     
-#define FcToLower(c)   (('A' <= (c) && (c) <= 'Z') ? (c) - 'A' + 'a' : (c))
+/* These are ASCII only, suitable only for pattern element names */
+#define FcIsUpper(c)   ((0101 <= (c) && (c) <= 0132))
+#define FcIsLower(c)   ((0141 <= (c) && (c) <= 0172))
+#define FcToLower(c)   (FcIsUpper(c) ? (c) - 0101 + 0141 : (c))
+
+FcChar8 *
+FcStrDowncase (const FcChar8 *s);
 
 int
 FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
@@ -673,16 +772,41 @@ FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
 int
 FcStrCmp (const FcChar8 *s1, const FcChar8 *s2);
 
+const FcChar8 *
+FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
+
+const FcChar8 *
+FcStrStr (const FcChar8 *s1, const FcChar8 *s2);
+
 int
-FcUtf8ToUcs4 (FcChar8   *src_orig,
-             FcChar32  *dst,
-             int       len);
+FcUtf8ToUcs4 (const FcChar8 *src_orig,
+             FcChar32      *dst,
+             int           len);
 
 FcBool
-FcUtf8Len (FcChar8     *string,
-          int          len,
-          int          *nchar,
-          int          *wchar);
+FcUtf8Len (const FcChar8    *string,
+          int              len,
+          int              *nchar,
+          int              *wchar);
+
+#define FC_UTF8_MAX_LEN        6
+
+int
+FcUcs4ToUtf8 (FcChar32 ucs4,
+             FcChar8   dest[FC_UTF8_MAX_LEN]);
+
+int
+FcUtf16ToUcs4 (const FcChar8   *src_orig,
+              FcEndian         endian,
+              FcChar32         *dst,
+              int              len);       /* in bytes */
+
+FcBool
+FcUtf16Len (const FcChar8   *string,
+           FcEndian        endian,
+           int             len,            /* in bytes */
+           int             *nchar,
+           int             *wchar);
 
 FcChar8 *
 FcStrDirname (const FcChar8 *file);
@@ -696,6 +820,9 @@ FcStrSetCreate (void);
 FcBool
 FcStrSetMember (FcStrSet *set, const FcChar8 *s);
 
+FcBool
+FcStrSetEqual (FcStrSet *sa, FcStrSet *sb);
+
 FcBool
 FcStrSetAdd (FcStrSet *set, const FcChar8 *s);
 
@@ -723,4 +850,6 @@ FcConfigParseAndLoad (FcConfig *config, const FcChar8 *file, FcBool complain);
 
 _FCFUNCPROTOEND
 
+#undef FC_ATTRIBUTE_SENTINEL
+
 #endif /* _FONTCONFIG_H_ */