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