diff --git a/src/lv_draw/lv_draw_img.c b/src/lv_draw/lv_draw_img.c index eacaa2d23..dcaa444a8 100644 --- a/src/lv_draw/lv_draw_img.c +++ b/src/lv_draw/lv_draw_img.c @@ -51,7 +51,7 @@ void lv_draw_img(const lv_area_t * coords, const lv_area_t * mask, const void * if(src == NULL) { LV_LOG_WARN("Image draw: src is NULL"); lv_draw_rect(coords, mask, &lv_style_plain, LV_OPA_COVER); - lv_draw_label(coords, mask, &lv_style_plain, LV_OPA_COVER, "No\ndata", LV_TXT_FLAG_NONE, NULL, -1, -1, NULL); + lv_draw_label(coords, mask, &lv_style_plain, LV_OPA_COVER, "No\ndata", LV_TXT_FLAG_NONE, NULL, -1, -1, NULL, LV_BIDI_DIR_LTR); return; } @@ -61,7 +61,7 @@ void lv_draw_img(const lv_area_t * coords, const lv_area_t * mask, const void * if(res == LV_RES_INV) { LV_LOG_WARN("Image draw error"); lv_draw_rect(coords, mask, &lv_style_plain, LV_OPA_COVER); - lv_draw_label(coords, mask, &lv_style_plain, LV_OPA_COVER, "No\ndata", LV_TXT_FLAG_NONE, NULL, -1, -1, NULL); + lv_draw_label(coords, mask, &lv_style_plain, LV_OPA_COVER, "No\ndata", LV_TXT_FLAG_NONE, NULL, -1, -1, NULL, LV_BIDI_DIR_LTR); return; } } @@ -563,7 +563,7 @@ static lv_res_t lv_img_draw_core(const lv_area_t * coords, const lv_area_t * mas LV_LOG_WARN("Image draw error"); lv_draw_rect(coords, mask, &lv_style_plain, LV_OPA_COVER); lv_draw_label(coords, mask, &lv_style_plain, LV_OPA_COVER, cdsc->dec_dsc.error_msg, LV_TXT_FLAG_NONE, NULL, -1, - -1, NULL); + -1, NULL, LV_BIDI_DIR_LTR); } /* The decoder open could open the image and gave the entire uncompressed image. * Just draw it!*/ diff --git a/src/lv_draw/lv_draw_label.c b/src/lv_draw/lv_draw_label.c index 23c660396..86b486002 100644 --- a/src/lv_draw/lv_draw_label.c +++ b/src/lv_draw/lv_draw_label.c @@ -8,6 +8,7 @@ *********************/ #include "lv_draw_label.h" #include "../lv_misc/lv_math.h" +#include "../lv_misc/lv_bidi.h" /********************* * DEFINES @@ -56,7 +57,7 @@ static uint8_t hex_char_to_num(char hex); */ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale, const char * txt, lv_txt_flag_t flag, lv_point_t * offset, uint16_t sel_start, uint16_t sel_end, - lv_draw_label_hint_t * hint) + lv_draw_label_hint_t * hint, lv_bidi_dir_t bidi_dir) { const lv_font_t * font = style->text.font; lv_coord_t w; @@ -162,12 +163,18 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st } /*Write all letter of a line*/ cmd_state = CMD_STATE_WAIT; - i = line_start; + i = 0; uint32_t letter; uint32_t letter_next; - while(i < line_end) { - letter = lv_txt_encoded_next(txt, &i); - letter_next = lv_txt_encoded_next(&txt[i], NULL); + while(i < line_end - line_start) { +#if LV_USE_BIDI + char *bidi_txt = lv_draw_get_buf(line_end - line_start + 1); + lv_bidi_process_paragraph(txt + line_start, bidi_txt, line_end - line_start, bidi_dir); +#else + const char *bidi_txt = txt + line_start; +#endif + letter = lv_txt_encoded_next(bidi_txt, &i); + letter_next = lv_txt_encoded_next(&bidi_txt[i], NULL); /*Handle the re-color command*/ if((flag & LV_TXT_FLAG_RECOLOR) != 0) { @@ -190,7 +197,7 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st /*Get the parameter*/ if(i - par_start == LABEL_RECOLOR_PAR_LENGTH + 1) { char buf[LABEL_RECOLOR_PAR_LENGTH + 1]; - memcpy(buf, &txt[par_start], LABEL_RECOLOR_PAR_LENGTH); + memcpy(buf, &bidi_txt[par_start], LABEL_RECOLOR_PAR_LENGTH); buf[LABEL_RECOLOR_PAR_LENGTH] = '\0'; int r, g, b; r = (hex_char_to_num(buf[0]) << 4) + hex_char_to_num(buf[1]); @@ -213,7 +220,7 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st letter_w = lv_font_get_glyph_width(font, letter, letter_next); if(sel_start != 0xFFFF && sel_end != 0xFFFF) { - int char_ind = lv_encoded_get_char_id(txt, i); + int char_ind = lv_encoded_get_char_id(bidi_txt, i); /*Do not draw the rectangle on the character at `sel_start`.*/ if(char_ind > sel_start && char_ind <= sel_end) { lv_area_t sel_coords; diff --git a/src/lv_draw/lv_draw_label.h b/src/lv_draw/lv_draw_label.h index 2328aa2b3..39ec60607 100644 --- a/src/lv_draw/lv_draw_label.h +++ b/src/lv_draw/lv_draw_label.h @@ -14,6 +14,7 @@ extern "C" { * INCLUDES *********************/ #include "lv_draw.h" +#include "../lv_misc/lv_bidi.h" /********************* * DEFINES @@ -58,7 +59,7 @@ typedef struct { */ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale, const char * txt, lv_txt_flag_t flag, lv_point_t * offset, uint16_t sel_start, uint16_t sel_end, - lv_draw_label_hint_t * hint); + lv_draw_label_hint_t * hint, lv_bidi_dir_t bidi_dir); /********************** * MACROS diff --git a/src/lv_font/lv_font_heb_16.c b/src/lv_font/lv_font_heb_16.c new file mode 100644 index 000000000..5cff45178 --- /dev/null +++ b/src/lv_font/lv_font_heb_16.c @@ -0,0 +1,1133 @@ +#include "lvgl/lvgl.h" + +/******************************************************************************* + * Size: 16 px + * Bpp: 4 + * Opts: --font /usr/share/fonts/truetype/culmus/FrankRuehlCLM-Medium.ttf -r 0x20-0x7F -r 0x5d0-0x5ea --size 16 --format lvgl --bpp 4 --no-compress -o /home/amirgon/esp/projects/lv_mpy/lib/lv_bindings/lvgl/src/lv_font/lv_font_heb_16.c + ******************************************************************************/ + +#ifndef LV_FONT_HEB_16 +#define LV_FONT_HEB_16 1 +#endif + +#if LV_FONT_HEB_16 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = { + /* U+20 " " */ + + /* U+21 "!" */ + 0xab, 0xef, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x1, + 0x46, 0xde, 0x57, + + /* U+22 "\"" */ + 0xa, 0xc3, 0xe4, 0xf, 0x87, 0xf1, 0x1f, 0x18, + 0x90, 0x2a, 0x9, 0x20, 0x12, 0x3, 0x0, + + /* U+23 "#" */ + 0x0, 0x69, 0xc, 0x20, 0x0, 0x86, 0xe, 0x0, + 0x0, 0xa4, 0xe, 0x0, 0x3f, 0xff, 0xff, 0xf2, + 0x0, 0xe0, 0x4a, 0x0, 0x0, 0xe0, 0x68, 0x0, + 0x8f, 0xff, 0xff, 0xc0, 0x4, 0xa0, 0xa4, 0x0, + 0x6, 0x80, 0xd2, 0x0, 0x9, 0x60, 0xf0, 0x0, + + /* U+24 "$" */ + 0x0, 0xc, 0x10, 0x0, 0x1, 0xd4, 0x0, 0x6, + 0xce, 0xab, 0x1, 0xe0, 0xc4, 0xf5, 0x3e, 0xc, + 0x4f, 0x31, 0xfb, 0xd1, 0x0, 0x5, 0xff, 0xd5, + 0x0, 0x2, 0xde, 0xf6, 0x6, 0x1c, 0x1a, 0xb5, + 0xf6, 0xc1, 0x5b, 0x3f, 0x1c, 0x1a, 0x60, 0x6d, + 0xfc, 0x80, 0x0, 0xc, 0x10, 0x0, 0x0, 0x60, + 0x0, + + /* U+25 "%" */ + 0x0, 0x8e, 0x60, 0x3, 0x90, 0x0, 0x8f, 0x49, + 0x11, 0xc2, 0x0, 0x1f, 0x80, 0x7c, 0xa9, 0x0, + 0x5, 0xf1, 0xc, 0x15, 0x10, 0x0, 0x4f, 0x6, + 0x90, 0x80, 0x0, 0x0, 0xac, 0x80, 0x71, 0x2b, + 0xc3, 0x0, 0x0, 0x18, 0xe, 0x91, 0xa0, 0x0, + 0x9, 0x17, 0xf1, 0xa, 0x0, 0x2, 0x90, 0xc9, + 0x3, 0x60, 0x0, 0xa1, 0xc, 0x70, 0xa0, 0x0, + 0x39, 0x0, 0x4e, 0xc3, 0x0, + + /* U+26 "&" */ + 0x0, 0x9, 0xab, 0x20, 0x0, 0x0, 0x5, 0xc0, + 0x5b, 0x0, 0x0, 0x0, 0x8c, 0x5, 0xc0, 0x0, + 0x0, 0x7, 0xf2, 0xc6, 0x0, 0x0, 0x0, 0x3f, + 0xf7, 0x0, 0x0, 0x0, 0x8, 0xdc, 0x7, 0xcd, + 0xb0, 0xb, 0x54, 0xf5, 0x7, 0xa0, 0x3, 0xf2, + 0xb, 0xe0, 0xa1, 0x0, 0x4f, 0x60, 0x2f, 0xc6, + 0x2, 0x20, 0xee, 0x30, 0x9f, 0xa3, 0xb1, 0x3, + 0xcf, 0xc6, 0x6e, 0xe5, 0x0, + + /* U+27 "'" */ + 0xa, 0xc0, 0xf8, 0x1f, 0x12, 0xa0, 0x12, 0x0, + + /* U+28 "(" */ + 0x0, 0x6, 0x0, 0xa6, 0x6, 0xc0, 0xe, 0x60, + 0x4f, 0x30, 0x6f, 0x10, 0x7f, 0x0, 0x7f, 0x10, + 0x4f, 0x20, 0xe, 0x60, 0x7, 0xb0, 0x0, 0xb4, + 0x0, 0x7, + + /* U+29 ")" */ + 0x24, 0x0, 0x0, 0xb5, 0x0, 0x2, 0xf1, 0x0, + 0xc, 0x80, 0x0, 0x8e, 0x0, 0x7, 0xf1, 0x0, + 0x6f, 0x20, 0x7, 0xf1, 0x0, 0x8e, 0x0, 0xb, + 0x90, 0x1, 0xf2, 0x0, 0xa6, 0x0, 0x25, 0x0, + 0x0, + + /* U+2A "*" */ + 0x0, 0xb, 0x0, 0x0, 0x50, 0xb0, 0x50, 0x1c, + 0x77, 0x7b, 0x0, 0x6, 0xf4, 0x0, 0x1d, 0x57, + 0x7d, 0x0, 0x30, 0xc0, 0x40, 0x0, 0x9, 0x0, + 0x0, + + /* U+2B "+" */ + 0x0, 0x4, 0x40, 0x0, 0x0, 0x8, 0x90, 0x0, + 0x0, 0x8, 0x90, 0x0, 0x0, 0x8, 0x90, 0x0, + 0x4f, 0xff, 0xff, 0xf6, 0x2, 0x29, 0xa2, 0x21, + 0x0, 0x8, 0x90, 0x0, 0x0, 0x8, 0x90, 0x0, + + /* U+2C "," */ + 0x3b, 0xa, 0xf4, 0x4c, 0x6, 0x40, 0x10, 0x0, + + /* U+2D "-" */ + 0x19, 0x99, 0x90, 0x5f, 0xff, 0xd0, + + /* U+2E "." */ + 0x18, 0xa, 0xf3, 0x3b, 0x0, + + /* U+2F "/" */ + 0x0, 0x0, 0xe1, 0x0, 0x3, 0xb0, 0x0, 0x8, + 0x60, 0x0, 0xe, 0x10, 0x0, 0x3c, 0x0, 0x0, + 0x87, 0x0, 0x0, 0xd2, 0x0, 0x2, 0xc0, 0x0, + 0x8, 0x70, 0x0, 0xd, 0x20, 0x0, 0x2d, 0x0, + 0x0, + + /* U+30 "0" */ + 0x0, 0x8d, 0xd4, 0x0, 0x7, 0xd0, 0x4f, 0x20, + 0xe, 0x70, 0xe, 0x80, 0x3f, 0x50, 0xb, 0xd0, + 0x6f, 0x40, 0xb, 0xf0, 0x7f, 0x40, 0xb, 0xf0, + 0x6f, 0x40, 0xb, 0xf0, 0x4f, 0x50, 0xc, 0xd0, + 0xe, 0x70, 0xe, 0x80, 0x7, 0xd0, 0x4f, 0x20, + 0x0, 0x9d, 0xd4, 0x0, + + /* U+31 "1" */ + 0x0, 0xd, 0x0, 0x1, 0xbf, 0x0, 0x6d, 0xff, + 0x0, 0x0, 0xbf, 0x0, 0x0, 0xbf, 0x0, 0x0, + 0xbf, 0x0, 0x0, 0xbf, 0x0, 0x0, 0xbf, 0x0, + 0x0, 0xbf, 0x0, 0x0, 0xbf, 0x0, 0x6c, 0xff, + 0xd8, + + /* U+32 "2" */ + 0x1, 0xac, 0xd8, 0x0, 0xc2, 0x4, 0xf7, 0x2e, + 0x20, 0xe, 0xc2, 0xfc, 0x0, 0xfd, 0x7, 0x50, + 0x3f, 0x90, 0x0, 0xb, 0xe2, 0x0, 0x7, 0xf3, + 0x0, 0x3, 0xe3, 0x2, 0x1, 0xe3, 0x0, 0xb0, + 0xbd, 0xaa, 0xbd, 0x5f, 0xff, 0xff, 0xb0, + + /* U+33 "3" */ + 0x1, 0xac, 0xd8, 0x0, 0xb6, 0x4, 0xf6, 0xf, + 0xb0, 0xf, 0xa0, 0x96, 0x0, 0xf8, 0x0, 0x0, + 0x6c, 0x10, 0x7, 0xef, 0x90, 0x0, 0x0, 0x4f, + 0x91, 0x83, 0x0, 0xde, 0x6f, 0x70, 0xd, 0xd3, + 0xe0, 0x3, 0xf7, 0x5, 0xcc, 0xd7, 0x0, + + /* U+34 "4" */ + 0x0, 0x0, 0x4b, 0x0, 0x0, 0x0, 0xdb, 0x0, + 0x0, 0x6, 0xfb, 0x0, 0x0, 0xd, 0xfb, 0x0, + 0x0, 0x87, 0xfb, 0x0, 0x1, 0xd0, 0xfb, 0x0, + 0xa, 0x50, 0xfb, 0x0, 0x3c, 0x0, 0xfb, 0x0, + 0x7d, 0xdd, 0xff, 0xd1, 0x0, 0x0, 0xfb, 0x0, + 0x0, 0x1c, 0xff, 0x90, + + /* U+35 "5" */ + 0x6, 0x82, 0x5, 0x50, 0x8f, 0xff, 0xe1, 0x9, + 0xab, 0x92, 0x0, 0xa2, 0x0, 0x0, 0xc, 0xce, + 0xd7, 0x0, 0xc2, 0x6, 0xf6, 0x0, 0x0, 0xe, + 0xc1, 0xa4, 0x0, 0xde, 0x6f, 0x80, 0xe, 0xb2, + 0xf0, 0x5, 0xf4, 0x5, 0xcc, 0xc5, 0x0, + + /* U+36 "6" */ + 0x0, 0x3c, 0xcd, 0x30, 0x3, 0xf4, 0xf, 0xc0, + 0xb, 0xa0, 0xb, 0x80, 0x1f, 0x60, 0x0, 0x0, + 0x5f, 0x6b, 0xd9, 0x0, 0x7f, 0xe4, 0x5f, 0x90, + 0x6f, 0x80, 0xb, 0xf0, 0x5f, 0x60, 0xa, 0xf1, + 0x1f, 0x70, 0xb, 0xe0, 0x9, 0xd0, 0x1f, 0x60, + 0x0, 0x9d, 0xd8, 0x0, + + /* U+37 "7" */ + 0x0, 0x0, 0x0, 0x0, 0xef, 0xff, 0xfd, 0xf, + 0xaa, 0xad, 0x82, 0xa0, 0x0, 0xc2, 0x25, 0x0, + 0x3c, 0x0, 0x0, 0xa, 0x60, 0x0, 0x1, 0xf1, + 0x0, 0x0, 0x7d, 0x0, 0x0, 0xd, 0xb0, 0x0, + 0x1, 0xfa, 0x0, 0x0, 0x4f, 0xa0, 0x0, 0x2, + 0xe6, 0x0, + + /* U+38 "8" */ + 0x1, 0x9c, 0xd8, 0x0, 0xa, 0x80, 0xd, 0x60, + 0xf, 0x40, 0x9, 0xa0, 0xf, 0xb0, 0xc, 0x60, + 0x8, 0xfe, 0xb9, 0x0, 0x0, 0xdf, 0xfe, 0x30, + 0xd, 0x70, 0x6f, 0xc0, 0x5f, 0x0, 0x6, 0xf0, + 0x7e, 0x0, 0x5, 0xe0, 0x2f, 0x40, 0xb, 0x80, + 0x4, 0xcc, 0xc8, 0x0, + + /* U+39 "9" */ + 0x1, 0xbd, 0xd5, 0x0, 0xc, 0xa0, 0x4f, 0x30, + 0x4f, 0x50, 0xe, 0xa0, 0x7f, 0x30, 0xc, 0xe0, + 0x6f, 0x40, 0xd, 0xf0, 0x2f, 0xa0, 0x5f, 0xf0, + 0x5, 0xef, 0xbc, 0xf0, 0x0, 0x0, 0xd, 0xb0, + 0x9, 0x40, 0x1f, 0x60, 0x3f, 0x90, 0x9c, 0x0, + 0x8, 0xdc, 0x91, 0x0, + + /* U+3A ":" */ + 0x3b, 0xa, 0xf3, 0x18, 0x0, 0x0, 0x0, 0x1, + 0x80, 0xaf, 0x33, 0xb0, + + /* U+3B ";" */ + 0x18, 0xa, 0xf3, 0x3b, 0x0, 0x0, 0x0, 0x0, + 0x40, 0x8f, 0x26, 0xf1, 0x48, 0x5, 0x10, + + /* U+3C "<" */ + 0x0, 0x0, 0x0, 0x23, 0x0, 0x0, 0x2a, 0xf5, + 0x0, 0x2a, 0xf9, 0x10, 0x1a, 0xfa, 0x20, 0x0, + 0x5f, 0xa0, 0x0, 0x0, 0x4, 0xce, 0x70, 0x0, + 0x0, 0x4, 0xce, 0x70, 0x0, 0x0, 0x4, 0xc6, + 0x0, 0x0, 0x0, 0x0, + + /* U+3D "=" */ + 0x4f, 0xff, 0xff, 0xf6, 0x2, 0x22, 0x22, 0x21, + 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xf6, + 0x2, 0x22, 0x22, 0x21, + + /* U+3E ">" */ + 0x33, 0x0, 0x0, 0x0, 0x4f, 0xb3, 0x0, 0x0, + 0x1, 0x9f, 0xb3, 0x0, 0x0, 0x1, 0x9f, 0xb2, + 0x0, 0x0, 0x9, 0xf6, 0x0, 0x7, 0xed, 0x50, + 0x6, 0xed, 0x50, 0x0, 0x5d, 0x50, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, + + /* U+3F "?" */ + 0x7, 0xce, 0xc2, 0x5, 0xf5, 0xe, 0xe0, 0x6f, + 0x60, 0xbf, 0x10, 0x20, 0xe, 0xe0, 0x0, 0x7, + 0xf3, 0x0, 0x1, 0xe3, 0x0, 0x0, 0x48, 0x0, + 0x0, 0x0, 0x10, 0x0, 0x0, 0x55, 0x0, 0x0, + 0xd, 0xd0, 0x0, 0x0, 0x66, 0x0, 0x0, + + /* U+40 "@" */ + 0x0, 0x19, 0xbb, 0xb3, 0x0, 0x1, 0xc3, 0x0, + 0x1a, 0x40, 0xa, 0x20, 0x0, 0x0, 0xd0, 0x1a, + 0x1, 0xa7, 0x84, 0x74, 0x56, 0xe, 0x54, 0xf2, + 0x56, 0x65, 0x7e, 0x4, 0xe0, 0x64, 0x56, 0x9a, + 0x8, 0xb0, 0xa0, 0x2a, 0x8a, 0xd, 0x74, 0x60, + 0xa, 0x39, 0x84, 0xa5, 0x91, 0x1, 0xc3, 0x0, + 0x9, 0x60, 0x0, 0x19, 0xcb, 0xb4, 0x0, + + /* U+41 "A" */ + 0x0, 0x0, 0xb, 0x30, 0x0, 0x0, 0x0, 0x1, + 0xf9, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xe0, 0x0, + 0x0, 0x0, 0xc, 0xaf, 0x50, 0x0, 0x0, 0x1, + 0xd1, 0xfa, 0x0, 0x0, 0x0, 0x77, 0xb, 0xf1, + 0x0, 0x0, 0xc, 0x20, 0x5f, 0x60, 0x0, 0x2, + 0xfc, 0xcc, 0xfc, 0x0, 0x0, 0x86, 0x0, 0x9, + 0xf2, 0x0, 0xe, 0x20, 0x0, 0x2f, 0x80, 0x1d, + 0xfd, 0x40, 0x4c, 0xff, 0x80, + + /* U+42 "B" */ + 0x6d, 0xfe, 0xbc, 0xd5, 0x0, 0x2f, 0x50, 0x8, + 0xf1, 0x2, 0xf5, 0x0, 0x3f, 0x60, 0x2f, 0x50, + 0x3, 0xf4, 0x2, 0xf5, 0x0, 0xac, 0x0, 0x2f, + 0xcb, 0xed, 0x20, 0x2, 0xf5, 0x0, 0x5f, 0x50, + 0x2f, 0x50, 0x0, 0xdd, 0x2, 0xf5, 0x0, 0xb, + 0xd0, 0x2f, 0x50, 0x2, 0xf8, 0x6d, 0xfd, 0xbb, + 0xc7, 0x0, + + /* U+43 "C" */ + 0x0, 0x19, 0xba, 0xa5, 0x80, 0x1d, 0x60, 0x3, + 0xf9, 0x9, 0xd0, 0x0, 0x7, 0xa1, 0xf8, 0x0, + 0x0, 0x1a, 0x4f, 0x60, 0x0, 0x0, 0x26, 0xf5, + 0x0, 0x0, 0x0, 0x5f, 0x60, 0x0, 0x0, 0x2, + 0xf8, 0x0, 0x0, 0x9, 0xc, 0xc0, 0x0, 0x2, + 0x80, 0x2e, 0x50, 0x0, 0xb1, 0x0, 0x2a, 0xba, + 0xa2, 0x0, + + /* U+44 "D" */ + 0x6d, 0xfd, 0xab, 0xc6, 0x0, 0x2, 0xf5, 0x0, + 0x2e, 0x80, 0x2, 0xf5, 0x0, 0x7, 0xf2, 0x2, + 0xf5, 0x0, 0x2, 0xf8, 0x2, 0xf5, 0x0, 0x0, + 0xfa, 0x2, 0xf5, 0x0, 0x0, 0xfb, 0x2, 0xf5, + 0x0, 0x0, 0xfa, 0x2, 0xf5, 0x0, 0x2, 0xf7, + 0x2, 0xf5, 0x0, 0x6, 0xf2, 0x2, 0xf5, 0x0, + 0x1e, 0x80, 0x6d, 0xfd, 0xaa, 0xb5, 0x0, + + /* U+45 "E" */ + 0x6d, 0xfd, 0xbb, 0xef, 0x60, 0x2f, 0x50, 0x1, + 0xc7, 0x2, 0xf5, 0x0, 0x5, 0x80, 0x2f, 0x50, + 0x71, 0x19, 0x2, 0xf5, 0x1d, 0x20, 0x10, 0x2f, + 0xce, 0xf2, 0x0, 0x2, 0xf5, 0xd, 0x20, 0x0, + 0x2f, 0x50, 0x92, 0x9, 0x2, 0xf5, 0x0, 0x1, + 0xb0, 0x2f, 0x50, 0x0, 0xaa, 0x6d, 0xfd, 0xbb, + 0xef, 0x90, + + /* U+46 "F" */ + 0x6d, 0xfd, 0xbb, 0xff, 0x50, 0x2f, 0x50, 0x1, + 0xd6, 0x2, 0xf5, 0x0, 0x6, 0x60, 0x2f, 0x50, + 0x71, 0x37, 0x2, 0xf5, 0x1d, 0x20, 0x10, 0x2f, + 0xce, 0xf2, 0x0, 0x2, 0xf5, 0xd, 0x20, 0x0, + 0x2f, 0x50, 0x92, 0x0, 0x2, 0xf5, 0x0, 0x0, + 0x0, 0x2f, 0x50, 0x0, 0x0, 0x6d, 0xfd, 0xa0, + 0x0, 0x0, + + /* U+47 "G" */ + 0x0, 0x19, 0xbb, 0xb4, 0xa0, 0x0, 0x1d, 0x60, + 0x2, 0xeb, 0x0, 0xa, 0xc0, 0x0, 0x5, 0xc0, + 0x1, 0xf8, 0x0, 0x0, 0xb, 0x0, 0x5f, 0x50, + 0x0, 0x0, 0x0, 0x6, 0xf5, 0x0, 0x0, 0x0, + 0x0, 0x6f, 0x50, 0x0, 0xad, 0xdb, 0x33, 0xf7, + 0x0, 0x0, 0x8e, 0x0, 0xc, 0xc0, 0x0, 0x9, + 0xe0, 0x0, 0x2e, 0x60, 0x1, 0xde, 0x0, 0x0, + 0x2a, 0xba, 0xa2, 0xb0, 0x0, + + /* U+48 "H" */ + 0x6d, 0xfd, 0x80, 0x6d, 0xfd, 0x70, 0x2f, 0x50, + 0x0, 0x3f, 0x40, 0x2, 0xf5, 0x0, 0x3, 0xf4, + 0x0, 0x2f, 0x50, 0x0, 0x3f, 0x40, 0x2, 0xf5, + 0x0, 0x3, 0xf4, 0x0, 0x2f, 0xdc, 0xcc, 0xdf, + 0x40, 0x2, 0xf5, 0x0, 0x3, 0xf4, 0x0, 0x2f, + 0x50, 0x0, 0x3f, 0x40, 0x2, 0xf5, 0x0, 0x3, + 0xf4, 0x0, 0x2f, 0x50, 0x0, 0x3f, 0x40, 0x6d, + 0xfd, 0x80, 0x7d, 0xfd, 0x70, + + /* U+49 "I" */ + 0x5c, 0xfe, 0xa0, 0xf, 0x70, 0x0, 0xf7, 0x0, + 0xf, 0x70, 0x0, 0xf7, 0x0, 0xf, 0x70, 0x0, + 0xf7, 0x0, 0xf, 0x70, 0x0, 0xf7, 0x0, 0xf, + 0x70, 0x5c, 0xfe, 0xa0, + + /* U+4A "J" */ + 0x0, 0x2b, 0xff, 0xb1, 0x0, 0x0, 0xcb, 0x0, + 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xcb, 0x0, + 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xcb, 0x0, + 0x0, 0x0, 0xcb, 0x0, 0x9f, 0x40, 0xca, 0x0, + 0xef, 0x30, 0xd9, 0x0, 0xa1, 0x3, 0xf4, 0x0, + 0x2a, 0xad, 0x70, 0x0, + + /* U+4B "K" */ + 0x6d, 0xfd, 0x80, 0xbf, 0xfc, 0x10, 0x2f, 0x50, + 0x0, 0xd5, 0x0, 0x2, 0xf5, 0x0, 0x96, 0x0, + 0x0, 0x2f, 0x50, 0x78, 0x0, 0x0, 0x2, 0xf5, + 0x5f, 0x20, 0x0, 0x0, 0x2f, 0x9c, 0xfb, 0x0, + 0x0, 0x2, 0xfd, 0x17, 0xf4, 0x0, 0x0, 0x2f, + 0x50, 0xd, 0xd0, 0x0, 0x2, 0xf5, 0x0, 0x4f, + 0x80, 0x0, 0x2f, 0x50, 0x0, 0xbf, 0x20, 0x6d, + 0xfd, 0x80, 0x9e, 0xfe, 0x70, + + /* U+4C "L" */ + 0x5c, 0xfe, 0x90, 0x0, 0x0, 0x1f, 0x60, 0x0, + 0x0, 0x1, 0xf6, 0x0, 0x0, 0x0, 0x1f, 0x60, + 0x0, 0x0, 0x1, 0xf6, 0x0, 0x0, 0x0, 0x1f, + 0x60, 0x0, 0x0, 0x1, 0xf6, 0x0, 0x0, 0x10, + 0x1f, 0x60, 0x0, 0x19, 0x1, 0xf6, 0x0, 0x5, + 0x70, 0x1f, 0x60, 0x1, 0xd6, 0x5c, 0xfe, 0xbb, + 0xff, 0x50, + + /* U+4D "M" */ + 0x6d, 0xff, 0x0, 0x0, 0x5f, 0xfb, 0x10, 0x2d, + 0xf4, 0x0, 0x9, 0xdb, 0x0, 0x2, 0x9e, 0x90, + 0x0, 0xbc, 0xb0, 0x0, 0x29, 0xae, 0x0, 0x37, + 0xcb, 0x0, 0x2, 0x95, 0xf3, 0x8, 0x2c, 0xb0, + 0x0, 0x29, 0xf, 0x80, 0xb0, 0xcb, 0x0, 0x2, + 0x90, 0xbd, 0x19, 0xc, 0xb0, 0x0, 0x29, 0x5, + 0xf9, 0x40, 0xcb, 0x0, 0x2, 0x90, 0x1f, 0xf0, + 0xc, 0xb0, 0x0, 0x5c, 0x0, 0xbb, 0x0, 0xcb, + 0x0, 0x8f, 0xfc, 0x16, 0x62, 0xbf, 0xfb, 0x10, + + /* U+4E "N" */ + 0x8e, 0xf5, 0x0, 0x2d, 0xff, 0x70, 0x3f, 0xe1, + 0x0, 0xe, 0x30, 0x3, 0xbf, 0xa0, 0x0, 0xb1, + 0x0, 0x38, 0x7f, 0x40, 0xb, 0x0, 0x3, 0x80, + 0xce, 0x0, 0xb0, 0x0, 0x38, 0x2, 0xf9, 0xb, + 0x0, 0x3, 0x80, 0x8, 0xf4, 0xb0, 0x0, 0x38, + 0x0, 0xd, 0xdb, 0x0, 0x3, 0x80, 0x0, 0x3f, + 0xf0, 0x0, 0x6b, 0x0, 0x0, 0x8f, 0x0, 0x8f, + 0xfd, 0x0, 0x0, 0xd0, 0x0, + + /* U+4F "O" */ + 0x0, 0x1a, 0xbb, 0xb4, 0x0, 0x1, 0xe6, 0x0, + 0x2e, 0x50, 0xa, 0xd0, 0x0, 0x7, 0xf1, 0x1f, + 0x80, 0x0, 0x2, 0xf7, 0x4f, 0x60, 0x0, 0x0, + 0xfa, 0x6f, 0x50, 0x0, 0x0, 0xfb, 0x5f, 0x60, + 0x0, 0x0, 0xfa, 0x1f, 0x80, 0x0, 0x2, 0xf7, + 0xb, 0xd0, 0x0, 0x7, 0xf1, 0x1, 0xe6, 0x0, + 0x2e, 0x50, 0x0, 0x1a, 0xbb, 0xb4, 0x0, + + /* U+50 "P" */ + 0x6d, 0xfd, 0xbb, 0xc6, 0x0, 0x3f, 0x50, 0x5, + 0xf4, 0x3, 0xf5, 0x0, 0xf, 0x90, 0x3f, 0x50, + 0x1, 0xf9, 0x3, 0xf5, 0x0, 0x8f, 0x30, 0x3f, + 0xca, 0xba, 0x30, 0x3, 0xf5, 0x0, 0x0, 0x0, + 0x3f, 0x50, 0x0, 0x0, 0x3, 0xf5, 0x0, 0x0, + 0x0, 0x3f, 0x50, 0x0, 0x0, 0x6d, 0xfd, 0x90, + 0x0, 0x0, + + /* U+51 "Q" */ + 0x0, 0x19, 0xbb, 0xb4, 0x0, 0x1, 0xd6, 0x0, + 0x2e, 0x50, 0x9, 0xd0, 0x0, 0x6, 0xf1, 0x1f, + 0x90, 0x0, 0x2, 0xf7, 0x4f, 0x70, 0x0, 0x0, + 0xfb, 0x6f, 0x60, 0x0, 0x0, 0xfc, 0x5f, 0x60, + 0x0, 0x0, 0xfa, 0x1f, 0x82, 0xab, 0x31, 0xf6, + 0xa, 0xca, 0x1, 0xd7, 0xe0, 0x1, 0xdd, 0x0, + 0xaf, 0x40, 0x0, 0x19, 0xba, 0xec, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0x18, 0x0, 0x0, 0x0, 0x4f, + 0x8a, 0x0, 0x0, 0x0, 0xa, 0xe4, + + /* U+52 "R" */ + 0x7d, 0xfd, 0xbb, 0xc4, 0x0, 0x3, 0xf4, 0x0, + 0x7f, 0x20, 0x3, 0xf4, 0x0, 0x3f, 0x60, 0x3, + 0xf4, 0x0, 0x3f, 0x50, 0x3, 0xf4, 0x0, 0xad, + 0x0, 0x3, 0xfc, 0xce, 0x70, 0x0, 0x3, 0xf4, + 0x7, 0xd0, 0x0, 0x3, 0xf4, 0x0, 0xf6, 0x0, + 0x3, 0xf4, 0x0, 0xea, 0x3, 0x3, 0xf4, 0x0, + 0xbe, 0x55, 0x7d, 0xfd, 0x70, 0x4e, 0xc1, + + /* U+53 "S" */ + 0x1, 0xab, 0xa8, 0x84, 0xb, 0x40, 0x5, 0xf5, + 0xf, 0x0, 0x0, 0xa6, 0xf, 0x70, 0x0, 0x35, + 0xb, 0xfd, 0x84, 0x0, 0x0, 0x9e, 0xff, 0xd1, + 0x11, 0x0, 0x38, 0xf9, 0x47, 0x0, 0x0, 0x6c, + 0x4d, 0x0, 0x0, 0x3b, 0x4f, 0x90, 0x0, 0x96, + 0x48, 0x6b, 0xab, 0x70, + + /* U+54 "T" */ + 0x9f, 0xdd, 0xfd, 0xdf, 0x79, 0xa0, 0x4f, 0x30, + 0xb8, 0xa2, 0x4, 0xf3, 0x4, 0x8a, 0x0, 0x4f, + 0x30, 0x9, 0x20, 0x4, 0xf3, 0x0, 0x20, 0x0, + 0x4f, 0x30, 0x0, 0x0, 0x4, 0xf3, 0x0, 0x0, + 0x0, 0x4f, 0x30, 0x0, 0x0, 0x4, 0xf3, 0x0, + 0x0, 0x0, 0x4f, 0x30, 0x0, 0x0, 0x9d, 0xfd, + 0x80, 0x0, + + /* U+55 "U" */ + 0x8d, 0xfc, 0x60, 0x1d, 0xff, 0x70, 0x5f, 0x20, + 0x0, 0xc, 0x40, 0x5, 0xf2, 0x0, 0x0, 0xa2, + 0x0, 0x5f, 0x20, 0x0, 0x9, 0x10, 0x5, 0xf2, + 0x0, 0x0, 0x91, 0x0, 0x5f, 0x20, 0x0, 0x9, + 0x10, 0x5, 0xf2, 0x0, 0x0, 0x91, 0x0, 0x5f, + 0x20, 0x0, 0xa, 0x0, 0x4, 0xf4, 0x0, 0x0, + 0xb0, 0x0, 0xd, 0xd1, 0x0, 0x86, 0x0, 0x0, + 0x1a, 0xec, 0xc6, 0x0, 0x0, + + /* U+56 "V" */ + 0x1c, 0xff, 0xb0, 0xa, 0xff, 0x80, 0xd, 0xd0, + 0x0, 0x9, 0x70, 0x0, 0x7f, 0x20, 0x0, 0xc0, + 0x0, 0x1, 0xf8, 0x0, 0x2a, 0x0, 0x0, 0xc, + 0xe0, 0x7, 0x50, 0x0, 0x0, 0x6f, 0x30, 0xc0, + 0x0, 0x0, 0x1, 0xf9, 0x2a, 0x0, 0x0, 0x0, + 0xa, 0xe8, 0x40, 0x0, 0x0, 0x0, 0x5f, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0xf9, 0x0, 0x0, 0x0, + 0x0, 0x9, 0x40, 0x0, 0x0, + + /* U+57 "W" */ + 0xaf, 0xe9, 0x3d, 0xfd, 0x62, 0xdf, 0xd0, 0xc, + 0xc0, 0x1, 0xf7, 0x0, 0xd, 0x0, 0x7, 0xf1, + 0x0, 0xec, 0x0, 0x38, 0x0, 0x3, 0xf5, 0x2, + 0xff, 0x0, 0x74, 0x0, 0x0, 0xea, 0x6, 0x7f, + 0x50, 0xb0, 0x0, 0x0, 0x9e, 0xa, 0x1e, 0x90, + 0xb0, 0x0, 0x0, 0x5f, 0x4b, 0x9, 0xd4, 0x70, + 0x0, 0x0, 0xf, 0xc8, 0x4, 0xfb, 0x30, 0x0, + 0x0, 0xb, 0xf4, 0x0, 0xfe, 0x0, 0x0, 0x0, + 0x6, 0xf0, 0x0, 0xba, 0x0, 0x0, 0x0, 0x2, + 0xb0, 0x0, 0x66, 0x0, 0x0, + + /* U+58 "X" */ + 0xb, 0xff, 0xb0, 0x7f, 0xfb, 0x0, 0x9, 0xf3, + 0x0, 0xa6, 0x0, 0x0, 0x1e, 0xc0, 0x2b, 0x0, + 0x0, 0x0, 0x6f, 0x6b, 0x10, 0x0, 0x0, 0x0, + 0xcf, 0x70, 0x0, 0x0, 0x0, 0x4, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0xab, 0xf2, 0x0, 0x0, 0x0, + 0x49, 0x1e, 0xc0, 0x0, 0x0, 0xc, 0x0, 0x6f, + 0x50, 0x0, 0x9, 0x90, 0x0, 0xce, 0x10, 0xd, + 0xff, 0x80, 0x9e, 0xfd, 0x60, + + /* U+59 "Y" */ + 0x1c, 0xff, 0xb1, 0x3c, 0xfe, 0x50, 0xb, 0xf1, + 0x0, 0xe, 0x10, 0x0, 0x3f, 0x90, 0x5, 0x70, + 0x0, 0x0, 0xaf, 0x20, 0xc0, 0x0, 0x0, 0x2, + 0xfb, 0x68, 0x0, 0x0, 0x0, 0x8, 0xfe, 0x10, + 0x0, 0x0, 0x0, 0x1f, 0xa0, 0x0, 0x0, 0x0, + 0x0, 0xe9, 0x0, 0x0, 0x0, 0x0, 0xe, 0x90, + 0x0, 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x0, + 0x5, 0xbf, 0xeb, 0x10, 0x0, + + /* U+5A "Z" */ + 0x1f, 0xfc, 0xbc, 0xf8, 0x2f, 0x20, 0xb, 0xf1, + 0x39, 0x0, 0x3f, 0x70, 0x35, 0x0, 0xce, 0x0, + 0x0, 0x5, 0xf5, 0x0, 0x0, 0xe, 0xc0, 0x0, + 0x0, 0x7f, 0x30, 0x2, 0x1, 0xfa, 0x0, 0x1a, + 0x9, 0xf2, 0x0, 0x59, 0x2f, 0x90, 0x0, 0xc8, + 0xaf, 0xbb, 0xbe, 0xf7, + + /* U+5B "[" */ + 0x2f, 0x98, 0x2f, 0x10, 0x2f, 0x10, 0x2f, 0x10, + 0x2f, 0x10, 0x2f, 0x10, 0x2f, 0x10, 0x2f, 0x10, + 0x2f, 0x10, 0x2f, 0x10, 0x2f, 0x10, 0x1c, 0x88, + + /* U+5C "\\" */ + 0xb1, 0x0, 0x0, 0x4, 0x70, 0x0, 0x0, 0xb, + 0x0, 0x0, 0x0, 0x57, 0x0, 0x0, 0x0, 0xb0, + 0x0, 0x0, 0x5, 0x60, 0x0, 0x0, 0xb, 0x0, + 0x0, 0x0, 0x66, 0x0, 0x0, 0x0, 0xb0, 0x0, + 0x0, 0x6, 0x50, 0x0, 0x0, 0xb, 0x0, + + /* U+5D "]" */ + 0x48, 0xd8, 0x0, 0xa8, 0x0, 0xa8, 0x0, 0xa8, + 0x0, 0xa8, 0x0, 0xa8, 0x0, 0xa8, 0x0, 0xa8, + 0x0, 0xa8, 0x0, 0xa8, 0x0, 0xa8, 0x48, 0xa6, + + /* U+5E "^" */ + 0x0, 0xc, 0xd0, 0x0, 0x0, 0x3e, 0xe4, 0x0, + 0x0, 0xa8, 0x6c, 0x0, 0x2, 0xf1, 0xe, 0x30, + 0x9, 0x90, 0x7, 0xb0, 0x1f, 0x10, 0x0, 0xe2, + + /* U+5F "_" */ + 0xee, 0xee, 0xee, 0x90, + + /* U+60 "`" */ + 0x41, 0x0, 0x7c, 0x0, 0x3, 0x90, + + /* U+61 "a" */ + 0x4, 0xaa, 0xc5, 0x0, 0xf, 0x40, 0x5e, 0x0, + 0x8, 0x20, 0x5f, 0x0, 0x3, 0xa9, 0x9f, 0x0, + 0x2f, 0x30, 0x4f, 0x0, 0x5f, 0x0, 0xaf, 0x10, + 0xb, 0xdb, 0x4c, 0xd1, + + /* U+62 "b" */ + 0xaf, 0x60, 0x0, 0x0, 0xd6, 0x0, 0x0, 0xd, + 0x60, 0x0, 0x0, 0xd6, 0x0, 0x0, 0xd, 0x9a, + 0xd9, 0x0, 0xdc, 0x0, 0xe7, 0xd, 0x70, 0x9, + 0xc0, 0xd5, 0x0, 0x7e, 0xe, 0x60, 0x8, 0xc0, + 0xeb, 0x0, 0xd6, 0xb, 0x5b, 0xb7, 0x0, + + /* U+63 "c" */ + 0x3, 0xca, 0xb1, 0xe, 0x50, 0xe6, 0x6f, 0x0, + 0x82, 0x8e, 0x0, 0x0, 0x6f, 0x0, 0x2, 0x1f, + 0x70, 0x56, 0x4, 0xde, 0x90, + + /* U+64 "d" */ + 0x0, 0x3, 0xbf, 0x50, 0x0, 0x0, 0xf, 0x50, + 0x0, 0x0, 0xf, 0x50, 0x0, 0x0, 0xf, 0x50, + 0x3, 0xdc, 0x7f, 0x50, 0xe, 0x70, 0x7f, 0x50, + 0x4f, 0x10, 0xf, 0x50, 0x6f, 0x0, 0xf, 0x50, + 0x4f, 0x0, 0xf, 0x50, 0xe, 0x50, 0x6f, 0x50, + 0x3, 0xcb, 0x7f, 0xd4, + + /* U+65 "e" */ + 0x3, 0xba, 0xb1, 0x0, 0xe4, 0x7, 0xa0, 0x5f, + 0x0, 0x4f, 0x7, 0xfa, 0xab, 0xd2, 0x6f, 0x0, + 0x0, 0x1, 0xf6, 0x0, 0xa0, 0x3, 0xcc, 0xb3, + 0x0, + + /* U+66 "f" */ + 0x0, 0x7b, 0xc5, 0x3, 0xe0, 0xab, 0x8, 0xb0, + 0x11, 0x9, 0xb0, 0x0, 0x7d, 0xea, 0x10, 0x9, + 0xb0, 0x0, 0x9, 0xb0, 0x0, 0x9, 0xb0, 0x0, + 0x9, 0xb0, 0x0, 0x9, 0xb0, 0x0, 0x5e, 0xe8, + 0x0, + + /* U+67 "g" */ + 0x4, 0xb9, 0xb9, 0xe1, 0xf, 0x20, 0x7a, 0x60, + 0x2f, 0x0, 0x5e, 0x0, 0xe, 0x40, 0x9a, 0x0, + 0x9, 0xc9, 0x81, 0x0, 0x4b, 0x43, 0x31, 0x0, + 0x1d, 0xff, 0xff, 0x20, 0x5b, 0x0, 0xb, 0x60, + 0xa7, 0x0, 0xa, 0x30, 0x2b, 0xa9, 0xa6, 0x0, + + /* U+68 "h" */ + 0x8e, 0xa0, 0x0, 0x0, 0x9, 0xa0, 0x0, 0x0, + 0x9, 0xa0, 0x0, 0x0, 0x9, 0xa0, 0x0, 0x0, + 0x9, 0xa8, 0xed, 0x20, 0x9, 0xe4, 0xb, 0xb0, + 0x9, 0xc0, 0x6, 0xd0, 0x9, 0xa0, 0x6, 0xd0, + 0x9, 0xa0, 0x6, 0xd0, 0x9, 0xa0, 0x6, 0xd0, + 0x5e, 0xe6, 0x4c, 0xf8, + + /* U+69 "i" */ + 0x7, 0xa0, 0x4, 0x60, 0x0, 0x0, 0x0, 0x0, + 0x8e, 0xc0, 0x8, 0xc0, 0x8, 0xc0, 0x8, 0xc0, + 0x8, 0xc0, 0x8, 0xc0, 0x5d, 0xe7, + + /* U+6A "j" */ + 0x0, 0x7, 0xb0, 0x0, 0x46, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x9e, 0xc0, 0x0, 0x8c, 0x0, + 0x8, 0xc0, 0x0, 0x8c, 0x0, 0x8, 0xc0, 0x0, + 0x8c, 0x0, 0x8, 0xb0, 0x0, 0x8a, 0xf, 0x3a, + 0x60, 0xbb, 0xa0, + + /* U+6B "k" */ + 0x9e, 0xa0, 0x0, 0x0, 0x9, 0xa0, 0x0, 0x0, + 0x9, 0xa0, 0x0, 0x0, 0x9, 0xa0, 0x0, 0x0, + 0x9, 0xa2, 0xbf, 0xc2, 0x9, 0xa0, 0xa5, 0x0, + 0x9, 0xa8, 0x90, 0x0, 0x9, 0xfb, 0xe1, 0x0, + 0x9, 0xb0, 0xda, 0x0, 0x9, 0xa0, 0x3f, 0x50, + 0x5e, 0xe6, 0x6f, 0xf8, + + /* U+6C "l" */ + 0x8e, 0xb0, 0x8, 0xb0, 0x8, 0xb0, 0x8, 0xb0, + 0x8, 0xb0, 0x8, 0xb0, 0x8, 0xb0, 0x8, 0xb0, + 0x8, 0xb0, 0x8, 0xb0, 0x5d, 0xe7, + + /* U+6D "m" */ + 0x7e, 0xba, 0xec, 0x3b, 0xea, 0x0, 0x9, 0xf3, + 0xd, 0xe2, 0x1e, 0x60, 0x9, 0xc0, 0xa, 0xa0, + 0xc, 0x80, 0x9, 0xb0, 0xa, 0x90, 0xb, 0x80, + 0x9, 0xb0, 0xa, 0x90, 0xb, 0x80, 0x9, 0xb0, + 0xa, 0x90, 0xb, 0x80, 0x5e, 0xe6, 0x6e, 0xd5, + 0x7e, 0xd5, + + /* U+6E "n" */ + 0x7e, 0xb9, 0xed, 0x10, 0x9, 0xf4, 0xb, 0xb0, + 0x9, 0xc0, 0x6, 0xd0, 0x9, 0xa0, 0x6, 0xd0, + 0x9, 0xa0, 0x6, 0xd0, 0x9, 0xa0, 0x6, 0xd0, + 0x5e, 0xe6, 0x4c, 0xf8, + + /* U+6F "o" */ + 0x3, 0xba, 0xa0, 0x0, 0xe3, 0x8, 0xa0, 0x6f, + 0x0, 0x4f, 0x8, 0xe0, 0x3, 0xf2, 0x6f, 0x0, + 0x4f, 0x0, 0xe3, 0x9, 0xa0, 0x3, 0xba, 0xa1, + 0x0, + + /* U+70 "p" */ + 0x7e, 0xba, 0xca, 0x0, 0x9, 0xf3, 0xb, 0xa0, + 0x9, 0xc0, 0x5, 0xf0, 0x9, 0xb0, 0x4, 0xf1, + 0x9, 0xc0, 0x6, 0xf0, 0x9, 0xf2, 0xb, 0x90, + 0x9, 0xba, 0xda, 0x0, 0x9, 0xb0, 0x0, 0x0, + 0x9, 0xb0, 0x0, 0x0, 0x5d, 0xe7, 0x0, 0x0, + + /* U+71 "q" */ + 0x3, 0xca, 0x94, 0x60, 0xe, 0x40, 0x6f, 0x40, + 0x5f, 0x0, 0x1f, 0x40, 0x7e, 0x0, 0xf, 0x40, + 0x6f, 0x0, 0x1f, 0x40, 0x1f, 0x50, 0x7f, 0x40, + 0x4, 0xdc, 0x7f, 0x40, 0x0, 0x0, 0xf, 0x40, + 0x0, 0x0, 0xf, 0x40, 0x0, 0x1, 0x9f, 0xb2, + + /* U+72 "r" */ + 0x8e, 0xa5, 0xb8, 0x9, 0xc4, 0xaa, 0x9, 0xf0, + 0x0, 0x9, 0xc0, 0x0, 0x9, 0xa0, 0x0, 0x9, + 0xa0, 0x0, 0x5e, 0xe7, 0x0, + + /* U+73 "s" */ + 0x8, 0xaa, 0xb3, 0x29, 0x0, 0xb3, 0x2e, 0x73, + 0x31, 0x7, 0xef, 0xe2, 0x34, 0x2, 0xa8, 0x5c, + 0x0, 0x47, 0x59, 0xa9, 0xa1, + + /* U+74 "t" */ + 0x0, 0x90, 0x0, 0x39, 0x0, 0xb, 0x90, 0x7, + 0xed, 0xa5, 0xa, 0x90, 0x0, 0xa9, 0x0, 0xa, + 0x90, 0x0, 0xa9, 0x8, 0x9, 0xb0, 0xa0, 0x3d, + 0xd4, + + /* U+75 "u" */ + 0x8f, 0x90, 0x8e, 0xc0, 0xa, 0x90, 0x8, 0xc0, + 0xa, 0x90, 0x8, 0xc0, 0xa, 0x90, 0x8, 0xc0, + 0xa, 0x90, 0x9, 0xc0, 0x8, 0xb0, 0x1e, 0xc0, + 0x1, 0xcc, 0x99, 0xfb, + + /* U+76 "v" */ + 0x9f, 0xb2, 0x5f, 0xc0, 0xc, 0x80, 0xb, 0x0, + 0x6, 0xe0, 0x28, 0x0, 0x0, 0xf5, 0x82, 0x0, + 0x0, 0x9b, 0xa0, 0x0, 0x0, 0x3f, 0x60, 0x0, + 0x0, 0xc, 0x10, 0x0, + + /* U+77 "w" */ + 0x7f, 0xb2, 0xcf, 0x72, 0xdd, 0x10, 0xc8, 0x3, + 0xf1, 0x9, 0x20, 0x6, 0xd0, 0x8e, 0x70, 0xa0, + 0x0, 0x1f, 0x3a, 0x6c, 0x37, 0x0, 0x0, 0xbc, + 0x71, 0xfb, 0x10, 0x0, 0x6, 0xf1, 0xb, 0xc0, + 0x0, 0x0, 0x1b, 0x0, 0x56, 0x0, 0x0, + + /* U+78 "x" */ + 0x8f, 0xd3, 0xaf, 0x70, 0x9, 0xe1, 0x76, 0x0, + 0x0, 0xdc, 0x90, 0x0, 0x0, 0x4f, 0x50, 0x0, + 0x0, 0xa9, 0xe1, 0x0, 0x7, 0x60, 0xda, 0x0, + 0x9f, 0x92, 0xdf, 0xb0, + + /* U+79 "y" */ + 0x8f, 0xc2, 0x5e, 0xc0, 0xb, 0xa0, 0xb, 0x0, + 0x4, 0xf1, 0x19, 0x0, 0x0, 0xe6, 0x73, 0x0, + 0x0, 0x8d, 0xb0, 0x0, 0x0, 0x2f, 0x80, 0x0, + 0x0, 0xb, 0x20, 0x0, 0x0, 0xa, 0x0, 0x0, + 0xc6, 0x74, 0x0, 0x0, 0xad, 0x70, 0x0, 0x0, + + /* U+7A "z" */ + 0x2f, 0xba, 0xfa, 0x29, 0x6, 0xf2, 0x13, 0x1e, + 0x70, 0x0, 0xad, 0x0, 0x4, 0xf3, 0x6, 0xd, + 0x90, 0x1b, 0x6f, 0xba, 0xeb, + + /* U+7B "{" */ + 0x0, 0x99, 0x0, 0xf0, 0x1, 0xe0, 0x1, 0xe0, + 0x2, 0xd0, 0xb, 0x60, 0x8, 0x90, 0x1, 0xd0, + 0x1, 0xe0, 0x1, 0xe0, 0x0, 0xf0, 0x0, 0x69, + + /* U+7C "|" */ + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, + + /* U+7D "}" */ + 0x4c, 0x20, 0x8, 0x70, 0x7, 0x80, 0x7, 0x80, + 0x6, 0x90, 0x1, 0xc4, 0x3, 0xc2, 0x7, 0x80, + 0x7, 0x80, 0x7, 0x80, 0x9, 0x60, 0x49, 0x10, + + /* U+7E "~" */ + 0x8, 0xeb, 0x50, 0x72, 0x1a, 0x15, 0xdf, 0xb0, + 0x0, 0x0, 0x1, 0x0, + + /* U+5D0 "א" */ + 0x5, 0x0, 0x3, 0x0, 0xe, 0x80, 0x3f, 0xd3, + 0x9, 0xf5, 0x1d, 0xf7, 0x0, 0xcf, 0x37, 0x61, + 0x2, 0xde, 0xed, 0x0, 0xb, 0x82, 0xff, 0x0, + 0xd, 0xd0, 0x5f, 0xa0, 0xb, 0xf5, 0x7, 0xf5, + 0x2f, 0xf7, 0x0, 0xb5, 0x0, 0x0, 0x0, 0x0, + + /* U+5D1 "ב" */ + 0x13, 0x0, 0x0, 0x4, 0xff, 0xff, 0x70, 0x2d, + 0xee, 0xfd, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, + 0xe, 0x0, 0x0, 0x0, 0xc0, 0x0, 0x0, 0x27, + 0x2, 0xee, 0xef, 0xe7, 0x6f, 0xff, 0xff, 0x40, + + /* U+5D2 "ג" */ + 0x3, 0x0, 0x0, 0xa, 0xff, 0x30, 0x6, 0xef, + 0x60, 0x0, 0x9, 0x50, 0x0, 0x7, 0x40, 0x0, + 0x8, 0x70, 0x0, 0xd, 0xc0, 0x1e, 0xf4, 0xe1, + 0x5f, 0xd0, 0x72, + + /* U+5D3 "ד" */ + 0x22, 0x0, 0x0, 0x8, 0xff, 0xff, 0xfa, 0x4d, + 0xee, 0xef, 0x90, 0x0, 0x0, 0xb0, 0x0, 0x0, + 0x49, 0x0, 0x0, 0x5, 0xa0, 0x0, 0x0, 0x5b, + 0x0, 0x0, 0x5, 0xd0, 0x0, 0x0, 0x68, 0x0, + + /* U+5D4 "ה" */ + 0x4, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xff, 0xf0, + 0x1c, 0xee, 0xee, 0xf0, 0x0, 0x0, 0x3, 0x90, + 0x0, 0x0, 0x6, 0x80, 0xd, 0x20, 0x7, 0x90, + 0xf, 0x20, 0x6, 0xb0, 0xf, 0x20, 0x6, 0xc0, + 0x1f, 0x0, 0x7, 0x70, 0x1, 0x0, 0x0, 0x0, + + /* U+5D5 "ו" */ + 0x3, 0x0, 0x4f, 0xf7, 0x2d, 0xfd, 0x0, 0x2d, + 0x0, 0xd, 0x0, 0xd, 0x0, 0xd, 0x0, 0xd, + 0x0, 0x9, + + /* U+5D6 "ז" */ + 0x4, 0x0, 0x3, 0xff, 0xa0, 0x1d, 0xff, 0x0, + 0xa, 0x0, 0x3, 0xb0, 0x0, 0x4c, 0x0, 0x3, + 0xe0, 0x0, 0x3e, 0x0, 0x4, 0x90, 0x0, + + /* U+5D7 "ח" */ + 0x3, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xf3, + 0x1d, 0xfe, 0xee, 0xf4, 0x8, 0x60, 0x0, 0xc0, + 0xd, 0x20, 0x2, 0xc0, 0xd, 0x30, 0x2, 0xe0, + 0xe, 0x30, 0x1, 0xf0, 0xe, 0x40, 0x1, 0xf0, + 0xd, 0x0, 0x2, 0xb0, + + /* U+5D8 "ט" */ + 0x3, 0x0, 0x0, 0x0, 0x2f, 0xf3, 0x2e, 0xb0, + 0x1d, 0xf6, 0xdf, 0xf3, 0x5, 0x64, 0xb4, 0xe5, + 0xa, 0x31, 0x0, 0x75, 0xc, 0x40, 0x0, 0x74, + 0xa, 0x80, 0x0, 0xc1, 0x7, 0xfe, 0xee, 0xd0, + 0x5, 0xff, 0xff, 0x70, + + /* U+5D9 "י" */ + 0x3, 0x0, 0x4f, 0xf7, 0x2d, 0xfc, 0x0, 0x4a, + 0x0, 0x84, 0x0, 0x50, + + /* U+5DA "ך" */ + 0x22, 0x0, 0x0, 0x6, 0xff, 0xff, 0xe0, 0x3d, + 0xee, 0xed, 0x0, 0x0, 0x4, 0x60, 0x0, 0x0, + 0x56, 0x0, 0x0, 0x5, 0x60, 0x0, 0x0, 0x67, + 0x0, 0x0, 0x6, 0x80, 0x0, 0x0, 0x69, 0x0, + 0x0, 0x7, 0xa0, 0x0, 0x0, 0x7b, 0x0, 0x0, + 0x8, 0x90, 0x0, 0x0, 0x41, 0x0, + + /* U+5DB "כ" */ + 0x4, 0x0, 0x0, 0x1, 0xff, 0xff, 0x80, 0xc, + 0xee, 0xff, 0x30, 0x0, 0x0, 0xb7, 0x0, 0x0, + 0x3, 0x90, 0x0, 0x0, 0x39, 0x0, 0x0, 0x9, + 0x70, 0xde, 0xee, 0xf2, 0x3f, 0xff, 0xf7, 0x0, + + /* U+5DC "ל" */ + 0x31, 0x0, 0x0, 0x8, 0xf1, 0x0, 0x0, 0xc, + 0x0, 0x0, 0x0, 0x90, 0x0, 0x0, 0x2a, 0x0, + 0x0, 0x3, 0xff, 0xff, 0xf7, 0x2e, 0xee, 0xef, + 0xa0, 0x0, 0x0, 0x7b, 0x0, 0x0, 0x9, 0x80, + 0x0, 0x4, 0xd1, 0x0, 0x8, 0x90, 0x0, 0x5, + 0xb0, 0x0, 0x0, 0x69, 0x0, 0x0, + + /* U+5DD "ם" */ + 0x3, 0x0, 0x0, 0x0, 0xff, 0xff, 0xf8, 0xb, + 0xfe, 0xef, 0xe0, 0xa2, 0x0, 0x1e, 0xc, 0x0, + 0x0, 0xc1, 0xb0, 0x0, 0xc, 0x2c, 0x0, 0x0, + 0xd2, 0xfe, 0xee, 0xee, 0x1f, 0xff, 0xff, 0xc0, + + /* U+5DE "מ" */ + 0x3, 0x0, 0x0, 0x0, 0x2f, 0xd1, 0x8e, 0x40, + 0x1f, 0xf8, 0xff, 0xf0, 0x0, 0xa8, 0x14, 0xe5, + 0x2, 0xb0, 0x0, 0x76, 0x8, 0x60, 0x0, 0x56, + 0xc, 0x20, 0x0, 0x65, 0xe, 0x18, 0xee, 0xf3, + 0xe, 0xd, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, + + /* U+5DF "ן" */ + 0x13, 0x0, 0x5f, 0xf8, 0x2d, 0xfb, 0x0, 0x86, + 0x0, 0xb1, 0x0, 0xd0, 0x0, 0xd0, 0x0, 0xe1, + 0x0, 0xe2, 0x0, 0xe2, 0x0, 0xf3, 0x0, 0xf2, + 0x0, 0x50, + + /* U+5E0 "נ" */ + 0x3, 0x10, 0x0, 0x9f, 0xe2, 0x6, 0xef, 0x40, + 0x0, 0xa2, 0x0, 0xb, 0x10, 0x0, 0xb1, 0x0, + 0xb, 0x53, 0xee, 0xf7, 0x7f, 0xff, 0x50, + + /* U+5E1 "ס" */ + 0x3, 0x0, 0x0, 0x0, 0xff, 0xff, 0xa0, 0xc, + 0xfe, 0xef, 0x80, 0xa2, 0x0, 0x5c, 0xb, 0x0, + 0x0, 0xb2, 0xb0, 0x0, 0xc, 0xf, 0x40, 0x7, + 0xb0, 0xcf, 0xff, 0xf6, 0x2, 0xcf, 0xe8, 0x0, + + /* U+5E2 "ע" */ + 0x3, 0x0, 0x21, 0x0, 0x3f, 0xd3, 0x8f, 0xe2, + 0x1e, 0xf7, 0x5f, 0xf3, 0x0, 0xa0, 0x2, 0xb0, + 0x2, 0xd0, 0xa, 0x30, 0x0, 0xd9, 0x2e, 0x0, + 0x0, 0x2d, 0x8a, 0x0, 0x0, 0xb, 0xf6, 0x0, + 0x6, 0xdf, 0xd0, 0x0, 0x5f, 0xf9, 0x10, 0x0, + 0x59, 0x10, 0x0, 0x0, + + /* U+5E3 "ף" */ + 0x4, 0x0, 0x0, 0x1, 0xff, 0xff, 0xd1, 0xc, + 0xfe, 0xef, 0x60, 0x93, 0x0, 0x77, 0xf, 0xfa, + 0x3, 0x81, 0xb5, 0xa0, 0x49, 0x0, 0x0, 0x4, + 0x90, 0x0, 0x0, 0x5a, 0x0, 0x0, 0x5, 0xb0, + 0x0, 0x0, 0x6b, 0x0, 0x0, 0x6, 0xc0, 0x0, + 0x0, 0x7a, 0x0, 0x0, 0x4, 0x20, + + /* U+5E4 "פ" */ + 0x4, 0x0, 0x0, 0x0, 0xff, 0xff, 0xe2, 0xb, + 0xfe, 0xef, 0x90, 0x75, 0x0, 0x4c, 0xe, 0xfb, + 0x0, 0xb0, 0xc5, 0xc0, 0xc, 0x0, 0x0, 0x4, + 0xb0, 0xde, 0xee, 0xf9, 0x3f, 0xff, 0xff, 0x40, + + /* U+5E5 "ץ" */ + 0x13, 0x0, 0x40, 0x5, 0xff, 0x2e, 0xf6, 0x2d, + 0xf4, 0xaf, 0xa0, 0xd, 0x15, 0x91, 0x2, 0xa3, + 0xa0, 0x0, 0x3a, 0xc0, 0x0, 0x2, 0xf7, 0x0, + 0x0, 0x1f, 0x30, 0x0, 0x0, 0xf2, 0x0, 0x0, + 0xe, 0x30, 0x0, 0x0, 0xd4, 0x0, 0x0, 0xd, + 0x40, 0x0, 0x0, 0x60, 0x0, 0x0, + + /* U+5E6 "צ" */ + 0x3, 0x0, 0x30, 0x3, 0xff, 0x3b, 0xf9, 0x1c, + 0xe5, 0x8f, 0xc0, 0x6, 0x54, 0xa0, 0x0, 0x5c, + 0xc0, 0x0, 0x0, 0xcd, 0x50, 0x0, 0x0, 0x7f, + 0x80, 0xde, 0xee, 0xfc, 0x2f, 0xff, 0xff, 0x80, + + /* U+5E7 "ק" */ + 0x4, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xff, 0x90, + 0x1c, 0xee, 0xef, 0xf1, 0x1, 0x0, 0x2, 0xf2, + 0xe, 0x0, 0x0, 0xf1, 0xf, 0x0, 0x9, 0xb0, + 0xf, 0x2, 0xca, 0x10, 0xf, 0x1d, 0x30, 0x0, + 0xf, 0x57, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, + 0xf, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, + 0x5, 0x0, 0x0, 0x0, + + /* U+5E8 "ר" */ + 0x3, 0x0, 0x0, 0x4, 0xff, 0xff, 0xd1, 0x2d, + 0xee, 0xef, 0x50, 0x0, 0x0, 0xa6, 0x0, 0x0, + 0x8, 0x60, 0x0, 0x0, 0x86, 0x0, 0x0, 0x8, + 0x60, 0x0, 0x0, 0x86, 0x0, 0x0, 0x7, 0x40, + + /* U+5E9 "ש" */ + 0x2, 0x0, 0x20, 0x1, 0x0, 0x3f, 0xd7, 0xea, + 0x6e, 0x80, 0x2f, 0xf7, 0xef, 0x7f, 0xf0, 0x6, + 0x60, 0x86, 0x1, 0xd0, 0xb, 0x31, 0xe0, 0x9, + 0x50, 0xb, 0x46, 0x90, 0x4b, 0x0, 0x8, 0x9a, + 0x21, 0xe2, 0x0, 0x4, 0xff, 0xef, 0xa0, 0x0, + 0x0, 0xff, 0xff, 0x20, 0x0, + + /* U+5EA "ת" */ + 0x2, 0x10, 0x0, 0x0, 0x8, 0xff, 0xff, 0xd1, + 0x5, 0xef, 0xee, 0xf5, 0x0, 0xb3, 0x0, 0xa6, + 0x3, 0xc0, 0x0, 0x86, 0x4, 0xb0, 0x0, 0x86, + 0x3, 0xd0, 0x0, 0x86, 0x6e, 0xf0, 0x0, 0x86, + 0xaf, 0xb0, 0x0, 0x73 +}; + + +/*--------------------- + * GLYPH DESCRIPTION + *--------------------*/ + +static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { + {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, + {.bitmap_index = 0, .adv_w = 80, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 0, .adv_w = 64, .box_w = 2, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 11, .adv_w = 96, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 6}, + {.bitmap_index = 26, .adv_w = 128, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 66, .adv_w = 112, .box_w = 7, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 115, .adv_w = 176, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 176, .adv_w = 176, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 237, .adv_w = 48, .box_w = 3, .box_h = 5, .ofs_x = 0, .ofs_y = 6}, + {.bitmap_index = 245, .adv_w = 80, .box_w = 4, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 271, .adv_w = 80, .box_w = 5, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 304, .adv_w = 112, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 4}, + {.bitmap_index = 329, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 361, .adv_w = 64, .box_w = 3, .box_h = 5, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 369, .adv_w = 96, .box_w = 6, .box_h = 2, .ofs_x = 0, .ofs_y = 4}, + {.bitmap_index = 375, .adv_w = 64, .box_w = 3, .box_h = 3, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 380, .adv_w = 64, .box_w = 6, .box_h = 11, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 413, .adv_w = 128, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 457, .adv_w = 128, .box_w = 6, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 490, .adv_w = 128, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 529, .adv_w = 128, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 568, .adv_w = 128, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 612, .adv_w = 128, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 651, .adv_w = 128, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 695, .adv_w = 128, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 737, .adv_w = 128, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 781, .adv_w = 128, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 825, .adv_w = 64, .box_w = 3, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 837, .adv_w = 64, .box_w = 3, .box_h = 10, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 852, .adv_w = 128, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 888, .adv_w = 128, .box_w = 8, .box_h = 5, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 908, .adv_w = 128, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 944, .adv_w = 112, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 983, .adv_w = 160, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1038, .adv_w = 160, .box_w = 11, .box_h = 11, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 1099, .adv_w = 160, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1149, .adv_w = 160, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1199, .adv_w = 160, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1254, .adv_w = 160, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1304, .adv_w = 144, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1354, .adv_w = 160, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1415, .adv_w = 176, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1476, .adv_w = 80, .box_w = 5, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1504, .adv_w = 112, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1548, .adv_w = 160, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1609, .adv_w = 144, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1659, .adv_w = 208, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1731, .adv_w = 176, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1792, .adv_w = 160, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1847, .adv_w = 144, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1897, .adv_w = 160, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 1967, .adv_w = 160, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2022, .adv_w = 128, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2066, .adv_w = 144, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2116, .adv_w = 176, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2177, .adv_w = 160, .box_w = 11, .box_h = 11, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 2238, .adv_w = 208, .box_w = 14, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2315, .adv_w = 144, .box_w = 11, .box_h = 11, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 2376, .adv_w = 144, .box_w = 11, .box_h = 11, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 2437, .adv_w = 128, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2481, .adv_w = 64, .box_w = 4, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2505, .adv_w = 128, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2544, .adv_w = 64, .box_w = 4, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2568, .adv_w = 128, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = 5}, + {.bitmap_index = 2592, .adv_w = 112, .box_w = 7, .box_h = 1, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 2596, .adv_w = 64, .box_w = 4, .box_h = 3, .ofs_x = 0, .ofs_y = 8}, + {.bitmap_index = 2602, .adv_w = 112, .box_w = 8, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2630, .adv_w = 112, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2669, .adv_w = 96, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2690, .adv_w = 128, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2734, .adv_w = 112, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2759, .adv_w = 64, .box_w = 6, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2792, .adv_w = 112, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 2832, .adv_w = 128, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2876, .adv_w = 64, .box_w = 4, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2898, .adv_w = 64, .box_w = 5, .box_h = 14, .ofs_x = -2, .ofs_y = -3}, + {.bitmap_index = 2933, .adv_w = 128, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2977, .adv_w = 64, .box_w = 4, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2999, .adv_w = 192, .box_w = 12, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3041, .adv_w = 128, .box_w = 8, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3069, .adv_w = 112, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3094, .adv_w = 128, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 3134, .adv_w = 112, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 3174, .adv_w = 96, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3195, .adv_w = 96, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3216, .adv_w = 80, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3241, .adv_w = 128, .box_w = 8, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3269, .adv_w = 112, .box_w = 8, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3297, .adv_w = 160, .box_w = 11, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3336, .adv_w = 112, .box_w = 8, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3364, .adv_w = 112, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 3404, .adv_w = 96, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3425, .adv_w = 64, .box_w = 4, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3449, .adv_w = 128, .box_w = 2, .box_h = 11, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 3460, .adv_w = 64, .box_w = 4, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3484, .adv_w = 128, .box_w = 8, .box_h = 3, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 3496, .adv_w = 128, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3536, .adv_w = 112, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3568, .adv_w = 96, .box_w = 6, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3595, .adv_w = 112, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3627, .adv_w = 128, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3667, .adv_w = 80, .box_w = 4, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3685, .adv_w = 80, .box_w = 5, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3708, .adv_w = 128, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3744, .adv_w = 128, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3780, .adv_w = 64, .box_w = 4, .box_h = 6, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 3792, .adv_w = 112, .box_w = 7, .box_h = 13, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 3838, .adv_w = 112, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3870, .adv_w = 112, .box_w = 7, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3916, .adv_w = 112, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3948, .adv_w = 128, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3988, .adv_w = 64, .box_w = 4, .box_h = 13, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 4014, .adv_w = 80, .box_w = 5, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4037, .adv_w = 112, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4069, .adv_w = 128, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 4113, .adv_w = 112, .box_w = 7, .box_h = 13, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 4159, .adv_w = 112, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4191, .adv_w = 112, .box_w = 7, .box_h = 13, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 4237, .adv_w = 112, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4269, .adv_w = 128, .box_w = 8, .box_h = 13, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 4321, .adv_w = 112, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4353, .adv_w = 160, .box_w = 10, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4398, .adv_w = 128, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + + + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 32, .range_length = 95, .glyph_id_start = 1, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + }, + { + .range_start = 1488, .range_length = 27, .glyph_id_start = 96, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + } +}; + +/*----------------- + * KERNING + *----------------*/ + + +/*Pair left and right glyphs for kerning*/ +static const uint8_t kern_pair_glyph_ids[] = +{ + 13, 18, + 14, 34, + 14, 53, + 14, 55, + 14, 56, + 14, 58, + 15, 18, + 17, 18, + 17, 21, + 17, 24, + 18, 13, + 18, 15, + 18, 17, + 18, 18, + 18, 19, + 18, 20, + 18, 21, + 18, 22, + 18, 23, + 18, 24, + 18, 25, + 18, 26, + 19, 18, + 19, 21, + 19, 24, + 20, 18, + 20, 21, + 20, 24, + 21, 18, + 21, 21, + 21, 24, + 22, 18, + 22, 21, + 22, 24, + 23, 18, + 23, 21, + 23, 24, + 24, 13, + 24, 15, + 24, 18, + 24, 19, + 24, 20, + 24, 21, + 24, 22, + 24, 23, + 24, 24, + 24, 25, + 24, 27, + 24, 28, + 25, 18, + 25, 21, + 25, 24, + 26, 18, + 26, 24 +}; + +/* Kerning between the respective left and right glyphs + * 4.4 format which needs to scaled with `kern_scale`*/ +static const int8_t kern_pair_values[] = +{ + -7, -1, -16, -12, -9, -19, -9, -11, + 1, -2, -5, -5, -11, -7, 0, -6, + -12, -6, -11, -18, -7, -5, -8, 1, + -3, -10, 0, -6, -7, 3, -10, -13, + 1, -8, -8, 2, -4, -15, -15, -8, + -7, -7, -16, -8, -8, -4, -8, -16, + -16, -9, 2, -5, -10, -2 +}; + +/*Collect the kern pair's data in one place*/ +static const lv_font_fmt_txt_kern_pair_t kern_pairs = +{ + .glyph_ids = kern_pair_glyph_ids, + .values = kern_pair_values, + .pair_cnt = 54, + .glyph_ids_size = 0 +}; + +/*-------------------- + * ALL CUSTOM DATA + *--------------------*/ + +/*Store all the custom data of the font*/ +static lv_font_fmt_txt_dsc_t font_dsc = { + .glyph_bitmap = gylph_bitmap, + .glyph_dsc = glyph_dsc, + .cmaps = cmaps, + .kern_dsc = &kern_pairs, + .kern_scale = 16, + .cmap_num = 2, + .bpp = 4, + .kern_classes = 0, + .bitmap_format = 0 +}; + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +lv_font_t lv_font_heb_16 = { + .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ + .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ + .line_height = 17, /*The maximum line height required by the font*/ + .base_line = 4, /*Baseline measured from the bottom of the line*/ + .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +}; + +#endif /*#if LV_FONT_HEB_16*/ + diff --git a/src/lv_misc/lv_bidi.c b/src/lv_misc/lv_bidi.c index e9929bc67..933773d93 100644 --- a/src/lv_misc/lv_bidi.c +++ b/src/lv_misc/lv_bidi.c @@ -23,9 +23,7 @@ /********************** * STATIC PROTOTYPES **********************/ -static void process_paragraph(const char * str_in, char * str_out, uint32_t len, lv_bidi_dir_t base_dir); -static uint32_t get_next_paragraph(const char * txt); -static lv_bidi_dir_t get_next_run(const char * txt, lv_bidi_dir_t base_dir, uint32_t * len); +static lv_bidi_dir_t get_next_run(const char * txt, lv_bidi_dir_t base_dir, uint32_t max_len, uint32_t * len); static void rtl_reverse(char * dest, const char * src, uint32_t len); static uint32_t char_change_to_pair(uint32_t letter); @@ -55,8 +53,8 @@ void lv_bidi_process(const char * str_in, char * str_out, lv_bidi_dir_t base_dir } while(str_in[par_start] != '\0') { - par_len = get_next_paragraph(&str_in[par_start]); - process_paragraph(&str_in[par_start], &str_out[par_start], par_len, base_dir); + par_len = lv_bidi_get_next_paragraph(&str_in[par_start]); + lv_bidi_process_paragraph(&str_in[par_start], &str_out[par_start], par_len, base_dir); par_start += par_len; while(str_in[par_start] == '\n' || str_in[par_start] == '\r') { @@ -121,7 +119,7 @@ bool lv_bidi_letter_is_rtl(uint32_t letter) bool lv_bidi_letter_is_neutral(uint32_t letter) { uint16_t i; - static const char neutrals[] = " \t\n\r.,:;'\"`!?%/\\=()[]{}<>@#&$|"; + static const char neutrals[] = " \t\n\r.,:;'\"`!?%/\\-=()[]{}<>@#&$|"; for(i = 0; neutrals[i] != '\0'; i++) { if(letter == (uint32_t)neutrals[i]) return true; } @@ -134,12 +132,14 @@ bool lv_bidi_letter_is_neutral(uint32_t letter) * STATIC FUNCTIONS **********************/ -static void process_paragraph(const char * str_in, char * str_out, uint32_t len, lv_bidi_dir_t base_dir) +void lv_bidi_process_paragraph(const char * str_in, char * str_out, uint32_t len, lv_bidi_dir_t base_dir) { uint32_t run_len = 0; lv_bidi_dir_t run_dir; uint32_t rd = 0; uint32_t wr; + + if(base_dir == LV_BIDI_DIR_AUTO) base_dir = lv_bidi_detect_base_dir(str_in); if(base_dir == LV_BIDI_DIR_RTL) wr = len; else wr = 0; @@ -168,7 +168,7 @@ static void process_paragraph(const char * str_in, char * str_out, uint32_t len, /*Get and process the runs*/ while(rd < len) { - run_dir = get_next_run(&str_in[rd], base_dir, &run_len); + run_dir = get_next_run(&str_in[rd], base_dir, len - rd, &run_len); if(base_dir == LV_BIDI_DIR_LTR) { if(run_dir == LV_BIDI_DIR_LTR) memcpy(&str_out[wr], &str_in[rd], run_len); @@ -184,7 +184,7 @@ static void process_paragraph(const char * str_in, char * str_out, uint32_t len, } } -static uint32_t get_next_paragraph(const char * txt) +uint32_t lv_bidi_get_next_paragraph(const char * txt) { uint32_t i = 0; @@ -197,7 +197,7 @@ static uint32_t get_next_paragraph(const char * txt) return i; } -static lv_bidi_dir_t get_next_run(const char * txt, lv_bidi_dir_t base_dir, uint32_t * len) +static lv_bidi_dir_t get_next_run(const char * txt, lv_bidi_dir_t base_dir, uint32_t max_len, uint32_t * len) { uint32_t i = 0; uint32_t letter; @@ -209,7 +209,7 @@ static lv_bidi_dir_t get_next_run(const char * txt, lv_bidi_dir_t base_dir, uint while(dir == LV_BIDI_DIR_NEUTRAL || dir == LV_BIDI_DIR_WEAK) { letter = lv_txt_encoded_next(txt, &i); dir = lv_bidi_get_letter_dir(letter); - if(txt[i] == '\0' || txt[i] == '\n' || txt[i] == '\r') { + if(i >= max_len || txt[i] == '\0' || txt[i] == '\n' || txt[i] == '\r') { *len = i; return base_dir; } @@ -222,7 +222,7 @@ static lv_bidi_dir_t get_next_run(const char * txt, lv_bidi_dir_t base_dir, uint /*Find the next char which has different direction*/ lv_bidi_dir_t next_dir = base_dir; - while(txt[i] != '\0'&& txt[i] != '\n' && txt[i] != '\r') { + while(i_prev < max_len && txt[i] != '\0' && txt[i] != '\n' && txt[i] != '\r') { letter = lv_txt_encoded_next(txt, &i); next_dir = lv_bidi_get_letter_dir(letter); @@ -271,7 +271,7 @@ static void rtl_reverse(char * dest, const char * src, uint32_t len) /*Finish on non-weak char */ /*but treat number and currency related chars as weak*/ - if(lv_bidi_letter_is_weak(letter) == false && letter != '.' && letter != ',' && letter != '$') { + if(lv_bidi_letter_is_weak(letter) == false && letter != '.' && letter != ',' && letter != '$' && letter != '%') { lv_txt_encoded_next(src, &i); /*Rewind one letter*/ first_weak = i; break; diff --git a/src/lv_misc/lv_bidi.h b/src/lv_misc/lv_bidi.h index 233765ca2..9ce0fffa1 100644 --- a/src/lv_misc/lv_bidi.h +++ b/src/lv_misc/lv_bidi.h @@ -53,6 +53,8 @@ typedef uint8_t lv_bidi_dir_t; #if LV_USE_BIDI void lv_bidi_process(const char * str_in, char * str_out, lv_bidi_dir_t base_dir); +void lv_bidi_process_paragraph(const char * str_in, char * str_out, uint32_t len, lv_bidi_dir_t base_dir); +uint32_t lv_bidi_get_next_paragraph(const char * txt); lv_bidi_dir_t lv_bidi_detect_base_dir(const char * txt); lv_bidi_dir_t lv_bidi_get_letter_dir(uint32_t letter); bool lv_bidi_letter_is_weak(uint32_t letter); diff --git a/src/lv_objx/lv_btnm.c b/src/lv_objx/lv_btnm.c index c9f095ac4..9c2634c93 100644 --- a/src/lv_objx/lv_btnm.c +++ b/src/lv_objx/lv_btnm.c @@ -671,11 +671,6 @@ static bool lv_btnm_design(lv_obj_t * btnm, const lv_area_t * mask, lv_design_mo lv_txt_flag_t txt_flag = LV_TXT_FLAG_NONE; if(ext->recolor) txt_flag = LV_TXT_FLAG_RECOLOR; -#if LV_USE_BIDI - char * bidi_buf = lv_mem_alloc(64); - lv_bidi_dir_t base_dir = lv_obj_get_base_dir(btnm); -#endif - for(btn_i = 0; btn_i < ext->btn_cnt; btn_i++, txt_i++) { /*Search the next valid text in the map*/ while(strcmp(ext->map_p[txt_i], "\n") == 0) { @@ -744,22 +739,8 @@ static bool lv_btnm_design(lv_obj_t * btnm, const lv_area_t * mask, lv_design_mo area_tmp.x2 = area_tmp.x1 + txt_size.x; area_tmp.y2 = area_tmp.y1 + txt_size.y; -#if LV_USE_BIDI == 0 - lv_draw_label(&area_tmp, mask, btn_style, opa_scale, ext->map_p[txt_i], txt_flag, NULL, -1, -1, NULL); -#else - uint32_t txt_len = strlen(ext->map_p[txt_i]) + 1; - if(txt_len > lv_mem_get_size(bidi_buf)) { - bidi_buf = lv_mem_realloc(bidi_buf, txt_len); - } - - lv_bidi_process(ext->map_p[txt_i], bidi_buf, base_dir); - lv_draw_label(&area_tmp, mask, btn_style, opa_scale, bidi_buf, txt_flag, NULL, -1, -1, NULL); -#endif + lv_draw_label(&area_tmp, mask, btn_style, opa_scale, ext->map_p[txt_i], txt_flag, NULL, -1, -1, NULL, lv_obj_get_base_dir(btnm)); } - -#if LV_USE_BIDI - lv_mem_free(bidi_buf); -#endif } return true; diff --git a/src/lv_objx/lv_calendar.c b/src/lv_objx/lv_calendar.c index e33eccf10..cbeca7c54 100644 --- a/src/lv_objx/lv_calendar.c +++ b/src/lv_objx/lv_calendar.c @@ -687,19 +687,19 @@ static void draw_header(lv_obj_t * calendar, const lv_area_t * mask) txt_buf[5] = '\0'; strcpy(&txt_buf[5], get_month_name(calendar, ext->showed_date.month)); header_area.y1 += ext->style_header->body.padding.top; - lv_draw_label(&header_area, mask, ext->style_header, opa_scale, txt_buf, LV_TXT_FLAG_CENTER, NULL, -1, -1, NULL); + lv_draw_label(&header_area, mask, ext->style_header, opa_scale, txt_buf, LV_TXT_FLAG_CENTER, NULL, -1, -1, NULL, lv_obj_get_base_dir(calendar)); /*Add the left arrow*/ const lv_style_t * arrow_style = ext->btn_pressing < 0 ? ext->style_header_pr : ext->style_header; header_area.x1 += ext->style_header->body.padding.left; - lv_draw_label(&header_area, mask, arrow_style, opa_scale, LV_SYMBOL_LEFT, LV_TXT_FLAG_NONE, NULL, -1, -1, NULL); + lv_draw_label(&header_area, mask, arrow_style, opa_scale, LV_SYMBOL_LEFT, LV_TXT_FLAG_NONE, NULL, -1, -1, NULL, lv_obj_get_base_dir(calendar)); /*Add the right arrow*/ arrow_style = ext->btn_pressing > 0 ? ext->style_header_pr : ext->style_header; header_area.x1 = header_area.x2 - ext->style_header->body.padding.right - lv_txt_get_width(LV_SYMBOL_RIGHT, strlen(LV_SYMBOL_RIGHT), arrow_style->text.font, arrow_style->text.line_space, LV_TXT_FLAG_NONE); - lv_draw_label(&header_area, mask, arrow_style, opa_scale, LV_SYMBOL_RIGHT, LV_TXT_FLAG_NONE, NULL, -1, -1, NULL); + lv_draw_label(&header_area, mask, arrow_style, opa_scale, LV_SYMBOL_RIGHT, LV_TXT_FLAG_NONE, NULL, -1, -1, NULL, lv_obj_get_base_dir(calendar)); } /** @@ -724,7 +724,7 @@ static void draw_day_names(lv_obj_t * calendar, const lv_area_t * mask) label_area.x1 = calendar->coords.x1 + (w * i) / 7 + l_pad; label_area.x2 = label_area.x1 + box_w - 1; lv_draw_label(&label_area, mask, ext->style_day_names, opa_scale, get_day_name(calendar, i), LV_TXT_FLAG_CENTER, - NULL, -1, -1, NULL); + NULL, -1, -1, NULL, lv_obj_get_base_dir(calendar)); } } @@ -853,7 +853,7 @@ static void draw_days(lv_obj_t * calendar, const lv_area_t * mask) /*Write the day's number*/ lv_utils_num_to_str(day_cnt, buf); - lv_draw_label(&label_area, mask, final_style, opa_scale, buf, LV_TXT_FLAG_CENTER, NULL, -1, -1, NULL); + lv_draw_label(&label_area, mask, final_style, opa_scale, buf, LV_TXT_FLAG_CENTER, NULL, -1, -1, NULL, lv_obj_get_base_dir(calendar)); /*Go to the next day*/ day_cnt++; diff --git a/src/lv_objx/lv_canvas.c b/src/lv_objx/lv_canvas.c index a39c11a31..8ba051b46 100644 --- a/src/lv_objx/lv_canvas.c +++ b/src/lv_objx/lv_canvas.c @@ -586,7 +586,7 @@ void lv_canvas_draw_text(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_coord } lv_draw_label(&coords, &mask, style, LV_OPA_COVER, txt, flag, NULL, LV_LABEL_TEXT_SEL_OFF, LV_LABEL_TEXT_SEL_OFF, - NULL); + NULL, lv_obj_get_base_dir(canvas)); lv_refr_set_disp_refreshing(refr_ori); } diff --git a/src/lv_objx/lv_chart.c b/src/lv_objx/lv_chart.c index c326c8c6b..e82d00f7f 100644 --- a/src/lv_objx/lv_chart.c +++ b/src/lv_objx/lv_chart.c @@ -1379,7 +1379,7 @@ static void lv_chart_draw_y_ticks(lv_obj_t * chart, const lv_area_t * mask, uint a.x2 = p2.x + size.x + LV_CHART_AXIS_TO_LABEL_DISTANCE; } - lv_draw_label(&a, mask, style, opa_scale, buf, LV_TXT_FLAG_CENTER, NULL, -1, -1, NULL); + lv_draw_label(&a, mask, style, opa_scale, buf, LV_TXT_FLAG_CENTER, NULL, -1, -1, NULL, lv_obj_get_base_dir(chart)); } } @@ -1465,7 +1465,7 @@ static void lv_chart_draw_x_ticks(lv_obj_t * chart, const lv_area_t * mask) /* set the area at some distance of the major tick len under of the tick */ lv_area_t a = {(p2.x - size.x / 2), (p2.y + LV_CHART_AXIS_TO_LABEL_DISTANCE), (p2.x + size.x / 2), (p2.y + size.y + LV_CHART_AXIS_TO_LABEL_DISTANCE)}; - lv_draw_label(&a, mask, style, opa_scale, buf, LV_TXT_FLAG_CENTER, NULL, -1, -1, NULL); + lv_draw_label(&a, mask, style, opa_scale, buf, LV_TXT_FLAG_CENTER, NULL, -1, -1, NULL, lv_obj_get_base_dir(chart)); } } } diff --git a/src/lv_objx/lv_ddlist.c b/src/lv_objx/lv_ddlist.c index a6066729d..771902e26 100644 --- a/src/lv_objx/lv_ddlist.c +++ b/src/lv_objx/lv_ddlist.c @@ -609,7 +609,7 @@ static bool lv_ddlist_design(lv_obj_t * ddlist, const lv_area_t * mask, lv_desig new_style.text.opa = sel_style->text.opa; lv_txt_flag_t flag = lv_ddlist_get_txt_flag(ddlist); lv_draw_label(&ext->label->coords, &mask_sel, &new_style, opa_scale, lv_label_get_text(ext->label), - flag, NULL, -1, -1, NULL); + flag, NULL, -1, -1, NULL, lv_obj_get_base_dir(ddlist)); } } @@ -643,7 +643,7 @@ static bool lv_ddlist_design(lv_obj_t * ddlist, const lv_area_t * mask, lv_desig area_ok = lv_area_intersect(&mask_arrow, mask, &area_arrow); if(area_ok) { lv_draw_label(&area_arrow, &mask_arrow, &new_style, opa_scale, LV_SYMBOL_DOWN, LV_TXT_FLAG_NONE, - NULL, -1, -1, NULL); /*Use a down arrow in ddlist, you can replace it with your + NULL, -1, -1, NULL, lv_obj_get_base_dir(ddlist)); /*Use a down arrow in ddlist, you can replace it with your custom symbol*/ } } diff --git a/src/lv_objx/lv_gauge.c b/src/lv_objx/lv_gauge.c index 3ebb1cb7c..4a9b06e5b 100644 --- a/src/lv_objx/lv_gauge.c +++ b/src/lv_objx/lv_gauge.c @@ -390,7 +390,7 @@ static void lv_gauge_draw_scale(lv_obj_t * gauge, const lv_area_t * mask) label_cord.x2 = label_cord.x1 + label_size.x; label_cord.y2 = label_cord.y1 + label_size.y; - lv_draw_label(&label_cord, mask, style, opa_scale, scale_txt, LV_TXT_FLAG_NONE, NULL, -1, -1, NULL); + lv_draw_label(&label_cord, mask, style, opa_scale, scale_txt, LV_TXT_FLAG_NONE, NULL, -1, -1, NULL, lv_obj_get_base_dir(gauge)); } } /** diff --git a/src/lv_objx/lv_img.c b/src/lv_objx/lv_img.c index 302891ac3..30e994a13 100644 --- a/src/lv_objx/lv_img.c +++ b/src/lv_objx/lv_img.c @@ -384,7 +384,7 @@ static bool lv_img_design(lv_obj_t * img, const lv_area_t * mask, lv_design_mode lv_style_t style_mod; lv_style_copy(&style_mod, style); style_mod.text.color = style->image.color; - lv_draw_label(&coords, mask, &style_mod, opa_scale, ext->src, LV_TXT_FLAG_NONE, NULL, -1, -1, NULL); + lv_draw_label(&coords, mask, &style_mod, opa_scale, ext->src, LV_TXT_FLAG_NONE, NULL, -1, -1, NULL, lv_obj_get_base_dir(img)); } else { /*Trigger the error handler of image drawer*/ LV_LOG_WARN("lv_img_design: image source type is unknown"); diff --git a/src/lv_objx/lv_imgbtn.c b/src/lv_objx/lv_imgbtn.c index e1c4c0309..a17fe8b50 100644 --- a/src/lv_objx/lv_imgbtn.c +++ b/src/lv_objx/lv_imgbtn.c @@ -304,7 +304,7 @@ static bool lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * mask, lv_desig #if LV_IMGBTN_TILED == 0 const void * src = ext->img_src[state]; if(lv_img_src_get_type(src) == LV_IMG_SRC_SYMBOL) { - lv_draw_label(&imgbtn->coords, mask, style, opa_scale, src, LV_TXT_FLAG_NONE, NULL, LV_LABEL_TEXT_SEL_OFF, LV_LABEL_TEXT_SEL_OFF, NULL); + lv_draw_label(&imgbtn->coords, mask, style, opa_scale, src, LV_TXT_FLAG_NONE, NULL, LV_LABEL_TEXT_SEL_OFF, LV_LABEL_TEXT_SEL_OFF, NULL, lv_obj_get_base_dir(imgbtn)); } else { lv_draw_img(&imgbtn->coords, mask, src, style, opa_scale); } diff --git a/src/lv_objx/lv_label.c b/src/lv_objx/lv_label.c index 4ce18f42f..46cc451c4 100644 --- a/src/lv_objx/lv_label.c +++ b/src/lv_objx/lv_label.c @@ -205,12 +205,8 @@ void lv_label_set_text(lv_obj_t * label, const char * text) LV_ASSERT_MEM(ext->text); if(ext->text == NULL) return; -#if LV_USE_BIDI == 0 strcpy(ext->text, text); -#else - lv_bidi_dir_t base_dir = lv_obj_get_base_dir(label); - lv_bidi_process(text, ext->text, base_dir); -#endif + /*Now the text is dynamically allocated*/ ext->static_txt = 0; } @@ -904,19 +900,7 @@ void lv_label_ins_text(lv_obj_t * label, uint32_t pos, const char * txt) pos = lv_txt_get_encoded_length(ext->text); } -#if LV_USE_BIDI - char * bidi_buf = lv_mem_alloc(ins_len) + 1; - LV_ASSERT_MEM(bidi_buf); - if(bidi_buf == NULL) return; - - lv_bidi_process(txt, bidi_buf, lv_obj_get_base_dir(label)); - lv_txt_ins(ext->text, pos, bidi_buf); - - lv_mem_free(bidi_buf); -#else lv_txt_ins(ext->text, pos, txt); -#endif - lv_label_refr_text(label); } @@ -1021,7 +1005,7 @@ static bool lv_label_design(lv_obj_t * label, const lv_area_t * mask, lv_design_ lv_draw_label_hint_t * hint = NULL; #endif lv_draw_label(&coords, mask, style, opa_scale, ext->text, flag, &ext->offset, - lv_label_get_text_sel_start(label), lv_label_get_text_sel_end(label), hint); + lv_label_get_text_sel_start(label), lv_label_get_text_sel_end(label), hint, lv_obj_get_base_dir(label)); if(ext->long_mode == LV_LABEL_LONG_SROLL_CIRC) { @@ -1038,7 +1022,7 @@ static bool lv_label_design(lv_obj_t * label, const lv_area_t * mask, lv_design_ ofs.y = ext->offset.y; lv_draw_label(&coords, mask, style, opa_scale, ext->text, flag, &ofs, - lv_label_get_text_sel_start(label), lv_label_get_text_sel_end(label), NULL); + lv_label_get_text_sel_start(label), lv_label_get_text_sel_end(label), NULL, lv_obj_get_base_dir(label)); } /*Draw the text again below the original to make an circular effect */ @@ -1046,7 +1030,7 @@ static bool lv_label_design(lv_obj_t * label, const lv_area_t * mask, lv_design_ ofs.x = ext->offset.x; ofs.y = ext->offset.y + size.y + lv_font_get_line_height(style->text.font); lv_draw_label(&coords, mask, style, opa_scale, ext->text, flag, &ofs, - lv_label_get_text_sel_start(label), lv_label_get_text_sel_end(label), NULL); + lv_label_get_text_sel_start(label), lv_label_get_text_sel_end(label), NULL, lv_obj_get_base_dir(label)); } } } diff --git a/src/lv_objx/lv_roller.c b/src/lv_objx/lv_roller.c index 75eb9cf74..62c949db5 100644 --- a/src/lv_objx/lv_roller.c +++ b/src/lv_objx/lv_roller.c @@ -397,7 +397,7 @@ static bool lv_roller_design(lv_obj_t * roller, const lv_area_t * mask, lv_desig new_style.text.color = sel_style->text.color; new_style.text.opa = sel_style->text.opa; lv_draw_label(&ext->ddlist.label->coords, &mask_sel, &new_style, opa_scale, - lv_label_get_text(ext->ddlist.label), txt_align, NULL, -1, -1, NULL); + lv_label_get_text(ext->ddlist.label), txt_align, NULL, -1, -1, NULL, lv_obj_get_base_dir(ext->ddlist.label)); } } diff --git a/src/lv_objx/lv_ta.c b/src/lv_objx/lv_ta.c index 77ea629d4..c8ffee521 100644 --- a/src/lv_objx/lv_ta.c +++ b/src/lv_objx/lv_ta.c @@ -1386,7 +1386,7 @@ static bool lv_ta_scrollable_design(lv_obj_t * scrl, const lv_area_t * mask, lv_ cur_area.x1 += cur_style.body.padding.left; cur_area.y1 += cur_style.body.padding.top; lv_draw_label(&cur_area, mask, &cur_style, opa_scale, letter_buf, LV_TXT_FLAG_NONE, 0, - LV_LABEL_TEXT_SEL_OFF, LV_LABEL_TEXT_SEL_OFF, NULL); + LV_LABEL_TEXT_SEL_OFF, LV_LABEL_TEXT_SEL_OFF, NULL, lv_obj_get_base_dir(ta)); } else if(ext->cursor.type == LV_CURSOR_OUTLINE) { cur_style.body.opa = LV_OPA_TRANSP; diff --git a/src/lv_objx/lv_table.c b/src/lv_objx/lv_table.c index e1ca6a2d0..ef49559aa 100644 --- a/src/lv_objx/lv_table.c +++ b/src/lv_objx/lv_table.c @@ -145,17 +145,20 @@ void lv_table_set_cell_value(lv_obj_t * table, uint16_t row, uint16_t col, const uint32_t cell = row * ext->col_cnt + col; lv_table_cell_format_t format; - lv_bidi_dir_t base_dir = lv_obj_get_base_dir(table); - /*Save the format byte*/ if(ext->cell_data[cell]) { format.format_byte = ext->cell_data[cell][0]; } /*Initialize the format byte*/ else { +#if LV_USE_BIDI + lv_bidi_dir_t base_dir = lv_obj_get_base_dir(table); if(base_dir == LV_BIDI_DIR_LTR) format.s.align = LV_LABEL_ALIGN_LEFT; else if(base_dir == LV_BIDI_DIR_RTL) format.s.align = LV_LABEL_ALIGN_RIGHT; else if(base_dir == LV_BIDI_DIR_AUTO) format.s.align = lv_bidi_detect_base_dir(txt); +#else + format.s.align = LV_LABEL_ALIGN_LEFT; +#endif format.s.right_merge = 0; format.s.type = 0; @@ -163,12 +166,7 @@ void lv_table_set_cell_value(lv_obj_t * table, uint16_t row, uint16_t col, const } ext->cell_data[cell] = lv_mem_realloc(ext->cell_data[cell], strlen(txt) + 2); /*+1: trailing '\0; +1: format byte*/ - -#if LV_USE_BIDI == 0 strcpy(ext->cell_data[cell] + 1, txt); /*+1 to skip the format byte*/ -#else - lv_bidi_process(txt, ext->cell_data[cell] + 1, base_dir); -#endif ext->cell_data[cell][0] = format.format_byte; refr_size(table); @@ -740,7 +738,7 @@ static bool lv_table_design(lv_obj_t * table, const lv_area_t * mask, lv_design_ label_mask_ok = lv_area_intersect(&label_mask, mask, &cell_area); if(label_mask_ok) { lv_draw_label(&txt_area, &label_mask, cell_style, opa_scale, ext->cell_data[cell] + 1, - txt_flags, NULL, -1, -1, NULL); + txt_flags, NULL, -1, -1, NULL, lv_obj_get_base_dir(table)); } /*Draw lines after '\n's*/ lv_point_t p1;