1use bytemuck::{Zeroable, Pod};
2
3pub const ARTERY_FONT_HEADER_TAG: &[u8; 16] = b"ARTERY/FONT\0\0\0\0\0";
4pub const ARTERY_FONT_HEADER_MAGIC_NO: u32 = 0x4d276a5c;
5pub const ARTERY_FONT_FOOTER_MAGIC_NO: u32 = 0x55ccb363;
6
7#[cfg(not(feature = "double"))]
8pub type Real = f32;
9
10#[cfg(feature = "double")]
11pub type Real = f64;
12
13pub trait TypeCode {
14 fn type_code() -> u32;
15}
16
17impl TypeCode for f32 {
18 fn type_code() -> u32 {
19 0x14
20 }
21}
22
23impl TypeCode for f64 {
24 fn type_code() -> u32 {
25 0x18
26 }
27}
28
29#[derive(Debug, Copy, Clone, Zeroable, Pod)]
30#[repr(C)]
31pub struct ArteryFontHeader {
32 pub tag: [u8; 16],
33 pub magic_no: u32,
34 pub version: u32,
35 pub flags: u32,
36 pub real_type: u32,
37 pub reserved: [u32; 4],
38 pub metadata_format: u32,
39 pub metadata_length: u32,
40 pub variant_count: u32,
41 pub variants_length: u32,
42 pub image_count: u32,
43 pub images_length: u32,
44 pub appendix_count: u32,
45 pub appendices_length: u32,
46 pub reserved2: [u32; 8]
47}
48
49#[derive(Debug, Copy, Clone, Zeroable, Pod)]
50#[repr(C)]
51pub struct ArteryFontFooter {
52 pub salt: u32,
53 pub magic_no: u32,
54 pub reserved: [u32;4],
55 pub total_length: u32
56}
57
58
59#[derive(Debug, Copy, Clone, Zeroable, Pod)]
60#[repr(C)]
61pub struct FontVariantHeader {
62 pub flags: u32,
63 pub weight: u32,
64 pub codepoint_type: u32,
65 pub image_type: u32,
66 pub fallback_variant: u32,
67 pub fallback_glyph: u32,
68 pub reserved: [u32; 6],
69 pub metrics: [Real; 32],
70 pub name_length: u32,
71 pub metadata_length: u32,
72 pub glyph_count: u32,
73 pub kern_pair_count: u32,
74}
75
76#[derive(Debug, Copy, Clone, Zeroable, Pod)]
77#[repr(C)]
78pub struct ImageHeader {
79 pub flags: u32,
80 pub encoding: u32,
81 pub width: u32,
82 pub height: u32,
83 pub channels: u32,
84 pub pixel_format: u32,
85 pub image_type: u32,
86 pub row_length: u32,
87 pub orientation: i32,
88 pub child_images: u32,
89 pub texture_flags: u32,
90 pub reserved: [u32; 3],
91 pub metadata_length: u32,
92 pub data_length: u32
93}
94
95#[derive(Debug, Copy, Clone, Zeroable, Pod)]
96#[repr(C)]
97pub struct AppendixHeader {
98 pub metadata_length: u32,
99 pub data_length: u32
100}