fontconfig.pas 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. {*
  2. * fontconfig/fontconfig/fontconfig.h
  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. * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
  17. * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
  18. * EVENT SHALL THE AUTHOR(S) 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. {$IFNDEF FPC_DOTTEDUNITS}
  25. unit fontconfig;
  26. {$ENDIF FPC_DOTTEDUNITS}
  27. {$mode objfpc}{$H+}
  28. {$packrecords c}
  29. interface
  30. {$IFDEF FPC_DOTTEDUNITS}
  31. uses
  32. System.Classes, System.SysUtils, Api.X11.X, Api.X11.Xlib, Api.X11.Xutil, System.CTypes;
  33. {$ELSE FPC_DOTTEDUNITS}
  34. uses
  35. Classes, SysUtils, X, XLib, Xutil, ctypes;
  36. {$ENDIF FPC_DOTTEDUNITS}
  37. const
  38. {$IF Defined(DARWIN)}
  39. fclib = 'libfontconfig.dylib';
  40. {$LINKLIB libfontconfig}
  41. {$ELSE}
  42. fclib = 'libfontconfig.so';
  43. {$IFEND}
  44. //#define FcPublic
  45. type
  46. FcChar8 = cuchar;
  47. PFcChar8 = ^FcChar8;
  48. FcChar16 = cushort;
  49. FcChar32 = cuint;
  50. FcBool = cint;
  51. const
  52. {*
  53. * Current Fontconfig version number. This same number
  54. * must appear in the fontconfig configure.in file. Yes,
  55. * it'a a pain to synchronize version numbers like this.
  56. *}
  57. FC_MAJOR = 2;
  58. FC_MINOR = 8;
  59. FC_REVISION = 0;
  60. FC_VERSION = ((FC_MAJOR * 10000) + (FC_MINOR * 100) + (FC_REVISION));
  61. {*
  62. * Current font cache file format version
  63. * This is appended to the cache files so that multiple
  64. * versions of the library will peacefully coexist
  65. *
  66. * Change this value whenever the disk format for the cache file
  67. * changes in any non-compatible way. Try to avoid such changes as
  68. * it means multiple copies of the font information.
  69. *}
  70. FC_CACHE_VERSION = '3';
  71. FcTrue = 1;
  72. FcFalse = 0;
  73. const
  74. FC_FAMILY = 'family'; //* String */
  75. FC_STYLE = 'style'; //* String */
  76. FC_SLANT = 'slant'; //* Int */
  77. FC_WEIGHT = 'weight'; //* Int */
  78. FC_SIZE = 'size'; //* Double */
  79. FC_ASPECT = 'aspect'; //* Double */
  80. FC_PIXEL_SIZE = 'pixelsize'; //* Double */
  81. FC_SPACING = 'spacing'; //* Int */
  82. FC_FOUNDRY = 'foundry'; //* String */
  83. FC_ANTIALIAS = 'antialias'; //* Bool (depends) */
  84. FC_HINTING = 'hinting'; //* Bool (true) */
  85. FC_HINT_STYLE = 'hintstyle'; //* Int */
  86. FC_VERTICAL_LAYOUT = 'verticallayout';//* Bool (false) */
  87. FC_AUTOHINT = 'autohint'; //* Bool (false) */
  88. FC_GLOBAL_ADVANCE = 'globaladvance'; //* Bool (true) */
  89. FC_WIDTH= 'width'; //* Int */
  90. FC_FILE = 'file'; //* String */
  91. FC_INDEX = 'index'; //* Int */
  92. FC_FT_FACE = 'ftface'; //* FT_Face */
  93. FC_RASTERIZER = 'rasterizer'; //* String */
  94. FC_OUTLINE = 'outline'; //* Bool */
  95. FC_SCALABLE = 'scalable'; //* Bool */
  96. FC_SCALE = 'scale'; //* double */
  97. FC_DPI = 'dpi'; //* double */
  98. FC_RGBA = 'rgba'; //* Int */
  99. FC_MINSPACE = 'minspace'; //* Bool use minimum line spacing */
  100. FC_SOURCE = 'source'; //* String (X11, freetype) */
  101. FC_CHARSET = 'charset'; //* CharSet */
  102. FC_LANG = 'lang'; //* String RFC 3066 langs */
  103. FC_FONTVERSION = 'fontversion'; //* Int from 'head' table */
  104. FC_FULLNAME = 'fullname'; //* String */
  105. FC_FAMILYLANG = 'familylang'; //* String RFC 3066 langs */
  106. FC_STYLELANG = 'stylelang'; //* String RFC 3066 langs */
  107. FC_FULLNAMELANG = 'fullnamelang'; //* String RFC 3066 langs */
  108. FC_CAPABILITY = 'capability'; //* String */
  109. FC_FONTFORMAT = 'fontformat'; //* String */
  110. FC_EMBOLDEN = 'embolden'; //* Bool - true if emboldening needed*/
  111. FC_EMBEDDED_BITMAP = 'embeddedbitmap';//* Bool - true to enable embedded bitmaps */
  112. FC_DECORATIVE = 'decorative'; //* Bool - true if style is a decorative variant */
  113. FC_LCD_FILTER = 'lcdfilter'; //* Int */
  114. //FC_CACHE_SUFFIX ".cache-"FC_CACHE_VERSION
  115. //FC_DIR_CACHE_FILE "fonts.cache-"FC_CACHE_VERSION
  116. //FC_USER_CACHE_FILE ".fonts.cache-"FC_CACHE_VERSION
  117. // Adjust outline rasterizer */
  118. FC_CHAR_WIDTH = 'charwidth'; // Int */
  119. FC_CHAR_HEIGHT = 'charheight'; // Int */
  120. FC_MATRIX = 'matrix'; //* FcMatrix */
  121. FC_WEIGHT_THIN = 0;
  122. FC_WEIGHT_EXTRALIGHT = 40;
  123. FC_WEIGHT_ULTRALIGHT = FC_WEIGHT_EXTRALIGHT;
  124. FC_WEIGHT_LIGHT = 50;
  125. FC_WEIGHT_BOOK = 75;
  126. FC_WEIGHT_REGULAR = 80;
  127. FC_WEIGHT_NORMAL = FC_WEIGHT_REGULAR;
  128. FC_WEIGHT_MEDIUM = 100;
  129. FC_WEIGHT_DEMIBOLD = 180;
  130. FC_WEIGHT_SEMIBOLD = FC_WEIGHT_DEMIBOLD;
  131. FC_WEIGHT_BOLD = 200;
  132. FC_WEIGHT_EXTRABOLD = 205;
  133. FC_WEIGHT_ULTRABOLD = FC_WEIGHT_EXTRABOLD;
  134. FC_WEIGHT_BLACK = 210;
  135. FC_WEIGHT_HEAVY = FC_WEIGHT_BLACK;
  136. FC_WEIGHT_EXTRABLACK = 215;
  137. FC_WEIGHT_ULTRABLACK = FC_WEIGHT_EXTRABLACK;
  138. FC_SLANT_ROMAN = 0;
  139. FC_SLANT_ITALIC = 100;
  140. FC_SLANT_OBLIQUE = 110;
  141. FC_WIDTH_ULTRACONDENSED = 50;
  142. FC_WIDTH_EXTRACONDENSED = 63;
  143. FC_WIDTH_CONDENSED = 75;
  144. FC_WIDTH_SEMICONDENSED = 87;
  145. FC_WIDTH_NORMAL = 100;
  146. FC_WIDTH_SEMIEXPANDED = 113;
  147. FC_WIDTH_EXPANDED = 125;
  148. FC_WIDTH_EXTRAEXPANDED = 150;
  149. FC_WIDTH_ULTRAEXPANDED = 200;
  150. FC_PROPORTIONAL = 0;
  151. FC_DUAL = 90;
  152. FC_MONO = 100;
  153. FC_CHARCELL = 110;
  154. //* sub-pixel order */
  155. FC_RGBA_UNKNOWN = 0;
  156. FC_RGBA_RGB = 1;
  157. FC_RGBA_BGR = 2;
  158. FC_RGBA_VRGB = 3;
  159. FC_RGBA_VBGR = 4;
  160. FC_RGBA_NONE = 5;
  161. // hinting style */
  162. FC_HINT_NONE = 0;
  163. FC_HINT_SLIGHT = 1;
  164. FC_HINT_MEDIUM = 2;
  165. FC_HINT_FULL = 3;
  166. // LCD filter */
  167. FC_LCD_NONE = 0;
  168. FC_LCD_DEFAULT = 1;
  169. FC_LCD_LIGHT = 2;
  170. FC_LCD_LEGACY = 3;
  171. type
  172. TFcType = Byte; // In C was a enum
  173. const
  174. FcTypeVoid = 0;
  175. FcTypeInteger = 1;
  176. FcTypeDouble = 2;
  177. FcTypeString = 3;
  178. FcTypeBool = 4;
  179. FcTypeMatrix = 5;
  180. FcTypeCharSet = 6;
  181. FcTypeFTFace = 7;
  182. FcTypeLangSet = 8;
  183. type
  184. TFcMatrix = record
  185. xx, xy, yx, yy: double;
  186. end;
  187. //#define FcMatrixInit(m) ((m)->xx = (m)->yy = 1, \
  188. // (m)->xy = (m)->yx = 0)
  189. {*
  190. * A data structure to represent the available glyphs in a font.
  191. * This is represented as a sparse boolean btree.
  192. *}
  193. TFcCharSet = record
  194. dummy : integer;
  195. end;
  196. PFcCharSet = ^TFcCharSet;
  197. TFcObjectType = record
  198. object_: PAnsiChar;
  199. type_: TFcType;
  200. end;
  201. TFcConstant = record
  202. name: PFcChar8;
  203. object_: PAnsiChar;
  204. value: cint;
  205. end;
  206. TFcResult = (
  207. FcResultMatch, FcResultNoMatch, FcResultTypeMismatch, FcResultNoId,
  208. FcResultOutOfMemory);
  209. TFcPattern = record
  210. dummy : integer;
  211. end;
  212. PFcPattern = ^TFcPattern;
  213. PPFcPattern = ^PFcPattern;
  214. TFcLangSet = record
  215. dummy : integer;
  216. end;
  217. TFcValue = record
  218. type_: TFcType;
  219. (*union {
  220. const FcChar8 *s;
  221. int i;
  222. FcBool b;
  223. double d;
  224. const FcMatrix *m;
  225. const FcCharSet *c;
  226. void *f;
  227. const FcLangSet *l;
  228. } u;*)
  229. end;
  230. TFcFontSet = packed record
  231. nfont : integer;
  232. sfont : integer;
  233. fonts : PPFcPattern;
  234. end;
  235. PFcFontSet = ^TFcFontSet;
  236. implementation
  237. end.