1
0
mirror of https://github.com/MarlinFirmware/Marlin.git synced 2024-11-29 23:07:42 +00:00

🩹 Fix MarlinUI UTF-8 chars (#26381)

This commit is contained in:
Giuliano Zaro 2023-11-01 01:02:11 +01:00 committed by GitHub
parent a6c8afc5a9
commit 5523c12cfd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 16 deletions

View File

@ -51,6 +51,7 @@ lcd_uint_t expand_u8str_P(char * const outstr, PGM_P const ptpl, const int8_t in
int8_t n = maxlen;
while (n > 0) {
lchar_t wc;
uint8_t *psc = (uint8_t *)p;
p = get_utf8_value_cb(p, read_byte_rom, wc);
if (!wc) break;
if (wc == '{' || wc == '~' || wc == '*') {
@ -88,20 +89,11 @@ lcd_uint_t expand_u8str_P(char * const outstr, PGM_P const ptpl, const int8_t in
n -= utf8_strlen(o);
o += strlen(o);
}
else if (wc == '@') {
*o++ = AXIS_CHAR(ind);
*o = '\0';
n--;
}
else if (wc > 255 && prop == 2) {
// Wide glyph support incomplete
*((uint16_t*)o) = wc;
o += 2;
*o = '\0';
n--;
}
else {
*o++ = wc;
if (wc == '@')
*o++ = AXIS_CHAR(ind);
else
while (psc != p) *o++ = read_byte_rom(psc++);
*o = '\0';
n--;
}

View File

@ -94,13 +94,15 @@ int pf_bsearch_r(void *userdata, size_t num_data, pf_bsearch_cb_comp_t cb_comp,
return -1;
}
/* Returns true if passed byte is first byte of UTF-8 char sequence */
// Is the passed byte the first byte of a UTF-8 char sequence?
static inline bool utf8_is_start_byte_of_char(const uint8_t b) {
return 0x80 != (b & 0xC0);
}
/* This function gets the character at the pstart position, interpreting UTF8 multibyte sequences
and returns the pointer to the next character */
/**
* Get the character at pstart, interpreting UTF8 multibyte sequences.
* Return the pointer to the next character.
*/
const uint8_t* get_utf8_value_cb(const uint8_t *pstart, read_byte_cb_t cb_read_byte, lchar_t &pval) {
uint32_t val = 0;
const uint8_t *p = pstart;