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:
parent
a6c8afc5a9
commit
5523c12cfd
@ -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;
|
int8_t n = maxlen;
|
||||||
while (n > 0) {
|
while (n > 0) {
|
||||||
lchar_t wc;
|
lchar_t wc;
|
||||||
|
uint8_t *psc = (uint8_t *)p;
|
||||||
p = get_utf8_value_cb(p, read_byte_rom, wc);
|
p = get_utf8_value_cb(p, read_byte_rom, wc);
|
||||||
if (!wc) break;
|
if (!wc) break;
|
||||||
if (wc == '{' || wc == '~' || wc == '*') {
|
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);
|
n -= utf8_strlen(o);
|
||||||
o += 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 {
|
else {
|
||||||
*o++ = wc;
|
if (wc == '@')
|
||||||
|
*o++ = AXIS_CHAR(ind);
|
||||||
|
else
|
||||||
|
while (psc != p) *o++ = read_byte_rom(psc++);
|
||||||
*o = '\0';
|
*o = '\0';
|
||||||
n--;
|
n--;
|
||||||
}
|
}
|
||||||
|
@ -94,13 +94,15 @@ int pf_bsearch_r(void *userdata, size_t num_data, pf_bsearch_cb_comp_t cb_comp,
|
|||||||
return -1;
|
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) {
|
static inline bool utf8_is_start_byte_of_char(const uint8_t b) {
|
||||||
return 0x80 != (b & 0xC0);
|
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) {
|
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;
|
uint32_t val = 0;
|
||||||
const uint8_t *p = pstart;
|
const uint8_t *p = pstart;
|
||||||
|
Loading…
Reference in New Issue
Block a user