{$mode objfpc} {$H+} {$IFNDEF FPC_DOTTEDUNITS} unit libfontconfig; {$ENDIF FPC_DOTTEDUNITS} { Automatically converted by H2Pas 1.0.0 from fc.h The following command line parameters were used: -l libfontconfig.so -P -p -S -T -C -c fc.h } interface {$IFDEF FPC_DOTTEDUNITS} uses System.CTypes; {$ELSE FPC_DOTTEDUNITS} uses ctypes; {$ENDIF FPC_DOTTEDUNITS} Const {$ifndef darwin} DefaultLibName = 'libfontconfig.so'; {$else} DefaultLibName = 'libfontconfig.dylib'; {$endif} const FC_MAJOR = 2; FC_MINOR = 11; FC_REVISION = 94; FC_VERSION = ((FC_MAJOR * 10000) + (FC_MINOR * 100) + (FC_REVISION)); FC_CACHE_VERSION_NUMBER = 6; FC_CACHE_VERSION = '6'; // Stringify of FC_CACHE_VERSION_NUMBER FcTrue = 1; FcFalse = 0; FC_FAMILY = 'family'; FC_STYLE = 'style'; FC_SLANT = 'slant'; FC_WEIGHT = 'weight'; FC_SIZE = 'size'; FC_ASPECT = 'aspect'; FC_PIXEL_SIZE = 'pixelsize'; FC_SPACING = 'spacing'; FC_FOUNDRY = 'foundry'; FC_ANTIALIAS = 'antialias'; FC_HINTING = 'hinting'; FC_HINT_STYLE = 'hintstyle'; FC_VERTICAL_LAYOUT = 'verticallayout'; FC_AUTOHINT = 'autohint'; FC_GLOBAL_ADVANCE = 'globaladvance'; FC_WIDTH = 'width'; FC_FILE = 'file'; FC_INDEX = 'index'; FC_FT_FACE = 'ftface'; FC_RASTERIZER = 'rasterizer'; FC_OUTLINE = 'outline'; FC_SCALABLE = 'scalable'; FC_COLOR = 'color'; FC_SCALE = 'scale'; FC_SYMBOL = 'symbol'; FC_DPI = 'dpi'; FC_RGBA = 'rgba'; FC_MINSPACE = 'minspace'; FC_SOURCE = 'source'; FC_CHARSET = 'charset'; FC_LANG = 'lang'; FC_FONTVERSION = 'fontversion'; FC_FULLNAME = 'fullname'; FC_FAMILYLANG = 'familylang'; FC_STYLELANG = 'stylelang'; FC_FULLNAMELANG = 'fullnamelang'; FC_CAPABILITY = 'capability'; FC_FONTFORMAT = 'fontformat'; FC_EMBOLDEN = 'embolden'; FC_EMBEDDED_BITMAP = 'embeddedbitmap'; FC_DECORATIVE = 'decorative'; FC_LCD_FILTER = 'lcdfilter'; FC_FONT_FEATURES = 'fontfeatures'; FC_NAMELANG = 'namelang'; FC_PRGNAME = 'prgname'; FC_HASH = 'hash'; FC_POSTSCRIPT_NAME = 'postscriptname'; FC_CACHE_SUFFIX = '.cache-'+ FC_CACHE_VERSION; FC_DIR_CACHE_FILE = 'fonts.cache-' + FC_CACHE_VERSION; FC_USER_CACHE_FILE= '.fonts.cache-' + FC_CACHE_VERSION; FC_CHAR_WIDTH = 'charwidth'; FC_CHAR_HEIGHT = 'charheight'; FC_MATRIX = 'matrix'; FC_WEIGHT_THIN = 0; FC_WEIGHT_EXTRALIGHT = 40; FC_WEIGHT_ULTRALIGHT = FC_WEIGHT_EXTRALIGHT; FC_WEIGHT_LIGHT = 50; FC_WEIGHT_DEMILIGHT = 55; FC_WEIGHT_SEMILIGHT = FC_WEIGHT_DEMILIGHT; FC_WEIGHT_BOOK = 75; FC_WEIGHT_REGULAR = 80; FC_WEIGHT_NORMAL = FC_WEIGHT_REGULAR; FC_WEIGHT_MEDIUM = 100; FC_WEIGHT_DEMIBOLD = 180; FC_WEIGHT_SEMIBOLD = FC_WEIGHT_DEMIBOLD; FC_WEIGHT_BOLD = 200; FC_WEIGHT_EXTRABOLD = 205; FC_WEIGHT_ULTRABOLD = FC_WEIGHT_EXTRABOLD; FC_WEIGHT_BLACK = 210; FC_WEIGHT_HEAVY = FC_WEIGHT_BLACK; FC_WEIGHT_EXTRABLACK = 215; FC_WEIGHT_ULTRABLACK = FC_WEIGHT_EXTRABLACK; FC_SLANT_ROMAN = 0; FC_SLANT_ITALIC = 100; FC_SLANT_OBLIQUE = 110; FC_WIDTH_ULTRACONDENSED = 50; FC_WIDTH_EXTRACONDENSED = 63; FC_WIDTH_CONDENSED = 75; FC_WIDTH_SEMICONDENSED = 87; FC_WIDTH_NORMAL = 100; FC_WIDTH_SEMIEXPANDED = 113; FC_WIDTH_EXPANDED = 125; FC_WIDTH_EXTRAEXPANDED = 150; FC_WIDTH_ULTRAEXPANDED = 200; FC_PROPORTIONAL = 0; FC_DUAL = 90; FC_MONO = 100; FC_CHARCELL = 110; FC_RGBA_UNKNOWN = 0; FC_RGBA_RGB = 1; FC_RGBA_BGR = 2; FC_RGBA_VRGB = 3; FC_RGBA_VBGR = 4; FC_RGBA_NONE = 5; FC_HINT_NONE = 0; FC_HINT_SLIGHT = 1; FC_HINT_MEDIUM = 2; FC_HINT_FULL = 3; FC_LCD_NONE = 0; FC_LCD_DEFAULT = 1; FC_LCD_LIGHT = 2; FC_LCD_LEGACY = 3; FC_UTF8_MAX_LEN = 6; { Automatically converted by H2Pas 1.0.0 from fc.h The following command line parameters were used: -l libfontconfig.so -P -p -S -T -C -c fc.h } { Pointers to basic pascal types, inserted by h2pas conversion program.} Type PLongint = ^Longint; PSmallInt = ^SmallInt; PByte = ^Byte; PWord = ^Word; PDWord = ^DWord; PDouble = ^Double; PStat = pointer; {$IFDEF FPC} {$PACKRECORDS C} {$ENDIF} PFcAtomic = ^TFcAtomic; TFCAtomic = record end; PPFcAtomic = ^PFcAtomic; PFcConfig = ^TFcConfig; TFcConfig = record end; PPFcConfig = ^PFcConfig; PFcFileCache = ^TFcFileCache; TFcFileCache = record end; PPFcFileCache = ^PFcFileCache; PFcBlanks = ^TFcBlanks; TFcBlanks = record end; PPFcBlanks = ^PFcBlanks; PFcPattern = ^TFcPattern; TFcPattern = record end; PPFcPattern = ^PFcPattern; PFcStrList = ^TFcStrList; TFcStrList = record end; PPFcStrList = ^PFcStrList; PFcStrSet = ^TFcStrSet; TFcStrSet = record end; PPFcStrSet = ^PFcStrSet; PFcCharSet = ^TFcCharSet; TFcCharSet = record end; PPFcCharSet = ^PFcCharSet; PFcLangSet = ^TFcLangSet; TFcLangSet = record end; PPFcLangSet = ^PFcLangSet; PFcRange = ^TFcRange; TFcRange = record end; PPFcRange = ^PFcRange; PFcCache = ^TFcCache; TFcCache = record end; PPFcCache = ^PFcCache; PFcChar8 = PAnsiChar; TFcChar8 = AnsiChar; PPFcChar8 = PPAnsiChar; PFcChar16 = PWideChar; TFcChar16 = WideChar; PPFcChar16 = ^PFcChar16; PFcChar32 = ^TFcChar32; TFcChar32 = cuint; PFcBool = ^TFcBool; TFcBool = cint; PFcType = ^TFcType; TFcType = (FcTypeUnknown := -(1),FcTypeVoid,FcTypeInteger, FcTypeDouble,FcTypeString,FcTypeBool,FcTypeMatrix, FcTypeCharSet,FcTypeFTFace,FcTypeLangSet, FcTypeRange); PFcMatrix = ^TFcMatrix; TFcMatrix = record xx : double; xy : double; yx : double; yy : double; end; PPFcMatrix = ^PFcMatrix; PFcObjectType = ^TFcObjectType; TFcObjectType = record _object : pcchar; _type : TFcType; end; PPFcObjectType = ^PFcObjectType; PFcConstant = ^TFcConstant; TFcConstant = record name : PFcChar8; _object : pcchar; value : cint; end; PPFcConstant = ^PFcConstant; PFcResult = ^TFcResult; TFcResult = (FcResultMatch,FcResultNoMatch,FcResultTypeMismatch, FcResultNoId,FcResultOutOfMemory); PFcValue = ^TFcValue; TFcValue = record _type : TFcType; u : record case longint of 0 : ( s : PFcChar8 ); 1 : ( i : cint ); 2 : ( b : TFcBool ); 3 : ( d : double ); 4 : ( m : PFcMatrix ); 5 : ( c : PFcCharSet ); 6 : ( f : pointer ); 7 : ( l : PFcLangSet ); 8 : ( r : PFcRange ); end; end; PPFcValue = ^PFcValue; PFcFontSet = ^TFcFontSet; TFcFontSet = record nfont : cint; sfont : cint; fonts : ^PFcPattern; end; PPFcFontSet = ^PFcFontSet; PFcObjectSet = ^TFcObjectSet; TFcObjectSet = record nobject : cint; sobject : cint; objects : ^pcchar; end; PPFcObjectSet = ^PFcObjectSet; PFcMatchKind = ^TFcMatchKind; TFcMatchKind = (FcMatchPattern,FcMatchFont,FcMatchScan); PFcLangResult = ^TFcLangResult; TFcLangResult = (FcLangEqual := 0,FcLangDifferentCountry := 1, FcLangDifferentTerritory := 1,FcLangDifferentLang := 2); PFcSetName = ^TFcSetName; TFcSetName = (FcSetSystem := 0,FcSetApplication := 1); PFcEndian = ^TFcEndian; TFcEndian = (FcEndianBig,FcEndianLittle); TFcGlobalCache = TFcFileCache; TFcCharMap = array[0..7] of TFcChar32; TUTF8Array = array[0..5] of TFcChar8; var FcBlanksCreate : function:PFcBlanks; FcBlanksDestroy : procedure(b:PFcBlanks); FcBlanksAdd : function(b:PFcBlanks; ucs4:TFcChar32):TFcBool; FcBlanksIsMember : function(b:PFcBlanks; ucs4:TFcChar32):TFcBool; FcCacheDir : function(c:PFcCache):PFcChar8; FcCacheCopySet : function(c:PFcCache):PFcFontSet; FcCacheSubdir : function(c:PFcCache; i:cint):PFcChar8; FcCacheNumSubdir : function(c:PFcCache):cint; FcCacheNumFont : function(c:PFcCache):cint; FcDirCacheUnlink : function(dir:PFcChar8; config:PFcConfig):TFcBool; FcDirCacheValid : function(cache_file:PFcChar8):TFcBool; FcDirCacheClean : function(cache_dir:PFcChar8; verbose:TFcBool):TFcBool; FcCacheCreateTagFile : procedure(config:PFcConfig); FcConfigHome : function:PFcChar8; FcConfigEnableHome : function(enable:TFcBool):TFcBool; FcConfigFilename : function(url:PFcChar8):PFcChar8; FcConfigCreate : function:PFcConfig; FcConfigReference : function(config:PFcConfig):PFcConfig; FcConfigDestroy : procedure(config:PFcConfig); FcConfigSetCurrent : function(config:PFcConfig):TFcBool; FcConfigGetCurrent : function:PFcConfig; FcConfigUptoDate : function(config:PFcConfig):TFcBool; FcConfigBuildFonts : function(config:PFcConfig):TFcBool; FcConfigGetFontDirs : function(config:PFcConfig):PFcStrList; FcConfigGetConfigDirs : function(config:PFcConfig):PFcStrList; FcConfigGetConfigFiles : function(config:PFcConfig):PFcStrList; FcConfigGetCache : function(config:PFcConfig):PFcChar8; FcConfigGetBlanks : function(config:PFcConfig):PFcBlanks; FcConfigGetCacheDirs : function(config:PFcConfig):PFcStrList; FcConfigGetRescanInterval : function(config:PFcConfig):cint; FcConfigSetRescanInterval : function(config:PFcConfig; rescanInterval:cint):TFcBool; FcConfigGetFonts : function(config:PFcConfig; aset:TFcSetName):PFcFontSet; FcConfigAppFontAddFile : function(config:PFcConfig; afile:PFcChar8):TFcBool; FcConfigAppFontAddDir : function(config:PFcConfig; dir:PFcChar8):TFcBool; FcConfigAppFontClear : procedure(config:PFcConfig); FcConfigSubstituteWithPat : function(config:PFcConfig; p:PFcPattern; p_pat:PFcPattern; kind:TFcMatchKind):TFcBool; FcConfigSubstitute : function(config:PFcConfig; p:PFcPattern; kind:TFcMatchKind):TFcBool; FcConfigGetSysRoot : function(config:PFcConfig):PFcChar8; FcConfigSetSysRoot : procedure(config:PFcConfig; sysroot:PFcChar8); FcCharSetCreate : function:PFcCharSet; FcCharSetNew : function:PFcCharSet; FcCharSetDestroy : procedure(fcs:PFcCharSet); FcCharSetAddChar : function(fcs:PFcCharSet; ucs4:TFcChar32):TFcBool; FcCharSetDelChar : function(fcs:PFcCharSet; ucs4:TFcChar32):TFcBool; FcCharSetCopy : function(src:PFcCharSet):PFcCharSet; FcCharSetEqual : function(a:PFcCharSet; b:PFcCharSet):TFcBool; FcCharSetIntersect : function(a:PFcCharSet; b:PFcCharSet):PFcCharSet; FcCharSetUnion : function(a:PFcCharSet; b:PFcCharSet):PFcCharSet; FcCharSetSubtract : function(a:PFcCharSet; b:PFcCharSet):PFcCharSet; FcCharSetMerge : function(a:PFcCharSet; b:PFcCharSet; changed:PFcBool):TFcBool; FcCharSetHasChar : function(fcs:PFcCharSet; ucs4:TFcChar32):TFcBool; FcCharSetCount : function(a:PFcCharSet):TFcChar32; FcCharSetIntersectCount : function(a:PFcCharSet; b:PFcCharSet):TFcChar32; FcCharSetSubtractCount : function(a:PFcCharSet; b:PFcCharSet):TFcChar32; FcCharSetIsSubset : function(a:PFcCharSet; b:PFcCharSet):TFcBool; FcCharSetFirstPage : function(a:PFcCharSet; map:TFcCharMap; next:PFcChar32):TFcChar32; FcCharSetNextPage : function(a:PFcCharSet; map:TFcCharMap; next:PFcChar32):TFcChar32; FcCharSetCoverage : function(a:PFcCharSet; page:TFcChar32; result:PFcChar32):TFcChar32; FcValuePrint : procedure(v:TFcValue); FcPatternPrint : procedure(p:PFcPattern); FcFontSetPrint : procedure(s:PFcFontSet); FcGetDefaultLangs : function:PFcStrSet; FcDefaultSubstitute : procedure(pattern:PFcPattern); FcFileIsDir : function(afile:PFcChar8):TFcBool; FcFileScan : function(aset:PFcFontSet; dirs:PFcStrSet; cache:PFcFileCache; blanks:PFcBlanks; afile:PFcChar8; force:TFcBool):TFcBool; FcDirScan : function(aset:PFcFontSet; dirs:PFcStrSet; cache:PFcFileCache; blanks:PFcBlanks; dir:PFcChar8; force:TFcBool):TFcBool; FcDirSave : function(aset:PFcFontSet; dirs:PFcStrSet; dir:PFcChar8):TFcBool; FcDirCacheLoad : function(dir:PFcChar8; config:PFcConfig; cache_file:PPFcChar8):PFcCache; FcDirCacheRescan : function(dir:PFcChar8; config:PFcConfig):PFcCache; FcDirCacheRead : function(dir:PFcChar8; force:TFcBool; config:PFcConfig):PFcCache; FcDirCacheLoadFile : function(cache_file:PFcChar8; file_stat:Pstat):PFcCache; FcDirCacheUnload : procedure(cache:PFcCache); FcFreeTypeQuery : function(afile:PFcChar8; id:cint; blanks:PFcBlanks; count:pcint):PFcPattern; FcFontSetCreate : function:PFcFontSet; FcFontSetDestroy : procedure(s:PFcFontSet); FcFontSetAdd : function(s:PFcFontSet; font:PFcPattern):TFcBool; FcInitLoadConfig : function:PFcConfig; FcInitLoadConfigAndFonts : function:PFcConfig; FcInit : function:TFcBool; FcFini : procedure; FcGetVersion : function:cint; FcInitReinitialize : function:TFcBool; FcInitBringUptoDate : function:TFcBool; FcGetLangs : function:PFcStrSet; FcLangNormalize : function(lang:PFcChar8):PFcChar8; FcLangGetCharSet : function(lang:PFcChar8):PFcCharSet; FcLangSetCreate : function:PFcLangSet; FcLangSetDestroy : procedure(ls:PFcLangSet); FcLangSetCopy : function(ls:PFcLangSet):PFcLangSet; FcLangSetAdd : function(ls:PFcLangSet; lang:PFcChar8):TFcBool; FcLangSetDel : function(ls:PFcLangSet; lang:PFcChar8):TFcBool; FcLangSetHasLang : function(ls:PFcLangSet; lang:PFcChar8):TFcLangResult; FcLangSetCompare : function(lsa:PFcLangSet; lsb:PFcLangSet):TFcLangResult; FcLangSetContains : function(lsa:PFcLangSet; lsb:PFcLangSet):TFcBool; FcLangSetEqual : function(lsa:PFcLangSet; lsb:PFcLangSet):TFcBool; FcLangSetHash : function(ls:PFcLangSet):TFcChar32; FcLangSetGetLangs : function(ls:PFcLangSet):PFcStrSet; FcLangSetUnion : function(a:PFcLangSet; b:PFcLangSet):PFcLangSet; FcLangSetSubtract : function(a:PFcLangSet; b:PFcLangSet):PFcLangSet; FcObjectSetCreate : function:PFcObjectSet; FcObjectSetAdd : function(os:PFcObjectSet; _object:pcchar):TFcBool; FcObjectSetDestroy : procedure(os:PFcObjectSet); FcObjectSetBuild : function(first:pcchar; args:array of const):PFcObjectSet; FcFontSetList : function(config:PFcConfig; sets:PPFcFontSet; nsets:cint; p:PFcPattern; os:PFcObjectSet):PFcFontSet; FcFontList : function(config:PFcConfig; p:PFcPattern; os:PFcObjectSet):PFcFontSet; FcAtomicCreate : function(afile:PFcChar8):PFcAtomic; FcAtomicLock : function(atomic:PFcAtomic):TFcBool; FcAtomicNewFile : function(atomic:PFcAtomic):PFcChar8; FcAtomicOrigFile : function(atomic:PFcAtomic):PFcChar8; FcAtomicReplaceOrig : function(atomic:PFcAtomic):TFcBool; FcAtomicDeleteNew : procedure(atomic:PFcAtomic); FcAtomicUnlock : procedure(atomic:PFcAtomic); FcAtomicDestroy : procedure(atomic:PFcAtomic); FcFontSetMatch : function(config:PFcConfig; sets:PPFcFontSet; nsets:cint; p:PFcPattern; result:PFcResult):PFcPattern; FcFontMatch : function(config:PFcConfig; p:PFcPattern; result:PFcResult):PFcPattern; FcFontRenderPrepare : function(config:PFcConfig; pat:PFcPattern; font:PFcPattern):PFcPattern; FcFontSetSort : function(config:PFcConfig; sets:PPFcFontSet; nsets:cint; p:PFcPattern; trim:TFcBool; csp:PPFcCharSet; result:PFcResult):PFcFontSet; FcFontSort : function(config:PFcConfig; p:PFcPattern; trim:TFcBool; csp:PPFcCharSet; result:PFcResult):PFcFontSet; FcFontSetSortDestroy : procedure(fs:PFcFontSet); FcMatrixCopy : function(mat:PFcMatrix):PFcMatrix; FcMatrixEqual : function(mat1:PFcMatrix; mat2:PFcMatrix):TFcBool; FcMatrixMultiply : procedure(result:PFcMatrix; a:PFcMatrix; b:PFcMatrix); FcMatrixRotate : procedure(m:PFcMatrix; c:double; s:double); FcMatrixScale : procedure(m:PFcMatrix; sx:double; sy:double); FcMatrixShear : procedure(m:PFcMatrix; sh:double; sv:double); FcNameRegisterObjectTypes : function(types:PFcObjectType; ntype:cint):TFcBool; FcNameUnregisterObjectTypes : function(types:PFcObjectType; ntype:cint):TFcBool; FcNameGetObjectType : function(_object:pcchar):PFcObjectType; FcNameRegisterConstants : function(consts:PFcConstant; nconsts:cint):TFcBool; FcNameUnregisterConstants : function(consts:PFcConstant; nconsts:cint):TFcBool; FcNameGetConstant : function(_string:PFcChar8):PFcConstant; FcNameConstant : function(_string:PFcChar8; result:pcint):TFcBool; FcNameParse : function(name:PFcChar8):PFcPattern; FcNameUnparse : function(pat:PFcPattern):PFcChar8; FcPatternCreate : function:PFcPattern; FcPatternDuplicate : function(p:PFcPattern):PFcPattern; FcPatternReference : procedure(p:PFcPattern); FcPatternFilter : function(p:PFcPattern; os:PFcObjectSet):PFcPattern; FcValueDestroy : procedure(v:TFcValue); FcValueEqual : function(va:TFcValue; vb:TFcValue):TFcBool; FcValueSave : function(v:TFcValue):TFcValue; FcPatternDestroy : procedure(p:PFcPattern); FcPatternEqual : function(pa:PFcPattern; pb:PFcPattern):TFcBool; FcPatternEqualSubset : function(pa:PFcPattern; pb:PFcPattern; os:PFcObjectSet):TFcBool; FcPatternHash : function(p:PFcPattern):TFcChar32; FcPatternAdd : function(p:PFcPattern; _object:pcchar; value:TFcValue; append:TFcBool):TFcBool; FcPatternAddWeak : function(p:PFcPattern; _object:pcchar; value:TFcValue; append:TFcBool):TFcBool; FcPatternGet : function(p:PFcPattern; _object:pcchar; id:cint; v:PFcValue):TFcResult; FcPatternDel : function(p:PFcPattern; _object:pcchar):TFcBool; FcPatternRemove : function(p:PFcPattern; _object:pcchar; id:cint):TFcBool; FcPatternAddInteger : function(p:PFcPattern; _object:pcchar; i:cint):TFcBool; FcPatternAddDouble : function(p:PFcPattern; _object:pcchar; d:double):TFcBool; FcPatternAddString : function(p:PFcPattern; _object:pcchar; s:PFcChar8):TFcBool; FcPatternAddMatrix : function(p:PFcPattern; _object:pcchar; s:PFcMatrix):TFcBool; FcPatternAddCharSet : function(p:PFcPattern; _object:pcchar; c:PFcCharSet):TFcBool; FcPatternAddBool : function(p:PFcPattern; _object:pcchar; b:TFcBool):TFcBool; FcPatternAddLangSet : function(p:PFcPattern; _object:pcchar; ls:PFcLangSet):TFcBool; FcPatternAddRange : function(p:PFcPattern; _object:pcchar; r:PFcRange):TFcBool; FcPatternGetInteger : function(p:PFcPattern; _object:pcchar; n:cint; i:pcint):TFcResult; FcPatternGetDouble : function(p:PFcPattern; _object:pcchar; n:cint; d:Pdouble):TFcResult; FcPatternGetString : function(p:PFcPattern; _object:pcchar; n:cint; s:PPFcChar8):TFcResult; FcPatternGetMatrix : function(p:PFcPattern; _object:pcchar; n:cint; s:PPFcMatrix):TFcResult; FcPatternGetCharSet : function(p:PFcPattern; _object:pcchar; n:cint; c:PPFcCharSet):TFcResult; FcPatternGetBool : function(p:PFcPattern; _object:pcchar; n:cint; b:PFcBool):TFcResult; FcPatternGetLangSet : function(p:PFcPattern; _object:pcchar; n:cint; ls:PPFcLangSet):TFcResult; FcPatternGetRange : function(p:PFcPattern; _object:pcchar; id:cint; r:PPFcRange):TFcResult; FcPatternBuild : function(p:PFcPattern; args:array of const):PFcPattern; FcPatternFormat : function(pat:PFcPattern; format:PFcChar8):PFcChar8; FcRangeCreateDouble : function(_begin:double; _end:double):PFcRange; FcRangeCreateInteger : function(_begin:TFcChar32; _end:TFcChar32):PFcRange; FcRangeDestroy : procedure(range:PFcRange); FcRangeCopy : function(r:PFcRange):PFcRange; FcRangeGetDouble : function(range:PFcRange; _begin:Pdouble; _end:Pdouble):TFcBool; FcWeightFromOpenType : function(ot_weight:cint):cint; FcWeightToOpenType : function(fc_weight:cint):cint; FcStrCopy : function(s:PFcChar8):PFcChar8; FcStrCopyFilename : function(s:PFcChar8):PFcChar8; FcStrPlus : function(s1:PFcChar8; s2:PFcChar8):PFcChar8; FcStrFree : procedure(s:PFcChar8); FcStrDowncase : function(s:PFcChar8):PFcChar8; FcStrCmpIgnoreCase : function(s1:PFcChar8; s2:PFcChar8):cint; FcStrCmp : function(s1:PFcChar8; s2:PFcChar8):cint; FcStrStrIgnoreCase : function(s1:PFcChar8; s2:PFcChar8):PFcChar8; FcStrStr : function(s1:PFcChar8; s2:PFcChar8):PFcChar8; FcUtf8ToUcs4 : function(src_orig:PFcChar8; dst:PFcChar32; len:cint):cint; FcUtf8Len : function(_string:PFcChar8; len:cint; nchar:pcint; wchar:pcint):TFcBool; FcUcs4ToUtf8 : function(ucs4:TFcChar32; dest: TUTF8Array):cint; FcUtf16ToUcs4 : function(src_orig:PFcChar8; endian:TFcEndian; dst:PFcChar32; len:cint):cint; FcUtf16Len : function(_string:PFcChar8; endian:TFcEndian; len:cint; nchar:pcint; wchar:pcint):TFcBool; FcStrDirname : function(afile:PFcChar8):PFcChar8; FcStrBasename : function(afile:PFcChar8):PFcChar8; FcStrSetCreate : function:PFcStrSet; FcStrSetMember : function(aset:PFcStrSet; s:PFcChar8):TFcBool; FcStrSetEqual : function(sa:PFcStrSet; sb:PFcStrSet):TFcBool; FcStrSetAdd : function(aset:PFcStrSet; s:PFcChar8):TFcBool; FcStrSetAddFilename : function(aset:PFcStrSet; s:PFcChar8):TFcBool; FcStrSetDel : function(aset:PFcStrSet; s:PFcChar8):TFcBool; FcStrSetDestroy : procedure(aset:PFcStrSet); FcStrListCreate : function(aset:PFcStrSet):PFcStrList; FcStrListFirst : procedure(list:PFcStrList); FcStrListNext : function(list:PFcStrList):PFcChar8; FcStrListDone : procedure(list:PFcStrList); FcConfigParseAndLoad : function(config:PFcConfig; afile:PFcChar8; complain:TFcBool):TFcBool; // Macros Procedure FcMatrixInit(out m : TFCMatrix); function FC_CHARSET_DONE : TFcChar32; function FcIsUpper(c : longint) : Boolean; function FcIsLower(c : longint) : Boolean; function FcToLower(c : longint) : longint; Function LoadFontConfigLib(Const ALibName : String; RaiseError : Boolean = True) : Integer; Function UnLoadFontConfigLib : Integer; Function FontConfigLibLoaded : Boolean; implementation {$IFDEF FPC_DOTTEDUNITS} uses System.SysUtils; {$ELSE FPC_DOTTEDUNITS} uses SysUtils; {$ENDIF FPC_DOTTEDUNITS} Procedure FcMatrixInit(out m : TFCMatrix); begin m.xx:=1; m.yy:=1; end; function FC_CHARSET_DONE : TFcChar32; begin FC_CHARSET_DONE:=TFcChar32(-(1)); end; function FcIsUpper(c : longint) : boolean; begin FcIsUpper:=(Ord('A')<=c) and (c<=Ord('Z')); end; function FcIsLower(c : longint) : boolean; begin FcIsLower:=(Ord('a')<=c) and (c<=Ord('z')); end; function FcToLower(c : longint) : longint; var if_local1 : longint; begin if FcIsUpper(c) then if_local1:=c-Ord('A')+Ord('a') else if_local1:=c; FcToLower:=if_local1; end; var hlib : tlibhandle; hcount : integer; loadedlib : string; Function FontConfigLibLoaded : Boolean; begin Result:=hLib<>NilHandle; end; procedure Freefc; begin if hlib<>NilHandle then FreeLibrary(hlib); hlib:=NilHandle; FcBlanksCreate:=nil; FcBlanksDestroy:=nil; FcBlanksAdd:=nil; FcBlanksIsMember:=nil; FcCacheDir:=nil; FcCacheCopySet:=nil; FcCacheSubdir:=nil; FcCacheNumSubdir:=nil; FcCacheNumFont:=nil; FcDirCacheUnlink:=nil; FcDirCacheValid:=nil; FcDirCacheClean:=nil; FcCacheCreateTagFile:=nil; FcConfigHome:=nil; FcConfigEnableHome:=nil; FcConfigFilename:=nil; FcConfigCreate:=nil; FcConfigReference:=nil; FcConfigDestroy:=nil; FcConfigSetCurrent:=nil; FcConfigGetCurrent:=nil; FcConfigUptoDate:=nil; FcConfigBuildFonts:=nil; FcConfigGetFontDirs:=nil; FcConfigGetConfigDirs:=nil; FcConfigGetConfigFiles:=nil; FcConfigGetCache:=nil; FcConfigGetBlanks:=nil; FcConfigGetCacheDirs:=nil; FcConfigGetRescanInterval:=nil; FcConfigSetRescanInterval:=nil; FcConfigGetFonts:=nil; FcConfigAppFontAddFile:=nil; FcConfigAppFontAddDir:=nil; FcConfigAppFontClear:=nil; FcConfigSubstituteWithPat:=nil; FcConfigSubstitute:=nil; FcConfigGetSysRoot:=nil; FcConfigSetSysRoot:=nil; FcCharSetCreate:=nil; FcCharSetNew:=nil; FcCharSetDestroy:=nil; FcCharSetAddChar:=nil; FcCharSetDelChar:=nil; FcCharSetCopy:=nil; FcCharSetEqual:=nil; FcCharSetIntersect:=nil; FcCharSetUnion:=nil; FcCharSetSubtract:=nil; FcCharSetMerge:=nil; FcCharSetHasChar:=nil; FcCharSetCount:=nil; FcCharSetIntersectCount:=nil; FcCharSetSubtractCount:=nil; FcCharSetIsSubset:=nil; FcCharSetFirstPage:=nil; FcCharSetNextPage:=nil; FcCharSetCoverage:=nil; FcValuePrint:=nil; FcPatternPrint:=nil; FcFontSetPrint:=nil; FcGetDefaultLangs:=nil; FcDefaultSubstitute:=nil; FcFileIsDir:=nil; FcFileScan:=nil; FcDirScan:=nil; FcDirSave:=nil; FcDirCacheLoad:=nil; FcDirCacheRescan:=nil; FcDirCacheRead:=nil; FcDirCacheLoadFile:=nil; FcDirCacheUnload:=nil; FcFreeTypeQuery:=nil; FcFontSetCreate:=nil; FcFontSetDestroy:=nil; FcFontSetAdd:=nil; FcInitLoadConfig:=nil; FcInitLoadConfigAndFonts:=nil; FcInit:=nil; FcFini:=nil; FcGetVersion:=nil; FcInitReinitialize:=nil; FcInitBringUptoDate:=nil; FcGetLangs:=nil; FcLangNormalize:=nil; FcLangGetCharSet:=nil; FcLangSetCreate:=nil; FcLangSetDestroy:=nil; FcLangSetCopy:=nil; FcLangSetAdd:=nil; FcLangSetDel:=nil; FcLangSetHasLang:=nil; FcLangSetCompare:=nil; FcLangSetContains:=nil; FcLangSetEqual:=nil; FcLangSetHash:=nil; FcLangSetGetLangs:=nil; FcLangSetUnion:=nil; FcLangSetSubtract:=nil; FcObjectSetCreate:=nil; FcObjectSetAdd:=nil; FcObjectSetDestroy:=nil; FcObjectSetBuild:=nil; FcFontSetList:=nil; FcFontList:=nil; FcAtomicCreate:=nil; FcAtomicLock:=nil; FcAtomicNewFile:=nil; FcAtomicOrigFile:=nil; FcAtomicReplaceOrig:=nil; FcAtomicDeleteNew:=nil; FcAtomicUnlock:=nil; FcAtomicDestroy:=nil; FcFontSetMatch:=nil; FcFontMatch:=nil; FcFontRenderPrepare:=nil; FcFontSetSort:=nil; FcFontSort:=nil; FcFontSetSortDestroy:=nil; FcMatrixCopy:=nil; FcMatrixEqual:=nil; FcMatrixMultiply:=nil; FcMatrixRotate:=nil; FcMatrixScale:=nil; FcMatrixShear:=nil; FcNameRegisterObjectTypes:=nil; FcNameUnregisterObjectTypes:=nil; FcNameGetObjectType:=nil; FcNameRegisterConstants:=nil; FcNameUnregisterConstants:=nil; FcNameGetConstant:=nil; FcNameConstant:=nil; FcNameParse:=nil; FcNameUnparse:=nil; FcPatternCreate:=nil; FcPatternDuplicate:=nil; FcPatternReference:=nil; FcPatternFilter:=nil; FcValueDestroy:=nil; FcValueEqual:=nil; FcValueSave:=nil; FcPatternDestroy:=nil; FcPatternEqual:=nil; FcPatternEqualSubset:=nil; FcPatternHash:=nil; FcPatternAdd:=nil; FcPatternAddWeak:=nil; FcPatternGet:=nil; FcPatternDel:=nil; FcPatternRemove:=nil; FcPatternAddInteger:=nil; FcPatternAddDouble:=nil; FcPatternAddString:=nil; FcPatternAddMatrix:=nil; FcPatternAddCharSet:=nil; FcPatternAddBool:=nil; FcPatternAddLangSet:=nil; FcPatternAddRange:=nil; FcPatternGetInteger:=nil; FcPatternGetDouble:=nil; FcPatternGetString:=nil; FcPatternGetMatrix:=nil; FcPatternGetCharSet:=nil; FcPatternGetBool:=nil; FcPatternGetLangSet:=nil; FcPatternGetRange:=nil; FcPatternBuild:=nil; FcPatternBuild:=nil; FcPatternFormat:=nil; FcRangeCreateDouble:=nil; FcRangeCreateInteger:=nil; FcRangeDestroy:=nil; FcRangeCopy:=nil; FcRangeGetDouble:=nil; FcWeightFromOpenType:=nil; FcWeightToOpenType:=nil; FcStrCopy:=nil; FcStrCopyFilename:=nil; FcStrPlus:=nil; FcStrFree:=nil; FcStrDowncase:=nil; FcStrCmpIgnoreCase:=nil; FcStrCmp:=nil; FcStrStrIgnoreCase:=nil; FcStrStr:=nil; FcUtf8ToUcs4:=nil; FcUtf8Len:=nil; FcUcs4ToUtf8:=nil; FcUtf16ToUcs4:=nil; FcUtf16Len:=nil; FcStrDirname:=nil; FcStrBasename:=nil; FcStrSetCreate:=nil; FcStrSetMember:=nil; FcStrSetEqual:=nil; FcStrSetAdd:=nil; FcStrSetAddFilename:=nil; FcStrSetDel:=nil; FcStrSetDestroy:=nil; FcStrListCreate:=nil; FcStrListFirst:=nil; FcStrListNext:=nil; FcStrListDone:=nil; FcConfigParseAndLoad:=nil; end; Function Loadfc(lib : PAnsiChar) : Boolean; begin Freefc; hlib:=LoadLibrary(lib); Result:=hlib<>NilHandle; If not Result then exit; if (hlib=NilHandle) then raise EInOutError.CreateFmt('Could not load library: "%s"',[lib]); pointer(FcBlanksCreate):=GetProcAddress(hlib,'FcBlanksCreate'); pointer(FcBlanksDestroy):=GetProcAddress(hlib,'FcBlanksDestroy'); pointer(FcBlanksAdd):=GetProcAddress(hlib,'FcBlanksAdd'); pointer(FcBlanksIsMember):=GetProcAddress(hlib,'FcBlanksIsMember'); pointer(FcCacheDir):=GetProcAddress(hlib,'FcCacheDir'); pointer(FcCacheCopySet):=GetProcAddress(hlib,'FcCacheCopySet'); pointer(FcCacheSubdir):=GetProcAddress(hlib,'FcCacheSubdir'); pointer(FcCacheNumSubdir):=GetProcAddress(hlib,'FcCacheNumSubdir'); pointer(FcCacheNumFont):=GetProcAddress(hlib,'FcCacheNumFont'); pointer(FcDirCacheUnlink):=GetProcAddress(hlib,'FcDirCacheUnlink'); pointer(FcDirCacheValid):=GetProcAddress(hlib,'FcDirCacheValid'); pointer(FcDirCacheClean):=GetProcAddress(hlib,'FcDirCacheClean'); pointer(FcCacheCreateTagFile):=GetProcAddress(hlib,'FcCacheCreateTagFile'); pointer(FcConfigHome):=GetProcAddress(hlib,'FcConfigHome'); pointer(FcConfigEnableHome):=GetProcAddress(hlib,'FcConfigEnableHome'); pointer(FcConfigFilename):=GetProcAddress(hlib,'FcConfigFilename'); pointer(FcConfigCreate):=GetProcAddress(hlib,'FcConfigCreate'); pointer(FcConfigReference):=GetProcAddress(hlib,'FcConfigReference'); pointer(FcConfigDestroy):=GetProcAddress(hlib,'FcConfigDestroy'); pointer(FcConfigSetCurrent):=GetProcAddress(hlib,'FcConfigSetCurrent'); pointer(FcConfigGetCurrent):=GetProcAddress(hlib,'FcConfigGetCurrent'); pointer(FcConfigUptoDate):=GetProcAddress(hlib,'FcConfigUptoDate'); pointer(FcConfigBuildFonts):=GetProcAddress(hlib,'FcConfigBuildFonts'); pointer(FcConfigGetFontDirs):=GetProcAddress(hlib,'FcConfigGetFontDirs'); pointer(FcConfigGetConfigDirs):=GetProcAddress(hlib,'FcConfigGetConfigDirs'); pointer(FcConfigGetConfigFiles):=GetProcAddress(hlib,'FcConfigGetConfigFiles'); pointer(FcConfigGetCache):=GetProcAddress(hlib,'FcConfigGetCache'); pointer(FcConfigGetBlanks):=GetProcAddress(hlib,'FcConfigGetBlanks'); pointer(FcConfigGetCacheDirs):=GetProcAddress(hlib,'FcConfigGetCacheDirs'); pointer(FcConfigGetRescanInterval):=GetProcAddress(hlib,'FcConfigGetRescanInterval'); pointer(FcConfigSetRescanInterval):=GetProcAddress(hlib,'FcConfigSetRescanInterval'); pointer(FcConfigGetFonts):=GetProcAddress(hlib,'FcConfigGetFonts'); pointer(FcConfigAppFontAddFile):=GetProcAddress(hlib,'FcConfigAppFontAddFile'); pointer(FcConfigAppFontAddDir):=GetProcAddress(hlib,'FcConfigAppFontAddDir'); pointer(FcConfigAppFontClear):=GetProcAddress(hlib,'FcConfigAppFontClear'); pointer(FcConfigSubstituteWithPat):=GetProcAddress(hlib,'FcConfigSubstituteWithPat'); pointer(FcConfigSubstitute):=GetProcAddress(hlib,'FcConfigSubstitute'); pointer(FcConfigGetSysRoot):=GetProcAddress(hlib,'FcConfigGetSysRoot'); pointer(FcConfigSetSysRoot):=GetProcAddress(hlib,'FcConfigSetSysRoot'); pointer(FcCharSetCreate):=GetProcAddress(hlib,'FcCharSetCreate'); pointer(FcCharSetNew):=GetProcAddress(hlib,'FcCharSetNew'); pointer(FcCharSetDestroy):=GetProcAddress(hlib,'FcCharSetDestroy'); pointer(FcCharSetAddChar):=GetProcAddress(hlib,'FcCharSetAddChar'); pointer(FcCharSetDelChar):=GetProcAddress(hlib,'FcCharSetDelChar'); pointer(FcCharSetCopy):=GetProcAddress(hlib,'FcCharSetCopy'); pointer(FcCharSetEqual):=GetProcAddress(hlib,'FcCharSetEqual'); pointer(FcCharSetIntersect):=GetProcAddress(hlib,'FcCharSetIntersect'); pointer(FcCharSetUnion):=GetProcAddress(hlib,'FcCharSetUnion'); pointer(FcCharSetSubtract):=GetProcAddress(hlib,'FcCharSetSubtract'); pointer(FcCharSetMerge):=GetProcAddress(hlib,'FcCharSetMerge'); pointer(FcCharSetHasChar):=GetProcAddress(hlib,'FcCharSetHasChar'); pointer(FcCharSetCount):=GetProcAddress(hlib,'FcCharSetCount'); pointer(FcCharSetIntersectCount):=GetProcAddress(hlib,'FcCharSetIntersectCount'); pointer(FcCharSetSubtractCount):=GetProcAddress(hlib,'FcCharSetSubtractCount'); pointer(FcCharSetIsSubset):=GetProcAddress(hlib,'FcCharSetIsSubset'); pointer(FcCharSetFirstPage):=GetProcAddress(hlib,'FcCharSetFirstPage'); pointer(FcCharSetNextPage):=GetProcAddress(hlib,'FcCharSetNextPage'); pointer(FcCharSetCoverage):=GetProcAddress(hlib,'FcCharSetCoverage'); pointer(FcValuePrint):=GetProcAddress(hlib,'FcValuePrint'); pointer(FcPatternPrint):=GetProcAddress(hlib,'FcPatternPrint'); pointer(FcFontSetPrint):=GetProcAddress(hlib,'FcFontSetPrint'); pointer(FcGetDefaultLangs):=GetProcAddress(hlib,'FcGetDefaultLangs'); pointer(FcDefaultSubstitute):=GetProcAddress(hlib,'FcDefaultSubstitute'); pointer(FcFileIsDir):=GetProcAddress(hlib,'FcFileIsDir'); pointer(FcFileScan):=GetProcAddress(hlib,'FcFileScan'); pointer(FcDirScan):=GetProcAddress(hlib,'FcDirScan'); pointer(FcDirSave):=GetProcAddress(hlib,'FcDirSave'); pointer(FcDirCacheLoad):=GetProcAddress(hlib,'FcDirCacheLoad'); pointer(FcDirCacheRescan):=GetProcAddress(hlib,'FcDirCacheRescan'); pointer(FcDirCacheRead):=GetProcAddress(hlib,'FcDirCacheRead'); pointer(FcDirCacheLoadFile):=GetProcAddress(hlib,'FcDirCacheLoadFile'); pointer(FcDirCacheUnload):=GetProcAddress(hlib,'FcDirCacheUnload'); pointer(FcFreeTypeQuery):=GetProcAddress(hlib,'FcFreeTypeQuery'); pointer(FcFontSetCreate):=GetProcAddress(hlib,'FcFontSetCreate'); pointer(FcFontSetDestroy):=GetProcAddress(hlib,'FcFontSetDestroy'); pointer(FcFontSetAdd):=GetProcAddress(hlib,'FcFontSetAdd'); pointer(FcInitLoadConfig):=GetProcAddress(hlib,'FcInitLoadConfig'); pointer(FcInitLoadConfigAndFonts):=GetProcAddress(hlib,'FcInitLoadConfigAndFonts'); pointer(FcInit):=GetProcAddress(hlib,'FcInit'); pointer(FcFini):=GetProcAddress(hlib,'FcFini'); pointer(FcGetVersion):=GetProcAddress(hlib,'FcGetVersion'); pointer(FcInitReinitialize):=GetProcAddress(hlib,'FcInitReinitialize'); pointer(FcInitBringUptoDate):=GetProcAddress(hlib,'FcInitBringUptoDate'); pointer(FcGetLangs):=GetProcAddress(hlib,'FcGetLangs'); pointer(FcLangNormalize):=GetProcAddress(hlib,'FcLangNormalize'); pointer(FcLangGetCharSet):=GetProcAddress(hlib,'FcLangGetCharSet'); pointer(FcLangSetCreate):=GetProcAddress(hlib,'FcLangSetCreate'); pointer(FcLangSetDestroy):=GetProcAddress(hlib,'FcLangSetDestroy'); pointer(FcLangSetCopy):=GetProcAddress(hlib,'FcLangSetCopy'); pointer(FcLangSetAdd):=GetProcAddress(hlib,'FcLangSetAdd'); pointer(FcLangSetDel):=GetProcAddress(hlib,'FcLangSetDel'); pointer(FcLangSetHasLang):=GetProcAddress(hlib,'FcLangSetHasLang'); pointer(FcLangSetCompare):=GetProcAddress(hlib,'FcLangSetCompare'); pointer(FcLangSetContains):=GetProcAddress(hlib,'FcLangSetContains'); pointer(FcLangSetEqual):=GetProcAddress(hlib,'FcLangSetEqual'); pointer(FcLangSetHash):=GetProcAddress(hlib,'FcLangSetHash'); pointer(FcLangSetGetLangs):=GetProcAddress(hlib,'FcLangSetGetLangs'); pointer(FcLangSetUnion):=GetProcAddress(hlib,'FcLangSetUnion'); pointer(FcLangSetSubtract):=GetProcAddress(hlib,'FcLangSetSubtract'); pointer(FcObjectSetCreate):=GetProcAddress(hlib,'FcObjectSetCreate'); pointer(FcObjectSetAdd):=GetProcAddress(hlib,'FcObjectSetAdd'); pointer(FcObjectSetDestroy):=GetProcAddress(hlib,'FcObjectSetDestroy'); pointer(FcObjectSetBuild):=GetProcAddress(hlib,'FcObjectSetBuild'); pointer(FcObjectSetBuild):=GetProcAddress(hlib,'FcObjectSetBuild'); pointer(FcFontSetList):=GetProcAddress(hlib,'FcFontSetList'); pointer(FcFontList):=GetProcAddress(hlib,'FcFontList'); pointer(FcAtomicCreate):=GetProcAddress(hlib,'FcAtomicCreate'); pointer(FcAtomicLock):=GetProcAddress(hlib,'FcAtomicLock'); pointer(FcAtomicNewFile):=GetProcAddress(hlib,'FcAtomicNewFile'); pointer(FcAtomicOrigFile):=GetProcAddress(hlib,'FcAtomicOrigFile'); pointer(FcAtomicReplaceOrig):=GetProcAddress(hlib,'FcAtomicReplaceOrig'); pointer(FcAtomicDeleteNew):=GetProcAddress(hlib,'FcAtomicDeleteNew'); pointer(FcAtomicUnlock):=GetProcAddress(hlib,'FcAtomicUnlock'); pointer(FcAtomicDestroy):=GetProcAddress(hlib,'FcAtomicDestroy'); pointer(FcFontSetMatch):=GetProcAddress(hlib,'FcFontSetMatch'); pointer(FcFontMatch):=GetProcAddress(hlib,'FcFontMatch'); pointer(FcFontRenderPrepare):=GetProcAddress(hlib,'FcFontRenderPrepare'); pointer(FcFontSetSort):=GetProcAddress(hlib,'FcFontSetSort'); pointer(FcFontSort):=GetProcAddress(hlib,'FcFontSort'); pointer(FcFontSetSortDestroy):=GetProcAddress(hlib,'FcFontSetSortDestroy'); pointer(FcMatrixCopy):=GetProcAddress(hlib,'FcMatrixCopy'); pointer(FcMatrixEqual):=GetProcAddress(hlib,'FcMatrixEqual'); pointer(FcMatrixMultiply):=GetProcAddress(hlib,'FcMatrixMultiply'); pointer(FcMatrixRotate):=GetProcAddress(hlib,'FcMatrixRotate'); pointer(FcMatrixScale):=GetProcAddress(hlib,'FcMatrixScale'); pointer(FcMatrixShear):=GetProcAddress(hlib,'FcMatrixShear'); pointer(FcNameRegisterObjectTypes):=GetProcAddress(hlib,'FcNameRegisterObjectTypes'); pointer(FcNameUnregisterObjectTypes):=GetProcAddress(hlib,'FcNameUnregisterObjectTypes'); pointer(FcNameGetObjectType):=GetProcAddress(hlib,'FcNameGetObjectType'); pointer(FcNameRegisterConstants):=GetProcAddress(hlib,'FcNameRegisterConstants'); pointer(FcNameUnregisterConstants):=GetProcAddress(hlib,'FcNameUnregisterConstants'); pointer(FcNameGetConstant):=GetProcAddress(hlib,'FcNameGetConstant'); pointer(FcNameConstant):=GetProcAddress(hlib,'FcNameConstant'); pointer(FcNameParse):=GetProcAddress(hlib,'FcNameParse'); pointer(FcNameUnparse):=GetProcAddress(hlib,'FcNameUnparse'); pointer(FcPatternCreate):=GetProcAddress(hlib,'FcPatternCreate'); pointer(FcPatternDuplicate):=GetProcAddress(hlib,'FcPatternDuplicate'); pointer(FcPatternReference):=GetProcAddress(hlib,'FcPatternReference'); pointer(FcPatternFilter):=GetProcAddress(hlib,'FcPatternFilter'); pointer(FcValueDestroy):=GetProcAddress(hlib,'FcValueDestroy'); pointer(FcValueEqual):=GetProcAddress(hlib,'FcValueEqual'); pointer(FcValueSave):=GetProcAddress(hlib,'FcValueSave'); pointer(FcPatternDestroy):=GetProcAddress(hlib,'FcPatternDestroy'); pointer(FcPatternEqual):=GetProcAddress(hlib,'FcPatternEqual'); pointer(FcPatternEqualSubset):=GetProcAddress(hlib,'FcPatternEqualSubset'); pointer(FcPatternHash):=GetProcAddress(hlib,'FcPatternHash'); pointer(FcPatternAdd):=GetProcAddress(hlib,'FcPatternAdd'); pointer(FcPatternAddWeak):=GetProcAddress(hlib,'FcPatternAddWeak'); pointer(FcPatternGet):=GetProcAddress(hlib,'FcPatternGet'); pointer(FcPatternDel):=GetProcAddress(hlib,'FcPatternDel'); pointer(FcPatternRemove):=GetProcAddress(hlib,'FcPatternRemove'); pointer(FcPatternAddInteger):=GetProcAddress(hlib,'FcPatternAddInteger'); pointer(FcPatternAddDouble):=GetProcAddress(hlib,'FcPatternAddDouble'); pointer(FcPatternAddString):=GetProcAddress(hlib,'FcPatternAddString'); pointer(FcPatternAddMatrix):=GetProcAddress(hlib,'FcPatternAddMatrix'); pointer(FcPatternAddCharSet):=GetProcAddress(hlib,'FcPatternAddCharSet'); pointer(FcPatternAddBool):=GetProcAddress(hlib,'FcPatternAddBool'); pointer(FcPatternAddLangSet):=GetProcAddress(hlib,'FcPatternAddLangSet'); pointer(FcPatternAddRange):=GetProcAddress(hlib,'FcPatternAddRange'); pointer(FcPatternGetInteger):=GetProcAddress(hlib,'FcPatternGetInteger'); pointer(FcPatternGetDouble):=GetProcAddress(hlib,'FcPatternGetDouble'); pointer(FcPatternGetString):=GetProcAddress(hlib,'FcPatternGetString'); pointer(FcPatternGetMatrix):=GetProcAddress(hlib,'FcPatternGetMatrix'); pointer(FcPatternGetCharSet):=GetProcAddress(hlib,'FcPatternGetCharSet'); pointer(FcPatternGetBool):=GetProcAddress(hlib,'FcPatternGetBool'); pointer(FcPatternGetLangSet):=GetProcAddress(hlib,'FcPatternGetLangSet'); pointer(FcPatternGetRange):=GetProcAddress(hlib,'FcPatternGetRange'); pointer(FcPatternBuild):=GetProcAddress(hlib,'FcPatternBuild'); pointer(FcPatternBuild):=GetProcAddress(hlib,'FcPatternBuild'); pointer(FcPatternFormat):=GetProcAddress(hlib,'FcPatternFormat'); pointer(FcRangeCreateDouble):=GetProcAddress(hlib,'FcRangeCreateDouble'); pointer(FcRangeCreateInteger):=GetProcAddress(hlib,'FcRangeCreateInteger'); pointer(FcRangeDestroy):=GetProcAddress(hlib,'FcRangeDestroy'); pointer(FcRangeCopy):=GetProcAddress(hlib,'FcRangeCopy'); pointer(FcRangeGetDouble):=GetProcAddress(hlib,'FcRangeGetDouble'); pointer(FcWeightFromOpenType):=GetProcAddress(hlib,'FcWeightFromOpenType'); pointer(FcWeightToOpenType):=GetProcAddress(hlib,'FcWeightToOpenType'); pointer(FcStrCopy):=GetProcAddress(hlib,'FcStrCopy'); pointer(FcStrCopyFilename):=GetProcAddress(hlib,'FcStrCopyFilename'); pointer(FcStrPlus):=GetProcAddress(hlib,'FcStrPlus'); pointer(FcStrFree):=GetProcAddress(hlib,'FcStrFree'); pointer(FcStrDowncase):=GetProcAddress(hlib,'FcStrDowncase'); pointer(FcStrCmpIgnoreCase):=GetProcAddress(hlib,'FcStrCmpIgnoreCase'); pointer(FcStrCmp):=GetProcAddress(hlib,'FcStrCmp'); pointer(FcStrStrIgnoreCase):=GetProcAddress(hlib,'FcStrStrIgnoreCase'); pointer(FcStrStr):=GetProcAddress(hlib,'FcStrStr'); pointer(FcUtf8ToUcs4):=GetProcAddress(hlib,'FcUtf8ToUcs4'); pointer(FcUtf8Len):=GetProcAddress(hlib,'FcUtf8Len'); pointer(FcUcs4ToUtf8):=GetProcAddress(hlib,'FcUcs4ToUtf8'); pointer(FcUtf16ToUcs4):=GetProcAddress(hlib,'FcUtf16ToUcs4'); pointer(FcUtf16Len):=GetProcAddress(hlib,'FcUtf16Len'); pointer(FcStrDirname):=GetProcAddress(hlib,'FcStrDirname'); pointer(FcStrBasename):=GetProcAddress(hlib,'FcStrBasename'); pointer(FcStrSetCreate):=GetProcAddress(hlib,'FcStrSetCreate'); pointer(FcStrSetMember):=GetProcAddress(hlib,'FcStrSetMember'); pointer(FcStrSetEqual):=GetProcAddress(hlib,'FcStrSetEqual'); pointer(FcStrSetAdd):=GetProcAddress(hlib,'FcStrSetAdd'); pointer(FcStrSetAddFilename):=GetProcAddress(hlib,'FcStrSetAddFilename'); pointer(FcStrSetDel):=GetProcAddress(hlib,'FcStrSetDel'); pointer(FcStrSetDestroy):=GetProcAddress(hlib,'FcStrSetDestroy'); pointer(FcStrListCreate):=GetProcAddress(hlib,'FcStrListCreate'); pointer(FcStrListFirst):=GetProcAddress(hlib,'FcStrListFirst'); pointer(FcStrListNext):=GetProcAddress(hlib,'FcStrListNext'); pointer(FcStrListDone):=GetProcAddress(hlib,'FcStrListDone'); pointer(FcConfigParseAndLoad):=GetProcAddress(hlib,'FcConfigParseAndLoad'); end; Function LoadFontConfigLib(Const ALibName : String; RaiseError : Boolean = true) : Integer; Var FN : String; begin Result:=-1; FN:=ALibName; if FN='' then FN:=DefaultLibName; if (HCount>0) then begin if (FN=LoadedLib) then Inc(HCount) else if RaiseError then Raise EInoutError.CreateFmt('Cannot load "%s", FontConfig library already loaded as "%s"',[FN,LoadedLib]) else Exit; end else begin if LoadFC(PAnsiChar(FN)) then begin inc(HCount); LoadedLib:=FN; end else if RaiseError then raise EInOutError.CreateFmt('Could not load library: "%s"',[FN]) else Exit; end; Result:=HCount; end; Function UnLoadFontConfigLib : Integer; begin if (hCount>0) then begin Dec(HCount); if (HCount=0) then FreeFC; end; Result:=HCount; end; end.