1 /*
   2  * $RCSId: xc/lib/fontconfig/fontconfig/fontconfig.h,v 1.30 2002/09/26 00:17:27 keithp Exp $
   3  *
   4  * Copyright © 2001 Keith Packard
   5  *
   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.
  15  *
  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.
  23  */
  24 
  25 #ifndef _FONTCONFIG_H_
  26 #define _FONTCONFIG_H_
  27 
  28 #include <sys/types.h>
  29 #include <sys/stat.h>
  30 #include <unistd.h>
  31 #include <stdarg.h>
  32 
  33 #if defined(__GNUC__) && (__GNUC__ >= 4)
  34 #define FC_ATTRIBUTE_SENTINEL(x) __attribute__((__sentinel__(0)))
  35 #else
  36 #define FC_ATTRIBUTE_SENTINEL(x)
  37 #endif
  38 
  39 #ifndef FcPublic
  40 #define FcPublic
  41 #endif
  42 
  43 typedef unsigned char   FcChar8;
  44 typedef unsigned short  FcChar16;
  45 typedef unsigned int    FcChar32;
  46 typedef int             FcBool;
  47 
  48 /*
  49  * Current Fontconfig version number.  This same number
  50  * must appear in the fontconfig configure.in file. Yes,
  51  * it'a a pain to synchronize version numbers like this.
  52  */
  53 
  54 #define FC_MAJOR        2
  55 #define FC_MINOR        5
  56 #define FC_REVISION     0
  57 
  58 #define FC_VERSION      ((FC_MAJOR * 10000) + (FC_MINOR * 100) + (FC_REVISION))
  59 
  60 /*
  61  * Current font cache file format version
  62  * This is appended to the cache files so that multiple
  63  * versions of the library will peacefully coexist
  64  *
  65  * Change this value whenever the disk format for the cache file
  66  * changes in any non-compatible way.  Try to avoid such changes as
  67  * it means multiple copies of the font information.
  68  */
  69 
  70 #define FC_CACHE_VERSION    "2"
  71 
  72 #define FcTrue          1
  73 #define FcFalse         0
  74 
  75 #define FC_FAMILY           "family"            /* String */
  76 #define FC_STYLE            "style"             /* String */
  77 #define FC_SLANT            "slant"             /* Int */
  78 #define FC_WEIGHT           "weight"            /* Int */
  79 #define FC_SIZE             "size"              /* Double */
  80 #define FC_ASPECT           "aspect"            /* Double */
  81 #define FC_PIXEL_SIZE       "pixelsize"         /* Double */
  82 #define FC_SPACING          "spacing"           /* Int */
  83 #define FC_FOUNDRY          "foundry"           /* String */
  84 #define FC_ANTIALIAS        "antialias"         /* Bool (depends) */
  85 #define FC_HINTING          "hinting"           /* Bool (true) */
  86 #define FC_HINT_STYLE       "hintstyle"         /* Int */
  87 #define FC_VERTICAL_LAYOUT  "verticallayout"    /* Bool (false) */
  88 #define FC_AUTOHINT         "autohint"          /* Bool (false) */
  89 #define FC_GLOBAL_ADVANCE   "globaladvance"     /* Bool (true) */
  90 #define FC_WIDTH            "width"             /* Int */
  91 #define FC_FILE             "file"              /* String */
  92 #define FC_INDEX            "index"             /* Int */
  93 #define FC_FT_FACE          "ftface"            /* FT_Face */
  94 #define FC_RASTERIZER       "rasterizer"        /* String */
  95 #define FC_OUTLINE          "outline"           /* Bool */
  96 #define FC_SCALABLE         "scalable"          /* Bool */
  97 #define FC_SCALE            "scale"             /* double */
  98 #define FC_DPI              "dpi"               /* double */
  99 #define FC_RGBA             "rgba"              /* Int */
 100 #define FC_MINSPACE         "minspace"          /* Bool use minimum line spacing */
 101 #define FC_SOURCE           "source"            /* String (deprecated) */
 102 #define FC_CHARSET          "charset"           /* CharSet */
 103 #define FC_LANG             "lang"              /* String RFC 3066 langs */
 104 #define FC_FONTVERSION      "fontversion"       /* Int from 'head' table */
 105 #define FC_FULLNAME         "fullname"          /* String */
 106 #define FC_FAMILYLANG       "familylang"        /* String RFC 3066 langs */
 107 #define FC_STYLELANG        "stylelang"         /* String RFC 3066 langs */
 108 #define FC_FULLNAMELANG     "fullnamelang"      /* String RFC 3066 langs */
 109 #define FC_CAPABILITY       "capability"        /* String */
 110 #define FC_FONTFORMAT       "fontformat"        /* String */
 111 #define FC_EMBOLDEN         "embolden"          /* Bool - true if emboldening needed*/
 112 #define FC_EMBEDDED_BITMAP  "embeddedbitmap"    /* Bool - true to enable embedded bitmaps */
 113 #define FC_DECORATIVE       "decorative"        /* Bool - true if style is a decorative variant */
 114 
 115 #define FC_CACHE_SUFFIX             ".cache-"FC_CACHE_VERSION
 116 #define FC_DIR_CACHE_FILE           "fonts.cache-"FC_CACHE_VERSION
 117 #define FC_USER_CACHE_FILE          ".fonts.cache-"FC_CACHE_VERSION
 118 
 119 /* Adjust outline rasterizer */
 120 #define FC_CHAR_WIDTH       "charwidth" /* Int */
 121 #define FC_CHAR_HEIGHT      "charheight"/* Int */
 122 #define FC_MATRIX           "matrix"    /* FcMatrix */
 123 
 124 #define FC_WEIGHT_THIN              0
 125 #define FC_WEIGHT_EXTRALIGHT        40
 126 #define FC_WEIGHT_ULTRALIGHT        FC_WEIGHT_EXTRALIGHT
 127 #define FC_WEIGHT_LIGHT             50
 128 #define FC_WEIGHT_BOOK              75
 129 #define FC_WEIGHT_REGULAR           80
 130 #define FC_WEIGHT_NORMAL            FC_WEIGHT_REGULAR
 131 #define FC_WEIGHT_MEDIUM            100
 132 #define FC_WEIGHT_DEMIBOLD          180
 133 #define FC_WEIGHT_SEMIBOLD          FC_WEIGHT_DEMIBOLD
 134 #define FC_WEIGHT_BOLD              200
 135 #define FC_WEIGHT_EXTRABOLD         205
 136 #define FC_WEIGHT_ULTRABOLD         FC_WEIGHT_EXTRABOLD
 137 #define FC_WEIGHT_BLACK             210
 138 #define FC_WEIGHT_HEAVY             FC_WEIGHT_BLACK
 139 #define FC_WEIGHT_EXTRABLACK        215
 140 #define FC_WEIGHT_ULTRABLACK        FC_WEIGHT_EXTRABLACK
 141 
 142 #define FC_SLANT_ROMAN              0
 143 #define FC_SLANT_ITALIC             100
 144 #define FC_SLANT_OBLIQUE            110
 145 
 146 #define FC_WIDTH_ULTRACONDENSED     50
 147 #define FC_WIDTH_EXTRACONDENSED     63
 148 #define FC_WIDTH_CONDENSED          75
 149 #define FC_WIDTH_SEMICONDENSED      87
 150 #define FC_WIDTH_NORMAL             100
 151 #define FC_WIDTH_SEMIEXPANDED       113
 152 #define FC_WIDTH_EXPANDED           125
 153 #define FC_WIDTH_EXTRAEXPANDED      150
 154 #define FC_WIDTH_ULTRAEXPANDED      200
 155 
 156 #define FC_PROPORTIONAL             0
 157 #define FC_DUAL                     90
 158 #define FC_MONO                     100
 159 #define FC_CHARCELL                 110
 160 
 161 /* sub-pixel order */
 162 #define FC_RGBA_UNKNOWN     0
 163 #define FC_RGBA_RGB         1
 164 #define FC_RGBA_BGR         2
 165 #define FC_RGBA_VRGB        3
 166 #define FC_RGBA_VBGR        4
 167 #define FC_RGBA_NONE        5
 168 
 169 /* hinting style */
 170 #define FC_HINT_NONE        0
 171 #define FC_HINT_SLIGHT      1
 172 #define FC_HINT_MEDIUM      2
 173 #define FC_HINT_FULL        3
 174 
 175 typedef enum _FcType {
 176     FcTypeVoid,
 177     FcTypeInteger,
 178     FcTypeDouble,
 179     FcTypeString,
 180     FcTypeBool,
 181     FcTypeMatrix,
 182     FcTypeCharSet,
 183     FcTypeFTFace,
 184     FcTypeLangSet
 185 } FcType;
 186 
 187 typedef struct _FcMatrix {
 188     double xx, xy, yx, yy;
 189 } FcMatrix;
 190 
 191 #define FcMatrixInit(m) ((m)->xx = (m)->yy = 1, \
 192                          (m)->xy = (m)->yx = 0)
 193 
 194 /*
 195  * A data structure to represent the available glyphs in a font.
 196  * This is represented as a sparse boolean btree.
 197  */
 198 
 199 typedef struct _FcCharSet FcCharSet;
 200 
 201 typedef struct _FcObjectType {
 202     const char  *object;
 203     FcType      type;
 204 } FcObjectType;
 205 
 206 typedef struct _FcConstant {
 207     const FcChar8  *name;
 208     const char  *object;
 209     int         value;
 210 } FcConstant;
 211 
 212 typedef enum _FcResult {
 213     FcResultMatch, FcResultNoMatch, FcResultTypeMismatch, FcResultNoId,
 214     FcResultOutOfMemory
 215 } FcResult;
 216 
 217 typedef struct _FcPattern   FcPattern;
 218 
 219 typedef struct _FcLangSet   FcLangSet;
 220 
 221 typedef struct _FcValue {
 222     FcType      type;
 223     union {
 224         const FcChar8   *s;
 225         int             i;
 226         FcBool          b;
 227         double          d;
 228         const FcMatrix  *m;
 229         const FcCharSet *c;
 230         void            *f;
 231         const FcLangSet *l;
 232     } u;
 233 } FcValue;
 234 
 235 typedef struct _FcFontSet {
 236     int         nfont;
 237     int         sfont;
 238     FcPattern   **fonts;
 239 } FcFontSet;
 240 
 241 typedef struct _FcObjectSet {
 242     int         nobject;
 243     int         sobject;
 244     const char  **objects;
 245 } FcObjectSet;
 246 
 247 typedef enum _FcMatchKind {
 248     FcMatchPattern, FcMatchFont, FcMatchScan
 249 } FcMatchKind;
 250 
 251 typedef enum _FcLangResult {
 252     FcLangEqual = 0,
 253     FcLangDifferentCountry = 1,
 254     FcLangDifferentTerritory = 1,
 255     FcLangDifferentLang = 2
 256 } FcLangResult;
 257 
 258 typedef enum _FcSetName {
 259     FcSetSystem = 0,
 260     FcSetApplication = 1
 261 } FcSetName;
 262 
 263 typedef struct _FcAtomic FcAtomic;
 264 
 265 #if defined(__cplusplus) || defined(c_plusplus) /* for C++ V2.0 */
 266 #define _FCFUNCPROTOBEGIN extern "C" {  /* do not leave open across includes */
 267 #define _FCFUNCPROTOEND }
 268 #else
 269 #define _FCFUNCPROTOBEGIN
 270 #define _FCFUNCPROTOEND
 271 #endif
 272 
 273 typedef enum { FcEndianBig, FcEndianLittle } FcEndian;
 274 
 275 typedef struct _FcConfig    FcConfig;
 276 
 277 typedef struct _FcGlobalCache   FcFileCache;
 278 
 279 typedef struct _FcBlanks    FcBlanks;
 280 
 281 typedef struct _FcStrList   FcStrList;
 282 
 283 typedef struct _FcStrSet    FcStrSet;
 284 
 285 typedef struct _FcCache     FcCache;
 286 
 287 _FCFUNCPROTOBEGIN
 288 
 289 /* fcblanks.c */
 290 FcPublic FcBlanks *
 291 FcBlanksCreate (void);
 292 
 293 FcPublic void
 294 FcBlanksDestroy (FcBlanks *b);
 295 
 296 FcPublic FcBool
 297 FcBlanksAdd (FcBlanks *b, FcChar32 ucs4);
 298 
 299 FcPublic FcBool
 300 FcBlanksIsMember (FcBlanks *b, FcChar32 ucs4);
 301 
 302 /* fccache.c */
 303 
 304 FcPublic const FcChar8 *
 305 FcCacheDir(const FcCache *c);
 306 
 307 FcPublic FcFontSet *
 308 FcCacheCopySet(const FcCache *c);
 309 
 310 FcPublic const FcChar8 *
 311 FcCacheSubdir (const FcCache *c, int i);
 312 
 313 FcPublic int
 314 FcCacheNumSubdir (const FcCache *c);
 315 
 316 FcPublic int
 317 FcCacheNumFont (const FcCache *c);
 318 
 319 FcPublic FcBool
 320 FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config);
 321 
 322 FcPublic FcBool
 323 FcDirCacheValid (const FcChar8 *cache_file);
 324 
 325 /* fccfg.c */
 326 FcPublic FcChar8 *
 327 FcConfigHome (void);
 328 
 329 FcPublic FcBool
 330 FcConfigEnableHome (FcBool enable);
 331 
 332 FcPublic FcChar8 *
 333 FcConfigFilename (const FcChar8 *url);
 334 
 335 FcPublic FcConfig *
 336 FcConfigCreate (void);
 337 
 338 FcPublic void
 339 FcConfigDestroy (FcConfig *config);
 340 
 341 FcPublic FcBool
 342 FcConfigSetCurrent (FcConfig *config);
 343 
 344 FcPublic FcConfig *
 345 FcConfigGetCurrent (void);
 346 
 347 FcPublic FcBool
 348 FcConfigUptoDate (FcConfig *config);
 349 
 350 FcPublic FcBool
 351 FcConfigBuildFonts (FcConfig *config);
 352 
 353 FcPublic FcStrList *
 354 FcConfigGetFontDirs (FcConfig   *config);
 355 
 356 FcPublic FcStrList *
 357 FcConfigGetConfigDirs (FcConfig   *config);
 358 
 359 FcPublic FcStrList *
 360 FcConfigGetConfigFiles (FcConfig    *config);
 361 
 362 FcPublic FcChar8 *
 363 FcConfigGetCache (FcConfig  *config);
 364 
 365 FcPublic FcBlanks *
 366 FcConfigGetBlanks (FcConfig *config);
 367 
 368 FcPublic FcStrList *
 369 FcConfigGetCacheDirs (FcConfig  *config);
 370 
 371 FcPublic int
 372 FcConfigGetRescanInterval (FcConfig *config);
 373 
 374 FcPublic FcBool
 375 FcConfigSetRescanInterval (FcConfig *config, int rescanInterval);
 376 
 377 FcPublic FcFontSet *
 378 FcConfigGetFonts (FcConfig      *config,
 379                   FcSetName     set);
 380 
 381 FcPublic FcBool
 382 FcConfigAppFontAddFile (FcConfig    *config,
 383                         const FcChar8  *file);
 384 
 385 FcPublic FcBool
 386 FcConfigAppFontAddDir (FcConfig     *config,
 387                        const FcChar8   *dir);
 388 
 389 FcPublic void
 390 FcConfigAppFontClear (FcConfig      *config);
 391 
 392 FcPublic FcBool
 393 FcConfigSubstituteWithPat (FcConfig     *config,
 394                            FcPattern    *p,
 395                            FcPattern    *p_pat,
 396                            FcMatchKind  kind);
 397 
 398 FcPublic FcBool
 399 FcConfigSubstitute (FcConfig    *config,
 400                     FcPattern   *p,
 401                     FcMatchKind kind);
 402 
 403 /* fccharset.c */
 404 FcPublic FcCharSet*
 405 FcCharSetCreate (void);
 406 
 407 /* deprecated alias for FcCharSetCreate */
 408 FcPublic FcCharSet *
 409 FcCharSetNew (void);
 410 
 411 FcPublic void
 412 FcCharSetDestroy (FcCharSet *fcs);
 413 
 414 FcPublic FcBool
 415 FcCharSetAddChar (FcCharSet *fcs, FcChar32 ucs4);
 416 
 417 FcPublic FcCharSet*
 418 FcCharSetCopy (FcCharSet *src);
 419 
 420 FcPublic FcBool
 421 FcCharSetEqual (const FcCharSet *a, const FcCharSet *b);
 422 
 423 FcPublic FcCharSet*
 424 FcCharSetIntersect (const FcCharSet *a, const FcCharSet *b);
 425 
 426 FcPublic FcCharSet*
 427 FcCharSetUnion (const FcCharSet *a, const FcCharSet *b);
 428 
 429 FcPublic FcCharSet*
 430 FcCharSetSubtract (const FcCharSet *a, const FcCharSet *b);
 431 
 432 FcPublic FcBool
 433 FcCharSetHasChar (const FcCharSet *fcs, FcChar32 ucs4);
 434 
 435 FcPublic FcChar32
 436 FcCharSetCount (const FcCharSet *a);
 437 
 438 FcPublic FcChar32
 439 FcCharSetIntersectCount (const FcCharSet *a, const FcCharSet *b);
 440 
 441 FcPublic FcChar32
 442 FcCharSetSubtractCount (const FcCharSet *a, const FcCharSet *b);
 443 
 444 FcPublic FcBool
 445 FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b);
 446 
 447 #define FC_CHARSET_MAP_SIZE (256/32)
 448 #define FC_CHARSET_DONE ((FcChar32) -1)
 449 
 450 FcPublic FcChar32
 451 FcCharSetFirstPage (const FcCharSet *a,
 452                     FcChar32        map[FC_CHARSET_MAP_SIZE],
 453                     FcChar32        *next);
 454 
 455 FcPublic FcChar32
 456 FcCharSetNextPage (const FcCharSet  *a,
 457                    FcChar32         map[FC_CHARSET_MAP_SIZE],
 458                    FcChar32         *next);
 459 
 460 /*
 461  * old coverage API, rather hard to use correctly
 462  */
 463 
 464 FcPublic FcChar32
 465 FcCharSetCoverage (const FcCharSet *a, FcChar32 page, FcChar32 *result);
 466 
 467 /* fcdbg.c */
 468 FcPublic void
 469 FcValuePrint (const FcValue v);
 470 
 471 FcPublic void
 472 FcPatternPrint (const FcPattern *p);
 473 
 474 FcPublic void
 475 FcFontSetPrint (const FcFontSet *s);
 476 
 477 /* fcdefault.c */
 478 FcPublic void
 479 FcDefaultSubstitute (FcPattern *pattern);
 480 
 481 /* fcdir.c */
 482 FcPublic FcBool
 483 FcFileIsDir (const FcChar8 *file);
 484 
 485 FcPublic FcBool
 486 FcFileScan (FcFontSet       *set,
 487             FcStrSet        *dirs,
 488             FcFileCache     *cache,
 489             FcBlanks        *blanks,
 490             const FcChar8   *file,
 491             FcBool          force);
 492 
 493 FcPublic FcBool
 494 FcDirScan (FcFontSet        *set,
 495            FcStrSet         *dirs,
 496            FcFileCache      *cache,
 497            FcBlanks         *blanks,
 498            const FcChar8    *dir,
 499            FcBool           force);
 500 
 501 FcPublic FcBool
 502 FcDirSave (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir);
 503 
 504 FcPublic FcCache *
 505 FcDirCacheLoad (const FcChar8 *dir, FcConfig *config, FcChar8 **cache_file);
 506 
 507 FcPublic FcCache *
 508 FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config);
 509 
 510 FcPublic FcCache *
 511 FcDirCacheLoadFile (const FcChar8 *cache_file, struct stat *file_stat);
 512 
 513 FcPublic void
 514 FcDirCacheUnload (FcCache *cache);
 515 
 516 /* fcfreetype.c */
 517 FcPublic FcPattern *
 518 FcFreeTypeQuery (const FcChar8 *file, int id, FcBlanks *blanks, int *count);
 519 
 520 /* fcfs.c */
 521 
 522 FcPublic FcFontSet *
 523 FcFontSetCreate (void);
 524 
 525 FcPublic void
 526 FcFontSetDestroy (FcFontSet *s);
 527 
 528 FcPublic FcBool
 529 FcFontSetAdd (FcFontSet *s, FcPattern *font);
 530 
 531 /* fcinit.c */
 532 FcPublic FcConfig *
 533 FcInitLoadConfig (void);
 534 
 535 FcPublic FcConfig *
 536 FcInitLoadConfigAndFonts (void);
 537 
 538 FcPublic FcBool
 539 FcInit (void);
 540 
 541 FcPublic void
 542 FcFini (void);
 543 
 544 FcPublic int
 545 FcGetVersion (void);
 546 
 547 FcPublic FcBool
 548 FcInitReinitialize (void);
 549 
 550 FcPublic FcBool
 551 FcInitBringUptoDate (void);
 552 
 553 /* fclang.c */
 554 FcPublic FcStrSet *
 555 FcGetLangs (void);
 556 
 557 FcPublic const FcCharSet *
 558 FcLangGetCharSet (const FcChar8 *lang);
 559 
 560 FcPublic FcLangSet*
 561 FcLangSetCreate (void);
 562 
 563 FcPublic void
 564 FcLangSetDestroy (FcLangSet *ls);
 565 
 566 FcPublic FcLangSet*
 567 FcLangSetCopy (const FcLangSet *ls);
 568 
 569 FcPublic FcBool
 570 FcLangSetAdd (FcLangSet *ls, const FcChar8 *lang);
 571 
 572 FcPublic FcLangResult
 573 FcLangSetHasLang (const FcLangSet *ls, const FcChar8 *lang);
 574 
 575 FcPublic FcLangResult
 576 FcLangSetCompare (const FcLangSet *lsa, const FcLangSet *lsb);
 577 
 578 FcPublic FcBool
 579 FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb);
 580 
 581 FcPublic FcBool
 582 FcLangSetEqual (const FcLangSet *lsa, const FcLangSet *lsb);
 583 
 584 FcPublic FcChar32
 585 FcLangSetHash (const FcLangSet *ls);
 586 
 587 /* fclist.c */
 588 FcPublic FcObjectSet *
 589 FcObjectSetCreate (void);
 590 
 591 FcPublic FcBool
 592 FcObjectSetAdd (FcObjectSet *os, const char *object);
 593 
 594 FcPublic void
 595 FcObjectSetDestroy (FcObjectSet *os);
 596 
 597 FcPublic FcObjectSet *
 598 FcObjectSetVaBuild (const char *first, va_list va);
 599 
 600 FcPublic FcObjectSet *
 601 FcObjectSetBuild (const char *first, ...) FC_ATTRIBUTE_SENTINEL(0);
 602 
 603 FcPublic FcFontSet *
 604 FcFontSetList (FcConfig     *config,
 605                FcFontSet    **sets,
 606                int          nsets,
 607                FcPattern    *p,
 608                FcObjectSet  *os);
 609 
 610 FcPublic FcFontSet *
 611 FcFontList (FcConfig    *config,
 612             FcPattern   *p,
 613             FcObjectSet *os);
 614 
 615 /* fcatomic.c */
 616 
 617 FcPublic FcAtomic *
 618 FcAtomicCreate (const FcChar8   *file);
 619 
 620 FcPublic FcBool
 621 FcAtomicLock (FcAtomic *atomic);
 622 
 623 FcPublic FcChar8 *
 624 FcAtomicNewFile (FcAtomic *atomic);
 625 
 626 FcPublic FcChar8 *
 627 FcAtomicOrigFile (FcAtomic *atomic);
 628 
 629 FcPublic FcBool
 630 FcAtomicReplaceOrig (FcAtomic *atomic);
 631 
 632 FcPublic void
 633 FcAtomicDeleteNew (FcAtomic *atomic);
 634 
 635 FcPublic void
 636 FcAtomicUnlock (FcAtomic *atomic);
 637 
 638 FcPublic void
 639 FcAtomicDestroy (FcAtomic *atomic);
 640 
 641 /* fcmatch.c */
 642 FcPublic FcPattern *
 643 FcFontSetMatch (FcConfig    *config,
 644                 FcFontSet   **sets,
 645                 int         nsets,
 646                 FcPattern   *p,
 647                 FcResult    *result);
 648 
 649 FcPublic FcPattern *
 650 FcFontMatch (FcConfig   *config,
 651              FcPattern  *p,
 652              FcResult   *result);
 653 
 654 FcPublic FcPattern *
 655 FcFontRenderPrepare (FcConfig       *config,
 656                      FcPattern      *pat,
 657                      FcPattern      *font);
 658 
 659 FcPublic FcFontSet *
 660 FcFontSetSort (FcConfig     *config,
 661                FcFontSet    **sets,
 662                int          nsets,
 663                FcPattern    *p,
 664                FcBool       trim,
 665                FcCharSet    **csp,
 666                FcResult     *result);
 667 
 668 FcPublic FcFontSet *
 669 FcFontSort (FcConfig     *config,
 670             FcPattern    *p,
 671             FcBool       trim,
 672             FcCharSet    **csp,
 673             FcResult     *result);
 674 
 675 FcPublic void
 676 FcFontSetSortDestroy (FcFontSet *fs);
 677 
 678 /* fcmatrix.c */
 679 FcPublic FcMatrix *
 680 FcMatrixCopy (const FcMatrix *mat);
 681 
 682 FcPublic FcBool
 683 FcMatrixEqual (const FcMatrix *mat1, const FcMatrix *mat2);
 684 
 685 FcPublic void
 686 FcMatrixMultiply (FcMatrix *result, const FcMatrix *a, const FcMatrix *b);
 687 
 688 FcPublic void
 689 FcMatrixRotate (FcMatrix *m, double c, double s);
 690 
 691 FcPublic void
 692 FcMatrixScale (FcMatrix *m, double sx, double sy);
 693 
 694 FcPublic void
 695 FcMatrixShear (FcMatrix *m, double sh, double sv);
 696 
 697 /* fcname.c */
 698 
 699 FcPublic FcBool
 700 FcNameRegisterObjectTypes (const FcObjectType *types, int ntype);
 701 
 702 FcPublic FcBool
 703 FcNameUnregisterObjectTypes (const FcObjectType *types, int ntype);
 704 
 705 FcPublic const FcObjectType *
 706 FcNameGetObjectType (const char *object);
 707 
 708 FcPublic FcBool
 709 FcNameRegisterConstants (const FcConstant *consts, int nconsts);
 710 
 711 FcPublic FcBool
 712 FcNameUnregisterConstants (const FcConstant *consts, int nconsts);
 713 
 714 FcPublic const FcConstant *
 715 FcNameGetConstant (FcChar8 *string);
 716 
 717 FcPublic FcBool
 718 FcNameConstant (FcChar8 *string, int *result);
 719 
 720 FcPublic FcPattern *
 721 FcNameParse (const FcChar8 *name);
 722 
 723 FcPublic FcChar8 *
 724 FcNameUnparse (FcPattern *pat);
 725 
 726 /* fcpat.c */
 727 FcPublic FcPattern *
 728 FcPatternCreate (void);
 729 
 730 FcPublic FcPattern *
 731 FcPatternDuplicate (const FcPattern *p);
 732 
 733 FcPublic void
 734 FcPatternReference (FcPattern *p);
 735 
 736 FcPublic void
 737 FcValueDestroy (FcValue v);
 738 
 739 FcPublic FcBool
 740 FcValueEqual (FcValue va, FcValue vb);
 741 
 742 FcPublic FcValue
 743 FcValueSave (FcValue v);
 744 
 745 FcPublic void
 746 FcPatternDestroy (FcPattern *p);
 747 
 748 FcPublic FcBool
 749 FcPatternEqual (const FcPattern *pa, const FcPattern *pb);
 750 
 751 FcPublic FcBool
 752 FcPatternEqualSubset (const FcPattern *pa, const FcPattern *pb, const FcObjectSet *os);
 753 
 754 FcPublic FcChar32
 755 FcPatternHash (const FcPattern *p);
 756 
 757 FcPublic FcBool
 758 FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append);
 759 
 760 FcPublic FcBool
 761 FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append);
 762 
 763 FcPublic FcResult
 764 FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v);
 765 
 766 FcPublic FcBool
 767 FcPatternDel (FcPattern *p, const char *object);
 768 
 769 FcPublic FcBool
 770 FcPatternRemove (FcPattern *p, const char *object, int id);
 771 
 772 FcPublic FcBool
 773 FcPatternAddInteger (FcPattern *p, const char *object, int i);
 774 
 775 FcPublic FcBool
 776 FcPatternAddDouble (FcPattern *p, const char *object, double d);
 777 
 778 FcPublic FcBool
 779 FcPatternAddString (FcPattern *p, const char *object, const FcChar8 *s);
 780 
 781 FcPublic FcBool
 782 FcPatternAddMatrix (FcPattern *p, const char *object, const FcMatrix *s);
 783 
 784 FcPublic FcBool
 785 FcPatternAddCharSet (FcPattern *p, const char *object, const FcCharSet *c);
 786 
 787 FcPublic FcBool
 788 FcPatternAddBool (FcPattern *p, const char *object, FcBool b);
 789 
 790 FcPublic FcBool
 791 FcPatternAddLangSet (FcPattern *p, const char *object, const FcLangSet *ls);
 792 
 793 FcPublic FcResult
 794 FcPatternGetInteger (const FcPattern *p, const char *object, int n, int *i);
 795 
 796 FcPublic FcResult
 797 FcPatternGetDouble (const FcPattern *p, const char *object, int n, double *d);
 798 
 799 FcPublic FcResult
 800 FcPatternGetString (const FcPattern *p, const char *object, int n, FcChar8 ** s);
 801 
 802 FcPublic FcResult
 803 FcPatternGetMatrix (const FcPattern *p, const char *object, int n, FcMatrix **s);
 804 
 805 FcPublic FcResult
 806 FcPatternGetCharSet (const FcPattern *p, const char *object, int n, FcCharSet **c);
 807 
 808 FcPublic FcResult
 809 FcPatternGetBool (const FcPattern *p, const char *object, int n, FcBool *b);
 810 
 811 FcPublic FcResult
 812 FcPatternGetLangSet (const FcPattern *p, const char *object, int n, FcLangSet **ls);
 813 
 814 FcPublic FcPattern *
 815 FcPatternVaBuild (FcPattern *orig, va_list va);
 816 
 817 FcPublic FcPattern *
 818 FcPatternBuild (FcPattern *orig, ...) FC_ATTRIBUTE_SENTINEL(0);
 819 
 820 /* fcstr.c */
 821 
 822 FcPublic FcChar8 *
 823 FcStrCopy (const FcChar8 *s);
 824 
 825 FcPublic FcChar8 *
 826 FcStrCopyFilename (const FcChar8 *s);
 827 
 828 FcPublic FcChar8 *
 829 FcStrPlus (const FcChar8 *s1, const FcChar8 *s2);
 830 
 831 FcPublic void
 832 FcStrFree (FcChar8 *s);
 833 
 834 /* These are ASCII only, suitable only for pattern element names */
 835 #define FcIsUpper(c)    ((0101 <= (c) && (c) <= 0132))
 836 #define FcIsLower(c)    ((0141 <= (c) && (c) <= 0172))
 837 #define FcToLower(c)    (FcIsUpper(c) ? (c) - 0101 + 0141 : (c))
 838 
 839 FcPublic FcChar8 *
 840 FcStrDowncase (const FcChar8 *s);
 841 
 842 FcPublic int
 843 FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
 844 
 845 FcPublic int
 846 FcStrCmp (const FcChar8 *s1, const FcChar8 *s2);
 847 
 848 FcPublic const FcChar8 *
 849 FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
 850 
 851 FcPublic const FcChar8 *
 852 FcStrStr (const FcChar8 *s1, const FcChar8 *s2);
 853 
 854 FcPublic int
 855 FcUtf8ToUcs4 (const FcChar8 *src_orig,
 856               FcChar32      *dst,
 857               int           len);
 858 
 859 FcPublic FcBool
 860 FcUtf8Len (const FcChar8    *string,
 861            int              len,
 862            int              *nchar,
 863            int              *wchar);
 864 
 865 #define FC_UTF8_MAX_LEN 6
 866 
 867 FcPublic int
 868 FcUcs4ToUtf8 (FcChar32  ucs4,
 869               FcChar8   dest[FC_UTF8_MAX_LEN]);
 870 
 871 FcPublic int
 872 FcUtf16ToUcs4 (const FcChar8    *src_orig,
 873                FcEndian         endian,
 874                FcChar32         *dst,
 875                int              len);       /* in bytes */
 876 
 877 FcPublic FcBool
 878 FcUtf16Len (const FcChar8   *string,
 879             FcEndian        endian,
 880             int             len,            /* in bytes */
 881             int             *nchar,
 882             int             *wchar);
 883 
 884 FcPublic FcChar8 *
 885 FcStrDirname (const FcChar8 *file);
 886 
 887 FcPublic FcChar8 *
 888 FcStrBasename (const FcChar8 *file);
 889 
 890 FcPublic FcStrSet *
 891 FcStrSetCreate (void);
 892 
 893 FcPublic FcBool
 894 FcStrSetMember (FcStrSet *set, const FcChar8 *s);
 895 
 896 FcPublic FcBool
 897 FcStrSetEqual (FcStrSet *sa, FcStrSet *sb);
 898 
 899 FcPublic FcBool
 900 FcStrSetAdd (FcStrSet *set, const FcChar8 *s);
 901 
 902 FcPublic FcBool
 903 FcStrSetAddFilename (FcStrSet *set, const FcChar8 *s);
 904 
 905 FcPublic FcBool
 906 FcStrSetDel (FcStrSet *set, const FcChar8 *s);
 907 
 908 FcPublic void
 909 FcStrSetDestroy (FcStrSet *set);
 910 
 911 FcPublic FcStrList *
 912 FcStrListCreate (FcStrSet *set);
 913 
 914 FcPublic FcChar8 *
 915 FcStrListNext (FcStrList *list);
 916 
 917 FcPublic void
 918 FcStrListDone (FcStrList *list);
 919 
 920 /* fcxml.c */
 921 FcPublic FcBool
 922 FcConfigParseAndLoad (FcConfig *config, const FcChar8 *file, FcBool complain);
 923 
 924 _FCFUNCPROTOEND
 925 
 926 #undef FC_ATTRIBUTE_SENTINEL
 927 
 928 
 929 #ifndef _FCINT_H_
 930 
 931 /*
 932  * Deprecated functions are placed here to help users fix their code without
 933  * digging through documentation
 934  */
 935 
 936 #define FcConfigGetRescanInverval   FcConfigGetRescanInverval_REPLACE_BY_FcConfigGetRescanInterval
 937 #define FcConfigSetRescanInverval   FcConfigSetRescanInverval_REPLACE_BY_FcConfigSetRescanInterval
 938 
 939 #endif
 940 
 941 #endif /* _FONTCONFIG_H_ */