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 TOFU: &[u8] = include_bytes!("../test_data/ttf/tofu.ttf");
23
24pub static COLR_GRADIENT_RECT: &[u8] =
25 include_bytes!("../test_data/ttf/linear_gradient_rect_colr_1.ttf");
26
27pub static VAZIRMATN_VAR: &[u8] = include_bytes!("../test_data/ttf/vazirmatn_var_trimmed.ttf");
28
29pub static NAMES_ONLY: &[u8] = include_bytes!("../test_data/ttf/names_only.ttf");
30
31pub static VAZIRMATN_VAR_GLYPHS: &str =
32 include_str!("../test_data/extracted/vazirmatn_var_trimmed-glyphs.txt");
33
34pub static SIMPLE_GLYF: &[u8] = include_bytes!("../test_data/ttf/simple_glyf.ttf");
35
36pub static CUBIC_GLYF: &[u8] = include_bytes!("../test_data/ttf/cubic_glyf.ttf");
37
38pub static NOTO_SERIF_DISPLAY_TRIMMED: &[u8] =
39 include_bytes!("../test_data/ttf/noto_serif_display_trimmed.ttf");
40
41pub static NOTO_SERIF_DISPLAY_TRIMMED_GLYPHS: &str =
42 include_str!("../test_data/extracted/noto_serif_display_trimmed-glyphs.txt");
43
44pub static NOTO_SANS_JP_CFF: &[u8] =
45 include_bytes!("../test_data/ttf/NotoSansJP-Regular.subset.otf");
46
47pub static CANTARELL_VF_TRIMMED: &[u8] =
48 include_bytes!("../test_data/ttf/cantarell_vf_trimmed.ttf");
49
50pub static CANTARELL_VF_TRIMMED_GLYPHS: &str =
51 include_str!("../test_data/extracted/cantarell_vf_trimmed-glyphs.txt");
52
53pub static CHARSTRING_PATH_OPS: &[u8] = include_bytes!("../test_data/ttf/charstring_path_ops.ttf");
54
55pub static EMBEDDED_BITMAPS: &[u8] = include_bytes!("../test_data/ttf/embedded_bitmaps.ttf");
56pub static CBDT: &[u8] = include_bytes!("../test_data/ttf/cbdt.ttf");
57
58pub static HVAR_WITH_TRUNCATED_ADVANCE_INDEX_MAP: &[u8] =
59 include_bytes!("../test_data/ttf/hvar_with_truncated_adv_index_map.ttf");
60
61pub static COLRV0V1: &[u8] = include_bytes!("../test_data/ttf/test_glyphs-glyf_colr_1.ttf");
62
63pub static COLRV0V1_VARIABLE: &[u8] =
64 include_bytes!("../test_data/ttf/test_glyphs-glyf_colr_1_variable.ttf");
65
66pub static COLRV1_NO_CLIPLIST: &[u8] =
67 include_bytes!("../test_data/ttf/test_glyphs-glyf_colr_1_no_cliplist.subset.ttf");
68
69pub static CVAR: &[u8] = include_bytes!("../test_data/ttf/cvar.ttf");
70
71pub static STARTING_OFF_CURVE: &[u8] = include_bytes!("../test_data/ttf/starts_off_curve.ttf");
72
73pub static MOSTLY_OFF_CURVE: &[u8] = include_bytes!("../test_data/ttf/mostly_off_curve.ttf");
74
75pub static INTERPOLATE_THIS: &[u8] = include_bytes!("../test_data/ttf/interpolate_this.ttf");
76
77pub static MATERIAL_SYMBOLS_SUBSET: &[u8] =
78 include_bytes!("../test_data/ttf/material_symbols_subset.ttf");
79
80pub static GLYF_COMPONENTS: &[u8] = include_bytes!("../test_data/ttf/glyf_components.ttf");
81
82pub static AUTOHINT_CMAP: &[u8] = include_bytes!("../test_data/ttf/autohint_cmap.ttf");
83
84pub static NOTOSERIFHEBREW_AUTOHINT_METRICS: &[u8] =
85 include_bytes!("../test_data/ttf/notoserifhebrew_autohint_metrics.ttf");
86
87pub static NOTOSERIFTC_AUTOHINT_METRICS: &[u8] =
88 include_bytes!("../test_data/ttf/notoseriftc_autohint_metrics.ttf");
89
90pub static NOTOSERIF_AUTOHINT_SHAPING: &[u8] =
91 include_bytes!("../test_data/ttf/notoserif_autohint_shaping.ttf");
92
93pub static TTHINT_SUBSET: &[u8] = include_bytes!("../test_data/ttf/tthint_subset.ttf");
94
95pub static VORG: &[u8] = include_bytes!("../test_data/ttf/vorg.ttf");
96
97pub static AHEM: &[u8] = include_bytes!("../test_data/ttf/ahem.ttf");
98
99pub static AVAR2_CHECKER: &[u8] = include_bytes!("../test_data/ttf/avar2checker.ttf");
100pub static AMSTELVAR_AVAR2_A: &[u8] = include_bytes!("../test_data/ttf/Amstelvar-avar2.A.ttf");
101
102pub static MATERIAL_ICONS_SUBSET: &[u8] =
103 include_bytes!("../test_data/ttf/material_icons_subset.ttf");
104
105pub static MATERIAL_ICONS_SUBSET_MATRIX: &[u8] =
106 include_bytes!("../test_data/ttf/material_icons_subset_matrix.ttf");
107
108pub static TINOS_SUBSET: &[u8] = include_bytes!("../test_data/ttf/tinos_subset.ttf");
109
110pub static NOTO_HANDWRITING_SBIX: &[u8] =
111 include_bytes!("../test_data/ttf/noto_handwriting-sbix.ttf");
112
113pub static COUSINE_HINT_SUBSET: &[u8] = include_bytes!("../test_data/ttf/cousine_hint_subset.ttf");
114
115pub mod morx {
116 pub static ONE: &[u8] = include_bytes!("../test_data/ttf/TestMORXOne.ttf");
119 pub static FOUR: &[u8] = include_bytes!("../test_data/ttf/TestMORXFour.ttf");
120 pub static EIGHTEEN: &[u8] = include_bytes!("../test_data/ttf/TestMORXEighteen.ttf");
121 pub static THIRTY_FOUR: &[u8] = include_bytes!("../test_data/ttf/TestMORXThirtyfour.ttf");
122 pub static FORTY_ONE: &[u8] = include_bytes!("../test_data/ttf/TestMORXFourtyone.ttf");
123}
124
125pub mod varc {
126 pub static CJK_6868: &[u8] = include_bytes!("../test_data/ttf/varc-6868.ttf");
127 pub static CONDITIONALS: &[u8] = include_bytes!("../test_data/ttf/varc-ac01-conditional.ttf");
128}
129
130pub mod closure {
131 pub static SIMPLE: &[u8] = include_bytes!("../test_data/ttf/simple_closure.ttf");
132 pub static SIMPLE_GLYPHS: &str = include_str!("../test_data/fea/simple_closure_glyphs.txt");
133 pub static RECURSIVE: &[u8] = include_bytes!("../test_data/ttf/recursive_closure.ttf");
134 pub static RECURSIVE_GLYPHS: &str =
135 include_str!("../test_data/fea/recursive_closure_glyphs.txt");
136 pub static CONTEXTUAL: &[u8] = include_bytes!("../test_data/ttf/context_closure.ttf");
137 pub static CONTEXTUAL_GLYPHS: &str =
138 include_str!("../test_data/fea/context_closure_glyphs.txt");
139 pub static RECURSIVE_CONTEXTUAL: &[u8] =
140 include_bytes!("../test_data/ttf/recursive_context_closure.ttf");
141 pub static RECURSIVE_CONTEXTUAL_GLYPHS: &str =
142 include_str!("../test_data/fea/recursive_context_closure_glyphs.txt");
143 pub static CYCLIC_CONTEXTUAL: &[u8] =
145 include_bytes!("../test_data/ttf/cyclic_context_closure.ttf");
146 pub static CHAIN_CONTEXT_FORMAT3_BITS: &[u8] =
147 include_bytes!("../test_data/ttf/context_closure_unreachable_rule.ttf");
148 pub static CHAIN_CONTEXT_FORMAT3_BITS_GLYPHS: &str =
149 include_str!("../test_data/fea/context_closure_unreachable_rule_glyphs.txt");
150 pub static VARIATIONS_CLOSURE: &[u8] =
151 include_bytes!("../test_data/ttf/variations_closure.ttf");
152 pub static VARIATIONS_GLYPHS: &str =
153 include_str!("../test_data/fea/variations_closure_glyphs.txt");
154 pub static CONTEXT_ONLY_REACHABLE: &[u8] =
155 include_bytes!("../test_data/ttf/context_only_reachable.ttf");
156 pub static CONTEXT_ONLY_REACHABLE_GLYPHS: &str =
157 include_str!("../test_data/fea/context_only_reachable_glyphs.txt");
158}
159
160pub mod post {
161 use crate::bebuffer::BeBuffer;
162
163 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
164 pub enum GlyphNameOrder {
165 Monotonic,
167 MostlyMonotonicWithBackrefs,
172 AllPointToLast,
177 }
178
179 pub fn v2_with_varied_glyph_names(
183 num_glyphs: u16,
184 base_name_len: u8,
185 order: GlyphNameOrder,
186 ) -> (Vec<u8>, Vec<String>) {
187 let custom_start = 258u16;
188 let mut buf = BeBuffer::new()
189 .push(0x0002_0000u32) .push(0u32) .push(0i16) .push(0i16) .push(0u32) .push(0u32) .push(0u32) .push(0u32) .push(0u32) .push(num_glyphs);
199 let mapped_indices = mapped_custom_indices(num_glyphs as usize, order);
200 for mapped_idx in mapped_indices.iter().copied() {
201 let mapped_idx_u16 = u16::try_from(mapped_idx).unwrap();
202 buf = buf.push(custom_start.saturating_add(mapped_idx_u16));
203 }
204 let mut custom_names = Vec::with_capacity(num_glyphs as usize);
205 for custom_idx in 0..num_glyphs as usize {
206 let name = varied_name(custom_idx, base_name_len);
207 let len = u8::try_from(name.len()).unwrap();
208 buf = buf.push(len).extend(name.as_bytes().iter().copied());
209 custom_names.push(name);
210 }
211 let names = mapped_indices
212 .iter()
213 .map(|idx| custom_names[*idx].clone())
214 .collect();
215 (buf.data().to_vec(), names)
216 }
217
218 fn mapped_custom_indices(num_glyphs: usize, order: GlyphNameOrder) -> Vec<usize> {
219 match order {
220 GlyphNameOrder::Monotonic => (0..num_glyphs).collect(),
221 GlyphNameOrder::MostlyMonotonicWithBackrefs => (0..num_glyphs)
222 .map(|gid| {
223 if gid > 0 && gid % 97 == 0 {
224 gid - 1
225 } else if gid > 3 && gid % 251 == 0 {
226 gid - 3
227 } else if gid > 7 && gid % 509 == 0 {
228 gid - 7
229 } else {
230 gid
231 }
232 })
233 .collect(),
234 GlyphNameOrder::AllPointToLast => {
235 if num_glyphs == 0 {
236 Vec::new()
237 } else {
238 vec![num_glyphs - 1; num_glyphs]
239 }
240 }
241 }
242 }
243
244 fn varied_name(custom_idx: usize, base_name_len: u8) -> String {
245 let base_name_len = usize::from(base_name_len.clamp(8, 220));
246 let len = (base_name_len + (custom_idx % 27)).min(255);
247 let mut name = format!("glyph_{custom_idx:05}_");
248 let pattern = match custom_idx % 4 {
249 0 => "abcdefghijklmnopqrstuvwxyz0123456789",
250 1 => "zyxwvutsrqponmlkjihgfedcba9876543210",
251 2 => "aabccddeeffgghhiijjkkllmmnnooppqqrrss",
252 _ => "n0nlinear_name_pattern_block_",
253 };
254 while name.len() < len {
255 name.push_str(pattern);
256 }
257 name.truncate(len);
258 name
259 }
260
261 #[rustfmt::skip]
262 pub static SIMPLE: &[u8] = &[
263 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xb5, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
270 0x00, 0x00, 0x00, 0x00,
271 0x00, 0x00, 0x00, 0x00,
272 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00, 0x06,
279 0x00, 0x07,
280 0x00, 0x08,
281 0x01, 0x02, 0x01, 0x03, 0x01, 0x04, 0x05, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x02, 0x68, 0x69, 0x4, 0x68, 0x6f, 0x6c, 0x61, ];
288}
289
290pub mod cff2 {
291 pub static EXAMPLE: &[u8] = &[
294 0x02, 0x00, 0x05, 0x00, 0x07, 0xCF, 0x0C, 0x24, 0xC3, 0x11, 0x9B, 0x18, 0x00, 0x00, 0x00,
295 0x00, 0x00, 0x26, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1C,
296 0x00, 0x01, 0x00, 0x02, 0xC0, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xE0,
297 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,
298 0x01, 0x01, 0x03, 0x05, 0x20, 0x0A, 0x20, 0x0A, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05,
299 0xF7, 0x06, 0xDA, 0x12, 0x77, 0x9F, 0xF8, 0x6C, 0x9D, 0xAE, 0x9A, 0xF4, 0x9A, 0x95, 0x9F,
300 0xB3, 0x9F, 0x8B, 0x8B, 0x8B, 0x8B, 0x85, 0x9A, 0x8B, 0x8B, 0x97, 0x73, 0x8B, 0x8B, 0x8C,
301 0x80, 0x8B, 0x8B, 0x8B, 0x8D, 0x8B, 0x8B, 0x8C, 0x8A, 0x8B, 0x8B, 0x97, 0x17, 0x06, 0xFB,
302 0x8E, 0x95, 0x86, 0x9D, 0x8B, 0x8B, 0x8D, 0x17, 0x07, 0x77, 0x9F, 0xF8, 0x6D, 0x9D, 0xAD,
303 0x9A, 0xF3, 0x9A, 0x95, 0x9F, 0xB3, 0x9F, 0x08, 0xFB, 0x8D, 0x95, 0x09, 0x1E, 0xA0, 0x37,
304 0x5F, 0x0C, 0x09, 0x8B, 0x0C, 0x0B, 0xC2, 0x6E, 0x9E, 0x8C, 0x17, 0x0A, 0xDB, 0x57, 0xF7,
305 0x02, 0x8C, 0x17, 0x0B, 0xB3, 0x9A, 0x77, 0x9F, 0x82, 0x8A, 0x8D, 0x17, 0x0C, 0x0C, 0xDB,
306 0x95, 0x57, 0xF7, 0x02, 0x85, 0x8B, 0x8D, 0x17, 0x0C, 0x0D, 0xF7, 0x06, 0x13, 0x00, 0x00,
307 0x00, 0x01, 0x01, 0x01, 0x1B, 0xBD, 0xBD, 0xEF, 0x8C, 0x10, 0x8B, 0x15, 0xF8, 0x88, 0x27,
308 0xFB, 0x5C, 0x8C, 0x10, 0x06, 0xF8, 0x88, 0x07, 0xFC, 0x88, 0xEF, 0xF7, 0x5C, 0x8C, 0x10,
309 0x06,
310 ];
311}
312
313pub mod colrv1_json {
315 pub fn expected(set_name: &str, settings: &[(&str, f32)]) -> &'static str {
317 let mut key = Vec::with_capacity(1 + settings.len());
318 key.push("colrv1_".to_string() + &set_name.to_ascii_lowercase());
319 key.extend(settings.iter().map(|(t, v)| format!("{t}_{v}")));
320 let key = key.join("_");
321 match key.as_str() {
324 "colrv1_clipbox" => include_str!("../test_data/colrv1_json/colrv1_clipbox"),
325 "colrv1_clipbox_CLIO_200" => include_str!("../test_data/colrv1_json/colrv1_clipbox_CLIO_200"),
326 "colrv1_colored_circles_v0" => include_str!("../test_data/colrv1_json/colrv1_colored_circles_v0"),
327 "colrv1_composite_mode" => include_str!("../test_data/colrv1_json/colrv1_composite_mode"),
328 "colrv1_extend_mode" => include_str!("../test_data/colrv1_json/colrv1_extend_mode"),
329 "colrv1_extend_mode_COL1_-0.25_COL3_0.25" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL1_-0.25_COL3_0.25"),
330 "colrv1_extend_mode_COL1_0.5_COL3_-0.5" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL1_0.5_COL3_-0.5"),
331 "colrv1_extend_mode_COL1_-1.5" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL1_-1.5"),
332 "colrv1_extend_mode_COL2_-0.3" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL2_-0.3"),
333 "colrv1_extend_mode_COL3_0.5" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL3_0.5"),
334 "colrv1_extend_mode_COL3_1" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL3_1"),
335 "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"),
336 "colrv1_extend_mode_GRR0_-200_GRR1_-300" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_GRR0_-200_GRR1_-300"),
337 "colrv1_extend_mode_GRR0_430_GRR1_40" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_GRR0_430_GRR1_40"),
338 "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"),
339 "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"),
340 "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"),
341 "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"),
342 "colrv1_foreground_color" => include_str!("../test_data/colrv1_json/colrv1_foreground_color"),
343 "colrv1_gradient_p2_skewed" => include_str!("../test_data/colrv1_json/colrv1_gradient_p2_skewed"),
344 "colrv1_gradient_stops_repeat" => include_str!("../test_data/colrv1_json/colrv1_gradient_stops_repeat"),
345 "colrv1_no_cycle_multi_colrglyph" => include_str!("../test_data/colrv1_json/colrv1_no_cycle_multi_colrglyph"),
346 "colrv1_paint_glyph_nested" => include_str!("../test_data/colrv1_json/colrv1_paint_glyph_nested"),
347 "colrv1_paint_rotate" => include_str!("../test_data/colrv1_json/colrv1_paint_rotate"),
348 "colrv1_paint_rotate_ROTA_40" => include_str!("../test_data/colrv1_json/colrv1_paint_rotate_ROTA_40"),
349 "colrv1_paint_rotate_ROTX_-250_ROTY_-250" => include_str!("../test_data/colrv1_json/colrv1_paint_rotate_ROTX_-250_ROTY_-250"),
350 "colrv1_paint_scale" => include_str!("../test_data/colrv1_json/colrv1_paint_scale"),
351 "colrv1_paint_scale_SCOX_200_SCOY_200" => include_str!("../test_data/colrv1_json/colrv1_paint_scale_SCOX_200_SCOY_200"),
352 "colrv1_paint_scale_SCSX_0.25_SCOY_0.25" => include_str!("../test_data/colrv1_json/colrv1_paint_scale_SCSX_0.25_SCOY_0.25"),
353 "colrv1_paint_scale_SCSX_-1_SCOY_-1" => include_str!("../test_data/colrv1_json/colrv1_paint_scale_SCSX_-1_SCOY_-1"),
354 "colrv1_paint_skew" => include_str!("../test_data/colrv1_json/colrv1_paint_skew"),
355 "colrv1_paint_skew_SKCX_200_SKCY_200" => include_str!("../test_data/colrv1_json/colrv1_paint_skew_SKCX_200_SKCY_200"),
356 "colrv1_paint_skew_SKXA_20" => include_str!("../test_data/colrv1_json/colrv1_paint_skew_SKXA_20"),
357 "colrv1_paint_skew_SKYA_20" => include_str!("../test_data/colrv1_json/colrv1_paint_skew_SKYA_20"),
358 "colrv1_paint_transform" => include_str!("../test_data/colrv1_json/colrv1_paint_transform"),
359 "colrv1_paint_translate" => include_str!("../test_data/colrv1_json/colrv1_paint_translate"),
360 "colrv1_paint_translate_TLDX_100_TLDY_100" => include_str!("../test_data/colrv1_json/colrv1_paint_translate_TLDX_100_TLDY_100"),
361 "colrv1_sweep_coincident" => include_str!("../test_data/colrv1_json/colrv1_sweep_coincident"),
362 "colrv1_sweep_varsweep" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep"),
363 "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"),
364 "colrv1_sweep_varsweep_SWPE_-45" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPE_-45"),
365 "colrv1_sweep_varsweep_SWPE_-90" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPE_-90"),
366 "colrv1_sweep_varsweep_SWPS_0" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPS_0"),
367 "colrv1_sweep_varsweep_SWPS_-45_SWPE_45" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPS_-45_SWPE_45"),
368 "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"),
369 "colrv1_sweep_varsweep_SWPS_90" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPS_90"),
370 "colrv1_variable_alpha" => include_str!("../test_data/colrv1_json/colrv1_variable_alpha"),
371 "colrv1_variable_alpha_APH1_-0.7" => include_str!("../test_data/colrv1_json/colrv1_variable_alpha_APH1_-0.7"),
372 "colrv1_variable_alpha_APH2_-0.7_APH3_-0.2" => include_str!("../test_data/colrv1_json/colrv1_variable_alpha_APH2_-0.7_APH3_-0.2"),
373 _ => panic!("No entry for {key}, if this is a new test you might need to add a case"),
374 }
375 }
376}
377
378pub mod ttc {
379 pub static TTC: &[u8] = include_bytes!("../test_data/ttc/TTC.ttc");
380}
381
382pub mod meta {
383 #[rustfmt::skip]
385 pub static SIMPLE_META_TABLE: &[u8] = &[
386 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,
397 0x61, 0x74, 0x6e, 0x2c,
398 0x20, 0x6c, 0x61, 0x74,
399 0x6e, 0x6c, 0x61, 0x74,
400 0x6e, 0x00, 0x00, 0x00,
401 ];
402}
403
404pub mod gvar {
405 pub static USE_MY_METRICS: &[u8] = include_bytes!("../test_data/ttf/gvar_use_my_metrics.ttf");
406}