jassub 1.7.11 → 1.7.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/LICENSE +22 -22
  2. package/README.md +251 -251
  3. package/dist/COPYRIGHT +951 -951
  4. package/dist/jassub-worker-modern.wasm +0 -0
  5. package/dist/jassub-worker.js +11 -11
  6. package/dist/jassub-worker.wasm +0 -0
  7. package/dist/jassub-worker.wasm.js +1 -1
  8. package/dist/jassub.es.js +1 -1
  9. package/dist/jassub.umd.js +1 -1
  10. package/dist/js/jassub-worker-modern.js +119 -1
  11. package/dist/js/jassub-worker-modern.wasm +0 -0
  12. package/dist/js/jassub-worker.js +122 -4
  13. package/dist/js/jassub-worker.wasm +0 -0
  14. package/dist/js/jassub-worker.wasm.js +26 -25
  15. package/dist/js/jassub.js +832 -832
  16. package/dist/libraries/bin/brotli.js +1 -0
  17. package/dist/libraries/include/ass/ass.h +812 -0
  18. package/dist/libraries/include/ass/ass_types.h +292 -0
  19. package/dist/libraries/include/brotli/decode.h +344 -0
  20. package/dist/libraries/include/brotli/encode.h +448 -0
  21. package/dist/libraries/include/brotli/port.h +288 -0
  22. package/dist/libraries/include/brotli/types.h +83 -0
  23. package/dist/libraries/include/expat.h +1064 -0
  24. package/dist/libraries/include/expat_config.h +115 -0
  25. package/dist/libraries/include/expat_external.h +165 -0
  26. package/dist/libraries/include/fontconfig/fcfreetype.h +59 -0
  27. package/dist/libraries/include/fontconfig/fcprivate.h +134 -0
  28. package/dist/libraries/include/fontconfig/fontconfig.h +1154 -0
  29. package/dist/libraries/include/freetype2/freetype/config/ftconfig.h +63 -0
  30. package/dist/libraries/include/freetype2/freetype/config/ftheader.h +824 -0
  31. package/dist/libraries/include/freetype2/freetype/config/ftmodule.h +20 -0
  32. package/dist/libraries/include/freetype2/freetype/config/ftoption.h +1011 -0
  33. package/dist/libraries/include/freetype2/freetype/config/ftstdlib.h +175 -0
  34. package/dist/libraries/include/freetype2/freetype/config/integer-types.h +245 -0
  35. package/dist/libraries/include/freetype2/freetype/config/mac-support.h +49 -0
  36. package/dist/libraries/include/freetype2/freetype/config/public-macros.h +120 -0
  37. package/dist/libraries/include/freetype2/freetype/freetype.h +4833 -0
  38. package/dist/libraries/include/freetype2/freetype/ftadvanc.h +188 -0
  39. package/dist/libraries/include/freetype2/freetype/ftbbox.h +101 -0
  40. package/dist/libraries/include/freetype2/freetype/ftbdf.h +212 -0
  41. package/dist/libraries/include/freetype2/freetype/ftbitmap.h +329 -0
  42. package/dist/libraries/include/freetype2/freetype/ftbzip2.h +102 -0
  43. package/dist/libraries/include/freetype2/freetype/ftcache.h +1087 -0
  44. package/dist/libraries/include/freetype2/freetype/ftchapters.h +147 -0
  45. package/dist/libraries/include/freetype2/freetype/ftcid.h +167 -0
  46. package/dist/libraries/include/freetype2/freetype/ftcolor.h +1609 -0
  47. package/dist/libraries/include/freetype2/freetype/ftdriver.h +1193 -0
  48. package/dist/libraries/include/freetype2/freetype/fterrdef.h +279 -0
  49. package/dist/libraries/include/freetype2/freetype/fterrors.h +296 -0
  50. package/dist/libraries/include/freetype2/freetype/ftfntfmt.h +93 -0
  51. package/dist/libraries/include/freetype2/freetype/ftgasp.h +143 -0
  52. package/dist/libraries/include/freetype2/freetype/ftglyph.h +664 -0
  53. package/dist/libraries/include/freetype2/freetype/ftgxval.h +354 -0
  54. package/dist/libraries/include/freetype2/freetype/ftgzip.h +151 -0
  55. package/dist/libraries/include/freetype2/freetype/ftimage.h +1276 -0
  56. package/dist/libraries/include/freetype2/freetype/ftincrem.h +348 -0
  57. package/dist/libraries/include/freetype2/freetype/ftlcdfil.h +323 -0
  58. package/dist/libraries/include/freetype2/freetype/ftlist.h +296 -0
  59. package/dist/libraries/include/freetype2/freetype/ftlogging.h +184 -0
  60. package/dist/libraries/include/freetype2/freetype/ftlzw.h +100 -0
  61. package/dist/libraries/include/freetype2/freetype/ftmac.h +289 -0
  62. package/dist/libraries/include/freetype2/freetype/ftmm.h +752 -0
  63. package/dist/libraries/include/freetype2/freetype/ftmodapi.h +806 -0
  64. package/dist/libraries/include/freetype2/freetype/ftmoderr.h +204 -0
  65. package/dist/libraries/include/freetype2/freetype/ftotval.h +206 -0
  66. package/dist/libraries/include/freetype2/freetype/ftoutln.h +586 -0
  67. package/dist/libraries/include/freetype2/freetype/ftparams.h +203 -0
  68. package/dist/libraries/include/freetype2/freetype/ftpfr.h +179 -0
  69. package/dist/libraries/include/freetype2/freetype/ftrender.h +244 -0
  70. package/dist/libraries/include/freetype2/freetype/ftsizes.h +159 -0
  71. package/dist/libraries/include/freetype2/freetype/ftsnames.h +272 -0
  72. package/dist/libraries/include/freetype2/freetype/ftstroke.h +773 -0
  73. package/dist/libraries/include/freetype2/freetype/ftsynth.h +83 -0
  74. package/dist/libraries/include/freetype2/freetype/ftsystem.h +352 -0
  75. package/dist/libraries/include/freetype2/freetype/fttrigon.h +350 -0
  76. package/dist/libraries/include/freetype2/freetype/fttypes.h +615 -0
  77. package/dist/libraries/include/freetype2/freetype/ftwinfnt.h +276 -0
  78. package/dist/libraries/include/freetype2/freetype/t1tables.h +773 -0
  79. package/dist/libraries/include/freetype2/freetype/ttnameid.h +1235 -0
  80. package/dist/libraries/include/freetype2/freetype/tttables.h +855 -0
  81. package/dist/libraries/include/freetype2/freetype/tttags.h +123 -0
  82. package/dist/libraries/include/freetype2/ft2build.h +42 -0
  83. package/dist/libraries/include/fribidi/fribidi-arabic.h +81 -0
  84. package/dist/libraries/include/fribidi/fribidi-begindecls.h +3 -0
  85. package/dist/libraries/include/fribidi/fribidi-bidi-types-list.h +96 -0
  86. package/dist/libraries/include/fribidi/fribidi-bidi-types.h +405 -0
  87. package/dist/libraries/include/fribidi/fribidi-bidi.h +142 -0
  88. package/dist/libraries/include/fribidi/fribidi-brackets.h +89 -0
  89. package/dist/libraries/include/fribidi/fribidi-char-sets-list.h +54 -0
  90. package/dist/libraries/include/fribidi/fribidi-char-sets.h +106 -0
  91. package/dist/libraries/include/fribidi/fribidi-common.h +158 -0
  92. package/dist/libraries/include/fribidi/fribidi-config.h +23 -0
  93. package/dist/libraries/include/fribidi/fribidi-deprecated.h +175 -0
  94. package/dist/libraries/include/fribidi/fribidi-enddecls.h +3 -0
  95. package/dist/libraries/include/fribidi/fribidi-flags.h +72 -0
  96. package/dist/libraries/include/fribidi/fribidi-joining-types-list.h +44 -0
  97. package/dist/libraries/include/fribidi/fribidi-joining-types.h +249 -0
  98. package/dist/libraries/include/fribidi/fribidi-joining.h +74 -0
  99. package/dist/libraries/include/fribidi/fribidi-mirroring.h +86 -0
  100. package/dist/libraries/include/fribidi/fribidi-shape.h +71 -0
  101. package/dist/libraries/include/fribidi/fribidi-types.h +79 -0
  102. package/dist/libraries/include/fribidi/fribidi-unicode-version.h +10 -0
  103. package/dist/libraries/include/fribidi/fribidi-unicode.h +105 -0
  104. package/dist/libraries/include/fribidi/fribidi.h +129 -0
  105. package/dist/libraries/include/harfbuzz/hb-aat-layout.h +795 -0
  106. package/dist/libraries/include/harfbuzz/hb-aat.h +38 -0
  107. package/dist/libraries/include/harfbuzz/hb-blob.h +160 -0
  108. package/dist/libraries/include/harfbuzz/hb-buffer.h +799 -0
  109. package/dist/libraries/include/harfbuzz/hb-common.h +902 -0
  110. package/dist/libraries/include/harfbuzz/hb-cplusplus.hh +221 -0
  111. package/dist/libraries/include/harfbuzz/hb-deprecated.h +251 -0
  112. package/dist/libraries/include/harfbuzz/hb-draw.h +325 -0
  113. package/dist/libraries/include/harfbuzz/hb-face.h +181 -0
  114. package/dist/libraries/include/harfbuzz/hb-font.h +1108 -0
  115. package/dist/libraries/include/harfbuzz/hb-ft.h +145 -0
  116. package/dist/libraries/include/harfbuzz/hb-map.h +124 -0
  117. package/dist/libraries/include/harfbuzz/hb-ot-color.h +146 -0
  118. package/dist/libraries/include/harfbuzz/hb-ot-deprecated.h +141 -0
  119. package/dist/libraries/include/harfbuzz/hb-ot-font.h +45 -0
  120. package/dist/libraries/include/harfbuzz/hb-ot-layout.h +503 -0
  121. package/dist/libraries/include/harfbuzz/hb-ot-math.h +333 -0
  122. package/dist/libraries/include/harfbuzz/hb-ot-meta.h +72 -0
  123. package/dist/libraries/include/harfbuzz/hb-ot-metrics.h +129 -0
  124. package/dist/libraries/include/harfbuzz/hb-ot-name.h +158 -0
  125. package/dist/libraries/include/harfbuzz/hb-ot-shape.h +53 -0
  126. package/dist/libraries/include/harfbuzz/hb-ot-var.h +191 -0
  127. package/dist/libraries/include/harfbuzz/hb-ot.h +49 -0
  128. package/dist/libraries/include/harfbuzz/hb-set.h +200 -0
  129. package/dist/libraries/include/harfbuzz/hb-shape-plan.h +122 -0
  130. package/dist/libraries/include/harfbuzz/hb-shape.h +62 -0
  131. package/dist/libraries/include/harfbuzz/hb-style.h +81 -0
  132. package/dist/libraries/include/harfbuzz/hb-subset-repacker.h +81 -0
  133. package/dist/libraries/include/harfbuzz/hb-subset.h +234 -0
  134. package/dist/libraries/include/harfbuzz/hb-unicode.h +643 -0
  135. package/dist/libraries/include/harfbuzz/hb-version.h +95 -0
  136. package/dist/libraries/include/harfbuzz/hb.h +50 -0
  137. package/dist/libraries/lib/cmake/expat-2.4.7/expat-config-version.cmake +70 -0
  138. package/dist/libraries/lib/cmake/expat-2.4.7/expat-config.cmake +99 -0
  139. package/dist/libraries/lib/cmake/expat-2.4.7/expat-noconfig.cmake +19 -0
  140. package/dist/libraries/lib/cmake/expat-2.4.7/expat.cmake +99 -0
  141. package/dist/libraries/lib/libass.a +0 -0
  142. package/dist/libraries/lib/libass.la +41 -0
  143. package/dist/libraries/lib/libbrotlicommon.a +0 -0
  144. package/dist/libraries/lib/libbrotlidec.a +0 -0
  145. package/dist/libraries/lib/libbrotlienc.a +0 -0
  146. package/dist/libraries/lib/libexpat.a +0 -0
  147. package/dist/libraries/lib/libfontconfig.a +0 -0
  148. package/dist/libraries/lib/libfontconfig.la +41 -0
  149. package/dist/libraries/lib/libfreetype.a +0 -0
  150. package/dist/libraries/lib/libfreetype.la +41 -0
  151. package/dist/libraries/lib/libfribidi.a +0 -0
  152. package/dist/libraries/lib/libfribidi.la +41 -0
  153. package/dist/libraries/lib/libharfbuzz-subset.a +0 -0
  154. package/dist/libraries/lib/libharfbuzz-subset.la +41 -0
  155. package/dist/libraries/lib/libharfbuzz.a +0 -0
  156. package/dist/libraries/lib/libharfbuzz.la +41 -0
  157. package/dist/libraries/lib/pkgconfig/expat.pc +11 -0
  158. package/dist/libraries/lib/pkgconfig/fontconfig.pc +18 -0
  159. package/dist/libraries/lib/pkgconfig/freetype2.pc +14 -0
  160. package/dist/libraries/lib/pkgconfig/fribidi.pc +13 -0
  161. package/dist/libraries/lib/pkgconfig/harfbuzz-subset.pc +12 -0
  162. package/dist/libraries/lib/pkgconfig/harfbuzz.pc +13 -0
  163. package/dist/libraries/lib/pkgconfig/libass.pc +13 -0
  164. package/dist/libraries/lib/pkgconfig/libbrotlicommon.pc +11 -0
  165. package/dist/libraries/lib/pkgconfig/libbrotlidec.pc +12 -0
  166. package/dist/libraries/lib/pkgconfig/libbrotlienc.pc +12 -0
  167. package/dist/libraries/share/aclocal/freetype2.m4 +194 -0
  168. package/dist/libraries/share/doc/expat/AUTHORS +10 -0
  169. package/dist/libraries/share/doc/expat/changelog +1161 -0
  170. package/index.d.ts +115 -115
  171. package/package.json +1 -1
@@ -0,0 +1,1193 @@
1
+ /****************************************************************************
2
+ *
3
+ * ftdriver.h
4
+ *
5
+ * FreeType API for controlling driver modules (specification only).
6
+ *
7
+ * Copyright (C) 2017-2021 by
8
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
9
+ *
10
+ * This file is part of the FreeType project, and may only be used,
11
+ * modified, and distributed under the terms of the FreeType project
12
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
13
+ * this file you indicate that you have read the license and
14
+ * understand and accept it fully.
15
+ *
16
+ */
17
+
18
+
19
+ #ifndef FTDRIVER_H_
20
+ #define FTDRIVER_H_
21
+
22
+ #include <freetype/freetype.h>
23
+ #include <freetype/ftparams.h>
24
+
25
+ #ifdef FREETYPE_H
26
+ #error "freetype.h of FreeType 1 has been loaded!"
27
+ #error "Please fix the directory search order for header files"
28
+ #error "so that freetype.h of FreeType 2 is found first."
29
+ #endif
30
+
31
+
32
+ FT_BEGIN_HEADER
33
+
34
+
35
+ /**************************************************************************
36
+ *
37
+ * @section:
38
+ * auto_hinter
39
+ *
40
+ * @title:
41
+ * The auto-hinter
42
+ *
43
+ * @abstract:
44
+ * Controlling the auto-hinting module.
45
+ *
46
+ * @description:
47
+ * While FreeType's auto-hinter doesn't expose API functions by itself,
48
+ * it is possible to control its behaviour with @FT_Property_Set and
49
+ * @FT_Property_Get. The following lists the available properties
50
+ * together with the necessary macros and structures.
51
+ *
52
+ * Note that the auto-hinter's module name is 'autofitter' for historical
53
+ * reasons.
54
+ *
55
+ * Available properties are @increase-x-height, @no-stem-darkening
56
+ * (experimental), @darkening-parameters (experimental),
57
+ * @glyph-to-script-map (experimental), @fallback-script (experimental),
58
+ * and @default-script (experimental), as documented in the @properties
59
+ * section.
60
+ *
61
+ */
62
+
63
+
64
+ /**************************************************************************
65
+ *
66
+ * @section:
67
+ * cff_driver
68
+ *
69
+ * @title:
70
+ * The CFF driver
71
+ *
72
+ * @abstract:
73
+ * Controlling the CFF driver module.
74
+ *
75
+ * @description:
76
+ * While FreeType's CFF driver doesn't expose API functions by itself, it
77
+ * is possible to control its behaviour with @FT_Property_Set and
78
+ * @FT_Property_Get.
79
+ *
80
+ * The CFF driver's module name is 'cff'.
81
+ *
82
+ * Available properties are @hinting-engine, @no-stem-darkening,
83
+ * @darkening-parameters, and @random-seed, as documented in the
84
+ * @properties section.
85
+ *
86
+ *
87
+ * **Hinting and anti-aliasing principles of the new engine**
88
+ *
89
+ * The rasterizer is positioning horizontal features (e.g., ascender
90
+ * height & x-height, or crossbars) on the pixel grid and minimizing the
91
+ * amount of anti-aliasing applied to them, while placing vertical
92
+ * features (vertical stems) on the pixel grid without hinting, thus
93
+ * representing the stem position and weight accurately. Sometimes the
94
+ * vertical stems may be only partially black. In this context,
95
+ * 'anti-aliasing' means that stems are not positioned exactly on pixel
96
+ * borders, causing a fuzzy appearance.
97
+ *
98
+ * There are two principles behind this approach.
99
+ *
100
+ * 1) No hinting in the horizontal direction: Unlike 'superhinted'
101
+ * TrueType, which changes glyph widths to accommodate regular
102
+ * inter-glyph spacing, Adobe's approach is 'faithful to the design' in
103
+ * representing both the glyph width and the inter-glyph spacing designed
104
+ * for the font. This makes the screen display as close as it can be to
105
+ * the result one would get with infinite resolution, while preserving
106
+ * what is considered the key characteristics of each glyph. Note that
107
+ * the distances between unhinted and grid-fitted positions at small
108
+ * sizes are comparable to kerning values and thus would be noticeable
109
+ * (and distracting) while reading if hinting were applied.
110
+ *
111
+ * One of the reasons to not hint horizontally is anti-aliasing for LCD
112
+ * screens: The pixel geometry of modern displays supplies three vertical
113
+ * subpixels as the eye moves horizontally across each visible pixel. On
114
+ * devices where we can be certain this characteristic is present a
115
+ * rasterizer can take advantage of the subpixels to add increments of
116
+ * weight. In Western writing systems this turns out to be the more
117
+ * critical direction anyway; the weights and spacing of vertical stems
118
+ * (see above) are central to Armenian, Cyrillic, Greek, and Latin type
119
+ * designs. Even when the rasterizer uses greyscale anti-aliasing instead
120
+ * of color (a necessary compromise when one doesn't know the screen
121
+ * characteristics), the unhinted vertical features preserve the design's
122
+ * weight and spacing much better than aliased type would.
123
+ *
124
+ * 2) Alignment in the vertical direction: Weights and spacing along the
125
+ * y~axis are less critical; what is much more important is the visual
126
+ * alignment of related features (like cap-height and x-height). The
127
+ * sense of alignment for these is enhanced by the sharpness of grid-fit
128
+ * edges, while the cruder vertical resolution (full pixels instead of
129
+ * 1/3 pixels) is less of a problem.
130
+ *
131
+ * On the technical side, horizontal alignment zones for ascender,
132
+ * x-height, and other important height values (traditionally called
133
+ * 'blue zones') as defined in the font are positioned independently,
134
+ * each being rounded to the nearest pixel edge, taking care of overshoot
135
+ * suppression at small sizes, stem darkening, and scaling.
136
+ *
137
+ * Hstems (this is, hint values defined in the font to help align
138
+ * horizontal features) that fall within a blue zone are said to be
139
+ * 'captured' and are aligned to that zone. Uncaptured stems are moved
140
+ * in one of four ways, top edge up or down, bottom edge up or down.
141
+ * Unless there are conflicting hstems, the smallest movement is taken to
142
+ * minimize distortion.
143
+ *
144
+ */
145
+
146
+
147
+ /**************************************************************************
148
+ *
149
+ * @section:
150
+ * pcf_driver
151
+ *
152
+ * @title:
153
+ * The PCF driver
154
+ *
155
+ * @abstract:
156
+ * Controlling the PCF driver module.
157
+ *
158
+ * @description:
159
+ * While FreeType's PCF driver doesn't expose API functions by itself, it
160
+ * is possible to control its behaviour with @FT_Property_Set and
161
+ * @FT_Property_Get. Right now, there is a single property
162
+ * @no-long-family-names available if FreeType is compiled with
163
+ * PCF_CONFIG_OPTION_LONG_FAMILY_NAMES.
164
+ *
165
+ * The PCF driver's module name is 'pcf'.
166
+ *
167
+ */
168
+
169
+
170
+ /**************************************************************************
171
+ *
172
+ * @section:
173
+ * t1_cid_driver
174
+ *
175
+ * @title:
176
+ * The Type 1 and CID drivers
177
+ *
178
+ * @abstract:
179
+ * Controlling the Type~1 and CID driver modules.
180
+ *
181
+ * @description:
182
+ * It is possible to control the behaviour of FreeType's Type~1 and
183
+ * Type~1 CID drivers with @FT_Property_Set and @FT_Property_Get.
184
+ *
185
+ * Behind the scenes, both drivers use the Adobe CFF engine for hinting;
186
+ * however, the used properties must be specified separately.
187
+ *
188
+ * The Type~1 driver's module name is 'type1'; the CID driver's module
189
+ * name is 't1cid'.
190
+ *
191
+ * Available properties are @hinting-engine, @no-stem-darkening,
192
+ * @darkening-parameters, and @random-seed, as documented in the
193
+ * @properties section.
194
+ *
195
+ * Please see the @cff_driver section for more details on the new hinting
196
+ * engine.
197
+ *
198
+ */
199
+
200
+
201
+ /**************************************************************************
202
+ *
203
+ * @section:
204
+ * tt_driver
205
+ *
206
+ * @title:
207
+ * The TrueType driver
208
+ *
209
+ * @abstract:
210
+ * Controlling the TrueType driver module.
211
+ *
212
+ * @description:
213
+ * While FreeType's TrueType driver doesn't expose API functions by
214
+ * itself, it is possible to control its behaviour with @FT_Property_Set
215
+ * and @FT_Property_Get. The following lists the available properties
216
+ * together with the necessary macros and structures.
217
+ *
218
+ * The TrueType driver's module name is 'truetype'.
219
+ *
220
+ * A single property @interpreter-version is available, as documented in
221
+ * the @properties section.
222
+ *
223
+ * We start with a list of definitions, kindly provided by Greg
224
+ * Hitchcock.
225
+ *
226
+ * _Bi-Level Rendering_
227
+ *
228
+ * Monochromatic rendering, exclusively used in the early days of
229
+ * TrueType by both Apple and Microsoft. Microsoft's GDI interface
230
+ * supported hinting of the right-side bearing point, such that the
231
+ * advance width could be non-linear. Most often this was done to
232
+ * achieve some level of glyph symmetry. To enable reasonable
233
+ * performance (e.g., not having to run hinting on all glyphs just to get
234
+ * the widths) there was a bit in the head table indicating if the side
235
+ * bearing was hinted, and additional tables, 'hdmx' and 'LTSH', to cache
236
+ * hinting widths across multiple sizes and device aspect ratios.
237
+ *
238
+ * _Font Smoothing_
239
+ *
240
+ * Microsoft's GDI implementation of anti-aliasing. Not traditional
241
+ * anti-aliasing as the outlines were hinted before the sampling. The
242
+ * widths matched the bi-level rendering.
243
+ *
244
+ * _ClearType Rendering_
245
+ *
246
+ * Technique that uses physical subpixels to improve rendering on LCD
247
+ * (and other) displays. Because of the higher resolution, many methods
248
+ * of improving symmetry in glyphs through hinting the right-side bearing
249
+ * were no longer necessary. This lead to what GDI calls 'natural
250
+ * widths' ClearType, see
251
+ * http://rastertragedy.com/RTRCh4.htm#Sec21. Since hinting
252
+ * has extra resolution, most non-linearity went away, but it is still
253
+ * possible for hints to change the advance widths in this mode.
254
+ *
255
+ * _ClearType Compatible Widths_
256
+ *
257
+ * One of the earliest challenges with ClearType was allowing the
258
+ * implementation in GDI to be selected without requiring all UI and
259
+ * documents to reflow. To address this, a compatible method of
260
+ * rendering ClearType was added where the font hints are executed once
261
+ * to determine the width in bi-level rendering, and then re-run in
262
+ * ClearType, with the difference in widths being absorbed in the font
263
+ * hints for ClearType (mostly in the white space of hints); see
264
+ * http://rastertragedy.com/RTRCh4.htm#Sec20. Somewhat by
265
+ * definition, compatible width ClearType allows for non-linear widths,
266
+ * but only when the bi-level version has non-linear widths.
267
+ *
268
+ * _ClearType Subpixel Positioning_
269
+ *
270
+ * One of the nice benefits of ClearType is the ability to more crisply
271
+ * display fractional widths; unfortunately, the GDI model of integer
272
+ * bitmaps did not support this. However, the WPF and Direct Write
273
+ * frameworks do support fractional widths. DWrite calls this 'natural
274
+ * mode', not to be confused with GDI's 'natural widths'. Subpixel
275
+ * positioning, in the current implementation of Direct Write,
276
+ * unfortunately does not support hinted advance widths, see
277
+ * http://rastertragedy.com/RTRCh4.htm#Sec22. Note that the
278
+ * TrueType interpreter fully allows the advance width to be adjusted in
279
+ * this mode, just the DWrite client will ignore those changes.
280
+ *
281
+ * _ClearType Backward Compatibility_
282
+ *
283
+ * This is a set of exceptions made in the TrueType interpreter to
284
+ * minimize hinting techniques that were problematic with the extra
285
+ * resolution of ClearType; see
286
+ * http://rastertragedy.com/RTRCh4.htm#Sec1 and
287
+ * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx.
288
+ * This technique is not to be confused with ClearType compatible widths.
289
+ * ClearType backward compatibility has no direct impact on changing
290
+ * advance widths, but there might be an indirect impact on disabling
291
+ * some deltas. This could be worked around in backward compatibility
292
+ * mode.
293
+ *
294
+ * _Native ClearType Mode_
295
+ *
296
+ * (Not to be confused with 'natural widths'.) This mode removes all the
297
+ * exceptions in the TrueType interpreter when running with ClearType.
298
+ * Any issues on widths would still apply, though.
299
+ *
300
+ */
301
+
302
+
303
+ /**************************************************************************
304
+ *
305
+ * @section:
306
+ * properties
307
+ *
308
+ * @title:
309
+ * Driver properties
310
+ *
311
+ * @abstract:
312
+ * Controlling driver modules.
313
+ *
314
+ * @description:
315
+ * Driver modules can be controlled by setting and unsetting properties,
316
+ * using the functions @FT_Property_Set and @FT_Property_Get. This
317
+ * section documents the available properties, together with auxiliary
318
+ * macros and structures.
319
+ *
320
+ */
321
+
322
+
323
+ /**************************************************************************
324
+ *
325
+ * @enum:
326
+ * FT_HINTING_XXX
327
+ *
328
+ * @description:
329
+ * A list of constants used for the @hinting-engine property to select
330
+ * the hinting engine for CFF, Type~1, and CID fonts.
331
+ *
332
+ * @values:
333
+ * FT_HINTING_FREETYPE ::
334
+ * Use the old FreeType hinting engine.
335
+ *
336
+ * FT_HINTING_ADOBE ::
337
+ * Use the hinting engine contributed by Adobe.
338
+ *
339
+ * @since:
340
+ * 2.9
341
+ *
342
+ */
343
+ #define FT_HINTING_FREETYPE 0
344
+ #define FT_HINTING_ADOBE 1
345
+
346
+ /* these constants (introduced in 2.4.12) are deprecated */
347
+ #define FT_CFF_HINTING_FREETYPE FT_HINTING_FREETYPE
348
+ #define FT_CFF_HINTING_ADOBE FT_HINTING_ADOBE
349
+
350
+
351
+ /**************************************************************************
352
+ *
353
+ * @property:
354
+ * hinting-engine
355
+ *
356
+ * @description:
357
+ * Thanks to Adobe, which contributed a new hinting (and parsing) engine,
358
+ * an application can select between 'freetype' and 'adobe' if compiled
359
+ * with `CFF_CONFIG_OPTION_OLD_ENGINE`. If this configuration macro
360
+ * isn't defined, 'hinting-engine' does nothing.
361
+ *
362
+ * The same holds for the Type~1 and CID modules if compiled with
363
+ * `T1_CONFIG_OPTION_OLD_ENGINE`.
364
+ *
365
+ * For the 'cff' module, the default engine is 'adobe'. For both the
366
+ * 'type1' and 't1cid' modules, the default engine is 'adobe', too.
367
+ *
368
+ * @note:
369
+ * This property can be used with @FT_Property_Get also.
370
+ *
371
+ * This property can be set via the `FREETYPE_PROPERTIES` environment
372
+ * variable (using values 'adobe' or 'freetype').
373
+ *
374
+ * @example:
375
+ * The following example code demonstrates how to select Adobe's hinting
376
+ * engine for the 'cff' module (omitting the error handling).
377
+ *
378
+ * ```
379
+ * FT_Library library;
380
+ * FT_UInt hinting_engine = FT_HINTING_ADOBE;
381
+ *
382
+ *
383
+ * FT_Init_FreeType( &library );
384
+ *
385
+ * FT_Property_Set( library, "cff",
386
+ * "hinting-engine", &hinting_engine );
387
+ * ```
388
+ *
389
+ * @since:
390
+ * 2.4.12 (for 'cff' module)
391
+ *
392
+ * 2.9 (for 'type1' and 't1cid' modules)
393
+ *
394
+ */
395
+
396
+
397
+ /**************************************************************************
398
+ *
399
+ * @property:
400
+ * no-stem-darkening
401
+ *
402
+ * @description:
403
+ * All glyphs that pass through the auto-hinter will be emboldened unless
404
+ * this property is set to TRUE. The same is true for the CFF, Type~1,
405
+ * and CID font modules if the 'Adobe' engine is selected (which is the
406
+ * default).
407
+ *
408
+ * Stem darkening emboldens glyphs at smaller sizes to make them more
409
+ * readable on common low-DPI screens when using linear alpha blending
410
+ * and gamma correction, see @FT_Render_Glyph. When not using linear
411
+ * alpha blending and gamma correction, glyphs will appear heavy and
412
+ * fuzzy!
413
+ *
414
+ * Gamma correction essentially lightens fonts since shades of grey are
415
+ * shifted to higher pixel values (=~higher brightness) to match the
416
+ * original intention to the reality of our screens. The side-effect is
417
+ * that glyphs 'thin out'. Mac OS~X and Adobe's proprietary font
418
+ * rendering library implement a counter-measure: stem darkening at
419
+ * smaller sizes where shades of gray dominate. By emboldening a glyph
420
+ * slightly in relation to its pixel size, individual pixels get higher
421
+ * coverage of filled-in outlines and are therefore 'blacker'. This
422
+ * counteracts the 'thinning out' of glyphs, making text remain readable
423
+ * at smaller sizes.
424
+ *
425
+ * For the auto-hinter, stem-darkening is experimental currently and thus
426
+ * switched off by default (this is, `no-stem-darkening` is set to TRUE
427
+ * by default). Total consistency with the CFF driver is not achieved
428
+ * right now because the emboldening method differs and glyphs must be
429
+ * scaled down on the Y-axis to keep outline points inside their
430
+ * precomputed blue zones. The smaller the size (especially 9ppem and
431
+ * down), the higher the loss of emboldening versus the CFF driver.
432
+ *
433
+ * Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is set.
434
+ *
435
+ * @note:
436
+ * This property can be used with @FT_Property_Get also.
437
+ *
438
+ * This property can be set via the `FREETYPE_PROPERTIES` environment
439
+ * variable (using values 1 and 0 for 'on' and 'off', respectively). It
440
+ * can also be set per face using @FT_Face_Properties with
441
+ * @FT_PARAM_TAG_STEM_DARKENING.
442
+ *
443
+ * @example:
444
+ * ```
445
+ * FT_Library library;
446
+ * FT_Bool no_stem_darkening = TRUE;
447
+ *
448
+ *
449
+ * FT_Init_FreeType( &library );
450
+ *
451
+ * FT_Property_Set( library, "cff",
452
+ * "no-stem-darkening", &no_stem_darkening );
453
+ * ```
454
+ *
455
+ * @since:
456
+ * 2.4.12 (for 'cff' module)
457
+ *
458
+ * 2.6.2 (for 'autofitter' module)
459
+ *
460
+ * 2.9 (for 'type1' and 't1cid' modules)
461
+ *
462
+ */
463
+
464
+
465
+ /**************************************************************************
466
+ *
467
+ * @property:
468
+ * darkening-parameters
469
+ *
470
+ * @description:
471
+ * By default, the Adobe hinting engine, as used by the CFF, Type~1, and
472
+ * CID font drivers, darkens stems as follows (if the `no-stem-darkening`
473
+ * property isn't set):
474
+ *
475
+ * ```
476
+ * stem width <= 0.5px: darkening amount = 0.4px
477
+ * stem width = 1px: darkening amount = 0.275px
478
+ * stem width = 1.667px: darkening amount = 0.275px
479
+ * stem width >= 2.333px: darkening amount = 0px
480
+ * ```
481
+ *
482
+ * and piecewise linear in-between. At configuration time, these four
483
+ * control points can be set with the macro
484
+ * `CFF_CONFIG_OPTION_DARKENING_PARAMETERS`; the CFF, Type~1, and CID
485
+ * drivers share these values. At runtime, the control points can be
486
+ * changed using the `darkening-parameters` property (see the example
487
+ * below that demonstrates this for the Type~1 driver).
488
+ *
489
+ * The x~values give the stem width, and the y~values the darkening
490
+ * amount. The unit is 1000th of pixels. All coordinate values must be
491
+ * positive; the x~values must be monotonically increasing; the y~values
492
+ * must be monotonically decreasing and smaller than or equal to 500
493
+ * (corresponding to half a pixel); the slope of each linear piece must
494
+ * be shallower than -1 (e.g., -.4).
495
+ *
496
+ * The auto-hinter provides this property, too, as an experimental
497
+ * feature. See @no-stem-darkening for more.
498
+ *
499
+ * @note:
500
+ * This property can be used with @FT_Property_Get also.
501
+ *
502
+ * This property can be set via the `FREETYPE_PROPERTIES` environment
503
+ * variable, using eight comma-separated integers without spaces. Here
504
+ * the above example, using `\` to break the line for readability.
505
+ *
506
+ * ```
507
+ * FREETYPE_PROPERTIES=\
508
+ * type1:darkening-parameters=500,300,1000,200,1500,100,2000,0
509
+ * ```
510
+ *
511
+ * @example:
512
+ * ```
513
+ * FT_Library library;
514
+ * FT_Int darken_params[8] = { 500, 300, // x1, y1
515
+ * 1000, 200, // x2, y2
516
+ * 1500, 100, // x3, y3
517
+ * 2000, 0 }; // x4, y4
518
+ *
519
+ *
520
+ * FT_Init_FreeType( &library );
521
+ *
522
+ * FT_Property_Set( library, "type1",
523
+ * "darkening-parameters", darken_params );
524
+ * ```
525
+ *
526
+ * @since:
527
+ * 2.5.1 (for 'cff' module)
528
+ *
529
+ * 2.6.2 (for 'autofitter' module)
530
+ *
531
+ * 2.9 (for 'type1' and 't1cid' modules)
532
+ *
533
+ */
534
+
535
+
536
+ /**************************************************************************
537
+ *
538
+ * @property:
539
+ * random-seed
540
+ *
541
+ * @description:
542
+ * By default, the seed value for the CFF 'random' operator and the
543
+ * similar '0 28 callothersubr pop' command for the Type~1 and CID
544
+ * drivers is set to a random value. However, mainly for debugging
545
+ * purposes, it is often necessary to use a known value as a seed so that
546
+ * the pseudo-random number sequences generated by 'random' are
547
+ * repeatable.
548
+ *
549
+ * The `random-seed` property does that. Its argument is a signed 32bit
550
+ * integer; if the value is zero or negative, the seed given by the
551
+ * `intitialRandomSeed` private DICT operator in a CFF file gets used (or
552
+ * a default value if there is no such operator). If the value is
553
+ * positive, use it instead of `initialRandomSeed`, which is consequently
554
+ * ignored.
555
+ *
556
+ * @note:
557
+ * This property can be set via the `FREETYPE_PROPERTIES` environment
558
+ * variable. It can also be set per face using @FT_Face_Properties with
559
+ * @FT_PARAM_TAG_RANDOM_SEED.
560
+ *
561
+ * @since:
562
+ * 2.8 (for 'cff' module)
563
+ *
564
+ * 2.9 (for 'type1' and 't1cid' modules)
565
+ *
566
+ */
567
+
568
+
569
+ /**************************************************************************
570
+ *
571
+ * @property:
572
+ * no-long-family-names
573
+ *
574
+ * @description:
575
+ * If `PCF_CONFIG_OPTION_LONG_FAMILY_NAMES` is active while compiling
576
+ * FreeType, the PCF driver constructs long family names.
577
+ *
578
+ * There are many PCF fonts just called 'Fixed' which look completely
579
+ * different, and which have nothing to do with each other. When
580
+ * selecting 'Fixed' in KDE or Gnome one gets results that appear rather
581
+ * random, the style changes often if one changes the size and one cannot
582
+ * select some fonts at all. The improve this situation, the PCF module
583
+ * prepends the foundry name (plus a space) to the family name. It also
584
+ * checks whether there are 'wide' characters; all put together, family
585
+ * names like 'Sony Fixed' or 'Misc Fixed Wide' are constructed.
586
+ *
587
+ * If `no-long-family-names` is set, this feature gets switched off.
588
+ *
589
+ * @note:
590
+ * This property can be used with @FT_Property_Get also.
591
+ *
592
+ * This property can be set via the `FREETYPE_PROPERTIES` environment
593
+ * variable (using values 1 and 0 for 'on' and 'off', respectively).
594
+ *
595
+ * @example:
596
+ * ```
597
+ * FT_Library library;
598
+ * FT_Bool no_long_family_names = TRUE;
599
+ *
600
+ *
601
+ * FT_Init_FreeType( &library );
602
+ *
603
+ * FT_Property_Set( library, "pcf",
604
+ * "no-long-family-names",
605
+ * &no_long_family_names );
606
+ * ```
607
+ *
608
+ * @since:
609
+ * 2.8
610
+ */
611
+
612
+
613
+ /**************************************************************************
614
+ *
615
+ * @enum:
616
+ * TT_INTERPRETER_VERSION_XXX
617
+ *
618
+ * @description:
619
+ * A list of constants used for the @interpreter-version property to
620
+ * select the hinting engine for Truetype fonts.
621
+ *
622
+ * The numeric value in the constant names represents the version number
623
+ * as returned by the 'GETINFO' bytecode instruction.
624
+ *
625
+ * @values:
626
+ * TT_INTERPRETER_VERSION_35 ::
627
+ * Version~35 corresponds to MS rasterizer v.1.7 as used e.g. in
628
+ * Windows~98; only grayscale and B/W rasterizing is supported.
629
+ *
630
+ * TT_INTERPRETER_VERSION_38 ::
631
+ * Version~38 corresponds to MS rasterizer v.1.9; it is roughly
632
+ * equivalent to the hinting provided by DirectWrite ClearType (as can
633
+ * be found, for example, in the Internet Explorer~9 running on
634
+ * Windows~7). It is used in FreeType to select the 'Infinality'
635
+ * subpixel hinting code. The code may be removed in a future version.
636
+ *
637
+ * TT_INTERPRETER_VERSION_40 ::
638
+ * Version~40 corresponds to MS rasterizer v.2.1; it is roughly
639
+ * equivalent to the hinting provided by DirectWrite ClearType (as can
640
+ * be found, for example, in Microsoft's Edge Browser on Windows~10).
641
+ * It is used in FreeType to select the 'minimal' subpixel hinting
642
+ * code, a stripped-down and higher performance version of the
643
+ * 'Infinality' code.
644
+ *
645
+ * @note:
646
+ * This property controls the behaviour of the bytecode interpreter and
647
+ * thus how outlines get hinted. It does **not** control how glyph get
648
+ * rasterized! In particular, it does not control subpixel color
649
+ * filtering.
650
+ *
651
+ * If FreeType has not been compiled with the configuration option
652
+ * `TT_CONFIG_OPTION_SUBPIXEL_HINTING`, selecting version~38 or~40 causes
653
+ * an `FT_Err_Unimplemented_Feature` error.
654
+ *
655
+ * Depending on the graphics framework, Microsoft uses different bytecode
656
+ * and rendering engines. As a consequence, the version numbers returned
657
+ * by a call to the 'GETINFO' bytecode instruction are more convoluted
658
+ * than desired.
659
+ *
660
+ * Here are two tables that try to shed some light on the possible values
661
+ * for the MS rasterizer engine, together with the additional features
662
+ * introduced by it.
663
+ *
664
+ * ```
665
+ * GETINFO framework version feature
666
+ * -------------------------------------------------------------------
667
+ * 3 GDI (Win 3.1), v1.0 16-bit, first version
668
+ * TrueImage
669
+ * 33 GDI (Win NT 3.1), v1.5 32-bit
670
+ * HP Laserjet
671
+ * 34 GDI (Win 95) v1.6 font smoothing,
672
+ * new SCANTYPE opcode
673
+ * 35 GDI (Win 98/2000) v1.7 (UN)SCALED_COMPONENT_OFFSET
674
+ * bits in composite glyphs
675
+ * 36 MGDI (Win CE 2) v1.6+ classic ClearType
676
+ * 37 GDI (XP and later), v1.8 ClearType
677
+ * GDI+ old (before Vista)
678
+ * 38 GDI+ old (Vista, Win 7), v1.9 subpixel ClearType,
679
+ * WPF Y-direction ClearType,
680
+ * additional error checking
681
+ * 39 DWrite (before Win 8) v2.0 subpixel ClearType flags
682
+ * in GETINFO opcode,
683
+ * bug fixes
684
+ * 40 GDI+ (after Win 7), v2.1 Y-direction ClearType flag
685
+ * DWrite (Win 8) in GETINFO opcode,
686
+ * Gray ClearType
687
+ * ```
688
+ *
689
+ * The 'version' field gives a rough orientation only, since some
690
+ * applications provided certain features much earlier (as an example,
691
+ * Microsoft Reader used subpixel and Y-direction ClearType already in
692
+ * Windows 2000). Similarly, updates to a given framework might include
693
+ * improved hinting support.
694
+ *
695
+ * ```
696
+ * version sampling rendering comment
697
+ * x y x y
698
+ * --------------------------------------------------------------
699
+ * v1.0 normal normal B/W B/W bi-level
700
+ * v1.6 high high gray gray grayscale
701
+ * v1.8 high normal color-filter B/W (GDI) ClearType
702
+ * v1.9 high high color-filter gray Color ClearType
703
+ * v2.1 high normal gray B/W Gray ClearType
704
+ * v2.1 high high gray gray Gray ClearType
705
+ * ```
706
+ *
707
+ * Color and Gray ClearType are the two available variants of
708
+ * 'Y-direction ClearType', meaning grayscale rasterization along the
709
+ * Y-direction; the name used in the TrueType specification for this
710
+ * feature is 'symmetric smoothing'. 'Classic ClearType' is the original
711
+ * algorithm used before introducing a modified version in Win~XP.
712
+ * Another name for v1.6's grayscale rendering is 'font smoothing', and
713
+ * 'Color ClearType' is sometimes also called 'DWrite ClearType'. To
714
+ * differentiate between today's Color ClearType and the earlier
715
+ * ClearType variant with B/W rendering along the vertical axis, the
716
+ * latter is sometimes called 'GDI ClearType'.
717
+ *
718
+ * 'Normal' and 'high' sampling describe the (virtual) resolution to
719
+ * access the rasterized outline after the hinting process. 'Normal'
720
+ * means 1 sample per grid line (i.e., B/W). In the current Microsoft
721
+ * implementation, 'high' means an extra virtual resolution of 16x16 (or
722
+ * 16x1) grid lines per pixel for bytecode instructions like 'MIRP'.
723
+ * After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid
724
+ * lines for color filtering if Color ClearType is activated.
725
+ *
726
+ * Note that 'Gray ClearType' is essentially the same as v1.6's grayscale
727
+ * rendering. However, the GETINFO instruction handles it differently:
728
+ * v1.6 returns bit~12 (hinting for grayscale), while v2.1 returns
729
+ * bits~13 (hinting for ClearType), 18 (symmetrical smoothing), and~19
730
+ * (Gray ClearType). Also, this mode respects bits 2 and~3 for the
731
+ * version~1 gasp table exclusively (like Color ClearType), while v1.6
732
+ * only respects the values of version~0 (bits 0 and~1).
733
+ *
734
+ * Keep in mind that the features of the above interpreter versions might
735
+ * not map exactly to FreeType features or behavior because it is a
736
+ * fundamentally different library with different internals.
737
+ *
738
+ */
739
+ #define TT_INTERPRETER_VERSION_35 35
740
+ #define TT_INTERPRETER_VERSION_38 38
741
+ #define TT_INTERPRETER_VERSION_40 40
742
+
743
+
744
+ /**************************************************************************
745
+ *
746
+ * @property:
747
+ * interpreter-version
748
+ *
749
+ * @description:
750
+ * Currently, three versions are available, two representing the bytecode
751
+ * interpreter with subpixel hinting support (old 'Infinality' code and
752
+ * new stripped-down and higher performance 'minimal' code) and one
753
+ * without, respectively. The default is subpixel support if
754
+ * `TT_CONFIG_OPTION_SUBPIXEL_HINTING` is defined, and no subpixel
755
+ * support otherwise (since it isn't available then).
756
+ *
757
+ * If subpixel hinting is on, many TrueType bytecode instructions behave
758
+ * differently compared to B/W or grayscale rendering (except if 'native
759
+ * ClearType' is selected by the font). Microsoft's main idea is to
760
+ * render at a much increased horizontal resolution, then sampling down
761
+ * the created output to subpixel precision. However, many older fonts
762
+ * are not suited to this and must be specially taken care of by applying
763
+ * (hardcoded) tweaks in Microsoft's interpreter.
764
+ *
765
+ * Details on subpixel hinting and some of the necessary tweaks can be
766
+ * found in Greg Hitchcock's whitepaper at
767
+ * 'https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx'.
768
+ * Note that FreeType currently doesn't really 'subpixel hint' (6x1, 6x2,
769
+ * or 6x5 supersampling) like discussed in the paper. Depending on the
770
+ * chosen interpreter, it simply ignores instructions on vertical stems
771
+ * to arrive at very similar results.
772
+ *
773
+ * @note:
774
+ * This property can be used with @FT_Property_Get also.
775
+ *
776
+ * This property can be set via the `FREETYPE_PROPERTIES` environment
777
+ * variable (using values '35', '38', or '40').
778
+ *
779
+ * @example:
780
+ * The following example code demonstrates how to deactivate subpixel
781
+ * hinting (omitting the error handling).
782
+ *
783
+ * ```
784
+ * FT_Library library;
785
+ * FT_Face face;
786
+ * FT_UInt interpreter_version = TT_INTERPRETER_VERSION_35;
787
+ *
788
+ *
789
+ * FT_Init_FreeType( &library );
790
+ *
791
+ * FT_Property_Set( library, "truetype",
792
+ * "interpreter-version",
793
+ * &interpreter_version );
794
+ * ```
795
+ *
796
+ * @since:
797
+ * 2.5
798
+ */
799
+
800
+
801
+ /**************************************************************************
802
+ *
803
+ * @property:
804
+ * glyph-to-script-map
805
+ *
806
+ * @description:
807
+ * **Experimental only**
808
+ *
809
+ * The auto-hinter provides various script modules to hint glyphs.
810
+ * Examples of supported scripts are Latin or CJK. Before a glyph is
811
+ * auto-hinted, the Unicode character map of the font gets examined, and
812
+ * the script is then determined based on Unicode character ranges, see
813
+ * below.
814
+ *
815
+ * OpenType fonts, however, often provide much more glyphs than character
816
+ * codes (small caps, superscripts, ligatures, swashes, etc.), to be
817
+ * controlled by so-called 'features'. Handling OpenType features can be
818
+ * quite complicated and thus needs a separate library on top of
819
+ * FreeType.
820
+ *
821
+ * The mapping between glyph indices and scripts (in the auto-hinter
822
+ * sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an array
823
+ * with `num_glyphs` elements, as found in the font's @FT_Face structure.
824
+ * The `glyph-to-script-map` property returns a pointer to this array,
825
+ * which can be modified as needed. Note that the modification should
826
+ * happen before the first glyph gets processed by the auto-hinter so
827
+ * that the global analysis of the font shapes actually uses the modified
828
+ * mapping.
829
+ *
830
+ * @example:
831
+ * The following example code demonstrates how to access it (omitting the
832
+ * error handling).
833
+ *
834
+ * ```
835
+ * FT_Library library;
836
+ * FT_Face face;
837
+ * FT_Prop_GlyphToScriptMap prop;
838
+ *
839
+ *
840
+ * FT_Init_FreeType( &library );
841
+ * FT_New_Face( library, "foo.ttf", 0, &face );
842
+ *
843
+ * prop.face = face;
844
+ *
845
+ * FT_Property_Get( library, "autofitter",
846
+ * "glyph-to-script-map", &prop );
847
+ *
848
+ * // adjust `prop.map' as needed right here
849
+ *
850
+ * FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT );
851
+ * ```
852
+ *
853
+ * @since:
854
+ * 2.4.11
855
+ *
856
+ */
857
+
858
+
859
+ /**************************************************************************
860
+ *
861
+ * @enum:
862
+ * FT_AUTOHINTER_SCRIPT_XXX
863
+ *
864
+ * @description:
865
+ * **Experimental only**
866
+ *
867
+ * A list of constants used for the @glyph-to-script-map property to
868
+ * specify the script submodule the auto-hinter should use for hinting a
869
+ * particular glyph.
870
+ *
871
+ * @values:
872
+ * FT_AUTOHINTER_SCRIPT_NONE ::
873
+ * Don't auto-hint this glyph.
874
+ *
875
+ * FT_AUTOHINTER_SCRIPT_LATIN ::
876
+ * Apply the latin auto-hinter. For the auto-hinter, 'latin' is a very
877
+ * broad term, including Cyrillic and Greek also since characters from
878
+ * those scripts share the same design constraints.
879
+ *
880
+ * By default, characters from the following Unicode ranges are
881
+ * assigned to this submodule.
882
+ *
883
+ * ```
884
+ * U+0020 - U+007F // Basic Latin (no control characters)
885
+ * U+00A0 - U+00FF // Latin-1 Supplement (no control characters)
886
+ * U+0100 - U+017F // Latin Extended-A
887
+ * U+0180 - U+024F // Latin Extended-B
888
+ * U+0250 - U+02AF // IPA Extensions
889
+ * U+02B0 - U+02FF // Spacing Modifier Letters
890
+ * U+0300 - U+036F // Combining Diacritical Marks
891
+ * U+0370 - U+03FF // Greek and Coptic
892
+ * U+0400 - U+04FF // Cyrillic
893
+ * U+0500 - U+052F // Cyrillic Supplement
894
+ * U+1D00 - U+1D7F // Phonetic Extensions
895
+ * U+1D80 - U+1DBF // Phonetic Extensions Supplement
896
+ * U+1DC0 - U+1DFF // Combining Diacritical Marks Supplement
897
+ * U+1E00 - U+1EFF // Latin Extended Additional
898
+ * U+1F00 - U+1FFF // Greek Extended
899
+ * U+2000 - U+206F // General Punctuation
900
+ * U+2070 - U+209F // Superscripts and Subscripts
901
+ * U+20A0 - U+20CF // Currency Symbols
902
+ * U+2150 - U+218F // Number Forms
903
+ * U+2460 - U+24FF // Enclosed Alphanumerics
904
+ * U+2C60 - U+2C7F // Latin Extended-C
905
+ * U+2DE0 - U+2DFF // Cyrillic Extended-A
906
+ * U+2E00 - U+2E7F // Supplemental Punctuation
907
+ * U+A640 - U+A69F // Cyrillic Extended-B
908
+ * U+A720 - U+A7FF // Latin Extended-D
909
+ * U+FB00 - U+FB06 // Alphab. Present. Forms (Latin Ligatures)
910
+ * U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols
911
+ * U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement
912
+ * ```
913
+ *
914
+ * FT_AUTOHINTER_SCRIPT_CJK ::
915
+ * Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old
916
+ * Vietnamese, and some other scripts.
917
+ *
918
+ * By default, characters from the following Unicode ranges are
919
+ * assigned to this submodule.
920
+ *
921
+ * ```
922
+ * U+1100 - U+11FF // Hangul Jamo
923
+ * U+2E80 - U+2EFF // CJK Radicals Supplement
924
+ * U+2F00 - U+2FDF // Kangxi Radicals
925
+ * U+2FF0 - U+2FFF // Ideographic Description Characters
926
+ * U+3000 - U+303F // CJK Symbols and Punctuation
927
+ * U+3040 - U+309F // Hiragana
928
+ * U+30A0 - U+30FF // Katakana
929
+ * U+3100 - U+312F // Bopomofo
930
+ * U+3130 - U+318F // Hangul Compatibility Jamo
931
+ * U+3190 - U+319F // Kanbun
932
+ * U+31A0 - U+31BF // Bopomofo Extended
933
+ * U+31C0 - U+31EF // CJK Strokes
934
+ * U+31F0 - U+31FF // Katakana Phonetic Extensions
935
+ * U+3200 - U+32FF // Enclosed CJK Letters and Months
936
+ * U+3300 - U+33FF // CJK Compatibility
937
+ * U+3400 - U+4DBF // CJK Unified Ideographs Extension A
938
+ * U+4DC0 - U+4DFF // Yijing Hexagram Symbols
939
+ * U+4E00 - U+9FFF // CJK Unified Ideographs
940
+ * U+A960 - U+A97F // Hangul Jamo Extended-A
941
+ * U+AC00 - U+D7AF // Hangul Syllables
942
+ * U+D7B0 - U+D7FF // Hangul Jamo Extended-B
943
+ * U+F900 - U+FAFF // CJK Compatibility Ideographs
944
+ * U+FE10 - U+FE1F // Vertical forms
945
+ * U+FE30 - U+FE4F // CJK Compatibility Forms
946
+ * U+FF00 - U+FFEF // Halfwidth and Fullwidth Forms
947
+ * U+1B000 - U+1B0FF // Kana Supplement
948
+ * U+1D300 - U+1D35F // Tai Xuan Hing Symbols
949
+ * U+1F200 - U+1F2FF // Enclosed Ideographic Supplement
950
+ * U+20000 - U+2A6DF // CJK Unified Ideographs Extension B
951
+ * U+2A700 - U+2B73F // CJK Unified Ideographs Extension C
952
+ * U+2B740 - U+2B81F // CJK Unified Ideographs Extension D
953
+ * U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement
954
+ * ```
955
+ *
956
+ * FT_AUTOHINTER_SCRIPT_INDIC ::
957
+ * Apply the indic auto-hinter, covering all major scripts from the
958
+ * Indian sub-continent and some other related scripts like Thai, Lao,
959
+ * or Tibetan.
960
+ *
961
+ * By default, characters from the following Unicode ranges are
962
+ * assigned to this submodule.
963
+ *
964
+ * ```
965
+ * U+0900 - U+0DFF // Indic Range
966
+ * U+0F00 - U+0FFF // Tibetan
967
+ * U+1900 - U+194F // Limbu
968
+ * U+1B80 - U+1BBF // Sundanese
969
+ * U+A800 - U+A82F // Syloti Nagri
970
+ * U+ABC0 - U+ABFF // Meetei Mayek
971
+ * U+11800 - U+118DF // Sharada
972
+ * ```
973
+ *
974
+ * Note that currently Indic support is rudimentary only, missing blue
975
+ * zone support.
976
+ *
977
+ * @since:
978
+ * 2.4.11
979
+ *
980
+ */
981
+ #define FT_AUTOHINTER_SCRIPT_NONE 0
982
+ #define FT_AUTOHINTER_SCRIPT_LATIN 1
983
+ #define FT_AUTOHINTER_SCRIPT_CJK 2
984
+ #define FT_AUTOHINTER_SCRIPT_INDIC 3
985
+
986
+
987
+ /**************************************************************************
988
+ *
989
+ * @struct:
990
+ * FT_Prop_GlyphToScriptMap
991
+ *
992
+ * @description:
993
+ * **Experimental only**
994
+ *
995
+ * The data exchange structure for the @glyph-to-script-map property.
996
+ *
997
+ * @since:
998
+ * 2.4.11
999
+ *
1000
+ */
1001
+ typedef struct FT_Prop_GlyphToScriptMap_
1002
+ {
1003
+ FT_Face face;
1004
+ FT_UShort* map;
1005
+
1006
+ } FT_Prop_GlyphToScriptMap;
1007
+
1008
+
1009
+ /**************************************************************************
1010
+ *
1011
+ * @property:
1012
+ * fallback-script
1013
+ *
1014
+ * @description:
1015
+ * **Experimental only**
1016
+ *
1017
+ * If no auto-hinter script module can be assigned to a glyph, a fallback
1018
+ * script gets assigned to it (see also the @glyph-to-script-map
1019
+ * property). By default, this is @FT_AUTOHINTER_SCRIPT_CJK. Using the
1020
+ * `fallback-script` property, this fallback value can be changed.
1021
+ *
1022
+ * @note:
1023
+ * This property can be used with @FT_Property_Get also.
1024
+ *
1025
+ * It's important to use the right timing for changing this value: The
1026
+ * creation of the glyph-to-script map that eventually uses the fallback
1027
+ * script value gets triggered either by setting or reading a
1028
+ * face-specific property like @glyph-to-script-map, or by auto-hinting
1029
+ * any glyph from that face. In particular, if you have already created
1030
+ * an @FT_Face structure but not loaded any glyph (using the
1031
+ * auto-hinter), a change of the fallback script will affect this face.
1032
+ *
1033
+ * @example:
1034
+ * ```
1035
+ * FT_Library library;
1036
+ * FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE;
1037
+ *
1038
+ *
1039
+ * FT_Init_FreeType( &library );
1040
+ *
1041
+ * FT_Property_Set( library, "autofitter",
1042
+ * "fallback-script", &fallback_script );
1043
+ * ```
1044
+ *
1045
+ * @since:
1046
+ * 2.4.11
1047
+ *
1048
+ */
1049
+
1050
+
1051
+ /**************************************************************************
1052
+ *
1053
+ * @property:
1054
+ * default-script
1055
+ *
1056
+ * @description:
1057
+ * **Experimental only**
1058
+ *
1059
+ * If FreeType gets compiled with `FT_CONFIG_OPTION_USE_HARFBUZZ` to make
1060
+ * the HarfBuzz library access OpenType features for getting better glyph
1061
+ * coverages, this property sets the (auto-fitter) script to be used for
1062
+ * the default (OpenType) script data of a font's GSUB table. Features
1063
+ * for the default script are intended for all scripts not explicitly
1064
+ * handled in GSUB; an example is a 'dlig' feature, containing the
1065
+ * combination of the characters 'T', 'E', and 'L' to form a 'TEL'
1066
+ * ligature.
1067
+ *
1068
+ * By default, this is @FT_AUTOHINTER_SCRIPT_LATIN. Using the
1069
+ * `default-script` property, this default value can be changed.
1070
+ *
1071
+ * @note:
1072
+ * This property can be used with @FT_Property_Get also.
1073
+ *
1074
+ * It's important to use the right timing for changing this value: The
1075
+ * creation of the glyph-to-script map that eventually uses the default
1076
+ * script value gets triggered either by setting or reading a
1077
+ * face-specific property like @glyph-to-script-map, or by auto-hinting
1078
+ * any glyph from that face. In particular, if you have already created
1079
+ * an @FT_Face structure but not loaded any glyph (using the
1080
+ * auto-hinter), a change of the default script will affect this face.
1081
+ *
1082
+ * @example:
1083
+ * ```
1084
+ * FT_Library library;
1085
+ * FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE;
1086
+ *
1087
+ *
1088
+ * FT_Init_FreeType( &library );
1089
+ *
1090
+ * FT_Property_Set( library, "autofitter",
1091
+ * "default-script", &default_script );
1092
+ * ```
1093
+ *
1094
+ * @since:
1095
+ * 2.5.3
1096
+ *
1097
+ */
1098
+
1099
+
1100
+ /**************************************************************************
1101
+ *
1102
+ * @property:
1103
+ * increase-x-height
1104
+ *
1105
+ * @description:
1106
+ * For ppem values in the range 6~<= ppem <= `increase-x-height`, round
1107
+ * up the font's x~height much more often than normally. If the value is
1108
+ * set to~0, which is the default, this feature is switched off. Use
1109
+ * this property to improve the legibility of small font sizes if
1110
+ * necessary.
1111
+ *
1112
+ * @note:
1113
+ * This property can be used with @FT_Property_Get also.
1114
+ *
1115
+ * Set this value right after calling @FT_Set_Char_Size, but before
1116
+ * loading any glyph (using the auto-hinter).
1117
+ *
1118
+ * @example:
1119
+ * ```
1120
+ * FT_Library library;
1121
+ * FT_Face face;
1122
+ * FT_Prop_IncreaseXHeight prop;
1123
+ *
1124
+ *
1125
+ * FT_Init_FreeType( &library );
1126
+ * FT_New_Face( library, "foo.ttf", 0, &face );
1127
+ * FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 );
1128
+ *
1129
+ * prop.face = face;
1130
+ * prop.limit = 14;
1131
+ *
1132
+ * FT_Property_Set( library, "autofitter",
1133
+ * "increase-x-height", &prop );
1134
+ * ```
1135
+ *
1136
+ * @since:
1137
+ * 2.4.11
1138
+ *
1139
+ */
1140
+
1141
+
1142
+ /**************************************************************************
1143
+ *
1144
+ * @struct:
1145
+ * FT_Prop_IncreaseXHeight
1146
+ *
1147
+ * @description:
1148
+ * The data exchange structure for the @increase-x-height property.
1149
+ *
1150
+ */
1151
+ typedef struct FT_Prop_IncreaseXHeight_
1152
+ {
1153
+ FT_Face face;
1154
+ FT_UInt limit;
1155
+
1156
+ } FT_Prop_IncreaseXHeight;
1157
+
1158
+
1159
+ /**************************************************************************
1160
+ *
1161
+ * @property:
1162
+ * warping
1163
+ *
1164
+ * @description:
1165
+ * **Obsolete**
1166
+ *
1167
+ * This property was always experimental and probably never worked
1168
+ * correctly. It was entirely removed from the FreeType~2 sources. This
1169
+ * entry is only here for historical reference.
1170
+ *
1171
+ * Warping only worked in 'normal' auto-hinting mode replacing it. The
1172
+ * idea of the code was to slightly scale and shift a glyph along the
1173
+ * non-hinted dimension (which is usually the horizontal axis) so that as
1174
+ * much of its segments were aligned (more or less) to the grid. To find
1175
+ * out a glyph's optimal scaling and shifting value, various parameter
1176
+ * combinations were tried and scored.
1177
+ *
1178
+ * @since:
1179
+ * 2.6
1180
+ *
1181
+ */
1182
+
1183
+
1184
+ /* */
1185
+
1186
+
1187
+ FT_END_HEADER
1188
+
1189
+
1190
+ #endif /* FTDRIVER_H_ */
1191
+
1192
+
1193
+ /* END */