diff --git a/core/embed/lib/fonts/font_pixeloperator_bold_8.c b/core/embed/lib/fonts/font_pixeloperator_bold_8.c index 5bdd5e403..76c6ce16b 100644 --- a/core/embed/lib/fonts/font_pixeloperator_bold_8.c +++ b/core/embed/lib/fonts/font_pixeloperator_bold_8.c @@ -1,3 +1,5 @@ +// This file is generated by core/tools/codegen/gen_font.py + #include // clang-format off @@ -6,6 +8,8 @@ // - the third, fourth and fifth bytes are advance, bearingX and bearingY of the horizontal metrics of the glyph // - the rest is packed 1-bit glyph data +// NOTE: hand-changed the width and advance of '_' to 5 + /* */ static const uint8_t Font_PixelOperator_Bold_8_glyph_32[] = { 0, 0, 4, 0, 0 }; /* ! */ static const uint8_t Font_PixelOperator_Bold_8_glyph_33[] = { 2, 7, 5, 1, 7, 255, 204 }; /* " */ static const uint8_t Font_PixelOperator_Bold_8_glyph_34[] = { 5, 3, 6, 0, 7, 222, 246 }; @@ -69,7 +73,7 @@ /* \ */ static const uint8_t Font_PixelOperator_Bold_8_glyph_92[] = { 4, 7, 5, 0, 7, 204, 102, 99, 48 }; /* ] */ static const uint8_t Font_PixelOperator_Bold_8_glyph_93[] = { 4, 7, 6, 0, 7, 243, 51, 51, 240 }; /* ^ */ static const uint8_t Font_PixelOperator_Bold_8_glyph_94[] = { 6, 4, 7, 0, 7, 49, 236, 225, 0 }; -/* _ */ static const uint8_t Font_PixelOperator_Bold_8_glyph_95[] = { 5, 1, 5, 0, 0, 248 }; +/* _ */ static const uint8_t Font_PixelOperator_Bold_8_glyph_95[] = { 5, 1, 5, 0, 0, 248 }; // width (1st), advance (3rd) changed to 5, last byte to 248 /* ` */ static const uint8_t Font_PixelOperator_Bold_8_glyph_96[] = { 3, 2, 5, 0, 7, 204 }; /* a */ static const uint8_t Font_PixelOperator_Bold_8_glyph_97[] = { 6, 5, 7, 0, 5, 120, 55, 243, 124 }; /* b */ static const uint8_t Font_PixelOperator_Bold_8_glyph_98[] = { 6, 7, 7, 0, 7, 195, 15, 179, 207, 63, 128 }; @@ -104,6 +108,8 @@ /* ? */ const uint8_t Font_PixelOperator_Bold_8_glyph_nonprintable[] = { 6, 7, 7, 0, 7, 132, 207, 57, 207, 252, 255 }; +/* ? */ const uint8_t Font_PixelOperator_Bold_8_upper_glyph_nonprintable[] = { 6, 7, 7, 0, 7, 132, 207, 57, 207, 252, 255 }; + const uint8_t * const Font_PixelOperator_Bold_8[126 + 1 - 32] = { Font_PixelOperator_Bold_8_glyph_32, Font_PixelOperator_Bold_8_glyph_33, @@ -201,3 +207,101 @@ const uint8_t * const Font_PixelOperator_Bold_8[126 + 1 - 32] = { Font_PixelOperator_Bold_8_glyph_125, Font_PixelOperator_Bold_8_glyph_126, }; + +const uint8_t * const Font_PixelOperator_Bold_8_upper[126 + 1 - 32] = { + Font_PixelOperator_Bold_8_glyph_32, + Font_PixelOperator_Bold_8_glyph_33, + Font_PixelOperator_Bold_8_glyph_34, + Font_PixelOperator_Bold_8_glyph_35, + Font_PixelOperator_Bold_8_glyph_36, + Font_PixelOperator_Bold_8_glyph_37, + Font_PixelOperator_Bold_8_glyph_38, + Font_PixelOperator_Bold_8_glyph_39, + Font_PixelOperator_Bold_8_glyph_40, + Font_PixelOperator_Bold_8_glyph_41, + Font_PixelOperator_Bold_8_glyph_42, + Font_PixelOperator_Bold_8_glyph_43, + Font_PixelOperator_Bold_8_glyph_44, + Font_PixelOperator_Bold_8_glyph_45, + Font_PixelOperator_Bold_8_glyph_46, + Font_PixelOperator_Bold_8_glyph_47, + Font_PixelOperator_Bold_8_glyph_48, + Font_PixelOperator_Bold_8_glyph_49, + Font_PixelOperator_Bold_8_glyph_50, + Font_PixelOperator_Bold_8_glyph_51, + Font_PixelOperator_Bold_8_glyph_52, + Font_PixelOperator_Bold_8_glyph_53, + Font_PixelOperator_Bold_8_glyph_54, + Font_PixelOperator_Bold_8_glyph_55, + Font_PixelOperator_Bold_8_glyph_56, + Font_PixelOperator_Bold_8_glyph_57, + Font_PixelOperator_Bold_8_glyph_58, + Font_PixelOperator_Bold_8_glyph_59, + Font_PixelOperator_Bold_8_glyph_60, + Font_PixelOperator_Bold_8_glyph_61, + Font_PixelOperator_Bold_8_glyph_62, + Font_PixelOperator_Bold_8_glyph_63, + Font_PixelOperator_Bold_8_glyph_64, + Font_PixelOperator_Bold_8_glyph_65, + Font_PixelOperator_Bold_8_glyph_66, + Font_PixelOperator_Bold_8_glyph_67, + Font_PixelOperator_Bold_8_glyph_68, + Font_PixelOperator_Bold_8_glyph_69, + Font_PixelOperator_Bold_8_glyph_70, + Font_PixelOperator_Bold_8_glyph_71, + Font_PixelOperator_Bold_8_glyph_72, + Font_PixelOperator_Bold_8_glyph_73, + Font_PixelOperator_Bold_8_glyph_74, + Font_PixelOperator_Bold_8_glyph_75, + Font_PixelOperator_Bold_8_glyph_76, + Font_PixelOperator_Bold_8_glyph_77, + Font_PixelOperator_Bold_8_glyph_78, + Font_PixelOperator_Bold_8_glyph_79, + Font_PixelOperator_Bold_8_glyph_80, + Font_PixelOperator_Bold_8_glyph_81, + Font_PixelOperator_Bold_8_glyph_82, + Font_PixelOperator_Bold_8_glyph_83, + Font_PixelOperator_Bold_8_glyph_84, + Font_PixelOperator_Bold_8_glyph_85, + Font_PixelOperator_Bold_8_glyph_86, + Font_PixelOperator_Bold_8_glyph_87, + Font_PixelOperator_Bold_8_glyph_88, + Font_PixelOperator_Bold_8_glyph_89, + Font_PixelOperator_Bold_8_glyph_90, + Font_PixelOperator_Bold_8_glyph_91, + Font_PixelOperator_Bold_8_glyph_92, + Font_PixelOperator_Bold_8_glyph_93, + Font_PixelOperator_Bold_8_glyph_94, + Font_PixelOperator_Bold_8_glyph_95, + Font_PixelOperator_Bold_8_glyph_96, + Font_PixelOperator_Bold_8_glyph_65, // a -> A + Font_PixelOperator_Bold_8_glyph_66, // b -> B + Font_PixelOperator_Bold_8_glyph_67, // c -> C + Font_PixelOperator_Bold_8_glyph_68, // d -> D + Font_PixelOperator_Bold_8_glyph_69, // e -> E + Font_PixelOperator_Bold_8_glyph_70, // f -> F + Font_PixelOperator_Bold_8_glyph_71, // g -> G + Font_PixelOperator_Bold_8_glyph_72, // h -> H + Font_PixelOperator_Bold_8_glyph_73, // i -> I + Font_PixelOperator_Bold_8_glyph_74, // j -> J + Font_PixelOperator_Bold_8_glyph_75, // k -> K + Font_PixelOperator_Bold_8_glyph_76, // l -> L + Font_PixelOperator_Bold_8_glyph_77, // m -> M + Font_PixelOperator_Bold_8_glyph_78, // n -> N + Font_PixelOperator_Bold_8_glyph_79, // o -> O + Font_PixelOperator_Bold_8_glyph_80, // p -> P + Font_PixelOperator_Bold_8_glyph_81, // q -> Q + Font_PixelOperator_Bold_8_glyph_82, // r -> R + Font_PixelOperator_Bold_8_glyph_83, // s -> S + Font_PixelOperator_Bold_8_glyph_84, // t -> T + Font_PixelOperator_Bold_8_glyph_85, // u -> U + Font_PixelOperator_Bold_8_glyph_86, // v -> V + Font_PixelOperator_Bold_8_glyph_87, // w -> W + Font_PixelOperator_Bold_8_glyph_88, // x -> X + Font_PixelOperator_Bold_8_glyph_89, // y -> Y + Font_PixelOperator_Bold_8_glyph_90, // z -> Z + Font_PixelOperator_Bold_8_glyph_123, + Font_PixelOperator_Bold_8_glyph_124, + Font_PixelOperator_Bold_8_glyph_125, + Font_PixelOperator_Bold_8_glyph_126, +}; diff --git a/core/embed/lib/fonts/font_pixeloperator_bold_8.h b/core/embed/lib/fonts/font_pixeloperator_bold_8.h index 198ebd4a4..d3b0f11a5 100644 --- a/core/embed/lib/fonts/font_pixeloperator_bold_8.h +++ b/core/embed/lib/fonts/font_pixeloperator_bold_8.h @@ -1,3 +1,5 @@ +// This file is generated by core/tools/codegen/gen_font.py + #include #if TREZOR_FONT_BPP != 1 @@ -8,3 +10,8 @@ #define Font_PixelOperator_Bold_8_BASELINE 1 extern const uint8_t* const Font_PixelOperator_Bold_8[126 + 1 - 32]; extern const uint8_t Font_PixelOperator_Bold_8_glyph_nonprintable[]; +#define Font_PixelOperator_Bold_8_upper_HEIGHT 8 +#define Font_PixelOperator_Bold_8_upper_MAX_HEIGHT 8 +#define Font_PixelOperator_Bold_8_upper_BASELINE 1 +extern const uint8_t* const Font_PixelOperator_Bold_8_upper[126 + 1 - 32]; +extern const uint8_t Font_PixelOperator_Bold_8_upper_glyph_nonprintable[]; diff --git a/core/embed/lib/fonts/font_pixeloperator_regular_8.c b/core/embed/lib/fonts/font_pixeloperator_regular_8.c index ba7a412dd..5f6181330 100644 --- a/core/embed/lib/fonts/font_pixeloperator_regular_8.c +++ b/core/embed/lib/fonts/font_pixeloperator_regular_8.c @@ -1,3 +1,5 @@ +// This file is generated by core/tools/codegen/gen_font.py + #include // clang-format off @@ -6,6 +8,8 @@ // - the third, fourth and fifth bytes are advance, bearingX and bearingY of the horizontal metrics of the glyph // - the rest is packed 1-bit glyph data +// NOTE: hand-changed the width and advance of '_' to 5 + /* */ static const uint8_t Font_PixelOperator_Regular_8_glyph_32[] = { 0, 0, 4, 0, 0 }; /* ! */ static const uint8_t Font_PixelOperator_Regular_8_glyph_33[] = { 1, 7, 4, 1, 7, 250 }; /* " */ static const uint8_t Font_PixelOperator_Regular_8_glyph_34[] = { 3, 3, 6, 1, 7, 182, 128 }; @@ -69,7 +73,7 @@ /* \ */ static const uint8_t Font_PixelOperator_Regular_8_glyph_92[] = { 3, 7, 4, 0, 7, 145, 36, 72 }; /* ] */ static const uint8_t Font_PixelOperator_Regular_8_glyph_93[] = { 3, 7, 6, 0, 7, 228, 146, 120 }; /* ^ */ static const uint8_t Font_PixelOperator_Regular_8_glyph_94[] = { 5, 3, 6, 0, 7, 34, 162 }; -/* _ */ static const uint8_t Font_PixelOperator_Regular_8_glyph_95[] = { 5, 1, 5, 0, 0, 248 }; +/* _ */ static const uint8_t Font_PixelOperator_Regular_8_glyph_95[] = { 5, 1, 5, 0, 0, 248 }; // width (1st), advance (3rd) changed to 5, last byte to 248 /* ` */ static const uint8_t Font_PixelOperator_Regular_8_glyph_96[] = { 2, 2, 4, 0, 7, 144 }; /* a */ static const uint8_t Font_PixelOperator_Regular_8_glyph_97[] = { 5, 5, 6, 0, 5, 112, 95, 23, 128 }; /* b */ static const uint8_t Font_PixelOperator_Regular_8_glyph_98[] = { 5, 7, 6, 0, 7, 132, 61, 24, 199, 192 }; @@ -104,6 +108,8 @@ /* ? */ const uint8_t Font_PixelOperator_Regular_8_glyph_nonprintable[] = { 5, 7, 6, 0, 7, 139, 189, 221, 255, 127 }; +/* ? */ const uint8_t Font_PixelOperator_Regular_8_upper_glyph_nonprintable[] = { 5, 7, 6, 0, 7, 139, 189, 221, 255, 127 }; + const uint8_t * const Font_PixelOperator_Regular_8[126 + 1 - 32] = { Font_PixelOperator_Regular_8_glyph_32, Font_PixelOperator_Regular_8_glyph_33, @@ -201,3 +207,101 @@ const uint8_t * const Font_PixelOperator_Regular_8[126 + 1 - 32] = { Font_PixelOperator_Regular_8_glyph_125, Font_PixelOperator_Regular_8_glyph_126, }; + +const uint8_t * const Font_PixelOperator_Regular_8_upper[126 + 1 - 32] = { + Font_PixelOperator_Regular_8_glyph_32, + Font_PixelOperator_Regular_8_glyph_33, + Font_PixelOperator_Regular_8_glyph_34, + Font_PixelOperator_Regular_8_glyph_35, + Font_PixelOperator_Regular_8_glyph_36, + Font_PixelOperator_Regular_8_glyph_37, + Font_PixelOperator_Regular_8_glyph_38, + Font_PixelOperator_Regular_8_glyph_39, + Font_PixelOperator_Regular_8_glyph_40, + Font_PixelOperator_Regular_8_glyph_41, + Font_PixelOperator_Regular_8_glyph_42, + Font_PixelOperator_Regular_8_glyph_43, + Font_PixelOperator_Regular_8_glyph_44, + Font_PixelOperator_Regular_8_glyph_45, + Font_PixelOperator_Regular_8_glyph_46, + Font_PixelOperator_Regular_8_glyph_47, + Font_PixelOperator_Regular_8_glyph_48, + Font_PixelOperator_Regular_8_glyph_49, + Font_PixelOperator_Regular_8_glyph_50, + Font_PixelOperator_Regular_8_glyph_51, + Font_PixelOperator_Regular_8_glyph_52, + Font_PixelOperator_Regular_8_glyph_53, + Font_PixelOperator_Regular_8_glyph_54, + Font_PixelOperator_Regular_8_glyph_55, + Font_PixelOperator_Regular_8_glyph_56, + Font_PixelOperator_Regular_8_glyph_57, + Font_PixelOperator_Regular_8_glyph_58, + Font_PixelOperator_Regular_8_glyph_59, + Font_PixelOperator_Regular_8_glyph_60, + Font_PixelOperator_Regular_8_glyph_61, + Font_PixelOperator_Regular_8_glyph_62, + Font_PixelOperator_Regular_8_glyph_63, + Font_PixelOperator_Regular_8_glyph_64, + Font_PixelOperator_Regular_8_glyph_65, + Font_PixelOperator_Regular_8_glyph_66, + Font_PixelOperator_Regular_8_glyph_67, + Font_PixelOperator_Regular_8_glyph_68, + Font_PixelOperator_Regular_8_glyph_69, + Font_PixelOperator_Regular_8_glyph_70, + Font_PixelOperator_Regular_8_glyph_71, + Font_PixelOperator_Regular_8_glyph_72, + Font_PixelOperator_Regular_8_glyph_73, + Font_PixelOperator_Regular_8_glyph_74, + Font_PixelOperator_Regular_8_glyph_75, + Font_PixelOperator_Regular_8_glyph_76, + Font_PixelOperator_Regular_8_glyph_77, + Font_PixelOperator_Regular_8_glyph_78, + Font_PixelOperator_Regular_8_glyph_79, + Font_PixelOperator_Regular_8_glyph_80, + Font_PixelOperator_Regular_8_glyph_81, + Font_PixelOperator_Regular_8_glyph_82, + Font_PixelOperator_Regular_8_glyph_83, + Font_PixelOperator_Regular_8_glyph_84, + Font_PixelOperator_Regular_8_glyph_85, + Font_PixelOperator_Regular_8_glyph_86, + Font_PixelOperator_Regular_8_glyph_87, + Font_PixelOperator_Regular_8_glyph_88, + Font_PixelOperator_Regular_8_glyph_89, + Font_PixelOperator_Regular_8_glyph_90, + Font_PixelOperator_Regular_8_glyph_91, + Font_PixelOperator_Regular_8_glyph_92, + Font_PixelOperator_Regular_8_glyph_93, + Font_PixelOperator_Regular_8_glyph_94, + Font_PixelOperator_Regular_8_glyph_95, + Font_PixelOperator_Regular_8_glyph_96, + Font_PixelOperator_Regular_8_glyph_65, // a -> A + Font_PixelOperator_Regular_8_glyph_66, // b -> B + Font_PixelOperator_Regular_8_glyph_67, // c -> C + Font_PixelOperator_Regular_8_glyph_68, // d -> D + Font_PixelOperator_Regular_8_glyph_69, // e -> E + Font_PixelOperator_Regular_8_glyph_70, // f -> F + Font_PixelOperator_Regular_8_glyph_71, // g -> G + Font_PixelOperator_Regular_8_glyph_72, // h -> H + Font_PixelOperator_Regular_8_glyph_73, // i -> I + Font_PixelOperator_Regular_8_glyph_74, // j -> J + Font_PixelOperator_Regular_8_glyph_75, // k -> K + Font_PixelOperator_Regular_8_glyph_76, // l -> L + Font_PixelOperator_Regular_8_glyph_77, // m -> M + Font_PixelOperator_Regular_8_glyph_78, // n -> N + Font_PixelOperator_Regular_8_glyph_79, // o -> O + Font_PixelOperator_Regular_8_glyph_80, // p -> P + Font_PixelOperator_Regular_8_glyph_81, // q -> Q + Font_PixelOperator_Regular_8_glyph_82, // r -> R + Font_PixelOperator_Regular_8_glyph_83, // s -> S + Font_PixelOperator_Regular_8_glyph_84, // t -> T + Font_PixelOperator_Regular_8_glyph_85, // u -> U + Font_PixelOperator_Regular_8_glyph_86, // v -> V + Font_PixelOperator_Regular_8_glyph_87, // w -> W + Font_PixelOperator_Regular_8_glyph_88, // x -> X + Font_PixelOperator_Regular_8_glyph_89, // y -> Y + Font_PixelOperator_Regular_8_glyph_90, // z -> Z + Font_PixelOperator_Regular_8_glyph_123, + Font_PixelOperator_Regular_8_glyph_124, + Font_PixelOperator_Regular_8_glyph_125, + Font_PixelOperator_Regular_8_glyph_126, +}; diff --git a/core/embed/lib/fonts/font_pixeloperator_regular_8.h b/core/embed/lib/fonts/font_pixeloperator_regular_8.h index ddd01b0ee..2565d8790 100644 --- a/core/embed/lib/fonts/font_pixeloperator_regular_8.h +++ b/core/embed/lib/fonts/font_pixeloperator_regular_8.h @@ -1,3 +1,5 @@ +// This file is generated by core/tools/codegen/gen_font.py + #include #if TREZOR_FONT_BPP != 1 @@ -8,3 +10,8 @@ #define Font_PixelOperator_Regular_8_BASELINE 1 extern const uint8_t* const Font_PixelOperator_Regular_8[126 + 1 - 32]; extern const uint8_t Font_PixelOperator_Regular_8_glyph_nonprintable[]; +#define Font_PixelOperator_Regular_8_upper_HEIGHT 8 +#define Font_PixelOperator_Regular_8_upper_MAX_HEIGHT 8 +#define Font_PixelOperator_Regular_8_upper_BASELINE 1 +extern const uint8_t* const Font_PixelOperator_Regular_8_upper[126 + 1 - 32]; +extern const uint8_t Font_PixelOperator_Regular_8_upper_glyph_nonprintable[]; diff --git a/core/embed/lib/fonts/font_pixeloperatormono_regular_8.h b/core/embed/lib/fonts/font_pixeloperatormono_regular_8.h index 27a730c8b..ce157770f 100644 --- a/core/embed/lib/fonts/font_pixeloperatormono_regular_8.h +++ b/core/embed/lib/fonts/font_pixeloperatormono_regular_8.h @@ -1,3 +1,5 @@ +// This file is generated by core/tools/codegen/gen_font.py + #include #if TREZOR_FONT_BPP != 1 diff --git a/core/embed/lib/fonts/font_roboto_bold_20.c b/core/embed/lib/fonts/font_roboto_bold_20.c index 225385bca..da87d94e8 100644 --- a/core/embed/lib/fonts/font_roboto_bold_20.c +++ b/core/embed/lib/fonts/font_roboto_bold_20.c @@ -1,3 +1,5 @@ +// This file is generated by core/tools/codegen/gen_font.py + #include // clang-format off diff --git a/core/embed/lib/fonts/font_roboto_bold_20.h b/core/embed/lib/fonts/font_roboto_bold_20.h index 846947351..f922ba660 100644 --- a/core/embed/lib/fonts/font_roboto_bold_20.h +++ b/core/embed/lib/fonts/font_roboto_bold_20.h @@ -1,3 +1,5 @@ +// This file is generated by core/tools/codegen/gen_font.py + #include #if TREZOR_FONT_BPP != 4 diff --git a/core/embed/lib/fonts/font_roboto_regular_20.c b/core/embed/lib/fonts/font_roboto_regular_20.c index 64f3d6870..f4370a6e6 100644 --- a/core/embed/lib/fonts/font_roboto_regular_20.c +++ b/core/embed/lib/fonts/font_roboto_regular_20.c @@ -1,3 +1,5 @@ +// This file is generated by core/tools/codegen/gen_font.py + #include // clang-format off diff --git a/core/embed/lib/fonts/font_roboto_regular_20.h b/core/embed/lib/fonts/font_roboto_regular_20.h index ac18ed1f3..8eeb50983 100644 --- a/core/embed/lib/fonts/font_roboto_regular_20.h +++ b/core/embed/lib/fonts/font_roboto_regular_20.h @@ -1,3 +1,5 @@ +// This file is generated by core/tools/codegen/gen_font.py + #include #if TREZOR_FONT_BPP != 4 diff --git a/core/embed/lib/fonts/font_robotomono_medium_20.c b/core/embed/lib/fonts/font_robotomono_medium_20.c index 72884c1b2..c08fc3fb0 100644 --- a/core/embed/lib/fonts/font_robotomono_medium_20.c +++ b/core/embed/lib/fonts/font_robotomono_medium_20.c @@ -1,3 +1,5 @@ +// This file is generated by core/tools/codegen/gen_font.py + #include // clang-format off diff --git a/core/embed/lib/fonts/font_robotomono_medium_20.h b/core/embed/lib/fonts/font_robotomono_medium_20.h index b371bca00..7b43d298f 100644 --- a/core/embed/lib/fonts/font_robotomono_medium_20.h +++ b/core/embed/lib/fonts/font_robotomono_medium_20.h @@ -1,3 +1,5 @@ +// This file is generated by core/tools/codegen/gen_font.py + #include #if TREZOR_FONT_BPP != 4 diff --git a/core/embed/lib/fonts/font_tthoves_bold_17.c b/core/embed/lib/fonts/font_tthoves_bold_17.c index 992febaa2..d8b3138e3 100644 --- a/core/embed/lib/fonts/font_tthoves_bold_17.c +++ b/core/embed/lib/fonts/font_tthoves_bold_17.c @@ -1,3 +1,5 @@ +// This file is generated by core/tools/codegen/gen_font.py + #include // clang-format off @@ -71,40 +73,14 @@ /* ^ */ static const uint8_t Font_TTHoves_Bold_17_glyph_94[] = { 8, 5, 8, 0, 12, 0, 251, 159, 0, 16, 255, 255, 0, 112, 207, 253, 5, 192, 111, 248, 10, 242, 31, 242, 31 }; /* _ */ static const uint8_t Font_TTHoves_Bold_17_glyph_95[] = { 9, 3, 8, 0, 0, 82, 85, 85, 85, 0, 245, 255, 255, 255, 1, 245, 255, 255, 255, 1 }; /* ` */ static const uint8_t Font_TTHoves_Bold_17_glyph_96[] = { 5, 3, 5, 0, 13, 114, 23, 0, 176, 175, 0, 0, 253, 5 }; -/* a */ static const uint8_t Font_TTHoves_Bold_17_glyph_97[] = { 9, 9, 10, 0, 9, 0, 214, 239, 42, 0, 128, 255, 255, 239, 1, 192, 172, 114, 255, 7, 0, 0, 0, 255, 9, 48, 235, 255, 255, 10, 241, 239, 187, 255, 10, 245, 95, 80, 255, 10, 242, 255, 255, 255, 10, 48, 252, 158, 250, 10 }; -/* b */ static const uint8_t Font_TTHoves_Bold_17_glyph_98[] = { 10, 12, 11, 1, 12, 254, 10, 0, 0, 0, 254, 10, 0, 0, 0, 254, 10, 0, 0, 0, 254, 171, 238, 26, 0, 254, 255, 255, 239, 1, 254, 207, 167, 255, 10, 254, 14, 0, 251, 14, 254, 10, 0, 247, 15, 254, 13, 0, 251, 14, 254, 207, 166, 255, 10, 254, 255, 255, 239, 1, 254, 168, 238, 26, 0 }; -/* c */ static const uint8_t Font_TTHoves_Bold_17_glyph_99[] = { 10, 9, 10, 0, 9, 0, 178, 254, 76, 0, 64, 255, 255, 255, 6, 224, 255, 120, 254, 31, 243, 111, 0, 147, 57, 245, 47, 0, 0, 0, 243, 111, 0, 131, 56, 224, 255, 120, 254, 31, 64, 255, 255, 255, 6, 0, 179, 254, 76, 0 }; -/* d */ static const uint8_t Font_TTHoves_Bold_17_glyph_100[] = { 10, 12, 11, 0, 12, 0, 0, 0, 240, 159, 0, 0, 0, 240, 159, 0, 0, 0, 240, 159, 0, 179, 238, 247, 159, 80, 255, 255, 255, 159, 224, 255, 120, 254, 159, 243, 111, 0, 243, 159, 245, 47, 0, 240, 159, 243, 111, 0, 243, 159, 224, 255, 120, 254, 159, 80, 255, 255, 255, 159, 0, 179, 239, 183, 159 }; -/* e */ static const uint8_t Font_TTHoves_Bold_17_glyph_101[] = { 10, 9, 10, 0, 9, 0, 179, 238, 75, 0, 64, 255, 255, 255, 6, 224, 207, 18, 250, 47, 243, 175, 136, 249, 111, 245, 255, 255, 255, 127, 243, 95, 0, 0, 0, 224, 223, 34, 201, 28, 64, 255, 255, 255, 6, 0, 178, 238, 75, 0 }; -/* f */ static const uint8_t Font_TTHoves_Bold_17_glyph_102[] = { 7, 13, 7, 0, 13, 0, 212, 255, 4, 0, 255, 255, 4, 32, 255, 25, 0, 32, 255, 6, 0, 247, 255, 255, 4, 247, 255, 255, 4, 115, 255, 106, 1, 32, 255, 6, 0, 32, 255, 6, 0, 32, 255, 6, 0, 32, 255, 6, 0, 32, 255, 6, 0, 32, 255, 6, 0 }; -/* g */ static const uint8_t Font_TTHoves_Bold_17_glyph_103[] = { 10, 13, 10, 0, 9, 0, 197, 223, 245, 63, 96, 255, 255, 255, 63, 241, 255, 152, 255, 63, 243, 111, 0, 248, 63, 245, 47, 0, 245, 63, 244, 111, 0, 248, 63, 241, 255, 135, 255, 63, 112, 255, 255, 255, 63, 0, 197, 223, 249, 63, 32, 2, 0, 246, 63, 241, 223, 84, 253, 15, 112, 255, 255, 255, 8, 0, 197, 239, 92, 0 }; -/* h */ static const uint8_t Font_TTHoves_Bold_17_glyph_104[] = { 9, 12, 10, 1, 12, 254, 10, 0, 0, 0, 254, 10, 0, 0, 0, 254, 10, 0, 0, 0, 254, 171, 239, 25, 0, 254, 255, 255, 207, 0, 254, 207, 249, 255, 3, 254, 14, 80, 255, 6, 254, 10, 32, 255, 6, 254, 10, 16, 255, 6, 254, 10, 16, 255, 6, 254, 10, 16, 255, 6, 254, 10, 16, 255, 6 }; -/* i */ static const uint8_t Font_TTHoves_Bold_17_glyph_105[] = { 3, 13, 5, 1, 13, 51, 1, 255, 8, 255, 8, 0, 0, 255, 8, 255, 8, 255, 8, 255, 8, 255, 8, 255, 8, 255, 8, 255, 8, 255, 8 }; -/* j */ static const uint8_t Font_TTHoves_Bold_17_glyph_106[] = { 5, 17, 6, 0, 13, 0, 51, 1, 0, 255, 8, 0, 255, 8, 0, 0, 0, 0, 255, 8, 0, 255, 8, 0, 255, 8, 0, 255, 8, 0, 255, 8, 0, 255, 8, 0, 255, 8, 0, 255, 8, 0, 255, 8, 0, 255, 8, 117, 255, 8, 253, 255, 6, 253, 175, 0 }; -/* k */ static const uint8_t Font_TTHoves_Bold_17_glyph_107[] = { 9, 12, 9, 1, 12, 254, 10, 0, 0, 0, 254, 10, 0, 0, 0, 254, 10, 0, 0, 0, 254, 10, 176, 255, 2, 254, 10, 247, 111, 0, 254, 58, 255, 10, 0, 254, 235, 223, 0, 0, 254, 255, 111, 0, 0, 254, 202, 239, 1, 0, 254, 42, 255, 12, 0, 254, 10, 245, 143, 0, 254, 10, 144, 255, 4 }; -/* l */ static const uint8_t Font_TTHoves_Bold_17_glyph_108[] = { 3, 12, 5, 1, 12, 254, 10, 254, 10, 254, 10, 254, 10, 254, 10, 254, 10, 254, 10, 254, 10, 254, 10, 254, 10, 254, 10, 254, 10 }; -/* m */ static const uint8_t Font_TTHoves_Bold_17_glyph_109[] = { 13, 9, 15, 1, 9, 255, 167, 206, 67, 252, 60, 0, 255, 255, 255, 255, 255, 255, 2, 255, 159, 252, 255, 186, 255, 9, 255, 11, 240, 207, 0, 254, 11, 255, 8, 224, 175, 0, 252, 12, 255, 8, 224, 175, 0, 252, 12, 255, 8, 224, 175, 0, 252, 12, 255, 8, 224, 175, 0, 252, 12, 255, 8, 224, 175, 0, 252, 12 }; -/* n */ static const uint8_t Font_TTHoves_Bold_17_glyph_110[] = { 9, 9, 10, 1, 9, 255, 183, 239, 8, 0, 255, 255, 255, 175, 0, 255, 191, 249, 255, 2, 255, 12, 112, 255, 4, 255, 9, 48, 255, 5, 255, 8, 48, 255, 5, 255, 8, 48, 255, 5, 255, 8, 48, 255, 5, 255, 8, 48, 255, 5 }; -/* o */ static const uint8_t Font_TTHoves_Bold_17_glyph_111[] = { 10, 9, 10, 0, 9, 0, 178, 238, 75, 0, 64, 255, 255, 255, 7, 224, 255, 120, 254, 47, 243, 111, 0, 243, 111, 245, 47, 0, 240, 143, 243, 111, 0, 243, 111, 224, 255, 120, 254, 47, 64, 255, 255, 255, 7, 0, 179, 238, 75, 0 }; -/* p */ static const uint8_t Font_TTHoves_Bold_17_glyph_112[] = { 10, 13, 11, 1, 9, 255, 182, 223, 9, 0, 255, 255, 255, 223, 0, 255, 191, 183, 255, 8, 255, 12, 0, 252, 13, 255, 9, 0, 249, 15, 255, 13, 0, 252, 13, 255, 191, 182, 255, 8, 255, 255, 255, 223, 0, 255, 187, 223, 25, 0, 255, 8, 0, 0, 0, 255, 8, 0, 0, 0, 255, 8, 0, 0, 0, 255, 8, 0, 0, 0 }; -/* q */ static const uint8_t Font_TTHoves_Bold_17_glyph_113[] = { 10, 13, 11, 0, 9, 0, 179, 238, 184, 159, 80, 255, 255, 255, 159, 224, 255, 120, 254, 159, 243, 111, 0, 243, 159, 245, 47, 0, 240, 159, 243, 111, 0, 243, 159, 224, 255, 120, 254, 159, 80, 255, 255, 255, 159, 0, 179, 239, 248, 159, 0, 0, 0, 240, 159, 0, 0, 0, 240, 159, 0, 0, 0, 240, 159, 0, 0, 0, 240, 159 }; -/* r */ static const uint8_t Font_TTHoves_Bold_17_glyph_114[] = { 6, 9, 7, 1, 9, 255, 218, 159, 255, 255, 159, 255, 159, 54, 255, 11, 0, 255, 8, 0, 255, 8, 0, 255, 8, 0, 255, 8, 0, 255, 8, 0 }; -/* s */ static const uint8_t Font_TTHoves_Bold_17_glyph_115[] = { 9, 9, 9, 0, 9, 48, 234, 223, 6, 0, 242, 255, 255, 143, 0, 246, 63, 128, 187, 0, 245, 207, 88, 1, 0, 144, 255, 255, 111, 0, 0, 65, 214, 255, 0, 214, 29, 112, 255, 1, 225, 255, 254, 191, 0, 32, 235, 223, 8, 0 }; -/* t */ static const uint8_t Font_TTHoves_Bold_17_glyph_116[] = { 7, 12, 7, 0, 12, 32, 255, 6, 0, 32, 255, 6, 0, 32, 255, 6, 0, 247, 255, 255, 5, 247, 255, 255, 5, 115, 255, 106, 2, 32, 255, 6, 0, 32, 255, 6, 0, 32, 255, 6, 0, 32, 255, 91, 2, 0, 255, 255, 5, 0, 213, 255, 5 }; -/* u */ static const uint8_t Font_TTHoves_Bold_17_glyph_117[] = { 9, 9, 10, 1, 9, 255, 8, 48, 255, 5, 255, 8, 48, 255, 5, 255, 8, 48, 255, 5, 255, 8, 48, 255, 5, 255, 9, 48, 255, 5, 255, 12, 96, 255, 5, 252, 191, 249, 255, 5, 245, 255, 255, 255, 5, 80, 253, 109, 255, 5 }; -/* v */ static const uint8_t Font_TTHoves_Bold_17_glyph_118[] = { 10, 9, 9, 0, 9, 252, 13, 0, 248, 31, 247, 47, 0, 253, 12, 241, 127, 32, 255, 7, 192, 207, 96, 255, 2, 112, 255, 177, 207, 0, 32, 255, 247, 127, 0, 0, 253, 255, 47, 0, 0, 248, 255, 13, 0, 0, 243, 255, 8, 0 }; -/* w */ static const uint8_t Font_TTHoves_Bold_17_glyph_119[] = { 14, 9, 14, 0, 9, 251, 14, 128, 255, 4, 242, 127, 247, 47, 192, 255, 8, 246, 63, 243, 95, 240, 255, 12, 250, 15, 240, 159, 244, 255, 15, 253, 11, 176, 223, 248, 217, 95, 255, 7, 112, 255, 255, 149, 255, 255, 3, 48, 255, 255, 81, 255, 255, 0, 0, 255, 223, 16, 255, 191, 0, 0, 251, 175, 0, 254, 127, 0 }; -/* x */ static const uint8_t Font_TTHoves_Bold_17_glyph_120[] = { 11, 9, 10, 0, 9, 160, 255, 2, 242, 175, 0, 16, 255, 9, 249, 31, 0, 0, 247, 63, 255, 7, 0, 0, 224, 255, 239, 0, 0, 0, 96, 255, 111, 0, 0, 0, 176, 255, 191, 0, 0, 0, 246, 143, 255, 6, 0, 32, 255, 10, 250, 47, 0, 176, 239, 1, 225, 191, 0 }; -/* y */ static const uint8_t Font_TTHoves_Bold_17_glyph_121[] = { 11, 13, 10, 0, 9, 224, 207, 0, 112, 255, 4, 144, 255, 2, 176, 239, 0, 48, 255, 7, 240, 159, 0, 0, 253, 13, 244, 79, 0, 0, 248, 47, 249, 14, 0, 0, 242, 143, 253, 10, 0, 0, 208, 255, 255, 4, 0, 0, 112, 255, 255, 0, 0, 0, 32, 255, 175, 0, 0, 0, 0, 252, 95, 0, 0, 0, 101, 253, 15, 0, 0, 0, 255, 255, 9, 0, 0, 0, 255, 174, 1, 0, 0 }; -/* z */ static const uint8_t Font_TTHoves_Bold_17_glyph_122[] = { 8, 9, 9, 0, 9, 245, 255, 255, 239, 245, 255, 255, 239, 98, 102, 254, 175, 0, 144, 255, 12, 0, 247, 223, 1, 80, 255, 46, 0, 243, 255, 89, 85, 246, 255, 255, 255, 246, 255, 255, 255 }; /* { */ static const uint8_t Font_TTHoves_Bold_17_glyph_123[] = { 7, 17, 7, 0, 13, 0, 16, 67, 0, 0, 245, 255, 1, 0, 254, 255, 1, 16, 255, 10, 0, 32, 255, 6, 0, 32, 255, 6, 0, 48, 255, 6, 0, 211, 255, 3, 0, 245, 110, 0, 0, 245, 175, 0, 0, 177, 255, 4, 0, 32, 255, 6, 0, 32, 255, 6, 0, 32, 255, 6, 0, 16, 255, 76, 0, 0, 253, 255, 1, 0, 178, 255, 1 }; /* | */ static const uint8_t Font_TTHoves_Bold_17_glyph_124[] = { 3, 16, 7, 2, 12, 255, 9, 255, 9, 255, 9, 255, 9, 255, 9, 255, 9, 255, 9, 255, 9, 255, 9, 255, 9, 255, 9, 255, 9, 255, 9, 255, 9, 255, 9, 255, 9 }; /* } */ static const uint8_t Font_TTHoves_Bold_17_glyph_125[] = { 7, 17, 7, 0, 13, 65, 3, 0, 0, 246, 223, 1, 0, 246, 255, 10, 0, 16, 254, 13, 0, 0, 251, 13, 0, 0, 251, 13, 0, 0, 251, 14, 0, 0, 248, 207, 0, 0, 128, 255, 0, 0, 210, 255, 0, 0, 249, 127, 0, 0, 251, 14, 0, 0, 251, 13, 0, 0, 251, 13, 0, 81, 255, 12, 0, 246, 255, 8, 0, 246, 158, 0, 0 }; /* ~ */ static const uint8_t Font_TTHoves_Bold_17_glyph_126[] = { 10, 4, 10, 0, 7, 0, 98, 2, 0, 0, 128, 255, 159, 246, 143, 242, 255, 255, 255, 79, 245, 63, 180, 239, 7 }; -/* ? */ const uint8_t Font_TTHoves_Bold_17_glyph_nonprintable[] = { 9, 12, 9, 0, 12, 255, 40, 32, 230, 255, 63, 0, 0, 16, 254, 10, 32, 39, 0, 248, 90, 213, 207, 0, 246, 255, 255, 95, 0, 249, 255, 223, 2, 96, 255, 255, 95, 0, 250, 255, 255, 47, 64, 255, 255, 255, 239, 238, 255, 255, 255, 63, 99, 255, 255, 255, 15, 48, 255, 255, 255, 15, 48, 255, 255 }; +/* ? */ const uint8_t Font_TTHoves_Bold_17_upper_glyph_nonprintable[] = { 9, 12, 9, 0, 12, 255, 40, 32, 230, 255, 63, 0, 0, 16, 254, 10, 32, 39, 0, 248, 90, 213, 207, 0, 246, 255, 255, 95, 0, 249, 255, 223, 2, 96, 255, 255, 95, 0, 250, 255, 255, 47, 64, 255, 255, 255, 239, 238, 255, 255, 255, 63, 99, 255, 255, 255, 15, 48, 255, 255, 255, 15, 48, 255, 255 }; -const uint8_t * const Font_TTHoves_Bold_17[126 + 1 - 32] = { +const uint8_t * const Font_TTHoves_Bold_17_upper[126 + 1 - 32] = { Font_TTHoves_Bold_17_glyph_32, Font_TTHoves_Bold_17_glyph_33, Font_TTHoves_Bold_17_glyph_34, @@ -170,32 +146,32 @@ const uint8_t * const Font_TTHoves_Bold_17[126 + 1 - 32] = { Font_TTHoves_Bold_17_glyph_94, Font_TTHoves_Bold_17_glyph_95, Font_TTHoves_Bold_17_glyph_96, - Font_TTHoves_Bold_17_glyph_97, - Font_TTHoves_Bold_17_glyph_98, - Font_TTHoves_Bold_17_glyph_99, - Font_TTHoves_Bold_17_glyph_100, - Font_TTHoves_Bold_17_glyph_101, - Font_TTHoves_Bold_17_glyph_102, - Font_TTHoves_Bold_17_glyph_103, - Font_TTHoves_Bold_17_glyph_104, - Font_TTHoves_Bold_17_glyph_105, - Font_TTHoves_Bold_17_glyph_106, - Font_TTHoves_Bold_17_glyph_107, - Font_TTHoves_Bold_17_glyph_108, - Font_TTHoves_Bold_17_glyph_109, - Font_TTHoves_Bold_17_glyph_110, - Font_TTHoves_Bold_17_glyph_111, - Font_TTHoves_Bold_17_glyph_112, - Font_TTHoves_Bold_17_glyph_113, - Font_TTHoves_Bold_17_glyph_114, - Font_TTHoves_Bold_17_glyph_115, - Font_TTHoves_Bold_17_glyph_116, - Font_TTHoves_Bold_17_glyph_117, - Font_TTHoves_Bold_17_glyph_118, - Font_TTHoves_Bold_17_glyph_119, - Font_TTHoves_Bold_17_glyph_120, - Font_TTHoves_Bold_17_glyph_121, - Font_TTHoves_Bold_17_glyph_122, + Font_TTHoves_Bold_17_glyph_65, // a -> A + Font_TTHoves_Bold_17_glyph_66, // b -> B + Font_TTHoves_Bold_17_glyph_67, // c -> C + Font_TTHoves_Bold_17_glyph_68, // d -> D + Font_TTHoves_Bold_17_glyph_69, // e -> E + Font_TTHoves_Bold_17_glyph_70, // f -> F + Font_TTHoves_Bold_17_glyph_71, // g -> G + Font_TTHoves_Bold_17_glyph_72, // h -> H + Font_TTHoves_Bold_17_glyph_73, // i -> I + Font_TTHoves_Bold_17_glyph_74, // j -> J + Font_TTHoves_Bold_17_glyph_75, // k -> K + Font_TTHoves_Bold_17_glyph_76, // l -> L + Font_TTHoves_Bold_17_glyph_77, // m -> M + Font_TTHoves_Bold_17_glyph_78, // n -> N + Font_TTHoves_Bold_17_glyph_79, // o -> O + Font_TTHoves_Bold_17_glyph_80, // p -> P + Font_TTHoves_Bold_17_glyph_81, // q -> Q + Font_TTHoves_Bold_17_glyph_82, // r -> R + Font_TTHoves_Bold_17_glyph_83, // s -> S + Font_TTHoves_Bold_17_glyph_84, // t -> T + Font_TTHoves_Bold_17_glyph_85, // u -> U + Font_TTHoves_Bold_17_glyph_86, // v -> V + Font_TTHoves_Bold_17_glyph_87, // w -> W + Font_TTHoves_Bold_17_glyph_88, // x -> X + Font_TTHoves_Bold_17_glyph_89, // y -> Y + Font_TTHoves_Bold_17_glyph_90, // z -> Z Font_TTHoves_Bold_17_glyph_123, Font_TTHoves_Bold_17_glyph_124, Font_TTHoves_Bold_17_glyph_125, diff --git a/core/embed/lib/fonts/font_tthoves_bold_17.h b/core/embed/lib/fonts/font_tthoves_bold_17.h index e415b9378..94ecd370d 100644 --- a/core/embed/lib/fonts/font_tthoves_bold_17.h +++ b/core/embed/lib/fonts/font_tthoves_bold_17.h @@ -1,10 +1,12 @@ +// This file is generated by core/tools/codegen/gen_font.py + #include #if TREZOR_FONT_BPP != 4 #error Wrong TREZOR_FONT_BPP (expected 4) #endif -#define Font_TTHoves_Bold_17_HEIGHT 17 -#define Font_TTHoves_Bold_17_MAX_HEIGHT 18 -#define Font_TTHoves_Bold_17_BASELINE 4 -extern const uint8_t* const Font_TTHoves_Bold_17[126 + 1 - 32]; -extern const uint8_t Font_TTHoves_Bold_17_glyph_nonprintable[]; +#define Font_TTHoves_Bold_17_upper_HEIGHT 17 +#define Font_TTHoves_Bold_17_upper_MAX_HEIGHT 18 +#define Font_TTHoves_Bold_17_upper_BASELINE 4 +extern const uint8_t* const Font_TTHoves_Bold_17_upper[126 + 1 - 32]; +extern const uint8_t Font_TTHoves_Bold_17_upper_glyph_nonprintable[]; diff --git a/core/embed/lib/fonts/font_tthoves_demibold_21.c b/core/embed/lib/fonts/font_tthoves_demibold_21.c index 4014a6fb5..de02f2ba8 100644 --- a/core/embed/lib/fonts/font_tthoves_demibold_21.c +++ b/core/embed/lib/fonts/font_tthoves_demibold_21.c @@ -1,3 +1,5 @@ +// This file is generated by core/tools/codegen/gen_font.py + #include // clang-format off diff --git a/core/embed/lib/fonts/font_tthoves_demibold_21.h b/core/embed/lib/fonts/font_tthoves_demibold_21.h index 2cc9ab3ca..bcaf66460 100644 --- a/core/embed/lib/fonts/font_tthoves_demibold_21.h +++ b/core/embed/lib/fonts/font_tthoves_demibold_21.h @@ -1,3 +1,5 @@ +// This file is generated by core/tools/codegen/gen_font.py + #include #if TREZOR_FONT_BPP != 4 diff --git a/core/embed/lib/fonts/font_tthoves_regular_21.c b/core/embed/lib/fonts/font_tthoves_regular_21.c index aceee1787..2db8aae33 100644 --- a/core/embed/lib/fonts/font_tthoves_regular_21.c +++ b/core/embed/lib/fonts/font_tthoves_regular_21.c @@ -1,3 +1,5 @@ +// This file is generated by core/tools/codegen/gen_font.py + #include // clang-format off diff --git a/core/embed/lib/fonts/font_tthoves_regular_21.h b/core/embed/lib/fonts/font_tthoves_regular_21.h index 7d1eafe2f..82e48105f 100644 --- a/core/embed/lib/fonts/font_tthoves_regular_21.h +++ b/core/embed/lib/fonts/font_tthoves_regular_21.h @@ -1,3 +1,5 @@ +// This file is generated by core/tools/codegen/gen_font.py + #include #if TREZOR_FONT_BPP != 4 diff --git a/core/embed/lib/fonts/font_unifont_bold_16.c b/core/embed/lib/fonts/font_unifont_bold_16.c index 975620b90..666d0049d 100644 --- a/core/embed/lib/fonts/font_unifont_bold_16.c +++ b/core/embed/lib/fonts/font_unifont_bold_16.c @@ -1,3 +1,5 @@ +// This file is generated by core/tools/codegen/gen_font.py + #include // clang-format off diff --git a/core/site_scons/tools.py b/core/site_scons/tools.py index 0da77e3a6..e069c20e5 100644 --- a/core/site_scons/tools.py +++ b/core/site_scons/tools.py @@ -27,11 +27,12 @@ def add_font( font_name: str, font: str | None, defines: list[str], sources: list[str] ) -> None: if font is not None: + font_filename = font.replace("_upper", "").lower() defines += [ "TREZOR_FONT_" + font_name + "_ENABLE=" + font, - "TREZOR_FONT_" + font_name + '_INCLUDE=\\"' + font.lower() + '.h\\"', + "TREZOR_FONT_" + font_name + '_INCLUDE=\\"' + font_filename + '.h\\"', ] - sourcefile = "embed/lib/fonts/" + font.lower() + ".c" + sourcefile = "embed/lib/fonts/" + font_filename + ".c" if sourcefile not in sources: sources.append(sourcefile) diff --git a/core/tools/codegen/gen_font.py b/core/tools/codegen/gen_font.py index a604bbb0a..0c3660008 100755 --- a/core/tools/codegen/gen_font.py +++ b/core/tools/codegen/gen_font.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -# script used to generate /embed/extmod/modtrezorui/font_*_*.c +# script used to generate core/embed/lib/fonts/font_*_*.c from __future__ import annotations @@ -167,12 +167,12 @@ class Glyph: advance += -bearingX bearingX = 0 else: - raise ValueError("Negative bearingX for character '%s'" % c) + raise ValueError(f"Negative bearingX for character '{c}'") bearingY = metrics.horiBearingY // 64 assert advance >= 0 and advance <= 255 assert bearingX >= 0 and bearingX <= 255 if bearingY < 0: # HACK - print("normalizing bearingY %d for '%s'" % (bearingY, c)) + print(f"normalizing bearingY {bearingY} for '{c}'") bearingY = 0 assert bearingY >= 0 and bearingY <= 255 buf = list(bitmap.buffer) @@ -184,9 +184,7 @@ class Glyph: width -= remove_left assert advance > remove_left advance -= remove_left - print( - 'Glyph "%c": removed %d pixel columns from the left' % (c, remove_left) - ) + print(f'Glyph "{c}": removed {remove_left} pixel columns from the left') return Glyph( char=c, @@ -202,17 +200,7 @@ class Glyph: def print_metrics(self) -> None: print( - 'Loaded glyph "%c" ... %d x %d @ %d grays (%d bytes, metrics: %d, %d, %d)' - % ( - self.char, - self.width, - self.rows, - self.num_grays, - len(self.buf), - self.advance, - self.bearingX, - self.bearingY, - ) + f'Loaded glyph "{self.char}" ... {self.width} x {self.rows} @ {self.num_grays} grays ({len(self.buf)} bytes, metrics: {self.advance}, {self.bearingX}, {self.bearingY})' ) def process_byte(self, b: int) -> int: @@ -222,7 +210,11 @@ class Glyph: return b def get_definition_line( - self, name_style_size: str, bpp: int, i: int | str, static: bool = True + self, + name_style_size: str, + bpp: int, + i: int | str, + static: bool = True, ) -> str: numbers = ", ".join(str(n) for n in self.to_bytes(bpp)) comment = f"/* {self.char} */" @@ -260,17 +252,25 @@ class FaceProcessor: bpp: int = 4, shaveX: int = 0, ext: str = "ttf", + gen_normal: bool = True, # generate font with all the letters + gen_upper: bool = False, # generate font with only upper-cased letters ): - print("Processing ... %s %s %s" % (name, style, size)) + if gen_normal is False and gen_upper is False: + raise ValueError( + "At least one must be selected from normal glyphs or only uppercased glyphs." + ) + print(f"Processing ... {name} {style} {size}") self.name = name self.style = style self.size = size self.bpp = bpp self.shaveX = shaveX self.ext = ext + self.gen_normal = gen_normal + self.gen_upper = gen_upper self.face = freetype.Face(str(FONTS_DIR / f"{name}-{style}.{ext}")) self.face.set_pixel_sizes(0, size) # type: ignore - self.fontname = "%s_%s_%d" % (name.lower(), style.lower(), size) + self.fontname = f"{name.lower()}_{style.lower()}_{size}" self.font_ymin = 0 self.font_ymax = 0 @@ -288,7 +288,10 @@ class FaceProcessor: def write_files(self) -> None: self.write_c_files() - self.write_foreign_json() + if self.gen_normal: + self.write_foreign_json(upper_cased=False) + if self.gen_upper: + self.write_foreign_json(upper_cased=True) if WRITE_WIDTHS: self.write_char_widths_files() @@ -296,17 +299,25 @@ class FaceProcessor: self._write_c_file() self._write_h_file() - def write_foreign_json(self) -> None: + def write_foreign_json(self, upper_cased=False) -> None: for lang, language_chars in all_languages.items(): fontdata = {} for item in language_chars: c = _normalize(item) + map_from = c + if c.islower() and upper_cased and c != "ß": + # FIXME not sure how to properly handle the german "ß" + c = c.upper() assert len(c) == 1 + assert len(map_from) == 1 self._load_char(c) glyph = Glyph.from_face(self.face, c, self.shaveX) glyph.print_metrics() - fontdata[c] = glyph.to_bytes(self.bpp).hex() - file = JSON_FONTS_DEST / f"font_{self.fontname}_{lang}.json" + fontdata[map_from] = glyph.to_bytes(self.bpp).hex() + file = ( + JSON_FONTS_DEST + / f"font_{self.fontname}{'_upper' if upper_cased else ''}_{lang}.json" + ) json_content = json.dumps(fontdata, indent=2, ensure_ascii=False) file.write_text(json_content + "\n") @@ -317,6 +328,8 @@ class FaceProcessor: # "normal" ASCII characters for i in range(MIN_GLYPH, MAX_GLYPH + 1): c = chr(i) + if c.islower() and not self.gen_normal: + c = c.upper() chars.add(c) # foreign language data for _lang, lang_chars in all_languages.items(): @@ -341,23 +354,45 @@ class FaceProcessor: def _write_c_file_content(self, f: TextIO) -> None: # Write "normal" ASCII characters for i in range(MIN_GLYPH, MAX_GLYPH + 1): - c = chr(i) - self._write_char_definition(f, c, i) + if chr(i).islower() and not self.gen_normal: + continue + self._write_char_definition(f, chr(i), i) - # Write non-printable character - f.write("\n") - nonprintable = self._get_nonprintable_definition_line() - f.write(nonprintable) + # Write nonprintable glyph + if self.gen_normal: + f.write("\n") + nonprintable = self._get_nonprintable_definition_line() + f.write(nonprintable) + if self.gen_upper: + f.write("\n") + nonprintable = self._get_nonprintable_definition_line(upper=True) + f.write(nonprintable) # Write array of all glyphs - f.write("\n") - f.write( - "const uint8_t * const Font_%s[%d + 1 - %d] = {\n" - % (self._name_style_size, MAX_GLYPH, MIN_GLYPH) - ) - for i in range(MIN_GLYPH, MAX_GLYPH + 1): - f.write(" Font_%s_glyph_%d,\n" % (self._name_style_size, i)) - f.write("};\n") + if self.gen_normal: + f.write("\n") + f.write( + f"const uint8_t * const Font_{self._name_style_size}[{MAX_GLYPH} + 1 - {MIN_GLYPH}] = {{\n" + ) + for i in range(MIN_GLYPH, MAX_GLYPH + 1): + f.write(f" Font_{self._name_style_size}_glyph_{i},\n") + f.write("};\n") + + # Write array of all glyphs for _upper version + if self.gen_upper: + f.write("\n") + f.write( + f"const uint8_t * const Font_{self._name_style_size}_upper[{MAX_GLYPH} + 1 - {MIN_GLYPH}] = {{\n" + ) + for i in range(MIN_GLYPH, MAX_GLYPH + 1): + comment = "" + if chr(i).islower(): + c_from = chr(i) + c_to = c_from.upper() + i = ord(c_to) + comment = f" // {c_from} -> {c_to}" + f.write(f" Font_{self._name_style_size}_glyph_{i},{comment}\n") + f.write("};\n") def _write_char_definition(self, f: TextIO, c: str, i: int) -> None: self._load_char(c) @@ -373,49 +408,68 @@ class FaceProcessor: self.font_ymax = max(self.font_ymax, yMax) def _write_c_file_header(self, f: TextIO) -> None: + f.write("// This file is generated by core/tools/codegen/gen_font.py\n\n") f.write("#include \n\n") f.write("// clang-format off\n\n") f.write("// - the first two bytes are width and height of the glyph\n") f.write( "// - the third, fourth and fifth bytes are advance, bearingX and bearingY of the horizontal metrics of the glyph\n" ) - f.write("// - the rest is packed %d-bit glyph data\n\n" % self.bpp) + f.write(f"// - the rest is packed {self.bpp}-bit glyph data\n\n") - def _get_nonprintable_definition_line(self) -> str: + def _get_nonprintable_definition_line(self, upper: bool = False) -> str: c = "?" self._load_char(c) glyph = Glyph.from_face(self.face, c, self.shaveX, inverse_colors=True) - return glyph.get_definition_line( - self._name_style_size, self.bpp, "nonprintable", static=False - ) + if upper: + return glyph.get_definition_line( + f"{self._name_style_size}_upper", self.bpp, "nonprintable", static=False + ) + else: + return glyph.get_definition_line( + self._name_style_size, self.bpp, "nonprintable", static=False + ) def _load_char(self, c: str) -> None: self.face.load_char(c, freetype.FT_LOAD_RENDER | freetype.FT_LOAD_TARGET_NORMAL) # type: ignore def _write_h_file(self) -> None: with open(OUT_DIR / self._h_file_name, "wt") as f: + f.write("// This file is generated by core/tools/codegen/gen_font.py\n\n") f.write("#include \n\n") - f.write("#if TREZOR_FONT_BPP != %d\n" % self.bpp) - f.write("#error Wrong TREZOR_FONT_BPP (expected %d)\n" % self.bpp) + f.write(f"#if TREZOR_FONT_BPP != {self.bpp}\n") + f.write(f"#error Wrong TREZOR_FONT_BPP (expected {self.bpp})\n") f.write("#endif\n") - - f.write("#define Font_%s_HEIGHT %d\n" % (self._name_style_size, self.size)) - f.write( - "#define Font_%s_MAX_HEIGHT %d\n" - % (self._name_style_size, self.font_ymax - self.font_ymin) - ) - f.write( - "#define Font_%s_BASELINE %d\n" - % (self._name_style_size, -self.font_ymin) - ) - f.write( - "extern const uint8_t* const Font_%s[%d + 1 - %d];\n" - % (self._name_style_size, MAX_GLYPH, MIN_GLYPH) - ) - f.write( - "extern const uint8_t Font_%s_glyph_nonprintable[];\n" - % (self._name_style_size) - ) + if self.gen_normal: + f.write(f"#define Font_{self._name_style_size}_HEIGHT {self.size}\n") + f.write( + f"#define Font_{self._name_style_size}_MAX_HEIGHT {self.font_ymax - self.font_ymin}\n" + ) + f.write( + f"#define Font_{self._name_style_size}_BASELINE {-self.font_ymin}\n" + ) + f.write( + f"extern const uint8_t* const Font_{self._name_style_size}[{MAX_GLYPH} + 1 - {MIN_GLYPH}];\n" + ) + f.write( + f"extern const uint8_t Font_{self._name_style_size}_glyph_nonprintable[];\n" + ) + if self.gen_upper: + f.write( + f"#define Font_{self._name_style_size}_upper_HEIGHT {self.size}\n" + ) + f.write( + f"#define Font_{self._name_style_size}_upper_MAX_HEIGHT {self.font_ymax - self.font_ymin}\n" + ) + f.write( + f"#define Font_{self._name_style_size}_upper_BASELINE {-self.font_ymin}\n" + ) + f.write( + f"extern const uint8_t* const Font_{self._name_style_size}_upper[{MAX_GLYPH} + 1 - {MIN_GLYPH}];\n" + ) + f.write( + f"extern const uint8_t Font_{self._name_style_size}_upper_glyph_nonprintable[];\n" + ) if __name__ == "__main__": @@ -427,12 +481,29 @@ if __name__ == "__main__": FaceProcessor("TTHoves", "Regular", 21, ext="otf").write_files() FaceProcessor("TTHoves", "DemiBold", 21, ext="otf").write_files() - FaceProcessor("TTHoves", "Bold", 17, ext="otf").write_files() + FaceProcessor( + "TTHoves", "Bold", 17, ext="otf", gen_normal=False, gen_upper=True + ).write_files() FaceProcessor("RobotoMono", "Medium", 20).write_files() - FaceProcessor("PixelOperator", "Regular", 8, bpp=1, shaveX=1).write_files() - - FaceProcessor("PixelOperator", "Bold", 8, bpp=1, shaveX=1).write_files() + FaceProcessor( + "PixelOperator", + "Regular", + 8, + bpp=1, + shaveX=1, + gen_normal=True, + gen_upper=True, + ).write_files() + FaceProcessor( + "PixelOperator", + "Bold", + 8, + bpp=1, + shaveX=1, + gen_normal=True, + gen_upper=True, + ).write_files() FaceProcessor("PixelOperatorMono", "Regular", 8, bpp=1, shaveX=1).write_files() # For model R diff --git a/core/translations/fonts/font_pixeloperator_bold_8_upper_cs.json b/core/translations/fonts/font_pixeloperator_bold_8_upper_cs.json new file mode 100644 index 000000000..6f57045bc --- /dev/null +++ b/core/translations/fonts/font_pixeloperator_bold_8_upper_cs.json @@ -0,0 +1,32 @@ +{ + "Á": "060707000718c7b3cffcc0", + "Č": "0607070007cde7b3c33780", + "Ď": "0607070007cdefb3cf3f80", + "É": "060707000718cff0f30fc0", + "Ě": "0607070007cdeff0f30fc0", + "Í": "0307050107786db0", + "Ň": "0607070007cdecfbff7cc0", + "Ó": "060707000718c7b3cf3780", + "Ř": "0607070007cdefb3cfecc0", + "Š": "0607070007cde7b0783f80", + "Ť": "0607070007cdefcc30c300", + "Ú": "060707000718ccf3cf3780", + "Ů": "06070700077b3780cf3780", + "Ý": "060707000718ccf378c300", + "Ž": "0607070007cdefc6318fc0", + "á": "060707000718c7b3cffcc0", + "č": "0607070007cde7b3c33780", + "ď": "0607070007cdefb3cf3f80", + "é": "060707000718cff0f30fc0", + "ě": "0607070007cdeff0f30fc0", + "í": "0307050107786db0", + "ň": "0607070007cdecfbff7cc0", + "ó": "060707000718c7b3cf3780", + "ř": "0607070007cdefb3cfecc0", + "š": "0607070007cde7b0783f80", + "ť": "0607070007cdefcc30c300", + "ú": "060707000718ccf3cf3780", + "ů": "06070700077b3780cf3780", + "ý": "060707000718ccf378c300", + "ž": "0607070007cdefc6318fc0" +} diff --git a/core/translations/fonts/font_pixeloperator_bold_8_upper_de.json b/core/translations/fonts/font_pixeloperator_bold_8_upper_de.json new file mode 100644 index 000000000..3f801ff00 --- /dev/null +++ b/core/translations/fonts/font_pixeloperator_bold_8_upper_de.json @@ -0,0 +1,9 @@ +{ + "Ä": "0607070007cc07b3cffcc0", + "Ö": "0607070007cc07b3cf3780", + "Ü": "0607070007cc0cf3cf3780", + "ß": "06070700077b3cf6cf3d80", + "ä": "0607070007cc07b3cffcc0", + "ö": "0607070007cc07b3cf3780", + "ü": "0607070007cc0cf3cf3780" +} diff --git a/core/translations/fonts/font_pixeloperator_bold_8_upper_es.json b/core/translations/fonts/font_pixeloperator_bold_8_upper_es.json new file mode 100644 index 000000000..acf4ba958 --- /dev/null +++ b/core/translations/fonts/font_pixeloperator_bold_8_upper_es.json @@ -0,0 +1,17 @@ +{ + "Á": "060707000718c7b3cffcc0", + "É": "060707000718cff0f30fc0", + "Í": "0307050107786db0", + "Ñ": "070707000777bb376fdbb300", + "Ó": "060707000718c7b3cf3780", + "Ú": "060707000718ccf3cf3780", + "Ü": "0607070007cc0cf3cf3780", + "á": "060707000718c7b3cffcc0", + "é": "060707000718cff0f30fc0", + "í": "0307050107786db0", + "ñ": "070707000777bb376fdbb300", + "ó": "060707000718c7b3cf3780", + "ú": "060707000718ccf3cf3780", + "ü": "0607070007cc0cf3cf3780", + "¿": "0607070006300318c33780" +} diff --git a/core/translations/fonts/font_pixeloperator_bold_8_upper_fr.json b/core/translations/fonts/font_pixeloperator_bold_8_upper_fr.json new file mode 100644 index 000000000..023e93854 --- /dev/null +++ b/core/translations/fonts/font_pixeloperator_bold_8_upper_fr.json @@ -0,0 +1,34 @@ +{ + "À": "060707000760c7b3cffcc0", + "Â": "0707070007fd0de66cdfb300", + "Æ": "0a070b00077ff30cc33cfc330cfc", + "Ç": "06080700077b3c30cde19c00", + "È": "060707000760cff0f30fc0", + "É": "060707000718cff0f30fc0", + "Ê": "06070700077b3ff0f30fc0", + "Ë": "0607070007cc0ff0f30fc0", + "Î": "0507050007f4d8c63180", + "Ï": "05070500079818c63180", + "Ô": "0707070007fd0de66cd99e00", + "Ù": "060707000760ccf3cf3780", + "Û": "06070700077b3033cf3780", + "Ü": "0607070007cc0cf3cf3780", + "Ÿ": "0607070007cc0cf378c300", + "Œ": "0a070b00077ff30cc33ccc3307fc", + "à": "060707000760c7b3cffcc0", + "â": "0707070007fd0de66cdfb300", + "æ": "0a070b00077ff30cc33cfc330cfc", + "ç": "06080700077b3c30cde19c00", + "è": "060707000760cff0f30fc0", + "é": "060707000718cff0f30fc0", + "ê": "06070700077b3ff0f30fc0", + "ë": "0607070007cc0ff0f30fc0", + "î": "0507050007f4d8c63180", + "ï": "05070500079818c63180", + "ô": "0707070007fd0de66cd99e00", + "ù": "060707000760ccf3cf3780", + "û": "06070700077b3033cf3780", + "ü": "0607070007cc0cf3cf3780", + "ÿ": "0607070007cc0cf378c300", + "œ": "0a070b00077ff30cc33ccc3307fc" +} diff --git a/core/translations/fonts/font_pixeloperator_regular_8_upper_cs.json b/core/translations/fonts/font_pixeloperator_regular_8_upper_cs.json new file mode 100644 index 000000000..373d3e813 --- /dev/null +++ b/core/translations/fonts/font_pixeloperator_regular_8_upper_cs.json @@ -0,0 +1,32 @@ +{ + "Á": "0507060007111d18fe20", + "Č": "0507060007511d1845c0", + "Ď": "0507060007513d18c7c0", + "É": "0507060007113f0e43e0", + "Ě": "0507060007513f0e43e0", + "Í": "020704010762a8", + "Ň": "050706000751239ace20", + "Ó": "0507060007111d18c5c0", + "Ř": "0507060007513d18fa20", + "Š": "0507060007511d0707c0", + "Ť": "0507060007513e421080", + "Ú": "0507060007112318c5c0", + "Ů": "0507060007228918c5c0", + "Ý": "05070600071123151080", + "Ž": "0507060007513e2223e0", + "á": "0507060007111d18fe20", + "č": "0507060007511d1845c0", + "ď": "0507060007513d18c7c0", + "é": "0507060007113f0e43e0", + "ě": "0507060007513f0e43e0", + "í": "020704010762a8", + "ň": "050706000751239ace20", + "ó": "0507060007111d18c5c0", + "ř": "0507060007513d18fa20", + "š": "0507060007511d0707c0", + "ť": "0507060007513e421080", + "ú": "0507060007112318c5c0", + "ů": "0507060007228918c5c0", + "ý": "05070600071123151080", + "ž": "0507060007513e2223e0" +} diff --git a/core/translations/fonts/font_pixeloperator_regular_8_upper_de.json b/core/translations/fonts/font_pixeloperator_regular_8_upper_de.json new file mode 100644 index 000000000..c46e747a2 --- /dev/null +++ b/core/translations/fonts/font_pixeloperator_regular_8_upper_de.json @@ -0,0 +1,9 @@ +{ + "Ä": "0507060007501d18fe20", + "Ö": "0507060007501d18c5c0", + "Ü": "0507060007502318c5c0", + "ß": "0507060007746368c6c0", + "ä": "0507060007501d18fe20", + "ö": "0507060007501d18c5c0", + "ü": "0507060007502318c5c0" +} diff --git a/core/translations/fonts/font_pixeloperator_regular_8_upper_es.json b/core/translations/fonts/font_pixeloperator_regular_8_upper_es.json new file mode 100644 index 000000000..431ec1670 --- /dev/null +++ b/core/translations/fonts/font_pixeloperator_regular_8_upper_es.json @@ -0,0 +1,17 @@ +{ + "Á": "0507060007111d18fe20", + "É": "0507060007113f0e43e0", + "Í": "020704010762a8", + "Ñ": "06070600076668b2aa6880", + "Ó": "0507060007111d18c5c0", + "Ú": "0507060007112318c5c0", + "Ü": "0507060007502318c5c0", + "á": "0507060007111d18fe20", + "é": "0507060007113f0e43e0", + "í": "020704010762a8", + "ñ": "06070600076668b2aa6880", + "ó": "0507060007111d18c5c0", + "ú": "0507060007112318c5c0", + "ü": "0507060007502318c5c0", + "¿": "050706000620088845c0" +} diff --git a/core/translations/fonts/font_pixeloperator_regular_8_upper_fr.json b/core/translations/fonts/font_pixeloperator_regular_8_upper_fr.json new file mode 100644 index 000000000..58418218c --- /dev/null +++ b/core/translations/fonts/font_pixeloperator_regular_8_upper_fr.json @@ -0,0 +1,34 @@ +{ + "À": "0507060007411d18fe20", + "Â": "0507060007229d18fe20", + "Æ": "09070a00077fc42211cf84423e", + "Ç": "0508060007746108b84c00", + "È": "0507060007413f0e43e0", + "É": "0507060007113f0e43e0", + "Ê": "050706000722bf0e43e0", + "Ë": "0507060007503f0e43e0", + "Î": "0307040007542490", + "Ï": "0307040007a12490", + "Ô": "0507060007229d18c5c0", + "Ù": "0507060007412318c5c0", + "Û": "0507060007228118c5c0", + "Ü": "0507060007502318c5c0", + "Ÿ": "05070600075023151080", + "Œ": "09070a00077fc42211c88441fe", + "à": "0507060007411d18fe20", + "â": "0507060007229d18fe20", + "æ": "09070a00077fc42211cf84423e", + "ç": "0508060007746108b84c00", + "è": "0507060007413f0e43e0", + "é": "0507060007113f0e43e0", + "ê": "050706000722bf0e43e0", + "ë": "0507060007503f0e43e0", + "î": "0307040007542490", + "ï": "0307040007a12490", + "ô": "0507060007229d18c5c0", + "ù": "0507060007412318c5c0", + "û": "0507060007228118c5c0", + "ü": "0507060007502318c5c0", + "ÿ": "05070600075023151080", + "œ": "09070a00077fc42211c88441fe" +} diff --git a/core/translations/fonts/font_tthoves_bold_17_cs.json b/core/translations/fonts/font_tthoves_bold_17_upper_cs.json similarity index 50% rename from core/translations/fonts/font_tthoves_bold_17_cs.json rename to core/translations/fonts/font_tthoves_bold_17_upper_cs.json index 6f1437b5b..75460deca 100644 --- a/core/translations/fonts/font_tthoves_bold_17_cs.json +++ b/core/translations/fonts/font_tthoves_bold_17_upper_cs.json @@ -14,19 +14,19 @@ "Ů": "0b110c01110000100000000050fe08000000b07a0e00000050ff080000000010000000fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0d0090ff01fc0e00b0ff00fa6f00f3df00f4ffbcff7f0090ffffff0c0000b4ee7c0000", "Ý": "0d100c001000000070270000000000f90c0000000040df01000000000000000000e1ff0100f2df0070ff0800fa5f0000fe1f20ff0c0000f68fa0ff040000e0fff3cf00000060ffff3f00000000fdff0b00000000f5ff0300000000e0df0000000000e0cf0000000000e0cf0000000000e0cf000000", "Ž": "0a100b0010007503760100f2bf9f000040ff0c000000000000f3ffffffcff3ffffffcfa2aaaaffaf000090ff1e0000f5ff030020ff6f0000d1ff090000fbcf000080ff1e0000f3ff9c9989f5ffffffdff5ffffffdf", - "á": "090d0a000d00004067000000f24f000000fc0700000000000000d6ef2a0080ffffef01c0ac72ff07000000ff0930ebffff0af1efbbff0af55f50ff0af2ffffff0a30fc9efa0a", - "č": "0a0d0a000d007611670000f5dd5f000080ff0800000000000000b2fe4c0040ffffff06e0ff78fe1ff36f009339f52f000000f36f008338e0ff78fe1f40ffffff0600b3fe4c00", - "ď": "0e0c0d000c000000f09ff31f000000f09ff70a000000f09fea0400b3eef79f000050ffffff9f0000e0ff78fe9f0000f36f00f39f0000f52f00f09f0000f36f00f39f0000e0ff78fe9f000050ffffff9f000000b3efb79f0000", - "é": "0a0d0a000d00003067000000e15f000000fa0800000000000000b3ee4b0040ffffff06e0cf12fa2ff3af88f96ff5ffffff7ff35f000000e0df22c91c40ffffff0600b2ee4b00", - "ě": "0a0d0a000d007611670000f5dd5f000080ff0800000000000000b3ee4b0040ffffff06e0cf12fa2ff3af88f96ff5ffffff7ff35f000000e0df22c91c40ffffff0600b2ee4b00", - "í": "050d05010d70ef01f23f00740400000000ff0800ff0800ff0800ff0800ff0800ff0800ff0800ff0800ff0800", - "ň": "090d0a010d503770170030effb080000f5bf00000000000000ffb7ef0800ffffffaf00ffbff9ff02ff0c70ff04ff0930ff05ff0830ff05ff0830ff05ff0830ff05ff0830ff05", - "ó": "0a0d0a000d00003077000000e07f000000f90900000000000000b2ee4b0040ffffff07e0ff78fe2ff36f00f36ff52f00f08ff36f00f36fe0ff78fe2f40ffffff0700b3ee4b00", - "ř": "080d07000db07ff80b10fddf000072270000000000f0affd09f0ffff09f0ff6903f0bf0000f08f0000f08f0000f08f0000f08f0000f08f0000", - "š": "090d09000d503760170020fffb090000f4bf0000000000000030eadf0600f2ffff8f00f63f80bb00f5cf58010090ffff6f000041d6ff00d61d70ff01e1fffebf0020ebdf0800", - "ť": "0a0d09000d000000d40d20ff06f80a20ff06fc0420ff060000f7ffff0500f7ffff050073ff6a020020ff06000020ff06000020ff06000020ff5b020000ffff050000d5ff0500", - "ú": "090d0a010d0000fa0c000040ef010000502700000000000000ff0830ff05ff0830ff05ff0830ff05ff0830ff05ff0930ff05ff0c60ff05fcbff9ff05f5ffffff0550fd6dff05", - "ů": "090e0a010e000001000000e49f000000baf6000000e49f00000000010000ff0830ff05ff0830ff05ff0830ff05ff0830ff05ff0930ff05ff0c60ff05fcbff9ff05f5ffffff0550fd6dff05", - "ý": "0b110a000d000020ff05000000c07f0000000072060000000000000000e0cf0070ff0490ff02b0ef0030ff07f09f0000fd0df44f0000f82ff90e0000f28ffd0a0000d0ffff04000070ffff00000020ffaf00000000fc5f00000065fd0f000000ffff09000000ffae010000", - "ž": "080d09000d60cff32e00f9ff040070470000000000f5ffffeff5ffffef6266feaf0090ff0c00f7df0150ff2e00f3ff5955f6fffffff6ffffff" + "á": "0d100d001000000040670000000000f24f0000000000fb070000000000000000000000f3ff1f00000000f8ff6f00000000fdffbf00000030ffa8ff01000080ff53ff060000e0ef00ff0c0000f39f00fb1f0000f9ffffff6f0000feffffffcf0030ff6b66c6ff0190ff050070ff07e0ff000020ff0c", + "č": "0c100c00100040376017000020fefb0a000000f4cf00000000000000000020c9df290000f5ffffff0420ffdfebff1ec0ff0700f88ff0bf00007068f37f00000000f37f00000000f0bf00008079c0ff0600f88f20ffdfdaff1e00f5ffffff040020d9df2900", + "ď": "0b100c011000761277000000f4ce7f00000060ff0a0000000000000000fcffdf290000fcffffff0600fcafdaff3f00fc0e00f6df00fc0e00b0ff01fc0e0060ff04fc0e0060ff04fc0e00b0ff01fc0e00f6df00fc9fdaff3f00fcffffff0600fcffdf290000", + "é": "09100a011000007217000000fc09000060cf00000000000000fcffffff05fcffffff05fc7f777702fc0e000000fc0e000000fcffffff00fcffffff00fc6f666600fc0e000000fc7f777702fcffffff05fcffffff05", + "ě": "09100a0110503760170020fffb090000f4cf00000000000000fcffffff05fcffffff05fc7f777702fc0e000000fc0e000000fcffffff00fcffffff00fc6f666600fc0e000000fc7f777702fcffffff05fcffffff05", + "í": "051005011000770370df00f22e00000000fc0e00fc0e00fc0e00fc0e00fc0e00fc0e00fc0e00fc0e00fc0e00fc0e00fc0e00fc0e00", + "ň": "0b100d011000740376010000e2bfaf00000040ff0c0000000000000000fccf0060ff04fcff0460ff04fcff0c60ff04fcff4f60ff04fcffcf60ff04fc7eff64ff04fc0efe6cff04fc0ef6dfff04fc0ed0ffff04fc0e50ffff04fc0e00fdff04fc0e00f4ff04", + "ó": "0d100d001000000070270000000000f90c0000000030ef010000000000000000000020c9cf19000000f5ffffef040020ffdfdbff1f00c0ff0700f8af00f0bf0000d0ff00f37f000090ff02f37f000090ff02f0bf0000d0ff00c0ff0600f8af0020ffdfdaff1f0000f5ffffef04000020d9cf190000", + "ř": "0b100c011020674047000000fbfa1d000000d1ff020000000000000000fcffff9d0000fcffffff0c00fc8f98fe5f00fc0e00f49f00fc0e00f1af00fc0e00f88f00fcffffff2f00fcffffdf0300fcafff0c0000fc0efaaf0000fc0eb0ff0900fc0e00fc9f00", + "š": "0b100b001000740476020000e1afaf00000030ff0d000000000000000000b4fe9d010060ffffff2f00f0ff79fccf00f39f00c0ff00f1ef3600000090ffffcf060000b5feff9f00000010e5ff00f65f0090ff02f2ff68f8ef0070ffffff5f0000b3fdad0300", + "ť": "0a100a0010007611670000f5dd5f000080ff08000000000000faffffffaffaffffffafa6caffac7a0050ff05000050ff05000050ff05000050ff05000050ff05000050ff05000050ff05000050ff05000050ff0500", + "ú": "0b100c01100000306700000000e16f00000000fa080000000000000000fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0d0090ff01fc0e00b0ff00fa6f00f3df00f4ffbcff7f0090ffffff0c0000b4ee7c0000", + "ů": "0b110c01110000100000000050fe08000000b07a0e00000050ff080000000010000000fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0d0090ff01fc0e00b0ff00fa6f00f3df00f4ffbcff7f0090ffffff0c0000b4ee7c0000", + "ý": "0d100c001000000070270000000000f90c0000000040df01000000000000000000e1ff0100f2df0070ff0800fa5f0000fe1f20ff0c0000f68fa0ff040000e0fff3cf00000060ffff3f00000000fdff0b00000000f5ff0300000000e0df0000000000e0cf0000000000e0cf0000000000e0cf000000", + "ž": "0a100b0010007503760100f2bf9f000040ff0c000000000000f3ffffffcff3ffffffcfa2aaaaffaf000090ff1e0000f5ff030020ff6f0000d1ff090000fbcf000080ff1e0000f3ff9c9989f5ffffffdff5ffffffdf" } diff --git a/core/translations/fonts/font_tthoves_bold_17_de.json b/core/translations/fonts/font_tthoves_bold_17_upper_de.json similarity index 54% rename from core/translations/fonts/font_tthoves_bold_17_de.json rename to core/translations/fonts/font_tthoves_bold_17_upper_de.json index 5793c03c2..f19214a69 100644 --- a/core/translations/fonts/font_tthoves_bold_17_de.json +++ b/core/translations/fonts/font_tthoves_bold_17_upper_de.json @@ -3,7 +3,7 @@ "Ö": "0d100d0010000011100100000050dff03f00000050dff03f0000000000000000000020c9cf19000000f5ffffef040020ffdfdbff1f00c0ff0700f8af00f0bf0000d0ff00f37f000090ff02f37f000090ff02f0bf0000d0ff00c0ff0600f8af0020ffdfdaff1f0000f5ffffef04000020d9cf190000", "Ü": "0b100c011000110011000000fa48ef000000fa48ef0000000000000000fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0d0090ff01fc0e00b0ff00fa6f00f3df00f4ffbcff7f0090ffffff0c0000b4ee7c0000", "ß": "090c0a010c30ebcf0700f3ffffbf00fbafd7ff03fe0d60ff05ff0bd5ff02ff1bff7f00ff1bffbf00ff0b80ff06ff0b20ff0aff0bb5ff08ff1bffff02ff1bef3b00", - "ä": "090d0a000d001100110000fc66cf0000fc66cf00000000000000d6ef2a0080ffffef01c0ac72ff07000000ff0930ebffff0af1efbbff0af55f50ff0af2ffffff0a30fc9efa0a", - "ö": "0a0d0a000d001100110000fb47ef0000fb47ef00000000000000b2ee4b0040ffffff07e0ff78fe2ff36f00f36ff52f00f08ff36f00f36fe0ff78fe2f40ffffff0700b3ee4b00", - "ü": "090d0a010d1011100100909ff30f00909ff30f000000000000ff0830ff05ff0830ff05ff0830ff05ff0830ff05ff0930ff05ff0c60ff05fcbff9ff05f5ffffff0550fd6dff05" + "ä": "0d100d0010000011001100000000fd75bf00000000fd75bf0000000000000000000000f3ff1f00000000f8ff6f00000000fdffbf00000030ffa8ff01000080ff53ff060000e0ef00ff0c0000f39f00fb1f0000f9ffffff6f0000feffffffcf0030ff6b66c6ff0190ff050070ff07e0ff000020ff0c", + "ö": "0d100d0010000011100100000050dff03f00000050dff03f0000000000000000000020c9cf19000000f5ffffef040020ffdfdbff1f00c0ff0700f8af00f0bf0000d0ff00f37f000090ff02f37f000090ff02f0bf0000d0ff00c0ff0600f8af0020ffdfdaff1f0000f5ffffef04000020d9cf190000", + "ü": "0b100c011000110011000000fa48ef000000fa48ef0000000000000000fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0d0090ff01fc0e00b0ff00fa6f00f3df00f4ffbcff7f0090ffffff0c0000b4ee7c0000" } diff --git a/core/translations/fonts/font_tthoves_bold_17_es.json b/core/translations/fonts/font_tthoves_bold_17_upper_es.json similarity index 52% rename from core/translations/fonts/font_tthoves_bold_17_es.json rename to core/translations/fonts/font_tthoves_bold_17_upper_es.json index 3146a5fbc..ee30e4c62 100644 --- a/core/translations/fonts/font_tthoves_bold_17_es.json +++ b/core/translations/fonts/font_tthoves_bold_17_upper_es.json @@ -6,12 +6,12 @@ "Ó": "0d100d001000000070270000000000f90c0000000030ef010000000000000000000020c9cf19000000f5ffffef040020ffdfdbff1f00c0ff0700f8af00f0bf0000d0ff00f37f000090ff02f37f000090ff02f0bf0000d0ff00c0ff0600f8af0020ffdfdaff1f0000f5ffffef04000020d9cf190000", "Ú": "0b100c01100000306700000000e16f00000000fa080000000000000000fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0d0090ff01fc0e00b0ff00fa6f00f3df00f4ffbcff7f0090ffffff0c0000b4ee7c0000", "Ü": "0b100c011000110011000000fa48ef000000fa48ef0000000000000000fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0d0090ff01fc0e00b0ff00fa6f00f3df00f4ffbcff7f0090ffffff0c0000b4ee7c0000", - "á": "090d0a000d00004067000000f24f000000fc0700000000000000d6ef2a0080ffffef01c0ac72ff07000000ff0930ebffff0af1efbbff0af55f50ff0af2ffffff0a30fc9efa0a", - "é": "0a0d0a000d00003067000000e15f000000fa0800000000000000b3ee4b0040ffffff06e0cf12fa2ff3af88f96ff5ffffff7ff35f000000e0df22c91c40ffffff0600b2ee4b00", - "í": "050d05010d70ef01f23f00740400000000ff0800ff0800ff0800ff0800ff0800ff0800ff0800ff0800ff0800", - "ñ": "090d0a010d007251090040ffed0d00a03fcb02000000000000ffb7ef0800ffffffaf00ffbff9ff02ff0c70ff04ff0930ff05ff0830ff05ff0830ff05ff0830ff05ff0830ff05", - "ó": "0a0d0a000d00003077000000e07f000000f90900000000000000b2ee4b0040ffffff07e0ff78fe2ff36f00f36ff52f00f08ff36f00f36fe0ff78fe2f40ffffff0700b3ee4b00", - "ú": "090d0a010d0000fa0c000040ef010000502700000000000000ff0830ff05ff0830ff05ff0830ff05ff0830ff05ff0930ff05ff0c60ff05fcbff9ff05f5ffffff0550fd6dff05", - "ü": "090d0a010d1011100100909ff30f00909ff30f000000000000ff0830ff05ff0830ff05ff0830ff05ff0830ff05ff0930ff05ff0c60ff05fcbff9ff05f5ffffff0550fd6dff05", + "á": "0d100d001000000040670000000000f24f0000000000fb070000000000000000000000f3ff1f00000000f8ff6f00000000fdffbf00000030ffa8ff01000080ff53ff060000e0ef00ff0c0000f39f00fb1f0000f9ffffff6f0000feffffffcf0030ff6b66c6ff0190ff050070ff07e0ff000020ff0c", + "é": "09100a011000007217000000fc09000060cf00000000000000fcffffff05fcffffff05fc7f777702fc0e000000fc0e000000fcffffff00fcffffff00fc6f666600fc0e000000fc7f777702fcffffff05fcffffff05", + "í": "051005011000770370df00f22e00000000fc0e00fc0e00fc0e00fc0e00fc0e00fc0e00fc0e00fc0e00fc0e00fc0e00fc0e00fc0e00", + "ñ": "0b100d011000603895010000f5ffef0000009552290000000000000000fccf0060ff04fcff0460ff04fcff0c60ff04fcff4f60ff04fcffcf60ff04fc7eff64ff04fc0efe6cff04fc0ef6dfff04fc0ed0ffff04fc0e50ffff04fc0e00fdff04fc0e00f4ff04", + "ó": "0d100d001000000070270000000000f90c0000000030ef010000000000000000000020c9cf19000000f5ffffef040020ffdfdbff1f00c0ff0700f8af00f0bf0000d0ff00f37f000090ff02f37f000090ff02f0bf0000d0ff00c0ff0600f8af0020ffdfdaff1f0000f5ffffef04000020d9cf190000", + "ú": "0b100c01100000306700000000e16f00000000fa080000000000000000fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0d0090ff01fc0e00b0ff00fa6f00f3df00f4ffbcff7f0090ffffff0c0000b4ee7c0000", + "ü": "0b100c011000110011000000fa48ef000000fa48ef0000000000000000fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0d0090ff01fc0e00b0ff00fa6f00f3df00f4ffbcff7f0090ffffff0c0000b4ee7c0000", "¿": "090d0900090090ff01000090ff01000070cc010000000000000080ee000000c0ff000010fc9f0000d0ff090000f59f000000f76f10cc08f4efc8ff07c0ffffdf0000d8df1900" } diff --git a/core/translations/fonts/font_tthoves_bold_17_fr.json b/core/translations/fonts/font_tthoves_bold_17_upper_fr.json similarity index 50% rename from core/translations/fonts/font_tthoves_bold_17_fr.json rename to core/translations/fonts/font_tthoves_bold_17_upper_fr.json index 8f5beb81a..5c3f34fa2 100644 --- a/core/translations/fonts/font_tthoves_bold_17_fr.json +++ b/core/translations/fonts/font_tthoves_bold_17_upper_fr.json @@ -15,20 +15,20 @@ "Ü": "0b100c011000110011000000fa48ef000000fa48ef0000000000000000fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0d0090ff01fc0e00b0ff00fa6f00f3df00f4ffbcff7f0090ffffff0c0000b4ee7c0000", "Ÿ": "0d100c0010000011100100000050dff03f00000050dff03f000000000000000000e1ff0100f2df0070ff0800fa5f0000fe1f20ff0c0000f68fa0ff040000e0fff3cf00000060ffff3f00000000fdff0b00000000f5ff0300000000e0df0000000000e0cf0000000000e0cf0000000000e0cf000000", "Œ": "120c12000c0020d9df97ffffff6f00f5ffffffffffff6f20ffafc8ffff777737b0ff0500f9ff000000f0bf0000f1ff000000f37f0000c0ffffff1ff47f0000b0ffffff1ff1af0000e0ff666606d0ff0300f7ff00000040ffafb8ffff77773700f7ffffffffffff6f0020dadf97ffffff6f", - "à": "090d0a000d007604000000f51e00000080bf0000000000000000d6ef2a0080ffffef01c0ac72ff07000000ff0930ebffff0af1efbbff0af55f50ff0af2ffffff0a30fc9efa0a", - "â": "090d0a000d002077020000d0ff0d0000fb77bf00000000000000d6ef2a0080ffffef01c0ac72ff07000000ff0930ebffff0af1efbbff0af55f50ff0af2ffffff0a30fc9efa0a", - "æ": "0f090f000900d7df07d6cf070080ffffefffffaf00c09c61ff8f71ff05006388ff5f55fe09a0ffffffffffff0cf39f33ff3e222202f56f70ff7f51cc04f1ffffdfffffbf0030fcbe03d7cf0800", - "ç": "0a0d0a000900a2fe4c0040ffffff05e0ff78fe1ff36f009339f52f000000f45f007227e0ef66fd1f60ffffff0700d5ff6d000000ed00000000f90b000010f70e000040cf0500", - "è": "0a0d0a000d007604000000f42f00000060cf0000000000000000b3ee4b0040ffffff06e0cf12fa2ff3af88f96ff5ffffff7ff35f000000e0df22c91c40ffffff0600b2ee4b00", - "é": "0a0d0a000d00003067000000e15f000000fa0800000000000000b3ee4b0040ffffff06e0cf12fa2ff3af88f96ff5ffffff7ff35f000000e0df22c91c40ffffff0600b2ee4b00", - "ê": "0a0d0a000d002077020000d0ff0d0000fb77bf00000000000000b3ee4b0040ffffff06e0cf12fa2ff3af88f96ff5ffffff7ff35f000000e0df22c91c40ffffff0600b2ee4b00", - "ë": "0a0d0a000d001100110000fc66cf0000fc66cf00000000000000b3ee4b0040ffffff06e0cf12fa2ff3af88f96ff5ffffff7ff35f000000e0df22c91c40ffffff0600b2ee4b00", - "î": "070d06000d30ff0c00e2bfaf00740477010000000000ff080000ff080000ff080000ff080000ff080000ff080000ff080000ff080000ff0800", - "ï": "070d06000d10011100f81aff01f81aff010000000000ff080000ff080000ff080000ff080000ff080000ff080000ff080000ff080000ff0800", - "ô": "0a0d0a000d001077020000c0ff1e0000fa69cf00000000000000b2ee4b0040ffffff07e0ff78fe2ff36f00f36ff52f00f08ff36f00f36fe0ff78fe2f40ffffff0700b3ee4b00", - "ù": "090d0a010d70ef01000000fa0a000000700700000000000000ff0830ff05ff0830ff05ff0830ff05ff0830ff05ff0930ff05ff0c60ff05fcbff9ff05f5ffffff0550fd6dff05", - "û": "090d0a010d00f5af000030effb080050377017000000000000ff0830ff05ff0830ff05ff0830ff05ff0830ff05ff0930ff05ff0c60ff05fcbff9ff05f5ffffff0550fd6dff05", - "ü": "090d0a010d1011100100909ff30f00909ff30f000000000000ff0830ff05ff0830ff05ff0830ff05ff0830ff05ff0930ff05ff0c60ff05fcbff9ff05f5ffffff0550fd6dff05", - "ÿ": "0b110a000d00100111000000f21ffb070000f21ffb0700000000000000e0cf0070ff0490ff02b0ef0030ff07f09f0000fd0df44f0000f82ff90e0000f28ffd0a0000d0ffff04000070ffff00000020ffaf00000000fc5f00000065fd0f000000ffff09000000ffae010000", - "œ": "100910000900b3ee1a91ee4b0050ffffeffeffff06e0ef87ffef13fa1ff35f00f8cf88f95ff52f00f5ffffff6ff36f00f99f000000e0ff97ffff14c90c40ffffeffeffff0600b3ee1aa2ee5b00" + "à": "0d100d0010000076040000000000f51f000000000070bf000000000000000000000000f3ff1f00000000f8ff6f00000000fdffbf00000030ffa8ff01000080ff53ff060000e0ef00ff0c0000f39f00fb1f0000f9ffffff6f0000feffffffcf0030ff6b66c6ff0190ff050070ff07e0ff000020ff0c", + "â": "0d100d0010000020770100000000d1ff0c00000000fc86af0000000000000000000000f3ff1f00000000f8ff6f00000000fdffbf00000030ffa8ff01000080ff53ff060000e0ef00ff0c0000f39f00fb1f0000f9ffffff6f0000feffffffcf0030ff6b66c6ff0190ff050070ff07e0ff000020ff0c", + "æ": "110c11000c000050ffffffffff080000c0ffffffffff080000f3bffc8f7777040000fa2ff91f0000000010ff0bf91f0000000080ff05f9ffffff0300e0ef00f9ffffff0300f6ffffff7f66660100fdffffff1f00000040ff8c88fd8f777703b0ff0300f9ffffff08f2df0000f9ffffff08", + "ç": "0c100c000c0020c9df290000f5ffffef0320ffdfebff0ec0ff0700f87ff0cf00008079f37f00000000f47f00000000f1af00006067d0ff0400f59f50ffafa7ff2f00f8ffffff040050fcff4c000000b01f0000000080cf0000000071fe00000000f26d0000", + "è": "09100a0110406700000010fe05000000f31e00000000000000fcffffff05fcffffff05fc7f777702fc0e000000fc0e000000fcffffff00fcffffff00fc6f666600fc0e000000fc7f777702fcffffff05fcffffff05", + "é": "09100a011000007217000000fc09000060cf00000000000000fcffffff05fcffffff05fc7f777702fc0e000000fc0e000000fcffffff00fcffffff00fc6f666600fc0e000000fc7f777702fcffffff05fcffffff05", + "ê": "09100a0110007037000000faff030070bff41e000000000000fcffffff05fcffffff05fc7f777702fc0e000000fc0e000000fcffffff00fcffffff00fc6f666600fc0e000000fc7f777702fcffffff05fcffffff05", + "ë": "09100a0110001110010080aff20f0080aff20f000000000000fcffffff05fcffffff05fc7f777702fc0e000000fc0e000000fcffffff00fcffffff00fc6f666600fc0e000000fc7f777702fcffffff05fcffffff05", + "î": "07100600100075060050ff6f00f33efd040000000000fc0e0000fc0e0000fc0e0000fc0e0000fc0e0000fc0e0000fc0e0000fc0e0000fc0e0000fc0e0000fc0e0000fc0e00", + "ï": "071006001010011100f40ffd05f40ffd050000000000fc0e0000fc0e0000fc0e0000fc0e0000fc0e0000fc0e0000fc0e0000fc0e0000fc0e0000fc0e0000fc0e0000fc0e00", + "ô": "0d100d0010000060570000000000f7ff0500000040dfe33f0000000000000000000020c9cf19000000f5ffffef040020ffdfdbff1f00c0ff0700f8af00f0bf0000d0ff00f37f000090ff02f37f000090ff02f0bf0000d0ff00c0ff0600f8af0020ffdfdaff1f0000f5ffffef04000020d9cf190000", + "ù": "0b100c011000750500000000f33f0000000050df000000000000000000fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0d0090ff01fc0e00b0ff00fa6f00f3df00f4ffbcff7f0090ffffff0c0000b4ee7c0000", + "û": "0b100c011000107702000000c0ff1e000000f969cf0000000000000000fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0d0090ff01fc0e00b0ff00fa6f00f3df00f4ffbcff7f0090ffffff0c0000b4ee7c0000", + "ü": "0b100c011000110011000000fa48ef000000fa48ef0000000000000000fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0c0090ff01fe0d0090ff01fc0e00b0ff00fa6f00f3df00f4ffbcff7f0090ffffff0c0000b4ee7c0000", + "ÿ": "0d100c0010000011100100000050dff03f00000050dff03f000000000000000000e1ff0100f2df0070ff0800fa5f0000fe1f20ff0c0000f68fa0ff040000e0fff3cf00000060ffff3f00000000fdff0b00000000f5ff0300000000e0df0000000000e0cf0000000000e0cf0000000000e0cf000000", + "œ": "120c12000c0020d9df97ffffff6f00f5ffffffffffff6f20ffafc8ffff777737b0ff0500f9ff000000f0bf0000f1ff000000f37f0000c0ffffff1ff47f0000b0ffffff1ff1af0000e0ff666606d0ff0300f7ff00000040ffafb8ffff77773700f7ffffffffffff6f0020dadf97ffffff6f" }