2 * $RCSId: xc/lib/fontconfig/src/fcint.h,v 1.27 2002/08/31 22:17:32 keithp Exp $
4 * Copyright © 2000 Keith Packard
6 * Permission to use, copy, modify, distribute, and sell this software and its
7 * documentation for any purpose is hereby granted without fee, provided that
8 * the above copyright notice appear in all copies and that both that
9 * copyright notice and this permission notice appear in supporting
10 * documentation, and that the name of Keith Packard not be used in
11 * advertising or publicity pertaining to distribution of the software without
12 * specific, written prior permission. Keith Packard makes no
13 * representations about the suitability of this software for any purpose. It
14 * is provided "as is" without express or implied warranty.
16 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
17 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
18 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
19 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
20 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
21 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
22 * PERFORMANCE OF THIS SOFTWARE.
34 #include <sys/types.h>
37 #include <fontconfig/fontconfig.h>
38 #include <fontconfig/fcprivate.h>
39 #include <fontconfig/fcfreetype.h>
44 typedef struct _FcSymbolic {
49 #ifndef FC_CONFIG_PATH
50 #define FC_CONFIG_PATH "fonts.conf"
53 #define FC_FONT_FILE_INVALID ((FcChar8 *) ".")
54 #define FC_FONT_FILE_DIR ((FcChar8 *) ".dir")
57 #define FC_SEARCH_PATH_SEPARATOR ';'
59 #define FC_SEARCH_PATH_SEPARATOR ':'
62 #define FC_DBG_MATCH 1
63 #define FC_DBG_MATCHV 2
65 #define FC_DBG_FONTSET 8
66 #define FC_DBG_CACHE 16
67 #define FC_DBG_CACHEV 32
68 #define FC_DBG_PARSE 64
69 #define FC_DBG_SCAN 128
70 #define FC_DBG_SCANV 256
71 #define FC_DBG_MEMORY 512
73 #define FC_MEM_CHARSET 0
74 #define FC_MEM_CHARLEAF 1
75 #define FC_MEM_FONTSET 2
76 #define FC_MEM_FONTPTR 3
77 #define FC_MEM_OBJECTSET 4
78 #define FC_MEM_OBJECTPTR 5
79 #define FC_MEM_MATRIX 6
80 #define FC_MEM_PATTERN 7
81 #define FC_MEM_PATELT 8
82 #define FC_MEM_VALLIST 9
83 #define FC_MEM_SUBSTATE 10
84 #define FC_MEM_STRING 11
85 #define FC_MEM_LISTBUCK 12
86 #define FC_MEM_STRSET 13
87 #define FC_MEM_STRLIST 14
88 #define FC_MEM_CONFIG 15
89 #define FC_MEM_LANGSET 16
90 #define FC_MEM_ATOMIC 17
91 #define FC_MEM_BLANKS 18
92 #define FC_MEM_CACHE 19
93 #define FC_MEM_STRBUF 20
94 #define FC_MEM_SUBST 21
95 #define FC_MEM_OBJECTTYPE 22
96 #define FC_MEM_CONSTANT 23
97 #define FC_MEM_TEST 24
98 #define FC_MEM_EXPR 25
99 #define FC_MEM_VSTACK 26
100 #define FC_MEM_ATTR 27
101 #define FC_MEM_PSTACK 28
103 #define FC_MEM_NUM 29
105 typedef enum _FcValueBinding {
106 FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame
109 typedef struct _FcValueList {
110 struct _FcValueList *next;
112 FcValueBinding binding;
115 typedef struct _FcPatternElt {
129 FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpBool, FcOpCharSet,
131 FcOpField, FcOpConst,
132 FcOpAssign, FcOpAssignReplace,
133 FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast,
135 FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual, FcOpContains, FcOpNotContains,
136 FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual,
137 FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide,
138 FcOpNot, FcOpComma, FcOpFloor, FcOpCeil, FcOpRound, FcOpTrunc,
142 typedef struct _FcExpr {
154 struct _FcExpr *left, *right;
159 typedef enum _FcQual {
160 FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst
163 #define FcMatchDefault ((FcMatchKind) -1)
165 typedef struct _FcTest {
166 struct _FcTest *next;
174 typedef struct _FcEdit {
175 struct _FcEdit *next;
179 FcValueBinding binding;
182 typedef struct _FcSubst {
183 struct _FcSubst *next;
188 typedef struct _FcCharLeaf {
189 FcChar32 map[256/32];
192 #define FC_REF_CONSTANT -1
195 int ref; /* reference count */
196 int num; /* size of leaves and numbers arrays */
202 int ref; /* reference count */
213 typedef struct _FcStrBuf {
222 * To map adobe glyph names to unicode values, a precomputed hash
226 typedef struct _FcGlyphName {
227 FcChar32 ucs; /* unicode value */
228 FcChar8 name[1]; /* name extends beyond struct */
232 * The per-user ~/.fonts.cache-<version> file is loaded into
233 * this data structure. Each directory gets a substructure
234 * which is validated by comparing the directory timestamp with
235 * that saved in the cache. When valid, the entire directory cache
236 * can be immediately loaded without reading the directory. Otherwise,
237 * the files are checked individually; updated files are loaded into the
238 * cache which is then rewritten to the users home directory
241 #define FC_GLOBAL_CACHE_DIR_HASH_SIZE 37
242 #define FC_GLOBAL_CACHE_FILE_HASH_SIZE 67
244 typedef struct _FcGlobalCacheInfo {
251 typedef struct _FcGlobalCacheFile {
252 struct _FcGlobalCacheFile *next;
253 FcGlobalCacheInfo info;
258 typedef struct _FcGlobalCacheDir FcGlobalCacheDir;
260 typedef struct _FcGlobalCacheSubdir {
261 struct _FcGlobalCacheSubdir *next;
262 FcGlobalCacheDir *ent;
263 } FcGlobalCacheSubdir;
265 struct _FcGlobalCacheDir {
266 struct _FcGlobalCacheDir *next;
267 FcGlobalCacheInfo info;
269 FcGlobalCacheFile *ents[FC_GLOBAL_CACHE_FILE_HASH_SIZE];
270 FcGlobalCacheSubdir *subdirs;
273 typedef struct _FcGlobalCache {
274 FcGlobalCacheDir *ents[FC_GLOBAL_CACHE_DIR_HASH_SIZE];
282 FcChar8 *file; /* original file name */
283 FcChar8 *new; /* temp file name -- write data here */
284 FcChar8 *lck; /* lockfile name (used for locking) */
285 FcChar8 *tmp; /* tmpfile name (used for locking) */
296 * File names loaded from the configuration -- saved here as the
297 * cache file must be consulted before the directories are scanned,
298 * and those directives may occur in any order
300 FcStrSet *configDirs; /* directories to scan for fonts */
301 FcChar8 *cache; /* name of per-user cache file */
303 * Set of allowed blank chars -- used to
304 * trim fonts of bogus glyphs
308 * List of directories containing fonts,
309 * built by recursively scanning the set
310 * of configured directories
314 * Names of all of the configuration files used
315 * to create this configuration
317 FcStrSet *configFiles; /* config files loaded */
319 * Substitution instructions for patterns and fonts;
320 * maxObjects is used to allocate appropriate intermediate storage
321 * while performing a whole set of substitutions
323 FcSubst *substPattern; /* substitutions for patterns */
324 FcSubst *substFont; /* substitutions for fonts */
325 int maxObjects; /* maximum number of tests in all substs */
327 * List of patterns used to control font file selection
329 FcStrSet *acceptGlobs;
330 FcStrSet *rejectGlobs;
332 * The set of fonts loaded from the listed directories; the
333 * order within the set does not determine the font selection,
334 * except in the case of identical matches in which case earlier fonts
335 * match preferrentially
337 FcFontSet *fonts[FcSetApplication + 1];
339 * Fontconfig can periodically rescan the system configuration
340 * and font directories. This rescanning occurs when font
341 * listing requests are made, but no more often than rescanInterval
344 time_t rescanTime; /* last time information was scanned */
345 int rescanInterval; /* interval between scans */
348 extern FcConfig *_fcConfig;
350 typedef struct _FcCharMap FcCharMap;
357 FcGlobalCacheCreate (void);
360 FcGlobalCacheDestroy (FcGlobalCache *cache);
363 FcGlobalCacheCheckTime (const FcChar8*file, FcGlobalCacheInfo *info);
366 FcGlobalCacheReferenced (FcGlobalCache *cache,
367 FcGlobalCacheInfo *info);
370 FcGlobalCacheReferenceSubdir (FcGlobalCache *cache,
374 FcGlobalCacheDirGet (FcGlobalCache *cache,
377 FcBool create_missing);
380 FcGlobalCacheScanDir (FcFontSet *set,
382 FcGlobalCache *cache,
387 FcGlobalCacheFileGet (FcGlobalCache *cache,
394 FcGlobalCacheLoad (FcGlobalCache *cache,
395 const FcChar8 *cache_file);
398 FcGlobalCacheUpdate (FcGlobalCache *cache,
401 const FcChar8 *name);
404 FcGlobalCacheSave (FcGlobalCache *cache,
405 const FcChar8 *cache_file);
408 FcDirCacheReadDir (FcFontSet *set,
414 FcDirCacheWriteDir (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir);
419 FcConfigAddConfigDir (FcConfig *config,
423 FcConfigAddFontDir (FcConfig *config,
427 FcConfigAddDir (FcConfig *config,
431 FcConfigAddConfigFile (FcConfig *config,
435 FcConfigSetCache (FcConfig *config,
439 FcConfigAddBlank (FcConfig *config,
443 FcConfigAddEdit (FcConfig *config,
449 FcConfigSetFonts (FcConfig *config,
454 FcConfigCompareValue (const FcValue m,
459 FcConfigGlobAdd (FcConfig *config,
464 FcConfigAcceptFilename (FcConfig *config,
465 const FcChar8 *filename);
469 FcCharSetFreeze (FcCharSet *cs);
472 FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c);
475 FcNameParseCharSet (FcChar8 *string);
478 FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4);
482 FcValueListPrint (const FcValueList *l);
485 FcLangSetPrint (const FcLangSet *ls);
491 FcTestPrint (const FcTest *test);
494 FcExprPrint (const FcExpr *expr);
497 FcEditPrint (const FcEdit *edit);
500 FcSubstPrint (const FcSubst *subst);
508 FcFileScanConfig (FcFontSet *set,
517 FcDirScanConfig (FcFontSet *set,
531 FcFreeTypeIsExclusiveLang (const FcChar8 *lang);
534 FcFreeTypeHasLang (FcPattern *pattern, const FcChar8 *lang);
537 FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map);
540 FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map);
543 FcFreeTypeGetPrivateMap (FT_Encoding encoding);
548 FcConfigparse (void);
554 FcConfigerror (char *fmt, ...);
557 FcConfigSaveField (const char *field);
560 FcTestCreate (FcMatchKind kind,
562 const FcChar8 *field,
567 FcTestDestroy (FcTest *test);
570 FcExprCreateInteger (int i);
573 FcExprCreateDouble (double d);
576 FcExprCreateString (const FcChar8 *s);
579 FcExprCreateMatrix (const FcMatrix *m);
582 FcExprCreateBool (FcBool b);
585 FcExprCreateNil (void);
588 FcExprCreateField (const char *field);
591 FcExprCreateConst (const FcChar8 *constant);
594 FcExprCreateOp (FcExpr *left, FcOp op, FcExpr *right);
597 FcExprDestroy (FcExpr *e);
600 FcEditCreate (const char *field, FcOp op, FcExpr *expr, FcValueBinding binding);
603 FcEditDestroy (FcEdit *e);
611 FcMemAlloc (int kind, int size);
614 FcMemFree (int kind, int size);
618 FcFreeTypeLangSet (const FcCharSet *charset,
619 const FcChar8 *exclusiveLang);
622 FcLangCompare (const FcChar8 *s1, const FcChar8 *s2);
625 FcCharSetForLang (const FcChar8 *lang);
628 FcLangSetPromote (const FcChar8 *lang);
631 FcNameParseLangSet (const FcChar8 *string);
634 FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls);
643 FcNameBool (FcChar8 *v, FcBool *result);
647 FcValueListDestroy (FcValueList *l);
650 FcPatternFindElt (const FcPattern *p, const char *object);
653 FcPatternInsertElt (FcPattern *p, const char *object);
656 FcPatternAddWithBinding (FcPattern *p,
659 FcValueBinding binding,
663 FcPatternFreeze (FcPattern *p);
669 extern const FcMatrix FcIdentityMatrix;
672 FcMatrixFree (FcMatrix *mat);
676 FcStrPlus (const FcChar8 *s1, const FcChar8 *s2);
679 FcStrFree (FcChar8 *s);
682 FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size);
685 FcStrBufDestroy (FcStrBuf *buf);
688 FcStrBufDone (FcStrBuf *buf);
691 FcStrBufChar (FcStrBuf *buf, FcChar8 c);
694 FcStrBufString (FcStrBuf *buf, const FcChar8 *s);
697 FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len);
700 FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
703 FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
706 FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
709 FcStrUsesHome (const FcChar8 *s);
712 FcStrLastSlash (const FcChar8 *path);
714 #endif /* _FC_INT_H_ */