What changed, and why it matters
This commit regenerates font data files for the Trezor firmware user interface. It adds optional kerning (letter-spacing adjustment) tables to several fonts, gated behind a compile-time feature flag named `ui_font_kerning`. Other fonts simply add a `None` kerning placeholder under the same feature flag. There is no indication of a security fix or vulnerability being addressed.
No security action required. Treat as a routine UI asset regeneration. If reviewing, verify the font generation tooling produced correct kerning tables and that the `ui_font_kerning` feature is properly wired in the build system.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit updates 23 auto-generated Rust font modules. The primary change is the addition of #[cfg(feature = "ui_font_kerning")] conditional compilation around kernings fields in FontInfo structs. Several layout_delizia and layout_eckhart fonts now include generated KerningTable constants with kerning index/pair data, while many other fonts set kernings: None under the same feature flag. The change is purely presentational typography and does not alter parsing, cryptography, memory safety, or trust boundaries.
Changed components
core/embed/rust/src/ui/layout_bolt/fonts/*core/embed/rust/src/ui/layout_caesar/fonts/*core/embed/rust/src/ui/layout_delizia/fonts/*core/embed/rust/src/ui/layout_eckhart/fonts/*Inspect captured patch +5513 / −10
diff --git a/core/embed/rust/src/ui/layout_bolt/fonts/font_roboto_bold_20.rs b/core/embed/rust/src/ui/layout_bolt/fonts/font_roboto_bold_20.rs
index d75dd89d..1a76cc54 100644
--- a/core/embed/rust/src/ui/layout_bolt/fonts/font_roboto_bold_20.rs
+++ b/core/embed/rust/src/ui/layout_bolt/fonts/font_roboto_bold_20.rs
@@ -402,5 +402,7 @@ pub const Font_Roboto_Bold_20_info: FontInfo = FontInfo {
baseline: 4,
glyph_data: &Font_Roboto_Bold_20,
glyph_nonprintable: &Font_Roboto_Bold_20_glyph_nonprintable,
+ #[cfg(feature = "ui_font_kerning")]
+ kernings: None,
};
diff --git a/core/embed/rust/src/ui/layout_bolt/fonts/font_roboto_regular_20.rs b/core/embed/rust/src/ui/layout_bolt/fonts/font_roboto_regular_20.rs
index ab224a0d..ef1a9ced 100644
--- a/core/embed/rust/src/ui/layout_bolt/fonts/font_roboto_regular_20.rs
+++ b/core/embed/rust/src/ui/layout_bolt/fonts/font_roboto_regular_20.rs
@@ -402,5 +402,7 @@ pub const Font_Roboto_Regular_20_info: FontInfo = FontInfo {
baseline: 5,
glyph_data: &Font_Roboto_Regular_20,
glyph_nonprintable: &Font_Roboto_Regular_20_glyph_nonprintable,
+ #[cfg(feature = "ui_font_kerning")]
+ kernings: None,
};
diff --git a/core/embed/rust/src/ui/layout_bolt/fonts/font_robotomono_medium_20.rs b/core/embed/rust/src/ui/layout_bolt/fonts/font_robotomono_medium_20.rs
index 467727b1..b8af89ea 100644
--- a/core/embed/rust/src/ui/layout_bolt/fonts/font_robotomono_medium_20.rs
+++ b/core/embed/rust/src/ui/layout_bolt/fonts/font_robotomono_medium_20.rs
@@ -403,5 +403,6 @@ pub const Font_RobotoMono_Medium_20_info: FontInfo = FontInfo {
baseline: 5,
glyph_data: &Font_RobotoMono_Medium_20,
glyph_nonprintable: &Font_RobotoMono_Medium_20_glyph_nonprintable,
+ #[cfg(feature = "ui_font_kerning")]
kernings: None,
};
diff --git a/core/embed/rust/src/ui/layout_bolt/fonts/font_tthoves_bold_17.rs b/core/embed/rust/src/ui/layout_bolt/fonts/font_tthoves_bold_17.rs
index fd858338..298970e1 100644
--- a/core/embed/rust/src/ui/layout_bolt/fonts/font_tthoves_bold_17.rs
+++ b/core/embed/rust/src/ui/layout_bolt/fonts/font_tthoves_bold_17.rs
@@ -325,5 +325,6 @@ pub const Font_TTHoves_Bold_17_upper_info: FontInfo = FontInfo {
baseline: 4,
glyph_data: &Font_TTHoves_Bold_17_upper,
glyph_nonprintable: &Font_TTHoves_Bold_17_glyph_nonprintable,
+ #[cfg(feature = "ui_font_kerning")]
kernings: None,
};
diff --git a/core/embed/rust/src/ui/layout_bolt/fonts/font_tthoves_demibold_21.rs b/core/embed/rust/src/ui/layout_bolt/fonts/font_tthoves_demibold_21.rs
index 7f1d9612..3b666730 100644
--- a/core/embed/rust/src/ui/layout_bolt/fonts/font_tthoves_demibold_21.rs
+++ b/core/embed/rust/src/ui/layout_bolt/fonts/font_tthoves_demibold_21.rs
@@ -403,5 +403,6 @@ pub const Font_TTHoves_DemiBold_21_info: FontInfo = FontInfo {
baseline: 4,
glyph_data: &Font_TTHoves_DemiBold_21,
glyph_nonprintable: &Font_TTHoves_DemiBold_21_glyph_nonprintable,
+ #[cfg(feature = "ui_font_kerning")]
kernings: None,
};
diff --git a/core/embed/rust/src/ui/layout_bolt/fonts/font_tthoves_regular_21.rs b/core/embed/rust/src/ui/layout_bolt/fonts/font_tthoves_regular_21.rs
index ed422111..9d30fcdc 100644
--- a/core/embed/rust/src/ui/layout_bolt/fonts/font_tthoves_regular_21.rs
+++ b/core/embed/rust/src/ui/layout_bolt/fonts/font_tthoves_regular_21.rs
@@ -403,5 +403,6 @@ pub const Font_TTHoves_Regular_21_info: FontInfo = FontInfo {
baseline: 4,
glyph_data: &Font_TTHoves_Regular_21,
glyph_nonprintable: &Font_TTHoves_Regular_21_glyph_nonprintable,
+ #[cfg(feature = "ui_font_kerning")]
kernings: None,
};
diff --git a/core/embed/rust/src/ui/layout_caesar/fonts/font_pixeloperator_bold_8.rs b/core/embed/rust/src/ui/layout_caesar/fonts/font_pixeloperator_bold_8.rs
index 8775c8b2..2a89939e 100644
--- a/core/embed/rust/src/ui/layout_caesar/fonts/font_pixeloperator_bold_8.rs
+++ b/core/embed/rust/src/ui/layout_caesar/fonts/font_pixeloperator_bold_8.rs
@@ -504,6 +504,7 @@ pub const Font_PixelOperator_Bold_8_info: FontInfo = FontInfo {
baseline: 1,
glyph_data: &Font_PixelOperator_Bold_8,
glyph_nonprintable: &Font_PixelOperator_Bold_8_glyph_nonprintable,
+ #[cfg(feature = "ui_font_kerning")]
kernings: None,
};
@@ -515,5 +516,6 @@ pub const Font_PixelOperator_Bold_8_upper_info: FontInfo = FontInfo {
baseline: 1,
glyph_data: &Font_PixelOperator_Bold_8_upper,
glyph_nonprintable: &Font_PixelOperator_Bold_8_glyph_nonprintable,
+ #[cfg(feature = "ui_font_kerning")]
kernings: None,
};
diff --git a/core/embed/rust/src/ui/layout_caesar/fonts/font_pixeloperator_regular_8.rs b/core/embed/rust/src/ui/layout_caesar/fonts/font_pixeloperator_regular_8.rs
index 5b6ccb51..ebb68dae 100644
--- a/core/embed/rust/src/ui/layout_caesar/fonts/font_pixeloperator_regular_8.rs
+++ b/core/embed/rust/src/ui/layout_caesar/fonts/font_pixeloperator_regular_8.rs
@@ -504,6 +504,7 @@ pub const Font_PixelOperator_Regular_8_info: FontInfo = FontInfo {
baseline: 1,
glyph_data: &Font_PixelOperator_Regular_8,
glyph_nonprintable: &Font_PixelOperator_Regular_8_glyph_nonprintable,
+ #[cfg(feature = "ui_font_kerning")]
kernings: None,
};
@@ -515,5 +516,6 @@ pub const Font_PixelOperator_Regular_8_upper_info: FontInfo = FontInfo {
baseline: 1,
glyph_data: &Font_PixelOperator_Regular_8_upper,
glyph_nonprintable: &Font_PixelOperator_Regular_8_glyph_nonprintable,
+ #[cfg(feature = "ui_font_kerning")]
kernings: None,
};
diff --git a/core/embed/rust/src/ui/layout_caesar/fonts/font_pixeloperatormono_regular_8.rs b/core/embed/rust/src/ui/layout_caesar/fonts/font_pixeloperatormono_regular_8.rs
index d13f58e0..fd9cbb03 100644
--- a/core/embed/rust/src/ui/layout_caesar/fonts/font_pixeloperatormono_regular_8.rs
+++ b/core/embed/rust/src/ui/layout_caesar/fonts/font_pixeloperatormono_regular_8.rs
@@ -407,5 +407,6 @@ pub const Font_PixelOperatorMono_Regular_8_info: FontInfo = FontInfo {
baseline: 1,
glyph_data: &Font_PixelOperatorMono_Regular_8,
glyph_nonprintable: &Font_PixelOperatorMono_Regular_8_glyph_nonprintable,
+ #[cfg(feature = "ui_font_kerning")]
kernings: None,
};
diff --git a/core/embed/rust/src/ui/layout_caesar/fonts/font_unifont_bold_16.rs b/core/embed/rust/src/ui/layout_caesar/fonts/font_unifont_bold_16.rs
index 7ccab7a6..27042a96 100644
--- a/core/embed/rust/src/ui/layout_caesar/fonts/font_unifont_bold_16.rs
+++ b/core/embed/rust/src/ui/layout_caesar/fonts/font_unifont_bold_16.rs
@@ -403,5 +403,6 @@ pub const Font_Unifont_Bold_16_info: FontInfo = FontInfo {
baseline: 2,
glyph_data: &Font_Unifont_Bold_16,
glyph_nonprintable: &Font_Unifont_Bold_16_glyph_nonprintable,
+ #[cfg(feature = "ui_font_kerning")]
kernings: None,
};
diff --git a/core/embed/rust/src/ui/layout_caesar/fonts/font_unifont_regular_16.rs b/core/embed/rust/src/ui/layout_caesar/fonts/font_unifont_regular_16.rs
index 661e8abd..27711961 100644
--- a/core/embed/rust/src/ui/layout_caesar/fonts/font_unifont_regular_16.rs
+++ b/core/embed/rust/src/ui/layout_caesar/fonts/font_unifont_regular_16.rs
@@ -407,5 +407,6 @@ pub const Font_Unifont_Regular_16_info: FontInfo = FontInfo {
baseline: 2,
glyph_data: &Font_Unifont_Regular_16,
glyph_nonprintable: &Font_Unifont_Regular_16_glyph_nonprintable,
+ #[cfg(feature = "ui_font_kerning")]
kernings: None,
};
diff --git a/core/embed/rust/src/ui/layout_delizia/fonts/font_robotomono_medium_21.rs b/core/embed/rust/src/ui/layout_delizia/fonts/font_robotomono_medium_21.rs
index 7559ae24..526b7690 100644
--- a/core/embed/rust/src/ui/layout_delizia/fonts/font_robotomono_medium_21.rs
+++ b/core/embed/rust/src/ui/layout_delizia/fonts/font_robotomono_medium_21.rs
@@ -403,5 +403,6 @@ pub const Font_RobotoMono_Medium_21_info: FontInfo = FontInfo {
baseline: 5,
glyph_data: &Font_RobotoMono_Medium_21,
glyph_nonprintable: &Font_RobotoMono_Medium_21_glyph_nonprintable,
+ #[cfg(feature = "ui_font_kerning")]
kernings: None,
};
diff --git a/core/embed/rust/src/ui/layout_delizia/fonts/font_tthoves_bold_17.rs b/core/embed/rust/src/ui/layout_delizia/fonts/font_tthoves_bold_17.rs
index fd858338..68625bf2 100644
--- a/core/embed/rust/src/ui/layout_delizia/fonts/font_tthoves_bold_17.rs
+++ b/core/embed/rust/src/ui/layout_delizia/fonts/font_tthoves_bold_17.rs
@@ -7,6 +7,8 @@
// - rest is packed 4-bit glyph data
use crate::ui::display::font::FontInfo;
+#[cfg(feature = "ui_font_kerning")]
+use crate::ui::display::font::KerningTable;
/// ' ' (ASCII 32)
const Font_TTHoves_Bold_17_glyph_32: [u8; 5] = [ 0, 0, 5, 0, 0 ];
@@ -317,6 +319,258 @@ const Font_TTHoves_Bold_17_upper: [&[u8]; 95] = [
&Font_TTHoves_Bold_17_glyph_126,
];
+/// Kerning index: (left_char, count), sorted by left_char.
+/// Start offset in kern_pairs is the sum of counts for all preceding entries.
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTHoves_Bold_17_kern_index: [(u8, u8); 31] = [
+ (32, 7), // ' '
+ (34, 4), // '"'
+ (45, 7), // '-'
+ (46, 9), // '.'
+ (47, 1), // '/'
+ (48, 1), // '0'
+ (50, 3), // '2'
+ (51, 1), // '3'
+ (52, 1), // '4'
+ (53, 2), // '5'
+ (54, 3), // '6'
+ (55, 6), // '7'
+ (56, 1), // '8'
+ (57, 4), // '9'
+ (65, 4), // 'A'
+ (70, 15), // 'F'
+ (75, 11), // 'K'
+ (76, 13), // 'L'
+ (80, 11), // 'P'
+ (84, 23), // 'T'
+ (86, 14), // 'V'
+ (87, 2), // 'W'
+ (88, 1), // 'X'
+ (89, 19), // 'Y'
+ (90, 1), // 'Z'
+ (92, 1), // '\'
+ (102, 1), // 'f'
+ (114, 1), // 'r'
+ (118, 2), // 'v'
+ (119, 2), // 'w'
+ (121, 2), // 'y'
+];
+
+/// Kerning pairs: (right_char, kern_value), grouped by left_char
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTHoves_Bold_17_kern_pairs: [(u8, i8); 173] = [
+ // ' ' (32) +
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (89, -1), // + 'Y'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // '"' (34) +
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (65, -1), // + 'A'
+ (74, -2), // + 'J'
+ // '-' (45) +
+ (49, -1), // + '1'
+ (55, -1), // + '7'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ // '.' (46) +
+ (49, -1), // + '1'
+ (55, -1), // + '7'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (89, -1), // + 'Y'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // '/' (47) +
+ (47, -2), // + '/'
+ // '0' (48) +
+ (55, -1), // + '7'
+ // '2' (50) +
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (55, -1), // + '7'
+ // '3' (51) +
+ (55, -1), // + '7'
+ // '4' (52) +
+ (55, -1), // + '7'
+ // '5' (53) +
+ (49, -1), // + '1'
+ (57, -1), // + '9'
+ // '6' (54) +
+ (34, -1), // + '"'
+ (55, -1), // + '7'
+ (57, -1), // + '9'
+ // '7' (55) +
+ (45, -1), // + '-'
+ (46, -1), // + '.'
+ (48, -1), // + '0'
+ (50, -1), // + '2'
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ // '8' (56) +
+ (55, -1), // + '7'
+ // '9' (57) +
+ (46, -1), // + '.'
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (55, -1), // + '7'
+ // 'A' (65) +
+ (34, -1), // + '"'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (89, -1), // + 'Y'
+ // 'F' (70) +
+ (32, -1), // + ' '
+ (46, -1), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (120, -1), // + 'x'
+ // 'K' (75) +
+ (45, -1), // + '-'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 'L' (76) +
+ (34, -2), // + '"'
+ (45, -1), // + '-'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (84, -2), // + 'T'
+ (85, -1), // + 'U'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (89, -1), // + 'Y'
+ (118, -1), // + 'v'
+ (121, -1), // + 'y'
+ // 'P' (80) +
+ (32, -1), // + ' '
+ (46, -1), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ // 'T' (84) +
+ (32, -1), // + ' '
+ (45, -1), // + '-'
+ (46, -1), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -1), // + 'o'
+ (112, -1), // + 'p'
+ (113, -1), // + 'q'
+ (114, -1), // + 'r'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ // 'V' (86) +
+ (32, -1), // + ' '
+ (46, -1), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ (120, -1), // + 'x'
+ // 'W' (87) +
+ (32, -1), // + ' '
+ (46, -1), // + '.'
+ // 'X' (88) +
+ (45, -1), // + '-'
+ // 'Y' (89) +
+ (32, -1), // + ' '
+ (45, -1), // + '-'
+ (46, -1), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -1), // + 'o'
+ (112, -1), // + 'p'
+ (113, -1), // + 'q'
+ (114, -1), // + 'r'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ (120, -1), // + 'x'
+ // 'Z' (90) +
+ (45, -1), // + '-'
+ // '\' (92) +
+ (92, -2), // + '\'
+ // 'f' (102) +
+ (34, 1), // + '"'
+ // 'r' (114) +
+ (32, -1), // + ' '
+ // 'v' (118) +
+ (32, -1), // + ' '
+ (46, -1), // + '.'
+ // 'w' (119) +
+ (32, -1), // + ' '
+ (46, -1), // + '.'
+ // 'y' (121) +
+ (32, -1), // + ' '
+ (46, -1), // + '.'
+];
+
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTHoves_Bold_17_kernings: KerningTable = KerningTable {
+ index: &Font_TTHoves_Bold_17_kern_index,
+ pairs: &Font_TTHoves_Bold_17_kern_pairs,
+};
+
/// FontInfo struct for forced uppercase usage
pub const Font_TTHoves_Bold_17_upper_info: FontInfo = FontInfo {
translation_blob_idx: 7,
@@ -325,5 +579,6 @@ pub const Font_TTHoves_Bold_17_upper_info: FontInfo = FontInfo {
baseline: 4,
glyph_data: &Font_TTHoves_Bold_17_upper,
glyph_nonprintable: &Font_TTHoves_Bold_17_glyph_nonprintable,
- kernings: None,
+ #[cfg(feature = "ui_font_kerning")]
+ kernings: Some(&Font_TTHoves_Bold_17_kernings),
};
diff --git a/core/embed/rust/src/ui/layout_delizia/fonts/font_ttsatoshi_demibold_18.rs b/core/embed/rust/src/ui/layout_delizia/fonts/font_ttsatoshi_demibold_18.rs
index 31a85f07..0c52c370 100644
--- a/core/embed/rust/src/ui/layout_delizia/fonts/font_ttsatoshi_demibold_18.rs
+++ b/core/embed/rust/src/ui/layout_delizia/fonts/font_ttsatoshi_demibold_18.rs
@@ -7,6 +7,8 @@
// - rest is packed 4-bit glyph data
use crate::ui::display::font::FontInfo;
+#[cfg(feature = "ui_font_kerning")]
+use crate::ui::display::font::KerningTable;
// NOTE: numeral chars ('0','1',..,'9') mapped to alternative style glyphs contained in the font (glyph indices: 1205-1214)
@@ -397,6 +399,286 @@ const Font_TTSatoshi_DemiBold_18: [&[u8]; 95] = [
&Font_TTSatoshi_DemiBold_18_glyph_126,
];
+/// Kerning index: (left_char, count), sorted by left_char.
+/// Start offset in kern_pairs is the sum of counts for all preceding entries.
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_DemiBold_18_kern_index: [(u8, u8); 36] = [
+ (32, 1), // ' '
+ (34, 6), // '"'
+ (39, 6), // '''
+ (40, 1), // '('
+ (42, 6), // '*'
+ (44, 8), // ','
+ (45, 5), // '-'
+ (46, 8), // '.'
+ (47, 1), // '/'
+ (54, 5), // '6'
+ (55, 8), // '7'
+ (57, 2), // '9'
+ (65, 7), // 'A'
+ (67, 1), // 'C'
+ (68, 1), // 'D'
+ (70, 12), // 'F'
+ (75, 1), // 'K'
+ (76, 15), // 'L'
+ (79, 1), // 'O'
+ (80, 6), // 'P'
+ (81, 1), // 'Q'
+ (84, 24), // 'T'
+ (86, 13), // 'V'
+ (87, 3), // 'W'
+ (88, 7), // 'X'
+ (89, 19), // 'Y'
+ (91, 1), // '['
+ (92, 1), // '\'
+ (94, 6), // '^'
+ (102, 6), // 'f'
+ (103, 1), // 'g'
+ (106, 1), // 'j'
+ (114, 2), // 'r'
+ (118, 2), // 'v'
+ (121, 2), // 'y'
+ (123, 1), // '{'
+];
+
+/// Kerning pairs: (right_char, kern_value), grouped by left_char
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_DemiBold_18_kern_pairs: [(u8, i8); 191] = [
+ // ' ' (32) +
+ (84, -1), // + 'T'
+ // '"' (34) +
+ (49, 1), // + '1'
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (116, 1), // + 't'
+ // ''' (39) +
+ (49, 1), // + '1'
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (116, 1), // + 't'
+ // '(' (40) +
+ (106, 1), // + 'j'
+ // '*' (42) +
+ (49, 1), // + '1'
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (116, 1), // + 't'
+ // ',' (44) +
+ (49, -1), // + '1'
+ (57, -1), // + '9'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (89, -1), // + 'Y'
+ (118, -1), // + 'v'
+ (121, -1), // + 'y'
+ // '-' (45) +
+ (49, -1), // + '1'
+ (55, -1), // + '7'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (89, -1), // + 'Y'
+ // '.' (46) +
+ (49, -1), // + '1'
+ (57, -1), // + '9'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (89, -1), // + 'Y'
+ (118, -1), // + 'v'
+ (121, -1), // + 'y'
+ // '/' (47) +
+ (47, -2), // + '/'
+ // '6' (54) +
+ (34, -1), // + '"'
+ (39, -1), // + '''
+ (42, -1), // + '*'
+ (55, -1), // + '7'
+ (94, -1), // + '^'
+ // '7' (55) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (94, 1), // + '^'
+ // '9' (57) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ // 'A' (65) +
+ (34, -1), // + '"'
+ (39, -1), // + '''
+ (42, -1), // + '*'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (89, -1), // + 'Y'
+ (94, -1), // + '^'
+ // 'C' (67) +
+ (88, -1), // + 'X'
+ // 'D' (68) +
+ (88, -1), // + 'X'
+ // 'F' (70) +
+ (32, -1), // + ' '
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ // 'K' (75) +
+ (45, -1), // + '-'
+ // 'L' (76) +
+ (34, -1), // + '"'
+ (39, -1), // + '''
+ (42, -1), // + '*'
+ (45, -1), // + '-'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (84, -2), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (89, -1), // + 'Y'
+ (94, -1), // + '^'
+ (118, -1), // + 'v'
+ (121, -1), // + 'y'
+ // 'O' (79) +
+ (88, -1), // + 'X'
+ // 'P' (80) +
+ (32, -1), // + ' '
+ (44, -2), // + ','
+ (46, -2), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (97, -1), // + 'a'
+ // 'Q' (81) +
+ (88, -1), // + 'X'
+ // 'T' (84) +
+ (32, -1), // + ' '
+ (44, -1), // + ','
+ (45, -1), // + '-'
+ (46, -1), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -1), // + 'o'
+ (112, -1), // + 'p'
+ (113, -1), // + 'q'
+ (114, -1), // + 'r'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ // 'V' (86) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ // 'W' (87) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (74, -1), // + 'J'
+ // 'X' (88) +
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 'Y' (89) +
+ (44, -1), // + ','
+ (45, -1), // + '-'
+ (46, -1), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -1), // + 'o'
+ (112, -1), // + 'p'
+ (113, -1), // + 'q'
+ (114, -1), // + 'r'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ (122, -1), // + 'z'
+ // '[' (91) +
+ (106, 1), // + 'j'
+ // '\' (92) +
+ (92, -2), // + '\'
+ // '^' (94) +
+ (49, 1), // + '1'
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (116, 1), // + 't'
+ // 'f' (102) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (94, 1), // + '^'
+ // 'g' (103) +
+ (106, 1), // + 'j'
+ // 'j' (106) +
+ (106, 1), // + 'j'
+ // 'r' (114) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ // 'v' (118) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ // 'y' (121) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ // '{' (123) +
+ (106, 1), // + 'j'
+];
+
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_DemiBold_18_kernings: KerningTable = KerningTable {
+ index: &Font_TTSatoshi_DemiBold_18_kern_index,
+ pairs: &Font_TTSatoshi_DemiBold_18_kern_pairs,
+};
+
/// FontInfo struct for normal ASCII usage
pub const Font_TTSatoshi_DemiBold_18_info: FontInfo = FontInfo {
translation_blob_idx: 8,
@@ -405,5 +687,6 @@ pub const Font_TTSatoshi_DemiBold_18_info: FontInfo = FontInfo {
baseline: 4,
glyph_data: &Font_TTSatoshi_DemiBold_18,
glyph_nonprintable: &Font_TTSatoshi_DemiBold_18_glyph_nonprintable,
- kernings: None,
+ #[cfg(feature = "ui_font_kerning")]
+ kernings: Some(&Font_TTSatoshi_DemiBold_18_kernings),
};
diff --git a/core/embed/rust/src/ui/layout_delizia/fonts/font_ttsatoshi_demibold_21.rs b/core/embed/rust/src/ui/layout_delizia/fonts/font_ttsatoshi_demibold_21.rs
index a79affff..2f393a3a 100644
--- a/core/embed/rust/src/ui/layout_delizia/fonts/font_ttsatoshi_demibold_21.rs
+++ b/core/embed/rust/src/ui/layout_delizia/fonts/font_ttsatoshi_demibold_21.rs
@@ -7,6 +7,8 @@
// - rest is packed 4-bit glyph data
use crate::ui::display::font::FontInfo;
+#[cfg(feature = "ui_font_kerning")]
+use crate::ui::display::font::KerningTable;
// NOTE: numeral chars ('0','1',..,'9') mapped to alternative style glyphs contained in the font (glyph indices: 1205-1214)
@@ -397,6 +399,286 @@ const Font_TTSatoshi_DemiBold_21: [&[u8]; 95] = [
&Font_TTSatoshi_DemiBold_21_glyph_126,
];
+/// Kerning index: (left_char, count), sorted by left_char.
+/// Start offset in kern_pairs is the sum of counts for all preceding entries.
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_DemiBold_21_kern_index: [(u8, u8); 36] = [
+ (32, 1), // ' '
+ (34, 6), // '"'
+ (39, 6), // '''
+ (40, 1), // '('
+ (42, 6), // '*'
+ (44, 8), // ','
+ (45, 5), // '-'
+ (46, 8), // '.'
+ (47, 1), // '/'
+ (54, 5), // '6'
+ (55, 8), // '7'
+ (57, 2), // '9'
+ (65, 7), // 'A'
+ (67, 1), // 'C'
+ (68, 1), // 'D'
+ (70, 12), // 'F'
+ (75, 1), // 'K'
+ (76, 15), // 'L'
+ (79, 1), // 'O'
+ (80, 6), // 'P'
+ (81, 1), // 'Q'
+ (84, 24), // 'T'
+ (86, 13), // 'V'
+ (87, 3), // 'W'
+ (88, 7), // 'X'
+ (89, 19), // 'Y'
+ (91, 1), // '['
+ (92, 1), // '\'
+ (94, 6), // '^'
+ (102, 6), // 'f'
+ (103, 1), // 'g'
+ (106, 1), // 'j'
+ (114, 2), // 'r'
+ (118, 2), // 'v'
+ (121, 2), // 'y'
+ (123, 1), // '{'
+];
+
+/// Kerning pairs: (right_char, kern_value), grouped by left_char
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_DemiBold_21_kern_pairs: [(u8, i8); 191] = [
+ // ' ' (32) +
+ (84, -1), // + 'T'
+ // '"' (34) +
+ (49, 1), // + '1'
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (116, 1), // + 't'
+ // ''' (39) +
+ (49, 1), // + '1'
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (116, 1), // + 't'
+ // '(' (40) +
+ (106, 1), // + 'j'
+ // '*' (42) +
+ (49, 1), // + '1'
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (116, 1), // + 't'
+ // ',' (44) +
+ (49, -1), // + '1'
+ (57, -1), // + '9'
+ (84, -2), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (89, -2), // + 'Y'
+ (118, -1), // + 'v'
+ (121, -1), // + 'y'
+ // '-' (45) +
+ (49, -1), // + '1'
+ (55, -1), // + '7'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (89, -1), // + 'Y'
+ // '.' (46) +
+ (49, -1), // + '1'
+ (57, -1), // + '9'
+ (84, -2), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (89, -2), // + 'Y'
+ (118, -1), // + 'v'
+ (121, -1), // + 'y'
+ // '/' (47) +
+ (47, -2), // + '/'
+ // '6' (54) +
+ (34, -1), // + '"'
+ (39, -1), // + '''
+ (42, -1), // + '*'
+ (55, -1), // + '7'
+ (94, -1), // + '^'
+ // '7' (55) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (94, 1), // + '^'
+ // '9' (57) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ // 'A' (65) +
+ (34, -1), // + '"'
+ (39, -1), // + '''
+ (42, -1), // + '*'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (89, -1), // + 'Y'
+ (94, -1), // + '^'
+ // 'C' (67) +
+ (88, -1), // + 'X'
+ // 'D' (68) +
+ (88, -1), // + 'X'
+ // 'F' (70) +
+ (32, -1), // + ' '
+ (44, -2), // + ','
+ (46, -2), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ // 'K' (75) +
+ (45, -1), // + '-'
+ // 'L' (76) +
+ (34, -1), // + '"'
+ (39, -1), // + '''
+ (42, -1), // + '*'
+ (45, -1), // + '-'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (84, -2), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (89, -2), // + 'Y'
+ (94, -1), // + '^'
+ (118, -1), // + 'v'
+ (121, -1), // + 'y'
+ // 'O' (79) +
+ (88, -1), // + 'X'
+ // 'P' (80) +
+ (32, -1), // + ' '
+ (44, -2), // + ','
+ (46, -2), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (97, -1), // + 'a'
+ // 'Q' (81) +
+ (88, -1), // + 'X'
+ // 'T' (84) +
+ (32, -1), // + ' '
+ (44, -2), // + ','
+ (45, -1), // + '-'
+ (46, -2), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (97, -2), // + 'a'
+ (99, -2), // + 'c'
+ (100, -2), // + 'd'
+ (101, -2), // + 'e'
+ (103, -2), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -2), // + 'o'
+ (112, -1), // + 'p'
+ (113, -2), // + 'q'
+ (114, -1), // + 'r'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ // 'V' (86) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ // 'W' (87) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (74, -1), // + 'J'
+ // 'X' (88) +
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 'Y' (89) +
+ (44, -2), // + ','
+ (45, -1), // + '-'
+ (46, -2), // + '.'
+ (65, -1), // + 'A'
+ (74, -2), // + 'J'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -1), // + 'o'
+ (112, -1), // + 'p'
+ (113, -1), // + 'q'
+ (114, -1), // + 'r'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ (122, -1), // + 'z'
+ // '[' (91) +
+ (106, 1), // + 'j'
+ // '\' (92) +
+ (92, -2), // + '\'
+ // '^' (94) +
+ (49, 1), // + '1'
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (116, 1), // + 't'
+ // 'f' (102) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (94, 1), // + '^'
+ // 'g' (103) +
+ (106, 1), // + 'j'
+ // 'j' (106) +
+ (106, 1), // + 'j'
+ // 'r' (114) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ // 'v' (118) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ // 'y' (121) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ // '{' (123) +
+ (106, 1), // + 'j'
+];
+
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_DemiBold_21_kernings: KerningTable = KerningTable {
+ index: &Font_TTSatoshi_DemiBold_21_kern_index,
+ pairs: &Font_TTSatoshi_DemiBold_21_kern_pairs,
+};
+
/// FontInfo struct for normal ASCII usage
pub const Font_TTSatoshi_DemiBold_21_info: FontInfo = FontInfo {
translation_blob_idx: 1,
@@ -405,5 +687,6 @@ pub const Font_TTSatoshi_DemiBold_21_info: FontInfo = FontInfo {
baseline: 5,
glyph_data: &Font_TTSatoshi_DemiBold_21,
glyph_nonprintable: &Font_TTSatoshi_DemiBold_21_glyph_nonprintable,
- kernings: None,
+ #[cfg(feature = "ui_font_kerning")]
+ kernings: Some(&Font_TTSatoshi_DemiBold_21_kernings),
};
diff --git a/core/embed/rust/src/ui/layout_delizia/fonts/font_ttsatoshi_demibold_42.rs b/core/embed/rust/src/ui/layout_delizia/fonts/font_ttsatoshi_demibold_42.rs
index c0d6dcff..5486daac 100644
--- a/core/embed/rust/src/ui/layout_delizia/fonts/font_ttsatoshi_demibold_42.rs
+++ b/core/embed/rust/src/ui/layout_delizia/fonts/font_ttsatoshi_demibold_42.rs
@@ -7,6 +7,8 @@
// - rest is packed 4-bit glyph data
use crate::ui::display::font::FontInfo;
+#[cfg(feature = "ui_font_kerning")]
+use crate::ui::display::font::KerningTable;
// NOTE: glyphs of uppercase and special characters removed to save space as they are not used
@@ -193,6 +195,849 @@ const Font_TTSatoshi_DemiBold_42: [&[u8]; 95] = [
&Font_TTSatoshi_DemiBold_42_glyph_nonprintable,
];
+/// Kerning index: (left_char, count), sorted by left_char.
+/// Start offset in kern_pairs is the sum of counts for all preceding entries.
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_DemiBold_42_kern_index: [(u8, u8); 61] = [
+ (32, 16), // ' '
+ (34, 21), // '"'
+ (39, 21), // '''
+ (40, 14), // '('
+ (42, 21), // '*'
+ (44, 12), // ','
+ (45, 14), // '-'
+ (46, 12), // '.'
+ (47, 1), // '/'
+ (48, 2), // '0'
+ (49, 7), // '1'
+ (50, 3), // '2'
+ (51, 1), // '3'
+ (52, 6), // '4'
+ (53, 5), // '5'
+ (54, 8), // '6'
+ (55, 14), // '7'
+ (56, 1), // '8'
+ (57, 6), // '9'
+ (65, 18), // 'A'
+ (66, 7), // 'B'
+ (67, 7), // 'C'
+ (68, 7), // 'D'
+ (70, 37), // 'F'
+ (71, 4), // 'G'
+ (75, 2), // 'K'
+ (76, 27), // 'L'
+ (79, 7), // 'O'
+ (80, 22), // 'P'
+ (81, 7), // 'Q'
+ (82, 19), // 'R'
+ (83, 9), // 'S'
+ (84, 38), // 'T'
+ (85, 2), // 'U'
+ (86, 37), // 'V'
+ (87, 22), // 'W'
+ (88, 21), // 'X'
+ (89, 34), // 'Y'
+ (90, 19), // 'Z'
+ (91, 14), // '['
+ (92, 1), // '\'
+ (94, 21), // '^'
+ (98, 1), // 'b'
+ (99, 1), // 'c'
+ (100, 7), // 'd'
+ (101, 1), // 'e'
+ (102, 18), // 'f'
+ (103, 8), // 'g'
+ (105, 7), // 'i'
+ (106, 8), // 'j'
+ (108, 7), // 'l'
+ (111, 1), // 'o'
+ (112, 1), // 'p'
+ (114, 11), // 'r'
+ (116, 18), // 't'
+ (118, 7), // 'v'
+ (119, 7), // 'w'
+ (120, 8), // 'x'
+ (121, 7), // 'y'
+ (122, 5), // 'z'
+ (123, 14), // '{'
+];
+
+/// Kerning pairs: (right_char, kern_value), grouped by left_char
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_DemiBold_42_kern_pairs: [(u8, i8); 704] = [
+ // ' ' (32) +
+ (49, -1), // + '1'
+ (52, -1), // + '4'
+ (55, -1), // + '7'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -2), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ // '"' (34) +
+ (49, 2), // + '1'
+ (52, -2), // + '4'
+ (54, -1), // + '6'
+ (55, 2), // + '7'
+ (65, -3), // + 'A'
+ (74, -3), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 2), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // ''' (39) +
+ (49, 2), // + '1'
+ (52, -2), // + '4'
+ (54, -1), // + '6'
+ (55, 2), // + '7'
+ (65, -3), // + 'A'
+ (74, -3), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 2), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // '(' (40) +
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (89, 1), // + 'Y'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 3), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+ // '*' (42) +
+ (49, 2), // + '1'
+ (52, -2), // + '4'
+ (54, -1), // + '6'
+ (55, 2), // + '7'
+ (65, -3), // + 'A'
+ (74, -3), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 2), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // ',' (44) +
+ (49, -3), // + '1'
+ (55, -1), // + '7'
+ (57, -2), // + '9'
+ (84, -3), // + 'T'
+ (86, -3), // + 'V'
+ (87, -2), // + 'W'
+ (89, -3), // + 'Y'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -2), // + 'v'
+ (119, -1), // + 'w'
+ (121, -2), // + 'y'
+ // '-' (45) +
+ (49, -2), // + '1'
+ (50, -1), // + '2'
+ (51, -1), // + '3'
+ (55, -2), // + '7'
+ (74, -2), // + 'J'
+ (84, -2), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (88, -1), // + 'X'
+ (89, -2), // + 'Y'
+ (90, -1), // + 'Z'
+ (102, -1), // + 'f'
+ (120, -1), // + 'x'
+ (122, -1), // + 'z'
+ // '.' (46) +
+ (49, -3), // + '1'
+ (55, -1), // + '7'
+ (57, -2), // + '9'
+ (84, -3), // + 'T'
+ (86, -3), // + 'V'
+ (87, -2), // + 'W'
+ (89, -3), // + 'Y'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -2), // + 'v'
+ (119, -1), // + 'w'
+ (121, -2), // + 'y'
+ // '/' (47) +
+ (47, -4), // + '/'
+ // '0' (48) +
+ (50, -1), // + '2'
+ (55, -1), // + '7'
+ // '1' (49) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // '2' (50) +
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (55, -1), // + '7'
+ // '3' (51) +
+ (55, -1), // + '7'
+ // '4' (52) +
+ (41, 1), // + ')'
+ (49, -1), // + '1'
+ (50, -1), // + '2'
+ (55, -1), // + '7'
+ (93, 1), // + ']'
+ (125, 1), // + '}'
+ // '5' (53) +
+ (48, -1), // + '0'
+ (49, -1), // + '1'
+ (50, -1), // + '2'
+ (55, -1), // + '7'
+ (57, -1), // + '9'
+ // '6' (54) +
+ (34, -2), // + '"'
+ (39, -2), // + '''
+ (42, -2), // + '*'
+ (49, -1), // + '1'
+ (50, -1), // + '2'
+ (55, -2), // + '7'
+ (57, -1), // + '9'
+ (94, -2), // + '^'
+ // '7' (55) +
+ (32, -1), // + ' '
+ (34, 2), // + '"'
+ (39, 2), // + '''
+ (41, 1), // + ')'
+ (42, 2), // + '*'
+ (44, -3), // + ','
+ (46, -3), // + '.'
+ (48, -1), // + '0'
+ (50, -1), // + '2'
+ (52, -2), // + '4'
+ (54, -2), // + '6'
+ (93, 1), // + ']'
+ (94, 2), // + '^'
+ (125, 1), // + '}'
+ // '8' (56) +
+ (55, -1), // + '7'
+ // '9' (57) +
+ (44, -2), // + ','
+ (46, -2), // + '.'
+ (50, -1), // + '2'
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (55, -1), // + '7'
+ // 'A' (65) +
+ (32, -1), // + ' '
+ (34, -3), // + '"'
+ (39, -3), // + '''
+ (42, -3), // + '*'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (84, -3), // + 'T'
+ (85, -1), // + 'U'
+ (86, -2), // + 'V'
+ (87, -1), // + 'W'
+ (89, -3), // + 'Y'
+ (94, -3), // + '^'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (121, -1), // + 'y'
+ // 'B' (66) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ // 'C' (67) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (97, -1), // + 'a'
+ // 'D' (68) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -2), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ // 'F' (70) +
+ (32, -2), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -3), // + ','
+ (46, -3), // + '.'
+ (65, -2), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -3), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (102, -1), // + 'f'
+ (103, -1), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -1), // + 'o'
+ (112, -1), // + 'p'
+ (113, -1), // + 'q'
+ (114, -1), // + 'r'
+ (115, -1), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ (125, 1), // + '}'
+ // 'G' (71) +
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (89, -1), // + 'Y'
+ // 'K' (75) +
+ (32, -1), // + ' '
+ (45, -1), // + '-'
+ // 'L' (76) +
+ (32, -1), // + ' '
+ (34, -3), // + '"'
+ (39, -3), // + '''
+ (42, -3), // + '*'
+ (45, -2), // + '-'
+ (67, -2), // + 'C'
+ (71, -2), // + 'G'
+ (79, -2), // + 'O'
+ (81, -2), // + 'Q'
+ (83, -1), // + 'S'
+ (84, -4), // + 'T'
+ (85, -1), // + 'U'
+ (86, -3), // + 'V'
+ (87, -2), // + 'W'
+ (89, -3), // + 'Y'
+ (94, -3), // + '^'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -2), // + 'v'
+ (119, -1), // + 'w'
+ (121, -2), // + 'y'
+ // 'O' (79) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -2), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ // 'P' (80) +
+ (32, -2), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -4), // + ','
+ (46, -4), // + '.'
+ (65, -3), // + 'A'
+ (74, -3), // + 'J'
+ (84, -1), // + 'T'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ (94, 1), // + '^'
+ (97, -2), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ // 'Q' (81) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -2), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ // 'R' (82) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (117, -1), // + 'u'
+ // 'S' (83) +
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 'T' (84) +
+ (32, -2), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -3), // + ','
+ (45, -2), // + '-'
+ (46, -3), // + '.'
+ (65, -3), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -3), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -3), // + 'a'
+ (99, -3), // + 'c'
+ (100, -3), // + 'd'
+ (101, -3), // + 'e'
+ (102, -1), // + 'f'
+ (103, -3), // + 'g'
+ (109, -3), // + 'm'
+ (110, -3), // + 'n'
+ (111, -3), // + 'o'
+ (112, -3), // + 'p'
+ (113, -3), // + 'q'
+ (114, -3), // + 'r'
+ (115, -3), // + 's'
+ (116, -1), // + 't'
+ (117, -3), // + 'u'
+ (118, -3), // + 'v'
+ (119, -3), // + 'w'
+ (120, -3), // + 'x'
+ (121, -3), // + 'y'
+ (122, -3), // + 'z'
+ (125, 1), // + '}'
+ // 'U' (85) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ // 'V' (86) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -3), // + ','
+ (45, -1), // + '-'
+ (46, -3), // + '.'
+ (65, -2), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -3), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -2), // + 'a'
+ (99, -2), // + 'c'
+ (100, -2), // + 'd'
+ (101, -2), // + 'e'
+ (103, -2), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -2), // + 'o'
+ (112, -1), // + 'p'
+ (113, -2), // + 'q'
+ (114, -1), // + 'r'
+ (115, -2), // + 's'
+ (116, -1), // + 't'
+ (117, -2), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ (125, 1), // + '}'
+ // 'W' (87) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -2), // + ','
+ (45, -1), // + '-'
+ (46, -2), // + '.'
+ (65, -1), // + 'A'
+ (74, -2), // + 'J'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ (125, 1), // + '}'
+ // 'X' (88) +
+ (32, -1), // + ' '
+ (45, -1), // + '-'
+ (67, -2), // + 'C'
+ (71, -2), // + 'G'
+ (79, -2), // + 'O'
+ (81, -2), // + 'Q'
+ (83, -1), // + 'S'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (102, -1), // + 'f'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -2), // + 'v'
+ (119, -2), // + 'w'
+ (121, -2), // + 'y'
+ // 'Y' (89) +
+ (32, -1), // + ' '
+ (41, 1), // + ')'
+ (44, -3), // + ','
+ (45, -2), // + '-'
+ (46, -3), // + '.'
+ (65, -3), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -3), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (97, -3), // + 'a'
+ (99, -3), // + 'c'
+ (100, -3), // + 'd'
+ (101, -3), // + 'e'
+ (102, -1), // + 'f'
+ (103, -3), // + 'g'
+ (109, -2), // + 'm'
+ (110, -2), // + 'n'
+ (111, -3), // + 'o'
+ (112, -2), // + 'p'
+ (113, -3), // + 'q'
+ (114, -2), // + 'r'
+ (115, -3), // + 's'
+ (116, -1), // + 't'
+ (117, -2), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -2), // + 'z'
+ (125, 1), // + '}'
+ // 'Z' (90) +
+ (45, -1), // + '-'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // '[' (91) +
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (89, 1), // + 'Y'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 3), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+ // '\' (92) +
+ (92, -4), // + '\'
+ // '^' (94) +
+ (49, 2), // + '1'
+ (52, -2), // + '4'
+ (54, -1), // + '6'
+ (55, 2), // + '7'
+ (65, -3), // + 'A'
+ (74, -3), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 2), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // 'b' (98) +
+ (120, -1), // + 'x'
+ // 'c' (99) +
+ (120, -1), // + 'x'
+ // 'd' (100) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 'e' (101) +
+ (120, -1), // + 'x'
+ // 'f' (102) +
+ (32, -1), // + ' '
+ (34, 2), // + '"'
+ (39, 2), // + '''
+ (41, 1), // + ')'
+ (42, 2), // + '*'
+ (44, -2), // + ','
+ (45, -1), // + '-'
+ (46, -2), // + '.'
+ (93, 1), // + ']'
+ (94, 2), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (125, 1), // + '}'
+ // 'g' (103) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (106, 2), // + 'j'
+ (125, 1), // + '}'
+ // 'i' (105) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 'j' (106) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (106, 2), // + 'j'
+ (125, 1), // + '}'
+ // 'l' (108) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 'o' (111) +
+ (120, -1), // + 'x'
+ // 'p' (112) +
+ (120, -1), // + 'x'
+ // 'r' (114) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -3), // + ','
+ (45, -1), // + '-'
+ (46, -3), // + '.'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 't' (116) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (45, -1), // + '-'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (102, -1), // + 'f'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (116, -1), // + 't'
+ (125, 1), // + '}'
+ // 'v' (118) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -2), // + ','
+ (46, -2), // + '.'
+ (94, 1), // + '^'
+ // 'w' (119) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (94, 1), // + '^'
+ // 'x' (120) +
+ (32, -1), // + ' '
+ (45, -1), // + '-'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ // 'y' (121) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -2), // + ','
+ (46, -2), // + '.'
+ (94, 1), // + '^'
+ // 'z' (122) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (45, -1), // + '-'
+ (94, 1), // + '^'
+ // '{' (123) +
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (89, 1), // + 'Y'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 3), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+];
+
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_DemiBold_42_kernings: KerningTable = KerningTable {
+ index: &Font_TTSatoshi_DemiBold_42_kern_index,
+ pairs: &Font_TTSatoshi_DemiBold_42_kern_pairs,
+};
+
/// FontInfo struct for normal ASCII usage
pub const Font_TTSatoshi_DemiBold_42_info: FontInfo = FontInfo {
translation_blob_idx: 1,
@@ -201,5 +1046,6 @@ pub const Font_TTSatoshi_DemiBold_42_info: FontInfo = FontInfo {
baseline: 9,
glyph_data: &Font_TTSatoshi_DemiBold_42,
glyph_nonprintable: &Font_TTSatoshi_DemiBold_42_glyph_nonprintable,
- kernings: None,
+ #[cfg(feature = "ui_font_kerning")]
+ kernings: Some(&Font_TTSatoshi_DemiBold_42_kernings),
};
diff --git a/core/embed/rust/src/ui/layout_eckhart/fonts/font_robotomono_light_30.rs b/core/embed/rust/src/ui/layout_eckhart/fonts/font_robotomono_light_30.rs
index 5182814e..fed333dc 100644
--- a/core/embed/rust/src/ui/layout_eckhart/fonts/font_robotomono_light_30.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/fonts/font_robotomono_light_30.rs
@@ -403,5 +403,6 @@ pub const Font_RobotoMono_Light_30_info: FontInfo = FontInfo {
baseline: 7,
glyph_data: &Font_RobotoMono_Light_30,
glyph_nonprintable: &Font_RobotoMono_Light_30_glyph_nonprintable,
+ #[cfg(feature = "ui_font_kerning")]
kernings: None,
};
diff --git a/core/embed/rust/src/ui/layout_eckhart/fonts/font_robotomono_medium_38.rs b/core/embed/rust/src/ui/layout_eckhart/fonts/font_robotomono_medium_38.rs
index 6cfa4073..9016267f 100644
--- a/core/embed/rust/src/ui/layout_eckhart/fonts/font_robotomono_medium_38.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/fonts/font_robotomono_medium_38.rs
@@ -403,5 +403,6 @@ pub const Font_RobotoMono_Medium_38_info: FontInfo = FontInfo {
baseline: 9,
glyph_data: &Font_RobotoMono_Medium_38,
glyph_nonprintable: &Font_RobotoMono_Medium_38_glyph_nonprintable,
+ #[cfg(feature = "ui_font_kerning")]
kernings: None,
};
diff --git a/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_extralight_46.rs b/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_extralight_46.rs
index 69c22186..b884be6d 100644
--- a/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_extralight_46.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_extralight_46.rs
@@ -7,6 +7,8 @@
// - rest is packed 4-bit glyph data
use crate::ui::display::font::FontInfo;
+#[cfg(feature = "ui_font_kerning")]
+use crate::ui::display::font::KerningTable;
/// ' ' (ASCII 32)
const Font_TTSatoshi_ExtraLight_46_glyph_32: [u8; 5] = [ 0, 0, 10, 0, 0 ];
@@ -395,6 +397,849 @@ const Font_TTSatoshi_ExtraLight_46: [&[u8]; 95] = [
&Font_TTSatoshi_ExtraLight_46_glyph_126,
];
+/// Kerning index: (left_char, count), sorted by left_char.
+/// Start offset in kern_pairs is the sum of counts for all preceding entries.
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_ExtraLight_46_kern_index: [(u8, u8); 61] = [
+ (32, 16), // ' '
+ (34, 21), // '"'
+ (39, 21), // '''
+ (40, 14), // '('
+ (42, 21), // '*'
+ (44, 12), // ','
+ (45, 14), // '-'
+ (46, 12), // '.'
+ (47, 1), // '/'
+ (48, 2), // '0'
+ (49, 7), // '1'
+ (50, 3), // '2'
+ (51, 1), // '3'
+ (52, 6), // '4'
+ (53, 5), // '5'
+ (54, 8), // '6'
+ (55, 14), // '7'
+ (56, 1), // '8'
+ (57, 6), // '9'
+ (65, 18), // 'A'
+ (66, 7), // 'B'
+ (67, 7), // 'C'
+ (68, 7), // 'D'
+ (70, 37), // 'F'
+ (71, 4), // 'G'
+ (75, 2), // 'K'
+ (76, 27), // 'L'
+ (79, 7), // 'O'
+ (80, 22), // 'P'
+ (81, 7), // 'Q'
+ (82, 19), // 'R'
+ (83, 9), // 'S'
+ (84, 38), // 'T'
+ (85, 2), // 'U'
+ (86, 37), // 'V'
+ (87, 22), // 'W'
+ (88, 21), // 'X'
+ (89, 34), // 'Y'
+ (90, 19), // 'Z'
+ (91, 14), // '['
+ (92, 1), // '\'
+ (94, 21), // '^'
+ (98, 1), // 'b'
+ (99, 1), // 'c'
+ (100, 7), // 'd'
+ (101, 1), // 'e'
+ (102, 18), // 'f'
+ (103, 8), // 'g'
+ (105, 7), // 'i'
+ (106, 8), // 'j'
+ (108, 7), // 'l'
+ (111, 1), // 'o'
+ (112, 1), // 'p'
+ (114, 11), // 'r'
+ (116, 18), // 't'
+ (118, 7), // 'v'
+ (119, 7), // 'w'
+ (120, 8), // 'x'
+ (121, 7), // 'y'
+ (122, 5), // 'z'
+ (123, 14), // '{'
+];
+
+/// Kerning pairs: (right_char, kern_value), grouped by left_char
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_ExtraLight_46_kern_pairs: [(u8, i8); 704] = [
+ // ' ' (32) +
+ (49, -1), // + '1'
+ (52, -1), // + '4'
+ (55, -1), // + '7'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -2), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ // '"' (34) +
+ (49, 2), // + '1'
+ (52, -2), // + '4'
+ (54, -1), // + '6'
+ (55, 2), // + '7'
+ (65, -3), // + 'A'
+ (74, -3), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 2), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // ''' (39) +
+ (49, 2), // + '1'
+ (52, -2), // + '4'
+ (54, -1), // + '6'
+ (55, 2), // + '7'
+ (65, -3), // + 'A'
+ (74, -3), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 2), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // '(' (40) +
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (89, 1), // + 'Y'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 3), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+ // '*' (42) +
+ (49, 2), // + '1'
+ (52, -2), // + '4'
+ (54, -1), // + '6'
+ (55, 2), // + '7'
+ (65, -3), // + 'A'
+ (74, -3), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 2), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // ',' (44) +
+ (49, -3), // + '1'
+ (55, -1), // + '7'
+ (57, -2), // + '9'
+ (84, -4), // + 'T'
+ (86, -3), // + 'V'
+ (87, -2), // + 'W'
+ (89, -4), // + 'Y'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -2), // + 'v'
+ (119, -1), // + 'w'
+ (121, -2), // + 'y'
+ // '-' (45) +
+ (49, -2), // + '1'
+ (50, -1), // + '2'
+ (51, -1), // + '3'
+ (55, -2), // + '7'
+ (74, -2), // + 'J'
+ (84, -2), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (88, -1), // + 'X'
+ (89, -2), // + 'Y'
+ (90, -1), // + 'Z'
+ (102, -1), // + 'f'
+ (120, -1), // + 'x'
+ (122, -1), // + 'z'
+ // '.' (46) +
+ (49, -3), // + '1'
+ (55, -1), // + '7'
+ (57, -2), // + '9'
+ (84, -4), // + 'T'
+ (86, -3), // + 'V'
+ (87, -2), // + 'W'
+ (89, -4), // + 'Y'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -2), // + 'v'
+ (119, -1), // + 'w'
+ (121, -2), // + 'y'
+ // '/' (47) +
+ (47, -5), // + '/'
+ // '0' (48) +
+ (50, -1), // + '2'
+ (55, -1), // + '7'
+ // '1' (49) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // '2' (50) +
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (55, -1), // + '7'
+ // '3' (51) +
+ (55, -1), // + '7'
+ // '4' (52) +
+ (41, 1), // + ')'
+ (49, -1), // + '1'
+ (50, -1), // + '2'
+ (55, -1), // + '7'
+ (93, 1), // + ']'
+ (125, 1), // + '}'
+ // '5' (53) +
+ (48, -1), // + '0'
+ (49, -1), // + '1'
+ (50, -1), // + '2'
+ (55, -1), // + '7'
+ (57, -1), // + '9'
+ // '6' (54) +
+ (34, -2), // + '"'
+ (39, -2), // + '''
+ (42, -2), // + '*'
+ (49, -1), // + '1'
+ (50, -1), // + '2'
+ (55, -2), // + '7'
+ (57, -1), // + '9'
+ (94, -2), // + '^'
+ // '7' (55) +
+ (32, -1), // + ' '
+ (34, 2), // + '"'
+ (39, 2), // + '''
+ (41, 1), // + ')'
+ (42, 2), // + '*'
+ (44, -3), // + ','
+ (46, -3), // + '.'
+ (48, -1), // + '0'
+ (50, -1), // + '2'
+ (52, -2), // + '4'
+ (54, -2), // + '6'
+ (93, 1), // + ']'
+ (94, 2), // + '^'
+ (125, 1), // + '}'
+ // '8' (56) +
+ (55, -1), // + '7'
+ // '9' (57) +
+ (44, -2), // + ','
+ (46, -2), // + '.'
+ (50, -1), // + '2'
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (55, -1), // + '7'
+ // 'A' (65) +
+ (32, -1), // + ' '
+ (34, -3), // + '"'
+ (39, -3), // + '''
+ (42, -3), // + '*'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (84, -3), // + 'T'
+ (85, -1), // + 'U'
+ (86, -2), // + 'V'
+ (87, -1), // + 'W'
+ (89, -3), // + 'Y'
+ (94, -3), // + '^'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (121, -1), // + 'y'
+ // 'B' (66) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ // 'C' (67) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (97, -1), // + 'a'
+ // 'D' (68) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -2), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ // 'F' (70) +
+ (32, -2), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -4), // + ','
+ (46, -4), // + '.'
+ (65, -2), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -3), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (102, -1), // + 'f'
+ (103, -1), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -1), // + 'o'
+ (112, -1), // + 'p'
+ (113, -1), // + 'q'
+ (114, -1), // + 'r'
+ (115, -1), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ (125, 1), // + '}'
+ // 'G' (71) +
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (89, -1), // + 'Y'
+ // 'K' (75) +
+ (32, -1), // + ' '
+ (45, -1), // + '-'
+ // 'L' (76) +
+ (32, -1), // + ' '
+ (34, -3), // + '"'
+ (39, -3), // + '''
+ (42, -3), // + '*'
+ (45, -2), // + '-'
+ (67, -2), // + 'C'
+ (71, -2), // + 'G'
+ (79, -2), // + 'O'
+ (81, -2), // + 'Q'
+ (83, -1), // + 'S'
+ (84, -5), // + 'T'
+ (85, -1), // + 'U'
+ (86, -3), // + 'V'
+ (87, -2), // + 'W'
+ (89, -4), // + 'Y'
+ (94, -3), // + '^'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -2), // + 'v'
+ (119, -1), // + 'w'
+ (121, -2), // + 'y'
+ // 'O' (79) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -2), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ // 'P' (80) +
+ (32, -2), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -5), // + ','
+ (46, -5), // + '.'
+ (65, -3), // + 'A'
+ (74, -3), // + 'J'
+ (84, -1), // + 'T'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ (94, 1), // + '^'
+ (97, -2), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ // 'Q' (81) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -2), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ // 'R' (82) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (117, -1), // + 'u'
+ // 'S' (83) +
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 'T' (84) +
+ (32, -2), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -4), // + ','
+ (45, -2), // + '-'
+ (46, -4), // + '.'
+ (65, -3), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -3), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -4), // + 'a'
+ (99, -4), // + 'c'
+ (100, -4), // + 'd'
+ (101, -4), // + 'e'
+ (102, -1), // + 'f'
+ (103, -4), // + 'g'
+ (109, -3), // + 'm'
+ (110, -3), // + 'n'
+ (111, -4), // + 'o'
+ (112, -3), // + 'p'
+ (113, -4), // + 'q'
+ (114, -3), // + 'r'
+ (115, -3), // + 's'
+ (116, -1), // + 't'
+ (117, -3), // + 'u'
+ (118, -3), // + 'v'
+ (119, -3), // + 'w'
+ (120, -3), // + 'x'
+ (121, -3), // + 'y'
+ (122, -3), // + 'z'
+ (125, 1), // + '}'
+ // 'U' (85) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ // 'V' (86) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -3), // + ','
+ (45, -1), // + '-'
+ (46, -3), // + '.'
+ (65, -2), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -3), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -2), // + 'a'
+ (99, -2), // + 'c'
+ (100, -2), // + 'd'
+ (101, -2), // + 'e'
+ (103, -2), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -2), // + 'o'
+ (112, -1), // + 'p'
+ (113, -2), // + 'q'
+ (114, -1), // + 'r'
+ (115, -2), // + 's'
+ (116, -1), // + 't'
+ (117, -2), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ (125, 1), // + '}'
+ // 'W' (87) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -2), // + ','
+ (45, -1), // + '-'
+ (46, -2), // + '.'
+ (65, -1), // + 'A'
+ (74, -2), // + 'J'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ (125, 1), // + '}'
+ // 'X' (88) +
+ (32, -1), // + ' '
+ (45, -1), // + '-'
+ (67, -2), // + 'C'
+ (71, -2), // + 'G'
+ (79, -2), // + 'O'
+ (81, -2), // + 'Q'
+ (83, -1), // + 'S'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (102, -1), // + 'f'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -2), // + 'v'
+ (119, -2), // + 'w'
+ (121, -2), // + 'y'
+ // 'Y' (89) +
+ (32, -1), // + ' '
+ (41, 1), // + ')'
+ (44, -4), // + ','
+ (45, -2), // + '-'
+ (46, -4), // + '.'
+ (65, -3), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -4), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (97, -3), // + 'a'
+ (99, -3), // + 'c'
+ (100, -3), // + 'd'
+ (101, -3), // + 'e'
+ (102, -1), // + 'f'
+ (103, -3), // + 'g'
+ (109, -2), // + 'm'
+ (110, -2), // + 'n'
+ (111, -3), // + 'o'
+ (112, -2), // + 'p'
+ (113, -3), // + 'q'
+ (114, -2), // + 'r'
+ (115, -3), // + 's'
+ (116, -1), // + 't'
+ (117, -2), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -2), // + 'z'
+ (125, 1), // + '}'
+ // 'Z' (90) +
+ (45, -1), // + '-'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // '[' (91) +
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (89, 1), // + 'Y'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 3), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+ // '\' (92) +
+ (92, -5), // + '\'
+ // '^' (94) +
+ (49, 2), // + '1'
+ (52, -2), // + '4'
+ (54, -1), // + '6'
+ (55, 2), // + '7'
+ (65, -3), // + 'A'
+ (74, -3), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 2), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // 'b' (98) +
+ (120, -1), // + 'x'
+ // 'c' (99) +
+ (120, -1), // + 'x'
+ // 'd' (100) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 'e' (101) +
+ (120, -1), // + 'x'
+ // 'f' (102) +
+ (32, -1), // + ' '
+ (34, 2), // + '"'
+ (39, 2), // + '''
+ (41, 1), // + ')'
+ (42, 2), // + '*'
+ (44, -2), // + ','
+ (45, -1), // + '-'
+ (46, -2), // + '.'
+ (93, 1), // + ']'
+ (94, 2), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (125, 1), // + '}'
+ // 'g' (103) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (106, 2), // + 'j'
+ (125, 1), // + '}'
+ // 'i' (105) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 'j' (106) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (106, 2), // + 'j'
+ (125, 1), // + '}'
+ // 'l' (108) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 'o' (111) +
+ (120, -1), // + 'x'
+ // 'p' (112) +
+ (120, -1), // + 'x'
+ // 'r' (114) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -3), // + ','
+ (45, -1), // + '-'
+ (46, -3), // + '.'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 't' (116) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (45, -1), // + '-'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (102, -1), // + 'f'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (116, -1), // + 't'
+ (125, 1), // + '}'
+ // 'v' (118) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -2), // + ','
+ (46, -2), // + '.'
+ (94, 1), // + '^'
+ // 'w' (119) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (94, 1), // + '^'
+ // 'x' (120) +
+ (32, -1), // + ' '
+ (45, -1), // + '-'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ // 'y' (121) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -2), // + ','
+ (46, -2), // + '.'
+ (94, 1), // + '^'
+ // 'z' (122) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (45, -1), // + '-'
+ (94, 1), // + '^'
+ // '{' (123) +
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (89, 1), // + 'Y'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 3), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+];
+
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_ExtraLight_46_kernings: KerningTable = KerningTable {
+ index: &Font_TTSatoshi_ExtraLight_46_kern_index,
+ pairs: &Font_TTSatoshi_ExtraLight_46_kern_pairs,
+};
+
/// FontInfo struct for normal ASCII usage
pub const Font_TTSatoshi_ExtraLight_46_info: FontInfo = FontInfo {
translation_blob_idx: 1,
@@ -403,5 +1248,6 @@ pub const Font_TTSatoshi_ExtraLight_46_info: FontInfo = FontInfo {
baseline: 10,
glyph_data: &Font_TTSatoshi_ExtraLight_46,
glyph_nonprintable: &Font_TTSatoshi_ExtraLight_46_glyph_nonprintable,
- kernings: None,
+ #[cfg(feature = "ui_font_kerning")]
+ kernings: Some(&Font_TTSatoshi_ExtraLight_46_kernings),
};
diff --git a/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_extralight_72.rs b/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_extralight_72.rs
index f91d62b4..f16d2f37 100644
--- a/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_extralight_72.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_extralight_72.rs
@@ -7,6 +7,8 @@
// - rest is packed 4-bit glyph data
use crate::ui::display::font::FontInfo;
+#[cfg(feature = "ui_font_kerning")]
+use crate::ui::display::font::KerningTable;
// NOTE: manually added Font_TTSatoshi_ExtraLight_72_nums and Font_TTSatoshi_ExtraLight_72_NumsOnly_info for the usage in Eckhart Bootloader, see https://github.com/trezor/trezor-firmware/issues/5522
@@ -397,6 +399,7 @@ const Font_TTSatoshi_ExtraLight_72: [&[u8]; 95] = [
&Font_TTSatoshi_ExtraLight_72_glyph_126,
];
+
/// Array of references for 'TTSatoshi_ExtraLight_72' numeral-only ASCII glyphs
const Font_TTSatoshi_ExtraLight_72_nums: [&[u8]; 95] = [
&Font_TTSatoshi_ExtraLight_72_glyph_32,
@@ -496,6 +499,1003 @@ const Font_TTSatoshi_ExtraLight_72_nums: [&[u8]; 95] = [
&Font_TTSatoshi_ExtraLight_72_glyph_nonprintable,
];
+/// Kerning index: (left_char, count), sorted by left_char.
+/// Start offset in kern_pairs is the sum of counts for all preceding entries.
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_ExtraLight_72_kern_index: [(u8, u8); 68] = [
+ (32, 16), // ' '
+ (34, 22), // '"'
+ (39, 22), // '''
+ (40, 14), // '('
+ (42, 22), // '*'
+ (44, 12), // ','
+ (45, 14), // '-'
+ (46, 12), // '.'
+ (47, 1), // '/'
+ (48, 2), // '0'
+ (49, 7), // '1'
+ (50, 3), // '2'
+ (51, 1), // '3'
+ (52, 6), // '4'
+ (53, 5), // '5'
+ (54, 8), // '6'
+ (55, 14), // '7'
+ (56, 1), // '8'
+ (57, 6), // '9'
+ (65, 19), // 'A'
+ (66, 9), // 'B'
+ (67, 14), // 'C'
+ (68, 7), // 'D'
+ (69, 6), // 'E'
+ (70, 37), // 'F'
+ (71, 9), // 'G'
+ (75, 7), // 'K'
+ (76, 29), // 'L'
+ (79, 7), // 'O'
+ (80, 22), // 'P'
+ (81, 7), // 'Q'
+ (82, 19), // 'R'
+ (83, 11), // 'S'
+ (84, 38), // 'T'
+ (85, 2), // 'U'
+ (86, 37), // 'V'
+ (87, 22), // 'W'
+ (88, 21), // 'X'
+ (89, 34), // 'Y'
+ (90, 19), // 'Z'
+ (91, 14), // '['
+ (92, 1), // '\'
+ (94, 22), // '^'
+ (97, 5), // 'a'
+ (98, 7), // 'b'
+ (99, 7), // 'c'
+ (100, 7), // 'd'
+ (101, 7), // 'e'
+ (102, 18), // 'f'
+ (103, 8), // 'g'
+ (104, 5), // 'h'
+ (105, 7), // 'i'
+ (106, 8), // 'j'
+ (107, 6), // 'k'
+ (108, 7), // 'l'
+ (109, 5), // 'm'
+ (110, 5), // 'n'
+ (111, 7), // 'o'
+ (112, 7), // 'p'
+ (114, 18), // 'r'
+ (115, 5), // 's'
+ (116, 23), // 't'
+ (118, 14), // 'v'
+ (119, 14), // 'w'
+ (120, 14), // 'x'
+ (121, 14), // 'y'
+ (122, 11), // 'z'
+ (123, 14), // '{'
+];
+
+/// Kerning pairs: (right_char, kern_value), grouped by left_char
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_ExtraLight_72_kern_pairs: [(u8, i8); 844] = [
+ // ' ' (32) +
+ (49, -1), // + '1'
+ (52, -1), // + '4'
+ (55, -1), // + '7'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -3), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ // '"' (34) +
+ (49, 3), // + '1'
+ (52, -3), // + '4'
+ (54, -1), // + '6'
+ (55, 3), // + '7'
+ (65, -4), // + 'A'
+ (74, -4), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 3), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (120, 1), // + 'x'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // ''' (39) +
+ (49, 3), // + '1'
+ (52, -3), // + '4'
+ (54, -1), // + '6'
+ (55, 3), // + '7'
+ (65, -4), // + 'A'
+ (74, -4), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 3), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (120, 1), // + 'x'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // '(' (40) +
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (89, 1), // + 'Y'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 4), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+ // '*' (42) +
+ (49, 3), // + '1'
+ (52, -3), // + '4'
+ (54, -1), // + '6'
+ (55, 3), // + '7'
+ (65, -4), // + 'A'
+ (74, -4), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 3), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (120, 1), // + 'x'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // ',' (44) +
+ (49, -4), // + '1'
+ (55, -1), // + '7'
+ (57, -3), // + '9'
+ (84, -6), // + 'T'
+ (86, -4), // + 'V'
+ (87, -3), // + 'W'
+ (89, -6), // + 'Y'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -3), // + 'v'
+ (119, -1), // + 'w'
+ (121, -3), // + 'y'
+ // '-' (45) +
+ (49, -3), // + '1'
+ (50, -1), // + '2'
+ (51, -1), // + '3'
+ (55, -3), // + '7'
+ (74, -3), // + 'J'
+ (84, -3), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (88, -1), // + 'X'
+ (89, -3), // + 'Y'
+ (90, -1), // + 'Z'
+ (102, -1), // + 'f'
+ (120, -1), // + 'x'
+ (122, -1), // + 'z'
+ // '.' (46) +
+ (49, -4), // + '1'
+ (55, -1), // + '7'
+ (57, -3), // + '9'
+ (84, -6), // + 'T'
+ (86, -4), // + 'V'
+ (87, -3), // + 'W'
+ (89, -6), // + 'Y'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -3), // + 'v'
+ (119, -1), // + 'w'
+ (121, -3), // + 'y'
+ // '/' (47) +
+ (47, -7), // + '/'
+ // '0' (48) +
+ (50, -1), // + '2'
+ (55, -1), // + '7'
+ // '1' (49) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // '2' (50) +
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (55, -1), // + '7'
+ // '3' (51) +
+ (55, -1), // + '7'
+ // '4' (52) +
+ (41, 1), // + ')'
+ (49, -1), // + '1'
+ (50, -1), // + '2'
+ (55, -1), // + '7'
+ (93, 1), // + ']'
+ (125, 1), // + '}'
+ // '5' (53) +
+ (48, -1), // + '0'
+ (49, -1), // + '1'
+ (50, -1), // + '2'
+ (55, -1), // + '7'
+ (57, -1), // + '9'
+ // '6' (54) +
+ (34, -3), // + '"'
+ (39, -3), // + '''
+ (42, -3), // + '*'
+ (49, -1), // + '1'
+ (50, -1), // + '2'
+ (55, -3), // + '7'
+ (57, -1), // + '9'
+ (94, -3), // + '^'
+ // '7' (55) +
+ (32, -1), // + ' '
+ (34, 3), // + '"'
+ (39, 3), // + '''
+ (41, 1), // + ')'
+ (42, 3), // + '*'
+ (44, -4), // + ','
+ (46, -4), // + '.'
+ (48, -1), // + '0'
+ (50, -1), // + '2'
+ (52, -3), // + '4'
+ (54, -3), // + '6'
+ (93, 1), // + ']'
+ (94, 3), // + '^'
+ (125, 1), // + '}'
+ // '8' (56) +
+ (55, -1), // + '7'
+ // '9' (57) +
+ (44, -3), // + ','
+ (46, -3), // + '.'
+ (50, -1), // + '2'
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (55, -1), // + '7'
+ // 'A' (65) +
+ (32, -1), // + ' '
+ (34, -4), // + '"'
+ (39, -4), // + '''
+ (42, -4), // + '*'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (84, -4), // + 'T'
+ (85, -1), // + 'U'
+ (86, -3), // + 'V'
+ (87, -1), // + 'W'
+ (89, -4), // + 'Y'
+ (94, -4), // + '^'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 'B' (66) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ // 'C' (67) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -2), // + 'X'
+ (89, -1), // + 'Y'
+ (97, -1), // + 'a'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ // 'D' (68) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -3), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ // 'E' (69) +
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 'F' (70) +
+ (32, -3), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -6), // + ','
+ (46, -6), // + '.'
+ (65, -3), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -4), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -2), // + 'a'
+ (99, -2), // + 'c'
+ (100, -2), // + 'd'
+ (101, -2), // + 'e'
+ (102, -1), // + 'f'
+ (103, -2), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -2), // + 'o'
+ (112, -1), // + 'p'
+ (113, -2), // + 'q'
+ (114, -1), // + 'r'
+ (115, -1), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ (125, 1), // + '}'
+ // 'G' (71) +
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (89, -1), // + 'Y'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 'K' (75) +
+ (32, -1), // + ' '
+ (45, -2), // + '-'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ // 'L' (76) +
+ (32, -1), // + ' '
+ (34, -4), // + '"'
+ (39, -4), // + '''
+ (42, -4), // + '*'
+ (45, -3), // + '-'
+ (67, -3), // + 'C'
+ (71, -3), // + 'G'
+ (79, -3), // + 'O'
+ (81, -3), // + 'Q'
+ (83, -1), // + 'S'
+ (84, -7), // + 'T'
+ (85, -1), // + 'U'
+ (86, -4), // + 'V'
+ (87, -3), // + 'W'
+ (89, -6), // + 'Y'
+ (94, -4), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (102, -1), // + 'f'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -3), // + 'v'
+ (119, -1), // + 'w'
+ (121, -3), // + 'y'
+ // 'O' (79) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -3), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ // 'P' (80) +
+ (32, -3), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -7), // + ','
+ (46, -7), // + '.'
+ (65, -4), // + 'A'
+ (74, -4), // + 'J'
+ (84, -1), // + 'T'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ (94, 1), // + '^'
+ (97, -3), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ // 'Q' (81) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -3), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ // 'R' (82) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (117, -1), // + 'u'
+ // 'S' (83) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 'T' (84) +
+ (32, -3), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -6), // + ','
+ (45, -3), // + '-'
+ (46, -6), // + '.'
+ (65, -4), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -4), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -6), // + 'a'
+ (99, -6), // + 'c'
+ (100, -6), // + 'd'
+ (101, -6), // + 'e'
+ (102, -1), // + 'f'
+ (103, -6), // + 'g'
+ (109, -4), // + 'm'
+ (110, -4), // + 'n'
+ (111, -6), // + 'o'
+ (112, -4), // + 'p'
+ (113, -6), // + 'q'
+ (114, -4), // + 'r'
+ (115, -4), // + 's'
+ (116, -1), // + 't'
+ (117, -4), // + 'u'
+ (118, -4), // + 'v'
+ (119, -4), // + 'w'
+ (120, -4), // + 'x'
+ (121, -4), // + 'y'
+ (122, -4), // + 'z'
+ (125, 1), // + '}'
+ // 'U' (85) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ // 'V' (86) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -4), // + ','
+ (45, -1), // + '-'
+ (46, -4), // + '.'
+ (65, -3), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -4), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -3), // + 'a'
+ (99, -3), // + 'c'
+ (100, -3), // + 'd'
+ (101, -3), // + 'e'
+ (103, -3), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -3), // + 'o'
+ (112, -1), // + 'p'
+ (113, -3), // + 'q'
+ (114, -1), // + 'r'
+ (115, -3), // + 's'
+ (116, -1), // + 't'
+ (117, -3), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ (125, 1), // + '}'
+ // 'W' (87) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -3), // + ','
+ (45, -1), // + '-'
+ (46, -3), // + '.'
+ (65, -1), // + 'A'
+ (74, -3), // + 'J'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ (125, 1), // + '}'
+ // 'X' (88) +
+ (32, -1), // + ' '
+ (45, -1), // + '-'
+ (67, -3), // + 'C'
+ (71, -3), // + 'G'
+ (79, -3), // + 'O'
+ (81, -3), // + 'Q'
+ (83, -1), // + 'S'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (102, -1), // + 'f'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -3), // + 'v'
+ (119, -3), // + 'w'
+ (121, -3), // + 'y'
+ // 'Y' (89) +
+ (32, -1), // + ' '
+ (41, 1), // + ')'
+ (44, -6), // + ','
+ (45, -3), // + '-'
+ (46, -6), // + '.'
+ (65, -4), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -6), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (97, -4), // + 'a'
+ (99, -4), // + 'c'
+ (100, -4), // + 'd'
+ (101, -4), // + 'e'
+ (102, -1), // + 'f'
+ (103, -4), // + 'g'
+ (109, -3), // + 'm'
+ (110, -3), // + 'n'
+ (111, -4), // + 'o'
+ (112, -3), // + 'p'
+ (113, -4), // + 'q'
+ (114, -3), // + 'r'
+ (115, -4), // + 's'
+ (116, -1), // + 't'
+ (117, -3), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -3), // + 'z'
+ (125, 1), // + '}'
+ // 'Z' (90) +
+ (45, -1), // + '-'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // '[' (91) +
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (89, 1), // + 'Y'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 4), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+ // '\' (92) +
+ (92, -7), // + '\'
+ // '^' (94) +
+ (49, 3), // + '1'
+ (52, -3), // + '4'
+ (54, -1), // + '6'
+ (55, 3), // + '7'
+ (65, -4), // + 'A'
+ (74, -4), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 3), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (120, 1), // + 'x'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // 'a' (97) +
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 'b' (98) +
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ // 'c' (99) +
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ // 'd' (100) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 'e' (101) +
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ // 'f' (102) +
+ (32, -1), // + ' '
+ (34, 3), // + '"'
+ (39, 3), // + '''
+ (41, 1), // + ')'
+ (42, 3), // + '*'
+ (44, -3), // + ','
+ (45, -1), // + '-'
+ (46, -3), // + '.'
+ (93, 1), // + ']'
+ (94, 3), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (125, 1), // + '}'
+ // 'g' (103) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (106, 3), // + 'j'
+ (125, 1), // + '}'
+ // 'h' (104) +
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 'i' (105) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 'j' (106) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (106, 3), // + 'j'
+ (125, 1), // + '}'
+ // 'k' (107) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (45, -1), // + '-'
+ (94, 1), // + '^'
+ // 'l' (108) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 'm' (109) +
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 'n' (110) +
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 'o' (111) +
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ // 'p' (112) +
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ // 'r' (114) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -4), // + ','
+ (45, -1), // + '-'
+ (46, -4), // + '.'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (125, 1), // + '}'
+ // 's' (115) +
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 't' (116) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (45, -1), // + '-'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (102, -1), // + 'f'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ (125, 1), // + '}'
+ // 'v' (118) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -3), // + ','
+ (46, -3), // + '.'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ // 'w' (119) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ // 'x' (120) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (45, -1), // + '-'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (117, -1), // + 'u'
+ // 'y' (121) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -3), // + ','
+ (46, -3), // + '.'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ // 'z' (122) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (45, -1), // + '-'
+ (94, 1), // + '^'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ // '{' (123) +
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (89, 1), // + 'Y'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 4), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+];
+
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_ExtraLight_72_kernings: KerningTable = KerningTable {
+ index: &Font_TTSatoshi_ExtraLight_72_kern_index,
+ pairs: &Font_TTSatoshi_ExtraLight_72_kern_pairs,
+};
+
/// FontInfo struct for normal ASCII usage
pub const Font_TTSatoshi_ExtraLight_72_info: FontInfo = FontInfo {
translation_blob_idx: 1,
@@ -504,7 +1504,8 @@ pub const Font_TTSatoshi_ExtraLight_72_info: FontInfo = FontInfo {
baseline: 15,
glyph_data: &Font_TTSatoshi_ExtraLight_72,
glyph_nonprintable: &Font_TTSatoshi_ExtraLight_72_glyph_nonprintable,
- kernings: None,
+ #[cfg(feature = "ui_font_kerning")]
+ kernings: Some(&Font_TTSatoshi_ExtraLight_72_kernings),
};
/// FontInfo struct for numeral-only ASCII usage
@@ -515,5 +1516,6 @@ pub const Font_TTSatoshi_ExtraLight_72_NumsOnly_info: FontInfo = FontInfo {
baseline: 15,
glyph_data: &Font_TTSatoshi_ExtraLight_72_nums,
glyph_nonprintable: &Font_TTSatoshi_ExtraLight_72_glyph_nonprintable,
- kernings: None,
+ #[cfg(feature = "ui_font_kerning")]
+ kernings: Some(&Font_TTSatoshi_ExtraLight_72_kernings),
};
diff --git a/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_medium_26.rs b/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_medium_26.rs
index 064538bf..adbeacb0 100644
--- a/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_medium_26.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_medium_26.rs
@@ -7,6 +7,8 @@
// - rest is packed 4-bit glyph data
use crate::ui::display::font::FontInfo;
+#[cfg(feature = "ui_font_kerning")]
+use crate::ui::display::font::KerningTable;
/// ' ' (ASCII 32)
const Font_TTSatoshi_Medium_26_glyph_32: [u8; 5] = [ 0, 0, 6, 0, 0 ];
@@ -395,6 +397,844 @@ const Font_TTSatoshi_Medium_26: [&[u8]; 95] = [
&Font_TTSatoshi_Medium_26_glyph_126,
];
+/// Kerning index: (left_char, count), sorted by left_char.
+/// Start offset in kern_pairs is the sum of counts for all preceding entries.
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_Medium_26_kern_index: [(u8, u8); 61] = [
+ (32, 16), // ' '
+ (34, 21), // '"'
+ (39, 21), // '''
+ (40, 14), // '('
+ (42, 21), // '*'
+ (44, 12), // ','
+ (45, 14), // '-'
+ (46, 12), // '.'
+ (47, 1), // '/'
+ (48, 2), // '0'
+ (49, 7), // '1'
+ (50, 3), // '2'
+ (51, 1), // '3'
+ (52, 6), // '4'
+ (53, 5), // '5'
+ (54, 8), // '6'
+ (55, 14), // '7'
+ (56, 1), // '8'
+ (57, 6), // '9'
+ (65, 18), // 'A'
+ (66, 7), // 'B'
+ (67, 6), // 'C'
+ (68, 7), // 'D'
+ (70, 37), // 'F'
+ (71, 4), // 'G'
+ (75, 1), // 'K'
+ (76, 27), // 'L'
+ (79, 7), // 'O'
+ (80, 22), // 'P'
+ (81, 7), // 'Q'
+ (82, 18), // 'R'
+ (83, 9), // 'S'
+ (84, 38), // 'T'
+ (85, 2), // 'U'
+ (86, 37), // 'V'
+ (87, 22), // 'W'
+ (88, 21), // 'X'
+ (89, 34), // 'Y'
+ (90, 19), // 'Z'
+ (91, 14), // '['
+ (92, 1), // '\'
+ (94, 21), // '^'
+ (98, 1), // 'b'
+ (99, 1), // 'c'
+ (100, 7), // 'd'
+ (101, 1), // 'e'
+ (102, 18), // 'f'
+ (103, 8), // 'g'
+ (105, 7), // 'i'
+ (106, 8), // 'j'
+ (108, 7), // 'l'
+ (111, 1), // 'o'
+ (112, 1), // 'p'
+ (114, 11), // 'r'
+ (116, 16), // 't'
+ (118, 7), // 'v'
+ (119, 7), // 'w'
+ (120, 8), // 'x'
+ (121, 7), // 'y'
+ (122, 5), // 'z'
+ (123, 14), // '{'
+];
+
+/// Kerning pairs: (right_char, kern_value), grouped by left_char
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_Medium_26_kern_pairs: [(u8, i8); 699] = [
+ // ' ' (32) +
+ (49, -1), // + '1'
+ (52, -1), // + '4'
+ (55, -1), // + '7'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ // '"' (34) +
+ (49, 1), // + '1'
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (55, 1), // + '7'
+ (65, -2), // + 'A'
+ (74, -2), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // ''' (39) +
+ (49, 1), // + '1'
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (55, 1), // + '7'
+ (65, -2), // + 'A'
+ (74, -2), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // '(' (40) +
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (89, 1), // + 'Y'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 2), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+ // '*' (42) +
+ (49, 1), // + '1'
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (55, 1), // + '7'
+ (65, -2), // + 'A'
+ (74, -2), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // ',' (44) +
+ (49, -2), // + '1'
+ (55, -1), // + '7'
+ (57, -1), // + '9'
+ (84, -2), // + 'T'
+ (86, -2), // + 'V'
+ (87, -1), // + 'W'
+ (89, -2), // + 'Y'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // '-' (45) +
+ (49, -1), // + '1'
+ (50, -1), // + '2'
+ (51, -1), // + '3'
+ (55, -1), // + '7'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ (102, -1), // + 'f'
+ (120, -1), // + 'x'
+ (122, -1), // + 'z'
+ // '.' (46) +
+ (49, -2), // + '1'
+ (55, -1), // + '7'
+ (57, -1), // + '9'
+ (84, -2), // + 'T'
+ (86, -2), // + 'V'
+ (87, -1), // + 'W'
+ (89, -2), // + 'Y'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // '/' (47) +
+ (47, -3), // + '/'
+ // '0' (48) +
+ (50, -1), // + '2'
+ (55, -1), // + '7'
+ // '1' (49) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // '2' (50) +
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (55, -1), // + '7'
+ // '3' (51) +
+ (55, -1), // + '7'
+ // '4' (52) +
+ (41, 1), // + ')'
+ (49, -1), // + '1'
+ (50, -1), // + '2'
+ (55, -1), // + '7'
+ (93, 1), // + ']'
+ (125, 1), // + '}'
+ // '5' (53) +
+ (48, -1), // + '0'
+ (49, -1), // + '1'
+ (50, -1), // + '2'
+ (55, -1), // + '7'
+ (57, -1), // + '9'
+ // '6' (54) +
+ (34, -1), // + '"'
+ (39, -1), // + '''
+ (42, -1), // + '*'
+ (49, -1), // + '1'
+ (50, -1), // + '2'
+ (55, -1), // + '7'
+ (57, -1), // + '9'
+ (94, -1), // + '^'
+ // '7' (55) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -2), // + ','
+ (46, -2), // + '.'
+ (48, -1), // + '0'
+ (50, -1), // + '2'
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // '8' (56) +
+ (55, -1), // + '7'
+ // '9' (57) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (50, -1), // + '2'
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (55, -1), // + '7'
+ // 'A' (65) +
+ (32, -1), // + ' '
+ (34, -2), // + '"'
+ (39, -2), // + '''
+ (42, -2), // + '*'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (84, -2), // + 'T'
+ (85, -1), // + 'U'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (89, -2), // + 'Y'
+ (94, -2), // + '^'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (121, -1), // + 'y'
+ // 'B' (66) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ // 'C' (67) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ // 'D' (68) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ // 'F' (70) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -2), // + ','
+ (46, -2), // + '.'
+ (65, -1), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -2), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (102, -1), // + 'f'
+ (103, -1), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -1), // + 'o'
+ (112, -1), // + 'p'
+ (113, -1), // + 'q'
+ (114, -1), // + 'r'
+ (115, -1), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ (125, 1), // + '}'
+ // 'G' (71) +
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (89, -1), // + 'Y'
+ // 'K' (75) +
+ (45, -1), // + '-'
+ // 'L' (76) +
+ (32, -1), // + ' '
+ (34, -2), // + '"'
+ (39, -2), // + '''
+ (42, -2), // + '*'
+ (45, -1), // + '-'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (84, -3), // + 'T'
+ (85, -1), // + 'U'
+ (86, -2), // + 'V'
+ (87, -1), // + 'W'
+ (89, -2), // + 'Y'
+ (94, -2), // + '^'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 'O' (79) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ // 'P' (80) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -3), // + ','
+ (46, -3), // + '.'
+ (65, -2), // + 'A'
+ (74, -2), // + 'J'
+ (84, -1), // + 'T'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ // 'Q' (81) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ // 'R' (82) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (117, -1), // + 'u'
+ // 'S' (83) +
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 'T' (84) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -2), // + ','
+ (45, -1), // + '-'
+ (46, -2), // + '.'
+ (65, -2), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -2), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -2), // + 'a'
+ (99, -2), // + 'c'
+ (100, -2), // + 'd'
+ (101, -2), // + 'e'
+ (102, -1), // + 'f'
+ (103, -2), // + 'g'
+ (109, -2), // + 'm'
+ (110, -2), // + 'n'
+ (111, -2), // + 'o'
+ (112, -2), // + 'p'
+ (113, -2), // + 'q'
+ (114, -2), // + 'r'
+ (115, -2), // + 's'
+ (116, -1), // + 't'
+ (117, -2), // + 'u'
+ (118, -2), // + 'v'
+ (119, -2), // + 'w'
+ (120, -2), // + 'x'
+ (121, -2), // + 'y'
+ (122, -2), // + 'z'
+ (125, 1), // + '}'
+ // 'U' (85) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ // 'V' (86) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -2), // + ','
+ (45, -1), // + '-'
+ (46, -2), // + '.'
+ (65, -1), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -2), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -1), // + 'o'
+ (112, -1), // + 'p'
+ (113, -1), // + 'q'
+ (114, -1), // + 'r'
+ (115, -1), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ (125, 1), // + '}'
+ // 'W' (87) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -1), // + ','
+ (45, -1), // + '-'
+ (46, -1), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ (125, 1), // + '}'
+ // 'X' (88) +
+ (32, -1), // + ' '
+ (45, -1), // + '-'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (102, -1), // + 'f'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 'Y' (89) +
+ (32, -1), // + ' '
+ (41, 1), // + ')'
+ (44, -2), // + ','
+ (45, -1), // + '-'
+ (46, -2), // + '.'
+ (65, -2), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -2), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (97, -2), // + 'a'
+ (99, -2), // + 'c'
+ (100, -2), // + 'd'
+ (101, -2), // + 'e'
+ (102, -1), // + 'f'
+ (103, -2), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -2), // + 'o'
+ (112, -1), // + 'p'
+ (113, -2), // + 'q'
+ (114, -1), // + 'r'
+ (115, -2), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ (125, 1), // + '}'
+ // 'Z' (90) +
+ (45, -1), // + '-'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // '[' (91) +
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (89, 1), // + 'Y'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 2), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+ // '\' (92) +
+ (92, -3), // + '\'
+ // '^' (94) +
+ (49, 1), // + '1'
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (55, 1), // + '7'
+ (65, -2), // + 'A'
+ (74, -2), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // 'b' (98) +
+ (120, -1), // + 'x'
+ // 'c' (99) +
+ (120, -1), // + 'x'
+ // 'd' (100) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 'e' (101) +
+ (120, -1), // + 'x'
+ // 'f' (102) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -1), // + ','
+ (45, -1), // + '-'
+ (46, -1), // + '.'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (125, 1), // + '}'
+ // 'g' (103) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (106, 1), // + 'j'
+ (125, 1), // + '}'
+ // 'i' (105) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 'j' (106) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (106, 1), // + 'j'
+ (125, 1), // + '}'
+ // 'l' (108) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 'o' (111) +
+ (120, -1), // + 'x'
+ // 'p' (112) +
+ (120, -1), // + 'x'
+ // 'r' (114) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -2), // + ','
+ (45, -1), // + '-'
+ (46, -2), // + '.'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 't' (116) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (45, -1), // + '-'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (125, 1), // + '}'
+ // 'v' (118) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (94, 1), // + '^'
+ // 'w' (119) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (94, 1), // + '^'
+ // 'x' (120) +
+ (32, -1), // + ' '
+ (45, -1), // + '-'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ // 'y' (121) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (94, 1), // + '^'
+ // 'z' (122) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (45, -1), // + '-'
+ (94, 1), // + '^'
+ // '{' (123) +
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (89, 1), // + 'Y'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 2), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+];
+
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_Medium_26_kernings: KerningTable = KerningTable {
+ index: &Font_TTSatoshi_Medium_26_kern_index,
+ pairs: &Font_TTSatoshi_Medium_26_kern_pairs,
+};
+
/// FontInfo struct for normal ASCII usage
pub const Font_TTSatoshi_Medium_26_info: FontInfo = FontInfo {
translation_blob_idx: 3,
@@ -403,5 +1243,6 @@ pub const Font_TTSatoshi_Medium_26_info: FontInfo = FontInfo {
baseline: 6,
glyph_data: &Font_TTSatoshi_Medium_26,
glyph_nonprintable: &Font_TTSatoshi_Medium_26_glyph_nonprintable,
- kernings: None,
+ #[cfg(feature = "ui_font_kerning")]
+ kernings: Some(&Font_TTSatoshi_Medium_26_kernings),
};
diff --git a/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_regular_22.rs b/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_regular_22.rs
index d2027c46..b92b0abf 100644
--- a/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_regular_22.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_regular_22.rs
@@ -7,6 +7,8 @@
// - rest is packed 4-bit glyph data
use crate::ui::display::font::FontInfo;
+#[cfg(feature = "ui_font_kerning")]
+use crate::ui::display::font::KerningTable;
/// ' ' (ASCII 32)
const Font_TTSatoshi_Regular_22_glyph_32: [u8; 5] = [ 0, 0, 5, 0, 0 ];
@@ -395,6 +397,286 @@ const Font_TTSatoshi_Regular_22: [&[u8]; 95] = [
&Font_TTSatoshi_Regular_22_glyph_126,
];
+/// Kerning index: (left_char, count), sorted by left_char.
+/// Start offset in kern_pairs is the sum of counts for all preceding entries.
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_Regular_22_kern_index: [(u8, u8); 36] = [
+ (32, 1), // ' '
+ (34, 6), // '"'
+ (39, 6), // '''
+ (40, 1), // '('
+ (42, 6), // '*'
+ (44, 8), // ','
+ (45, 5), // '-'
+ (46, 8), // '.'
+ (47, 1), // '/'
+ (54, 5), // '6'
+ (55, 8), // '7'
+ (57, 2), // '9'
+ (65, 7), // 'A'
+ (67, 1), // 'C'
+ (68, 1), // 'D'
+ (70, 12), // 'F'
+ (75, 1), // 'K'
+ (76, 15), // 'L'
+ (79, 1), // 'O'
+ (80, 6), // 'P'
+ (81, 1), // 'Q'
+ (84, 24), // 'T'
+ (86, 13), // 'V'
+ (87, 3), // 'W'
+ (88, 7), // 'X'
+ (89, 19), // 'Y'
+ (91, 1), // '['
+ (92, 1), // '\'
+ (94, 6), // '^'
+ (102, 6), // 'f'
+ (103, 1), // 'g'
+ (106, 1), // 'j'
+ (114, 2), // 'r'
+ (118, 2), // 'v'
+ (121, 2), // 'y'
+ (123, 1), // '{'
+];
+
+/// Kerning pairs: (right_char, kern_value), grouped by left_char
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_Regular_22_kern_pairs: [(u8, i8); 191] = [
+ // ' ' (32) +
+ (84, -1), // + 'T'
+ // '"' (34) +
+ (49, 1), // + '1'
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (116, 1), // + 't'
+ // ''' (39) +
+ (49, 1), // + '1'
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (116, 1), // + 't'
+ // '(' (40) +
+ (106, 1), // + 'j'
+ // '*' (42) +
+ (49, 1), // + '1'
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (116, 1), // + 't'
+ // ',' (44) +
+ (49, -1), // + '1'
+ (57, -1), // + '9'
+ (84, -2), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (89, -2), // + 'Y'
+ (118, -1), // + 'v'
+ (121, -1), // + 'y'
+ // '-' (45) +
+ (49, -1), // + '1'
+ (55, -1), // + '7'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (89, -1), // + 'Y'
+ // '.' (46) +
+ (49, -1), // + '1'
+ (57, -1), // + '9'
+ (84, -2), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (89, -2), // + 'Y'
+ (118, -1), // + 'v'
+ (121, -1), // + 'y'
+ // '/' (47) +
+ (47, -2), // + '/'
+ // '6' (54) +
+ (34, -1), // + '"'
+ (39, -1), // + '''
+ (42, -1), // + '*'
+ (55, -1), // + '7'
+ (94, -1), // + '^'
+ // '7' (55) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (94, 1), // + '^'
+ // '9' (57) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ // 'A' (65) +
+ (34, -1), // + '"'
+ (39, -1), // + '''
+ (42, -1), // + '*'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (89, -1), // + 'Y'
+ (94, -1), // + '^'
+ // 'C' (67) +
+ (88, -1), // + 'X'
+ // 'D' (68) +
+ (88, -1), // + 'X'
+ // 'F' (70) +
+ (32, -1), // + ' '
+ (44, -2), // + ','
+ (46, -2), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ // 'K' (75) +
+ (45, -1), // + '-'
+ // 'L' (76) +
+ (34, -1), // + '"'
+ (39, -1), // + '''
+ (42, -1), // + '*'
+ (45, -1), // + '-'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (84, -2), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (89, -2), // + 'Y'
+ (94, -1), // + '^'
+ (118, -1), // + 'v'
+ (121, -1), // + 'y'
+ // 'O' (79) +
+ (88, -1), // + 'X'
+ // 'P' (80) +
+ (32, -1), // + ' '
+ (44, -2), // + ','
+ (46, -2), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (97, -1), // + 'a'
+ // 'Q' (81) +
+ (88, -1), // + 'X'
+ // 'T' (84) +
+ (32, -1), // + ' '
+ (44, -2), // + ','
+ (45, -1), // + '-'
+ (46, -2), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (97, -2), // + 'a'
+ (99, -2), // + 'c'
+ (100, -2), // + 'd'
+ (101, -2), // + 'e'
+ (103, -2), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -2), // + 'o'
+ (112, -1), // + 'p'
+ (113, -2), // + 'q'
+ (114, -1), // + 'r'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ // 'V' (86) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ // 'W' (87) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (74, -1), // + 'J'
+ // 'X' (88) +
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 'Y' (89) +
+ (44, -2), // + ','
+ (45, -1), // + '-'
+ (46, -2), // + '.'
+ (65, -1), // + 'A'
+ (74, -2), // + 'J'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -1), // + 'o'
+ (112, -1), // + 'p'
+ (113, -1), // + 'q'
+ (114, -1), // + 'r'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ (122, -1), // + 'z'
+ // '[' (91) +
+ (106, 1), // + 'j'
+ // '\' (92) +
+ (92, -2), // + '\'
+ // '^' (94) +
+ (49, 1), // + '1'
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (116, 1), // + 't'
+ // 'f' (102) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (94, 1), // + '^'
+ // 'g' (103) +
+ (106, 1), // + 'j'
+ // 'j' (106) +
+ (106, 1), // + 'j'
+ // 'r' (114) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ // 'v' (118) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ // 'y' (121) +
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ // '{' (123) +
+ (106, 1), // + 'j'
+];
+
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_Regular_22_kernings: KerningTable = KerningTable {
+ index: &Font_TTSatoshi_Regular_22_kern_index,
+ pairs: &Font_TTSatoshi_Regular_22_kern_pairs,
+};
+
/// FontInfo struct for normal ASCII usage
pub const Font_TTSatoshi_Regular_22_info: FontInfo = FontInfo {
translation_blob_idx: 4,
@@ -403,5 +685,6 @@ pub const Font_TTSatoshi_Regular_22_info: FontInfo = FontInfo {
baseline: 5,
glyph_data: &Font_TTSatoshi_Regular_22,
glyph_nonprintable: &Font_TTSatoshi_Regular_22_glyph_nonprintable,
- kernings: None,
+ #[cfg(feature = "ui_font_kerning")]
+ kernings: Some(&Font_TTSatoshi_Regular_22_kernings),
};
diff --git a/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_regular_38.rs b/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_regular_38.rs
index 404207d3..7dcc17ae 100644
--- a/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_regular_38.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/fonts/font_ttsatoshi_regular_38.rs
@@ -7,6 +7,8 @@
// - rest is packed 4-bit glyph data
use crate::ui::display::font::FontInfo;
+#[cfg(feature = "ui_font_kerning")]
+use crate::ui::display::font::KerningTable;
/// ' ' (ASCII 32)
const Font_TTSatoshi_Regular_38_glyph_32: [u8; 5] = [ 0, 0, 9, 0, 0 ];
@@ -395,6 +397,849 @@ const Font_TTSatoshi_Regular_38: [&[u8]; 95] = [
&Font_TTSatoshi_Regular_38_glyph_126,
];
+/// Kerning index: (left_char, count), sorted by left_char.
+/// Start offset in kern_pairs is the sum of counts for all preceding entries.
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_Regular_38_kern_index: [(u8, u8); 61] = [
+ (32, 16), // ' '
+ (34, 21), // '"'
+ (39, 21), // '''
+ (40, 14), // '('
+ (42, 21), // '*'
+ (44, 12), // ','
+ (45, 14), // '-'
+ (46, 12), // '.'
+ (47, 1), // '/'
+ (48, 2), // '0'
+ (49, 7), // '1'
+ (50, 3), // '2'
+ (51, 1), // '3'
+ (52, 6), // '4'
+ (53, 5), // '5'
+ (54, 8), // '6'
+ (55, 14), // '7'
+ (56, 1), // '8'
+ (57, 6), // '9'
+ (65, 18), // 'A'
+ (66, 7), // 'B'
+ (67, 7), // 'C'
+ (68, 7), // 'D'
+ (70, 37), // 'F'
+ (71, 4), // 'G'
+ (75, 2), // 'K'
+ (76, 27), // 'L'
+ (79, 7), // 'O'
+ (80, 22), // 'P'
+ (81, 7), // 'Q'
+ (82, 19), // 'R'
+ (83, 9), // 'S'
+ (84, 38), // 'T'
+ (85, 2), // 'U'
+ (86, 37), // 'V'
+ (87, 22), // 'W'
+ (88, 21), // 'X'
+ (89, 34), // 'Y'
+ (90, 19), // 'Z'
+ (91, 14), // '['
+ (92, 1), // '\'
+ (94, 21), // '^'
+ (98, 1), // 'b'
+ (99, 1), // 'c'
+ (100, 7), // 'd'
+ (101, 1), // 'e'
+ (102, 18), // 'f'
+ (103, 8), // 'g'
+ (105, 7), // 'i'
+ (106, 8), // 'j'
+ (108, 7), // 'l'
+ (111, 1), // 'o'
+ (112, 1), // 'p'
+ (114, 11), // 'r'
+ (116, 18), // 't'
+ (118, 7), // 'v'
+ (119, 7), // 'w'
+ (120, 8), // 'x'
+ (121, 7), // 'y'
+ (122, 5), // 'z'
+ (123, 14), // '{'
+];
+
+/// Kerning pairs: (right_char, kern_value), grouped by left_char
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_Regular_38_kern_pairs: [(u8, i8); 704] = [
+ // ' ' (32) +
+ (49, -1), // + '1'
+ (52, -1), // + '4'
+ (55, -1), // + '7'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -2), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ // '"' (34) +
+ (49, 2), // + '1'
+ (52, -2), // + '4'
+ (54, -1), // + '6'
+ (55, 2), // + '7'
+ (65, -2), // + 'A'
+ (74, -2), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 2), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // ''' (39) +
+ (49, 2), // + '1'
+ (52, -2), // + '4'
+ (54, -1), // + '6'
+ (55, 2), // + '7'
+ (65, -2), // + 'A'
+ (74, -2), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 2), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // '(' (40) +
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (89, 1), // + 'Y'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 2), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+ // '*' (42) +
+ (49, 2), // + '1'
+ (52, -2), // + '4'
+ (54, -1), // + '6'
+ (55, 2), // + '7'
+ (65, -2), // + 'A'
+ (74, -2), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 2), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // ',' (44) +
+ (49, -2), // + '1'
+ (55, -1), // + '7'
+ (57, -2), // + '9'
+ (84, -3), // + 'T'
+ (86, -2), // + 'V'
+ (87, -2), // + 'W'
+ (89, -3), // + 'Y'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -2), // + 'v'
+ (119, -1), // + 'w'
+ (121, -2), // + 'y'
+ // '-' (45) +
+ (49, -2), // + '1'
+ (50, -1), // + '2'
+ (51, -1), // + '3'
+ (55, -2), // + '7'
+ (74, -2), // + 'J'
+ (84, -2), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (88, -1), // + 'X'
+ (89, -2), // + 'Y'
+ (90, -1), // + 'Z'
+ (102, -1), // + 'f'
+ (120, -1), // + 'x'
+ (122, -1), // + 'z'
+ // '.' (46) +
+ (49, -2), // + '1'
+ (55, -1), // + '7'
+ (57, -2), // + '9'
+ (84, -3), // + 'T'
+ (86, -2), // + 'V'
+ (87, -2), // + 'W'
+ (89, -3), // + 'Y'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -2), // + 'v'
+ (119, -1), // + 'w'
+ (121, -2), // + 'y'
+ // '/' (47) +
+ (47, -4), // + '/'
+ // '0' (48) +
+ (50, -1), // + '2'
+ (55, -1), // + '7'
+ // '1' (49) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // '2' (50) +
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (55, -1), // + '7'
+ // '3' (51) +
+ (55, -1), // + '7'
+ // '4' (52) +
+ (41, 1), // + ')'
+ (49, -1), // + '1'
+ (50, -1), // + '2'
+ (55, -1), // + '7'
+ (93, 1), // + ']'
+ (125, 1), // + '}'
+ // '5' (53) +
+ (48, -1), // + '0'
+ (49, -1), // + '1'
+ (50, -1), // + '2'
+ (55, -1), // + '7'
+ (57, -1), // + '9'
+ // '6' (54) +
+ (34, -2), // + '"'
+ (39, -2), // + '''
+ (42, -2), // + '*'
+ (49, -1), // + '1'
+ (50, -1), // + '2'
+ (55, -2), // + '7'
+ (57, -1), // + '9'
+ (94, -2), // + '^'
+ // '7' (55) +
+ (32, -1), // + ' '
+ (34, 2), // + '"'
+ (39, 2), // + '''
+ (41, 1), // + ')'
+ (42, 2), // + '*'
+ (44, -2), // + ','
+ (46, -2), // + '.'
+ (48, -1), // + '0'
+ (50, -1), // + '2'
+ (52, -2), // + '4'
+ (54, -2), // + '6'
+ (93, 1), // + ']'
+ (94, 2), // + '^'
+ (125, 1), // + '}'
+ // '8' (56) +
+ (55, -1), // + '7'
+ // '9' (57) +
+ (44, -2), // + ','
+ (46, -2), // + '.'
+ (50, -1), // + '2'
+ (52, -1), // + '4'
+ (54, -1), // + '6'
+ (55, -1), // + '7'
+ // 'A' (65) +
+ (32, -1), // + ' '
+ (34, -2), // + '"'
+ (39, -2), // + '''
+ (42, -2), // + '*'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (84, -2), // + 'T'
+ (85, -1), // + 'U'
+ (86, -2), // + 'V'
+ (87, -1), // + 'W'
+ (89, -2), // + 'Y'
+ (94, -2), // + '^'
+ (102, -1), // + 'f'
+ (116, -1), // + 't'
+ (118, -1), // + 'v'
+ (121, -1), // + 'y'
+ // 'B' (66) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (87, -1), // + 'W'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ // 'C' (67) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (97, -1), // + 'a'
+ // 'D' (68) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -2), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ // 'F' (70) +
+ (32, -2), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -3), // + ','
+ (46, -3), // + '.'
+ (65, -2), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -2), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (102, -1), // + 'f'
+ (103, -1), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -1), // + 'o'
+ (112, -1), // + 'p'
+ (113, -1), // + 'q'
+ (114, -1), // + 'r'
+ (115, -1), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ (125, 1), // + '}'
+ // 'G' (71) +
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (89, -1), // + 'Y'
+ // 'K' (75) +
+ (32, -1), // + ' '
+ (45, -1), // + '-'
+ // 'L' (76) +
+ (32, -1), // + ' '
+ (34, -2), // + '"'
+ (39, -2), // + '''
+ (42, -2), // + '*'
+ (45, -2), // + '-'
+ (67, -2), // + 'C'
+ (71, -2), // + 'G'
+ (79, -2), // + 'O'
+ (81, -2), // + 'Q'
+ (83, -1), // + 'S'
+ (84, -4), // + 'T'
+ (85, -1), // + 'U'
+ (86, -2), // + 'V'
+ (87, -2), // + 'W'
+ (89, -3), // + 'Y'
+ (94, -2), // + '^'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -2), // + 'v'
+ (119, -1), // + 'w'
+ (121, -2), // + 'y'
+ // 'O' (79) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -2), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ // 'P' (80) +
+ (32, -2), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -4), // + ','
+ (46, -4), // + '.'
+ (65, -2), // + 'A'
+ (74, -2), // + 'J'
+ (84, -1), // + 'T'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ (94, 1), // + '^'
+ (97, -2), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ // 'Q' (81) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -2), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ // 'R' (82) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (117, -1), // + 'u'
+ // 'S' (83) +
+ (74, -1), // + 'J'
+ (84, -1), // + 'T'
+ (86, -1), // + 'V'
+ (88, -1), // + 'X'
+ (89, -1), // + 'Y'
+ (90, -1), // + 'Z'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // 'T' (84) +
+ (32, -2), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -3), // + ','
+ (45, -2), // + '-'
+ (46, -3), // + '.'
+ (65, -2), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -2), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -3), // + 'a'
+ (99, -3), // + 'c'
+ (100, -3), // + 'd'
+ (101, -3), // + 'e'
+ (102, -1), // + 'f'
+ (103, -3), // + 'g'
+ (109, -2), // + 'm'
+ (110, -2), // + 'n'
+ (111, -3), // + 'o'
+ (112, -2), // + 'p'
+ (113, -3), // + 'q'
+ (114, -2), // + 'r'
+ (115, -2), // + 's'
+ (116, -1), // + 't'
+ (117, -2), // + 'u'
+ (118, -2), // + 'v'
+ (119, -2), // + 'w'
+ (120, -2), // + 'x'
+ (121, -2), // + 'y'
+ (122, -2), // + 'z'
+ (125, 1), // + '}'
+ // 'U' (85) +
+ (65, -1), // + 'A'
+ (74, -1), // + 'J'
+ // 'V' (86) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -2), // + ','
+ (45, -1), // + '-'
+ (46, -2), // + '.'
+ (65, -2), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -2), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -2), // + 'a'
+ (99, -2), // + 'c'
+ (100, -2), // + 'd'
+ (101, -2), // + 'e'
+ (103, -2), // + 'g'
+ (109, -1), // + 'm'
+ (110, -1), // + 'n'
+ (111, -2), // + 'o'
+ (112, -1), // + 'p'
+ (113, -2), // + 'q'
+ (114, -1), // + 'r'
+ (115, -2), // + 's'
+ (116, -1), // + 't'
+ (117, -2), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -1), // + 'z'
+ (125, 1), // + '}'
+ // 'W' (87) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -2), // + ','
+ (45, -1), // + '-'
+ (46, -2), // + '.'
+ (65, -1), // + 'A'
+ (74, -2), // + 'J'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (117, -1), // + 'u'
+ (125, 1), // + '}'
+ // 'X' (88) +
+ (32, -1), // + ' '
+ (45, -1), // + '-'
+ (67, -2), // + 'C'
+ (71, -2), // + 'G'
+ (79, -2), // + 'O'
+ (81, -2), // + 'Q'
+ (83, -1), // + 'S'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (102, -1), // + 'f'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -2), // + 'v'
+ (119, -2), // + 'w'
+ (121, -2), // + 'y'
+ // 'Y' (89) +
+ (32, -1), // + ' '
+ (41, 1), // + ')'
+ (44, -3), // + ','
+ (45, -2), // + '-'
+ (46, -3), // + '.'
+ (65, -2), // + 'A'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (74, -3), // + 'J'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (93, 1), // + ']'
+ (97, -2), // + 'a'
+ (99, -2), // + 'c'
+ (100, -2), // + 'd'
+ (101, -2), // + 'e'
+ (102, -1), // + 'f'
+ (103, -2), // + 'g'
+ (109, -2), // + 'm'
+ (110, -2), // + 'n'
+ (111, -2), // + 'o'
+ (112, -2), // + 'p'
+ (113, -2), // + 'q'
+ (114, -2), // + 'r'
+ (115, -2), // + 's'
+ (116, -1), // + 't'
+ (117, -2), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (120, -1), // + 'x'
+ (121, -1), // + 'y'
+ (122, -2), // + 'z'
+ (125, 1), // + '}'
+ // 'Z' (90) +
+ (45, -1), // + '-'
+ (67, -1), // + 'C'
+ (71, -1), // + 'G'
+ (79, -1), // + 'O'
+ (81, -1), // + 'Q'
+ (83, -1), // + 'S'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (115, -1), // + 's'
+ (116, -1), // + 't'
+ (117, -1), // + 'u'
+ (118, -1), // + 'v'
+ (119, -1), // + 'w'
+ (121, -1), // + 'y'
+ // '[' (91) +
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (89, 1), // + 'Y'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 2), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+ // '\' (92) +
+ (92, -4), // + '\'
+ // '^' (94) +
+ (49, 2), // + '1'
+ (52, -2), // + '4'
+ (54, -1), // + '6'
+ (55, 2), // + '7'
+ (65, -2), // + 'A'
+ (74, -2), // + 'J'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 1), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 2), // + 't'
+ (118, 1), // + 'v'
+ (119, 1), // + 'w'
+ (121, 1), // + 'y'
+ (122, 1), // + 'z'
+ // 'b' (98) +
+ (120, -1), // + 'x'
+ // 'c' (99) +
+ (120, -1), // + 'x'
+ // 'd' (100) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 'e' (101) +
+ (120, -1), // + 'x'
+ // 'f' (102) +
+ (32, -1), // + ' '
+ (34, 2), // + '"'
+ (39, 2), // + '''
+ (41, 1), // + ')'
+ (42, 2), // + '*'
+ (44, -2), // + ','
+ (45, -1), // + '-'
+ (46, -2), // + '.'
+ (93, 1), // + ']'
+ (94, 2), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (125, 1), // + '}'
+ // 'g' (103) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (106, 2), // + 'j'
+ (125, 1), // + '}'
+ // 'i' (105) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 'j' (106) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (106, 2), // + 'j'
+ (125, 1), // + '}'
+ // 'l' (108) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 'o' (111) +
+ (120, -1), // + 'x'
+ // 'p' (112) +
+ (120, -1), // + 'x'
+ // 'r' (114) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (44, -2), // + ','
+ (45, -1), // + '-'
+ (46, -2), // + '.'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (125, 1), // + '}'
+ // 't' (116) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (41, 1), // + ')'
+ (42, 1), // + '*'
+ (45, -1), // + '-'
+ (93, 1), // + ']'
+ (94, 1), // + '^'
+ (97, -1), // + 'a'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (102, -1), // + 'f'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ (116, -1), // + 't'
+ (125, 1), // + '}'
+ // 'v' (118) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -2), // + ','
+ (46, -2), // + '.'
+ (94, 1), // + '^'
+ // 'w' (119) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -1), // + ','
+ (46, -1), // + '.'
+ (94, 1), // + '^'
+ // 'x' (120) +
+ (32, -1), // + ' '
+ (45, -1), // + '-'
+ (99, -1), // + 'c'
+ (100, -1), // + 'd'
+ (101, -1), // + 'e'
+ (103, -1), // + 'g'
+ (111, -1), // + 'o'
+ (113, -1), // + 'q'
+ // 'y' (121) +
+ (32, -1), // + ' '
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (44, -2), // + ','
+ (46, -2), // + '.'
+ (94, 1), // + '^'
+ // 'z' (122) +
+ (34, 1), // + '"'
+ (39, 1), // + '''
+ (42, 1), // + '*'
+ (45, -1), // + '-'
+ (94, 1), // + '^'
+ // '{' (123) +
+ (52, -1), // + '4'
+ (55, 1), // + '7'
+ (84, 1), // + 'T'
+ (86, 1), // + 'V'
+ (87, 1), // + 'W'
+ (89, 1), // + 'Y'
+ (98, 1), // + 'b'
+ (102, 1), // + 'f'
+ (104, 1), // + 'h'
+ (105, 1), // + 'i'
+ (106, 2), // + 'j'
+ (107, 1), // + 'k'
+ (108, 1), // + 'l'
+ (116, 1), // + 't'
+];
+
+#[cfg(feature = "ui_font_kerning")]
+const Font_TTSatoshi_Regular_38_kernings: KerningTable = KerningTable {
+ index: &Font_TTSatoshi_Regular_38_kern_index,
+ pairs: &Font_TTSatoshi_Regular_38_kern_pairs,
+};
+
/// FontInfo struct for normal ASCII usage
pub const Font_TTSatoshi_Regular_38_info: FontInfo = FontInfo {
translation_blob_idx: 2,
@@ -403,5 +1248,6 @@ pub const Font_TTSatoshi_Regular_38_info: FontInfo = FontInfo {
baseline: 9,
glyph_data: &Font_TTSatoshi_Regular_38,
glyph_nonprintable: &Font_TTSatoshi_Regular_38_glyph_nonprintable,
- kernings: None,
+ #[cfg(feature = "ui_font_kerning")]
+ kernings: Some(&Font_TTSatoshi_Regular_38_kernings),
};
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.