1pub mod bebuffer;
4pub mod cmap;
5pub mod gdef;
6pub mod gpos;
7pub mod gsub;
8pub mod ift;
9pub mod layout;
10pub mod type1;
11
12pub static CMAP12_FONT1: &[u8] = include_bytes!("../test_data/ttf/cmap12_font1.ttf");
13
14pub static CMAP14_FONT1: &[u8] = include_bytes!("../test_data/ttf/cmap14_font1.ttf");
15
16pub static CMAP4_SYMBOL_PUA: &[u8] = include_bytes!("../test_data/ttf/cmap4_symbol_pua.ttf");
17
18pub static CMAP6: &[u8] = include_bytes!("../test_data/ttf/cmap6.ttf");
19
20pub static CMAP10: &[u8] = include_bytes!("../test_data/ttf/cmap10.ttf");
21
22pub static COLR_GRADIENT_RECT: &[u8] =
23 include_bytes!("../test_data/ttf/linear_gradient_rect_colr_1.ttf");
24
25pub static VAZIRMATN_VAR: &[u8] = include_bytes!("../test_data/ttf/vazirmatn_var_trimmed.ttf");
26
27pub static NAMES_ONLY: &[u8] = include_bytes!("../test_data/ttf/names_only.ttf");
28
29pub static VAZIRMATN_VAR_GLYPHS: &str =
30 include_str!("../test_data/extracted/vazirmatn_var_trimmed-glyphs.txt");
31
32pub static SIMPLE_GLYF: &[u8] = include_bytes!("../test_data/ttf/simple_glyf.ttf");
33
34pub static CUBIC_GLYF: &[u8] = include_bytes!("../test_data/ttf/cubic_glyf.ttf");
35
36pub static NOTO_SERIF_DISPLAY_TRIMMED: &[u8] =
37 include_bytes!("../test_data/ttf/noto_serif_display_trimmed.ttf");
38
39pub static NOTO_SERIF_DISPLAY_TRIMMED_GLYPHS: &str =
40 include_str!("../test_data/extracted/noto_serif_display_trimmed-glyphs.txt");
41
42pub static NOTO_SANS_JP_CFF: &[u8] =
43 include_bytes!("../test_data/ttf/NotoSansJP-Regular.subset.otf");
44
45pub static CANTARELL_VF_TRIMMED: &[u8] =
46 include_bytes!("../test_data/ttf/cantarell_vf_trimmed.ttf");
47
48pub static CANTARELL_VF_TRIMMED_GLYPHS: &str =
49 include_str!("../test_data/extracted/cantarell_vf_trimmed-glyphs.txt");
50
51pub static CHARSTRING_PATH_OPS: &[u8] = include_bytes!("../test_data/ttf/charstring_path_ops.ttf");
52
53pub static EMBEDDED_BITMAPS: &[u8] = include_bytes!("../test_data/ttf/embedded_bitmaps.ttf");
54pub static CBDT: &[u8] = include_bytes!("../test_data/ttf/cbdt.ttf");
55
56pub static HVAR_WITH_TRUNCATED_ADVANCE_INDEX_MAP: &[u8] =
57 include_bytes!("../test_data/ttf/hvar_with_truncated_adv_index_map.ttf");
58
59pub static COLRV0V1: &[u8] = include_bytes!("../test_data/ttf/test_glyphs-glyf_colr_1.ttf");
60
61pub static COLRV0V1_VARIABLE: &[u8] =
62 include_bytes!("../test_data/ttf/test_glyphs-glyf_colr_1_variable.ttf");
63
64pub static COLRV1_NO_CLIPLIST: &[u8] =
65 include_bytes!("../test_data/ttf/test_glyphs-glyf_colr_1_no_cliplist.subset.ttf");
66
67pub static CVAR: &[u8] = include_bytes!("../test_data/ttf/cvar.ttf");
68
69pub static STARTING_OFF_CURVE: &[u8] = include_bytes!("../test_data/ttf/starts_off_curve.ttf");
70
71pub static MOSTLY_OFF_CURVE: &[u8] = include_bytes!("../test_data/ttf/mostly_off_curve.ttf");
72
73pub static INTERPOLATE_THIS: &[u8] = include_bytes!("../test_data/ttf/interpolate_this.ttf");
74
75pub static MATERIAL_SYMBOLS_SUBSET: &[u8] =
76 include_bytes!("../test_data/ttf/material_symbols_subset.ttf");
77
78pub static GLYF_COMPONENTS: &[u8] = include_bytes!("../test_data/ttf/glyf_components.ttf");
79
80pub static AUTOHINT_CMAP: &[u8] = include_bytes!("../test_data/ttf/autohint_cmap.ttf");
81
82pub static NOTOSERIFHEBREW_AUTOHINT_METRICS: &[u8] =
83 include_bytes!("../test_data/ttf/notoserifhebrew_autohint_metrics.ttf");
84
85pub static NOTOSERIFTC_AUTOHINT_METRICS: &[u8] =
86 include_bytes!("../test_data/ttf/notoseriftc_autohint_metrics.ttf");
87
88pub static NOTOSERIF_AUTOHINT_SHAPING: &[u8] =
89 include_bytes!("../test_data/ttf/notoserif_autohint_shaping.ttf");
90
91pub static TTHINT_SUBSET: &[u8] = include_bytes!("../test_data/ttf/tthint_subset.ttf");
92
93pub static VORG: &[u8] = include_bytes!("../test_data/ttf/vorg.ttf");
94
95pub static AHEM: &[u8] = include_bytes!("../test_data/ttf/ahem.ttf");
96
97pub static AVAR2_CHECKER: &[u8] = include_bytes!("../test_data/ttf/avar2checker.ttf");
98pub static AMSTELVAR_AVAR2_A: &[u8] = include_bytes!("../test_data/ttf/Amstelvar-avar2.A.ttf");
99
100pub static MATERIAL_ICONS_SUBSET: &[u8] =
101 include_bytes!("../test_data/ttf/material_icons_subset.ttf");
102
103pub static MATERIAL_ICONS_SUBSET_MATRIX: &[u8] =
104 include_bytes!("../test_data/ttf/material_icons_subset_matrix.ttf");
105
106pub static TINOS_SUBSET: &[u8] = include_bytes!("../test_data/ttf/tinos_subset.ttf");
107
108pub static NOTO_HANDWRITING_SBIX: &[u8] =
109 include_bytes!("../test_data/ttf/noto_handwriting-sbix.ttf");
110
111pub static COUSINE_HINT_SUBSET: &[u8] = include_bytes!("../test_data/ttf/cousine_hint_subset.ttf");
112
113pub mod morx {
114 pub static ONE: &[u8] = include_bytes!("../test_data/ttf/TestMORXOne.ttf");
117 pub static FOUR: &[u8] = include_bytes!("../test_data/ttf/TestMORXFour.ttf");
118 pub static EIGHTEEN: &[u8] = include_bytes!("../test_data/ttf/TestMORXEighteen.ttf");
119 pub static THIRTY_FOUR: &[u8] = include_bytes!("../test_data/ttf/TestMORXThirtyfour.ttf");
120 pub static FORTY_ONE: &[u8] = include_bytes!("../test_data/ttf/TestMORXFourtyone.ttf");
121}
122
123pub mod varc {
124 pub static CJK_6868: &[u8] = include_bytes!("../test_data/ttf/varc-6868.ttf");
125 pub static CONDITIONALS: &[u8] = include_bytes!("../test_data/ttf/varc-ac01-conditional.ttf");
126}
127
128pub mod closure {
129 pub static SIMPLE: &[u8] = include_bytes!("../test_data/ttf/simple_closure.ttf");
130 pub static SIMPLE_GLYPHS: &str = include_str!("../test_data/fea/simple_closure_glyphs.txt");
131 pub static RECURSIVE: &[u8] = include_bytes!("../test_data/ttf/recursive_closure.ttf");
132 pub static RECURSIVE_GLYPHS: &str =
133 include_str!("../test_data/fea/recursive_closure_glyphs.txt");
134 pub static CONTEXTUAL: &[u8] = include_bytes!("../test_data/ttf/context_closure.ttf");
135 pub static CONTEXTUAL_GLYPHS: &str =
136 include_str!("../test_data/fea/context_closure_glyphs.txt");
137 pub static RECURSIVE_CONTEXTUAL: &[u8] =
138 include_bytes!("../test_data/ttf/recursive_context_closure.ttf");
139 pub static RECURSIVE_CONTEXTUAL_GLYPHS: &str =
140 include_str!("../test_data/fea/recursive_context_closure_glyphs.txt");
141 pub static CYCLIC_CONTEXTUAL: &[u8] =
143 include_bytes!("../test_data/ttf/cyclic_context_closure.ttf");
144 pub static CHAIN_CONTEXT_FORMAT3_BITS: &[u8] =
145 include_bytes!("../test_data/ttf/context_closure_unreachable_rule.ttf");
146 pub static CHAIN_CONTEXT_FORMAT3_BITS_GLYPHS: &str =
147 include_str!("../test_data/fea/context_closure_unreachable_rule_glyphs.txt");
148 pub static VARIATIONS_CLOSURE: &[u8] =
149 include_bytes!("../test_data/ttf/variations_closure.ttf");
150 pub static VARIATIONS_GLYPHS: &str =
151 include_str!("../test_data/fea/variations_closure_glyphs.txt");
152 pub static CONTEXT_ONLY_REACHABLE: &[u8] =
153 include_bytes!("../test_data/ttf/context_only_reachable.ttf");
154 pub static CONTEXT_ONLY_REACHABLE_GLYPHS: &str =
155 include_str!("../test_data/fea/context_only_reachable_glyphs.txt");
156}
157
158pub mod post {
159
160 #[rustfmt::skip]
161 pub static SIMPLE: &[u8] = &[
162 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xb5, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
169 0x00, 0x00, 0x00, 0x00,
170 0x00, 0x00, 0x00, 0x00,
171 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00, 0x06,
178 0x00, 0x07,
179 0x00, 0x08,
180 0x01, 0x02, 0x01, 0x03, 0x01, 0x04, 0x05, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x02, 0x68, 0x69, 0x4, 0x68, 0x6f, 0x6c, 0x61, ];
187}
188
189pub mod cff2 {
190 pub static EXAMPLE: &[u8] = &[
193 0x02, 0x00, 0x05, 0x00, 0x07, 0xCF, 0x0C, 0x24, 0xC3, 0x11, 0x9B, 0x18, 0x00, 0x00, 0x00,
194 0x00, 0x00, 0x26, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1C,
195 0x00, 0x01, 0x00, 0x02, 0xC0, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xE0,
196 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,
197 0x01, 0x01, 0x03, 0x05, 0x20, 0x0A, 0x20, 0x0A, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05,
198 0xF7, 0x06, 0xDA, 0x12, 0x77, 0x9F, 0xF8, 0x6C, 0x9D, 0xAE, 0x9A, 0xF4, 0x9A, 0x95, 0x9F,
199 0xB3, 0x9F, 0x8B, 0x8B, 0x8B, 0x8B, 0x85, 0x9A, 0x8B, 0x8B, 0x97, 0x73, 0x8B, 0x8B, 0x8C,
200 0x80, 0x8B, 0x8B, 0x8B, 0x8D, 0x8B, 0x8B, 0x8C, 0x8A, 0x8B, 0x8B, 0x97, 0x17, 0x06, 0xFB,
201 0x8E, 0x95, 0x86, 0x9D, 0x8B, 0x8B, 0x8D, 0x17, 0x07, 0x77, 0x9F, 0xF8, 0x6D, 0x9D, 0xAD,
202 0x9A, 0xF3, 0x9A, 0x95, 0x9F, 0xB3, 0x9F, 0x08, 0xFB, 0x8D, 0x95, 0x09, 0x1E, 0xA0, 0x37,
203 0x5F, 0x0C, 0x09, 0x8B, 0x0C, 0x0B, 0xC2, 0x6E, 0x9E, 0x8C, 0x17, 0x0A, 0xDB, 0x57, 0xF7,
204 0x02, 0x8C, 0x17, 0x0B, 0xB3, 0x9A, 0x77, 0x9F, 0x82, 0x8A, 0x8D, 0x17, 0x0C, 0x0C, 0xDB,
205 0x95, 0x57, 0xF7, 0x02, 0x85, 0x8B, 0x8D, 0x17, 0x0C, 0x0D, 0xF7, 0x06, 0x13, 0x00, 0x00,
206 0x00, 0x01, 0x01, 0x01, 0x1B, 0xBD, 0xBD, 0xEF, 0x8C, 0x10, 0x8B, 0x15, 0xF8, 0x88, 0x27,
207 0xFB, 0x5C, 0x8C, 0x10, 0x06, 0xF8, 0x88, 0x07, 0xFC, 0x88, 0xEF, 0xF7, 0x5C, 0x8C, 0x10,
208 0x06,
209 ];
210}
211
212pub mod colrv1_json {
214 pub fn expected(set_name: &str, settings: &[(&str, f32)]) -> &'static str {
216 let mut key = Vec::with_capacity(1 + settings.len());
217 key.push("colrv1_".to_string() + &set_name.to_ascii_lowercase());
218 key.extend(settings.iter().map(|(t, v)| format!("{t}_{v}")));
219 let key = key.join("_");
220 match key.as_str() {
223 "colrv1_clipbox" => include_str!("../test_data/colrv1_json/colrv1_clipbox"),
224 "colrv1_clipbox_CLIO_200" => include_str!("../test_data/colrv1_json/colrv1_clipbox_CLIO_200"),
225 "colrv1_colored_circles_v0" => include_str!("../test_data/colrv1_json/colrv1_colored_circles_v0"),
226 "colrv1_composite_mode" => include_str!("../test_data/colrv1_json/colrv1_composite_mode"),
227 "colrv1_extend_mode" => include_str!("../test_data/colrv1_json/colrv1_extend_mode"),
228 "colrv1_extend_mode_COL1_-0.25_COL3_0.25" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL1_-0.25_COL3_0.25"),
229 "colrv1_extend_mode_COL1_0.5_COL3_-0.5" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL1_0.5_COL3_-0.5"),
230 "colrv1_extend_mode_COL1_-1.5" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL1_-1.5"),
231 "colrv1_extend_mode_COL2_-0.3" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL2_-0.3"),
232 "colrv1_extend_mode_COL3_0.5" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL3_0.5"),
233 "colrv1_extend_mode_COL3_1" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL3_1"),
234 "colrv1_extend_mode_COL3_1_COL2_1.5_COL1_2" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL3_1_COL2_1.5_COL1_2"),
235 "colrv1_extend_mode_GRR0_-200_GRR1_-300" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_GRR0_-200_GRR1_-300"),
236 "colrv1_extend_mode_GRR0_430_GRR1_40" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_GRR0_430_GRR1_40"),
237 "colrv1_extend_mode_GRR0_-50_COL3_-2_COL2_-2_COL1_-0.9" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_GRR0_-50_COL3_-2_COL2_-2_COL1_-0.9"),
238 "colrv1_extend_mode_GRR0_-50_COL3_-2_COL2_-2_COL1_-1.1" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_GRR0_-50_COL3_-2_COL2_-2_COL1_-1.1"),
239 "colrv1_extend_mode_GRX0_1000_GRX1_-1000_GRR0_-1000_GRR1_200" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_GRX0_1000_GRX1_-1000_GRR0_-1000_GRR1_200"),
240 "colrv1_extend_mode_GRX0_-1000_GRX1_-1000_GRR0_-1000_GRR1_-900" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_GRX0_-1000_GRX1_-1000_GRR0_-1000_GRR1_-900"),
241 "colrv1_foreground_color" => include_str!("../test_data/colrv1_json/colrv1_foreground_color"),
242 "colrv1_gradient_p2_skewed" => include_str!("../test_data/colrv1_json/colrv1_gradient_p2_skewed"),
243 "colrv1_gradient_stops_repeat" => include_str!("../test_data/colrv1_json/colrv1_gradient_stops_repeat"),
244 "colrv1_no_cycle_multi_colrglyph" => include_str!("../test_data/colrv1_json/colrv1_no_cycle_multi_colrglyph"),
245 "colrv1_paint_glyph_nested" => include_str!("../test_data/colrv1_json/colrv1_paint_glyph_nested"),
246 "colrv1_paint_rotate" => include_str!("../test_data/colrv1_json/colrv1_paint_rotate"),
247 "colrv1_paint_rotate_ROTA_40" => include_str!("../test_data/colrv1_json/colrv1_paint_rotate_ROTA_40"),
248 "colrv1_paint_rotate_ROTX_-250_ROTY_-250" => include_str!("../test_data/colrv1_json/colrv1_paint_rotate_ROTX_-250_ROTY_-250"),
249 "colrv1_paint_scale" => include_str!("../test_data/colrv1_json/colrv1_paint_scale"),
250 "colrv1_paint_scale_SCOX_200_SCOY_200" => include_str!("../test_data/colrv1_json/colrv1_paint_scale_SCOX_200_SCOY_200"),
251 "colrv1_paint_scale_SCSX_0.25_SCOY_0.25" => include_str!("../test_data/colrv1_json/colrv1_paint_scale_SCSX_0.25_SCOY_0.25"),
252 "colrv1_paint_scale_SCSX_-1_SCOY_-1" => include_str!("../test_data/colrv1_json/colrv1_paint_scale_SCSX_-1_SCOY_-1"),
253 "colrv1_paint_skew" => include_str!("../test_data/colrv1_json/colrv1_paint_skew"),
254 "colrv1_paint_skew_SKCX_200_SKCY_200" => include_str!("../test_data/colrv1_json/colrv1_paint_skew_SKCX_200_SKCY_200"),
255 "colrv1_paint_skew_SKXA_20" => include_str!("../test_data/colrv1_json/colrv1_paint_skew_SKXA_20"),
256 "colrv1_paint_skew_SKYA_20" => include_str!("../test_data/colrv1_json/colrv1_paint_skew_SKYA_20"),
257 "colrv1_paint_transform" => include_str!("../test_data/colrv1_json/colrv1_paint_transform"),
258 "colrv1_paint_translate" => include_str!("../test_data/colrv1_json/colrv1_paint_translate"),
259 "colrv1_paint_translate_TLDX_100_TLDY_100" => include_str!("../test_data/colrv1_json/colrv1_paint_translate_TLDX_100_TLDY_100"),
260 "colrv1_sweep_coincident" => include_str!("../test_data/colrv1_json/colrv1_sweep_coincident"),
261 "colrv1_sweep_varsweep" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep"),
262 "colrv1_sweep_varsweep_SWC1_-0.25_SWC2_0.083333336_SWC3_0.083333336_SWC4_0.25" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWC1_-0.25_SWC2_0.083333336_SWC3_0.083333336_SWC4_0.25"),
263 "colrv1_sweep_varsweep_SWPE_-45" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPE_-45"),
264 "colrv1_sweep_varsweep_SWPE_-90" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPE_-90"),
265 "colrv1_sweep_varsweep_SWPS_0" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPS_0"),
266 "colrv1_sweep_varsweep_SWPS_-45_SWPE_45" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPS_-45_SWPE_45"),
267 "colrv1_sweep_varsweep_SWPS_45_SWPE_-45_SWC1_-0.25_SWC2_-0.416687_SWC3_-0.583313_SWC4_-0.75" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPS_45_SWPE_-45_SWC1_-0.25_SWC2_-0.416687_SWC3_-0.583313_SWC4_-0.75"),
268 "colrv1_sweep_varsweep_SWPS_90" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPS_90"),
269 "colrv1_variable_alpha" => include_str!("../test_data/colrv1_json/colrv1_variable_alpha"),
270 "colrv1_variable_alpha_APH1_-0.7" => include_str!("../test_data/colrv1_json/colrv1_variable_alpha_APH1_-0.7"),
271 "colrv1_variable_alpha_APH2_-0.7_APH3_-0.2" => include_str!("../test_data/colrv1_json/colrv1_variable_alpha_APH2_-0.7_APH3_-0.2"),
272 _ => panic!("No entry for {key}, if this is a new test you might need to add a case"),
273 }
274 }
275}
276
277pub mod ttc {
278 pub static TTC: &[u8] = include_bytes!("../test_data/ttc/TTC.ttc");
279}
280
281pub mod meta {
282 #[rustfmt::skip]
284 pub static SIMPLE_META_TABLE: &[u8] = &[
285 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x64, 0x6c, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x0d, 0x73, 0x6c, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x04, 0x65, 0x6e, 0x2d, 0x6c,
296 0x61, 0x74, 0x6e, 0x2c,
297 0x20, 0x6c, 0x61, 0x74,
298 0x6e, 0x6c, 0x61, 0x74,
299 0x6e, 0x00, 0x00, 0x00,
300 ];
301}
302
303pub mod gvar {
304 pub static USE_MY_METRICS: &[u8] = include_bytes!("../test_data/ttf/gvar_use_my_metrics.ttf");
305}