Skip to content

Commit

Permalink
🩹 Fix MarlinUI UTF-8 chars (#26381)
Browse files Browse the repository at this point in the history
  • Loading branch information
GMagician authored Nov 1, 2023
1 parent a6c8afc commit 5523c12
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 16 deletions.
18 changes: 5 additions & 13 deletions Marlin/src/lcd/lcdprint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 == '*') {
Expand Down Expand Up @@ -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--;
}
Expand Down
8 changes: 5 additions & 3 deletions Marlin/src/lcd/utf8.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 5523c12

Please sign in to comment.