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
162 #[rustfmt::skip]
163 pub static SIMPLE: &[u8] = &[
164 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xb5, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
171 0x00, 0x00, 0x00, 0x00,
172 0x00, 0x00, 0x00, 0x00,
173 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00, 0x06,
180 0x00, 0x07,
181 0x00, 0x08,
182 0x01, 0x02, 0x01, 0x03, 0x01, 0x04, 0x05, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x02, 0x68, 0x69, 0x4, 0x68, 0x6f, 0x6c, 0x61, ];
189}
190
191pub mod cff2 {
192 pub static EXAMPLE: &[u8] = &[
195 0x02, 0x00, 0x05, 0x00, 0x07, 0xCF, 0x0C, 0x24, 0xC3, 0x11, 0x9B, 0x18, 0x00, 0x00, 0x00,
196 0x00, 0x00, 0x26, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1C,
197 0x00, 0x01, 0x00, 0x02, 0xC0, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xE0,
198 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,
199 0x01, 0x01, 0x03, 0x05, 0x20, 0x0A, 0x20, 0x0A, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05,
200 0xF7, 0x06, 0xDA, 0x12, 0x77, 0x9F, 0xF8, 0x6C, 0x9D, 0xAE, 0x9A, 0xF4, 0x9A, 0x95, 0x9F,
201 0xB3, 0x9F, 0x8B, 0x8B, 0x8B, 0x8B, 0x85, 0x9A, 0x8B, 0x8B, 0x97, 0x73, 0x8B, 0x8B, 0x8C,
202 0x80, 0x8B, 0x8B, 0x8B, 0x8D, 0x8B, 0x8B, 0x8C, 0x8A, 0x8B, 0x8B, 0x97, 0x17, 0x06, 0xFB,
203 0x8E, 0x95, 0x86, 0x9D, 0x8B, 0x8B, 0x8D, 0x17, 0x07, 0x77, 0x9F, 0xF8, 0x6D, 0x9D, 0xAD,
204 0x9A, 0xF3, 0x9A, 0x95, 0x9F, 0xB3, 0x9F, 0x08, 0xFB, 0x8D, 0x95, 0x09, 0x1E, 0xA0, 0x37,
205 0x5F, 0x0C, 0x09, 0x8B, 0x0C, 0x0B, 0xC2, 0x6E, 0x9E, 0x8C, 0x17, 0x0A, 0xDB, 0x57, 0xF7,
206 0x02, 0x8C, 0x17, 0x0B, 0xB3, 0x9A, 0x77, 0x9F, 0x82, 0x8A, 0x8D, 0x17, 0x0C, 0x0C, 0xDB,
207 0x95, 0x57, 0xF7, 0x02, 0x85, 0x8B, 0x8D, 0x17, 0x0C, 0x0D, 0xF7, 0x06, 0x13, 0x00, 0x00,
208 0x00, 0x01, 0x01, 0x01, 0x1B, 0xBD, 0xBD, 0xEF, 0x8C, 0x10, 0x8B, 0x15, 0xF8, 0x88, 0x27,
209 0xFB, 0x5C, 0x8C, 0x10, 0x06, 0xF8, 0x88, 0x07, 0xFC, 0x88, 0xEF, 0xF7, 0x5C, 0x8C, 0x10,
210 0x06,
211 ];
212}
213
214pub mod colrv1_json {
216 pub fn expected(set_name: &str, settings: &[(&str, f32)]) -> &'static str {
218 let mut key = Vec::with_capacity(1 + settings.len());
219 key.push("colrv1_".to_string() + &set_name.to_ascii_lowercase());
220 key.extend(settings.iter().map(|(t, v)| format!("{t}_{v}")));
221 let key = key.join("_");
222 match key.as_str() {
225 "colrv1_clipbox" => include_str!("../test_data/colrv1_json/colrv1_clipbox"),
226 "colrv1_clipbox_CLIO_200" => include_str!("../test_data/colrv1_json/colrv1_clipbox_CLIO_200"),
227 "colrv1_colored_circles_v0" => include_str!("../test_data/colrv1_json/colrv1_colored_circles_v0"),
228 "colrv1_composite_mode" => include_str!("../test_data/colrv1_json/colrv1_composite_mode"),
229 "colrv1_extend_mode" => include_str!("../test_data/colrv1_json/colrv1_extend_mode"),
230 "colrv1_extend_mode_COL1_-0.25_COL3_0.25" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL1_-0.25_COL3_0.25"),
231 "colrv1_extend_mode_COL1_0.5_COL3_-0.5" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL1_0.5_COL3_-0.5"),
232 "colrv1_extend_mode_COL1_-1.5" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL1_-1.5"),
233 "colrv1_extend_mode_COL2_-0.3" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL2_-0.3"),
234 "colrv1_extend_mode_COL3_0.5" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL3_0.5"),
235 "colrv1_extend_mode_COL3_1" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL3_1"),
236 "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"),
237 "colrv1_extend_mode_GRR0_-200_GRR1_-300" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_GRR0_-200_GRR1_-300"),
238 "colrv1_extend_mode_GRR0_430_GRR1_40" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_GRR0_430_GRR1_40"),
239 "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"),
240 "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"),
241 "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"),
242 "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"),
243 "colrv1_foreground_color" => include_str!("../test_data/colrv1_json/colrv1_foreground_color"),
244 "colrv1_gradient_p2_skewed" => include_str!("../test_data/colrv1_json/colrv1_gradient_p2_skewed"),
245 "colrv1_gradient_stops_repeat" => include_str!("../test_data/colrv1_json/colrv1_gradient_stops_repeat"),
246 "colrv1_no_cycle_multi_colrglyph" => include_str!("../test_data/colrv1_json/colrv1_no_cycle_multi_colrglyph"),
247 "colrv1_paint_glyph_nested" => include_str!("../test_data/colrv1_json/colrv1_paint_glyph_nested"),
248 "colrv1_paint_rotate" => include_str!("../test_data/colrv1_json/colrv1_paint_rotate"),
249 "colrv1_paint_rotate_ROTA_40" => include_str!("../test_data/colrv1_json/colrv1_paint_rotate_ROTA_40"),
250 "colrv1_paint_rotate_ROTX_-250_ROTY_-250" => include_str!("../test_data/colrv1_json/colrv1_paint_rotate_ROTX_-250_ROTY_-250"),
251 "colrv1_paint_scale" => include_str!("../test_data/colrv1_json/colrv1_paint_scale"),
252 "colrv1_paint_scale_SCOX_200_SCOY_200" => include_str!("../test_data/colrv1_json/colrv1_paint_scale_SCOX_200_SCOY_200"),
253 "colrv1_paint_scale_SCSX_0.25_SCOY_0.25" => include_str!("../test_data/colrv1_json/colrv1_paint_scale_SCSX_0.25_SCOY_0.25"),
254 "colrv1_paint_scale_SCSX_-1_SCOY_-1" => include_str!("../test_data/colrv1_json/colrv1_paint_scale_SCSX_-1_SCOY_-1"),
255 "colrv1_paint_skew" => include_str!("../test_data/colrv1_json/colrv1_paint_skew"),
256 "colrv1_paint_skew_SKCX_200_SKCY_200" => include_str!("../test_data/colrv1_json/colrv1_paint_skew_SKCX_200_SKCY_200"),
257 "colrv1_paint_skew_SKXA_20" => include_str!("../test_data/colrv1_json/colrv1_paint_skew_SKXA_20"),
258 "colrv1_paint_skew_SKYA_20" => include_str!("../test_data/colrv1_json/colrv1_paint_skew_SKYA_20"),
259 "colrv1_paint_transform" => include_str!("../test_data/colrv1_json/colrv1_paint_transform"),
260 "colrv1_paint_translate" => include_str!("../test_data/colrv1_json/colrv1_paint_translate"),
261 "colrv1_paint_translate_TLDX_100_TLDY_100" => include_str!("../test_data/colrv1_json/colrv1_paint_translate_TLDX_100_TLDY_100"),
262 "colrv1_sweep_coincident" => include_str!("../test_data/colrv1_json/colrv1_sweep_coincident"),
263 "colrv1_sweep_varsweep" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep"),
264 "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"),
265 "colrv1_sweep_varsweep_SWPE_-45" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPE_-45"),
266 "colrv1_sweep_varsweep_SWPE_-90" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPE_-90"),
267 "colrv1_sweep_varsweep_SWPS_0" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPS_0"),
268 "colrv1_sweep_varsweep_SWPS_-45_SWPE_45" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPS_-45_SWPE_45"),
269 "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"),
270 "colrv1_sweep_varsweep_SWPS_90" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPS_90"),
271 "colrv1_variable_alpha" => include_str!("../test_data/colrv1_json/colrv1_variable_alpha"),
272 "colrv1_variable_alpha_APH1_-0.7" => include_str!("../test_data/colrv1_json/colrv1_variable_alpha_APH1_-0.7"),
273 "colrv1_variable_alpha_APH2_-0.7_APH3_-0.2" => include_str!("../test_data/colrv1_json/colrv1_variable_alpha_APH2_-0.7_APH3_-0.2"),
274 _ => panic!("No entry for {key}, if this is a new test you might need to add a case"),
275 }
276 }
277}
278
279pub mod ttc {
280 pub static TTC: &[u8] = include_bytes!("../test_data/ttc/TTC.ttc");
281}
282
283pub mod meta {
284 #[rustfmt::skip]
286 pub static SIMPLE_META_TABLE: &[u8] = &[
287 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,
298 0x61, 0x74, 0x6e, 0x2c,
299 0x20, 0x6c, 0x61, 0x74,
300 0x6e, 0x6c, 0x61, 0x74,
301 0x6e, 0x00, 0x00, 0x00,
302 ];
303}
304
305pub mod gvar {
306 pub static USE_MY_METRICS: &[u8] = include_bytes!("../test_data/ttf/gvar_use_my_metrics.ttf");
307}