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