From 05fc1e9344b9a12fc4d03d2f54f158d59d0d36e2 Mon Sep 17 00:00:00 2001 From: 3djc <3djc@gh.com> Date: Fri, 29 Mar 2024 10:51:23 +0100 Subject: [PATCH] fix: rework Ukrainian support --- radio/src/fonts/std/font_ua_05x07.png | Bin 571 -> 1670 bytes radio/src/fonts/std/font_ua_10x14.png | Bin 1303 -> 2436 bytes radio/src/gui/common/stdlcd/utf8.cpp | 49 ++++++++++++++++++----- radio/src/targets/taranis/CMakeLists.txt | 5 +++ radio/util/font2png.py | 2 +- 5 files changed, 45 insertions(+), 11 deletions(-) diff --git a/radio/src/fonts/std/font_ua_05x07.png b/radio/src/fonts/std/font_ua_05x07.png index 270983f82b0b39cf2d5f3a52bfeba363d45a4a66..abe0b444122d60a701d298de3d6146ff6b5c0c75 100644 GIT binary patch literal 1670 zcmbVNe{2&~9KW(awz;YJ3o@cPZ~kD6`?+h^ds$gVJJyDEjICrd67_obx*qM_yWQQ^ zZWAM9Q3)e~nGn)oFiz0K1QbTpplC3dm>B_`J{}@>a3w)3U7^JWoxx}~P>{~ZDvCoUtD6{25N+*QQ&v*YA>(jJGXm6= zQy)>JrUs}1Z45*C06P1lVLI~46=r>tR%TQ1cAl~+8#3;IZGRMV_8E8+KQ!_ zj)n}<)hNf&h!dc&t3?jFSy5})r8wb;v02$jgx?o&YSeS-7G#nda z`3lxdA_v(?^e?I_*Eblzv5iJ6Hg4*Ru2)RhPUk45Q3}XS(ROUiglr$Q(TJtM&Qa`U zqsztwK?}+bvSJ9O%bDseyG#l^Bao{HG($xhyJ?XC49N}*P&jKM&9%^i6vHX=dVwf5 za{}PFA~cFrEiv{_C=Uc4a5qA6&8V^?-x91UAb~7h#)LIp9)hfC3{hkyj39{8$ijwQ z?-rj&g27%3CA2iYu=~2!labD#kC%KtT44BsyU{3!7`7uD3XFsT6b=rfX)2H;0ZJ}U z(I-I~dPP4S7oneSm3&@54>>9BSIhDtq>Q*FP?lH!r~D>M!#yacZ(EPsnQrZXux8_| zj+I)c9}bsxX^kwD3y>AJ4FZ(n<{x4P#bfQZBT$sjBq3J%A9YcL*(l*;WD9l-;b`5m z?pW+R>o#nW2m5!5g}X(~U54X{;chFl3cpmQ9W?NWv+yi?K&!cnAUsu(P)E$a=fjxi z&Z>v2XY%=LOzmtoKKc!wNe62WFZFKygj-0}&3*dA#kZe5JMhzR=Cj7(qut5`n19)m z-P`q4YVY|`N^RY7fW7*a)U@j2<>aq5zddr{QuF?a-024K?C+D08R7|jzV5~EHt(6) zvGVk?%i;^O_fWIvrjpZ39zQpA;gutQo)PQczc07^GadW+4A8{mI#@UpD1p zbHBW|`O<^_r@Md59ai4ja_#dEMEV%G?w!_%Z`aM7KecQBf~W0D;-PV+`cV7Sp;sf% aujn|ju4^P)Px#1am@3R0s$N2z&@+hyVZqBgd*0Zvgz+XUvZe8hOdy{9JrfAZtr>qb**{Gn zI~wq}CXfdSXJlT;1Z06ld!WmUWS%0y_^k9Ts;d=rc1bOJQ9fGdWS0x+vSgHgN>~k8 zIPg2_v4KQ%+8H*LH;fsfwRcG;5ufC;4UyeOfG$3 zof2Kf8BWqh6f=9X#wB^Z-GE0MtO-XNF#Bfl$@peXAR3=c1Ge(ddf}oqGY!}}H%|km z1rP<*3N&&IIqL05S~0U;LD`GVxI}d`>zM9{nPk&+W%97skmRAo%KLg{oKXH*dRqQT zyKJ;OCI8qYB@d0ExfSLm$Q0M>v002ov JPDHLkV1mVX{z(7; diff --git a/radio/src/fonts/std/font_ua_10x14.png b/radio/src/fonts/std/font_ua_10x14.png index 78eb2b38d5b9a3cbd82c29f4ad0abc472cb3763f..e5f15ccffa0c21e4679c90778626152e1d2478a8 100644 GIT binary patch literal 2436 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 N002ovPDHLkV1l7Jj8y;t diff --git a/radio/src/gui/common/stdlcd/utf8.cpp b/radio/src/gui/common/stdlcd/utf8.cpp index 8513c0bcf77..dc07f35496a 100644 --- a/radio/src/gui/common/stdlcd/utf8.cpp +++ b/radio/src/gui/common/stdlcd/utf8.cpp @@ -117,17 +117,43 @@ static wchar_t _utf8_lut[] = { L'я', }; #elif defined(TRANSLATIONS_UA) +#if !defined(COLORLCD) +#define UTF8_SUBS_LUT +// Warning, albeit the following table looks useless +// It does translate Cyrillic to Latin +static wchar_t _utf8_substitution_lut[] = { + L'А', L'A', + L'а', L'a', + L'В', L'B', + L'С', L'C', + L'с', L'c', + L'Е', L'E', + L'е', L'e', + L'Н', L'H', + L'К', L'K', + L'М', L'M', + L'І', L'I', + L'і', L'i', + L'О', L'O', + L'о', L'o', + L'о', L'o', + L'Р', L'P', + L'р', L'p', + L'Т', L'T', + L'Х', L'X', + L'х', L'x', + L'у', L'y' +}; +#endif + static wchar_t _utf8_lut[] = { - L'А', L'Б', L'В', L'Г', L'Д', L'Е', L'Ж', - L'З', L'И', L'Й', L'К', L'Л', L'М', L'Н', - L'О', L'П', L'Р', L'С', L'Т', L'У', L'Ф', - L'Х', L'Ц', L'Ч', L'Ш', L'Щ', L'Ъ', L'Ы', - L'Ь', L'Э', L'Ю', L'Я', L'а', L'б', L'в', - L'г', L'д', L'е', L'ж', L'з', L'и', L'й', - L'к', L'л', L'м', L'н', L'о', L'п', L'р', - L'с', L'т', L'у', L'ф', L'х', L'ц', L'ч', - L'ш', L'щ', L'ъ', L'ы', L'ь', L'э', L'ю', - L'я', + L'Б', L'Г', L'Ґ', L'Д', L'Є', L'Ж', L'З', + L'И', L'Ї', L'Й', L'Л', L'П', L'У', L'Ф', + L'Ц', L'Ч', L'Ш', L'Щ', L'Ь', L'Ю', L'Я', + L'б', L'в', L'г', L'ґ', L'д', L'є', L'ж', + L'з', L'и', L'ї', L'й', L'к', L'л', L'м', + L'н', L'п', L'т', L'ф', L'ц', L'ч', L'ш', + L'щ', L'ь', L'ю', L'я' }; #elif defined(TRANSLATIONS_SE) static wchar_t _utf8_lut[] = { @@ -137,6 +163,9 @@ static wchar_t _utf8_lut[] = { #define NO_UTF8_LUT #endif +#define MAX_TRANSLATED_CHARS 107 +static_assert(sizeof(_utf8_lut) / sizeof(_utf8_lut[0]) <= MAX_TRANSLATED_CHARS, "Number of translated chars exceeds the limit"); + #if !defined(NO_UTF8_LUT) static unsigned char lookup_utf8_mapping(wchar_t w) { diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 5ca8efb04c3..b4c785f4512 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -507,6 +507,11 @@ else() message( FATAL_ERROR "Unknown CPU_TYPE_FULL" ) endif() +if(TRANSLATIONS STREQUAL UA AND NOT TARGET_FLASH_SIZE STREQUAL 1M) + set(PXX2 OFF) +endif() + + if(ENABLE_SERIAL_PASSTHROUGH) set(CLI ON "Enable CLI") endif() diff --git a/radio/util/font2png.py b/radio/util/font2png.py index b4ea283a7d2..cc0528ae6ca 100644 --- a/radio/util/font2png.py +++ b/radio/util/font2png.py @@ -17,7 +17,7 @@ chars_pl = u"""ąćęłńóśżźĄĆĘŁŃÓŚŻŹ""" chars_pt = u"""ÁáÂâÃãÀàÇçÉéÊêÍíÓóÔôÕõÚú""" chars_ru = u"""АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя""" -chars_ua = u"""АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯабвгґдеєжзиіїйклмнопрстуфхцчшщьюя""" +chars_ua = u"""БГҐДЄЖЗИЇЙЛПУФЦЧШЩЬЮЯбвгґдєжзиїйклмнптфцчшщьюя""" COUNT_EXTRA_CHARS = 21