libfontconfig.pp 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078
  1. {$mode objfpc}
  2. {$H+}
  3. {$IFNDEF FPC_DOTTEDUNITS}
  4. unit libfontconfig;
  5. {$ENDIF FPC_DOTTEDUNITS}
  6. {
  7. Automatically converted by H2Pas 1.0.0 from fc.h
  8. The following command line parameters were used:
  9. -l
  10. libfontconfig.so
  11. -P
  12. -p
  13. -S
  14. -T
  15. -C
  16. -c
  17. fc.h
  18. }
  19. interface
  20. {$IFDEF FPC_DOTTEDUNITS}
  21. uses
  22. System.CTypes;
  23. {$ELSE FPC_DOTTEDUNITS}
  24. uses
  25. ctypes;
  26. {$ENDIF FPC_DOTTEDUNITS}
  27. Const
  28. {$ifndef darwin}
  29. DefaultLibName = 'libfontconfig.so';
  30. {$else}
  31. DefaultLibName = 'libfontconfig.dylib';
  32. {$endif}
  33. const
  34. FC_MAJOR = 2;
  35. FC_MINOR = 11;
  36. FC_REVISION = 94;
  37. FC_VERSION = ((FC_MAJOR * 10000) + (FC_MINOR * 100) + (FC_REVISION));
  38. FC_CACHE_VERSION_NUMBER = 6;
  39. FC_CACHE_VERSION = '6'; // Stringify of FC_CACHE_VERSION_NUMBER
  40. FcTrue = 1;
  41. FcFalse = 0;
  42. FC_FAMILY = 'family';
  43. FC_STYLE = 'style';
  44. FC_SLANT = 'slant';
  45. FC_WEIGHT = 'weight';
  46. FC_SIZE = 'size';
  47. FC_ASPECT = 'aspect';
  48. FC_PIXEL_SIZE = 'pixelsize';
  49. FC_SPACING = 'spacing';
  50. FC_FOUNDRY = 'foundry';
  51. FC_ANTIALIAS = 'antialias';
  52. FC_HINTING = 'hinting';
  53. FC_HINT_STYLE = 'hintstyle';
  54. FC_VERTICAL_LAYOUT = 'verticallayout';
  55. FC_AUTOHINT = 'autohint';
  56. FC_GLOBAL_ADVANCE = 'globaladvance';
  57. FC_WIDTH = 'width';
  58. FC_FILE = 'file';
  59. FC_INDEX = 'index';
  60. FC_FT_FACE = 'ftface';
  61. FC_RASTERIZER = 'rasterizer';
  62. FC_OUTLINE = 'outline';
  63. FC_SCALABLE = 'scalable';
  64. FC_COLOR = 'color';
  65. FC_SCALE = 'scale';
  66. FC_SYMBOL = 'symbol';
  67. FC_DPI = 'dpi';
  68. FC_RGBA = 'rgba';
  69. FC_MINSPACE = 'minspace';
  70. FC_SOURCE = 'source';
  71. FC_CHARSET = 'charset';
  72. FC_LANG = 'lang';
  73. FC_FONTVERSION = 'fontversion';
  74. FC_FULLNAME = 'fullname';
  75. FC_FAMILYLANG = 'familylang';
  76. FC_STYLELANG = 'stylelang';
  77. FC_FULLNAMELANG = 'fullnamelang';
  78. FC_CAPABILITY = 'capability';
  79. FC_FONTFORMAT = 'fontformat';
  80. FC_EMBOLDEN = 'embolden';
  81. FC_EMBEDDED_BITMAP = 'embeddedbitmap';
  82. FC_DECORATIVE = 'decorative';
  83. FC_LCD_FILTER = 'lcdfilter';
  84. FC_FONT_FEATURES = 'fontfeatures';
  85. FC_NAMELANG = 'namelang';
  86. FC_PRGNAME = 'prgname';
  87. FC_HASH = 'hash';
  88. FC_POSTSCRIPT_NAME = 'postscriptname';
  89. FC_CACHE_SUFFIX = '.cache-'+ FC_CACHE_VERSION;
  90. FC_DIR_CACHE_FILE = 'fonts.cache-' + FC_CACHE_VERSION;
  91. FC_USER_CACHE_FILE= '.fonts.cache-' + FC_CACHE_VERSION;
  92. FC_CHAR_WIDTH = 'charwidth';
  93. FC_CHAR_HEIGHT = 'charheight';
  94. FC_MATRIX = 'matrix';
  95. FC_WEIGHT_THIN = 0;
  96. FC_WEIGHT_EXTRALIGHT = 40;
  97. FC_WEIGHT_ULTRALIGHT = FC_WEIGHT_EXTRALIGHT;
  98. FC_WEIGHT_LIGHT = 50;
  99. FC_WEIGHT_DEMILIGHT = 55;
  100. FC_WEIGHT_SEMILIGHT = FC_WEIGHT_DEMILIGHT;
  101. FC_WEIGHT_BOOK = 75;
  102. FC_WEIGHT_REGULAR = 80;
  103. FC_WEIGHT_NORMAL = FC_WEIGHT_REGULAR;
  104. FC_WEIGHT_MEDIUM = 100;
  105. FC_WEIGHT_DEMIBOLD = 180;
  106. FC_WEIGHT_SEMIBOLD = FC_WEIGHT_DEMIBOLD;
  107. FC_WEIGHT_BOLD = 200;
  108. FC_WEIGHT_EXTRABOLD = 205;
  109. FC_WEIGHT_ULTRABOLD = FC_WEIGHT_EXTRABOLD;
  110. FC_WEIGHT_BLACK = 210;
  111. FC_WEIGHT_HEAVY = FC_WEIGHT_BLACK;
  112. FC_WEIGHT_EXTRABLACK = 215;
  113. FC_WEIGHT_ULTRABLACK = FC_WEIGHT_EXTRABLACK;
  114. FC_SLANT_ROMAN = 0;
  115. FC_SLANT_ITALIC = 100;
  116. FC_SLANT_OBLIQUE = 110;
  117. FC_WIDTH_ULTRACONDENSED = 50;
  118. FC_WIDTH_EXTRACONDENSED = 63;
  119. FC_WIDTH_CONDENSED = 75;
  120. FC_WIDTH_SEMICONDENSED = 87;
  121. FC_WIDTH_NORMAL = 100;
  122. FC_WIDTH_SEMIEXPANDED = 113;
  123. FC_WIDTH_EXPANDED = 125;
  124. FC_WIDTH_EXTRAEXPANDED = 150;
  125. FC_WIDTH_ULTRAEXPANDED = 200;
  126. FC_PROPORTIONAL = 0;
  127. FC_DUAL = 90;
  128. FC_MONO = 100;
  129. FC_CHARCELL = 110;
  130. FC_RGBA_UNKNOWN = 0;
  131. FC_RGBA_RGB = 1;
  132. FC_RGBA_BGR = 2;
  133. FC_RGBA_VRGB = 3;
  134. FC_RGBA_VBGR = 4;
  135. FC_RGBA_NONE = 5;
  136. FC_HINT_NONE = 0;
  137. FC_HINT_SLIGHT = 1;
  138. FC_HINT_MEDIUM = 2;
  139. FC_HINT_FULL = 3;
  140. FC_LCD_NONE = 0;
  141. FC_LCD_DEFAULT = 1;
  142. FC_LCD_LIGHT = 2;
  143. FC_LCD_LEGACY = 3;
  144. FC_UTF8_MAX_LEN = 6;
  145. {
  146. Automatically converted by H2Pas 1.0.0 from fc.h
  147. The following command line parameters were used:
  148. -l
  149. libfontconfig.so
  150. -P
  151. -p
  152. -S
  153. -T
  154. -C
  155. -c
  156. fc.h
  157. }
  158. { Pointers to basic pascal types, inserted by h2pas conversion program.}
  159. Type
  160. PLongint = ^Longint;
  161. PSmallInt = ^SmallInt;
  162. PByte = ^Byte;
  163. PWord = ^Word;
  164. PDWord = ^DWord;
  165. PDouble = ^Double;
  166. PStat = pointer;
  167. {$IFDEF FPC}
  168. {$PACKRECORDS C}
  169. {$ENDIF}
  170. PFcAtomic = ^TFcAtomic;
  171. TFCAtomic = record end;
  172. PPFcAtomic = ^PFcAtomic;
  173. PFcConfig = ^TFcConfig;
  174. TFcConfig = record end;
  175. PPFcConfig = ^PFcConfig;
  176. PFcFileCache = ^TFcFileCache;
  177. TFcFileCache = record end;
  178. PPFcFileCache = ^PFcFileCache;
  179. PFcBlanks = ^TFcBlanks;
  180. TFcBlanks = record end;
  181. PPFcBlanks = ^PFcBlanks;
  182. PFcPattern = ^TFcPattern;
  183. TFcPattern = record end;
  184. PPFcPattern = ^PFcPattern;
  185. PFcStrList = ^TFcStrList;
  186. TFcStrList = record end;
  187. PPFcStrList = ^PFcStrList;
  188. PFcStrSet = ^TFcStrSet;
  189. TFcStrSet = record end;
  190. PPFcStrSet = ^PFcStrSet;
  191. PFcCharSet = ^TFcCharSet;
  192. TFcCharSet = record end;
  193. PPFcCharSet = ^PFcCharSet;
  194. PFcLangSet = ^TFcLangSet;
  195. TFcLangSet = record end;
  196. PPFcLangSet = ^PFcLangSet;
  197. PFcRange = ^TFcRange;
  198. TFcRange = record end;
  199. PPFcRange = ^PFcRange;
  200. PFcCache = ^TFcCache;
  201. TFcCache = record end;
  202. PPFcCache = ^PFcCache;
  203. PFcChar8 = PAnsiChar;
  204. TFcChar8 = AnsiChar;
  205. PPFcChar8 = PPAnsiChar;
  206. PFcChar16 = PWideChar;
  207. TFcChar16 = WideChar;
  208. PPFcChar16 = ^PFcChar16;
  209. PFcChar32 = ^TFcChar32;
  210. TFcChar32 = cuint;
  211. PFcBool = ^TFcBool;
  212. TFcBool = cint;
  213. PFcType = ^TFcType;
  214. TFcType = (FcTypeUnknown := -(1),FcTypeVoid,FcTypeInteger,
  215. FcTypeDouble,FcTypeString,FcTypeBool,FcTypeMatrix,
  216. FcTypeCharSet,FcTypeFTFace,FcTypeLangSet,
  217. FcTypeRange);
  218. PFcMatrix = ^TFcMatrix;
  219. TFcMatrix = record
  220. xx : double;
  221. xy : double;
  222. yx : double;
  223. yy : double;
  224. end;
  225. PPFcMatrix = ^PFcMatrix;
  226. PFcObjectType = ^TFcObjectType;
  227. TFcObjectType = record
  228. _object : pcchar;
  229. _type : TFcType;
  230. end;
  231. PPFcObjectType = ^PFcObjectType;
  232. PFcConstant = ^TFcConstant;
  233. TFcConstant = record
  234. name : PFcChar8;
  235. _object : pcchar;
  236. value : cint;
  237. end;
  238. PPFcConstant = ^PFcConstant;
  239. PFcResult = ^TFcResult;
  240. TFcResult = (FcResultMatch,FcResultNoMatch,FcResultTypeMismatch, FcResultNoId,FcResultOutOfMemory);
  241. PFcValue = ^TFcValue;
  242. TFcValue = record
  243. _type : TFcType;
  244. u : record
  245. case longint of
  246. 0 : ( s : PFcChar8 );
  247. 1 : ( i : cint );
  248. 2 : ( b : TFcBool );
  249. 3 : ( d : double );
  250. 4 : ( m : PFcMatrix );
  251. 5 : ( c : PFcCharSet );
  252. 6 : ( f : pointer );
  253. 7 : ( l : PFcLangSet );
  254. 8 : ( r : PFcRange );
  255. end;
  256. end;
  257. PPFcValue = ^PFcValue;
  258. PFcFontSet = ^TFcFontSet;
  259. TFcFontSet = record
  260. nfont : cint;
  261. sfont : cint;
  262. fonts : ^PFcPattern;
  263. end;
  264. PPFcFontSet = ^PFcFontSet;
  265. PFcObjectSet = ^TFcObjectSet;
  266. TFcObjectSet = record
  267. nobject : cint;
  268. sobject : cint;
  269. objects : ^pcchar;
  270. end;
  271. PPFcObjectSet = ^PFcObjectSet;
  272. PFcMatchKind = ^TFcMatchKind;
  273. TFcMatchKind = (FcMatchPattern,FcMatchFont,FcMatchScan);
  274. PFcLangResult = ^TFcLangResult;
  275. TFcLangResult = (FcLangEqual := 0,FcLangDifferentCountry := 1,
  276. FcLangDifferentTerritory := 1,FcLangDifferentLang := 2);
  277. PFcSetName = ^TFcSetName;
  278. TFcSetName = (FcSetSystem := 0,FcSetApplication := 1);
  279. PFcEndian = ^TFcEndian;
  280. TFcEndian = (FcEndianBig,FcEndianLittle);
  281. TFcGlobalCache = TFcFileCache;
  282. TFcCharMap = array[0..7] of TFcChar32;
  283. TUTF8Array = array[0..5] of TFcChar8;
  284. var
  285. FcBlanksCreate : function:PFcBlanks;
  286. FcBlanksDestroy : procedure(b:PFcBlanks);
  287. FcBlanksAdd : function(b:PFcBlanks; ucs4:TFcChar32):TFcBool;
  288. FcBlanksIsMember : function(b:PFcBlanks; ucs4:TFcChar32):TFcBool;
  289. FcCacheDir : function(c:PFcCache):PFcChar8;
  290. FcCacheCopySet : function(c:PFcCache):PFcFontSet;
  291. FcCacheSubdir : function(c:PFcCache; i:cint):PFcChar8;
  292. FcCacheNumSubdir : function(c:PFcCache):cint;
  293. FcCacheNumFont : function(c:PFcCache):cint;
  294. FcDirCacheUnlink : function(dir:PFcChar8; config:PFcConfig):TFcBool;
  295. FcDirCacheValid : function(cache_file:PFcChar8):TFcBool;
  296. FcDirCacheClean : function(cache_dir:PFcChar8; verbose:TFcBool):TFcBool;
  297. FcCacheCreateTagFile : procedure(config:PFcConfig);
  298. FcConfigHome : function:PFcChar8;
  299. FcConfigEnableHome : function(enable:TFcBool):TFcBool;
  300. FcConfigFilename : function(url:PFcChar8):PFcChar8;
  301. FcConfigCreate : function:PFcConfig;
  302. FcConfigReference : function(config:PFcConfig):PFcConfig;
  303. FcConfigDestroy : procedure(config:PFcConfig);
  304. FcConfigSetCurrent : function(config:PFcConfig):TFcBool;
  305. FcConfigGetCurrent : function:PFcConfig;
  306. FcConfigUptoDate : function(config:PFcConfig):TFcBool;
  307. FcConfigBuildFonts : function(config:PFcConfig):TFcBool;
  308. FcConfigGetFontDirs : function(config:PFcConfig):PFcStrList;
  309. FcConfigGetConfigDirs : function(config:PFcConfig):PFcStrList;
  310. FcConfigGetConfigFiles : function(config:PFcConfig):PFcStrList;
  311. FcConfigGetCache : function(config:PFcConfig):PFcChar8;
  312. FcConfigGetBlanks : function(config:PFcConfig):PFcBlanks;
  313. FcConfigGetCacheDirs : function(config:PFcConfig):PFcStrList;
  314. FcConfigGetRescanInterval : function(config:PFcConfig):cint;
  315. FcConfigSetRescanInterval : function(config:PFcConfig; rescanInterval:cint):TFcBool;
  316. FcConfigGetFonts : function(config:PFcConfig; aset:TFcSetName):PFcFontSet;
  317. FcConfigAppFontAddFile : function(config:PFcConfig; afile:PFcChar8):TFcBool;
  318. FcConfigAppFontAddDir : function(config:PFcConfig; dir:PFcChar8):TFcBool;
  319. FcConfigAppFontClear : procedure(config:PFcConfig);
  320. FcConfigSubstituteWithPat : function(config:PFcConfig; p:PFcPattern; p_pat:PFcPattern; kind:TFcMatchKind):TFcBool;
  321. FcConfigSubstitute : function(config:PFcConfig; p:PFcPattern; kind:TFcMatchKind):TFcBool;
  322. FcConfigGetSysRoot : function(config:PFcConfig):PFcChar8;
  323. FcConfigSetSysRoot : procedure(config:PFcConfig; sysroot:PFcChar8);
  324. FcCharSetCreate : function:PFcCharSet;
  325. FcCharSetNew : function:PFcCharSet;
  326. FcCharSetDestroy : procedure(fcs:PFcCharSet);
  327. FcCharSetAddChar : function(fcs:PFcCharSet; ucs4:TFcChar32):TFcBool;
  328. FcCharSetDelChar : function(fcs:PFcCharSet; ucs4:TFcChar32):TFcBool;
  329. FcCharSetCopy : function(src:PFcCharSet):PFcCharSet;
  330. FcCharSetEqual : function(a:PFcCharSet; b:PFcCharSet):TFcBool;
  331. FcCharSetIntersect : function(a:PFcCharSet; b:PFcCharSet):PFcCharSet;
  332. FcCharSetUnion : function(a:PFcCharSet; b:PFcCharSet):PFcCharSet;
  333. FcCharSetSubtract : function(a:PFcCharSet; b:PFcCharSet):PFcCharSet;
  334. FcCharSetMerge : function(a:PFcCharSet; b:PFcCharSet; changed:PFcBool):TFcBool;
  335. FcCharSetHasChar : function(fcs:PFcCharSet; ucs4:TFcChar32):TFcBool;
  336. FcCharSetCount : function(a:PFcCharSet):TFcChar32;
  337. FcCharSetIntersectCount : function(a:PFcCharSet; b:PFcCharSet):TFcChar32;
  338. FcCharSetSubtractCount : function(a:PFcCharSet; b:PFcCharSet):TFcChar32;
  339. FcCharSetIsSubset : function(a:PFcCharSet; b:PFcCharSet):TFcBool;
  340. FcCharSetFirstPage : function(a:PFcCharSet; map:TFcCharMap; next:PFcChar32):TFcChar32;
  341. FcCharSetNextPage : function(a:PFcCharSet; map:TFcCharMap; next:PFcChar32):TFcChar32;
  342. FcCharSetCoverage : function(a:PFcCharSet; page:TFcChar32; result:PFcChar32):TFcChar32;
  343. FcValuePrint : procedure(v:TFcValue);
  344. FcPatternPrint : procedure(p:PFcPattern);
  345. FcFontSetPrint : procedure(s:PFcFontSet);
  346. FcGetDefaultLangs : function:PFcStrSet;
  347. FcDefaultSubstitute : procedure(pattern:PFcPattern);
  348. FcFileIsDir : function(afile:PFcChar8):TFcBool;
  349. FcFileScan : function(aset:PFcFontSet; dirs:PFcStrSet; cache:PFcFileCache; blanks:PFcBlanks; afile:PFcChar8;
  350. force:TFcBool):TFcBool;
  351. FcDirScan : function(aset:PFcFontSet; dirs:PFcStrSet; cache:PFcFileCache; blanks:PFcBlanks; dir:PFcChar8;
  352. force:TFcBool):TFcBool;
  353. FcDirSave : function(aset:PFcFontSet; dirs:PFcStrSet; dir:PFcChar8):TFcBool;
  354. FcDirCacheLoad : function(dir:PFcChar8; config:PFcConfig; cache_file:PPFcChar8):PFcCache;
  355. FcDirCacheRescan : function(dir:PFcChar8; config:PFcConfig):PFcCache;
  356. FcDirCacheRead : function(dir:PFcChar8; force:TFcBool; config:PFcConfig):PFcCache;
  357. FcDirCacheLoadFile : function(cache_file:PFcChar8; file_stat:Pstat):PFcCache;
  358. FcDirCacheUnload : procedure(cache:PFcCache);
  359. FcFreeTypeQuery : function(afile:PFcChar8; id:cint; blanks:PFcBlanks; count:pcint):PFcPattern;
  360. FcFontSetCreate : function:PFcFontSet;
  361. FcFontSetDestroy : procedure(s:PFcFontSet);
  362. FcFontSetAdd : function(s:PFcFontSet; font:PFcPattern):TFcBool;
  363. FcInitLoadConfig : function:PFcConfig;
  364. FcInitLoadConfigAndFonts : function:PFcConfig;
  365. FcInit : function:TFcBool;
  366. FcFini : procedure;
  367. FcGetVersion : function:cint;
  368. FcInitReinitialize : function:TFcBool;
  369. FcInitBringUptoDate : function:TFcBool;
  370. FcGetLangs : function:PFcStrSet;
  371. FcLangNormalize : function(lang:PFcChar8):PFcChar8;
  372. FcLangGetCharSet : function(lang:PFcChar8):PFcCharSet;
  373. FcLangSetCreate : function:PFcLangSet;
  374. FcLangSetDestroy : procedure(ls:PFcLangSet);
  375. FcLangSetCopy : function(ls:PFcLangSet):PFcLangSet;
  376. FcLangSetAdd : function(ls:PFcLangSet; lang:PFcChar8):TFcBool;
  377. FcLangSetDel : function(ls:PFcLangSet; lang:PFcChar8):TFcBool;
  378. FcLangSetHasLang : function(ls:PFcLangSet; lang:PFcChar8):TFcLangResult;
  379. FcLangSetCompare : function(lsa:PFcLangSet; lsb:PFcLangSet):TFcLangResult;
  380. FcLangSetContains : function(lsa:PFcLangSet; lsb:PFcLangSet):TFcBool;
  381. FcLangSetEqual : function(lsa:PFcLangSet; lsb:PFcLangSet):TFcBool;
  382. FcLangSetHash : function(ls:PFcLangSet):TFcChar32;
  383. FcLangSetGetLangs : function(ls:PFcLangSet):PFcStrSet;
  384. FcLangSetUnion : function(a:PFcLangSet; b:PFcLangSet):PFcLangSet;
  385. FcLangSetSubtract : function(a:PFcLangSet; b:PFcLangSet):PFcLangSet;
  386. FcObjectSetCreate : function:PFcObjectSet;
  387. FcObjectSetAdd : function(os:PFcObjectSet; _object:pcchar):TFcBool;
  388. FcObjectSetDestroy : procedure(os:PFcObjectSet);
  389. FcObjectSetBuild : function(first:pcchar; args:array of const):PFcObjectSet;
  390. FcFontSetList : function(config:PFcConfig; sets:PPFcFontSet; nsets:cint; p:PFcPattern; os:PFcObjectSet):PFcFontSet;
  391. FcFontList : function(config:PFcConfig; p:PFcPattern; os:PFcObjectSet):PFcFontSet;
  392. FcAtomicCreate : function(afile:PFcChar8):PFcAtomic;
  393. FcAtomicLock : function(atomic:PFcAtomic):TFcBool;
  394. FcAtomicNewFile : function(atomic:PFcAtomic):PFcChar8;
  395. FcAtomicOrigFile : function(atomic:PFcAtomic):PFcChar8;
  396. FcAtomicReplaceOrig : function(atomic:PFcAtomic):TFcBool;
  397. FcAtomicDeleteNew : procedure(atomic:PFcAtomic);
  398. FcAtomicUnlock : procedure(atomic:PFcAtomic);
  399. FcAtomicDestroy : procedure(atomic:PFcAtomic);
  400. FcFontSetMatch : function(config:PFcConfig; sets:PPFcFontSet; nsets:cint; p:PFcPattern; result:PFcResult):PFcPattern;
  401. FcFontMatch : function(config:PFcConfig; p:PFcPattern; result:PFcResult):PFcPattern;
  402. FcFontRenderPrepare : function(config:PFcConfig; pat:PFcPattern; font:PFcPattern):PFcPattern;
  403. FcFontSetSort : function(config:PFcConfig; sets:PPFcFontSet; nsets:cint; p:PFcPattern; trim:TFcBool;
  404. csp:PPFcCharSet; result:PFcResult):PFcFontSet;
  405. FcFontSort : function(config:PFcConfig; p:PFcPattern; trim:TFcBool; csp:PPFcCharSet; result:PFcResult):PFcFontSet;
  406. FcFontSetSortDestroy : procedure(fs:PFcFontSet);
  407. FcMatrixCopy : function(mat:PFcMatrix):PFcMatrix;
  408. FcMatrixEqual : function(mat1:PFcMatrix; mat2:PFcMatrix):TFcBool;
  409. FcMatrixMultiply : procedure(result:PFcMatrix; a:PFcMatrix; b:PFcMatrix);
  410. FcMatrixRotate : procedure(m:PFcMatrix; c:double; s:double);
  411. FcMatrixScale : procedure(m:PFcMatrix; sx:double; sy:double);
  412. FcMatrixShear : procedure(m:PFcMatrix; sh:double; sv:double);
  413. FcNameRegisterObjectTypes : function(types:PFcObjectType; ntype:cint):TFcBool;
  414. FcNameUnregisterObjectTypes : function(types:PFcObjectType; ntype:cint):TFcBool;
  415. FcNameGetObjectType : function(_object:pcchar):PFcObjectType;
  416. FcNameRegisterConstants : function(consts:PFcConstant; nconsts:cint):TFcBool;
  417. FcNameUnregisterConstants : function(consts:PFcConstant; nconsts:cint):TFcBool;
  418. FcNameGetConstant : function(_string:PFcChar8):PFcConstant;
  419. FcNameConstant : function(_string:PFcChar8; result:pcint):TFcBool;
  420. FcNameParse : function(name:PFcChar8):PFcPattern;
  421. FcNameUnparse : function(pat:PFcPattern):PFcChar8;
  422. FcPatternCreate : function:PFcPattern;
  423. FcPatternDuplicate : function(p:PFcPattern):PFcPattern;
  424. FcPatternReference : procedure(p:PFcPattern);
  425. FcPatternFilter : function(p:PFcPattern; os:PFcObjectSet):PFcPattern;
  426. FcValueDestroy : procedure(v:TFcValue);
  427. FcValueEqual : function(va:TFcValue; vb:TFcValue):TFcBool;
  428. FcValueSave : function(v:TFcValue):TFcValue;
  429. FcPatternDestroy : procedure(p:PFcPattern);
  430. FcPatternEqual : function(pa:PFcPattern; pb:PFcPattern):TFcBool;
  431. FcPatternEqualSubset : function(pa:PFcPattern; pb:PFcPattern; os:PFcObjectSet):TFcBool;
  432. FcPatternHash : function(p:PFcPattern):TFcChar32;
  433. FcPatternAdd : function(p:PFcPattern; _object:pcchar; value:TFcValue; append:TFcBool):TFcBool;
  434. FcPatternAddWeak : function(p:PFcPattern; _object:pcchar; value:TFcValue; append:TFcBool):TFcBool;
  435. FcPatternGet : function(p:PFcPattern; _object:pcchar; id:cint; v:PFcValue):TFcResult;
  436. FcPatternDel : function(p:PFcPattern; _object:pcchar):TFcBool;
  437. FcPatternRemove : function(p:PFcPattern; _object:pcchar; id:cint):TFcBool;
  438. FcPatternAddInteger : function(p:PFcPattern; _object:pcchar; i:cint):TFcBool;
  439. FcPatternAddDouble : function(p:PFcPattern; _object:pcchar; d:double):TFcBool;
  440. FcPatternAddString : function(p:PFcPattern; _object:pcchar; s:PFcChar8):TFcBool;
  441. FcPatternAddMatrix : function(p:PFcPattern; _object:pcchar; s:PFcMatrix):TFcBool;
  442. FcPatternAddCharSet : function(p:PFcPattern; _object:pcchar; c:PFcCharSet):TFcBool;
  443. FcPatternAddBool : function(p:PFcPattern; _object:pcchar; b:TFcBool):TFcBool;
  444. FcPatternAddLangSet : function(p:PFcPattern; _object:pcchar; ls:PFcLangSet):TFcBool;
  445. FcPatternAddRange : function(p:PFcPattern; _object:pcchar; r:PFcRange):TFcBool;
  446. FcPatternGetInteger : function(p:PFcPattern; _object:pcchar; n:cint; i:pcint):TFcResult;
  447. FcPatternGetDouble : function(p:PFcPattern; _object:pcchar; n:cint; d:Pdouble):TFcResult;
  448. FcPatternGetString : function(p:PFcPattern; _object:pcchar; n:cint; s:PPFcChar8):TFcResult;
  449. FcPatternGetMatrix : function(p:PFcPattern; _object:pcchar; n:cint; s:PPFcMatrix):TFcResult;
  450. FcPatternGetCharSet : function(p:PFcPattern; _object:pcchar; n:cint; c:PPFcCharSet):TFcResult;
  451. FcPatternGetBool : function(p:PFcPattern; _object:pcchar; n:cint; b:PFcBool):TFcResult;
  452. FcPatternGetLangSet : function(p:PFcPattern; _object:pcchar; n:cint; ls:PPFcLangSet):TFcResult;
  453. FcPatternGetRange : function(p:PFcPattern; _object:pcchar; id:cint; r:PPFcRange):TFcResult;
  454. FcPatternBuild : function(p:PFcPattern; args:array of const):PFcPattern;
  455. FcPatternFormat : function(pat:PFcPattern; format:PFcChar8):PFcChar8;
  456. FcRangeCreateDouble : function(_begin:double; _end:double):PFcRange;
  457. FcRangeCreateInteger : function(_begin:TFcChar32; _end:TFcChar32):PFcRange;
  458. FcRangeDestroy : procedure(range:PFcRange);
  459. FcRangeCopy : function(r:PFcRange):PFcRange;
  460. FcRangeGetDouble : function(range:PFcRange; _begin:Pdouble; _end:Pdouble):TFcBool;
  461. FcWeightFromOpenType : function(ot_weight:cint):cint;
  462. FcWeightToOpenType : function(fc_weight:cint):cint;
  463. FcStrCopy : function(s:PFcChar8):PFcChar8;
  464. FcStrCopyFilename : function(s:PFcChar8):PFcChar8;
  465. FcStrPlus : function(s1:PFcChar8; s2:PFcChar8):PFcChar8;
  466. FcStrFree : procedure(s:PFcChar8);
  467. FcStrDowncase : function(s:PFcChar8):PFcChar8;
  468. FcStrCmpIgnoreCase : function(s1:PFcChar8; s2:PFcChar8):cint;
  469. FcStrCmp : function(s1:PFcChar8; s2:PFcChar8):cint;
  470. FcStrStrIgnoreCase : function(s1:PFcChar8; s2:PFcChar8):PFcChar8;
  471. FcStrStr : function(s1:PFcChar8; s2:PFcChar8):PFcChar8;
  472. FcUtf8ToUcs4 : function(src_orig:PFcChar8; dst:PFcChar32; len:cint):cint;
  473. FcUtf8Len : function(_string:PFcChar8; len:cint; nchar:pcint; wchar:pcint):TFcBool;
  474. FcUcs4ToUtf8 : function(ucs4:TFcChar32; dest: TUTF8Array):cint;
  475. FcUtf16ToUcs4 : function(src_orig:PFcChar8; endian:TFcEndian; dst:PFcChar32; len:cint):cint;
  476. FcUtf16Len : function(_string:PFcChar8; endian:TFcEndian; len:cint; nchar:pcint; wchar:pcint):TFcBool;
  477. FcStrDirname : function(afile:PFcChar8):PFcChar8;
  478. FcStrBasename : function(afile:PFcChar8):PFcChar8;
  479. FcStrSetCreate : function:PFcStrSet;
  480. FcStrSetMember : function(aset:PFcStrSet; s:PFcChar8):TFcBool;
  481. FcStrSetEqual : function(sa:PFcStrSet; sb:PFcStrSet):TFcBool;
  482. FcStrSetAdd : function(aset:PFcStrSet; s:PFcChar8):TFcBool;
  483. FcStrSetAddFilename : function(aset:PFcStrSet; s:PFcChar8):TFcBool;
  484. FcStrSetDel : function(aset:PFcStrSet; s:PFcChar8):TFcBool;
  485. FcStrSetDestroy : procedure(aset:PFcStrSet);
  486. FcStrListCreate : function(aset:PFcStrSet):PFcStrList;
  487. FcStrListFirst : procedure(list:PFcStrList);
  488. FcStrListNext : function(list:PFcStrList):PFcChar8;
  489. FcStrListDone : procedure(list:PFcStrList);
  490. FcConfigParseAndLoad : function(config:PFcConfig; afile:PFcChar8; complain:TFcBool):TFcBool;
  491. // Macros
  492. Procedure FcMatrixInit(out m : TFCMatrix);
  493. function FC_CHARSET_DONE : TFcChar32;
  494. function FcIsUpper(c : longint) : Boolean;
  495. function FcIsLower(c : longint) : Boolean;
  496. function FcToLower(c : longint) : longint;
  497. Function LoadFontConfigLib(Const ALibName : String; RaiseError : Boolean = True) : Integer;
  498. Function UnLoadFontConfigLib : Integer;
  499. Function FontConfigLibLoaded : Boolean;
  500. implementation
  501. {$IFDEF FPC_DOTTEDUNITS}
  502. uses
  503. System.SysUtils;
  504. {$ELSE FPC_DOTTEDUNITS}
  505. uses
  506. SysUtils;
  507. {$ENDIF FPC_DOTTEDUNITS}
  508. Procedure FcMatrixInit(out m : TFCMatrix);
  509. begin
  510. m.xx:=1;
  511. m.yy:=1;
  512. end;
  513. function FC_CHARSET_DONE : TFcChar32;
  514. begin
  515. FC_CHARSET_DONE:=TFcChar32(-(1));
  516. end;
  517. function FcIsUpper(c : longint) : boolean;
  518. begin
  519. FcIsUpper:=(Ord('A')<=c) and (c<=Ord('Z'));
  520. end;
  521. function FcIsLower(c : longint) : boolean;
  522. begin
  523. FcIsLower:=(Ord('a')<=c) and (c<=Ord('z'));
  524. end;
  525. function FcToLower(c : longint) : longint;
  526. var
  527. if_local1 : longint;
  528. begin
  529. if FcIsUpper(c) then
  530. if_local1:=c-Ord('A')+Ord('a')
  531. else
  532. if_local1:=c;
  533. FcToLower:=if_local1;
  534. end;
  535. var
  536. hlib : tlibhandle;
  537. hcount : integer;
  538. loadedlib : string;
  539. Function FontConfigLibLoaded : Boolean;
  540. begin
  541. Result:=hLib<>NilHandle;
  542. end;
  543. procedure Freefc;
  544. begin
  545. if hlib<>NilHandle then
  546. FreeLibrary(hlib);
  547. hlib:=NilHandle;
  548. FcBlanksCreate:=nil;
  549. FcBlanksDestroy:=nil;
  550. FcBlanksAdd:=nil;
  551. FcBlanksIsMember:=nil;
  552. FcCacheDir:=nil;
  553. FcCacheCopySet:=nil;
  554. FcCacheSubdir:=nil;
  555. FcCacheNumSubdir:=nil;
  556. FcCacheNumFont:=nil;
  557. FcDirCacheUnlink:=nil;
  558. FcDirCacheValid:=nil;
  559. FcDirCacheClean:=nil;
  560. FcCacheCreateTagFile:=nil;
  561. FcConfigHome:=nil;
  562. FcConfigEnableHome:=nil;
  563. FcConfigFilename:=nil;
  564. FcConfigCreate:=nil;
  565. FcConfigReference:=nil;
  566. FcConfigDestroy:=nil;
  567. FcConfigSetCurrent:=nil;
  568. FcConfigGetCurrent:=nil;
  569. FcConfigUptoDate:=nil;
  570. FcConfigBuildFonts:=nil;
  571. FcConfigGetFontDirs:=nil;
  572. FcConfigGetConfigDirs:=nil;
  573. FcConfigGetConfigFiles:=nil;
  574. FcConfigGetCache:=nil;
  575. FcConfigGetBlanks:=nil;
  576. FcConfigGetCacheDirs:=nil;
  577. FcConfigGetRescanInterval:=nil;
  578. FcConfigSetRescanInterval:=nil;
  579. FcConfigGetFonts:=nil;
  580. FcConfigAppFontAddFile:=nil;
  581. FcConfigAppFontAddDir:=nil;
  582. FcConfigAppFontClear:=nil;
  583. FcConfigSubstituteWithPat:=nil;
  584. FcConfigSubstitute:=nil;
  585. FcConfigGetSysRoot:=nil;
  586. FcConfigSetSysRoot:=nil;
  587. FcCharSetCreate:=nil;
  588. FcCharSetNew:=nil;
  589. FcCharSetDestroy:=nil;
  590. FcCharSetAddChar:=nil;
  591. FcCharSetDelChar:=nil;
  592. FcCharSetCopy:=nil;
  593. FcCharSetEqual:=nil;
  594. FcCharSetIntersect:=nil;
  595. FcCharSetUnion:=nil;
  596. FcCharSetSubtract:=nil;
  597. FcCharSetMerge:=nil;
  598. FcCharSetHasChar:=nil;
  599. FcCharSetCount:=nil;
  600. FcCharSetIntersectCount:=nil;
  601. FcCharSetSubtractCount:=nil;
  602. FcCharSetIsSubset:=nil;
  603. FcCharSetFirstPage:=nil;
  604. FcCharSetNextPage:=nil;
  605. FcCharSetCoverage:=nil;
  606. FcValuePrint:=nil;
  607. FcPatternPrint:=nil;
  608. FcFontSetPrint:=nil;
  609. FcGetDefaultLangs:=nil;
  610. FcDefaultSubstitute:=nil;
  611. FcFileIsDir:=nil;
  612. FcFileScan:=nil;
  613. FcDirScan:=nil;
  614. FcDirSave:=nil;
  615. FcDirCacheLoad:=nil;
  616. FcDirCacheRescan:=nil;
  617. FcDirCacheRead:=nil;
  618. FcDirCacheLoadFile:=nil;
  619. FcDirCacheUnload:=nil;
  620. FcFreeTypeQuery:=nil;
  621. FcFontSetCreate:=nil;
  622. FcFontSetDestroy:=nil;
  623. FcFontSetAdd:=nil;
  624. FcInitLoadConfig:=nil;
  625. FcInitLoadConfigAndFonts:=nil;
  626. FcInit:=nil;
  627. FcFini:=nil;
  628. FcGetVersion:=nil;
  629. FcInitReinitialize:=nil;
  630. FcInitBringUptoDate:=nil;
  631. FcGetLangs:=nil;
  632. FcLangNormalize:=nil;
  633. FcLangGetCharSet:=nil;
  634. FcLangSetCreate:=nil;
  635. FcLangSetDestroy:=nil;
  636. FcLangSetCopy:=nil;
  637. FcLangSetAdd:=nil;
  638. FcLangSetDel:=nil;
  639. FcLangSetHasLang:=nil;
  640. FcLangSetCompare:=nil;
  641. FcLangSetContains:=nil;
  642. FcLangSetEqual:=nil;
  643. FcLangSetHash:=nil;
  644. FcLangSetGetLangs:=nil;
  645. FcLangSetUnion:=nil;
  646. FcLangSetSubtract:=nil;
  647. FcObjectSetCreate:=nil;
  648. FcObjectSetAdd:=nil;
  649. FcObjectSetDestroy:=nil;
  650. FcObjectSetBuild:=nil;
  651. FcFontSetList:=nil;
  652. FcFontList:=nil;
  653. FcAtomicCreate:=nil;
  654. FcAtomicLock:=nil;
  655. FcAtomicNewFile:=nil;
  656. FcAtomicOrigFile:=nil;
  657. FcAtomicReplaceOrig:=nil;
  658. FcAtomicDeleteNew:=nil;
  659. FcAtomicUnlock:=nil;
  660. FcAtomicDestroy:=nil;
  661. FcFontSetMatch:=nil;
  662. FcFontMatch:=nil;
  663. FcFontRenderPrepare:=nil;
  664. FcFontSetSort:=nil;
  665. FcFontSort:=nil;
  666. FcFontSetSortDestroy:=nil;
  667. FcMatrixCopy:=nil;
  668. FcMatrixEqual:=nil;
  669. FcMatrixMultiply:=nil;
  670. FcMatrixRotate:=nil;
  671. FcMatrixScale:=nil;
  672. FcMatrixShear:=nil;
  673. FcNameRegisterObjectTypes:=nil;
  674. FcNameUnregisterObjectTypes:=nil;
  675. FcNameGetObjectType:=nil;
  676. FcNameRegisterConstants:=nil;
  677. FcNameUnregisterConstants:=nil;
  678. FcNameGetConstant:=nil;
  679. FcNameConstant:=nil;
  680. FcNameParse:=nil;
  681. FcNameUnparse:=nil;
  682. FcPatternCreate:=nil;
  683. FcPatternDuplicate:=nil;
  684. FcPatternReference:=nil;
  685. FcPatternFilter:=nil;
  686. FcValueDestroy:=nil;
  687. FcValueEqual:=nil;
  688. FcValueSave:=nil;
  689. FcPatternDestroy:=nil;
  690. FcPatternEqual:=nil;
  691. FcPatternEqualSubset:=nil;
  692. FcPatternHash:=nil;
  693. FcPatternAdd:=nil;
  694. FcPatternAddWeak:=nil;
  695. FcPatternGet:=nil;
  696. FcPatternDel:=nil;
  697. FcPatternRemove:=nil;
  698. FcPatternAddInteger:=nil;
  699. FcPatternAddDouble:=nil;
  700. FcPatternAddString:=nil;
  701. FcPatternAddMatrix:=nil;
  702. FcPatternAddCharSet:=nil;
  703. FcPatternAddBool:=nil;
  704. FcPatternAddLangSet:=nil;
  705. FcPatternAddRange:=nil;
  706. FcPatternGetInteger:=nil;
  707. FcPatternGetDouble:=nil;
  708. FcPatternGetString:=nil;
  709. FcPatternGetMatrix:=nil;
  710. FcPatternGetCharSet:=nil;
  711. FcPatternGetBool:=nil;
  712. FcPatternGetLangSet:=nil;
  713. FcPatternGetRange:=nil;
  714. FcPatternBuild:=nil;
  715. FcPatternBuild:=nil;
  716. FcPatternFormat:=nil;
  717. FcRangeCreateDouble:=nil;
  718. FcRangeCreateInteger:=nil;
  719. FcRangeDestroy:=nil;
  720. FcRangeCopy:=nil;
  721. FcRangeGetDouble:=nil;
  722. FcWeightFromOpenType:=nil;
  723. FcWeightToOpenType:=nil;
  724. FcStrCopy:=nil;
  725. FcStrCopyFilename:=nil;
  726. FcStrPlus:=nil;
  727. FcStrFree:=nil;
  728. FcStrDowncase:=nil;
  729. FcStrCmpIgnoreCase:=nil;
  730. FcStrCmp:=nil;
  731. FcStrStrIgnoreCase:=nil;
  732. FcStrStr:=nil;
  733. FcUtf8ToUcs4:=nil;
  734. FcUtf8Len:=nil;
  735. FcUcs4ToUtf8:=nil;
  736. FcUtf16ToUcs4:=nil;
  737. FcUtf16Len:=nil;
  738. FcStrDirname:=nil;
  739. FcStrBasename:=nil;
  740. FcStrSetCreate:=nil;
  741. FcStrSetMember:=nil;
  742. FcStrSetEqual:=nil;
  743. FcStrSetAdd:=nil;
  744. FcStrSetAddFilename:=nil;
  745. FcStrSetDel:=nil;
  746. FcStrSetDestroy:=nil;
  747. FcStrListCreate:=nil;
  748. FcStrListFirst:=nil;
  749. FcStrListNext:=nil;
  750. FcStrListDone:=nil;
  751. FcConfigParseAndLoad:=nil;
  752. end;
  753. Function Loadfc(lib : PAnsiChar) : Boolean;
  754. begin
  755. Freefc;
  756. hlib:=LoadLibrary(lib);
  757. Result:=hlib<>NilHandle;
  758. If not Result then
  759. exit;
  760. if (hlib=NilHandle) then
  761. raise EInOutError.CreateFmt('Could not load library: "%s"',[lib]);
  762. pointer(FcBlanksCreate):=GetProcAddress(hlib,'FcBlanksCreate');
  763. pointer(FcBlanksDestroy):=GetProcAddress(hlib,'FcBlanksDestroy');
  764. pointer(FcBlanksAdd):=GetProcAddress(hlib,'FcBlanksAdd');
  765. pointer(FcBlanksIsMember):=GetProcAddress(hlib,'FcBlanksIsMember');
  766. pointer(FcCacheDir):=GetProcAddress(hlib,'FcCacheDir');
  767. pointer(FcCacheCopySet):=GetProcAddress(hlib,'FcCacheCopySet');
  768. pointer(FcCacheSubdir):=GetProcAddress(hlib,'FcCacheSubdir');
  769. pointer(FcCacheNumSubdir):=GetProcAddress(hlib,'FcCacheNumSubdir');
  770. pointer(FcCacheNumFont):=GetProcAddress(hlib,'FcCacheNumFont');
  771. pointer(FcDirCacheUnlink):=GetProcAddress(hlib,'FcDirCacheUnlink');
  772. pointer(FcDirCacheValid):=GetProcAddress(hlib,'FcDirCacheValid');
  773. pointer(FcDirCacheClean):=GetProcAddress(hlib,'FcDirCacheClean');
  774. pointer(FcCacheCreateTagFile):=GetProcAddress(hlib,'FcCacheCreateTagFile');
  775. pointer(FcConfigHome):=GetProcAddress(hlib,'FcConfigHome');
  776. pointer(FcConfigEnableHome):=GetProcAddress(hlib,'FcConfigEnableHome');
  777. pointer(FcConfigFilename):=GetProcAddress(hlib,'FcConfigFilename');
  778. pointer(FcConfigCreate):=GetProcAddress(hlib,'FcConfigCreate');
  779. pointer(FcConfigReference):=GetProcAddress(hlib,'FcConfigReference');
  780. pointer(FcConfigDestroy):=GetProcAddress(hlib,'FcConfigDestroy');
  781. pointer(FcConfigSetCurrent):=GetProcAddress(hlib,'FcConfigSetCurrent');
  782. pointer(FcConfigGetCurrent):=GetProcAddress(hlib,'FcConfigGetCurrent');
  783. pointer(FcConfigUptoDate):=GetProcAddress(hlib,'FcConfigUptoDate');
  784. pointer(FcConfigBuildFonts):=GetProcAddress(hlib,'FcConfigBuildFonts');
  785. pointer(FcConfigGetFontDirs):=GetProcAddress(hlib,'FcConfigGetFontDirs');
  786. pointer(FcConfigGetConfigDirs):=GetProcAddress(hlib,'FcConfigGetConfigDirs');
  787. pointer(FcConfigGetConfigFiles):=GetProcAddress(hlib,'FcConfigGetConfigFiles');
  788. pointer(FcConfigGetCache):=GetProcAddress(hlib,'FcConfigGetCache');
  789. pointer(FcConfigGetBlanks):=GetProcAddress(hlib,'FcConfigGetBlanks');
  790. pointer(FcConfigGetCacheDirs):=GetProcAddress(hlib,'FcConfigGetCacheDirs');
  791. pointer(FcConfigGetRescanInterval):=GetProcAddress(hlib,'FcConfigGetRescanInterval');
  792. pointer(FcConfigSetRescanInterval):=GetProcAddress(hlib,'FcConfigSetRescanInterval');
  793. pointer(FcConfigGetFonts):=GetProcAddress(hlib,'FcConfigGetFonts');
  794. pointer(FcConfigAppFontAddFile):=GetProcAddress(hlib,'FcConfigAppFontAddFile');
  795. pointer(FcConfigAppFontAddDir):=GetProcAddress(hlib,'FcConfigAppFontAddDir');
  796. pointer(FcConfigAppFontClear):=GetProcAddress(hlib,'FcConfigAppFontClear');
  797. pointer(FcConfigSubstituteWithPat):=GetProcAddress(hlib,'FcConfigSubstituteWithPat');
  798. pointer(FcConfigSubstitute):=GetProcAddress(hlib,'FcConfigSubstitute');
  799. pointer(FcConfigGetSysRoot):=GetProcAddress(hlib,'FcConfigGetSysRoot');
  800. pointer(FcConfigSetSysRoot):=GetProcAddress(hlib,'FcConfigSetSysRoot');
  801. pointer(FcCharSetCreate):=GetProcAddress(hlib,'FcCharSetCreate');
  802. pointer(FcCharSetNew):=GetProcAddress(hlib,'FcCharSetNew');
  803. pointer(FcCharSetDestroy):=GetProcAddress(hlib,'FcCharSetDestroy');
  804. pointer(FcCharSetAddChar):=GetProcAddress(hlib,'FcCharSetAddChar');
  805. pointer(FcCharSetDelChar):=GetProcAddress(hlib,'FcCharSetDelChar');
  806. pointer(FcCharSetCopy):=GetProcAddress(hlib,'FcCharSetCopy');
  807. pointer(FcCharSetEqual):=GetProcAddress(hlib,'FcCharSetEqual');
  808. pointer(FcCharSetIntersect):=GetProcAddress(hlib,'FcCharSetIntersect');
  809. pointer(FcCharSetUnion):=GetProcAddress(hlib,'FcCharSetUnion');
  810. pointer(FcCharSetSubtract):=GetProcAddress(hlib,'FcCharSetSubtract');
  811. pointer(FcCharSetMerge):=GetProcAddress(hlib,'FcCharSetMerge');
  812. pointer(FcCharSetHasChar):=GetProcAddress(hlib,'FcCharSetHasChar');
  813. pointer(FcCharSetCount):=GetProcAddress(hlib,'FcCharSetCount');
  814. pointer(FcCharSetIntersectCount):=GetProcAddress(hlib,'FcCharSetIntersectCount');
  815. pointer(FcCharSetSubtractCount):=GetProcAddress(hlib,'FcCharSetSubtractCount');
  816. pointer(FcCharSetIsSubset):=GetProcAddress(hlib,'FcCharSetIsSubset');
  817. pointer(FcCharSetFirstPage):=GetProcAddress(hlib,'FcCharSetFirstPage');
  818. pointer(FcCharSetNextPage):=GetProcAddress(hlib,'FcCharSetNextPage');
  819. pointer(FcCharSetCoverage):=GetProcAddress(hlib,'FcCharSetCoverage');
  820. pointer(FcValuePrint):=GetProcAddress(hlib,'FcValuePrint');
  821. pointer(FcPatternPrint):=GetProcAddress(hlib,'FcPatternPrint');
  822. pointer(FcFontSetPrint):=GetProcAddress(hlib,'FcFontSetPrint');
  823. pointer(FcGetDefaultLangs):=GetProcAddress(hlib,'FcGetDefaultLangs');
  824. pointer(FcDefaultSubstitute):=GetProcAddress(hlib,'FcDefaultSubstitute');
  825. pointer(FcFileIsDir):=GetProcAddress(hlib,'FcFileIsDir');
  826. pointer(FcFileScan):=GetProcAddress(hlib,'FcFileScan');
  827. pointer(FcDirScan):=GetProcAddress(hlib,'FcDirScan');
  828. pointer(FcDirSave):=GetProcAddress(hlib,'FcDirSave');
  829. pointer(FcDirCacheLoad):=GetProcAddress(hlib,'FcDirCacheLoad');
  830. pointer(FcDirCacheRescan):=GetProcAddress(hlib,'FcDirCacheRescan');
  831. pointer(FcDirCacheRead):=GetProcAddress(hlib,'FcDirCacheRead');
  832. pointer(FcDirCacheLoadFile):=GetProcAddress(hlib,'FcDirCacheLoadFile');
  833. pointer(FcDirCacheUnload):=GetProcAddress(hlib,'FcDirCacheUnload');
  834. pointer(FcFreeTypeQuery):=GetProcAddress(hlib,'FcFreeTypeQuery');
  835. pointer(FcFontSetCreate):=GetProcAddress(hlib,'FcFontSetCreate');
  836. pointer(FcFontSetDestroy):=GetProcAddress(hlib,'FcFontSetDestroy');
  837. pointer(FcFontSetAdd):=GetProcAddress(hlib,'FcFontSetAdd');
  838. pointer(FcInitLoadConfig):=GetProcAddress(hlib,'FcInitLoadConfig');
  839. pointer(FcInitLoadConfigAndFonts):=GetProcAddress(hlib,'FcInitLoadConfigAndFonts');
  840. pointer(FcInit):=GetProcAddress(hlib,'FcInit');
  841. pointer(FcFini):=GetProcAddress(hlib,'FcFini');
  842. pointer(FcGetVersion):=GetProcAddress(hlib,'FcGetVersion');
  843. pointer(FcInitReinitialize):=GetProcAddress(hlib,'FcInitReinitialize');
  844. pointer(FcInitBringUptoDate):=GetProcAddress(hlib,'FcInitBringUptoDate');
  845. pointer(FcGetLangs):=GetProcAddress(hlib,'FcGetLangs');
  846. pointer(FcLangNormalize):=GetProcAddress(hlib,'FcLangNormalize');
  847. pointer(FcLangGetCharSet):=GetProcAddress(hlib,'FcLangGetCharSet');
  848. pointer(FcLangSetCreate):=GetProcAddress(hlib,'FcLangSetCreate');
  849. pointer(FcLangSetDestroy):=GetProcAddress(hlib,'FcLangSetDestroy');
  850. pointer(FcLangSetCopy):=GetProcAddress(hlib,'FcLangSetCopy');
  851. pointer(FcLangSetAdd):=GetProcAddress(hlib,'FcLangSetAdd');
  852. pointer(FcLangSetDel):=GetProcAddress(hlib,'FcLangSetDel');
  853. pointer(FcLangSetHasLang):=GetProcAddress(hlib,'FcLangSetHasLang');
  854. pointer(FcLangSetCompare):=GetProcAddress(hlib,'FcLangSetCompare');
  855. pointer(FcLangSetContains):=GetProcAddress(hlib,'FcLangSetContains');
  856. pointer(FcLangSetEqual):=GetProcAddress(hlib,'FcLangSetEqual');
  857. pointer(FcLangSetHash):=GetProcAddress(hlib,'FcLangSetHash');
  858. pointer(FcLangSetGetLangs):=GetProcAddress(hlib,'FcLangSetGetLangs');
  859. pointer(FcLangSetUnion):=GetProcAddress(hlib,'FcLangSetUnion');
  860. pointer(FcLangSetSubtract):=GetProcAddress(hlib,'FcLangSetSubtract');
  861. pointer(FcObjectSetCreate):=GetProcAddress(hlib,'FcObjectSetCreate');
  862. pointer(FcObjectSetAdd):=GetProcAddress(hlib,'FcObjectSetAdd');
  863. pointer(FcObjectSetDestroy):=GetProcAddress(hlib,'FcObjectSetDestroy');
  864. pointer(FcObjectSetBuild):=GetProcAddress(hlib,'FcObjectSetBuild');
  865. pointer(FcObjectSetBuild):=GetProcAddress(hlib,'FcObjectSetBuild');
  866. pointer(FcFontSetList):=GetProcAddress(hlib,'FcFontSetList');
  867. pointer(FcFontList):=GetProcAddress(hlib,'FcFontList');
  868. pointer(FcAtomicCreate):=GetProcAddress(hlib,'FcAtomicCreate');
  869. pointer(FcAtomicLock):=GetProcAddress(hlib,'FcAtomicLock');
  870. pointer(FcAtomicNewFile):=GetProcAddress(hlib,'FcAtomicNewFile');
  871. pointer(FcAtomicOrigFile):=GetProcAddress(hlib,'FcAtomicOrigFile');
  872. pointer(FcAtomicReplaceOrig):=GetProcAddress(hlib,'FcAtomicReplaceOrig');
  873. pointer(FcAtomicDeleteNew):=GetProcAddress(hlib,'FcAtomicDeleteNew');
  874. pointer(FcAtomicUnlock):=GetProcAddress(hlib,'FcAtomicUnlock');
  875. pointer(FcAtomicDestroy):=GetProcAddress(hlib,'FcAtomicDestroy');
  876. pointer(FcFontSetMatch):=GetProcAddress(hlib,'FcFontSetMatch');
  877. pointer(FcFontMatch):=GetProcAddress(hlib,'FcFontMatch');
  878. pointer(FcFontRenderPrepare):=GetProcAddress(hlib,'FcFontRenderPrepare');
  879. pointer(FcFontSetSort):=GetProcAddress(hlib,'FcFontSetSort');
  880. pointer(FcFontSort):=GetProcAddress(hlib,'FcFontSort');
  881. pointer(FcFontSetSortDestroy):=GetProcAddress(hlib,'FcFontSetSortDestroy');
  882. pointer(FcMatrixCopy):=GetProcAddress(hlib,'FcMatrixCopy');
  883. pointer(FcMatrixEqual):=GetProcAddress(hlib,'FcMatrixEqual');
  884. pointer(FcMatrixMultiply):=GetProcAddress(hlib,'FcMatrixMultiply');
  885. pointer(FcMatrixRotate):=GetProcAddress(hlib,'FcMatrixRotate');
  886. pointer(FcMatrixScale):=GetProcAddress(hlib,'FcMatrixScale');
  887. pointer(FcMatrixShear):=GetProcAddress(hlib,'FcMatrixShear');
  888. pointer(FcNameRegisterObjectTypes):=GetProcAddress(hlib,'FcNameRegisterObjectTypes');
  889. pointer(FcNameUnregisterObjectTypes):=GetProcAddress(hlib,'FcNameUnregisterObjectTypes');
  890. pointer(FcNameGetObjectType):=GetProcAddress(hlib,'FcNameGetObjectType');
  891. pointer(FcNameRegisterConstants):=GetProcAddress(hlib,'FcNameRegisterConstants');
  892. pointer(FcNameUnregisterConstants):=GetProcAddress(hlib,'FcNameUnregisterConstants');
  893. pointer(FcNameGetConstant):=GetProcAddress(hlib,'FcNameGetConstant');
  894. pointer(FcNameConstant):=GetProcAddress(hlib,'FcNameConstant');
  895. pointer(FcNameParse):=GetProcAddress(hlib,'FcNameParse');
  896. pointer(FcNameUnparse):=GetProcAddress(hlib,'FcNameUnparse');
  897. pointer(FcPatternCreate):=GetProcAddress(hlib,'FcPatternCreate');
  898. pointer(FcPatternDuplicate):=GetProcAddress(hlib,'FcPatternDuplicate');
  899. pointer(FcPatternReference):=GetProcAddress(hlib,'FcPatternReference');
  900. pointer(FcPatternFilter):=GetProcAddress(hlib,'FcPatternFilter');
  901. pointer(FcValueDestroy):=GetProcAddress(hlib,'FcValueDestroy');
  902. pointer(FcValueEqual):=GetProcAddress(hlib,'FcValueEqual');
  903. pointer(FcValueSave):=GetProcAddress(hlib,'FcValueSave');
  904. pointer(FcPatternDestroy):=GetProcAddress(hlib,'FcPatternDestroy');
  905. pointer(FcPatternEqual):=GetProcAddress(hlib,'FcPatternEqual');
  906. pointer(FcPatternEqualSubset):=GetProcAddress(hlib,'FcPatternEqualSubset');
  907. pointer(FcPatternHash):=GetProcAddress(hlib,'FcPatternHash');
  908. pointer(FcPatternAdd):=GetProcAddress(hlib,'FcPatternAdd');
  909. pointer(FcPatternAddWeak):=GetProcAddress(hlib,'FcPatternAddWeak');
  910. pointer(FcPatternGet):=GetProcAddress(hlib,'FcPatternGet');
  911. pointer(FcPatternDel):=GetProcAddress(hlib,'FcPatternDel');
  912. pointer(FcPatternRemove):=GetProcAddress(hlib,'FcPatternRemove');
  913. pointer(FcPatternAddInteger):=GetProcAddress(hlib,'FcPatternAddInteger');
  914. pointer(FcPatternAddDouble):=GetProcAddress(hlib,'FcPatternAddDouble');
  915. pointer(FcPatternAddString):=GetProcAddress(hlib,'FcPatternAddString');
  916. pointer(FcPatternAddMatrix):=GetProcAddress(hlib,'FcPatternAddMatrix');
  917. pointer(FcPatternAddCharSet):=GetProcAddress(hlib,'FcPatternAddCharSet');
  918. pointer(FcPatternAddBool):=GetProcAddress(hlib,'FcPatternAddBool');
  919. pointer(FcPatternAddLangSet):=GetProcAddress(hlib,'FcPatternAddLangSet');
  920. pointer(FcPatternAddRange):=GetProcAddress(hlib,'FcPatternAddRange');
  921. pointer(FcPatternGetInteger):=GetProcAddress(hlib,'FcPatternGetInteger');
  922. pointer(FcPatternGetDouble):=GetProcAddress(hlib,'FcPatternGetDouble');
  923. pointer(FcPatternGetString):=GetProcAddress(hlib,'FcPatternGetString');
  924. pointer(FcPatternGetMatrix):=GetProcAddress(hlib,'FcPatternGetMatrix');
  925. pointer(FcPatternGetCharSet):=GetProcAddress(hlib,'FcPatternGetCharSet');
  926. pointer(FcPatternGetBool):=GetProcAddress(hlib,'FcPatternGetBool');
  927. pointer(FcPatternGetLangSet):=GetProcAddress(hlib,'FcPatternGetLangSet');
  928. pointer(FcPatternGetRange):=GetProcAddress(hlib,'FcPatternGetRange');
  929. pointer(FcPatternBuild):=GetProcAddress(hlib,'FcPatternBuild');
  930. pointer(FcPatternBuild):=GetProcAddress(hlib,'FcPatternBuild');
  931. pointer(FcPatternFormat):=GetProcAddress(hlib,'FcPatternFormat');
  932. pointer(FcRangeCreateDouble):=GetProcAddress(hlib,'FcRangeCreateDouble');
  933. pointer(FcRangeCreateInteger):=GetProcAddress(hlib,'FcRangeCreateInteger');
  934. pointer(FcRangeDestroy):=GetProcAddress(hlib,'FcRangeDestroy');
  935. pointer(FcRangeCopy):=GetProcAddress(hlib,'FcRangeCopy');
  936. pointer(FcRangeGetDouble):=GetProcAddress(hlib,'FcRangeGetDouble');
  937. pointer(FcWeightFromOpenType):=GetProcAddress(hlib,'FcWeightFromOpenType');
  938. pointer(FcWeightToOpenType):=GetProcAddress(hlib,'FcWeightToOpenType');
  939. pointer(FcStrCopy):=GetProcAddress(hlib,'FcStrCopy');
  940. pointer(FcStrCopyFilename):=GetProcAddress(hlib,'FcStrCopyFilename');
  941. pointer(FcStrPlus):=GetProcAddress(hlib,'FcStrPlus');
  942. pointer(FcStrFree):=GetProcAddress(hlib,'FcStrFree');
  943. pointer(FcStrDowncase):=GetProcAddress(hlib,'FcStrDowncase');
  944. pointer(FcStrCmpIgnoreCase):=GetProcAddress(hlib,'FcStrCmpIgnoreCase');
  945. pointer(FcStrCmp):=GetProcAddress(hlib,'FcStrCmp');
  946. pointer(FcStrStrIgnoreCase):=GetProcAddress(hlib,'FcStrStrIgnoreCase');
  947. pointer(FcStrStr):=GetProcAddress(hlib,'FcStrStr');
  948. pointer(FcUtf8ToUcs4):=GetProcAddress(hlib,'FcUtf8ToUcs4');
  949. pointer(FcUtf8Len):=GetProcAddress(hlib,'FcUtf8Len');
  950. pointer(FcUcs4ToUtf8):=GetProcAddress(hlib,'FcUcs4ToUtf8');
  951. pointer(FcUtf16ToUcs4):=GetProcAddress(hlib,'FcUtf16ToUcs4');
  952. pointer(FcUtf16Len):=GetProcAddress(hlib,'FcUtf16Len');
  953. pointer(FcStrDirname):=GetProcAddress(hlib,'FcStrDirname');
  954. pointer(FcStrBasename):=GetProcAddress(hlib,'FcStrBasename');
  955. pointer(FcStrSetCreate):=GetProcAddress(hlib,'FcStrSetCreate');
  956. pointer(FcStrSetMember):=GetProcAddress(hlib,'FcStrSetMember');
  957. pointer(FcStrSetEqual):=GetProcAddress(hlib,'FcStrSetEqual');
  958. pointer(FcStrSetAdd):=GetProcAddress(hlib,'FcStrSetAdd');
  959. pointer(FcStrSetAddFilename):=GetProcAddress(hlib,'FcStrSetAddFilename');
  960. pointer(FcStrSetDel):=GetProcAddress(hlib,'FcStrSetDel');
  961. pointer(FcStrSetDestroy):=GetProcAddress(hlib,'FcStrSetDestroy');
  962. pointer(FcStrListCreate):=GetProcAddress(hlib,'FcStrListCreate');
  963. pointer(FcStrListFirst):=GetProcAddress(hlib,'FcStrListFirst');
  964. pointer(FcStrListNext):=GetProcAddress(hlib,'FcStrListNext');
  965. pointer(FcStrListDone):=GetProcAddress(hlib,'FcStrListDone');
  966. pointer(FcConfigParseAndLoad):=GetProcAddress(hlib,'FcConfigParseAndLoad');
  967. end;
  968. Function LoadFontConfigLib(Const ALibName : String; RaiseError : Boolean = true) : Integer;
  969. Var
  970. FN : String;
  971. begin
  972. Result:=-1;
  973. FN:=ALibName;
  974. if FN='' then
  975. FN:=DefaultLibName;
  976. if (HCount>0) then
  977. begin
  978. if (FN=LoadedLib) then
  979. Inc(HCount)
  980. else if RaiseError then
  981. Raise EInoutError.CreateFmt('Cannot load "%s", FontConfig library already loaded as "%s"',[FN,LoadedLib])
  982. else
  983. Exit;
  984. end
  985. else
  986. begin
  987. if LoadFC(PAnsiChar(FN)) then
  988. begin
  989. inc(HCount);
  990. LoadedLib:=FN;
  991. end
  992. else if RaiseError then
  993. raise EInOutError.CreateFmt('Could not load library: "%s"',[FN])
  994. else
  995. Exit;
  996. end;
  997. Result:=HCount;
  998. end;
  999. Function UnLoadFontConfigLib : Integer;
  1000. begin
  1001. if (hCount>0) then
  1002. begin
  1003. Dec(HCount);
  1004. if (HCount=0) then
  1005. FreeFC;
  1006. end;
  1007. Result:=HCount;
  1008. end;
  1009. end.