Skip to main content

font_test_data/
lib.rs

1//! test data shared between various fontations crates.
2
3pub 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    // The following taken from the Unicode text rendering test fonts:
117    // <https://github.com/unicode-org/text-rendering-tests/tree/main/fonts>
118    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    // reuses glyph set from above
144    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, // version 2.0
165        0x00, 0x00, 0x00, 0x00, // italic angle
166        0xFF, 0xb5,             // underlinePosition -75
167        0x00, 0x32,             // underlineThickness 50
168        0x00, 0x00, 0x00, 0x00, // fixedpitch
169        0x00, 0x00, 0x00, 0x00, // min/max mem:
170        0x00, 0x00, 0x00, 0x00,
171        0x00, 0x00, 0x00, 0x00,
172        0x00, 0x00, 0x00, 0x00,
173        0x00, 0x0A,             // numGlyphs 10
174                                // glyph name index:
175        0x00, 0x00,              // glyph 0 -> name 0
176        0x00, 0x00,             // glyph 1 -> name 0
177        0x00, 0x03,              // glyph 2 -> name 3 ('space')
178        0x00, 0x04,              // glyph 3 -> name 4 ('exclam')
179        0x00, 0x06,
180        0x00, 0x07,
181        0x00, 0x08,
182        0x01, 0x02,             // glyph 7 -> name 258 first custom
183        0x01, 0x03,             // glyph 8 -> name 258 first custom
184        0x01, 0x04,             // glyph 9 -> name 258 first custom
185        0x05, 0x68, 0x65, 0x6c, 0x6c, 0x6f, // 5, h e l l o
186        0x02, 0x68, 0x69, // 2, h i
187        0x4, 0x68, 0x6f, 0x6c, 0x61, // 4, h o l a
188    ];
189}
190
191pub mod cff2 {
192    /// CFF2 example table
193    /// <https://learn.microsoft.com/en-us/typography/opentype/spec/cff2#appendix-a-example-cff2-font>
194    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
214/// This setup to avoid cross-crate path construction and build.rs because both caused problems for google3
215pub mod colrv1_json {
216    /// Gets the expected value for a colrv1 json test
217    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        // you could generate the cases in bash using something like:
223        // for f in $(ls font-test-data/test_data/colrv1_json); do echo "\"$f\" => include_str!(\"../test_data/colrv1_json/$f\"),"; done
224        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    // the table from the binary for 'Sankofa'
285    #[rustfmt::skip]
286    pub static SIMPLE_META_TABLE: &[u8] = &[
287        0x00, 0x00, 0x00, 0x01, // version 1
288        0x00, 0x00, 0x00, 0x00, // flags 0
289        0x00, 0x00, 0x00, 0x28, // reserved (?)
290        0x00, 0x00, 0x00, 0x02, // data_maps_count 2
291        0x64, 0x6c, 0x6e, 0x67, // tag: dlng
292        0x00, 0x00, 0x00, 0x28, // data offset
293        0x00, 0x00, 0x00, 0x0d, // data length
294        0x73, 0x6c, 0x6e, 0x67, // tag: slng
295        0x00, 0x00, 0x00, 0x35, // data offset
296        0x00, 0x00, 0x00, 0x04, // length
297        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}