diff options
author | Jean-François Milants <jf@codingfield.com> | 2021-02-23 21:25:43 +0100 |
---|---|---|
committer | Jean-François Milants <jf@codingfield.com> | 2021-02-23 21:25:43 +0100 |
commit | 67c545b1fbd368b99b111a1822fe8da815468e76 (patch) | |
tree | 0bcb047f3e9d5c41c6d79b4dac6cbcdd3929136b /src/libs/lvgl/tests | |
parent | 324c7dab326ea23a6c8502bbb8c6e9b9d87a839f (diff) | |
parent | b11b20b0ac5c0adfbd1397cf42c322c873a736a8 (diff) |
Merge branch 'joaquimorg-LVGL7' into develop
Diffstat (limited to 'src/libs/lvgl/tests')
25 files changed, 6040 insertions, 0 deletions
diff --git a/src/libs/lvgl/tests/Makefile b/src/libs/lvgl/tests/Makefile new file mode 100644 index 00000000..04ad1afa --- /dev/null +++ b/src/libs/lvgl/tests/Makefile @@ -0,0 +1,59 @@ +# +# Makefile +# +CC ?= gcc +LVGL_DIR ?= ${shell pwd}/../.. +LVGL_DIR_NAME ?= lvgl + +WARNINGS = -Werror -Wall -Wextra \ + -Wshadow -Wundef -Wmaybe-uninitialized -Wmissing-prototypes -Wpointer-arith -Wuninitialized \ + -Wunreachable-code -Wreturn-type -Wmultichar -Wformat-security -Wdouble-promotion -Wclobbered -Wdeprecated \ + -Wempty-body -Wshift-negative-value -Wstack-usage=2048 -pedantic-errors \ + -Wtype-limits -Wsizeof-pointer-memaccess -Wpedantic -Wmissing-prototypes -Wno-discarded-qualifiers + +#-Wno-unused-value -Wno-unused-parameter +OPTIMIZATION ?= -O3 -g0 + +CFLAGS ?= -I$(LVGL_DIR)/ $(DEFINES) $(WARNINGS) $(OPTIMIZATION) -I$(LVGL_DIR) -I. + +LDFLAGS ?= -lpng +BIN ?= demo + +#Collect the files to compile +MAINSRC = ./lv_test_main.c + +include ../lvgl.mk + +CSRCS += lv_test_assert.c +CSRCS += lv_test_core/lv_test_core.c +CSRCS += lv_test_core/lv_test_obj.c +CSRCS += lv_test_core/lv_test_style.c +CSRCS += lv_test_core/lv_test_font_loader.c +CSRCS += lv_test_widgets/lv_test_label.c +CSRCS += lv_test_fonts/font_1.c +CSRCS += lv_test_fonts/font_2.c +CSRCS += lv_test_fonts/font_3.c + +OBJEXT ?= .o + +AOBJS = $(ASRCS:.S=$(OBJEXT)) +COBJS = $(CSRCS:.c=$(OBJEXT)) + +MAINOBJ = $(MAINSRC:.c=$(OBJEXT)) + +SRCS = $(ASRCS) $(CSRCS) $(MAINSRC) +OBJS = $(AOBJS) $(COBJS) + +## MAINOBJ -> OBJFILES + +all: default + +%.o: %.c + @$(CC) $(CFLAGS) -c $< -o $@ + @echo "CC $<" + +default: $(AOBJS) $(COBJS) $(MAINOBJ) + $(CC) -o $(BIN) $(MAINOBJ) $(AOBJS) $(COBJS) $(LDFLAGS) + +clean: + rm -f $(BIN) $(AOBJS) $(COBJS) $(MAINOBJ) diff --git a/src/libs/lvgl/tests/build.py b/src/libs/lvgl/tests/build.py new file mode 100755 index 00000000..43b61344 --- /dev/null +++ b/src/libs/lvgl/tests/build.py @@ -0,0 +1,375 @@ +#!/usr/bin/env python3 + +import os + +lvgldirname = os.path.abspath('..') +lvgldirname = os.path.basename(lvgldirname) +lvgldirname = '"' + lvgldirname + '"' + +base_defines = '"-DLV_CONF_PATH=' + lvgldirname +'/tests/lv_test_conf.h -DLV_BUILD_TEST"' +optimization = '"-O3 -g0"' + +def build(name, defines): + global base_defines, optimization + + print("=============================") + print(name) + print("=============================") + + d_all = base_defines[:-1] + " "; + + for d in defines: + d_all += " -D" + d + "=" + str(defines[d]) + + d_all += '"' + cmd = "make -j8 BIN=test.bin LVGL_DIR_NAME=" + lvgldirname + " DEFINES=" + d_all + " OPTIMIZATION=" + optimization + + print("---------------------------") + print("Clean") + print("---------------------------") + os.system("make clean LVGL_DIR_NAME=" + lvgldirname) + os.system("rm -f ./test.bin") + print("---------------------------") + print("Build") + print("---------------------------") + ret = os.system(cmd) + if(ret != 0): + print("BUILD ERROR! (error code " + str(ret) + ")") + exit(1) + + print("---------------------------") + print("Run") + print("---------------------------") + ret = os.system("./test.bin") + if(ret != 0): + print("RUN ERROR! (error code " + str(ret) + ")") + exit(1) + + print("---------------------------") + print("Finished") + print("---------------------------") + +minimal_monochrome = { + "LV_DPI":40, + "LV_MEM_SIZE":4*1024, + "LV_HOR_RES_MAX":128, + "LV_VER_RES_MAX":64, + "LV_COLOR_DEPTH":1, + "LV_USE_GROUP":0, + "LV_USE_ANIMATION":0, + "LV_ANTIALIAS":0, + "LV_GPU":0, + "LV_USE_FILESYSTEM":0, + "LV_USE_IMG_TRANSFORM":0, + "LV_USE_API_EXTENSION_V6":0, + "LV_USE_USER_DATA":0, + "LV_USE_USER_DATA_FREE":0, + "LV_USE_LOG":0, + "LV_USE_THEME_EMPTY":0, + "LV_USE_THEME_MATERIAL":0, + "LV_USE_THEME_MONO":1, + "LV_USE_THEME_TEMPLATE":0, + "LV_THEME_DEFAULT_INIT": "\\\"lv_theme_mono_init\\\"", + "LV_THEME_DEFAULT_COLOR_PRIMARY": "\\\"LV_COLOR_RED\\\"", + "LV_THEME_DEFAULT_COLOR_SECONDARY": "\\\"LV_COLOR_BLUE\\\"", + "LV_THEME_DEFAULT_FLAG" : "0", + "LV_THEME_DEFAULT_FONT_SMALL" : "\\\"&lv_font_unscii_8\\\"", + "LV_THEME_DEFAULT_FONT_NORMAL" : "\\\"&lv_font_unscii_8\\\"", + "LV_THEME_DEFAULT_FONT_SUBTITLE" : "\\\"&lv_font_unscii_8\\\"", + "LV_THEME_DEFAULT_FONT_TITLE" : "\\\"&lv_font_unscii_8\\\"", + "LV_LOG_PRINTF":0, + "LV_USE_DEBUG":0, + "LV_USE_ASSERT_NULL":0, + "LV_USE_ASSERT_MEM":0, + "LV_USE_ASSERT_STR":0, + "LV_USE_ASSERT_OBJ":0, + "LV_USE_ASSERT_STYLE":0, + "LV_FONT_MONTSERRAT_12":0, + "LV_FONT_MONTSERRAT_16":0, + "LV_FONT_MONTSERRAT_22":0, + "LV_FONT_MONTSERRAT_28":0, + "LV_FONT_MONTSERRAT_12_SUBPX":0, + "LV_FONT_MONTSERRAT_28_COMPRESSED":0, + "LV_FONT_UNSCII_8":1, + "LV_USE_BIDI": 0, + "LV_USE_OBJ_REALIGN": 0, + "LV_USE_ARC":0, + "LV_USE_BAR":1, + "LV_USE_BTN":1, + "LV_USE_BTNM":0, + "LV_USE_CALENDAR":0, + "LV_USE_CANVAS":0, + "LV_USE_CHECKBOX":0, + "LV_USE_CHART":0, + "LV_USE_CONT":1, + "LV_USE_CPICKER":0, + "LV_USE_DROPDOWN":0, + "LV_USE_GAUGE":0, + "LV_USE_IMG":1, + "LV_USE_IMGBTN":0, + "LV_USE_KEYBOARD":0, + "LV_USE_LABEL":1, + "LV_USE_LED":0, + "LV_USE_LINE":0, + "LV_USE_LIST":0, + "LV_USE_LINEMETER":0, + "LV_USE_OBJMASK":0, + "LV_USE_MBOX":0, + "LV_USE_PAGE":0, + "LV_USE_SPINNER":0, + "LV_USE_ROLLER":0, + "LV_USE_SLIDER":0, + "LV_USE_SPINBOX":0, + "LV_USE_SWITCH":0, + "LV_USE_TEXTAREA":0, + "LV_USE_TABLE":0, + "LV_USE_TABVIEW":0, + "LV_USE_TILEVIEW":0, + "LV_USE_WIN":0 +} + +all_obj_minimal_features = { + "LV_DPI":60, + "LV_MEM_SIZE":12*1024, + "LV_HOR_RES_MAX":320, + "LV_VER_RES_MAX":240, + "LV_COLOR_DEPTH":8, + "LV_USE_GROUP":0, + "LV_USE_ANIMATION":0, + "LV_ANTIALIAS":0, + "LV_GPU":0, + "LV_USE_FILESYSTEM":0, + "LV_USE_IMG_TRANSFORM":0, + "LV_USE_API_EXTENSION_V6":0, + "LV_USE_USER_DATA":0, + "LV_USE_USER_DATA_FREE":0, + "LV_USE_LOG":0, + "LV_USE_THEME_MATERIAL":1, + "LV_THEME_DEFAULT_INIT": "\\\"lv_theme_material_init\\\"", + "LV_THEME_DEFAULT_COLOR_PRIMARY": "\\\"LV_COLOR_RED\\\"", + "LV_THEME_DEFAULT_COLOR_SECONDARY": "\\\"LV_COLOR_BLUE\\\"", + "LV_THEME_DEFAULT_FLAG" : "\\\"LV_THEME_MATERIAL_FLAG_LIGHT\\\"", + "LV_THEME_DEFAULT_FONT_SMALL" : "\\\"&lv_font_montserrat_16\\\"", + "LV_THEME_DEFAULT_FONT_NORMAL" : "\\\"&lv_font_montserrat_16\\\"", + "LV_THEME_DEFAULT_FONT_SUBTITLE" : "\\\"&lv_font_montserrat_16\\\"", + "LV_THEME_DEFAULT_FONT_TITLE" : "\\\"&lv_font_montserrat_16\\\"", + "LV_USE_DEBUG":0, + "LV_USE_ASSERT_NULL":0, + "LV_USE_ASSERT_MEM":0, + "LV_USE_ASSERT_STR":0, + "LV_USE_ASSERT_OBJ":0, + "LV_USE_ASSERT_STYLE":0, + "LV_FONT_MONTSERRAT_12":0, + "LV_FONT_MONTSERRAT_16":1, + "LV_FONT_MONTSERRAT_22":0, + "LV_FONT_MONTSERRAT_28":0, + "LV_FONT_MONTSERRAT_12_SUBPX":0, + "LV_FONT_MONTSERRAT_28_COMPRESSED":0, + "LV_FONT_UNSCII_8":0, + "LV_USE_BIDI": 0, + "LV_USE_OBJ_REALIGN": 0, + "LV_USE_EXT_CLICK_AREA":"LV_EXT_CLICK_AREA_TINY", + "LV_USE_ARC":1, + "LV_USE_BAR":1, + "LV_USE_BTN":1, + "LV_USE_BTNM":1, + "LV_USE_CALENDAR":1, + "LV_USE_CANVAS":1, + "LV_USE_CHECKBOX":1, + "LV_USE_CHART":1, + "LV_USE_CONT":1, + "LV_USE_CPICKER":1, + "LV_USE_DROPDOWN":1, + "LV_USE_GAUGE":1, + "LV_USE_IMG":1, + "LV_USE_IMGBTN":1, + "LV_USE_KEYBOARD":1, + "LV_USE_LABEL":1, + "LV_USE_LED":1, + "LV_USE_LINE":1, + "LV_USE_LIST":1, + "LV_USE_LINEMETER":1, + "LV_USE_OBJMASK":1, + "LV_USE_MBOX":1, + "LV_USE_PAGE":1, + "LV_USE_SPINNER":0, #Disabled beacsue needs anim + "LV_USE_ROLLER":1, + "LV_USE_SLIDER":1, + "LV_USE_SPINBOX":1, + "LV_USE_SWITCH":1, + "LV_USE_TEXTAREA":1, + "LV_USE_TABLE":1, + "LV_USE_TABVIEW":1, + "LV_USE_TILEVIEW":1, + "LV_USE_WIN":1 +} + +all_obj_all_features = { + "LV_DPI":100, + "LV_MEM_SIZE":32*1024, + "LV_HOR_RES_MAX":480, + "LV_VER_RES_MAX":320, + "LV_COLOR_DEPTH":32, + "LV_COLOR_SCREEN_TRANSP":1, + "LV_USE_GROUP":1, + "LV_USE_ANIMATION":1, + "LV_ANTIALIAS":1, + "LV_GPU":1, + "LV_USE_FILESYSTEM":1, + "LV_USE_IMG_TRANSFORM":1, + "LV_USE_API_EXTENSION_V6":1, + "LV_USE_USER_DATA":1, + "LV_USE_USER_DATA_FREE":0, + "LV_USE_LOG":1, + "LV_USE_THEME_MATERIAL":1, + "LV_USE_THEME_EMPTY":1, + "LV_USE_THEME_MONO":1, + "LV_USE_THEME_TEMPLATE":1, + "LV_THEME_DEFAULT_INIT": "\\\"lv_theme_material_init\\\"", + "LV_THEME_DEFAULT_COLOR_PRIMARY": "\\\"LV_COLOR_RED\\\"", + "LV_THEME_DEFAULT_COLOR_SECONDARY": "\\\"LV_COLOR_BLUE\\\"", + "LV_THEME_DEFAULT_FLAG" : "\\\"LV_THEME_MATERIAL_FLAG_LIGHT\\\"", + "LV_THEME_DEFAULT_FONT_SMALL" : "\\\"&lv_font_montserrat_12\\\"", + "LV_THEME_DEFAULT_FONT_NORMAL" : "\\\"&lv_font_montserrat_16\\\"", + "LV_THEME_DEFAULT_FONT_SUBTITLE" : "\\\"&lv_font_montserrat_22\\\"", + "LV_THEME_DEFAULT_FONT_TITLE" : "\\\"&lv_font_montserrat_28\\\"", + "LV_LOG_PRINTF":0, + "LV_USE_DEBUG":0, + "LV_USE_ASSERT_NULL":0, + "LV_USE_ASSERT_MEM":0, + "LV_USE_ASSERT_STR":0, + "LV_USE_ASSERT_OBJ":0, + "LV_USE_ASSERT_STYLE":0, + "LV_FONT_MONTSERRAT_12":1, + "LV_FONT_MONTSERRAT_16":1, + "LV_FONT_MONTSERRAT_22":1, + "LV_FONT_MONTSERRAT_28":1, + "LV_FONT_MONTSERRAT_12_SUBPX":1, + "LV_FONT_MONTSERRAT_28_COMPRESSED":1, + "LV_FONT_UNSCII_8":1, + "LV_USE_ARC":1, + "LV_USE_BAR":1, + "LV_USE_BTN":1, + "LV_USE_BTNM":1, + "LV_USE_CALENDAR":1, + "LV_USE_CANVAS":1, + "LV_USE_CHECKBOX":1, + "LV_USE_CHART":1, + "LV_USE_CONT":1, + "LV_USE_CPICKER":1, + "LV_USE_DROPDOWN":1, + "LV_USE_GAUGE":1, + "LV_USE_IMG":1, + "LV_USE_IMGBTN":1, + "LV_USE_KEYBOARD":1, + "LV_USE_LABEL":1, + "LV_USE_LED":1, + "LV_USE_LINE":1, + "LV_USE_LIST":1, + "LV_USE_LINEMETER":1, + "LV_USE_OBJMASK":1, + "LV_USE_MBOX":1, + "LV_USE_PAGE":1, + "LV_USE_SPINNER":1, + "LV_USE_ROLLER":1, + "LV_USE_SLIDER":1, + "LV_USE_SPINBOX":1, + "LV_USE_SWITCH":1, + "LV_USE_TEXTAREA":1, + "LV_USE_TABLE":1, + "LV_USE_TABVIEW":1, + "LV_USE_TILEVIEW":1, + "LV_USE_WIN":1 +} + +advanced_features = { + "LV_DPI":100, + "LV_MEM_SIZE":4*1024*1024, + "LV_MEM_CUSTOM":1, + "LV_HOR_RES_MAX":800, + "LV_VER_RES_MAX":480, + "LV_COLOR_DEPTH":32, + "LV_COLOR_16_SWAP":0, + "LV_COLOR_SCREEN_TRANSP":1, + "LV_USE_GROUP":1, + "LV_USE_ANIMATION":1, + "LV_ANTIALIAS":1, + "LV_GPU":1, + "LV_USE_FILESYSTEM":1, + "LV_USE_IMG_TRANSFORM":1, + "LV_USE_API_EXTENSION_V6":1, + "LV_USE_USER_DATA":1, + "LV_IMG_CACHE_DEF_SIZE":32, + "LV_USE_LOG":1, + "LV_USE_THEME_MATERIAL":1, + "LV_USE_THEME_EMPTY":1, + "LV_USE_THEME_TEMPLATE":1, + "LV_THEME_DEFAULT_INIT": "\\\"lv_theme_material_init\\\"", + "LV_THEME_DEFAULT_COLOR_PRIMARY": "\\\"LV_COLOR_RED\\\"", + "LV_THEME_DEFAULT_COLOR_SECONDARY": "\\\"LV_COLOR_BLUE\\\"", + "LV_THEME_DEFAULT_FLAG" : "\\\"LV_THEME_MATERIAL_FLAG_LIGHT\\\"", + "LV_THEME_DEFAULT_FONT_SMALL" : "\\\"&lv_font_montserrat_12\\\"", + "LV_THEME_DEFAULT_FONT_NORMAL" : "\\\"&lv_font_montserrat_16\\\"", + "LV_THEME_DEFAULT_FONT_SUBTITLE" : "\\\"&lv_font_montserrat_22\\\"", + "LV_THEME_DEFAULT_FONT_TITLE" : "\\\"&lv_font_montserrat_28\\\"", + "LV_LOG_PRINTF":1, + "LV_USE_DEBUG":1, + "LV_USE_ASSERT_NULL":1, + "LV_USE_ASSERT_MEM":1, + "LV_USE_ASSERT_STR":1, + "LV_USE_ASSERT_OBJ":1, + "LV_USE_ASSERT_STYLE":1, + "LV_FONT_MONTSERRAT_12":1, + "LV_FONT_MONTSERRAT_16":1, + "LV_FONT_MONTSERRAT_22":1, + "LV_FONT_MONTSERRAT_28":1, + "LV_FONT_MONTSERRAT_12_SUBPX":1, + "LV_FONT_MONTSERRAT_28_COMPRESSED":1, + "LV_FONT_UNSCII_8":1, + "LV_USE_BIDI": 1, + "LV_USE_REVERSE_ARABIC_PERSIAN_CHARS":1, + "LV_USE_OBJ_REALIGN": 1, + "LV_FONT_FMT_TXT_LARGE":1, + "LV_FONT_SUBPX_BGR":1, + "LV_USE_BIDI": 1, + "LV_USE_OBJ_REALIGN": 1, + "LV_USE_EXT_CLICK_AREA":"LV_EXT_CLICK_AREA_FULL", + "LV_USE_ARC":1, + "LV_USE_BAR":1, + "LV_USE_BTN":1, + "LV_USE_BTNM":1, + "LV_USE_CALENDAR":1, + "LV_USE_CANVAS":1, + "LV_USE_CHECKBOX":1, + "LV_USE_CHART":1, + "LV_USE_CONT":1, + "LV_USE_CPICKER":1, + "LV_USE_DROPDOWN":1, + "LV_USE_GAUGE":1, + "LV_USE_IMG":1, + "LV_USE_IMGBTN":1, + "LV_USE_KEYBOARD":1, + "LV_USE_LABEL":1, + "LV_USE_LED":1, + "LV_USE_LINE":1, + "LV_USE_LIST":1, + "LV_USE_LINEMETER":1, + "LV_USE_OBJMASK":1, + "LV_USE_MBOX":1, + "LV_USE_PAGE":1, + "LV_USE_SPINNER":1, + "LV_USE_ROLLER":1, + "LV_USE_SLIDER":1, + "LV_USE_SPINBOX":1, + "LV_USE_SWITCH":1, + "LV_USE_TEXTAREA":1, + "LV_USE_TABLE":1, + "LV_USE_TABVIEW":1, + "LV_USE_TILEVIEW":1, + "LV_USE_WIN":1 +} + +build("Minimal monochrome", minimal_monochrome) +build("All objects, minimal features", all_obj_minimal_features) +build("All objects, all common features", all_obj_all_features) +build("All objects, with advanced features", advanced_features) diff --git a/src/libs/lvgl/tests/font_1.fnt b/src/libs/lvgl/tests/font_1.fnt Binary files differnew file mode 100644 index 00000000..bc701d5f --- /dev/null +++ b/src/libs/lvgl/tests/font_1.fnt diff --git a/src/libs/lvgl/tests/font_2.fnt b/src/libs/lvgl/tests/font_2.fnt Binary files differnew file mode 100644 index 00000000..3b648e9d --- /dev/null +++ b/src/libs/lvgl/tests/font_2.fnt diff --git a/src/libs/lvgl/tests/font_3.fnt b/src/libs/lvgl/tests/font_3.fnt Binary files differnew file mode 100644 index 00000000..43c074d7 --- /dev/null +++ b/src/libs/lvgl/tests/font_3.fnt diff --git a/src/libs/lvgl/tests/icon.png b/src/libs/lvgl/tests/icon.png Binary files differnew file mode 100644 index 00000000..74f54b05 --- /dev/null +++ b/src/libs/lvgl/tests/icon.png diff --git a/src/libs/lvgl/tests/icon2.png b/src/libs/lvgl/tests/icon2.png Binary files differnew file mode 100644 index 00000000..7d216010 --- /dev/null +++ b/src/libs/lvgl/tests/icon2.png diff --git a/src/libs/lvgl/tests/lv_test_assert.c b/src/libs/lvgl/tests/lv_test_assert.c new file mode 100644 index 00000000..3b8dfefb --- /dev/null +++ b/src/libs/lvgl/tests/lv_test_assert.c @@ -0,0 +1,376 @@ +/** + * @file lv_test_assert.c + * + * Copyright 2002-2010 Guillaume Cottenceau. + * + * This software may be freely redistributed under the terms + * of the X11 license. + * + */ + +/********************* + * INCLUDES + *********************/ +#include "lv_test_assert.h" +#include "../lvgl.h" +#if LV_BUILD_TEST + +#include <unistd.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <stdarg.h> + +#define PNG_DEBUG 3 +#include <png.h> + +/********************* + * DEFINES + *********************/ +//#define REF_IMGS_PATH "lvgl/tests/lv_test_ref_imgs/" +#define REF_IMGS_PATH "lv_test_ref_imgs/" + +/********************** + * TYPEDEFS + **********************/ +typedef struct { + int width, height; + png_byte color_type; + png_byte bit_depth; + + png_structp png_ptr; + png_infop info_ptr; + int number_of_passes; + png_bytep * row_pointers; +}png_img_t; + +/********************** + * STATIC PROTOTYPES + **********************/ +static void read_png_file(png_img_t * p, const char* file_name); +//static void write_png_file(png_img_t * p, const char* file_name); +static void png_release(png_img_t * p); +//static void process_file(png_img_t * p); + +/********************** + * STATIC VARIABLES + **********************/ + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +void lv_test_print(const char * s, ...) +{ + va_list args; + va_start(args, s); + vfprintf(stdout, s, args); + fprintf(stdout, "\n"); + va_end(args); +} + +void lv_test_exit(const char * s, ...) +{ + va_list args; + va_start(args, s); + vfprintf(stderr, s, args); + fprintf(stderr, "\n"); + va_end(args); + + exit(1); +} + +void lv_test_error(const char * s, ...) +{ + va_list args; + va_start(args, s); + vfprintf(stderr, s, args); + fprintf(stderr, "\n"); + va_end(args); + exit(1); +} + +void lv_test_assert_true(int32_t expression, const char * s) +{ + if(!expression) { + lv_test_error(" FAIL: %s. (Expected: not zero)", s, expression); + } else { + lv_test_print(" PASS: %s. (Expected: not zero)", s, expression); + } +} + +void lv_test_assert_int_eq(int32_t n_ref, int32_t n_act, const char * s) +{ + if(n_ref != n_act) { + lv_test_error(" FAIL: %s. (Expected: %d, Actual: %d)", s, n_ref, n_act); + } else { + lv_test_print(" PASS: %s. (Expected: %d)", s, n_ref); + } +} + +void lv_test_assert_int_gt(int32_t n_ref, int32_t n_act, const char * s) +{ + if(n_act <= n_ref) { + lv_test_error(" FAIL: %s. (Expected: > %d, Actual: %d)", s, n_ref, n_act); + } else { + lv_test_print(" PASS: %s. (Expected: > %d, , Actual: %d)", s, n_ref, n_act); + } +} + +void lv_test_assert_int_lt(int32_t n_ref, int32_t n_act, const char * s) +{ + if(n_act >= n_ref) { + lv_test_error(" FAIL: %s. (Expected: < %d, Actual: %d)", s, n_ref, n_act); + } else { + lv_test_print(" PASS: %s. (Expected: < %d, , Actual: %d)", s, n_ref, n_act); + } +} + +void lv_test_assert_str_eq(const char * s_ref, const char * s_act, const char * s) +{ + if(strcmp(s_ref, s_act) != 0) { + lv_test_error(" FAIL: %s. (Expected: %s, Actual: %s)", s, s_ref, s_act); + } else { + lv_test_print(" PASS: %s. (Expected: %s)", s, s_ref); + } +} + +void lv_test_assert_array_eq(const uint8_t *p_ref, const uint8_t *p_act, int32_t size, const char * s) +{ + if(memcmp(p_ref, p_act, size) != 0) { + lv_test_error(" FAIL: %s. (Expected: all %d bytes should be equal)", s, size); + } else { + lv_test_print(" PASS: %s. (Expected: all %d bytes should be equal)", s, size); + } +} + +void lv_test_assert_ptr_eq(const void * p_ref, const void * p_act, const char * s) +{ + if(p_ref != p_act) { + lv_test_error(" FAIL: %s. (Expected: 0x%lx, Actual: 0x%lx)", s, p_ref, p_act); + } else { + lv_test_print(" PASS: %s. (Expected: 0x%lx)", s, p_ref); + } +} + +void lv_test_assert_color_eq(lv_color_t c_ref, lv_color_t c_act, const char * s) +{ + if(c_ref.full != c_act.full) { + lv_test_error(" FAIL: %s. (Expected: R:%02x, G:%02x, B:%02x, Actual: R:%02x, G:%02x, B:%02x)", s, + c_ref.ch.red, c_ref.ch.green, c_ref.ch.blue, + c_act.ch.red, c_act.ch.green, c_act.ch.blue); + } else { + lv_test_print(" PASS: %s. (Expected: R:%02x, G:%02x, B:%02x)", s, + c_ref.ch.red, c_ref.ch.green, c_ref.ch.blue); + } +} + +void lv_test_assert_img_eq(const char * fn_ref, const char * s) +{ +#if LV_COLOR_DEPTH != 32 + lv_test_print(" SKIP: Can't compare '%s' because LV_COLOR_DEPTH != 32", fn_ref); + return; +#endif + +#if LV_HOR_RES_MAX != 800 || LV_VER_RES_MAX != 480 + lv_test_print(" SKIP: Can't compare '%s' because the resolution needs to be 800x480 (LV_HOR_RES_MAX, LV_VER_RES_MAX)", fn_ref); + return; +#endif + + char fn_ref_full[512]; + sprintf(fn_ref_full, "%s%s", REF_IMGS_PATH, fn_ref); + + png_img_t p; + read_png_file(&p, fn_ref_full); + uint8_t * screen_buf; + + lv_disp_t * disp = lv_disp_get_default(); + lv_obj_invalidate(lv_disp_get_scr_act(disp)); + lv_refr_now(disp); + + extern lv_color_t test_fb[]; + + screen_buf = (uint8_t *)test_fb; + + uint8_t * ptr_act = NULL; + const png_byte* ptr_ref = NULL; + + bool err = false; + int x, y, i_buf = 0; + for (y=0; y<p.height; y++) { + png_byte* row = p.row_pointers[y]; + for (x=0; x<p.width; x++) { + ptr_ref = &(row[x*3]); + ptr_act = &(screen_buf[i_buf*4]); + uint8_t tmp = ptr_act[0]; + ptr_act[0] = ptr_act[2]; + ptr_act[2] = tmp; + + if(memcmp(ptr_act, ptr_ref, 3) != 0) { + err = true; + break; + } + i_buf++; + } + if(err) break; + } + + png_release(&p); + + if(err) { + uint32_t ref_px = 0; + uint32_t act_px = 0; + memcpy(&ref_px, ptr_ref, 3); + memcpy(&act_px, ptr_act, 3); + lv_test_error(" FAIL: %s. (Expected: %s, diff. at (%d;%d), %08x instead of %08x)", s, fn_ref, x, y, act_px, ref_px); + } else { + lv_test_print(" PASS: %s. (Expected: %s)", s, fn_ref); + } +} + +/********************** + * STATIC FUNCTIONS + **********************/ + +static void read_png_file(png_img_t * p, const char* file_name) +{ + char header[8]; // 8 is the maximum size that can be checked + + /* open file and test for it being a png */ + FILE *fp = fopen(file_name, "rb"); + if (!fp) + lv_test_exit("[read_png_file] File %s could not be opened for reading", file_name); + size_t rcnt = fread(header, 1, 8, fp); + if (rcnt != 8 || png_sig_cmp((png_const_bytep)header, 0, 8)) + lv_test_exit("[read_png_file] File %s is not recognized as a PNG file", file_name); + + /* initialize stuff */ + p->png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + + if (!p->png_ptr) + lv_test_exit("[read_png_file] png_create_read_struct failed"); + + p->info_ptr = png_create_info_struct(p->png_ptr); + if (!p->info_ptr) + lv_test_exit("[read_png_file] png_create_info_struct failed"); + + if (setjmp(png_jmpbuf(p->png_ptr))) + lv_test_exit("[read_png_file] Error during init_io"); + + png_init_io(p->png_ptr, fp); + png_set_sig_bytes(p->png_ptr, 8); + + png_read_info(p->png_ptr, p->info_ptr); + + p->width = png_get_image_width(p->png_ptr, p->info_ptr); + p->height = png_get_image_height(p->png_ptr, p->info_ptr); + p->color_type = png_get_color_type(p->png_ptr, p->info_ptr); + p->bit_depth = png_get_bit_depth(p->png_ptr, p->info_ptr); + + p->number_of_passes = png_set_interlace_handling(p->png_ptr); + png_read_update_info(p->png_ptr, p->info_ptr); + + /* read file */ + if (setjmp(png_jmpbuf(p->png_ptr))) + lv_test_exit("[read_png_file] Error during read_image"); + + p->row_pointers = (png_bytep*) malloc(sizeof(png_bytep) * p->height); + + int y; + for (y=0; y<p->height; y++) + p->row_pointers[y] = (png_byte*) malloc(png_get_rowbytes(p->png_ptr,p->info_ptr)); + + png_read_image(p->png_ptr, p->row_pointers); + + fclose(fp); +} +// +// +//static void write_png_file(png_img_t * p, const char* file_name) +//{ +// /* create file */ +// FILE *fp = fopen(file_name, "wb"); +// if (!fp) +// lv_test_exit("[write_png_file] File %s could not be opened for writing", file_name); +// +// +// /* initialize stuff */ +// p->png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); +// +// if (!p->png_ptr) +// lv_test_exit("[write_png_file] png_create_write_struct failed"); +// +// p->info_ptr = png_create_info_struct(p->png_ptr); +// if (!p->info_ptr) +// lv_test_exit("[write_png_file] png_create_info_struct failed"); +// +// if (setjmp(png_jmpbuf(p->png_ptr))) +// lv_test_exit("[write_png_file] Error during init_io"); +// +// png_init_io(p->png_ptr, fp); +// +// +// /* write header */ +// if (setjmp(png_jmpbuf(p->png_ptr))) +// lv_test_exit("[write_png_file] Error during writing header"); +// +// png_set_IHDR(p->png_ptr, p->info_ptr, p->width, p->height, +// p->bit_depth, p->color_type, PNG_INTERLACE_NONE, +// PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); +// +// png_write_info(p->png_ptr, p->info_ptr); +// +// +// /* write bytes */ +// if (setjmp(png_jmpbuf(p->png_ptr))) +// lv_test_exit("[write_png_file] Error during writing bytes"); +// +// png_write_image(p->png_ptr, p->row_pointers); +// +// +// /* end write */ +// if (setjmp(png_jmpbuf(p->png_ptr))) +// lv_test_exit("[write_png_file] Error during end of write"); +// +// png_write_end(p->png_ptr, NULL); +// +// fclose(fp); +//} +// +static void png_release(png_img_t * p) +{ + int y; + for (y=0; y<p->height; y++) + free(p->row_pointers[y]); + free(p->row_pointers); +} + +//static void process_file(png_img_t * p) +//{ +// if (png_get_color_type(p->png_ptr, p->info_ptr) == PNG_COLOR_TYPE_RGB) +// lv_test_exit("[process_file] input file is PNG_COLOR_TYPE_RGB but must be PNG_COLOR_TYPE_RGBA " +// "(lacks the alpha channel)"); +// +// if (png_get_color_type(p->png_ptr, p->info_ptr) != PNG_COLOR_TYPE_RGBA) +// lv_test_exit("[process_file] color_type of input file must be PNG_COLOR_TYPE_RGBA (%d) (is %d)", +// PNG_COLOR_TYPE_RGBA, png_get_color_type(p->png_ptr, p->info_ptr)); +// +// int x, y; +// for (y=0; y<p->height; y++) { +// png_byte* row = p->row_pointers[y]; +// for (x=0; x<p->width; x++) { +// png_byte* ptr = &(row[x*4]); +// printf("Pixel at position [ %d - %d ] has RGBA values: %d - %d - %d - %d\n", +// x, y, ptr[0], ptr[1], ptr[2], ptr[3]); +// +// /* set red value to 0 and green value to the blue one */ +// ptr[0] = 0; +// ptr[1] = ptr[2]; +// } +// } +//} +#endif diff --git a/src/libs/lvgl/tests/lv_test_assert.h b/src/libs/lvgl/tests/lv_test_assert.h new file mode 100644 index 00000000..8d006ecf --- /dev/null +++ b/src/libs/lvgl/tests/lv_test_assert.h @@ -0,0 +1,53 @@ +/** + * @file lv_test_assert.h + * + */ + +#ifndef LV_TEST_ASSERT_H +#define LV_TEST_ASSERT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ +#include <stdbool.h> +#include <stdint.h> +#include "../lvgl.h" + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * GLOBAL PROTOTYPES + **********************/ + +void lv_test_print(const char * s, ...); +void lv_test_exit(const char * s, ...); +void lv_test_error(const char * s, ...); +void lv_test_assert_true(int32_t expression, const char * s); +void lv_test_assert_int_eq(int32_t n1, int32_t n2, const char * s); +void lv_test_assert_int_gt(int32_t n_ref, int32_t n_act, const char * s); +void lv_test_assert_int_lt(int32_t n_ref, int32_t n_act, const char * s); +void lv_test_assert_str_eq(const char * str1, const char * str2, const char * s); +void lv_test_assert_ptr_eq(const void * p_ref, const void * p_act, const char * s); +void lv_test_assert_color_eq(lv_color_t c_ref, lv_color_t c_act, const char * s); +void lv_test_assert_img_eq(const char * ref_img_fn, const char * s); +void lv_test_assert_array_eq(const uint8_t *p_ref, const uint8_t *p_act, int32_t size, const char * s); + +/********************** + * MACROS + **********************/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /*LV_TEST_ASSERT_H*/ diff --git a/src/libs/lvgl/tests/lv_test_conf.h b/src/libs/lvgl/tests/lv_test_conf.h new file mode 100644 index 00000000..3fe81486 --- /dev/null +++ b/src/libs/lvgl/tests/lv_test_conf.h @@ -0,0 +1,50 @@ +/** + * @file lv_test_conf.h + * + */ + +#ifndef LV_TEST_CONF_H +#define LV_TEST_CONF_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +uint32_t custom_tick_get(void); +#define LV_TICK_CUSTOM_SYS_TIME_EXPR custom_tick_get() + +typedef int16_t lv_coord_t; +typedef void * lv_disp_drv_user_data_t; /*Type of user data in the display driver*/ +typedef void * lv_indev_drv_user_data_t; /*Type of user data in the input device driver*/ +typedef void * lv_font_user_data_t; +typedef void * lv_obj_user_data_t; +typedef void * lv_anim_user_data_t; +typedef void * lv_group_user_data_t; +typedef void * lv_fs_drv_user_data_t; +typedef void * lv_img_decoder_user_data_t; + +/********************** + * GLOBAL PROTOTYPES + **********************/ + +/********************** + * MACROS + **********************/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /*LV_TEST_CONF_H*/ diff --git a/src/libs/lvgl/tests/lv_test_core/lv_test_core.c b/src/libs/lvgl/tests/lv_test_core/lv_test_core.c new file mode 100644 index 00000000..d500211e --- /dev/null +++ b/src/libs/lvgl/tests/lv_test_core/lv_test_core.c @@ -0,0 +1,56 @@ +/** + * @file lv_test_core.c + * + */ + +/********************* + * INCLUDES + *********************/ +#include "../lv_test_assert.h" + +#if LV_BUILD_TEST +#include "lv_test_core.h" +#include "lv_test_obj.h" +#include "lv_test_style.h" +#include "lv_test_font_loader.h" + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * STATIC PROTOTYPES + **********************/ + +/********************** + * STATIC VARIABLES + **********************/ + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +void lv_test_core(void) +{ + lv_test_print(""); + lv_test_print("*******************"); + lv_test_print("Start lv_core tests"); + lv_test_print("*******************"); + + lv_test_obj(); + lv_test_style(); + lv_test_font_loader(); +} + +/********************** + * STATIC FUNCTIONS + **********************/ +#endif diff --git a/src/libs/lvgl/tests/lv_test_core/lv_test_core.h b/src/libs/lvgl/tests/lv_test_core/lv_test_core.h new file mode 100644 index 00000000..239b018e --- /dev/null +++ b/src/libs/lvgl/tests/lv_test_core/lv_test_core.h @@ -0,0 +1,38 @@ +/** + * @file lv_test_core.h + * + */ + +#ifndef LV_TEST_CORE_H +#define LV_TEST_CORE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * GLOBAL PROTOTYPES + **********************/ +void lv_test_core(void); + +/********************** + * MACROS + **********************/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /*LV_TEST_CORE_H*/ diff --git a/src/libs/lvgl/tests/lv_test_core/lv_test_font_loader.c b/src/libs/lvgl/tests/lv_test_core/lv_test_font_loader.c new file mode 100644 index 00000000..16d75444 --- /dev/null +++ b/src/libs/lvgl/tests/lv_test_core/lv_test_font_loader.c @@ -0,0 +1,223 @@ +/** + * @file lv_test_font_loader.c + * + */ + +/********************* + * INCLUDES + *********************/ + +#include "../../lvgl.h" +#if LV_BUILD_TEST +#include "../lv_test_assert.h" +#include "../src/lv_font/lv_font_fmt_txt.h" +#include "../src/lv_font/lv_font.h" +#include "../src/lv_font/lv_font_loader.h" + +#include "lv_test_font_loader.h" + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * STATIC PROTOTYPES + **********************/ + +#if LV_USE_FILESYSTEM +static int compare_fonts(lv_font_t * f1, lv_font_t * f2); +#endif + +/********************** + * STATIC VARIABLES + **********************/ + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +extern lv_font_t font_1; +extern lv_font_t font_2; +extern lv_font_t font_3; + +void lv_test_font_loader(void) +{ +#if LV_USE_FILESYSTEM + lv_test_print(""); + lv_test_print("==================="); + lv_test_print("Start lv_font tests"); + lv_test_print("==================="); + + lv_font_t * font_1_bin = lv_font_load("f:font_1.fnt"); + lv_font_t * font_2_bin = lv_font_load("f:font_2.fnt"); + lv_font_t * font_3_bin = lv_font_load("f:font_3.fnt"); + + compare_fonts(&font_1, font_1_bin); + compare_fonts(&font_2, font_2_bin); + compare_fonts(&font_3, font_3_bin); + + lv_font_free(font_1_bin); + lv_font_free(font_2_bin); + lv_font_free(font_3_bin); +#else + lv_test_print("SKIP: font load test because it requires LV_USE_FILESYSTEM 1 and LV_FONT_FMT_TXT_LARGE 0"); +#endif +} + +#if LV_USE_FILESYSTEM +static int compare_fonts(lv_font_t * f1, lv_font_t * f2) +{ + lv_test_assert_true(f1 != NULL && f2 != NULL, "font not null"); + + lv_test_assert_ptr_eq(f1->get_glyph_dsc, f2->get_glyph_dsc, "glyph_dsc"); + lv_test_assert_ptr_eq(f1->get_glyph_bitmap, f2->get_glyph_bitmap, "glyph_bitmap"); + lv_test_assert_int_eq(f1->line_height, f2->line_height, "line_height"); + lv_test_assert_int_eq(f1->base_line, f2->base_line, "base_line"); +#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) + lv_test_assert_int_eq(f1->subpx, f2->subpx, "subpx"); +#endif + lv_font_fmt_txt_dsc_t * dsc1 = (lv_font_fmt_txt_dsc_t *) f1->dsc; + lv_font_fmt_txt_dsc_t * dsc2 = (lv_font_fmt_txt_dsc_t *) f2->dsc; + + lv_test_assert_int_eq(dsc1->kern_scale, dsc2->kern_scale, "kern_scale"); + lv_test_assert_int_eq(dsc1->cmap_num, dsc2->cmap_num, "cmap_num"); + lv_test_assert_int_eq(dsc1->bpp, dsc2->bpp, "bpp"); + lv_test_assert_int_eq(dsc1->kern_classes, dsc2->kern_classes, "kern_classes"); + lv_test_assert_int_eq(dsc1->bitmap_format, dsc2->bitmap_format, "bitmap_format"); + + // cmaps + int total_glyphs = 0; + for(int i = 0; i < dsc1->cmap_num; ++i) { + lv_font_fmt_txt_cmap_t * cmaps1 = (lv_font_fmt_txt_cmap_t *) &dsc1->cmaps[i]; + lv_font_fmt_txt_cmap_t * cmaps2 = (lv_font_fmt_txt_cmap_t *) &dsc2->cmaps[i]; + + lv_test_assert_int_eq(cmaps1->range_start, cmaps2->range_start, "range_start"); + lv_test_assert_int_eq(cmaps1->range_length, cmaps2->range_length, "range_length"); + lv_test_assert_int_eq(cmaps1->glyph_id_start, cmaps2->glyph_id_start, "glyph_id_start"); + lv_test_assert_int_eq(cmaps1->type, cmaps2->type, "type"); + lv_test_assert_int_eq(cmaps1->list_length, cmaps2->list_length, "list_length"); + + if(cmaps1->unicode_list != NULL && cmaps2->unicode_list != NULL) { + lv_test_assert_true(cmaps1->unicode_list && cmaps2->unicode_list, "unicode_list"); + + lv_test_assert_array_eq( + (uint8_t *) cmaps1->unicode_list, + (uint8_t *) cmaps2->unicode_list, + sizeof(uint16_t) * cmaps1->list_length, + "unicode_list"); + total_glyphs += cmaps1->list_length; + } + else { + total_glyphs += cmaps1->range_length; + lv_test_assert_ptr_eq(cmaps1->unicode_list, cmaps2->unicode_list, "unicode_list"); + } + + if(cmaps1->glyph_id_ofs_list != NULL && cmaps2->glyph_id_ofs_list != NULL) { + uint8_t * ids1 = (uint8_t *) cmaps1->glyph_id_ofs_list; + uint8_t * ids2 = (uint8_t *) cmaps2->glyph_id_ofs_list; + + lv_test_assert_array_eq(ids1, ids2, cmaps1->list_length, "glyph_id_ofs_list"); + } + else { + lv_test_assert_ptr_eq(cmaps1->glyph_id_ofs_list, cmaps2->glyph_id_ofs_list, "glyph_id_ofs_list"); + } + } + + // kern_dsc + if (dsc1->kern_classes == 1 && dsc2->kern_classes == 1) { + lv_font_fmt_txt_kern_classes_t * kern1 = (lv_font_fmt_txt_kern_classes_t *) dsc1->kern_dsc; + lv_font_fmt_txt_kern_classes_t * kern2 = (lv_font_fmt_txt_kern_classes_t *) dsc2->kern_dsc; + if (kern1 != NULL && kern2 != NULL) { + lv_test_assert_int_eq(kern1->right_class_cnt, kern2->right_class_cnt, "right_class_cnt"); + lv_test_assert_int_eq(kern1->left_class_cnt, kern2->left_class_cnt, "left_class_cnt"); + + lv_test_assert_array_eq( + (uint8_t *) kern1->left_class_mapping, + (uint8_t *) kern2->left_class_mapping, + kern1->left_class_cnt, + "left_class_mapping"); + + lv_test_assert_array_eq( + (uint8_t *) kern1->right_class_mapping, + (uint8_t *) kern2->right_class_mapping, + kern1->right_class_cnt, + "right_class_mapping"); + + lv_test_assert_array_eq( + (uint8_t *) kern1->class_pair_values, + (uint8_t *) kern2->class_pair_values, + kern1->right_class_cnt * kern1->left_class_cnt, + "class_pair_values"); + } + else { + lv_test_assert_ptr_eq(kern1, kern2, "kern"); + } + } + else if (dsc1->kern_classes == 0 && dsc2->kern_classes == 0) { + lv_font_fmt_txt_kern_pair_t * kern1 = (lv_font_fmt_txt_kern_pair_t *) dsc1->kern_dsc; + lv_font_fmt_txt_kern_pair_t * kern2 = (lv_font_fmt_txt_kern_pair_t *) dsc2->kern_dsc; + if (kern1 != NULL && kern2 != NULL) { + lv_test_assert_int_eq(kern1->glyph_ids_size, kern2->glyph_ids_size, "glyph_ids_size"); + lv_test_assert_int_eq(kern1->pair_cnt, kern2->pair_cnt, "pair_cnt"); + + int ids_size; + + if (kern1->glyph_ids_size == 0) { + ids_size = sizeof(int8_t) * 2 * kern1->pair_cnt; + } + else { + ids_size = sizeof(int16_t) * 2 * kern1->pair_cnt; + } + + lv_test_assert_array_eq(kern1->glyph_ids, kern2->glyph_ids, ids_size, "glyph_ids"); + lv_test_assert_array_eq( + (uint8_t * ) kern1->values, + (uint8_t * ) kern2->values, + kern1->pair_cnt, + "glyph_values"); + } + } + + lv_font_fmt_txt_glyph_dsc_t * glyph_dsc1 = (lv_font_fmt_txt_glyph_dsc_t *) dsc1->glyph_dsc; + lv_font_fmt_txt_glyph_dsc_t * glyph_dsc2 = (lv_font_fmt_txt_glyph_dsc_t *) dsc2->glyph_dsc; + + for(int i = 0; i < total_glyphs; ++i) { + if (i < total_glyphs - 1) { + int size1 = glyph_dsc1[i+1].bitmap_index - glyph_dsc1[i].bitmap_index; + + if (size1 > 0) { + lv_test_assert_array_eq( + dsc1->glyph_bitmap + glyph_dsc1[i].bitmap_index, + dsc2->glyph_bitmap + glyph_dsc2[i].bitmap_index, + size1 - 1, "glyph_bitmap"); + } + } + lv_test_assert_int_eq(glyph_dsc1[i].adv_w, glyph_dsc2[i].adv_w, "adv_w"); + lv_test_assert_int_eq(glyph_dsc1[i].box_w, glyph_dsc2[i].box_w, "box_w"); + lv_test_assert_int_eq(glyph_dsc1[i].box_h, glyph_dsc2[i].box_h, "box_h"); + lv_test_assert_int_eq(glyph_dsc1[i].ofs_x, glyph_dsc2[i].ofs_x, "ofs_x"); + lv_test_assert_int_eq(glyph_dsc1[i].ofs_y, glyph_dsc2[i].ofs_y, "ofs_y"); + } + + LV_LOG_INFO("No differences found!"); + return 0; +} +#endif + +#pragma GCC diagnostic pop +/********************** + * STATIC FUNCTIONS + **********************/ + +#endif // LV_BUILD_TEST diff --git a/src/libs/lvgl/tests/lv_test_core/lv_test_font_loader.h b/src/libs/lvgl/tests/lv_test_core/lv_test_font_loader.h new file mode 100644 index 00000000..25aebc06 --- /dev/null +++ b/src/libs/lvgl/tests/lv_test_core/lv_test_font_loader.h @@ -0,0 +1,38 @@ +/** + * @file lv_test_font_loader.h + * + */ + +#ifndef LV_TEST_FONT_LOADER_H +#define LV_TEST_FONT_LOADER_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * GLOBAL PROTOTYPES + **********************/ +void lv_test_font_loader(void); + +/********************** + * MACROS + **********************/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /*LV_TEST_FONT_LOADER_H*/ diff --git a/src/libs/lvgl/tests/lv_test_core/lv_test_obj.c b/src/libs/lvgl/tests/lv_test_core/lv_test_obj.c new file mode 100644 index 00000000..e4708a18 --- /dev/null +++ b/src/libs/lvgl/tests/lv_test_core/lv_test_obj.c @@ -0,0 +1,88 @@ +/** + * @file lv_test_obj.c + * + */ + +/********************* + * INCLUDES + *********************/ +#include "../../lvgl.h" +#include "../lv_test_assert.h" +#include "lv_test_obj.h" + +#if LV_BUILD_TEST + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * STATIC PROTOTYPES + **********************/ +static void create_delete_change_parent(void); + +/********************** + * STATIC VARIABLES + **********************/ + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +void lv_test_obj(void) +{ + lv_test_print(""); + lv_test_print("=================="); + lv_test_print("Start lv_obj tests"); + lv_test_print("=================="); + + create_delete_change_parent(); +} + +/********************** + * STATIC FUNCTIONS + **********************/ + +static void create_delete_change_parent(void) +{ + + lv_test_print(""); + lv_test_print("Create, delete, change parent of a simple object:"); + lv_test_print("-------------------------------------------------"); + + lv_test_print("Create an object on the default screen"); + lv_test_assert_int_eq(0, lv_obj_count_children(lv_scr_act()), "Screen's children count before creation"); + + lv_obj_t * obj = lv_obj_create(lv_scr_act(), NULL); + lv_test_assert_int_eq(1, lv_obj_count_children(lv_scr_act()), "Screen's children count after creation"); + lv_test_assert_int_eq(0, lv_obj_count_children(obj), "New object's children count after creation"); + + lv_test_print("Delete the created object"); + lv_obj_del(obj); + obj = NULL; + lv_test_assert_int_eq(0, lv_obj_count_children(lv_scr_act()), "Screen's children count after delete"); + + lv_test_print("Create two objects"); + lv_obj_t * obj_parent = lv_obj_create(lv_scr_act(), NULL); + lv_obj_t * obj_child = lv_obj_create(lv_scr_act(), NULL); + lv_test_assert_int_eq(2, lv_obj_count_children(lv_scr_act()), "Screen's children count after creation"); + + lv_test_print("Change the parent of the second object to the first"); + lv_obj_set_parent(obj_child, obj_parent); + lv_test_assert_int_eq(1, lv_obj_count_children(lv_scr_act()), "Screen's children count after parent change"); + lv_test_assert_int_eq(1, lv_obj_count_children(obj_parent), "Parent object's children count after parent change"); + lv_test_assert_int_eq(0, lv_obj_count_children(obj_child), "Child object's children count after parent change"); + + lv_test_print("Remove the parent object"); + lv_obj_del(obj_parent); + lv_test_assert_int_eq(0, lv_obj_count_children(lv_scr_act()), "Screen's children count after delete"); +} +#endif diff --git a/src/libs/lvgl/tests/lv_test_core/lv_test_obj.h b/src/libs/lvgl/tests/lv_test_core/lv_test_obj.h new file mode 100644 index 00000000..60c22976 --- /dev/null +++ b/src/libs/lvgl/tests/lv_test_core/lv_test_obj.h @@ -0,0 +1,38 @@ +/** + * @file lv_test_obj.h + * + */ + +#ifndef LV_TEST_OBJ_H +#define LV_TEST_OBJ_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * GLOBAL PROTOTYPES + **********************/ +void lv_test_obj(void); + +/********************** + * MACROS + **********************/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /*LV_TEST_OBJ_H*/ diff --git a/src/libs/lvgl/tests/lv_test_core/lv_test_style.c b/src/libs/lvgl/tests/lv_test_core/lv_test_style.c new file mode 100644 index 00000000..f0ddf7b6 --- /dev/null +++ b/src/libs/lvgl/tests/lv_test_core/lv_test_style.c @@ -0,0 +1,624 @@ +/** + * @file lv_test_style.c + * + */ + +/********************* + * INCLUDES + *********************/ +#include "../../lvgl.h" +#include "../lv_test_assert.h" +#include "lv_test_style.h" + +#if LV_BUILD_TEST + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * STATIC PROTOTYPES + **********************/ +static void empty_style(void); +static void add_remove_read_prop(void); +static void cascade(void); +static void copy(void); +static void states(void); +static void mem_leak(void); + +/********************** + * STATIC VARIABLES + **********************/ + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +void lv_test_style(void) +{ + lv_test_print(""); + lv_test_print("===================="); + lv_test_print("Start lv_style tests"); + lv_test_print("===================="); + + empty_style(); + add_remove_read_prop(); + cascade(); + copy(); + states(); + mem_leak(); +} + +/********************** + * STATIC FUNCTIONS + **********************/ + +static void empty_style(void) +{ + lv_test_print(""); + lv_test_print("Test empty styles:"); + lv_test_print("-----------------"); + + lv_style_list_t style_list; + lv_style_list_init(&style_list); + + lv_res_t found; + lv_style_int_t value; + lv_opa_t opa; + const void * ptr; + lv_color_t color; + + lv_test_print("Get a properties from an empty style"); + + found = _lv_style_list_get_int(&style_list, LV_STYLE_TEXT_LINE_SPACE, &value); + lv_test_assert_int_eq(LV_RES_INV, found, "Get an 'int' property"); + + found = _lv_style_list_get_opa(&style_list, LV_STYLE_BG_OPA, &opa); + lv_test_assert_int_eq(LV_RES_INV, found, "Get an 'opa' property"); + + found = _lv_style_list_get_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); + lv_test_assert_int_eq(LV_RES_INV, found, "Get a 'ptr' property"); + + found = _lv_style_list_get_color(&style_list, LV_STYLE_BG_COLOR, &color); + lv_test_assert_int_eq(LV_RES_INV, found, "Get a 'color' property"); +} + +static void add_remove_read_prop(void) +{ + lv_test_print(""); + lv_test_print("Add, remove and read properties:"); + lv_test_print("--------------------------------"); + + lv_style_list_t style_list; + lv_style_list_init(&style_list); + + lv_style_t style; + lv_style_init(&style); + + _lv_style_list_add_style(&style_list, &style); + + lv_res_t found; + lv_style_int_t value; + lv_opa_t opa; + const void * ptr; + lv_color_t color; + + lv_test_print("Add an empty style and read properties"); + + found = _lv_style_list_get_int(&style_list, LV_STYLE_TEXT_LINE_SPACE, &value); + lv_test_assert_int_eq(LV_RES_INV, found, "Get a non existing 'int' property"); + + found = _lv_style_list_get_opa(&style_list, LV_STYLE_BG_OPA, &opa); + lv_test_assert_int_eq(LV_RES_INV, found, "Get a non existing 'opa' property"); + + found = _lv_style_list_get_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); + lv_test_assert_int_eq(LV_RES_INV, found, "Get a non existing 'ptr' property"); + + found = _lv_style_list_get_color(&style_list, LV_STYLE_BG_COLOR, &color); + lv_test_assert_int_eq(LV_RES_INV, found, "Get a non existing 'color' property"); + + lv_test_print("Set properties and read back the values"); + _lv_style_set_int(&style, LV_STYLE_TEXT_LINE_SPACE, 5); + _lv_style_set_opa(&style, LV_STYLE_BG_OPA, LV_OPA_50); + _lv_style_set_ptr(&style, LV_STYLE_TEXT_FONT, LV_THEME_DEFAULT_FONT_NORMAL); + _lv_style_set_color(&style, LV_STYLE_BG_COLOR, LV_COLOR_RED); + + found = _lv_style_list_get_int(&style_list, LV_STYLE_TEXT_LINE_SPACE, &value); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an existing 'int' property"); + lv_test_assert_int_eq(5, value, "Get the value of an 'int' property"); + + found = _lv_style_list_get_opa(&style_list, LV_STYLE_BG_OPA, &opa); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an existing 'opa' property"); + lv_test_assert_int_eq(LV_OPA_50, opa, "Get the value of an 'opa' property"); + + found = _lv_style_list_get_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an existing 'ptr' property"); + lv_test_assert_ptr_eq(LV_THEME_DEFAULT_FONT_NORMAL, ptr, "Get the value of a 'ptr' property"); + + found = _lv_style_list_get_color(&style_list, LV_STYLE_BG_COLOR, &color); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an existing 'color' property"); + lv_test_assert_color_eq(LV_COLOR_RED, color, "Get the value of a 'color' property"); + + lv_test_print("Reset the style"); + lv_style_reset(&style); + found = _lv_style_list_get_int(&style_list, LV_STYLE_TEXT_LINE_SPACE, &value); + lv_test_assert_int_eq(LV_RES_INV, found, "Get an 'int' property from a reseted style"); + + found = _lv_style_list_get_opa(&style_list, LV_STYLE_BG_OPA, &opa); + lv_test_assert_int_eq(LV_RES_INV, found, "Get an 'opa' property from a reseted style"); + + found = _lv_style_list_get_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); + lv_test_assert_int_eq(LV_RES_INV, found, "Get an 'ptr' property from a reseted style"); + + found = _lv_style_list_get_color(&style_list, LV_STYLE_BG_COLOR, &color); + lv_test_assert_int_eq(LV_RES_INV, found, "Get an 'color' property from a reseted style"); + + /*Clean-up*/ + _lv_style_list_reset(&style_list); +} + +static void cascade(void) +{ + lv_test_print(""); + lv_test_print("Cascade style styles:"); + lv_test_print("----------------------"); + + lv_style_list_t style_list; + lv_style_list_init(&style_list); + + lv_style_t style_first; + lv_style_init(&style_first); + _lv_style_list_add_style(&style_list, &style_first); + + lv_style_t style_second; + lv_style_init(&style_second); + _lv_style_list_add_style(&style_list, &style_second); + + lv_res_t found; + lv_style_int_t value; + lv_opa_t opa; + const void * ptr; + lv_color_t color; + + lv_test_print("Read properties set only in the firstly added style"); + + _lv_style_set_int(&style_first, LV_STYLE_TEXT_LINE_SPACE, 5); + _lv_style_set_opa(&style_first, LV_STYLE_BG_OPA, LV_OPA_50); + _lv_style_set_ptr(&style_first, LV_STYLE_TEXT_FONT, LV_THEME_DEFAULT_FONT_NORMAL); + _lv_style_set_color(&style_first, LV_STYLE_BG_COLOR, LV_COLOR_RED); + + found = _lv_style_list_get_int(&style_list, LV_STYLE_TEXT_LINE_SPACE, &value); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an 'int' property"); + lv_test_assert_int_eq(5, value, "Get the value of an 'int' property"); + + found = _lv_style_list_get_opa(&style_list, LV_STYLE_BG_OPA, &opa); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an 'opa' property"); + lv_test_assert_int_eq(LV_OPA_50, opa, "Get the value of an 'opa' property"); + + found = _lv_style_list_get_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an 'ptr' property"); + lv_test_assert_ptr_eq(LV_THEME_DEFAULT_FONT_NORMAL, ptr, "Get the value of a 'ptr' property"); + + found = _lv_style_list_get_color(&style_list, LV_STYLE_BG_COLOR, &color); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an 'color' property"); + lv_test_assert_color_eq(LV_COLOR_RED, color, "Get the value of a 'color' property"); + + lv_test_print("Overwrite the properties from the second style"); + + _lv_style_set_int(&style_second, LV_STYLE_TEXT_LINE_SPACE, 10); + _lv_style_set_opa(&style_second, LV_STYLE_BG_OPA, LV_OPA_60); + _lv_style_set_ptr(&style_second, LV_STYLE_TEXT_FONT, LV_THEME_DEFAULT_FONT_NORMAL + 1); + _lv_style_set_color(&style_second, LV_STYLE_BG_COLOR, LV_COLOR_BLUE); + + found = _lv_style_list_get_int(&style_list, LV_STYLE_TEXT_LINE_SPACE, &value); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an overwritten 'int' property"); + lv_test_assert_int_eq(10, value, "Get the value of an overwritten 'int' property"); + + found = _lv_style_list_get_opa(&style_list, LV_STYLE_BG_OPA, &opa); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an overwritten 'opa' property"); + lv_test_assert_int_eq(LV_OPA_60, opa, "Get the value of an overwritten 'opa' property"); + + found = _lv_style_list_get_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an overwritten 'ptr' property"); + lv_test_assert_ptr_eq(LV_THEME_DEFAULT_FONT_NORMAL + 1, ptr, "Get the value of an overwritten 'ptr' property"); + + found = _lv_style_list_get_color(&style_list, LV_STYLE_BG_COLOR, &color); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an overwritten 'color' property"); + lv_test_assert_color_eq(LV_COLOR_BLUE, color, "Get the value of an overwritten 'color' property"); + + lv_test_print("Overwrite the properties with the local style"); + _lv_style_list_set_local_int(&style_list, LV_STYLE_TEXT_LINE_SPACE, 20); + _lv_style_list_set_local_opa(&style_list, LV_STYLE_BG_OPA, LV_OPA_70); + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_TEXT_FONT, LV_THEME_DEFAULT_FONT_NORMAL + 2); + _lv_style_list_set_local_color(&style_list, LV_STYLE_BG_COLOR, LV_COLOR_LIME); + + found = _lv_style_list_get_int(&style_list, LV_STYLE_TEXT_LINE_SPACE, &value); + lv_test_assert_int_eq(LV_RES_OK, found, "Get a local 'int' property"); + lv_test_assert_int_eq(20, value, "Get the value of a local 'int' property"); + + found = _lv_style_list_get_opa(&style_list, LV_STYLE_BG_OPA, &opa); + lv_test_assert_int_eq(LV_RES_OK, found, "Get a local 'opa' property"); + lv_test_assert_int_eq(LV_OPA_70, opa, "Get the value of a local 'opa' property"); + + found = _lv_style_list_get_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); + lv_test_assert_int_eq(LV_RES_OK, found, "Get a local 'ptr' property"); + lv_test_assert_ptr_eq(LV_THEME_DEFAULT_FONT_NORMAL + 2, ptr, "Get the value of a local'ptr' property"); + + found = _lv_style_list_get_color(&style_list, LV_STYLE_BG_COLOR, &color); + lv_test_assert_int_eq(LV_RES_OK, found, "Get a local 'color' property"); + lv_test_assert_color_eq(LV_COLOR_LIME, color, "Get the value of a local'color' property"); + + /*Clean-up*/ + _lv_style_list_reset(&style_list); +} + +static void copy(void) +{ + lv_test_print(""); + lv_test_print("Copy styles and style lists"); + lv_test_print("---------------------------"); + + lv_test_print("Copy a style"); + lv_style_t style_src; + lv_style_init(&style_src); + _lv_style_set_int(&style_src, LV_STYLE_TEXT_LINE_SPACE, 5); + + lv_style_t style_dest; + lv_style_init(&style_dest); + lv_style_copy(&style_dest, &style_src); + + int16_t weight; + lv_style_int_t value; + + weight = _lv_style_get_int(&style_dest, LV_STYLE_TEXT_LINE_SPACE, &value); + lv_test_assert_int_eq(0, weight, "Get a copied property from a style"); + lv_test_assert_int_eq(5, value, "Get the value of a copied from a property"); + + lv_test_print("Copy a style list"); + lv_style_list_t list_src; + lv_style_list_init(&list_src); + _lv_style_list_add_style(&list_src, &style_src); + _lv_style_list_set_local_int(&list_src, LV_STYLE_LINE_DASH_WIDTH, 20); + + lv_style_list_t list_dest; + lv_style_list_init(&list_dest); + lv_style_list_copy(&list_dest, &list_src); + + lv_res_t found; + found = _lv_style_list_get_int(&list_dest, LV_STYLE_TEXT_LINE_SPACE, &value); + lv_test_assert_int_eq(LV_RES_OK, found, "Get a copied property from a list"); + lv_test_assert_int_eq(5, value, "Get the value of a copied property from a list"); + found = _lv_style_list_get_int(&list_dest, LV_STYLE_LINE_DASH_WIDTH, &value); + lv_test_assert_int_eq(LV_RES_OK, found, "Get a copied local property from a list"); + lv_test_assert_int_eq(20, value, "Get the value of a copied local property from a list"); + + /*Clean up*/ + _lv_style_list_reset(&list_dest); + _lv_style_list_reset(&list_src); + + lv_style_reset(&style_dest); + lv_style_reset(&style_src); +} + +static void states(void) +{ + lv_test_print(""); + lv_test_print("Test style states:"); + lv_test_print("------------------"); + + lv_style_list_t style_list; + lv_style_list_init(&style_list); + + lv_style_t style_first; + lv_style_init(&style_first); + _lv_style_list_add_style(&style_list, &style_first); + + lv_style_t style_second; + lv_style_init(&style_second); + _lv_style_list_add_style(&style_list, &style_second); + + lv_test_print("Test state precedence in 1 style"); + _lv_style_set_int(&style_first, LV_STYLE_TEXT_LINE_SPACE, 5); + _lv_style_set_int(&style_first, LV_STYLE_TEXT_LINE_SPACE | (LV_STATE_CHECKED) << LV_STYLE_STATE_POS, 6); + _lv_style_set_int(&style_first, LV_STYLE_TEXT_LINE_SPACE | (LV_STATE_PRESSED) << LV_STYLE_STATE_POS, 7); + + lv_res_t found; + lv_style_int_t value; + + found = _lv_style_list_get_int(&style_list, LV_STYLE_TEXT_LINE_SPACE, &value); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an 'int' property in normal state"); + lv_test_assert_int_eq(5, value, "Get the value of an 'int' property in normal state"); + + found = _lv_style_list_get_int(&style_list, LV_STYLE_TEXT_LINE_SPACE | (LV_STATE_CHECKED) << LV_STYLE_STATE_POS, &value); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an 'int' property in checked state"); + lv_test_assert_int_eq(6, value, "Get the value of an 'int' in checked state"); + + found = _lv_style_list_get_int(&style_list, LV_STYLE_TEXT_LINE_SPACE | (LV_STATE_PRESSED) << LV_STYLE_STATE_POS, &value); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an 'int' property in pressed state"); + lv_test_assert_int_eq(7, value, "Get the value of an 'int' in pressed state"); + + found = _lv_style_list_get_int(&style_list, LV_STYLE_TEXT_LINE_SPACE | (LV_STATE_HOVERED) << LV_STYLE_STATE_POS, &value); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an 'int' property in hover (unspecified) state"); + lv_test_assert_int_eq(5, value, "Get the value of an 'int' in hover (unspecified) state"); + + found = _lv_style_list_get_int(&style_list, LV_STYLE_TEXT_LINE_SPACE | (LV_STATE_CHECKED | LV_STATE_PRESSED | LV_STATE_HOVERED) << LV_STYLE_STATE_POS, &value); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an 'int' property in checked pressed hovered state"); + lv_test_assert_int_eq(7, value, "Get the value of an 'int' in checked pressed hovered state"); + + lv_test_print("Test state precedence in 1 style with combined states"); + _lv_style_set_opa(&style_first, LV_STYLE_BG_OPA, LV_OPA_50); + _lv_style_set_opa(&style_first, LV_STYLE_BG_OPA | (LV_STATE_CHECKED | LV_STATE_PRESSED) << LV_STYLE_STATE_POS, LV_OPA_60); + + lv_opa_t opa; + found = _lv_style_list_get_opa(&style_list, LV_STYLE_BG_OPA , &opa); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an 'opa' property in normal state"); + lv_test_assert_int_eq(LV_OPA_50, opa, "Get the value of an 'int' in normal state"); + + found = _lv_style_list_get_opa(&style_list, LV_STYLE_BG_OPA | (LV_STATE_CHECKED) << LV_STYLE_STATE_POS, &opa); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an 'opa' property in checked (unspecified) state"); + lv_test_assert_int_eq(LV_OPA_50, opa, "Get the value of an 'int' in checked (unspecified) state"); + + found = _lv_style_list_get_opa(&style_list, LV_STYLE_BG_OPA | (LV_STATE_CHECKED | LV_STATE_PRESSED) << LV_STYLE_STATE_POS, &opa); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an 'opa' property in checked pressed state"); + lv_test_assert_int_eq(LV_OPA_60, opa, "Get the value of an 'int' in checked pressed state"); + + found = _lv_style_list_get_opa(&style_list, LV_STYLE_BG_OPA | (LV_STATE_CHECKED | LV_STATE_PRESSED | LV_STATE_HOVERED) << LV_STYLE_STATE_POS, &opa); + lv_test_assert_int_eq(LV_RES_OK, found, "Get an 'opa' property in checked pressed hovered state"); + lv_test_assert_int_eq(LV_OPA_60, opa, "Get the value of an 'int' in checked pressed hovered state"); + + lv_test_print("Test state precedence in 2 styles"); + _lv_style_set_color(&style_first, LV_STYLE_BG_COLOR, LV_COLOR_YELLOW); + _lv_style_set_color(&style_first, LV_STYLE_BG_COLOR | (LV_STATE_HOVERED) << LV_STYLE_STATE_POS, LV_COLOR_RED); + _lv_style_set_color(&style_second, LV_STYLE_BG_COLOR | (LV_STATE_CHECKED) << LV_STYLE_STATE_POS, LV_COLOR_LIME); + _lv_style_set_color(&style_second, LV_STYLE_BG_COLOR | (LV_STATE_HOVERED | LV_STATE_PRESSED) << LV_STYLE_STATE_POS, LV_COLOR_BLUE); + + lv_color_t color; + + found = _lv_style_list_get_color(&style_list, LV_STYLE_BG_COLOR, &color); + lv_test_assert_int_eq(LV_RES_OK, found, "Get a 'color' property in normal state"); + lv_test_assert_color_eq(LV_COLOR_YELLOW, color, "Get the value of a 'color' property in normal state"); + + found = _lv_style_list_get_color(&style_list, LV_STYLE_BG_COLOR | (LV_STATE_HOVERED) << LV_STYLE_STATE_POS, &color); + lv_test_assert_int_eq(LV_RES_OK, found, "Get a 'color' property in hovered state"); + lv_test_assert_color_eq(LV_COLOR_RED, color, "Get the value of a 'color' in hovered state"); + + found = _lv_style_list_get_color(&style_list, LV_STYLE_BG_COLOR | (LV_STATE_CHECKED) << LV_STYLE_STATE_POS, &color); + lv_test_assert_int_eq(LV_RES_OK, found, "Get a 'color' property in checked state"); + lv_test_assert_color_eq(LV_COLOR_LIME, color, "Get the value of a 'color' in checked state"); + + found = _lv_style_list_get_color(&style_list, LV_STYLE_BG_COLOR | (LV_STATE_HOVERED | LV_STATE_PRESSED) << LV_STYLE_STATE_POS, &color); + lv_test_assert_int_eq(LV_RES_OK, found, "Get a 'color' property in hover pressed state"); + lv_test_assert_color_eq(LV_COLOR_BLUE, color, "Get the value of a 'color' in hover pressed state"); + + found = _lv_style_list_get_color(&style_list, LV_STYLE_BG_COLOR | (LV_STATE_EDITED) << LV_STYLE_STATE_POS, &color); + lv_test_assert_int_eq(LV_RES_OK, found, "Get a 'color' property in edit (unspecified) state"); + lv_test_assert_color_eq(LV_COLOR_YELLOW, color, "Get the value of a 'color' in edit (unspecified) state"); + + found = _lv_style_list_get_color(&style_list, LV_STYLE_BG_COLOR | (LV_STATE_CHECKED | LV_STATE_EDITED) << LV_STYLE_STATE_POS, &color); + lv_test_assert_int_eq(LV_RES_OK, found, "Get a 'color' property in checked edit state"); + lv_test_assert_color_eq(LV_COLOR_LIME, color, "Get the value of a 'color' in checked edit state"); + + /*Clean-up*/ + _lv_style_list_reset(&style_list); +} + +static void mem_leak(void) +{ + + lv_test_print(""); + lv_test_print("Test style set, add, remove memory leak"); + lv_test_print("----------------------------------------"); + + lv_mem_monitor_t mon_start; + lv_mem_monitor_t mon_end; + + lv_style_list_t style_list; + lv_style_list_init(&style_list); + + lv_style_t style1; + lv_style_init(&style1); + + lv_style_t style2; + lv_style_init(&style2); + + lv_style_t style3; + lv_style_init(&style3); + + uint32_t i; + + lv_test_print("Set style properties"); + lv_mem_monitor(&mon_start); + for(i = 0; i < 100; i++) { + _lv_style_set_color(&style2, LV_STYLE_LINE_COLOR, LV_COLOR_RED); + + _lv_style_set_color(&style3, LV_STYLE_LINE_COLOR, LV_COLOR_RED); + _lv_style_set_color(&style3, LV_STYLE_LINE_COLOR | (LV_STATE_EDITED) << LV_STYLE_STATE_POS, LV_COLOR_BLUE); + _lv_style_set_color(&style3, LV_STYLE_LINE_COLOR, LV_COLOR_BLUE); + _lv_style_set_color(&style3, LV_STYLE_LINE_COLOR | (LV_STATE_EDITED | LV_STATE_FOCUSED) << LV_STYLE_STATE_POS, LV_COLOR_GREEN); + + _lv_style_set_color(&style3, LV_STYLE_BG_COLOR, LV_COLOR_RED); + + _lv_style_set_color(&style3, LV_STYLE_IMAGE_RECOLOR, LV_COLOR_RED); + + lv_style_reset(&style1); + lv_style_reset(&style2); + lv_style_reset(&style3); + + } + + lv_test_assert_int_eq(LV_RES_OK, lv_mem_test(), "Memory integrity check"); + lv_mem_defrag(); + lv_mem_monitor(&mon_end); + lv_test_assert_int_lt(sizeof(void*) * 8, mon_start.free_size - mon_end.free_size, "Style memory leak"); + + lv_test_print("Use local style"); + lv_mem_monitor(&mon_start); + for(i = 0; i < 100; i++) { + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED) << LV_STYLE_STATE_POS, LV_THEME_DEFAULT_FONT_NORMAL); + + _lv_style_list_reset(&style_list); + + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED) << LV_STYLE_STATE_POS, NULL); + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + + _lv_style_list_reset(&style_list); + } + + _lv_style_list_reset(&style_list); + lv_test_assert_int_eq(LV_RES_OK, lv_mem_test(), "Memory integrity check"); + lv_mem_defrag(); + lv_mem_monitor(&mon_end); + lv_test_assert_int_lt(sizeof(void*) * 8, mon_start.free_size - mon_end.free_size, "Style memory leak"); + + lv_test_print("Add styles"); + lv_mem_monitor(&mon_start); + for(i = 0; i < 100; i++) { + _lv_style_set_color(&style1, LV_STYLE_LINE_COLOR, LV_COLOR_RED); + _lv_style_set_color(&style2, LV_STYLE_LINE_COLOR, LV_COLOR_RED); + _lv_style_set_color(&style3, LV_STYLE_LINE_COLOR, LV_COLOR_RED); + + _lv_style_list_add_style(&style_list, &style1); + _lv_style_list_remove_style(&style_list, &style1); + + _lv_style_list_add_style(&style_list, &style2); + _lv_style_list_add_style(&style_list, &style3); + + _lv_style_list_remove_style(&style_list, &style2); + _lv_style_list_add_style(&style_list, &style1); + + _lv_style_list_reset(&style_list); + lv_style_reset(&style1); + lv_style_reset(&style2); + lv_style_reset(&style3); + } + + lv_test_assert_int_eq(LV_RES_OK, lv_mem_test(), "Memory integrity check"); + lv_mem_defrag(); + lv_mem_monitor(&mon_end); + lv_test_assert_int_lt(sizeof(void*) * 8, mon_start.free_size - mon_end.free_size, "Style memory leak"); + + lv_test_print("Add styles and use local style"); + lv_mem_monitor(&mon_start); + for(i = 0; i < 100; i++) { + _lv_style_set_color(&style1, LV_STYLE_LINE_COLOR, LV_COLOR_RED); + _lv_style_set_color(&style2, LV_STYLE_LINE_COLOR, LV_COLOR_RED); + _lv_style_set_color(&style3, LV_STYLE_LINE_COLOR, LV_COLOR_RED); + + if(i % 2 == 0) _lv_style_list_set_local_color(&style_list, LV_STYLE_LINE_COLOR, LV_COLOR_RED); + + _lv_style_list_add_style(&style_list, &style1); + _lv_style_list_remove_style(&style_list, &style1); + + _lv_style_list_add_style(&style_list, &style2); + _lv_style_list_add_style(&style_list, &style3); + + _lv_style_list_remove_style(&style_list, &style2); + _lv_style_list_add_style(&style_list, &style1); + + if(i % 2 != 0) _lv_style_list_set_local_color(&style_list, LV_STYLE_LINE_COLOR, LV_COLOR_RED); + + _lv_style_list_reset(&style_list); + lv_style_reset(&style1); + lv_style_reset(&style2); + lv_style_reset(&style3); + } + + lv_test_assert_int_eq(LV_RES_OK, lv_mem_test(), "Memory integrity check"); + lv_mem_defrag(); + lv_mem_monitor(&mon_end); + lv_test_assert_int_lt(sizeof(void*) * 8, mon_start.free_size - mon_end.free_size, "Style memory leak"); + + lv_test_print("Complex test"); + + lv_mem_monitor(&mon_start); + + for(i = 0; i < 100; i++) { + if(i % 2 == 0) { + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_CLOSE); + } + + _lv_style_set_color(&style1, LV_STYLE_LINE_COLOR, LV_COLOR_RED); + _lv_style_set_color(&style1, LV_STYLE_LINE_COLOR | (LV_STATE_EDITED) << LV_STYLE_STATE_POS, LV_COLOR_BLUE); + _lv_style_set_color(&style1, LV_STYLE_LINE_COLOR, LV_COLOR_BLUE); + _lv_style_set_color(&style1, LV_STYLE_LINE_COLOR | (LV_STATE_EDITED | LV_STATE_FOCUSED) << LV_STYLE_STATE_POS, LV_COLOR_GREEN); + + _lv_style_list_add_style(&style_list, &style1); + + if(i % 4 == 0) { + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_CLOSE); + } + + _lv_style_list_remove_style(&style_list, &style1); + + _lv_style_set_opa(&style2, LV_STYLE_TEXT_OPA, LV_OPA_10); + _lv_style_set_opa(&style2, LV_STYLE_TEXT_OPA, LV_OPA_20); + _lv_style_set_opa(&style2, LV_STYLE_TEXT_OPA, LV_OPA_30); + _lv_style_set_opa(&style2, LV_STYLE_TEXT_OPA, LV_OPA_40); + _lv_style_set_opa(&style2, LV_STYLE_TEXT_OPA, LV_OPA_50); + _lv_style_set_opa(&style2, LV_STYLE_TEXT_OPA, LV_OPA_60); + + _lv_style_list_add_style(&style_list, &style2); + + if(i % 8 == 0) { + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_CLOSE); + } + + _lv_style_list_add_style(&style_list, &style2); + _lv_style_list_add_style(&style_list, &style2); + _lv_style_list_add_style(&style_list, &style2); + _lv_style_list_add_style(&style_list, &style2); + _lv_style_list_remove_style(&style_list, &style2); + + _lv_style_set_int(&style3, LV_STYLE_PAD_LEFT, 10); + _lv_style_set_int(&style3, LV_STYLE_PAD_RIGHT, 20); + _lv_style_set_int(&style3, LV_STYLE_PAD_LEFT, 11); + _lv_style_set_int(&style3, LV_STYLE_PAD_RIGHT, 21); + _lv_style_set_int(&style3, LV_STYLE_PAD_LEFT, 12); + _lv_style_set_int(&style3, LV_STYLE_PAD_RIGHT, 22); + _lv_style_set_int(&style3, LV_STYLE_PAD_LEFT, 12); + _lv_style_set_int(&style3, LV_STYLE_PAD_RIGHT, 23); + + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED) << LV_STYLE_STATE_POS, LV_THEME_DEFAULT_FONT_NORMAL); + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED) << LV_STYLE_STATE_POS, NULL); + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + _lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + + _lv_style_list_add_style(&style_list, &style3); + _lv_style_list_add_style(&style_list, &style2); + _lv_style_list_add_style(&style_list, &style1); + + _lv_style_list_reset(&style_list); + lv_style_reset(&style1); + lv_style_reset(&style2); + lv_style_reset(&style3); + + } + + _lv_style_list_reset(&style_list); + lv_style_reset(&style1); + lv_style_reset(&style2); + lv_style_reset(&style3); + + lv_test_assert_int_eq(LV_RES_OK, lv_mem_test(), "Memory integrity check"); + lv_mem_defrag(); + lv_mem_monitor(&mon_end); + lv_test_assert_int_lt(sizeof(void*) * 8, mon_start.free_size - mon_end.free_size, "Style memory leak"); +} +#endif diff --git a/src/libs/lvgl/tests/lv_test_core/lv_test_style.h b/src/libs/lvgl/tests/lv_test_core/lv_test_style.h new file mode 100644 index 00000000..40112466 --- /dev/null +++ b/src/libs/lvgl/tests/lv_test_core/lv_test_style.h @@ -0,0 +1,38 @@ +/** + * @file lv_test_style.h + * + */ + +#ifndef LV_TEST_STYLE_H +#define LV_TEST_STYLE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * GLOBAL PROTOTYPES + **********************/ +void lv_test_style(void); + +/********************** + * MACROS + **********************/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /*LV_TEST_STYLE_H*/ diff --git a/src/libs/lvgl/tests/lv_test_fonts/font_1.c b/src/libs/lvgl/tests/lv_test_fonts/font_1.c new file mode 100644 index 00000000..6ac794b3 --- /dev/null +++ b/src/libs/lvgl/tests/lv_test_fonts/font_1.c @@ -0,0 +1,1378 @@ +#include "../../lvgl.h" + +/******************************************************************************* + * Size: 8 px + * Bpp: 4 + * Opts: --bpp 4 --size 8 --font ../Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022 --font ../FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o ..\generated_fonts/font_1.c + ******************************************************************************/ + +#ifndef FONT_1 +#define FONT_1 1 +#endif + +#if FONT_1 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = { + /* U+20 " " */ + + /* U+21 "!" */ + 0x58, 0xf, 0x11, 0x32, 0xb2, 0x80, + + /* U+22 "\"" */ + 0x73, 0x90, 0x10, 0x72, 0x90, + + /* U+23 "#" */ + 0x4, 0x52, 0x60, 0x4f, 0xc9, 0xc3, 0x43, 0x9c, + 0x83, 0x64, 0x8b, 0xa1, 0x65, 0x85, 0x81, + + /* U+24 "$" */ + 0x0, 0x40, 0x0, 0xad, 0x68, 0x97, 0x56, 0x89, + 0xf9, 0x60, 0x42, 0x17, 0x21, 0x69, 0x7e, 0x96, + 0x96, 0xcc, + + /* U+25 "%" */ + 0x58, 0x70, 0x63, 0xd, 0x8f, 0x30, 0x30, 0xa7, + 0xdb, 0x7, 0x12, 0x7d, 0xa1, 0x57, 0x6, 0xa2, + 0xfa, 0x40, + + /* U+26 "&" */ + 0x9, 0x98, 0x2, 0x2a, 0x30, 0x0, 0x97, 0xc1, + 0x4, 0xd6, 0xc4, 0x2, 0xe6, 0xc, 0xc4, 0x75, + 0x33, 0x10, + + /* U+27 "'" */ + 0x72, 0x0, 0x39, 0x0, + + /* U+28 "(" */ + 0x8, 0x20, 0x32, 0x11, 0x1, 0x10, 0x8, 0x80, + 0x22, 0x0, 0x19, 0x0, + + /* U+29 ")" */ + 0x73, 0x6a, 0x12, 0x7, 0x7, 0x12, 0x6a, + + /* U+2A "*" */ + 0x48, 0x40, 0x26, 0xc0, 0x7b, 0x90, + + /* U+2B "+" */ + 0x0, 0x10, 0x6, 0x80, 0x2, 0x4b, 0xc8, 0xa4, + 0xbc, 0x88, + + /* U+2C "," */ + 0x0, 0x3a, 0x82, 0x0, + + /* U+2D "-" */ + 0x5a, 0x60, + + /* U+2E "." */ + 0x0, 0x3a, 0x0, + + /* U+2F "/" */ + 0x0, 0xa8, 0x2, 0x22, 0x0, 0x55, 0x40, 0x8, + 0x88, 0x0, 0x4c, 0x0, 0xb5, 0xc0, 0x2, 0x2, + 0x0, + + /* U+30 "0" */ + 0xa, 0xbb, 0x13, 0x65, 0xd4, 0xfa, 0x80, 0xbf, + 0xa8, 0xb, 0xb6, 0x5d, 0x48, + + /* U+31 "1" */ + 0x9e, 0x29, 0x40, 0xf, 0xf0, + + /* U+32 "2" */ + 0x6a, 0xb9, 0x6, 0xab, 0x50, 0x9, 0x50, 0x1, + 0x5, 0x1, 0x2d, 0xb4, 0x60, + + /* U+33 "3" */ + 0x7a, 0xbe, 0x7, 0xa1, 0xc0, 0x2, 0x5, 0x80, + 0x12, 0x8c, 0xa2, 0xa8, 0x64, + + /* U+34 "4" */ + 0x0, 0x24, 0x80, 0x47, 0xd2, 0x0, 0x18, 0xa8, + 0x20, 0x90, 0xa5, 0x92, 0x8b, 0xa4, 0x82, + + /* U+35 "5" */ + 0x3d, 0xaa, 0x3, 0x5d, 0x50, 0x1, 0xb5, 0x0, + 0xb7, 0x42, 0x6f, 0x54, 0x33, 0x0, + + /* U+36 "6" */ + 0x9, 0xaa, 0x1b, 0x75, 0x50, 0xff, 0xd3, 0x45, + 0xe1, 0x31, 0x6, 0x19, 0x8e, + + /* U+37 "7" */ + 0xca, 0xa6, 0xb5, 0xd5, 0x5, 0x9c, 0x1a, 0xc0, + 0x2a, 0x70, 0x3, 0x58, 0x0, + + /* U+38 "8" */ + 0x1a, 0xa5, 0x92, 0x65, 0x7d, 0x25, 0xd4, 0xdc, + 0xca, 0xb2, 0x2f, 0xa6, 0xfc, + + /* U+39 "9" */ + 0x4a, 0x99, 0x7, 0xdc, 0x82, 0xc5, 0xc8, 0x69, + 0xd4, 0x86, 0x9d, 0x58, 0xa8, + + /* U+3A ":" */ + 0x74, 0x74, 0x0, 0x3a, 0x0, + + /* U+3B ";" */ + 0x74, 0x74, 0x0, 0x3a, 0x8b, 0xb1, 0x0, + + /* U+3C "<" */ + 0x0, 0x84, 0x0, 0x93, 0x20, 0x58, 0xa8, 0x5, + 0xd5, 0x91, 0x1, 0x69, 0x10, + + /* U+3D "=" */ + 0x49, 0x98, 0x52, 0x66, 0x14, 0x99, 0x84, + + /* U+3E ">" */ + 0x10, 0xc, 0x53, 0x4, 0x7, 0x3d, 0xe2, 0x92, + 0x5a, 0x29, 0x28, 0x0, + + /* U+3F "?" */ + 0x6a, 0xb9, 0x6, 0xab, 0x50, 0xa, 0xa0, 0x2, + 0x94, 0x0, 0x15, 0x80, 0x0, + + /* U+40 "@" */ + 0x3, 0x87, 0x74, 0x28, 0x15, 0xe6, 0xf2, 0x12, + 0xd4, 0x7d, 0x4b, 0x2e, 0x80, 0x7e, 0xa8, 0xf9, + 0x91, 0xc7, 0x15, 0xe0, 0xf6, 0x53, 0x0, + + /* U+41 "A" */ + 0x0, 0xae, 0x40, 0x31, 0x9c, 0x20, 0x14, 0x4c, + 0xa0, 0x0, 0x8d, 0x14, 0x82, 0x1f, 0x93, 0x2e, + 0x80, + + /* U+42 "B" */ + 0x2d, 0x99, 0x58, 0x83, 0xcc, 0x8d, 0x41, 0xe6, + 0x95, 0x40, 0xf3, 0x5d, 0x0, 0xf3, 0x28, 0xd0, + + /* U+43 "C" */ + 0x7, 0xba, 0xa1, 0x2f, 0x5d, 0x50, 0xb2, 0x80, + 0x36, 0x50, 0x6, 0x5e, 0xba, 0xa1, 0x0, + + /* U+44 "D" */ + 0x2e, 0xab, 0xb1, 0x80, 0x12, 0xae, 0xbc, 0x3, + 0x85, 0x48, 0x3, 0xa, 0x90, 0x25, 0x5d, 0x78, + 0x0, + + /* U+45 "E" */ + 0x2e, 0xaa, 0x40, 0x25, 0x52, 0x1, 0xea, 0x88, + 0xf, 0x54, 0x40, 0x4a, 0xa4, 0x80, + + /* U+46 "F" */ + 0x2e, 0xaa, 0x40, 0x25, 0x52, 0x1, 0x2a, 0x88, + 0x9, 0x54, 0x40, 0xe, + + /* U+47 "G" */ + 0x7, 0xba, 0xa1, 0x2f, 0x5d, 0x50, 0xb2, 0x80, + 0x4, 0x79, 0x40, 0x6, 0x45, 0xeb, 0xae, 0x40, + + /* U+48 "H" */ + 0x2a, 0x0, 0x15, 0x0, 0x7c, 0x95, 0x49, 0x0, + 0x25, 0x52, 0x40, 0x3e, + + /* U+49 "I" */ + 0x2a, 0x0, 0xfc, + + /* U+4A "J" */ + 0x5, 0xad, 0x50, 0x5a, 0xa0, 0x7, 0xf7, 0x88, + 0x4d, 0x1a, 0x0, + + /* U+4B "K" */ + 0x2a, 0x1, 0xa2, 0x0, 0xd, 0x41, 0x3, 0x6e, + 0x10, 0x0, 0x77, 0x94, 0x0, 0xe3, 0x3e, 0x80, + + /* U+4C "L" */ + 0x2a, 0x0, 0xff, 0xe3, 0xa5, 0x51, 0xc0, + + /* U+4D "M" */ + 0x2c, 0x0, 0x8f, 0x0, 0x5c, 0x1, 0x0, 0x4, + 0xe2, 0x8f, 0x0, 0xa2, 0x45, 0x0, 0x21, 0x89, + 0x0, 0x0, + + /* U+4E "N" */ + 0x2d, 0x10, 0x2a, 0x1, 0xa0, 0xc, 0xdf, 0x60, + 0x19, 0x3b, 0x80, 0x19, 0x6c, 0x0, + + /* U+4F "O" */ + 0x7, 0xbb, 0x8c, 0x17, 0xae, 0xd5, 0xe3, 0x94, + 0x0, 0x14, 0x5c, 0xa0, 0x0, 0xa2, 0xab, 0xae, + 0xd5, 0xe2, + + /* U+50 "P" */ + 0x2e, 0xaa, 0x48, 0x1, 0x2a, 0x82, 0x80, 0x18, + 0x9c, 0x12, 0xa9, 0x86, 0x9, 0x54, 0x60, + + /* U+51 "Q" */ + 0x7, 0xbb, 0x8c, 0x17, 0xae, 0xd5, 0xe3, 0x94, + 0x0, 0x14, 0x5c, 0xa0, 0x9, 0x15, 0x5d, 0x77, + 0x78, 0x83, 0xdc, 0x15, 0x18, + + /* U+52 "R" */ + 0x2e, 0xaa, 0x48, 0x1, 0x2a, 0x82, 0x80, 0x18, + 0x9c, 0x1e, 0xb0, 0x8c, 0x1e, 0xb4, 0x84, + + /* U+53 "S" */ + 0x2a, 0xa8, 0x97, 0x2a, 0x84, 0xfd, 0x30, 0x21, + 0x13, 0x90, 0xb5, 0x4e, 0xa0, + + /* U+54 "T" */ + 0xaa, 0x75, 0x35, 0x50, 0xa9, 0x80, 0x3f, 0xf8, + 0x60, + + /* U+55 "U" */ + 0x39, 0x0, 0x24, 0x0, 0x7f, 0xf0, 0x9, 0x40, + 0x5, 0xc3, 0x57, 0x58, 0xc0, + + /* U+56 "V" */ + 0xb, 0x10, 0x2, 0xb8, 0x7c, 0x0, 0x39, 0xc1, + 0x14, 0x57, 0x0, 0x28, 0x84, 0xb8, 0x4, 0x8b, + 0x60, 0x0, + + /* U+57 "W" */ + 0x94, 0x0, 0x78, 0x81, 0xcd, 0x70, 0x33, 0x41, + 0x54, 0x36, 0xd, 0x9c, 0x2, 0x30, 0xb9, 0x30, + 0x39, 0xc0, 0x3, 0x32, 0x82, 0x99, 0x80, + + /* U+58 "X" */ + 0x58, 0x2, 0xa0, 0x50, 0x79, 0xb0, 0x4, 0x43, + 0x84, 0x1, 0x57, 0xc2, 0xf, 0x89, 0x34, 0x0, + + /* U+59 "Y" */ + 0xa, 0x20, 0x5, 0x80, 0x2e, 0x42, 0x60, 0x0, + 0x3d, 0x62, 0x60, 0x12, 0xb4, 0x0, 0x70, 0x80, + 0x40, + + /* U+5A "Z" */ + 0x6a, 0xa6, 0x68, 0x35, 0x5b, 0xe0, 0x5, 0x52, + 0x20, 0xb, 0x82, 0x0, 0x43, 0x4d, 0x50, 0x0, + + /* U+5B "[" */ + 0x2d, 0x40, 0x44, 0x0, 0x7f, 0xf0, 0x51, 0x0, + + /* U+5C "\\" */ + 0x19, 0x0, 0x84, 0xc0, 0x37, 0xa8, 0x4, 0xbe, + 0x1, 0x8c, 0x40, 0x2a, 0x60, 0x8, 0xf4, 0x0, + + /* U+5D "]" */ + 0x8c, 0x80, 0xf, 0xe8, 0x0, + + /* U+5E "^" */ + 0x3, 0xc0, 0xa, 0xa1, 0x40, 0xb9, 0x30, 0x0, + + /* U+5F "_" */ + 0x77, 0xc0, + + /* U+60 "`" */ + 0x6, 0x60, + + /* U+61 "a" */ + 0x29, 0x94, 0x0, 0x42, 0xa1, 0x5b, 0x2, 0x2b, + 0xf9, 0x10, + + /* U+62 "b" */ + 0x48, 0x0, 0xff, 0x92, 0xad, 0x40, 0xd, 0x57, + 0x20, 0x1f, 0x9a, 0xa9, 0x20, + + /* U+63 "c" */ + 0x1a, 0xa8, 0x67, 0xaa, 0x82, 0x1, 0xd3, 0xd5, + 0x41, + + /* U+64 "d" */ + 0x0, 0xd6, 0x1, 0xc3, 0x55, 0x4, 0x75, 0x48, + 0x6, 0x10, 0x8e, 0x9b, 0x0, + + /* U+65 "e" */ + 0x19, 0x98, 0x60, 0x4, 0x4e, 0x39, 0x12, 0xd3, + 0xf5, 0x41, + + /* U+66 "f" */ + 0xa, 0xa0, 0x10, 0x50, 0x5b, 0xb8, 0x2d, 0x1c, + 0x3, 0xf8, + + /* U+67 "g" */ + 0x1a, 0x99, 0x5c, 0x74, 0xc3, 0x80, 0x46, 0x11, + 0xd5, 0xe, 0x4, 0x61, 0x0, + + /* U+68 "h" */ + 0x48, 0x0, 0xfe, 0x49, 0xb4, 0x5, 0x9a, 0xf0, + 0x10, 0x17, 0x0, 0xe0, + + /* U+69 "i" */ + 0x37, 0x37, 0x48, 0x0, 0xf0, + + /* U+6A "j" */ + 0x3, 0x70, 0x37, 0x3, 0x80, 0xf, 0xe6, 0x8c, + + /* U+6B "k" */ + 0x48, 0x0, 0xff, 0xa9, 0x0, 0x72, 0x50, 0x12, + 0xa4, 0x0, 0xad, 0xae, + + /* U+6C "l" */ + 0x48, 0x0, 0xff, 0x0, + + /* U+6D "m" */ + 0x4c, 0x9b, 0x89, 0xb4, 0x5, 0x98, 0x39, 0xbf, + 0x1, 0x1, 0x10, 0x1, 0xc0, 0x3f, 0x0, + + /* U+6E "n" */ + 0x4c, 0x9b, 0x40, 0x59, 0xaf, 0x1, 0x1, 0x70, + 0xe, + + /* U+6F "o" */ + 0x1a, 0xa8, 0x67, 0xaa, 0x6c, 0x3, 0xa7, 0xaa, + 0x6c, + + /* U+70 "p" */ + 0x4c, 0xab, 0x50, 0x3, 0x55, 0xc8, 0x7, 0xe6, + 0xaa, 0x48, 0x1, 0x2a, 0x8a, 0x0, + + /* U+71 "q" */ + 0x1a, 0xa4, 0xdc, 0x75, 0x50, 0x3, 0xd1, 0xd5, + 0x40, 0x1a, 0xa4, 0x80, + + /* U+72 "r" */ + 0x4b, 0xa0, 0x0, 0xd0, 0x0, 0x80, 0x3c, + + /* U+73 "s" */ + 0x5b, 0x95, 0xdc, 0xa5, 0x84, 0x44, 0xbc, 0xef, + 0x80, + + /* U+74 "t" */ + 0x29, 0x0, 0x5a, 0x38, 0x5a, 0x38, 0x7, 0x11, + 0x24, 0x0, + + /* U+75 "u" */ + 0x57, 0x1, 0xb0, 0xe, 0x1f, 0x2, 0x4, 0x29, + 0xa0, + + /* U+76 "v" */ + 0xb, 0x0, 0x42, 0x7, 0x38, 0x1a, 0x2, 0xe3, + 0xf0, 0x5, 0xb4, 0xa0, + + /* U+77 "w" */ + 0xb0, 0x7, 0x10, 0x50, 0x72, 0xa9, 0xe8, 0x88, + 0xb, 0xfe, 0x92, 0xaa, 0x0, 0xc, 0x83, 0xc, + 0x80, + + /* U+78 "x" */ + 0x67, 0x1b, 0x6, 0xea, 0xa0, 0x0, 0xc0, 0xc1, + 0xfe, 0xa4, 0x0, + + /* U+79 "y" */ + 0xb, 0x10, 0x83, 0x8, 0x91, 0x23, 0x3, 0x2b, + 0x90, 0xb, 0x80, 0xc0, 0x15, 0xf0, 0x0, + + /* U+7A "z" */ + 0x59, 0xbb, 0x2c, 0x5, 0x5, 0x48, 0xcb, 0xdc, + 0x0, + + /* U+7B "{" */ + 0xa, 0x60, 0x66, 0x0, 0x4a, 0xe0, 0xae, 0x1, + 0xcc, 0xc0, + + /* U+7C "|" */ + 0x28, 0x0, 0xff, 0xe0, 0x0, + + /* U+7D "}" */ + 0x97, 0x9, 0xc0, 0xe, 0x63, 0x6, 0x30, 0xa, + 0x70, 0x0, + + /* U+7E "~" */ + 0x29, 0x35, 0x17, 0x95, 0xd1, + + /* U+B0 "°" */ + 0x26, 0x45, 0x63, 0x57, 0x20, + + /* U+2022 "•" */ + 0x0, 0x2e, 0xaf, 0x80, + + /* U+F001 "" */ + 0x0, 0xff, 0xe0, 0x13, 0x5f, 0x0, 0x23, 0x75, + 0x28, 0x20, 0x7, 0x21, 0x6a, 0x0, 0xd9, 0xd2, + 0xa0, 0x18, 0xc0, 0x3f, 0xab, 0xc2, 0xbc, 0x3, + 0x94, 0x0, 0xa0, 0xa, 0xfa, + + /* U+F008 "" */ + 0xbd, 0xcc, 0xba, 0xac, 0xdb, 0x32, 0x9f, 0x34, + 0x66, 0xdb, 0xe8, 0x1, 0xf9, 0x19, 0xb6, 0xfa, + 0x1b, 0x66, 0x53, 0xe6, + + /* U+F00B "" */ + 0x34, 0x14, 0x4c, 0x79, 0x6d, 0x77, 0xb1, 0x50, + 0xd1, 0x32, 0x8b, 0x8b, 0xbe, 0x14, 0x32, 0x33, + 0xc9, 0x30, 0xd0, 0xef, 0x4c, 0xa1, 0xa1, 0xde, + 0x95, 0x43, 0x44, 0xca, + + /* U+F00C "" */ + 0x0, 0xf4, 0xd0, 0x7, 0x4b, 0x5, 0x48, 0x2, + 0x59, 0x68, 0x1a, 0x64, 0xcb, 0x41, 0x4a, 0xcc, + 0x5a, 0x0, 0xa9, 0x99, 0x40, 0x10, + + /* U+F00D "" */ + 0x63, 0x0, 0x41, 0x56, 0x25, 0x3b, 0x69, 0x5a, + 0xca, 0xb, 0x80, 0x14, 0x29, 0x60, 0xb0, 0xc2, + 0x5f, 0x10, 0x0, + + /* U+F011 "" */ + 0x0, 0xb1, 0x44, 0x0, 0x3a, 0xe2, 0x7e, 0xe1, + 0x20, 0xe0, 0xb, 0x81, 0x4a, 0x0, 0x94, 0x5c, + 0x40, 0x16, 0x80, 0x12, 0x50, 0x31, 0x20, 0xa4, + 0x1e, 0x3c, 0x5b, 0x90, 0xfa, 0xd2, 0x4c, 0x0, + + /* U+F013 "" */ + 0x0, 0xb3, 0x0, 0x10, 0xc4, 0xc, 0xd1, 0x1, + 0x97, 0x70, 0x89, 0xdd, 0x34, 0x3, 0xdc, 0x10, + 0xa0, 0xf, 0xd4, 0x3, 0xdc, 0x10, 0xa9, 0x77, + 0x8, 0x9d, 0xd2, 0x31, 0x3, 0x34, 0x40, 0x40, + + /* U+F015 "" */ + 0x0, 0xc6, 0x4, 0x40, 0xd, 0x59, 0x51, 0x0, + 0x0, 0xe8, 0x48, 0x28, 0x0, 0xfd, 0x46, 0x45, + 0xd0, 0xe2, 0xa, 0x80, 0x8b, 0x10, 0xbe, 0x20, + 0x40, 0x2e, 0xb0, 0x8, 0xec, 0xc0, 0x36, 0xa2, + 0x1, 0x11, 0xa0, + + /* U+F019 "" */ + 0x0, 0xbf, 0xc0, 0x1f, 0xfc, 0x87, 0xf0, 0x7, + 0xb8, 0x1, 0xd8, 0x0, 0xce, 0xf, 0x1c, 0xaa, + 0xe8, 0x78, 0x78, 0x11, 0x43, 0xc0, 0x4, 0x89, + 0x80, + + /* U+F01C "" */ + 0x5, 0xff, 0xe5, 0x1, 0xbc, 0xff, 0xb2, 0xc6, + 0xd8, 0xc0, 0x23, 0x6b, 0x57, 0xf6, 0x6, 0xf7, + 0x50, 0xa, 0x7e, 0x40, 0x22, 0x0, 0xf8, 0x80, + + /* U+F021 "" */ + 0x0, 0xf8, 0xc0, 0xaf, 0xfd, 0x67, 0x85, 0x85, + 0xdc, 0x3c, 0xb, 0x49, 0x17, 0x40, 0x5, 0x58, + 0x1, 0x22, 0xec, 0xea, 0x84, 0x44, 0x57, 0xbb, + 0x42, 0x0, 0x2a, 0x80, 0x2c, 0x6b, 0x6d, 0x1, + 0x85, 0x32, 0x3c, 0x1c, 0x28, 0xcc, 0x40, 0x80, + + /* U+F026 "" */ + 0x0, 0xa4, 0xd3, 0x1b, 0x2c, 0xc0, 0x39, 0x50, + 0x1, 0x57, 0x60, 0x9, 0x38, + + /* U+F027 "" */ + 0x0, 0xa4, 0x0, 0x69, 0x8c, 0x3, 0x96, 0x60, + 0x34, 0x1, 0xe4, 0x40, 0x0, 0x6a, 0xee, 0x0, + 0x8, 0x1, 0x38, 0x0, + + /* U+F028 "" */ + 0x0, 0xf2, 0xa0, 0x6, 0x90, 0x26, 0xf3, 0x32, + 0x63, 0x0, 0x3e, 0x21, 0x96, 0x60, 0x33, 0x25, + 0x70, 0xf, 0xe5, 0x40, 0x0, 0xcc, 0x95, 0xaa, + 0xec, 0x1, 0x7c, 0x48, 0x1, 0x38, 0x9, 0xbc, + 0xc0, + + /* U+F03E "" */ + 0xdf, 0xff, 0x69, 0x7c, 0x0, 0x62, 0x8, 0xb0, + 0x4e, 0x40, 0x1, 0xca, 0x58, 0xd8, 0x2, 0xd6, + 0xc0, 0x31, 0x7f, 0xf8, 0x80, + + /* U+F048 "" */ + 0x40, 0x8, 0xac, 0x82, 0x34, 0x1, 0x2e, 0x0, + 0xe6, 0x0, 0x8c, 0x3, 0x50, 0x80, 0x4f, 0x82, + 0x8, 0x65, 0xec, + + /* U+F04B "" */ + 0x0, 0xfb, 0x68, 0x40, 0x31, 0x2f, 0x38, 0x7, + 0xa3, 0x50, 0x3, 0x8a, 0xe8, 0x3, 0xfe, 0x2b, + 0xa0, 0xa, 0x35, 0x0, 0x97, 0x9c, 0x2, 0xda, + 0x10, 0xc, + + /* U+F04C "" */ + 0x9b, 0x90, 0x9b, 0x96, 0x46, 0x6, 0x46, 0x0, + 0xff, 0xeb, 0xed, 0xe8, 0x6d, 0xe8, + + /* U+F04D "" */ + 0x24, 0x4e, 0x2d, 0xbb, 0xed, 0x0, 0xff, 0xeb, + 0xba, 0x27, 0x38, + + /* U+F051 "" */ + 0x20, 0x9, 0x36, 0x0, 0xac, 0x1e, 0x40, 0x33, + 0x70, 0x6, 0x30, 0x8, 0x68, 0x0, 0x58, 0xe0, + 0xd8, 0x46, 0x80, + + /* U+F052 "" */ + 0x0, 0xc4, 0x1, 0xf4, 0x6c, 0x0, 0x73, 0xb8, + 0x1d, 0xc0, 0x12, 0xc0, 0x5, 0xa, 0x0, 0xb0, + 0xe, 0xb0, 0x5, 0xbb, 0xf5, 0x80, 0x29, 0xdf, + 0xa8, 0x0, 0xa8, 0x9c, 0xa0, + + /* U+F053 "" */ + 0x0, 0x98, 0x80, 0xf, 0x2c, 0xf, 0x14, 0x8b, + 0x12, 0xa0, 0x83, 0xa0, 0x1, 0xc5, 0xb0, 0x1, + 0x62, 0xb0, 0x0, 0xbd, 0x80, + + /* U+F054 "" */ + 0x26, 0x0, 0x9a, 0x5c, 0x0, 0x95, 0xe, 0x0, + 0x59, 0x85, 0x0, 0x68, 0xa0, 0x5a, 0xe0, 0xb2, + 0xe1, 0x3, 0x79, 0x0, 0x0, + + /* U+F067 "" */ + 0x0, 0x90, 0x3, 0x8e, 0xcc, 0x3, 0x38, 0x38, + 0x1, 0xe3, 0x83, 0xa1, 0xe5, 0xd4, 0x15, 0xe7, + 0xbe, 0xc2, 0xff, 0x80, 0x3f, 0x95, 0x14, 0x0, + + /* U+F068 "" */ + 0x78, 0x8e, 0x79, 0x77, 0xe9, + + /* U+F06E "" */ + 0x0, 0x46, 0x65, 0x0, 0x1, 0xd5, 0xda, 0xf5, + 0xd1, 0xd2, 0x84, 0x8e, 0x82, 0xd7, 0x0, 0x40, + 0x80, 0x6a, 0x28, 0xe8, 0xe8, 0x2d, 0x1d, 0x5e, + 0xbf, 0x5c, 0x10, + + /* U+F070 "" */ + 0x1d, 0x30, 0xf, 0xc3, 0x1b, 0x19, 0x95, 0x10, + 0x4, 0xb8, 0xaf, 0x10, 0x3d, 0x40, 0x3, 0xc6, + 0xd, 0xda, 0x82, 0x84, 0x0, 0xb7, 0x52, 0x8, + 0x2, 0x0, 0x75, 0x51, 0xb6, 0x48, 0x58, 0x80, + 0x2a, 0x7f, 0x13, 0xd3, 0xc4, 0x2, 0x6c, 0xc3, + 0x8d, 0x9c, 0x0, + + /* U+F071 "" */ + 0x0, 0xc7, 0xc6, 0x1, 0xfb, 0xc7, 0xc0, 0x3e, + 0x63, 0x39, 0x80, 0x3d, 0x5, 0x85, 0x0, 0x1d, + 0x2, 0x60, 0x63, 0x0, 0x11, 0x38, 0xb, 0x8, + 0x39, 0x0, 0x24, 0x0, 0x28, 0x20, 0x8, 0x0, + 0x30, 0x0, 0x74, 0x40, 0xe, 0x0, + + /* U+F074 "" */ + 0x0, 0xf1, 0x2, 0x20, 0x2, 0x4d, 0x5a, 0xbb, + 0xe, 0x58, 0x47, 0x70, 0xf4, 0x78, 0xf0, 0x0, + 0xa0, 0xa0, 0x17, 0x70, 0x74, 0xf8, 0xf2, 0xaf, + 0x6, 0xec, 0x10, 0x88, 0x0, 0x93, 0x54, + + /* U+F077 "" */ + 0x0, 0xfe, 0x4e, 0x40, 0x9, 0x2c, 0xad, 0x1, + 0x2d, 0xf1, 0xed, 0x3d, 0xe0, 0x21, 0xfe, 0xe0, + 0x2, 0x8b, + + /* U+F078 "" */ + 0x0, 0xfa, 0xe0, 0x2, 0x8b, 0xf7, 0x80, 0x87, + 0xf4, 0xb7, 0xc7, 0xb4, 0x4, 0xb2, 0xb4, 0x0, + 0x93, 0x90, 0x0, + + /* U+F079 "" */ + 0x0, 0x4a, 0xa, 0x26, 0x0, 0xad, 0xae, 0x7f, + 0xeb, 0x10, 0x1, 0xa4, 0x75, 0xdc, 0x20, 0x14, + 0x1, 0xb0, 0x0, 0x40, 0xc0, 0x31, 0xa2, 0x17, + 0xc7, 0xd4, 0x1, 0x98, 0xff, 0x6d, 0x82, 0xa8, + 0x0, 0xf7, 0x74, 0x2e, 0xc0, 0x0, + + /* U+F07B "" */ + 0xdf, 0xf5, 0x80, 0x62, 0x0, 0x27, 0xfd, 0xa0, + 0x1f, 0x10, 0x7, 0xff, 0x10, 0x80, 0x3c, 0x40, + + /* U+F093 "" */ + 0x0, 0xa6, 0x40, 0x1d, 0x2c, 0xc9, 0x0, 0x9d, + 0x80, 0xc, 0xe0, 0x7, 0xf0, 0x7, 0xb8, 0x7, + 0xf3, 0xc2, 0x0, 0x12, 0x1e, 0x1e, 0x9d, 0xd4, + 0xf0, 0x0, 0x17, 0x72, 0xa0, 0x0, + + /* U+F095 "" */ + 0x0, 0xff, 0xe1, 0xbf, 0x50, 0x7, 0xa4, 0x50, + 0x3, 0xc4, 0x4, 0x1, 0xe8, 0xb, 0x0, 0xe1, + 0x91, 0x70, 0x7d, 0xc4, 0xc2, 0xd0, 0x4, 0x91, + 0xd9, 0xe1, 0x80, 0x10, 0x4e, 0x38, 0xc0, 0x0, + + /* U+F0C4 "" */ + 0x3, 0x0, 0xf6, 0x76, 0x1, 0x6e, 0x1, 0x51, + 0x96, 0x1f, 0x5, 0x60, 0x68, 0x61, 0x2, 0x78, + 0x1, 0x8, 0x1, 0x92, 0xc, 0xb2, 0x0, 0x2a, + 0x19, 0x86, 0x90, 0xad, 0xa0, 0x7b, 0xc0, + + /* U+F0C5 "" */ + 0x0, 0x7f, 0xce, 0x8e, 0x80, 0x11, 0x9a, 0x30, + 0x2, 0xb8, 0x0, 0xff, 0xe5, 0x1c, 0x3b, 0xd0, + 0x9, 0xe, 0xe8, 0x70, + + /* U+F0C7 "" */ + 0x24, 0x4c, 0x21, 0xbf, 0xfc, 0x41, 0x77, 0x87, + 0xc1, 0x13, 0x1, 0x5, 0xda, 0x2c, 0x3, 0x36, + 0x30, 0x6, 0x45, 0x40, 0x3, 0xa3, 0x73, 0x23, + 0x80, + + /* U+F0E7 "" */ + 0x7, 0xff, 0x30, 0x5, 0xa0, 0x4, 0x0, 0x98, + 0x1, 0x4e, 0x0, 0x20, 0x3, 0xe0, 0x2, 0x5c, + 0x42, 0x40, 0xf, 0x2, 0xe4, 0x1, 0x18, 0xc0, + 0x6, 0x5b, 0x0, 0x80, + + /* U+F0EA "" */ + 0x79, 0xb9, 0x70, 0x4, 0x33, 0xb4, 0x0, 0x6a, + 0x77, 0x18, 0x5, 0xce, 0xeb, 0xb0, 0x7, 0x8c, + 0x3, 0x9d, 0xd0, 0xe0, 0x1c, 0xf1, 0xe0, 0x18, + + /* U+F0F3 "" */ + 0x0, 0xb4, 0x3, 0x27, 0x17, 0x18, 0x2, 0x44, + 0x7, 0x80, 0x4, 0x1, 0x10, 0x18, 0x7, 0x1c, + 0x0, 0x74, 0x63, 0xbf, 0x6b, 0xc6, 0x3e, 0x43, + 0x0, + + /* U+F11C "" */ + 0xdf, 0xff, 0xb4, 0xb9, 0xdd, 0xce, 0xee, 0x20, + 0xf2, 0x26, 0x91, 0x3c, 0x3, 0xfe, 0xf2, 0xac, + 0xa2, 0xf0, 0x2e, 0x7f, 0xf9, 0xf8, 0x80, + + /* U+F124 "" */ + 0x0, 0xff, 0xe2, 0x25, 0xe0, 0x7, 0x2e, 0x5a, + 0x38, 0x4, 0xdd, 0x46, 0x0, 0xf0, 0x6, 0xc8, + 0x80, 0x46, 0x80, 0xb, 0x77, 0x18, 0x2, 0x40, + 0x26, 0x88, 0x20, 0xa, 0x80, 0x7e, 0x80, 0xf, + 0xb4, 0x98, 0x3, 0xe5, 0xd0, 0xc, + + /* U+F15B "" */ + 0xff, 0xa2, 0xc0, 0x39, 0x2c, 0x2, 0x47, 0x30, + 0x8, 0xdd, 0xc0, 0x1f, 0xfc, 0xc0, + + /* U+F1EB "" */ + 0x0, 0x91, 0xdc, 0x80, 0x1a, 0x7e, 0xef, 0x7c, + 0x86, 0x25, 0xfe, 0x63, 0xed, 0x33, 0xb4, 0x2f, + 0xfd, 0x61, 0xbc, 0x43, 0x63, 0x54, 0x1b, 0x12, + 0x1, 0xfa, 0x74, 0xaf, 0x10, 0xe, 0xcf, 0x0, + 0xfc, 0xd2, 0x1, 0x80, + + /* U+F240 "" */ + 0x24, 0x4f, 0xc1, 0xbf, 0xff, 0x4d, 0x6, 0x2a, + 0xfa, 0x14, 0x3c, 0x47, 0xce, 0x0, 0xd9, 0x9f, + 0x42, 0x3f, 0x6e, 0xf8, 0x60, + + /* U+F241 "" */ + 0x24, 0x4f, 0xc1, 0xbf, 0xff, 0x4d, 0x6, 0x2a, + 0xec, 0xb8, 0x50, 0xf1, 0x1d, 0xe0, 0xe0, 0xd, + 0x99, 0xda, 0x90, 0x8f, 0xdb, 0xbb, 0xbc, 0x60, + + /* U+F242 "" */ + 0x24, 0x4f, 0xc1, 0xbf, 0xff, 0x4d, 0x6, 0x2a, + 0xd7, 0x74, 0x28, 0x78, 0x8c, 0x1, 0x38, 0x3, + 0x66, 0x64, 0x4a, 0x11, 0xfb, 0x76, 0xff, 0x86, + 0x0, + + /* U+F243 "" */ + 0x24, 0x4f, 0xc1, 0xbf, 0xff, 0x4d, 0x6, 0x2e, + 0x5d, 0xe8, 0x50, 0xf1, 0xf0, 0xc, 0xe0, 0xd, + 0x9d, 0x44, 0xd0, 0x8f, 0xdb, 0xdf, 0xf8, 0x60, + + /* U+F244 "" */ + 0x24, 0x4f, 0xc1, 0xbf, 0xff, 0x4c, 0x5, 0xdf, + 0xd0, 0xe0, 0x1f, 0x9c, 0x0, 0x89, 0xf4, 0x13, + 0xff, 0xfc, 0x3c, + + /* U+F287 "" */ + 0x0, 0xff, 0xe1, 0xbe, 0xc0, 0x7, 0xce, 0x97, + 0x80, 0x1a, 0x6c, 0x78, 0x9d, 0x45, 0xc8, 0x1d, + 0x24, 0x72, 0x66, 0xab, 0xc, 0xd8, 0x85, 0xe0, + 0x7e, 0xc8, 0x11, 0x0, 0xc, 0x4d, 0x60, 0x1f, + 0x9b, 0xb0, 0x2, + + /* U+F293 "" */ + 0x6, 0xdd, 0x61, 0x82, 0x49, 0x71, 0x70, 0x69, + 0xa3, 0x59, 0x14, 0x78, 0x9e, 0xc, 0x0, 0xf0, + 0x10, 0x72, 0x31, 0x7f, 0x1, 0xd3, 0x65, 0x91, + 0x24, 0x92, 0xd0, 0xd0, + + /* U+F2ED "" */ + 0x78, 0xdf, 0xd8, 0x70, 0x2, 0xba, 0x80, 0x3d, + 0xdf, 0xbc, 0xc, 0xce, 0x66, 0x0, 0xff, 0xe5, + 0x69, 0x99, 0xcc, 0xda, + + /* U+F304 "" */ + 0x0, 0xf3, 0xf1, 0x80, 0x72, 0x60, 0xe8, 0x6, + 0x8b, 0x24, 0x90, 0xa, 0x1c, 0x1b, 0xdc, 0x1, + 0xe, 0x0, 0x74, 0x0, 0x3b, 0x80, 0xf, 0x0, + 0x14, 0x80, 0x1e, 0x0, 0x38, 0x62, 0x0, 0x1d, + 0xdc, 0x70, 0xe, + + /* U+F55A "" */ + 0x0, 0x57, 0xff, 0xb0, 0x2d, 0x41, 0x8c, 0xcc, + 0x7, 0x48, 0x0, 0x5d, 0xd2, 0x80, 0x7f, 0xf0, + 0x29, 0x0, 0xb, 0xba, 0x50, 0xa, 0xd4, 0x18, + 0xcc, 0xc0, 0x60, + + /* U+F7C2 "" */ + 0x7, 0xff, 0xb8, 0x5f, 0x27, 0x60, 0x89, 0xb, + 0xb7, 0x84, 0x0, 0x14, 0x64, 0x10, 0xf, 0xfe, + 0x51, 0x80, 0x61, 0x20, + + /* U+F8A2 "" */ + 0x0, 0xf8, 0xc0, 0x4, 0x60, 0x11, 0x60, 0x16, + 0x51, 0x14, 0xe0, 0xf, 0x16, 0xdd, 0xa8, 0x1, + 0xe2, 0xdb, 0xbb, 0x80, 0xb2, 0x88, 0xb0, 0x80 +}; + +/*--------------------- + * 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 = 34, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 0, .adv_w = 34, .box_w = 2, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 6, .adv_w = 50, .box_w = 3, .box_h = 3, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 11, .adv_w = 90, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 26, .adv_w = 79, .box_w = 5, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 44, .adv_w = 108, .box_w = 7, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 62, .adv_w = 88, .box_w = 6, .box_h = 6, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 80, .adv_w = 27, .box_w = 2, .box_h = 3, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 84, .adv_w = 43, .box_w = 3, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 96, .adv_w = 43, .box_w = 2, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 103, .adv_w = 51, .box_w = 4, .box_h = 3, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 109, .adv_w = 74, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 119, .adv_w = 29, .box_w = 2, .box_h = 3, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 123, .adv_w = 49, .box_w = 3, .box_h = 1, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 125, .adv_w = 29, .box_w = 2, .box_h = 2, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 128, .adv_w = 45, .box_w = 5, .box_h = 7, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 145, .adv_w = 85, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 158, .adv_w = 47, .box_w = 3, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 163, .adv_w = 73, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 176, .adv_w = 73, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 189, .adv_w = 86, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 204, .adv_w = 73, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 218, .adv_w = 79, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 231, .adv_w = 77, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 244, .adv_w = 82, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 257, .adv_w = 79, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 270, .adv_w = 29, .box_w = 2, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 275, .adv_w = 29, .box_w = 2, .box_h = 6, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 282, .adv_w = 74, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 295, .adv_w = 74, .box_w = 5, .box_h = 3, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 302, .adv_w = 74, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 314, .adv_w = 73, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 327, .adv_w = 132, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 350, .adv_w = 94, .box_w = 7, .box_h = 5, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 367, .adv_w = 97, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 383, .adv_w = 93, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 398, .adv_w = 106, .box_w = 7, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 415, .adv_w = 86, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 429, .adv_w = 81, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 441, .adv_w = 99, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 457, .adv_w = 104, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 469, .adv_w = 40, .box_w = 2, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 472, .adv_w = 66, .box_w = 5, .box_h = 5, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 483, .adv_w = 92, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 499, .adv_w = 76, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 506, .adv_w = 122, .box_w = 7, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 524, .adv_w = 104, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 538, .adv_w = 108, .box_w = 7, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 556, .adv_w = 92, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 571, .adv_w = 108, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 592, .adv_w = 93, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 607, .adv_w = 79, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 620, .adv_w = 75, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 629, .adv_w = 101, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 642, .adv_w = 91, .box_w = 7, .box_h = 5, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 660, .adv_w = 144, .box_w = 9, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 683, .adv_w = 86, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 699, .adv_w = 83, .box_w = 7, .box_h = 5, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 716, .adv_w = 84, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 732, .adv_w = 43, .box_w = 3, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 740, .adv_w = 45, .box_w = 5, .box_h = 7, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 756, .adv_w = 43, .box_w = 2, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 761, .adv_w = 75, .box_w = 5, .box_h = 3, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 769, .adv_w = 64, .box_w = 4, .box_h = 1, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 771, .adv_w = 77, .box_w = 3, .box_h = 1, .ofs_x = 0, .ofs_y = 5}, + {.bitmap_index = 773, .adv_w = 77, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 783, .adv_w = 87, .box_w = 6, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 796, .adv_w = 73, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 805, .adv_w = 87, .box_w = 5, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 818, .adv_w = 78, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 828, .adv_w = 45, .box_w = 4, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 838, .adv_w = 88, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 851, .adv_w = 87, .box_w = 5, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 863, .adv_w = 36, .box_w = 2, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 868, .adv_w = 36, .box_w = 3, .box_h = 7, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 876, .adv_w = 79, .box_w = 5, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 888, .adv_w = 36, .box_w = 2, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 892, .adv_w = 135, .box_w = 8, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 907, .adv_w = 87, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 916, .adv_w = 81, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 925, .adv_w = 87, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 939, .adv_w = 87, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 951, .adv_w = 52, .box_w = 4, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 958, .adv_w = 64, .box_w = 4, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 967, .adv_w = 53, .box_w = 4, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 977, .adv_w = 87, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 986, .adv_w = 72, .box_w = 6, .box_h = 4, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 998, .adv_w = 115, .box_w = 8, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1015, .adv_w = 71, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1026, .adv_w = 72, .box_w = 6, .box_h = 5, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 1041, .adv_w = 67, .box_w = 4, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1050, .adv_w = 45, .box_w = 3, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1060, .adv_w = 38, .box_w = 2, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1065, .adv_w = 45, .box_w = 3, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1075, .adv_w = 74, .box_w = 5, .box_h = 2, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 1080, .adv_w = 54, .box_w = 3, .box_h = 3, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 1085, .adv_w = 40, .box_w = 2, .box_h = 3, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 1089, .adv_w = 128, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1118, .adv_w = 128, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1138, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1166, .adv_w = 128, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1188, .adv_w = 88, .box_w = 6, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1207, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1239, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1271, .adv_w = 144, .box_w = 9, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1306, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1331, .adv_w = 144, .box_w = 9, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1355, .adv_w = 128, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1395, .adv_w = 64, .box_w = 4, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1408, .adv_w = 96, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1428, .adv_w = 144, .box_w = 9, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1461, .adv_w = 128, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1482, .adv_w = 112, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 1501, .adv_w = 112, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1527, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1541, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1552, .adv_w = 112, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 1571, .adv_w = 112, .box_w = 9, .box_h = 8, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 1600, .adv_w = 80, .box_w = 5, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1621, .adv_w = 80, .box_w = 5, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1642, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1666, .adv_w = 112, .box_w = 7, .box_h = 2, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 1671, .adv_w = 144, .box_w = 9, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1698, .adv_w = 160, .box_w = 11, .box_h = 8, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 1741, .adv_w = 144, .box_w = 11, .box_h = 8, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 1779, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1810, .adv_w = 112, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1828, .adv_w = 112, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1847, .adv_w = 160, .box_w = 11, .box_h = 7, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 1885, .adv_w = 128, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1901, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1931, .adv_w = 128, .box_w = 9, .box_h = 9, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 1963, .adv_w = 112, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1994, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2014, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2039, .adv_w = 80, .box_w = 7, .box_h = 8, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 2067, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2091, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2116, .adv_w = 144, .box_w = 9, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2139, .adv_w = 128, .box_w = 10, .box_h = 10, .ofs_x = -1, .ofs_y = -2}, + {.bitmap_index = 2177, .adv_w = 96, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2191, .adv_w = 160, .box_w = 10, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2227, .adv_w = 160, .box_w = 10, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2248, .adv_w = 160, .box_w = 10, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2272, .adv_w = 160, .box_w = 10, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2297, .adv_w = 160, .box_w = 10, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2321, .adv_w = 160, .box_w = 10, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2340, .adv_w = 160, .box_w = 11, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2375, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2403, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2423, .adv_w = 128, .box_w = 9, .box_h = 9, .ofs_x = -1, .ofs_y = -2}, + {.bitmap_index = 2458, .adv_w = 160, .box_w = 10, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2485, .adv_w = 96, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2505, .adv_w = 129, .box_w = 9, .box_h = 6, .ofs_x = 0, .ofs_y = 0} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + +static const uint16_t unicode_list_1[] = { + 0x0, 0x1f72, 0xef51, 0xef58, 0xef5b, 0xef5c, 0xef5d, 0xef61, + 0xef63, 0xef65, 0xef69, 0xef6c, 0xef71, 0xef76, 0xef77, 0xef78, + 0xef8e, 0xef98, 0xef9b, 0xef9c, 0xef9d, 0xefa1, 0xefa2, 0xefa3, + 0xefa4, 0xefb7, 0xefb8, 0xefbe, 0xefc0, 0xefc1, 0xefc4, 0xefc7, + 0xefc8, 0xefc9, 0xefcb, 0xefe3, 0xefe5, 0xf014, 0xf015, 0xf017, + 0xf037, 0xf03a, 0xf043, 0xf06c, 0xf074, 0xf0ab, 0xf13b, 0xf190, + 0xf191, 0xf192, 0xf193, 0xf194, 0xf1d7, 0xf1e3, 0xf23d, 0xf254, + 0xf4aa, 0xf712, 0xf7f2 +}; + +/*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 = 176, .range_length = 63475, .glyph_id_start = 96, + .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 59, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + } +}; + +/*----------------- + * KERNING + *----------------*/ + +/*Map glyph_ids to kern left classes*/ +static const uint8_t kern_left_class_mapping[] = +{ + 0, 0, 1, 2, 0, 3, 4, 5, + 2, 6, 7, 8, 9, 10, 9, 10, + 11, 12, 0, 13, 14, 15, 16, 17, + 18, 19, 12, 20, 20, 0, 0, 0, + 21, 22, 23, 24, 25, 22, 26, 27, + 28, 29, 29, 30, 31, 32, 29, 29, + 22, 33, 34, 35, 3, 36, 30, 37, + 37, 38, 39, 40, 41, 42, 43, 0, + 44, 0, 45, 46, 47, 48, 49, 50, + 51, 45, 52, 52, 53, 48, 45, 45, + 46, 46, 54, 55, 56, 57, 51, 58, + 58, 59, 58, 60, 41, 0, 0, 9, + 61, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0 +}; + +/*Map glyph_ids to kern right classes*/ +static const uint8_t kern_right_class_mapping[] = +{ + 0, 0, 1, 2, 0, 3, 4, 5, + 2, 6, 7, 8, 9, 10, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 12, + 18, 19, 20, 21, 21, 0, 0, 0, + 22, 23, 24, 25, 23, 25, 25, 25, + 23, 25, 25, 26, 25, 25, 25, 25, + 23, 25, 23, 25, 3, 27, 28, 29, + 29, 30, 31, 32, 33, 34, 35, 0, + 36, 0, 37, 38, 39, 39, 39, 0, + 39, 38, 40, 41, 38, 38, 42, 42, + 39, 42, 39, 42, 43, 44, 45, 46, + 46, 47, 46, 48, 0, 0, 35, 9, + 49, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0 +}; + +/*Kern values between classes*/ +static const int8_t kern_class_values[] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 0, 3, -3, 0, 0, + 0, 0, -7, -8, 1, 6, 3, 2, + -5, 1, 6, 0, 5, 1, 4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 8, 1, -1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 0, -4, 0, 0, 0, 0, + 0, -3, 2, 3, 0, 0, -1, 0, + -1, 1, 0, -1, 0, -1, -1, -3, + 0, 0, 0, 0, -1, 0, 0, -2, + -2, 0, 0, -1, 0, -3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -1, + -1, 0, -2, 0, -3, 0, -15, 0, + 0, -3, 0, 3, 4, 0, 0, -3, + 1, 1, 4, 3, -2, 3, 0, 0, + -7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -3, -2, -6, 0, -5, + -1, 0, 0, 0, 0, 0, 5, 0, + -4, -1, 0, 0, 0, -2, 0, 0, + -1, -9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -10, -1, 5, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4, + 0, 1, 0, 0, -3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5, 1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, + 3, 1, 4, -1, 0, 0, 3, -1, + -4, -18, 1, 3, 3, 0, -2, 0, + 5, 0, 4, 0, 4, 0, -12, 0, + -2, 4, 0, 4, -1, 3, 1, 0, + 0, 0, -1, 0, 0, -2, 10, 0, + 10, 0, 4, 0, 5, 2, 2, 4, + 0, 0, 0, -5, 0, 0, 0, 0, + 0, -1, 0, 1, -2, -2, -3, 1, + 0, -1, 0, 0, 0, -5, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -7, 0, -8, 0, 0, 0, + 0, -1, 0, 13, -2, -2, 1, 1, + -1, 0, -2, 1, 0, 0, -7, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -12, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -8, 0, 8, 0, 0, -5, 0, + 4, 0, -9, -12, -9, -3, 4, 0, + 0, -9, 0, 2, -3, 0, -2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 4, -16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 0, 1, 0, 0, 0, + 0, 0, 1, 1, -2, -3, 0, 0, + 0, -1, 0, 0, -1, 0, 0, 0, + -3, 0, -1, 0, -3, -3, 0, -3, + -4, -4, -2, 0, -3, 0, -3, 0, + 0, 0, 0, -1, 0, 0, 1, 0, + 1, -1, 0, 0, 0, 0, 0, 1, + -1, 0, 0, 0, -1, 1, 1, 0, + 0, 0, 0, -2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, -1, 0, + -2, 0, -2, 0, 0, -1, 0, 4, + 0, 0, -1, 0, 0, 0, 0, 0, + 0, 0, -1, -1, 0, 0, -1, 0, + -1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -1, -1, 0, -1, -2, 0, + 0, 0, 0, 0, 0, 0, 0, -1, + 0, -1, -1, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -1, 0, 0, + 0, 0, -1, -2, 0, -2, 0, -4, + -1, -4, 3, 0, 0, -3, 1, 3, + 3, 0, -3, 0, -2, 0, 0, -6, + 1, -1, 1, -7, 1, 0, 0, 0, + -7, 0, -7, -1, -11, -1, 0, -6, + 0, 3, 4, 0, 2, 0, 0, 0, + 0, 0, 0, -2, -2, 0, -4, 0, + 0, 0, -1, 0, 0, 0, -1, 0, + 0, 0, 0, 0, -1, -1, 0, -1, + -2, 0, 0, 0, 0, 0, 0, 0, + -1, -1, 0, -1, -2, -1, 0, 0, + -1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, -1, 0, -2, + 0, -1, 0, -3, 1, 0, 0, -2, + 1, 1, 1, 0, 0, 0, 0, 0, + 0, -1, 0, 0, 0, 0, 0, 1, + 0, 0, -1, 0, -1, -1, -2, 0, + 0, 0, 0, 0, 0, 0, 1, 0, + -1, 0, 0, 0, 0, -1, -2, 0, + -2, 0, 4, -1, 0, -4, 0, 0, + 3, -6, -7, -5, -3, 1, 0, -1, + -8, -2, 0, -2, 0, -3, 2, -2, + -8, 0, -3, 0, 0, 1, 0, 1, + -1, 0, 1, 0, -4, -5, 0, -6, + -3, -3, -3, -4, -2, -3, 0, -2, + -3, 1, 0, 0, 0, -1, 0, 0, + 0, 1, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -1, + 0, -1, 0, 0, -1, 0, -2, -3, + -3, 0, 0, -4, 0, 0, 0, 0, + 0, 0, -1, 0, 0, 0, 0, 1, + -1, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 6, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, + -1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -2, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, 0, 0, 0, + -2, 0, 0, 0, 0, -6, -4, 0, + 0, 0, -2, -6, 0, 0, -1, 1, + 0, -3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -2, 0, 0, -2, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, -2, 0, + 0, 0, 0, 2, 0, 1, -3, -3, + 0, -1, -1, -2, 0, 0, 0, 0, + 0, 0, -4, 0, -1, 0, -2, -1, + 0, -3, -3, -4, -1, 0, -3, 0, + -4, 0, 0, 0, 0, 10, 0, 0, + 1, 0, 0, -2, 0, 1, 0, -6, + 0, 0, 0, 0, 0, -12, -2, 4, + 4, -1, -5, 0, 1, -2, 0, -6, + -1, -2, 1, -9, -1, 2, 0, 2, + -4, -2, -5, -4, -5, 0, 0, -8, + 0, 7, 0, 0, -1, 0, 0, 0, + -1, -1, -1, -3, -4, 0, -12, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, -1, -2, 0, 0, + -3, 0, -1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -3, 0, 0, 3, + 0, 2, 0, -3, 1, -1, 0, -3, + -1, 0, -2, -1, -1, 0, -2, -2, + 0, 0, -1, 0, -1, -2, -2, 0, + 0, -1, 0, 1, -1, 0, -3, 0, + 0, 0, -3, 0, -2, 0, -2, -2, + 1, 0, 0, 0, 0, 0, 0, 0, + 0, -3, 1, 0, -2, 0, -1, -2, + -4, -1, -1, -1, 0, -1, -2, 0, + 0, 0, 0, 0, 0, -1, -1, -1, + 0, 0, 0, 0, 2, -1, 0, -1, + 0, 0, 0, -1, -2, -1, -1, -2, + -1, 0, 1, 5, 0, 0, -3, 0, + -1, 3, 0, -1, -5, -2, 2, 0, + 0, -6, -2, 1, -2, 1, 0, -1, + -1, -4, 0, -2, 1, 0, 0, -2, + 0, 0, 0, 1, 1, -3, -2, 0, + -2, -1, -2, -1, -1, 0, -2, 1, + -2, -2, 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -1, -1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -2, 0, 0, -2, + 0, 0, -1, -1, 0, 0, 0, 0, + -1, 0, 0, 0, 0, -1, 0, 0, + 0, 0, 0, -1, 0, 0, 0, 0, + -2, 0, -3, 0, 0, 0, -4, 0, + 1, -3, 3, 0, -1, -6, 0, 0, + -3, -1, 0, -5, -3, -4, 0, 0, + -6, -1, -5, -5, -6, 0, -3, 0, + 1, 9, -2, 0, -3, -1, 0, -1, + -2, -3, -2, -5, -5, -3, -1, 0, + 0, -1, 0, 0, 0, 0, -9, -1, + 4, 3, -3, -5, 0, 0, -4, 0, + -6, -1, -1, 3, -12, -2, 0, 0, + 0, -8, -2, -7, -1, -9, 0, 0, + -9, 0, 8, 0, 0, -1, 0, 0, + 0, 0, -1, -1, -5, -1, 0, -8, + 0, 0, 0, 0, -4, 0, -1, 0, + 0, -4, -6, 0, 0, -1, -2, -4, + -1, 0, -1, 0, 0, 0, 0, -6, + -1, -4, -4, -1, -2, -3, -1, -2, + 0, -3, -1, -4, -2, 0, -2, -2, + -1, -2, 0, 1, 0, -1, -4, 0, + 3, 0, -2, 0, 0, 0, 0, 2, + 0, 1, -3, 5, 0, -1, -1, -2, + 0, 0, 0, 0, 0, 0, -4, 0, + -1, 0, -2, -1, 0, -3, -3, -4, + -1, 0, -3, 1, 5, 0, 0, 0, + 0, 10, 0, 0, 1, 0, 0, -2, + 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -1, -3, 0, 0, 0, 0, 0, -1, + 0, 0, 0, -1, -1, 0, 0, -3, + -1, 0, 0, -3, 0, 2, -1, 0, + 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 2, 3, 1, -1, 0, -4, + -2, 0, 4, -4, -4, -3, -3, 5, + 2, 1, -11, -1, 3, -1, 0, -1, + 1, -1, -4, 0, -1, 1, -2, -1, + -4, -1, 0, 0, 4, 3, 0, -4, + 0, -7, -2, 4, -2, -5, 0, -2, + -4, -4, -1, 5, 1, 0, -2, 0, + -3, 0, 1, 4, -3, -5, -5, -3, + 4, 0, 0, -9, -1, 1, -2, -1, + -3, 0, -3, -5, -2, -2, -1, 0, + 0, -3, -3, -1, 0, 4, 3, -1, + -7, 0, -7, -2, 0, -4, -7, 0, + -4, -2, -4, -4, 3, 0, 0, -2, + 0, -3, -1, 0, -1, -2, 0, 2, + -4, 1, 0, 0, -7, 0, -1, -3, + -2, -1, -4, -3, -4, -3, 0, -4, + -1, -3, -2, -4, -1, 0, 0, 0, + 6, -2, 0, -4, -1, 0, -1, -3, + -3, -3, -4, -5, -2, -3, 3, 0, + -2, 0, -6, -2, 1, 3, -4, -5, + -3, -4, 4, -1, 1, -12, -2, 3, + -3, -2, -5, 0, -4, -5, -2, -1, + -1, -1, -3, -4, 0, 0, 0, 4, + 4, -1, -8, 0, -8, -3, 3, -5, + -9, -3, -4, -5, -6, -4, 3, 0, + 0, 0, 0, -2, 0, 0, 1, -2, + 3, 1, -2, 3, 0, 0, -4, 0, + 0, 0, 0, 0, 0, -1, 0, 0, + 0, 0, 0, 0, -1, 0, 0, 0, + 0, 1, 4, 0, 0, -2, 0, 0, + 0, 0, -1, -1, -2, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 1, 0, + -1, 0, 5, 0, 2, 0, 0, -2, + 0, 3, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 0, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -8, 0, -1, 2, 0, 4, + 0, 0, 13, 2, -3, -3, 1, 1, + -1, 0, -6, 0, 0, 6, -8, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -9, 5, 18, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -2, 0, 0, -2, + -1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, 0, -3, 0, + 0, 0, 0, 0, 1, 17, -3, -1, + 4, 3, -3, 1, 0, 0, 1, 1, + -2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -17, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -4, + 0, 0, 0, -3, 0, 0, 0, 0, + -3, -1, 0, 0, 0, -3, 0, -2, + 0, -6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, 0, -2, 0, -2, 0, + -3, 0, 0, 0, -2, 1, -2, 0, + 0, -3, -1, -3, 0, 0, -3, 0, + -1, 0, -6, 0, -1, 0, 0, -10, + -2, -5, -1, -5, 0, 0, -9, 0, + -3, -1, 0, 0, 0, 0, 0, 0, + 0, 0, -2, -2, -1, -2, 0, 0, + 0, 0, -3, 0, -3, 2, -1, 3, + 0, -1, -3, -1, -2, -2, 0, -2, + -1, -1, 1, -3, 0, 0, 0, 0, + -11, -1, -2, 0, -3, 0, -1, -6, + -1, 0, 0, -1, -1, 0, 0, 0, + 0, 1, 0, -1, -2, -1, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, + 0, -3, 0, -1, 0, 0, 0, -3, + 1, 0, 0, 0, -3, -1, -3, 0, + 0, -4, 0, -1, 0, -6, 0, 0, + 0, 0, -12, 0, -3, -5, -6, 0, + 0, -9, 0, -1, -2, 0, 0, 0, + 0, 0, 0, 0, 0, -1, -2, -1, + -2, 0, 0, 0, 2, -2, 0, 4, + 6, -1, -1, -4, 2, 6, 2, 3, + -3, 2, 5, 2, 4, 3, 3, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 8, 6, -2, -1, 0, -1, + 10, 6, 10, 0, 0, 0, 1, 0, + 0, 5, 0, 0, -2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -1, 0, + 0, 0, 0, 0, 0, 0, 0, 2, + 0, 0, 0, 0, -11, -2, -1, -5, + -6, 0, 0, -9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -1, + 0, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, -11, -2, -1, + -5, -6, 0, 0, -5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -1, 0, 0, 0, -3, 1, 0, -1, + 1, 2, 1, -4, 0, 0, -1, 1, + 0, 1, 0, 0, 0, 0, -3, 0, + -1, -1, -3, 0, -1, -5, 0, 8, + -1, 0, -3, -1, 0, -1, -2, 0, + -1, -4, -3, -2, 0, 0, 0, -2, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, -11, + -2, -1, -5, -6, 0, 0, -9, 0, + 0, 0, 0, 0, 0, 6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -2, 0, -4, -2, -1, 4, -1, -1, + -5, 0, -1, 0, -1, -3, 0, 3, + 0, 1, 0, 1, -3, -5, -2, 0, + -5, -2, -3, -5, -5, 0, -2, -3, + -2, -2, -1, -1, -2, -1, 0, -1, + 0, 2, 0, 2, -1, 0, 4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -1, -1, -1, 0, 0, + -3, 0, -1, 0, -2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, -1, 0, -2, + 0, 0, 0, 0, -1, 0, 0, -2, + -1, 1, 0, -2, -2, -1, 0, -4, + -1, -3, -1, -2, 0, -2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -9, 0, 4, 0, 0, -2, 0, + 0, 0, 0, -2, 0, -1, 0, 0, + -1, 0, 0, -1, 0, -3, 0, 0, + 5, -2, -4, -4, 1, 1, 1, 0, + -4, 1, 2, 1, 4, 1, 4, -1, + -3, 0, 0, -5, 0, 0, -4, -3, + 0, 0, -3, 0, -2, -2, 0, -2, + 0, -2, 0, -1, 2, 0, -1, -4, + -1, 5, 0, 0, -1, 0, -3, 0, + 0, 2, -3, 0, 1, -1, 1, 0, + 0, -4, 0, -1, 0, 0, -1, 1, + -1, 0, 0, 0, -5, -2, -3, 0, + -4, 0, 0, -6, 0, 5, -1, 0, + -2, 0, 1, 0, -1, 0, -1, -4, + 0, -1, 1, 0, 0, 0, 0, -1, + 0, 0, 1, -2, 0, 0, 0, -2, + -1, 0, -2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -8, 0, 3, 0, + 0, -1, 0, 0, 0, 0, 0, 0, + -1, -1, 0, 0, 0, 3, 0, 3, + 0, 0, 0, 0, 0, -8, -7, 0, + 6, 4, 2, -5, 1, 5, 0, 5, + 0, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 +}; + +/*Collect the kern class' data in one place*/ +static const lv_font_fmt_txt_kern_classes_t kern_classes = +{ + .class_pair_values = kern_class_values, + .left_class_mapping = kern_left_class_mapping, + .right_class_mapping = kern_right_class_mapping, + .left_class_cnt = 61, + .right_class_cnt = 49, +}; + +/*-------------------- + * 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_classes, + .kern_scale = 16, + .cmap_num = 2, + .bpp = 4, + .kern_classes = 1, + .bitmap_format = 1 +}; + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +lv_font_t font_1 = { + .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 = 10, /*The maximum line height required by the font*/ + .base_line = 2, /*Baseline measured from the bottom of the line*/ +#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) + .subpx = LV_FONT_SUBPX_NONE, +#endif + .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +}; + +#endif /*#if FONT_1*/ diff --git a/src/libs/lvgl/tests/lv_test_fonts/font_2.c b/src/libs/lvgl/tests/lv_test_fonts/font_2.c new file mode 100644 index 00000000..9d9c3021 --- /dev/null +++ b/src/libs/lvgl/tests/lv_test_fonts/font_2.c @@ -0,0 +1,1408 @@ +#include "../../lvgl.h" + +/******************************************************************************* + * Size: 8 px + * Bpp: 4 + * Opts: --bpp 4 --size 8 --font ../Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022 --font ../FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --no-compress --no-prefilter --force-fast-kern-format --format lvgl -o ..\generated_fonts/font_2.c + ******************************************************************************/ + +#ifndef FONT_2 +#define FONT_2 1 +#endif + +#if FONT_2 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = { + /* U+20 " " */ + + /* U+21 "!" */ + 0x58, 0x57, 0x46, 0x23, 0x46, + + /* U+22 "\"" */ + 0x73, 0x97, 0x29, 0x0, 0x0, + + /* U+23 "#" */ + 0x4, 0x52, 0x60, 0x4b, 0x9b, 0xa3, 0x8, 0x7, + 0x20, 0x6c, 0x8c, 0x81, 0x9, 0x9, 0x0, + + /* U+24 "$" */ + 0x0, 0x80, 0x2, 0xbd, 0xa2, 0x76, 0x80, 0x0, + 0x8d, 0x81, 0x0, 0x84, 0x95, 0xad, 0xb3, 0x0, + 0x80, 0x0, + + /* U+25 "%" */ + 0x58, 0x70, 0x63, 0x8, 0x8, 0x36, 0x0, 0x27, + 0x58, 0x67, 0x10, 0x8, 0x27, 0x26, 0x6, 0x20, + 0x88, 0x20, + + /* U+26 "&" */ + 0x9, 0x99, 0x0, 0xb, 0x3a, 0x0, 0x19, 0xc2, + 0x20, 0x83, 0x1a, 0xa0, 0x3a, 0x99, 0x92, 0x0, + 0x0, 0x0, + + /* U+27 "'" */ + 0x72, 0x72, 0x0, + + /* U+28 "(" */ + 0x8, 0x20, 0xb0, 0x1a, 0x3, 0x80, 0x1a, 0x0, + 0xb0, 0x8, 0x20, + + /* U+29 ")" */ + 0x73, 0x19, 0xb, 0xc, 0xb, 0x19, 0x73, + + /* U+2A "*" */ + 0x48, 0x40, 0x6e, 0x80, 0x15, 0x10, + + /* U+2B "+" */ + 0x0, 0x20, 0x0, 0xa, 0x0, 0x49, 0xd9, 0x10, + 0xa, 0x0, + + /* U+2C "," */ + 0x0, 0x75, 0x71, + + /* U+2D "-" */ + 0x5a, 0x60, + + /* U+2E "." */ + 0x0, 0x74, + + /* U+2F "/" */ + 0x0, 0xa, 0x0, 0x2, 0x80, 0x0, 0x82, 0x0, + 0xa, 0x0, 0x4, 0x60, 0x0, 0x91, 0x0, 0x19, + 0x0, 0x0, + + /* U+30 "0" */ + 0xa, 0xbb, 0x26, 0x60, 0x1b, 0x93, 0x0, 0xc6, + 0x60, 0x1b, 0xa, 0xbb, 0x20, + + /* U+31 "1" */ + 0x9e, 0x20, 0xa2, 0xa, 0x20, 0xa2, 0xa, 0x20, + + /* U+32 "2" */ + 0x6a, 0xb9, 0x0, 0x0, 0xc0, 0x0, 0x58, 0x0, + 0x87, 0x0, 0x9e, 0xaa, 0x30, + + /* U+33 "3" */ + 0x7a, 0xbe, 0x0, 0xa, 0x20, 0x4, 0xa9, 0x0, + 0x0, 0xa2, 0x8a, 0xa9, 0x0, + + /* U+34 "4" */ + 0x0, 0x49, 0x0, 0x3, 0xa0, 0x0, 0x1b, 0x8, + 0x20, 0x8b, 0xad, 0xb2, 0x0, 0x9, 0x30, + + /* U+35 "5" */ + 0x3d, 0xaa, 0x5, 0x60, 0x0, 0x5b, 0xa8, 0x0, + 0x0, 0x93, 0x7a, 0xaa, 0x0, + + /* U+36 "6" */ + 0x9, 0xaa, 0x36, 0x70, 0x0, 0x98, 0x9a, 0x26, + 0x80, 0x2a, 0x9, 0x9a, 0x40, + + /* U+37 "7" */ + 0xca, 0xad, 0x67, 0x0, 0xc0, 0x0, 0x67, 0x0, + 0xc, 0x0, 0x6, 0x70, 0x0, + + /* U+38 "8" */ + 0x1a, 0xab, 0x25, 0x60, 0x48, 0x1d, 0xad, 0x38, + 0x40, 0x1b, 0x3a, 0x9a, 0x40, + + /* U+39 "9" */ + 0x4a, 0x99, 0xb, 0x10, 0x95, 0x3a, 0x99, 0x80, + 0x0, 0x95, 0x3a, 0xb8, 0x0, + + /* U+3A ":" */ + 0x74, 0x0, 0x0, 0x74, + + /* U+3B ";" */ + 0x74, 0x0, 0x0, 0x75, 0x62, 0x0, + + /* U+3C "<" */ + 0x0, 0x1, 0x0, 0x49, 0x80, 0x5c, 0x30, 0x0, + 0x16, 0x91, 0x0, 0x0, 0x0, + + /* U+3D "=" */ + 0x49, 0x99, 0x10, 0x0, 0x0, 0x49, 0x99, 0x10, + + /* U+3E ">" */ + 0x10, 0x0, 0x3, 0x98, 0x20, 0x0, 0x6d, 0x14, + 0x94, 0x0, 0x0, 0x0, 0x0, + + /* U+3F "?" */ + 0x6a, 0xb9, 0x0, 0x0, 0xc0, 0x0, 0xa4, 0x0, + 0x3, 0x0, 0x2, 0x80, 0x0, + + /* U+40 "@" */ + 0x3, 0x87, 0x78, 0x50, 0x28, 0x4a, 0x9c, 0x75, + 0x80, 0xb0, 0xa, 0x28, 0x80, 0xb0, 0xa, 0x28, + 0x28, 0x49, 0x99, 0xa6, 0x3, 0x88, 0x75, 0x0, + + /* U+41 "A" */ + 0x0, 0xb, 0x90, 0x0, 0x3, 0x8a, 0x10, 0x0, + 0xb1, 0x39, 0x0, 0x4d, 0x99, 0xd1, 0xb, 0x10, + 0x3, 0x90, + + /* U+42 "B" */ + 0x2d, 0x99, 0xb1, 0x2a, 0x0, 0x84, 0x2d, 0x9a, + 0xd1, 0x2a, 0x0, 0x39, 0x2d, 0x99, 0xb4, + + /* U+43 "C" */ + 0x7, 0xba, 0xa2, 0x59, 0x0, 0x0, 0x93, 0x0, + 0x0, 0x59, 0x0, 0x0, 0x7, 0xba, 0xa2, + + /* U+44 "D" */ + 0x2e, 0xab, 0xb3, 0x2, 0xa0, 0x1, 0xc0, 0x2a, + 0x0, 0x9, 0x22, 0xa0, 0x1, 0xc0, 0x2e, 0xab, + 0xb3, 0x0, + + /* U+45 "E" */ + 0x2e, 0xaa, 0x82, 0xa0, 0x0, 0x2d, 0xaa, 0x42, + 0xa0, 0x0, 0x2e, 0xaa, 0x90, + + /* U+46 "F" */ + 0x2e, 0xaa, 0x82, 0xa0, 0x0, 0x2e, 0xaa, 0x42, + 0xa0, 0x0, 0x2a, 0x0, 0x0, + + /* U+47 "G" */ + 0x7, 0xba, 0xa2, 0x59, 0x0, 0x0, 0x93, 0x0, + 0x23, 0x59, 0x0, 0x47, 0x7, 0xba, 0xa3, + + /* U+48 "H" */ + 0x2a, 0x0, 0x2a, 0x2a, 0x0, 0x2a, 0x2e, 0xaa, + 0xba, 0x2a, 0x0, 0x2a, 0x2a, 0x0, 0x2a, + + /* U+49 "I" */ + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + + /* U+4A "J" */ + 0x5, 0xad, 0x50, 0x0, 0x75, 0x0, 0x7, 0x50, + 0x0, 0x84, 0x9, 0xab, 0x0, + + /* U+4B "K" */ + 0x2a, 0x1, 0xa2, 0x2a, 0x1b, 0x20, 0x2c, 0xc7, + 0x0, 0x2d, 0x19, 0x50, 0x2a, 0x0, 0xa4, + + /* U+4C "L" */ + 0x2a, 0x0, 0x2, 0xa0, 0x0, 0x2a, 0x0, 0x2, + 0xa0, 0x0, 0x2e, 0xaa, 0x70, + + /* U+4D "M" */ + 0x2c, 0x0, 0x3, 0xc2, 0xd7, 0x0, 0xbc, 0x29, + 0x92, 0x84, 0xc2, 0x91, 0xb9, 0xc, 0x29, 0x3, + 0x0, 0xc0, + + /* U+4E "N" */ + 0x2d, 0x10, 0x2a, 0x2c, 0xb0, 0x2a, 0x2a, 0x4b, + 0x2a, 0x2a, 0x5, 0xca, 0x2a, 0x0, 0x7a, + + /* U+4F "O" */ + 0x7, 0xbb, 0xb3, 0x5, 0x90, 0x1, 0xc1, 0x93, + 0x0, 0x8, 0x45, 0x90, 0x1, 0xc1, 0x7, 0xbb, + 0xb3, 0x0, + + /* U+50 "P" */ + 0x2e, 0xaa, 0x90, 0x2a, 0x0, 0x84, 0x2a, 0x0, + 0xa3, 0x2e, 0xaa, 0x60, 0x2a, 0x0, 0x0, + + /* U+51 "Q" */ + 0x7, 0xbb, 0xb3, 0x5, 0x90, 0x1, 0xc1, 0x93, + 0x0, 0x8, 0x45, 0x90, 0x0, 0xc1, 0x7, 0xbb, + 0xb3, 0x0, 0x0, 0x39, 0x93, + + /* U+52 "R" */ + 0x2e, 0xaa, 0x90, 0x2a, 0x0, 0x84, 0x2a, 0x0, + 0xa3, 0x2d, 0xac, 0x80, 0x2a, 0x1, 0xa1, + + /* U+53 "S" */ + 0x2a, 0xaa, 0x27, 0x60, 0x0, 0x8, 0x98, 0x10, + 0x0, 0x49, 0x5a, 0xaa, 0x30, + + /* U+54 "T" */ + 0xaa, 0xea, 0x60, 0xc, 0x0, 0x0, 0xc0, 0x0, + 0xc, 0x0, 0x0, 0xc0, 0x0, + + /* U+55 "U" */ + 0x39, 0x0, 0x48, 0x39, 0x0, 0x48, 0x39, 0x0, + 0x48, 0x1c, 0x0, 0x66, 0x6, 0xba, 0xa0, + + /* U+56 "V" */ + 0xb, 0x10, 0x5, 0x70, 0x49, 0x0, 0xb0, 0x0, + 0xc1, 0x57, 0x0, 0x4, 0x9c, 0x0, 0x0, 0xc, + 0x70, 0x0, + + /* U+57 "W" */ + 0x94, 0x0, 0xf1, 0x3, 0x93, 0xa0, 0x69, 0x70, + 0x93, 0xc, 0xb, 0xb, 0xb, 0x0, 0x79, 0x80, + 0x89, 0x70, 0x1, 0xf2, 0x2, 0xf1, 0x0, + + /* U+58 "X" */ + 0x58, 0x2, 0xa0, 0x8, 0x7b, 0x10, 0x0, 0xf5, + 0x0, 0xa, 0x4b, 0x10, 0x76, 0x2, 0xb0, + + /* U+59 "Y" */ + 0xa, 0x20, 0xb, 0x0, 0x1b, 0x9, 0x30, 0x0, + 0x5b, 0x80, 0x0, 0x0, 0xd0, 0x0, 0x0, 0xc, + 0x0, 0x0, + + /* U+5A "Z" */ + 0x6a, 0xac, 0xd0, 0x0, 0x1b, 0x10, 0x0, 0xb2, + 0x0, 0xb, 0x30, 0x0, 0x8d, 0xaa, 0xa0, + + /* U+5B "[" */ + 0x2d, 0x42, 0x90, 0x29, 0x2, 0x90, 0x29, 0x2, + 0x90, 0x2d, 0x40, + + /* U+5C "\\" */ + 0x19, 0x0, 0x0, 0xa0, 0x0, 0x5, 0x50, 0x0, + 0xa, 0x0, 0x0, 0x91, 0x0, 0x3, 0x70, 0x0, + 0xa, 0x0, + + /* U+5D "]" */ + 0x8c, 0xc, 0xc, 0xc, 0xc, 0xc, 0x8c, + + /* U+5E "^" */ + 0x3, 0xc0, 0x0, 0x94, 0x50, 0x27, 0x9, 0x0, + + /* U+5F "_" */ + 0x77, 0x77, + + /* U+60 "`" */ + 0x6, 0x60, + + /* U+61 "a" */ + 0x29, 0x98, 0x2, 0x98, 0xd0, 0x84, 0xc, 0x13, + 0xb9, 0xd1, + + /* U+62 "b" */ + 0x48, 0x0, 0x0, 0x48, 0x0, 0x0, 0x4c, 0xab, + 0x50, 0x4a, 0x0, 0xc0, 0x4a, 0x0, 0xc0, 0x4c, + 0xaa, 0x50, + + /* U+63 "c" */ + 0x1a, 0xaa, 0x18, 0x40, 0x0, 0x84, 0x0, 0x1, + 0xaa, 0xa1, + + /* U+64 "d" */ + 0x0, 0x0, 0xb0, 0x0, 0xb, 0x1a, 0xaa, 0xb9, + 0x40, 0x3b, 0x94, 0x2, 0xb1, 0xa9, 0x9b, + + /* U+65 "e" */ + 0x19, 0x99, 0x19, 0x98, 0x86, 0x85, 0x1, 0x1, + 0xaa, 0xb1, + + /* U+66 "f" */ + 0xa, 0xa0, 0x2a, 0x0, 0x9d, 0x70, 0x29, 0x0, + 0x29, 0x0, 0x29, 0x0, + + /* U+67 "g" */ + 0x1a, 0x99, 0xb9, 0x40, 0x1c, 0x94, 0x2, 0xc1, + 0xaa, 0xab, 0x18, 0x9a, 0x30, + + /* U+68 "h" */ + 0x48, 0x0, 0x4, 0x80, 0x0, 0x4c, 0x9b, 0x44, + 0x90, 0x1b, 0x48, 0x0, 0xc4, 0x80, 0xc, + + /* U+69 "i" */ + 0x37, 0x0, 0x48, 0x48, 0x48, 0x48, + + /* U+6A "j" */ + 0x3, 0x70, 0x0, 0x3, 0x80, 0x38, 0x3, 0x80, + 0x38, 0x6b, 0x40, + + /* U+6B "k" */ + 0x48, 0x0, 0x4, 0x80, 0x0, 0x48, 0xa, 0x44, + 0x9c, 0x30, 0x4d, 0x6a, 0x4, 0x80, 0x77, + + /* U+6C "l" */ + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, + + /* U+6D "m" */ + 0x4c, 0x9b, 0x89, 0xb4, 0x49, 0x3, 0xb0, 0xb, + 0x48, 0x2, 0xa0, 0xc, 0x48, 0x2, 0xa0, 0xc, + + /* U+6E "n" */ + 0x4c, 0x9b, 0x44, 0x90, 0x1b, 0x48, 0x0, 0xc4, + 0x80, 0xc, + + /* U+6F "o" */ + 0x1a, 0xaa, 0x18, 0x40, 0x3a, 0x84, 0x3, 0xa1, + 0xaa, 0xa1, + + /* U+70 "p" */ + 0x4c, 0xab, 0x50, 0x4a, 0x0, 0xc0, 0x4a, 0x0, + 0xc0, 0x4c, 0xaa, 0x50, 0x48, 0x0, 0x0, + + /* U+71 "q" */ + 0x1a, 0xa9, 0xb9, 0x40, 0x3b, 0x94, 0x3, 0xb1, + 0xaa, 0x9b, 0x0, 0x0, 0xb0, + + /* U+72 "r" */ + 0x4b, 0xa0, 0x4a, 0x0, 0x48, 0x0, 0x48, 0x0, + + /* U+73 "s" */ + 0x5b, 0x95, 0x87, 0x30, 0x3, 0x79, 0x7a, 0xa6, + + /* U+74 "t" */ + 0x29, 0x0, 0x9d, 0x70, 0x29, 0x0, 0x29, 0x0, + 0xb, 0x90, + + /* U+75 "u" */ + 0x57, 0x1, 0xb5, 0x70, 0x1b, 0x48, 0x3, 0xb0, + 0xa9, 0x9b, + + /* U+76 "v" */ + 0xb, 0x0, 0x84, 0x5, 0x70, 0xb0, 0x0, 0xb7, + 0x50, 0x0, 0x6d, 0x0, + + /* U+77 "w" */ + 0xb0, 0xe, 0x20, 0xa0, 0x55, 0x59, 0x82, 0x80, + 0xa, 0xa0, 0xa8, 0x20, 0x9, 0x80, 0x6b, 0x0, + + /* U+78 "x" */ + 0x67, 0x1b, 0x0, 0x9b, 0x10, 0xa, 0xb2, 0x7, + 0x51, 0xb0, + + /* U+79 "y" */ + 0xb, 0x10, 0x83, 0x3, 0x81, 0xa0, 0x0, 0xaa, + 0x30, 0x0, 0x4a, 0x0, 0xa, 0xb2, 0x0, + + /* U+7A "z" */ + 0x59, 0xbb, 0x1, 0xb1, 0xb, 0x20, 0x9c, 0x98, + + /* U+7B "{" */ + 0xa, 0x60, 0xc0, 0xc, 0x5, 0xb0, 0xc, 0x0, + 0xc0, 0xa, 0x60, + + /* U+7C "|" */ + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, + + /* U+7D "}" */ + 0x97, 0x0, 0xb0, 0xb, 0x0, 0xd3, 0xb, 0x0, + 0xb0, 0x97, 0x0, + + /* U+7E "~" */ + 0x29, 0x35, 0x15, 0x6, 0x80, + + /* U+B0 "°" */ + 0x26, 0x47, 0x7, 0x27, 0x50, + + /* U+2022 "•" */ + 0x0, 0x5d, 0x2, + + /* U+F001 "" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, 0xbe, + 0x0, 0x8d, 0xff, 0xff, 0x0, 0xff, 0xe9, 0x5f, + 0x0, 0xf3, 0x0, 0xf, 0x0, 0xf0, 0x0, 0xf, + 0x0, 0xf0, 0xa, 0xff, 0xaf, 0xf0, 0xa, 0xfa, + 0xaf, 0xa0, 0x0, 0x0, + + /* U+F008 "" */ + 0xbd, 0xcc, 0xce, 0xab, 0x8b, 0x0, 0x7, 0x58, + 0xcd, 0x66, 0x6a, 0xac, 0xcd, 0x66, 0x6a, 0xac, + 0x8b, 0x0, 0x7, 0x58, 0xbd, 0xcc, 0xce, 0xab, + + /* U+F00B "" */ + 0x34, 0x14, 0x44, 0x43, 0xff, 0x7f, 0xff, 0xff, + 0xab, 0x4b, 0xbb, 0xba, 0xbc, 0x5c, 0xcc, 0xcb, + 0xff, 0x7f, 0xff, 0xff, 0x67, 0x17, 0x88, 0x86, + 0xff, 0x7f, 0xff, 0xff, 0xab, 0x4b, 0xbb, 0xba, + + /* U+F00C "" */ + 0x0, 0x0, 0x0, 0x9a, 0x0, 0x0, 0x9, 0xfa, + 0xa9, 0x0, 0x9f, 0xa0, 0xaf, 0x99, 0xfa, 0x0, + 0xa, 0xff, 0xa0, 0x0, 0x0, 0x99, 0x0, 0x0, + + /* U+F00D "" */ + 0x63, 0x0, 0x82, 0xcf, 0x4a, 0xf4, 0x1d, 0xff, + 0x60, 0xa, 0xff, 0x30, 0xaf, 0x7d, 0xf3, 0xa6, + 0x1, 0xb3, + + /* U+F011 "" */ + 0x0, 0xc, 0x51, 0x0, 0x1d, 0x7d, 0x6e, 0x70, + 0x8d, 0xd, 0x65, 0xf1, 0xc7, 0xd, 0x60, 0xe6, + 0xd7, 0x6, 0x20, 0xe6, 0x9d, 0x0, 0x4, 0xf2, + 0x1e, 0xc7, 0x8f, 0x80, 0x1, 0x9d, 0xc6, 0x0, + + /* U+F013 "" */ + 0x0, 0xc, 0xc0, 0x0, 0x18, 0x8f, 0xf8, 0x81, + 0x8f, 0xfe, 0xef, 0xf8, 0x2f, 0xe0, 0xe, 0xf2, + 0x2f, 0xe0, 0xe, 0xf2, 0x8f, 0xfe, 0xef, 0xf8, + 0x18, 0x8f, 0xf8, 0x81, 0x0, 0xc, 0xc0, 0x0, + + /* U+F015 "" */ + 0x0, 0x0, 0x30, 0x22, 0x0, 0x0, 0xaf, 0xaa, + 0xa0, 0x1, 0xda, 0x6a, 0xfa, 0x3, 0xe8, 0xbf, + 0xb8, 0xe3, 0xb6, 0xdf, 0xff, 0xd6, 0xb0, 0x8f, + 0xfb, 0xff, 0x80, 0x8, 0xfc, 0xc, 0xf8, 0x0, + 0x5b, 0x80, 0x8b, 0x50, + + /* U+F019 "" */ + 0x0, 0xf, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x7, 0xff, 0xff, 0x70, + 0x0, 0x9f, 0xf9, 0x0, 0x78, 0x7a, 0xa7, 0x87, + 0xff, 0xfb, 0xbf, 0xff, 0xff, 0xff, 0xfb, 0xbf, + + /* U+F01C "" */ + 0x5, 0xff, 0xff, 0xf5, 0x1, 0xe3, 0x0, 0x3, + 0xe1, 0xa8, 0x0, 0x0, 0x8, 0xaf, 0xff, 0x60, + 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, + 0xff, 0xff, 0xfd, + + /* U+F021 "" */ + 0x0, 0x0, 0x0, 0x3, 0x2, 0xbf, 0xfb, 0x3f, + 0x2e, 0x91, 0x18, 0xff, 0x9a, 0x0, 0x6c, 0xff, + 0x31, 0x0, 0x24, 0x44, 0x44, 0x42, 0x0, 0x13, + 0xff, 0xc6, 0x0, 0xb9, 0xfe, 0xa5, 0x5b, 0xd1, + 0xf2, 0x8c, 0xc8, 0x10, 0x30, 0x0, 0x0, 0x0, + + /* U+F026 "" */ + 0x0, 0x9, 0x34, 0xcf, 0xff, 0xff, 0xff, 0xff, + 0xab, 0xff, 0x0, 0x4f, 0x0, 0x1, + + /* U+F027 "" */ + 0x0, 0x9, 0x0, 0x34, 0xcf, 0x1, 0xff, 0xff, + 0x1b, 0xff, 0xff, 0x1b, 0xbb, 0xff, 0x1, 0x0, + 0x4f, 0x0, 0x0, 0x1, 0x0, + + /* U+F028 "" */ + 0x0, 0x0, 0x0, 0x54, 0x0, 0x0, 0x90, 0x23, + 0xb3, 0x34, 0xcf, 0x2, 0xc3, 0xbf, 0xff, 0xf1, + 0xb5, 0x6c, 0xff, 0xff, 0x1b, 0x56, 0xca, 0xbf, + 0xf0, 0x2c, 0x3a, 0x0, 0x4f, 0x2, 0x3b, 0x30, + 0x0, 0x10, 0x5, 0x40, + + /* U+F03E "" */ + 0xdf, 0xff, 0xff, 0xfd, 0xf0, 0x7f, 0xff, 0xff, + 0xf8, 0xcf, 0xb1, 0xbf, 0xfb, 0x5b, 0x0, 0xf, + 0xf0, 0x0, 0x0, 0xf, 0xdf, 0xff, 0xff, 0xfd, + + /* U+F048 "" */ + 0x40, 0x0, 0x2f, 0x20, 0x8f, 0xf2, 0x9f, 0xff, + 0xcf, 0xff, 0xff, 0xff, 0xff, 0x5e, 0xff, 0xf2, + 0x2e, 0xfb, 0x10, 0x19, + + /* U+F04B "" */ + 0x0, 0x0, 0x0, 0xd, 0xa1, 0x0, 0x0, 0xff, + 0xf7, 0x0, 0xf, 0xff, 0xfd, 0x40, 0xff, 0xff, + 0xff, 0xaf, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xd4, + 0xf, 0xff, 0x70, 0x0, 0xda, 0x10, 0x0, 0x0, + 0x0, 0x0, 0x0, + + /* U+F04C "" */ + 0x9b, 0x90, 0x9b, 0x9f, 0xff, 0xf, 0xff, 0xff, + 0xf0, 0xff, 0xff, 0xff, 0xf, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0xff, 0xf, 0xff, 0xff, 0xf0, 0xff, + 0xf2, 0x42, 0x2, 0x42, + + /* U+F04D "" */ + 0x24, 0x44, 0x44, 0x2f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf8, 0xbb, 0xbb, 0xb8, + + /* U+F051 "" */ + 0x20, 0x0, 0x4f, 0x80, 0x2f, 0xff, 0x92, 0xff, + 0xff, 0xcf, 0xff, 0xff, 0xff, 0xfe, 0x5f, 0xfd, + 0x22, 0xf9, 0x10, 0x1b, + + /* U+F052 "" */ + 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x8f, 0x80, + 0x0, 0x0, 0x7f, 0xff, 0x70, 0x0, 0x5f, 0xff, + 0xff, 0x50, 0xe, 0xff, 0xff, 0xfe, 0x0, 0x58, + 0x88, 0x88, 0x50, 0xf, 0xff, 0xff, 0xff, 0x0, + 0xab, 0xbb, 0xbb, 0xa0, + + /* U+F053 "" */ + 0x0, 0x6, 0x20, 0x7, 0xf4, 0x7, 0xf5, 0x5, + 0xf6, 0x0, 0x1e, 0xb0, 0x0, 0x2e, 0xb0, 0x0, + 0x2e, 0x60, 0x0, 0x10, + + /* U+F054 "" */ + 0x26, 0x0, 0x4, 0xf7, 0x0, 0x5, 0xf7, 0x0, + 0x6, 0xf5, 0x0, 0xbe, 0x10, 0xbe, 0x20, 0x6e, + 0x20, 0x0, 0x10, 0x0, + + /* U+F067 "" */ + 0x0, 0x4, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, + 0x4f, 0x40, 0x7, 0x8a, 0xfa, 0x87, 0xef, 0xff, + 0xff, 0xe0, 0x4, 0xf4, 0x0, 0x0, 0x4f, 0x40, + 0x0, 0x1, 0xb1, 0x0, + + /* U+F068 "" */ + 0x78, 0x88, 0x88, 0x7e, 0xff, 0xff, 0xfe, + + /* U+F06E "" */ + 0x0, 0x8c, 0xcc, 0x80, 0x1, 0xdd, 0x16, 0x3d, + 0xd1, 0xcf, 0x55, 0xed, 0x5f, 0xcb, 0xf5, 0xdf, + 0xd5, 0xfc, 0x1d, 0xd3, 0x73, 0xdd, 0x10, 0x8, + 0xdc, 0xc8, 0x10, + + /* U+F070 "" */ + 0x1d, 0x30, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x8c, + 0xcc, 0xa2, 0x0, 0x0, 0x2d, 0xb4, 0x49, 0xf4, + 0x0, 0x7a, 0x1a, 0xff, 0x3f, 0xe1, 0x7, 0xfa, + 0x6, 0xf7, 0xff, 0x10, 0xa, 0xf3, 0x3, 0xef, + 0x40, 0x0, 0x6, 0xcc, 0x71, 0xbb, 0x10, 0x0, + 0x0, 0x0, 0x0, 0x89, + + /* U+F071 "" */ + 0x0, 0x0, 0x3e, 0x30, 0x0, 0x0, 0x0, 0xc, + 0xfc, 0x0, 0x0, 0x0, 0x6, 0xfc, 0xf6, 0x0, + 0x0, 0x0, 0xed, 0xd, 0xe0, 0x0, 0x0, 0x8f, + 0xe0, 0xef, 0x80, 0x0, 0x2f, 0xff, 0x6f, 0xff, + 0x20, 0xb, 0xff, 0xe2, 0xef, 0xfa, 0x0, 0xdf, + 0xff, 0xff, 0xff, 0xd0, + + /* U+F074 "" */ + 0x0, 0x0, 0x0, 0x20, 0x44, 0x0, 0x4, 0xf5, + 0xef, 0xb1, 0xcf, 0xfd, 0x1, 0x8c, 0xd1, 0xc1, + 0x1, 0xdc, 0x81, 0xc1, 0xef, 0xc1, 0xbf, 0xfd, + 0x44, 0x0, 0x4, 0xf5, 0x0, 0x0, 0x0, 0x20, + + /* U+F077 "" */ + 0x0, 0x0, 0x0, 0x0, 0x4, 0xe4, 0x0, 0x4, + 0xfc, 0xf4, 0x4, 0xf8, 0x8, 0xf4, 0xb8, 0x0, + 0x8, 0xb0, 0x0, 0x0, 0x0, + + /* U+F078 "" */ + 0x0, 0x0, 0x0, 0xb, 0x80, 0x0, 0x8b, 0x4f, + 0x80, 0x8f, 0x40, 0x4f, 0xcf, 0x40, 0x0, 0x4e, + 0x40, 0x0, 0x0, 0x0, 0x0, + + /* U+F079 "" */ + 0x0, 0x94, 0x14, 0x44, 0x40, 0x0, 0xbf, 0xf8, + 0xbb, 0xbf, 0x10, 0x8, 0xb7, 0x60, 0x0, 0xe1, + 0x0, 0xb, 0x40, 0x0, 0x1e, 0x20, 0x0, 0xb7, + 0x44, 0x5e, 0xfd, 0x50, 0x7, 0xbb, 0xb8, 0x5f, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, + + /* U+F07B "" */ + 0xdf, 0xfb, 0x0, 0x0, 0xff, 0xff, 0xff, 0xfd, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfd, + + /* U+F093 "" */ + 0x0, 0x9, 0x90, 0x0, 0x0, 0x9f, 0xf9, 0x0, + 0x7, 0xff, 0xff, 0x70, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x78, 0x4f, 0xf4, 0x87, + 0xff, 0xe8, 0x8e, 0xff, 0xff, 0xff, 0xfb, 0xbf, + + /* U+F095 "" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xea, 0x0, 0x0, 0x0, 0xef, 0xe0, 0x0, 0x0, + 0xc, 0xfc, 0x0, 0x0, 0x0, 0x4f, 0x70, 0x0, + 0x0, 0x1d, 0xe0, 0x7, 0xdc, 0x4d, 0xf3, 0x0, + 0xef, 0xff, 0xe3, 0x0, 0xa, 0xec, 0x70, 0x0, + 0x0, + + /* U+F0C4 "" */ + 0x3, 0x0, 0x0, 0x0, 0xcd, 0xc0, 0x2d, 0xc0, + 0xe7, 0xf2, 0xee, 0x20, 0x4b, 0xff, 0xe2, 0x0, + 0x4, 0xff, 0xa0, 0x0, 0xcd, 0xf9, 0xf9, 0x0, + 0xe7, 0xe0, 0x7f, 0x90, 0x4a, 0x40, 0x4, 0x50, + + /* U+F0C5 "" */ + 0x0, 0xff, 0xf7, 0x47, 0x4f, 0xff, 0x47, 0xf8, + 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xf8, 0xff, + 0xff, 0xff, 0x8f, 0xff, 0xff, 0xfb, 0x78, 0x88, + 0x7f, 0xff, 0xff, 0x0, + + /* U+F0C7 "" */ + 0x24, 0x44, 0x41, 0xf, 0xbb, 0xbb, 0xe2, 0xf0, + 0x0, 0xf, 0xdf, 0x44, 0x44, 0xff, 0xff, 0xfc, + 0xff, 0xff, 0xf9, 0x9, 0xff, 0xff, 0xd5, 0xdf, + 0xf8, 0xbb, 0xbb, 0xb8, + + /* U+F0E7 "" */ + 0x7, 0xff, 0x60, 0x0, 0xaf, 0xf2, 0x0, 0xc, + 0xff, 0x87, 0x0, 0xef, 0xff, 0xb0, 0x7, 0x8e, + 0xf2, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x3e, 0x0, + 0x0, 0x6, 0x50, 0x0, + + /* U+F0EA "" */ + 0x79, 0xb9, 0x70, 0xf, 0xfc, 0xff, 0x0, 0xff, + 0x68, 0x83, 0xf, 0xf8, 0xff, 0x8b, 0xff, 0x8f, + 0xf8, 0x8f, 0xf8, 0xff, 0xff, 0x78, 0x8f, 0xff, + 0xf0, 0x7, 0xff, 0xff, + + /* U+F0F3 "" */ + 0x0, 0xd, 0x0, 0x0, 0x4e, 0xfe, 0x30, 0xd, + 0xff, 0xfd, 0x0, 0xff, 0xff, 0xf0, 0x3f, 0xff, + 0xff, 0x3b, 0xff, 0xff, 0xfb, 0x78, 0x88, 0x88, + 0x60, 0x4, 0xf4, 0x0, + + /* U+F11C "" */ + 0xdf, 0xff, 0xff, 0xff, 0xdf, 0x18, 0x81, 0x88, + 0x1f, 0xfe, 0xaa, 0xca, 0xae, 0xff, 0xea, 0xac, + 0xaa, 0xef, 0xf1, 0x80, 0x0, 0x81, 0xfd, 0xff, + 0xff, 0xff, 0xfd, + + /* U+F124 "" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x4b, 0xc0, 0x0, 0x0, 0x5c, 0xff, 0xb0, 0x0, + 0x6e, 0xff, 0xff, 0x40, 0xd, 0xff, 0xff, 0xfc, + 0x0, 0x6, 0x88, 0xcf, 0xf5, 0x0, 0x0, 0x0, + 0x8f, 0xe0, 0x0, 0x0, 0x0, 0x8f, 0x60, 0x0, + 0x0, 0x0, 0x5d, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, + + /* U+F15B "" */ + 0xff, 0xf8, 0xb0, 0xff, 0xf8, 0xfb, 0xff, 0xfc, + 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* U+F1EB "" */ + 0x0, 0x4, 0x77, 0x40, 0x0, 0x9, 0xff, 0xcc, + 0xff, 0x90, 0xcd, 0x40, 0x0, 0x4, 0xdc, 0x20, + 0x4b, 0xff, 0xb4, 0x2, 0x1, 0xfa, 0x55, 0xaf, + 0x10, 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x0, + 0xee, 0x0, 0x0, 0x0, 0x0, 0x87, 0x0, 0x0, + + /* U+F240 "" */ + 0x24, 0x44, 0x44, 0x44, 0x40, 0xfb, 0xbb, 0xbb, + 0xbb, 0xda, 0xf7, 0xee, 0xee, 0xee, 0x5f, 0xf8, + 0xff, 0xff, 0xff, 0x2f, 0xf5, 0x66, 0x66, 0x66, + 0xab, 0x8b, 0xbb, 0xbb, 0xbb, 0xb3, + + /* U+F241 "" */ + 0x24, 0x44, 0x44, 0x44, 0x40, 0xfb, 0xbb, 0xbb, + 0xbb, 0xda, 0xf7, 0xee, 0xee, 0x70, 0x5f, 0xf8, + 0xff, 0xff, 0x80, 0x2f, 0xf5, 0x66, 0x66, 0x54, + 0xab, 0x8b, 0xbb, 0xbb, 0xbb, 0xb3, + + /* U+F242 "" */ + 0x24, 0x44, 0x44, 0x44, 0x40, 0xfb, 0xbb, 0xbb, + 0xbb, 0xda, 0xf7, 0xee, 0xe0, 0x0, 0x5f, 0xf8, + 0xff, 0xf0, 0x0, 0x2f, 0xf5, 0x66, 0x64, 0x44, + 0xab, 0x8b, 0xbb, 0xbb, 0xbb, 0xb3, + + /* U+F243 "" */ + 0x24, 0x44, 0x44, 0x44, 0x40, 0xfb, 0xbb, 0xbb, + 0xbb, 0xda, 0xf7, 0xe7, 0x0, 0x0, 0x5f, 0xf8, + 0xf8, 0x0, 0x0, 0x2f, 0xf5, 0x65, 0x44, 0x44, + 0xab, 0x8b, 0xbb, 0xbb, 0xbb, 0xb3, + + /* U+F244 "" */ + 0x24, 0x44, 0x44, 0x44, 0x40, 0xfb, 0xbb, 0xbb, + 0xbb, 0xd8, 0xf0, 0x0, 0x0, 0x0, 0x5f, 0xf0, + 0x0, 0x0, 0x0, 0x2f, 0xf4, 0x44, 0x44, 0x44, + 0xad, 0x8b, 0xbb, 0xbb, 0xbb, 0xb3, + + /* U+F287 "" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xd8, 0x0, 0x0, 0x0, 0x7, 0x36, 0x40, 0x0, + 0x9, 0xb1, 0x91, 0x11, 0x17, 0x20, 0xef, 0x88, + 0xd8, 0x88, 0xd9, 0x2, 0x20, 0x6, 0x48, 0x70, + 0x0, 0x0, 0x0, 0x6, 0xec, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, + + /* U+F293 "" */ + 0x6, 0xdd, 0xc3, 0x4, 0xff, 0x3e, 0xd0, 0x9c, + 0xb5, 0x5f, 0x2b, 0xf7, 0x1a, 0xf4, 0xbf, 0x81, + 0xbf, 0x39, 0xc9, 0x64, 0xf2, 0x4f, 0xf3, 0xde, + 0x0, 0x6d, 0xed, 0x30, + + /* U+F2ED "" */ + 0x78, 0xdf, 0xd8, 0x77, 0x88, 0x88, 0x87, 0x8f, + 0xff, 0xff, 0x88, 0xcc, 0x8c, 0xc8, 0x8c, 0xc8, + 0xcc, 0x88, 0xcc, 0x8c, 0xc8, 0x8c, 0xc8, 0xcc, + 0x85, 0xff, 0xff, 0xf5, + + /* U+F304 "" */ + 0x0, 0x0, 0x0, 0x7e, 0x30, 0x0, 0x0, 0x4b, + 0xfe, 0x0, 0x0, 0x8f, 0x9b, 0x70, 0x0, 0x8f, + 0xff, 0x40, 0x0, 0x8f, 0xff, 0x80, 0x0, 0x7f, + 0xff, 0x80, 0x0, 0xe, 0xff, 0x80, 0x0, 0x0, + 0xee, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, + + /* U+F55A "" */ + 0x0, 0xaf, 0xff, 0xff, 0xfc, 0xb, 0xff, 0x9c, + 0xc9, 0xff, 0xaf, 0xff, 0xc1, 0x1c, 0xff, 0xaf, + 0xff, 0xc1, 0x1c, 0xff, 0xb, 0xff, 0x9c, 0xc9, + 0xff, 0x0, 0xaf, 0xff, 0xff, 0xfc, + + /* U+F7C2 "" */ + 0x7, 0xff, 0xfe, 0x17, 0xb6, 0x27, 0xc3, 0xfe, + 0xb9, 0xbe, 0x3f, 0xff, 0xff, 0xf3, 0xff, 0xff, + 0xff, 0x3f, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, + 0x3c, 0xff, 0xff, 0xe1, + + /* U+F8A2 "" */ + 0x0, 0x0, 0x0, 0x3, 0x0, 0x23, 0x0, 0x2, + 0xf0, 0x2e, 0x92, 0x22, 0x5f, 0xd, 0xff, 0xff, + 0xff, 0xf0, 0x2e, 0x92, 0x22, 0x21, 0x0, 0x23, + 0x0, 0x0, 0x0 +}; + +/*--------------------- + * 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 = 34, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 0, .adv_w = 34, .box_w = 2, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 5, .adv_w = 50, .box_w = 3, .box_h = 3, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 10, .adv_w = 90, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 25, .adv_w = 79, .box_w = 5, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 43, .adv_w = 108, .box_w = 7, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 61, .adv_w = 88, .box_w = 6, .box_h = 6, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 79, .adv_w = 27, .box_w = 2, .box_h = 3, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 82, .adv_w = 43, .box_w = 3, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 93, .adv_w = 43, .box_w = 2, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 100, .adv_w = 51, .box_w = 4, .box_h = 3, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 106, .adv_w = 74, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 116, .adv_w = 29, .box_w = 2, .box_h = 3, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 119, .adv_w = 49, .box_w = 3, .box_h = 1, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 121, .adv_w = 29, .box_w = 2, .box_h = 2, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 123, .adv_w = 45, .box_w = 5, .box_h = 7, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 141, .adv_w = 85, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 154, .adv_w = 47, .box_w = 3, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 162, .adv_w = 73, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 175, .adv_w = 73, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 188, .adv_w = 86, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 203, .adv_w = 73, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 216, .adv_w = 79, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 229, .adv_w = 77, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 242, .adv_w = 82, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 255, .adv_w = 79, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 268, .adv_w = 29, .box_w = 2, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 272, .adv_w = 29, .box_w = 2, .box_h = 6, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 278, .adv_w = 74, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 291, .adv_w = 74, .box_w = 5, .box_h = 3, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 299, .adv_w = 74, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 312, .adv_w = 73, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 325, .adv_w = 132, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 349, .adv_w = 94, .box_w = 7, .box_h = 5, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 367, .adv_w = 97, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 382, .adv_w = 93, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 397, .adv_w = 106, .box_w = 7, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 415, .adv_w = 86, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 428, .adv_w = 81, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 441, .adv_w = 99, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 456, .adv_w = 104, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 471, .adv_w = 40, .box_w = 2, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 476, .adv_w = 66, .box_w = 5, .box_h = 5, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 489, .adv_w = 92, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 504, .adv_w = 76, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 517, .adv_w = 122, .box_w = 7, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 535, .adv_w = 104, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 550, .adv_w = 108, .box_w = 7, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 568, .adv_w = 92, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 583, .adv_w = 108, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 604, .adv_w = 93, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 619, .adv_w = 79, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 632, .adv_w = 75, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 645, .adv_w = 101, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 660, .adv_w = 91, .box_w = 7, .box_h = 5, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 678, .adv_w = 144, .box_w = 9, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 701, .adv_w = 86, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 716, .adv_w = 83, .box_w = 7, .box_h = 5, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 734, .adv_w = 84, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 749, .adv_w = 43, .box_w = 3, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 760, .adv_w = 45, .box_w = 5, .box_h = 7, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 778, .adv_w = 43, .box_w = 2, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 785, .adv_w = 75, .box_w = 5, .box_h = 3, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 793, .adv_w = 64, .box_w = 4, .box_h = 1, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 795, .adv_w = 77, .box_w = 3, .box_h = 1, .ofs_x = 0, .ofs_y = 5}, + {.bitmap_index = 797, .adv_w = 77, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 807, .adv_w = 87, .box_w = 6, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 825, .adv_w = 73, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 835, .adv_w = 87, .box_w = 5, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 850, .adv_w = 78, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 860, .adv_w = 45, .box_w = 4, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 872, .adv_w = 88, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 885, .adv_w = 87, .box_w = 5, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 900, .adv_w = 36, .box_w = 2, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 906, .adv_w = 36, .box_w = 3, .box_h = 7, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 917, .adv_w = 79, .box_w = 5, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 932, .adv_w = 36, .box_w = 2, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 938, .adv_w = 135, .box_w = 8, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 954, .adv_w = 87, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 964, .adv_w = 81, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 974, .adv_w = 87, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 989, .adv_w = 87, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1002, .adv_w = 52, .box_w = 4, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1010, .adv_w = 64, .box_w = 4, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1018, .adv_w = 53, .box_w = 4, .box_h = 5, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1028, .adv_w = 87, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1038, .adv_w = 72, .box_w = 6, .box_h = 4, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 1050, .adv_w = 115, .box_w = 8, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1066, .adv_w = 71, .box_w = 5, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1076, .adv_w = 72, .box_w = 6, .box_h = 5, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 1091, .adv_w = 67, .box_w = 4, .box_h = 4, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1099, .adv_w = 45, .box_w = 3, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1110, .adv_w = 38, .box_w = 2, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1117, .adv_w = 45, .box_w = 3, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1128, .adv_w = 74, .box_w = 5, .box_h = 2, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 1133, .adv_w = 54, .box_w = 3, .box_h = 3, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 1138, .adv_w = 40, .box_w = 2, .box_h = 3, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 1141, .adv_w = 128, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1177, .adv_w = 128, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1201, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1233, .adv_w = 128, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1257, .adv_w = 88, .box_w = 6, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1275, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1307, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1339, .adv_w = 144, .box_w = 9, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1375, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1407, .adv_w = 144, .box_w = 9, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1434, .adv_w = 128, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1474, .adv_w = 64, .box_w = 4, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1488, .adv_w = 96, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1509, .adv_w = 144, .box_w = 9, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1545, .adv_w = 128, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1569, .adv_w = 112, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 1589, .adv_w = 112, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1624, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1652, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1680, .adv_w = 112, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 1700, .adv_w = 112, .box_w = 9, .box_h = 8, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 1736, .adv_w = 80, .box_w = 5, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1756, .adv_w = 80, .box_w = 5, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1776, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1804, .adv_w = 112, .box_w = 7, .box_h = 2, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 1811, .adv_w = 144, .box_w = 9, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1838, .adv_w = 160, .box_w = 11, .box_h = 8, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 1882, .adv_w = 144, .box_w = 11, .box_h = 8, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 1926, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1958, .adv_w = 112, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1979, .adv_w = 112, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2000, .adv_w = 160, .box_w = 11, .box_h = 7, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 2039, .adv_w = 128, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2063, .adv_w = 128, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2095, .adv_w = 128, .box_w = 9, .box_h = 9, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 2136, .adv_w = 112, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2168, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2196, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2224, .adv_w = 80, .box_w = 7, .box_h = 8, .ofs_x = -1, .ofs_y = -1}, + {.bitmap_index = 2252, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2280, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2308, .adv_w = 144, .box_w = 9, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2335, .adv_w = 128, .box_w = 10, .box_h = 10, .ofs_x = -1, .ofs_y = -2}, + {.bitmap_index = 2385, .adv_w = 96, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2409, .adv_w = 160, .box_w = 10, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2449, .adv_w = 160, .box_w = 10, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2479, .adv_w = 160, .box_w = 10, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2509, .adv_w = 160, .box_w = 10, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2539, .adv_w = 160, .box_w = 10, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2569, .adv_w = 160, .box_w = 10, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2599, .adv_w = 160, .box_w = 11, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2643, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2671, .adv_w = 112, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2699, .adv_w = 128, .box_w = 9, .box_h = 9, .ofs_x = -1, .ofs_y = -2}, + {.bitmap_index = 2740, .adv_w = 160, .box_w = 10, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2770, .adv_w = 96, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2798, .adv_w = 129, .box_w = 9, .box_h = 6, .ofs_x = 0, .ofs_y = 0} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + +static const uint16_t unicode_list_1[] = { + 0x0, 0x1f72, 0xef51, 0xef58, 0xef5b, 0xef5c, 0xef5d, 0xef61, + 0xef63, 0xef65, 0xef69, 0xef6c, 0xef71, 0xef76, 0xef77, 0xef78, + 0xef8e, 0xef98, 0xef9b, 0xef9c, 0xef9d, 0xefa1, 0xefa2, 0xefa3, + 0xefa4, 0xefb7, 0xefb8, 0xefbe, 0xefc0, 0xefc1, 0xefc4, 0xefc7, + 0xefc8, 0xefc9, 0xefcb, 0xefe3, 0xefe5, 0xf014, 0xf015, 0xf017, + 0xf037, 0xf03a, 0xf043, 0xf06c, 0xf074, 0xf0ab, 0xf13b, 0xf190, + 0xf191, 0xf192, 0xf193, 0xf194, 0xf1d7, 0xf1e3, 0xf23d, 0xf254, + 0xf4aa, 0xf712, 0xf7f2 +}; + +/*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 = 176, .range_length = 63475, .glyph_id_start = 96, + .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 59, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + } +}; + +/*----------------- + * KERNING + *----------------*/ + +/*Map glyph_ids to kern left classes*/ +static const uint8_t kern_left_class_mapping[] = +{ + 0, 0, 1, 2, 0, 3, 4, 5, + 2, 6, 7, 8, 9, 10, 9, 10, + 11, 12, 0, 13, 14, 15, 16, 17, + 18, 19, 12, 20, 20, 0, 0, 0, + 21, 22, 23, 24, 25, 22, 26, 27, + 28, 29, 29, 30, 31, 32, 29, 29, + 22, 33, 34, 35, 3, 36, 30, 37, + 37, 38, 39, 40, 41, 42, 43, 0, + 44, 0, 45, 46, 47, 48, 49, 50, + 51, 45, 52, 52, 53, 48, 45, 45, + 46, 46, 54, 55, 56, 57, 51, 58, + 58, 59, 58, 60, 41, 0, 0, 9, + 61, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0 +}; + +/*Map glyph_ids to kern right classes*/ +static const uint8_t kern_right_class_mapping[] = +{ + 0, 0, 1, 2, 0, 3, 4, 5, + 2, 6, 7, 8, 9, 10, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 12, + 18, 19, 20, 21, 21, 0, 0, 0, + 22, 23, 24, 25, 23, 25, 25, 25, + 23, 25, 25, 26, 25, 25, 25, 25, + 23, 25, 23, 25, 3, 27, 28, 29, + 29, 30, 31, 32, 33, 34, 35, 0, + 36, 0, 37, 38, 39, 39, 39, 0, + 39, 38, 40, 41, 38, 38, 42, 42, + 39, 42, 39, 42, 43, 44, 45, 46, + 46, 47, 46, 48, 0, 0, 35, 9, + 49, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0 +}; + +/*Kern values between classes*/ +static const int8_t kern_class_values[] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 0, 3, -3, 0, 0, + 0, 0, -7, -8, 1, 6, 3, 2, + -5, 1, 6, 0, 5, 1, 4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 8, 1, -1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 0, -4, 0, 0, 0, 0, + 0, -3, 2, 3, 0, 0, -1, 0, + -1, 1, 0, -1, 0, -1, -1, -3, + 0, 0, 0, 0, -1, 0, 0, -2, + -2, 0, 0, -1, 0, -3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -1, + -1, 0, -2, 0, -3, 0, -15, 0, + 0, -3, 0, 3, 4, 0, 0, -3, + 1, 1, 4, 3, -2, 3, 0, 0, + -7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -3, -2, -6, 0, -5, + -1, 0, 0, 0, 0, 0, 5, 0, + -4, -1, 0, 0, 0, -2, 0, 0, + -1, -9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -10, -1, 5, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4, + 0, 1, 0, 0, -3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5, 1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, + 3, 1, 4, -1, 0, 0, 3, -1, + -4, -18, 1, 3, 3, 0, -2, 0, + 5, 0, 4, 0, 4, 0, -12, 0, + -2, 4, 0, 4, -1, 3, 1, 0, + 0, 0, -1, 0, 0, -2, 10, 0, + 10, 0, 4, 0, 5, 2, 2, 4, + 0, 0, 0, -5, 0, 0, 0, 0, + 0, -1, 0, 1, -2, -2, -3, 1, + 0, -1, 0, 0, 0, -5, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -7, 0, -8, 0, 0, 0, + 0, -1, 0, 13, -2, -2, 1, 1, + -1, 0, -2, 1, 0, 0, -7, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -12, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -8, 0, 8, 0, 0, -5, 0, + 4, 0, -9, -12, -9, -3, 4, 0, + 0, -9, 0, 2, -3, 0, -2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 4, -16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 0, 1, 0, 0, 0, + 0, 0, 1, 1, -2, -3, 0, 0, + 0, -1, 0, 0, -1, 0, 0, 0, + -3, 0, -1, 0, -3, -3, 0, -3, + -4, -4, -2, 0, -3, 0, -3, 0, + 0, 0, 0, -1, 0, 0, 1, 0, + 1, -1, 0, 0, 0, 0, 0, 1, + -1, 0, 0, 0, -1, 1, 1, 0, + 0, 0, 0, -2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, -1, 0, + -2, 0, -2, 0, 0, -1, 0, 4, + 0, 0, -1, 0, 0, 0, 0, 0, + 0, 0, -1, -1, 0, 0, -1, 0, + -1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -1, -1, 0, -1, -2, 0, + 0, 0, 0, 0, 0, 0, 0, -1, + 0, -1, -1, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -1, 0, 0, + 0, 0, -1, -2, 0, -2, 0, -4, + -1, -4, 3, 0, 0, -3, 1, 3, + 3, 0, -3, 0, -2, 0, 0, -6, + 1, -1, 1, -7, 1, 0, 0, 0, + -7, 0, -7, -1, -11, -1, 0, -6, + 0, 3, 4, 0, 2, 0, 0, 0, + 0, 0, 0, -2, -2, 0, -4, 0, + 0, 0, -1, 0, 0, 0, -1, 0, + 0, 0, 0, 0, -1, -1, 0, -1, + -2, 0, 0, 0, 0, 0, 0, 0, + -1, -1, 0, -1, -2, -1, 0, 0, + -1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, -1, 0, -2, + 0, -1, 0, -3, 1, 0, 0, -2, + 1, 1, 1, 0, 0, 0, 0, 0, + 0, -1, 0, 0, 0, 0, 0, 1, + 0, 0, -1, 0, -1, -1, -2, 0, + 0, 0, 0, 0, 0, 0, 1, 0, + -1, 0, 0, 0, 0, -1, -2, 0, + -2, 0, 4, -1, 0, -4, 0, 0, + 3, -6, -7, -5, -3, 1, 0, -1, + -8, -2, 0, -2, 0, -3, 2, -2, + -8, 0, -3, 0, 0, 1, 0, 1, + -1, 0, 1, 0, -4, -5, 0, -6, + -3, -3, -3, -4, -2, -3, 0, -2, + -3, 1, 0, 0, 0, -1, 0, 0, + 0, 1, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -1, + 0, -1, 0, 0, -1, 0, -2, -3, + -3, 0, 0, -4, 0, 0, 0, 0, + 0, 0, -1, 0, 0, 0, 0, 1, + -1, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 6, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, + -1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -2, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, 0, 0, 0, + -2, 0, 0, 0, 0, -6, -4, 0, + 0, 0, -2, -6, 0, 0, -1, 1, + 0, -3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -2, 0, 0, -2, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, -2, 0, + 0, 0, 0, 2, 0, 1, -3, -3, + 0, -1, -1, -2, 0, 0, 0, 0, + 0, 0, -4, 0, -1, 0, -2, -1, + 0, -3, -3, -4, -1, 0, -3, 0, + -4, 0, 0, 0, 0, 10, 0, 0, + 1, 0, 0, -2, 0, 1, 0, -6, + 0, 0, 0, 0, 0, -12, -2, 4, + 4, -1, -5, 0, 1, -2, 0, -6, + -1, -2, 1, -9, -1, 2, 0, 2, + -4, -2, -5, -4, -5, 0, 0, -8, + 0, 7, 0, 0, -1, 0, 0, 0, + -1, -1, -1, -3, -4, 0, -12, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, -1, -2, 0, 0, + -3, 0, -1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -3, 0, 0, 3, + 0, 2, 0, -3, 1, -1, 0, -3, + -1, 0, -2, -1, -1, 0, -2, -2, + 0, 0, -1, 0, -1, -2, -2, 0, + 0, -1, 0, 1, -1, 0, -3, 0, + 0, 0, -3, 0, -2, 0, -2, -2, + 1, 0, 0, 0, 0, 0, 0, 0, + 0, -3, 1, 0, -2, 0, -1, -2, + -4, -1, -1, -1, 0, -1, -2, 0, + 0, 0, 0, 0, 0, -1, -1, -1, + 0, 0, 0, 0, 2, -1, 0, -1, + 0, 0, 0, -1, -2, -1, -1, -2, + -1, 0, 1, 5, 0, 0, -3, 0, + -1, 3, 0, -1, -5, -2, 2, 0, + 0, -6, -2, 1, -2, 1, 0, -1, + -1, -4, 0, -2, 1, 0, 0, -2, + 0, 0, 0, 1, 1, -3, -2, 0, + -2, -1, -2, -1, -1, 0, -2, 1, + -2, -2, 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -1, -1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -2, 0, 0, -2, + 0, 0, -1, -1, 0, 0, 0, 0, + -1, 0, 0, 0, 0, -1, 0, 0, + 0, 0, 0, -1, 0, 0, 0, 0, + -2, 0, -3, 0, 0, 0, -4, 0, + 1, -3, 3, 0, -1, -6, 0, 0, + -3, -1, 0, -5, -3, -4, 0, 0, + -6, -1, -5, -5, -6, 0, -3, 0, + 1, 9, -2, 0, -3, -1, 0, -1, + -2, -3, -2, -5, -5, -3, -1, 0, + 0, -1, 0, 0, 0, 0, -9, -1, + 4, 3, -3, -5, 0, 0, -4, 0, + -6, -1, -1, 3, -12, -2, 0, 0, + 0, -8, -2, -7, -1, -9, 0, 0, + -9, 0, 8, 0, 0, -1, 0, 0, + 0, 0, -1, -1, -5, -1, 0, -8, + 0, 0, 0, 0, -4, 0, -1, 0, + 0, -4, -6, 0, 0, -1, -2, -4, + -1, 0, -1, 0, 0, 0, 0, -6, + -1, -4, -4, -1, -2, -3, -1, -2, + 0, -3, -1, -4, -2, 0, -2, -2, + -1, -2, 0, 1, 0, -1, -4, 0, + 3, 0, -2, 0, 0, 0, 0, 2, + 0, 1, -3, 5, 0, -1, -1, -2, + 0, 0, 0, 0, 0, 0, -4, 0, + -1, 0, -2, -1, 0, -3, -3, -4, + -1, 0, -3, 1, 5, 0, 0, 0, + 0, 10, 0, 0, 1, 0, 0, -2, + 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -1, -3, 0, 0, 0, 0, 0, -1, + 0, 0, 0, -1, -1, 0, 0, -3, + -1, 0, 0, -3, 0, 2, -1, 0, + 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 2, 3, 1, -1, 0, -4, + -2, 0, 4, -4, -4, -3, -3, 5, + 2, 1, -11, -1, 3, -1, 0, -1, + 1, -1, -4, 0, -1, 1, -2, -1, + -4, -1, 0, 0, 4, 3, 0, -4, + 0, -7, -2, 4, -2, -5, 0, -2, + -4, -4, -1, 5, 1, 0, -2, 0, + -3, 0, 1, 4, -3, -5, -5, -3, + 4, 0, 0, -9, -1, 1, -2, -1, + -3, 0, -3, -5, -2, -2, -1, 0, + 0, -3, -3, -1, 0, 4, 3, -1, + -7, 0, -7, -2, 0, -4, -7, 0, + -4, -2, -4, -4, 3, 0, 0, -2, + 0, -3, -1, 0, -1, -2, 0, 2, + -4, 1, 0, 0, -7, 0, -1, -3, + -2, -1, -4, -3, -4, -3, 0, -4, + -1, -3, -2, -4, -1, 0, 0, 0, + 6, -2, 0, -4, -1, 0, -1, -3, + -3, -3, -4, -5, -2, -3, 3, 0, + -2, 0, -6, -2, 1, 3, -4, -5, + -3, -4, 4, -1, 1, -12, -2, 3, + -3, -2, -5, 0, -4, -5, -2, -1, + -1, -1, -3, -4, 0, 0, 0, 4, + 4, -1, -8, 0, -8, -3, 3, -5, + -9, -3, -4, -5, -6, -4, 3, 0, + 0, 0, 0, -2, 0, 0, 1, -2, + 3, 1, -2, 3, 0, 0, -4, 0, + 0, 0, 0, 0, 0, -1, 0, 0, + 0, 0, 0, 0, -1, 0, 0, 0, + 0, 1, 4, 0, 0, -2, 0, 0, + 0, 0, -1, -1, -2, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 1, 0, + -1, 0, 5, 0, 2, 0, 0, -2, + 0, 3, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 0, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -8, 0, -1, 2, 0, 4, + 0, 0, 13, 2, -3, -3, 1, 1, + -1, 0, -6, 0, 0, 6, -8, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -9, 5, 18, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -2, 0, 0, -2, + -1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, 0, -3, 0, + 0, 0, 0, 0, 1, 17, -3, -1, + 4, 3, -3, 1, 0, 0, 1, 1, + -2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -17, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -4, + 0, 0, 0, -3, 0, 0, 0, 0, + -3, -1, 0, 0, 0, -3, 0, -2, + 0, -6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, 0, -2, 0, -2, 0, + -3, 0, 0, 0, -2, 1, -2, 0, + 0, -3, -1, -3, 0, 0, -3, 0, + -1, 0, -6, 0, -1, 0, 0, -10, + -2, -5, -1, -5, 0, 0, -9, 0, + -3, -1, 0, 0, 0, 0, 0, 0, + 0, 0, -2, -2, -1, -2, 0, 0, + 0, 0, -3, 0, -3, 2, -1, 3, + 0, -1, -3, -1, -2, -2, 0, -2, + -1, -1, 1, -3, 0, 0, 0, 0, + -11, -1, -2, 0, -3, 0, -1, -6, + -1, 0, 0, -1, -1, 0, 0, 0, + 0, 1, 0, -1, -2, -1, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, + 0, -3, 0, -1, 0, 0, 0, -3, + 1, 0, 0, 0, -3, -1, -3, 0, + 0, -4, 0, -1, 0, -6, 0, 0, + 0, 0, -12, 0, -3, -5, -6, 0, + 0, -9, 0, -1, -2, 0, 0, 0, + 0, 0, 0, 0, 0, -1, -2, -1, + -2, 0, 0, 0, 2, -2, 0, 4, + 6, -1, -1, -4, 2, 6, 2, 3, + -3, 2, 5, 2, 4, 3, 3, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 8, 6, -2, -1, 0, -1, + 10, 6, 10, 0, 0, 0, 1, 0, + 0, 5, 0, 0, -2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -1, 0, + 0, 0, 0, 0, 0, 0, 0, 2, + 0, 0, 0, 0, -11, -2, -1, -5, + -6, 0, 0, -9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -1, + 0, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, -11, -2, -1, + -5, -6, 0, 0, -5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -1, 0, 0, 0, -3, 1, 0, -1, + 1, 2, 1, -4, 0, 0, -1, 1, + 0, 1, 0, 0, 0, 0, -3, 0, + -1, -1, -3, 0, -1, -5, 0, 8, + -1, 0, -3, -1, 0, -1, -2, 0, + -1, -4, -3, -2, 0, 0, 0, -2, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, -11, + -2, -1, -5, -6, 0, 0, -9, 0, + 0, 0, 0, 0, 0, 6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -2, 0, -4, -2, -1, 4, -1, -1, + -5, 0, -1, 0, -1, -3, 0, 3, + 0, 1, 0, 1, -3, -5, -2, 0, + -5, -2, -3, -5, -5, 0, -2, -3, + -2, -2, -1, -1, -2, -1, 0, -1, + 0, 2, 0, 2, -1, 0, 4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -1, -1, -1, 0, 0, + -3, 0, -1, 0, -2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, -1, 0, -2, + 0, 0, 0, 0, -1, 0, 0, -2, + -1, 1, 0, -2, -2, -1, 0, -4, + -1, -3, -1, -2, 0, -2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -9, 0, 4, 0, 0, -2, 0, + 0, 0, 0, -2, 0, -1, 0, 0, + -1, 0, 0, -1, 0, -3, 0, 0, + 5, -2, -4, -4, 1, 1, 1, 0, + -4, 1, 2, 1, 4, 1, 4, -1, + -3, 0, 0, -5, 0, 0, -4, -3, + 0, 0, -3, 0, -2, -2, 0, -2, + 0, -2, 0, -1, 2, 0, -1, -4, + -1, 5, 0, 0, -1, 0, -3, 0, + 0, 2, -3, 0, 1, -1, 1, 0, + 0, -4, 0, -1, 0, 0, -1, 1, + -1, 0, 0, 0, -5, -2, -3, 0, + -4, 0, 0, -6, 0, 5, -1, 0, + -2, 0, 1, 0, -1, 0, -1, -4, + 0, -1, 1, 0, 0, 0, 0, -1, + 0, 0, 1, -2, 0, 0, 0, -2, + -1, 0, -2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -8, 0, 3, 0, + 0, -1, 0, 0, 0, 0, 0, 0, + -1, -1, 0, 0, 0, 3, 0, 3, + 0, 0, 0, 0, 0, -8, -7, 0, + 6, 4, 2, -5, 1, 5, 0, 5, + 0, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 +}; + +/*Collect the kern class' data in one place*/ +static const lv_font_fmt_txt_kern_classes_t kern_classes = +{ + .class_pair_values = kern_class_values, + .left_class_mapping = kern_left_class_mapping, + .right_class_mapping = kern_right_class_mapping, + .left_class_cnt = 61, + .right_class_cnt = 49, +}; + +/*-------------------- + * 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_classes, + .kern_scale = 16, + .cmap_num = 2, + .bpp = 4, + .kern_classes = 1, + .bitmap_format = 0 +}; + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +lv_font_t font_2 = { + .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 = 10, /*The maximum line height required by the font*/ + .base_line = 2, /*Baseline measured from the bottom of the line*/ +#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) + .subpx = LV_FONT_SUBPX_NONE, +#endif + .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +}; + +#endif /*#if FONT_2*/ diff --git a/src/libs/lvgl/tests/lv_test_fonts/font_3.c b/src/libs/lvgl/tests/lv_test_fonts/font_3.c new file mode 100644 index 00000000..d028e8ec --- /dev/null +++ b/src/libs/lvgl/tests/lv_test_fonts/font_3.c @@ -0,0 +1,946 @@ +#include "../../lvgl.h" + +/******************************************************************************* + * Size: 20 px + * Bpp: 4 + * Opts: --bpp 4 --size 20 --font ../RobotoMono-Regular.ttf -r 0x20-0x7f --format lvgl -o ..\generated_fonts/font_3.c + ******************************************************************************/ + +#ifndef FONT_3 +#define FONT_3 1 +#endif + +#if FONT_3 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = { + /* U+20 " " */ + + /* U+21 "!" */ + 0x1f, 0xb0, 0xf, 0xfe, 0x69, 0x10, 0x76, 0x40, + 0x30, 0x81, 0x76, 0x98, 0xb0, + + /* U+22 "\"" */ + 0x8e, 0x0, 0x7b, 0x0, 0x7c, 0x60, 0x11, 0x80, + 0x80, 0x43, 0xca, 0x0, 0x37, + + /* U+23 "#" */ + 0x0, 0xc5, 0xe6, 0x7, 0xe6, 0x1, 0xc8, 0x6, + 0xa, 0x6, 0x1, 0xde, 0x40, 0xf, 0x30, 0xf, + 0x2a, 0x0, 0x15, 0x40, 0x15, 0x7f, 0x8d, 0xbf, + 0xc6, 0xde, 0xe1, 0xd2, 0xe0, 0xf2, 0xe0, 0xf2, + 0x80, 0x8d, 0x81, 0x2d, 0xa1, 0x2c, 0x60, 0x11, + 0x88, 0x80, 0x84, 0x40, 0x1d, 0xc4, 0x0, 0xd2, + 0x0, 0xc2, 0x25, 0x61, 0x13, 0x30, 0x40, 0xd, + 0xdc, 0x35, 0xee, 0x1a, 0xf6, 0x3, 0xdd, 0x4, + 0x5c, 0x84, 0xdf, 0x80, 0xa0, 0x1, 0x90, 0xc1, + 0x90, 0xc0, 0x2d, 0x21, 0xd, 0x20, 0xf, 0x1b, + 0x80, 0x11, 0x0, 0x18, + + /* U+24 "$" */ + 0x0, 0xcb, 0xe2, 0x1, 0xff, 0xc4, 0x78, 0xb, + 0x40, 0xd, 0xb0, 0x64, 0xb6, 0xe0, 0x8, 0x27, + 0xed, 0xd0, 0xc0, 0x82, 0x4, 0x0, 0xa, 0x41, + 0xc0, 0x40, 0x38, 0xc8, 0x0, 0xe0, 0xe0, 0x12, + 0x6b, 0x5, 0x84, 0x5a, 0x0, 0x70, 0xe9, 0xa5, + 0xea, 0x80, 0x62, 0xcc, 0x29, 0x54, 0x80, 0x71, + 0xd6, 0x93, 0x21, 0x29, 0x0, 0x45, 0x21, 0xaf, + 0x4a, 0x1, 0x9c, 0xd, 0x2, 0x44, 0x2, 0xa0, + 0xd1, 0x71, 0xf8, 0x86, 0x31, 0x38, 0x44, 0x9b, + 0xb8, 0x97, 0x0, 0x26, 0xd6, 0x1e, 0xa1, 0x0, + 0xe1, 0x0, 0xe0, + + /* U+25 "%" */ + 0x7, 0xee, 0x40, 0x7, 0xc9, 0x10, 0xb7, 0x50, + 0xf, 0x61, 0x32, 0xa7, 0x80, 0xf1, 0x80, 0x42, + 0x1, 0xd2, 0x66, 0x0, 0x69, 0x98, 0x97, 0x45, + 0xe0, 0x2, 0x55, 0x66, 0xab, 0xc1, 0x28, 0x6, + 0xae, 0xe5, 0x8b, 0x48, 0x7, 0x84, 0x41, 0x6, + 0x80, 0x1f, 0x89, 0xa0, 0x3, 0xfa, 0x11, 0x13, + 0xdc, 0x70, 0xc, 0x6b, 0xc, 0xca, 0x88, 0x20, + 0x5, 0x8, 0x78, 0xa8, 0xc5, 0x80, 0x13, 0x40, + 0x7, 0xfb, 0x4c, 0x31, 0x51, 0x8b, 0x0, 0x3c, + 0xcc, 0xa8, 0x82, 0x0, + + /* U+26 "&" */ + 0x0, 0x26, 0x7e, 0xb0, 0x7, 0x15, 0x9b, 0xc, + 0xa8, 0x6, 0xa0, 0xa9, 0xc1, 0xe0, 0xc, 0x40, + 0xe0, 0x13, 0x80, 0x63, 0x7, 0x6, 0x1b, 0x0, + 0xd4, 0x12, 0xf2, 0xae, 0x1, 0x8d, 0x8e, 0x1a, + 0x80, 0x38, 0x90, 0x1, 0x40, 0x1c, 0x38, 0x50, + 0x1a, 0x20, 0xbc, 0x70, 0x32, 0xf2, 0x34, 0x1a, + 0x22, 0x40, 0x60, 0x65, 0x47, 0x51, 0x23, 0x10, + 0xa, 0x8a, 0xa, 0x41, 0x5, 0x0, 0x2a, 0x0, + 0x30, 0x40, 0x5d, 0x45, 0xc0, 0x84, 0x1, 0x6a, + 0xa3, 0xb4, 0x71, 0xb2, 0x0, + + /* U+27 "'" */ + 0x2f, 0x50, 0xe, 0x10, 0x3, 0x81, 0x88, + + /* U+28 "(" */ + 0x0, 0xe1, 0x0, 0xd9, 0x20, 0x15, 0x8c, 0x80, + 0x1d, 0x38, 0x40, 0x10, 0xa6, 0x0, 0x70, 0x90, + 0xa, 0xc4, 0xc0, 0x2, 0x68, 0x1, 0x28, 0x68, + 0x4, 0x40, 0x20, 0x10, 0x81, 0x80, 0x70, 0x80, + 0x42, 0x2, 0x1, 0x18, 0x18, 0x4, 0xe1, 0xe0, + 0x11, 0xa, 0x80, 0x67, 0x31, 0x0, 0xac, 0x24, + 0x2, 0x25, 0x60, 0xd, 0x61, 0x40, 0x10, 0xea, + 0xb8, 0x4, 0x7a, 0x80, + + /* U+29 ")" */ + 0x20, 0xe, 0xe9, 0x0, 0xde, 0xd0, 0x1, 0x1c, + 0x39, 0x80, 0x4e, 0x5e, 0x1, 0xa8, 0xcc, 0x1, + 0x28, 0x50, 0x4, 0x42, 0x80, 0x19, 0x48, 0x40, + 0x21, 0x2, 0x0, 0x8c, 0x1c, 0x2, 0x10, 0xe, + 0x10, 0x70, 0x8, 0xc0, 0x80, 0x27, 0x11, 0x0, + 0x44, 0x80, 0x12, 0x87, 0x80, 0x5c, 0x2a, 0x0, + 0x34, 0x80, 0xb, 0x8d, 0x80, 0x14, 0x1a, 0x1, + 0x7e, 0x8, 0x4, + + /* U+2A "*" */ + 0x0, 0xd3, 0xe2, 0x1, 0xf0, 0x80, 0x80, 0x61, + 0x0, 0x78, 0x6, 0x12, 0xeb, 0x41, 0x10, 0x36, + 0xc0, 0xaa, 0xae, 0x47, 0xe4, 0xc0, 0xeb, 0xb0, + 0x0, 0xdb, 0xd2, 0x1, 0x50, 0xab, 0x98, 0x6, + 0x66, 0x45, 0x8d, 0x0, 0x43, 0x24, 0xc3, 0x8, + 0xe0, 0x1, 0xbe, 0x0, 0x3b, 0xc0, + + /* U+2B "+" */ + 0x0, 0xd1, 0x0, 0xf, 0xca, 0xc0, 0x1f, 0xfd, + 0x6d, 0xff, 0x88, 0x7f, 0xee, 0x62, 0x28, 0x0, + 0x45, 0xaf, 0x76, 0x21, 0xdd, 0xb0, 0x3, 0xff, + 0xa4, + + /* U+2C "," */ + 0xa, 0xf4, 0x1, 0x0, 0x9c, 0x18, 0x8, 0x49, + 0x46, 0x1, 0x69, 0x80, + + /* U+2D "-" */ + 0x78, 0x8f, 0x25, 0x3b, 0xfb, 0x40, + + /* U+2E "." */ + 0x8, 0xc3, 0x17, 0x39, 0x14, 0xf, + + /* U+2F "/" */ + 0x0, 0xf6, 0x68, 0x7, 0x88, 0xe8, 0x3, 0xd4, + 0xc, 0x1, 0xe6, 0x41, 0x0, 0xe4, 0x1e, 0x0, + 0xf7, 0x2, 0x80, 0x79, 0x58, 0x3, 0xcc, 0x14, + 0x1, 0xed, 0x23, 0x0, 0xe1, 0x4a, 0x0, 0xf3, + 0x2, 0x80, 0x7a, 0x90, 0x80, 0x38, 0xcb, 0x40, + 0x3d, 0x40, 0xc0, 0x1e, 0x65, 0x0, 0xf2, 0x87, + 0x0, 0x78, + + /* U+30 "0" */ + 0x0, 0x25, 0xff, 0xb1, 0x0, 0x25, 0xb5, 0x66, + 0x15, 0xa8, 0x2, 0xc7, 0xe6, 0x5e, 0x34, 0x8, + 0x32, 0x20, 0x1, 0x90, 0x53, 0x2, 0x0, 0xc2, + 0x1b, 0xe0, 0xc0, 0x14, 0x48, 0x8, 0x80, 0x21, + 0xb7, 0x50, 0xe, 0x3c, 0x4b, 0x80, 0xd, 0x58, + 0x1a, 0x80, 0x10, 0x83, 0x2e, 0x90, 0x8, 0x3, + 0xc1, 0xe8, 0x3, 0x84, 0xc3, 0xc0, 0x32, 0x86, + 0xa0, 0xc8, 0x80, 0x56, 0xa, 0x16, 0x3f, 0x32, + 0xe2, 0x90, 0x2, 0xda, 0xb3, 0xa, 0xd8, 0x0, + + /* U+31 "1" */ + 0x0, 0xc4, 0x80, 0x6, 0xcd, 0xc9, 0xf9, 0x30, + 0x3, 0x25, 0xd8, 0x1, 0xd6, 0x8e, 0x0, 0x10, + 0xf, 0xff, 0x78, + + /* U+32 "2" */ + 0x0, 0xc, 0xf7, 0xf4, 0x0, 0x62, 0xf6, 0x56, + 0x27, 0xd0, 0xa, 0x46, 0xed, 0x38, 0xa4, 0xe0, + 0x4, 0x34, 0x0, 0xa0, 0x30, 0x5, 0xe4, 0x3, + 0x18, 0x4, 0x30, 0xa0, 0x19, 0x3, 0x0, 0x3f, + 0x40, 0x30, 0x7, 0xd2, 0x52, 0x20, 0x1e, 0x76, + 0x56, 0x0, 0xf2, 0x41, 0xd0, 0x7, 0x8e, 0xcb, + 0x40, 0x3c, 0x3a, 0x3e, 0x20, 0x1e, 0xc1, 0xd2, + 0x0, 0xf5, 0x91, 0xa3, 0xbf, 0x18, 0x28, 0x1c, + 0x47, 0x94, + + /* U+33 "3" */ + 0x0, 0xc, 0xf7, 0xf4, 0x0, 0x43, 0xec, 0xae, + 0xaf, 0xa0, 0xb, 0x1a, 0xb8, 0xb7, 0x26, 0x4, + 0x15, 0x0, 0xa8, 0x30, 0x3b, 0x80, 0x1f, 0xfc, + 0x2b, 0xf, 0x0, 0x85, 0xe7, 0x59, 0xd4, 0x2, + 0x38, 0x62, 0x1c, 0x0, 0xc5, 0xfe, 0xb3, 0xb4, + 0x0, 0xf2, 0x78, 0x78, 0x8, 0x80, 0x31, 0xa, + 0x87, 0x60, 0x7, 0x9, 0x81, 0x92, 0x0, 0x4c, + 0x8, 0x1c, 0x17, 0x68, 0xb9, 0x28, 0x2, 0xe6, + 0x57, 0x57, 0xd1, + + /* U+34 "4" */ + 0x0, 0xf1, 0xff, 0x80, 0x3f, 0x78, 0x7, 0xf3, + 0x18, 0x7, 0xe1, 0x94, 0x30, 0xf, 0xac, 0x28, + 0x3, 0xe4, 0x58, 0x10, 0xf, 0xa4, 0x9c, 0x3, + 0xe7, 0x29, 0x0, 0xf8, 0xa1, 0x50, 0x3, 0xe9, + 0xb, 0x0, 0xf8, 0xd0, 0x3b, 0xfe, 0x30, 0xff, + 0xc, 0x47, 0x84, 0x1e, 0x9, 0xdf, 0xc4, 0x10, + 0xe0, 0x1f, 0xfc, 0xa0, + + /* U+35 "5" */ + 0x0, 0x7f, 0xfc, 0xa0, 0x20, 0x26, 0x7c, 0x20, + 0x60, 0xd9, 0x9c, 0x80, 0xc1, 0xc0, 0x1f, 0x8, + 0x18, 0x7, 0xc4, 0x7, 0x15, 0x6, 0x1, 0x78, + 0x4b, 0xab, 0xe3, 0x80, 0x38, 0xa7, 0xb9, 0x21, + 0x4, 0xd, 0xac, 0x22, 0x68, 0xa, 0x0, 0xf9, + 0x40, 0xc0, 0x3e, 0x30, 0x0, 0xfd, 0x80, 0x62, + 0x2, 0x13, 0x43, 0x0, 0xa0, 0x30, 0x38, 0x32, + 0xa7, 0x51, 0xa, 0x5, 0xaa, 0x8c, 0xf, 0x60, + + /* U+36 "6" */ + 0x0, 0x86, 0x37, 0xd4, 0x3, 0x27, 0x39, 0xa3, + 0x0, 0x45, 0x61, 0x5d, 0x66, 0x1, 0x48, 0x52, + 0x80, 0x70, 0xa1, 0xa8, 0x7, 0x90, 0x2c, 0x59, + 0xd4, 0x2, 0x20, 0xde, 0x98, 0xad, 0x10, 0xe0, + 0x58, 0xee, 0x31, 0x50, 0x5, 0xe, 0x22, 0x92, + 0x41, 0x0, 0x20, 0x6, 0x50, 0x51, 0x6, 0x0, + 0xde, 0x3, 0x81, 0xa0, 0x1b, 0x41, 0x90, 0x9c, + 0x80, 0x4, 0xa2, 0x61, 0xc1, 0xb5, 0x4d, 0xa, + 0x0, 0x1e, 0x22, 0xa9, 0x31, 0x0, + + /* U+37 "7" */ + 0xef, 0xff, 0xd6, 0xec, 0xde, 0x40, 0x39, 0x9f, + 0x88, 0x24, 0x3, 0xc2, 0xca, 0x20, 0x1e, 0x60, + 0x90, 0xf, 0xa4, 0x8c, 0x3, 0xca, 0x36, 0x1, + 0xf4, 0x8b, 0x0, 0x78, 0xcc, 0xc0, 0x1f, 0x48, + 0x50, 0x7, 0x85, 0x50, 0x80, 0x3d, 0x21, 0xe0, + 0x1f, 0x31, 0x20, 0x7, 0x98, 0x68, 0x3, 0xeb, + 0x6, 0x0, 0xe0, + + /* U+38 "8" */ + 0x0, 0x15, 0x77, 0xea, 0x80, 0x43, 0xaa, 0x8c, + 0x15, 0x20, 0xb, 0xa, 0xa4, 0xe9, 0x31, 0x2, + 0x2, 0x80, 0x54, 0x8, 0x6, 0x1, 0xf1, 0x82, + 0x2, 0x80, 0x54, 0x8, 0x12, 0x75, 0x49, 0xd2, + 0xa1, 0x0, 0x50, 0x2b, 0x11, 0xa0, 0x1, 0xe5, + 0x77, 0xe8, 0xb0, 0x42, 0xa, 0x88, 0x16, 0xc9, + 0x8c, 0x10, 0x3, 0x20, 0x60, 0x0, 0xc0, 0x31, + 0x80, 0xc, 0x54, 0x80, 0x2b, 0xd, 0xa, 0xd, + 0xa8, 0xc6, 0x36, 0x4, 0xc4, 0x57, 0x17, 0xc0, + + /* U+39 "9" */ + 0x0, 0x26, 0x7f, 0x51, 0x0, 0x4d, 0x64, 0xca, + 0xac, 0x10, 0x4, 0x8f, 0xcd, 0xc8, 0xd8, 0x28, + 0x48, 0x80, 0x18, 0x94, 0x34, 0xc, 0x3, 0x28, + 0x27, 0x80, 0x7b, 0x80, 0x48, 0xc, 0x3, 0x70, + 0x1a, 0x4, 0x88, 0x0, 0xdc, 0xc, 0x5c, 0x7e, + 0x6b, 0x4, 0x4, 0x22, 0x4d, 0x9e, 0x1c, 0x18, + 0x0, 0xdb, 0xfa, 0xea, 0x24, 0x1, 0xe3, 0x33, + 0x80, 0x79, 0x34, 0x60, 0x2, 0x5b, 0xeb, 0xd, + 0x10, 0xb, 0x54, 0x9f, 0xcc, 0x0, + + /* U+3A ":" */ + 0x5f, 0xb0, 0xf0, 0x42, 0x93, 0x62, 0x3c, 0x90, + 0xf, 0xfe, 0x29, 0xe4, 0x4, 0x9b, 0x97, 0x81, + 0x90, + + /* U+3B ";" */ + 0x6, 0xfa, 0x0, 0x68, 0x28, 0x3, 0xcd, 0xc0, + 0x9, 0x90, 0x1, 0xff, 0xcf, 0x4a, 0x60, 0x1, + 0x2f, 0x0, 0x4, 0x3, 0x70, 0x60, 0x1, 0x9, + 0x0, 0xf, 0xc0, 0x0, + + /* U+3C "<" */ + 0x0, 0xf9, 0x2c, 0x3, 0x9b, 0x6d, 0x40, 0x2, + 0xfd, 0x26, 0xd8, 0x33, 0xd0, 0x55, 0xd2, 0x48, + 0xc3, 0x78, 0xa0, 0x12, 0x28, 0xdd, 0x20, 0x4, + 0x35, 0xac, 0xb7, 0xae, 0x20, 0x2, 0x9e, 0x83, + 0x8f, 0x0, 0xc2, 0xfd, 0x24, 0x1, 0xf3, 0x60, + + /* U+3D "=" */ + 0x39, 0x9f, 0xc6, 0xec, 0xdf, 0x95, 0x3f, 0xff, + 0x30, 0x7, 0xf8, 0xa6, 0x7f, 0x1b, 0x37, 0xf2, + 0x80, + + /* U+3E ">" */ + 0x3a, 0x30, 0xf, 0x9d, 0x73, 0xa, 0x1, 0xc9, + 0x8c, 0x75, 0xae, 0x1, 0x8e, 0x7e, 0x9a, 0x3e, + 0x44, 0x3, 0x2d, 0xe1, 0x32, 0x0, 0x65, 0xbc, + 0x25, 0x40, 0x28, 0xea, 0x57, 0xea, 0x13, 0xd7, + 0x39, 0xe8, 0x10, 0x3, 0xa5, 0xeb, 0x0, 0x72, + 0x5a, 0x0, 0x7c, + + /* U+3F "?" */ + 0x0, 0x1d, 0xf7, 0xea, 0x80, 0x4b, 0x88, 0xaa, + 0x3a, 0x80, 0x5, 0x86, 0xdd, 0x78, 0xb8, 0x89, + 0xe0, 0x80, 0x2, 0xe0, 0x43, 0x2e, 0x1, 0x8c, + 0x4, 0x3, 0xc4, 0xa4, 0x40, 0xf, 0x70, 0x48, + 0x7, 0xb0, 0xe1, 0x0, 0x3a, 0x4d, 0xdc, 0x1, + 0xe7, 0x18, 0x0, 0xf8, 0x9c, 0x3, 0xf6, 0x48, + 0x7, 0xe1, 0x10, 0x7, 0xc3, 0xde, 0x1, 0xf8, + 0x48, 0x3, 0x0, + + /* U+40 "@" */ + 0x0, 0xd1, 0xbf, 0xae, 0x1, 0xc3, 0xab, 0x76, + 0xa9, 0xb0, 0xd, 0x4d, 0xac, 0x8f, 0xea, 0xc0, + 0x4, 0x5b, 0x9, 0xfd, 0x3b, 0xb0, 0x3, 0xe4, + 0x25, 0x2d, 0x95, 0x44, 0x20, 0x8a, 0x2d, 0xc8, + 0x2, 0x4, 0x43, 0x2, 0x41, 0x30, 0x72, 0x1, + 0x77, 0x8, 0x12, 0x80, 0x5, 0xc0, 0x21, 0x30, + 0xe2, 0x0, 0x10, 0x80, 0xb0, 0x98, 0x0, 0xc0, + 0x40, 0xc4, 0xc9, 0x44, 0x5e, 0x88, 0xa0, 0x29, + 0x40, 0x12, 0x67, 0xb, 0x26, 0xc5, 0xb0, 0x5, + 0xc9, 0xf7, 0x26, 0x5d, 0xa2, 0x0, 0x64, 0xd8, + 0x44, 0x3a, 0x80, 0x75, 0x4a, 0x55, 0xd9, 0xc0, + 0x20, + + /* U+41 "A" */ + 0x0, 0xec, 0xf0, 0xf, 0xe1, 0x30, 0x50, 0xf, + 0xce, 0x0, 0xf0, 0xf, 0xda, 0x8, 0x80, 0xf, + 0xc8, 0xba, 0x26, 0x1, 0xe4, 0xc, 0x70, 0xb0, + 0xf, 0x68, 0x38, 0x92, 0x80, 0x79, 0xcc, 0x41, + 0x48, 0x80, 0x18, 0xc6, 0xc0, 0x16, 0xa, 0x1, + 0xac, 0x32, 0x66, 0xc, 0x0, 0xca, 0x8, 0xcc, + 0x50, 0x41, 0x0, 0x11, 0x1b, 0xff, 0x50, 0x20, + 0x1, 0x43, 0x40, 0x32, 0x7, 0x80, 0x30, 0x10, + 0x3, 0x9, 0xa0, 0xa, 0x20, 0x3, 0xc8, 0x28, + + /* U+42 "B" */ + 0x4f, 0xfd, 0xd8, 0xa0, 0x18, 0xd9, 0x88, 0x55, + 0x40, 0xa, 0xe6, 0x55, 0xc6, 0xa8, 0x1, 0xf4, + 0x86, 0x0, 0x7c, 0x61, 0xe0, 0x1e, 0x1b, 0x5, + 0x0, 0x5c, 0x42, 0x7c, 0xa8, 0x80, 0x6, 0xee, + 0x61, 0x36, 0x0, 0xa3, 0xfe, 0xb1, 0xc3, 0x0, + 0xf2, 0x70, 0x40, 0x7, 0xc6, 0xa, 0x1, 0xf0, + 0x81, 0x80, 0x7d, 0x0, 0xa0, 0xb, 0x88, 0x4e, + 0xb1, 0xc0, 0x0, 0xdd, 0xcc, 0x11, 0x80, + + /* U+43 "C" */ + 0x0, 0x15, 0xff, 0xb1, 0x80, 0x24, 0xd5, 0x53, + 0x14, 0xc8, 0x1, 0x43, 0xf5, 0x3c, 0x6c, 0x6c, + 0x30, 0x20, 0x17, 0x84, 0xe8, 0x38, 0x6, 0x35, + 0x36, 0x11, 0x0, 0x75, 0x49, 0x18, 0x7, 0xff, + 0x40, 0x8c, 0x3, 0xf3, 0x8, 0x80, 0x3a, 0x63, + 0x41, 0xc0, 0x31, 0xb1, 0x30, 0xc0, 0x80, 0x50, + 0x12, 0x14, 0x3f, 0x32, 0xd4, 0x73, 0x4, 0xc5, + 0x76, 0x19, 0x80, + + /* U+44 "D" */ + 0x7f, 0xfb, 0xb1, 0x80, 0x3c, 0xae, 0xe1, 0x9d, + 0x10, 0xd, 0xf1, 0x3b, 0x25, 0x80, 0x1f, 0x99, + 0x84, 0xc0, 0x1f, 0xa0, 0x34, 0x3, 0xf0, 0x92, + 0x0, 0x7f, 0x8, 0x7, 0xf9, 0xc0, 0x40, 0x3f, + 0x38, 0x8, 0x7, 0xe1, 0x0, 0xfe, 0x12, 0x40, + 0xf, 0xd0, 0x1a, 0x1, 0xf3, 0xb1, 0xb0, 0x5, + 0xf1, 0x3b, 0x5, 0xa0, 0x19, 0x5d, 0xc3, 0x3a, + 0x20, 0x0, + + /* U+45 "E" */ + 0x3f, 0xff, 0xcc, 0x0, 0x26, 0x6f, 0x28, 0x1, + 0x26, 0x7c, 0x60, 0x1f, 0xfd, 0xe6, 0xff, 0xe8, + 0x0, 0x89, 0xdf, 0xb0, 0x2, 0x48, 0x8e, 0x40, + 0xf, 0xfe, 0xaa, 0x44, 0x79, 0x0, 0x4, 0xef, + 0xec, + + /* U+46 "F" */ + 0x2f, 0xff, 0xd2, 0x0, 0x26, 0x6f, 0x60, 0x1, + 0xe6, 0x7c, 0xa0, 0x1f, 0xfd, 0xe5, 0xff, 0xe9, + 0x0, 0x89, 0xdf, 0xb0, 0x2, 0x78, 0x8e, 0x50, + 0xf, 0xff, 0x38, + + /* U+47 "G" */ + 0x0, 0x8a, 0xff, 0xd8, 0xa0, 0x19, 0x35, 0x10, + 0xa5, 0x52, 0x1, 0x50, 0xed, 0xd7, 0x1b, 0x20, + 0x38, 0xc1, 0x0, 0x5e, 0x1e, 0x18, 0xe, 0x1, + 0x8e, 0x78, 0x14, 0x44, 0x1, 0xcc, 0xa0, 0x24, + 0x1, 0xff, 0xc2, 0x68, 0x89, 0xc0, 0x3d, 0xae, + 0xf4, 0x80, 0x90, 0x5, 0x7f, 0xe2, 0x0, 0x28, + 0x88, 0x3, 0xf6, 0x84, 0x80, 0x7e, 0x62, 0x74, + 0x0, 0x88, 0x80, 0x17, 0x8d, 0xda, 0x6f, 0x42, + 0x80, 0x5, 0xec, 0xac, 0xc7, 0xd4, + + /* U+48 "H" */ + 0x9f, 0x10, 0xc, 0x3f, 0x20, 0x1f, 0xff, 0x2e, + 0xff, 0xdc, 0x1, 0x99, 0xdf, 0x30, 0x6, 0x88, + 0xf0, 0x7, 0xff, 0xa0, + + /* U+49 "I" */ + 0x4f, 0xff, 0xc8, 0xcd, 0x80, 0xc, 0xd8, 0xa6, + 0x60, 0x19, 0x98, 0x80, 0x3f, 0xff, 0xe0, 0x1f, + 0xfc, 0xd2, 0x99, 0x80, 0x66, 0x62, 0x66, 0xc0, + 0x6, 0x6c, + + /* U+4A "J" */ + 0x0, 0xfd, 0x3e, 0x60, 0x1f, 0xff, 0xf0, 0xf, + 0xfe, 0x6b, 0xb0, 0x7, 0x18, 0x5, 0x52, 0x1, + 0xce, 0x6, 0x14, 0x12, 0x1, 0x39, 0x28, 0x1, + 0xcd, 0xb6, 0x72, 0xa, 0xc0, 0x2c, 0x80, 0x62, + 0x6c, 0x10, + + /* U+4B "K" */ + 0x4f, 0x80, 0xc, 0x9f, 0xa0, 0x1f, 0x15, 0x7, + 0x80, 0x7d, 0xc3, 0x44, 0x1, 0xe9, 0x36, 0x50, + 0xf, 0x2b, 0x14, 0x80, 0x78, 0xa8, 0x3c, 0x3, + 0xc3, 0xc1, 0x4, 0x1, 0xe6, 0x30, 0xa0, 0xf, + 0xc8, 0xa5, 0x0, 0x1e, 0x2a, 0xb1, 0x72, 0x0, + 0xe5, 0x11, 0x40, 0x70, 0x7, 0xe6, 0x33, 0x30, + 0x7, 0xee, 0x8, 0x10, 0xf, 0x89, 0xc6, 0xc0, + 0x3f, 0x41, 0x2a, 0x0, + + /* U+4C "L" */ + 0xf, 0xb0, 0xf, 0xff, 0xf8, 0x7, 0xff, 0xa9, + 0x62, 0x3c, 0xc0, 0x1, 0x77, 0xf6, 0x0, + + /* U+4D "M" */ + 0x8f, 0xd0, 0xd, 0x5f, 0x60, 0x2, 0x20, 0x4, + 0xa0, 0x1c, 0xa0, 0x5, 0x0, 0xe2, 0xb0, 0x7, + 0x88, 0x80, 0x24, 0x31, 0x5, 0x60, 0xd, 0xa0, + 0xea, 0x16, 0x1, 0x98, 0xb7, 0xc4, 0xc4, 0x3, + 0x2a, 0x2b, 0x80, 0x7a, 0xc0, 0x1a, 0x1, 0xc2, + 0x62, 0x24, 0x0, 0xf9, 0x98, 0x1, 0xfa, 0x20, + 0x1, 0xff, 0xd6, + + /* U+4E "N" */ + 0x9f, 0x70, 0xc, 0x7f, 0x20, 0x9, 0x0, 0xfe, + 0x17, 0x0, 0xfe, 0x90, 0xf, 0xca, 0x2e, 0x1, + 0xf7, 0xc, 0x80, 0x7c, 0xf0, 0x2c, 0x1, 0xf3, + 0xc, 0x0, 0x7e, 0x81, 0x60, 0xf, 0x98, 0x61, + 0xc0, 0x3e, 0x91, 0xe0, 0xf, 0x9c, 0x54, 0x3, + 0xf4, 0x80, 0x7f, 0x38, 0x80, 0x7f, 0x48, 0x0, + + /* U+4F "O" */ + 0x0, 0x1d, 0xff, 0xac, 0x80, 0x24, 0xc4, 0x33, + 0x26, 0x98, 0x2, 0x87, 0x73, 0x20, 0xd0, 0x61, + 0x92, 0x0, 0x1c, 0xb, 0x60, 0x30, 0x6, 0x60, + 0xc7, 0x11, 0x0, 0x61, 0x13, 0x91, 0x80, 0x78, + 0xcc, 0x2, 0x1, 0xf0, 0x80, 0x80, 0x7c, 0x24, + 0x60, 0x1e, 0x33, 0x38, 0x88, 0x3, 0x8, 0x9f, + 0x1, 0x80, 0x33, 0x6, 0x30, 0xc1, 0x80, 0xa, + 0x45, 0x82, 0x83, 0x2e, 0xda, 0x34, 0x0, 0x4d, + 0x44, 0xd8, 0x80, + + /* U+50 "P" */ + 0x2f, 0xfe, 0xe9, 0x10, 0xc, 0x4e, 0xf2, 0xb7, + 0x90, 0x4, 0xf1, 0x15, 0xc8, 0xc8, 0x7, 0xe6, + 0x24, 0x10, 0xf, 0xce, 0x6, 0x1, 0xf9, 0x80, + 0xc0, 0x3e, 0x53, 0x41, 0x0, 0x3c, 0x45, 0x74, + 0x32, 0x1, 0x13, 0xbc, 0xad, 0xe4, 0x1, 0x2f, + 0xfd, 0xd2, 0x20, 0x1f, 0xfe, 0xd0, + + /* U+51 "Q" */ + 0x0, 0x8e, 0xff, 0xd6, 0x60, 0x1c, 0x98, 0x86, + 0x64, 0xc4, 0x0, 0x86, 0xc7, 0x73, 0x1a, 0x36, + 0x20, 0x6, 0x8, 0x20, 0x1, 0x58, 0x30, 0x2, + 0xc1, 0x80, 0x32, 0x85, 0x80, 0xc, 0x80, 0x3c, + 0x46, 0x1, 0x30, 0x7, 0x98, 0x0, 0x20, 0x1f, + 0xe1, 0x10, 0x7, 0xf8, 0x40, 0xc, 0x1, 0xe6, + 0x0, 0x8c, 0x80, 0x3c, 0x46, 0x0, 0xb0, 0x50, + 0xc, 0xa1, 0x60, 0x6, 0xb, 0x20, 0x1, 0x58, + 0x30, 0x0, 0x6c, 0x76, 0xed, 0xa3, 0x42, 0x1, + 0x26, 0x22, 0x42, 0x1a, 0x1, 0xc7, 0x7f, 0xf1, + 0xbd, 0x0, 0x7e, 0x1c, 0x47, 0x10, 0xf, 0xeb, + 0xd1, + + /* U+52 "R" */ + 0x3f, 0xfe, 0xc6, 0x0, 0xe3, 0x77, 0x31, 0x4d, + 0x0, 0x64, 0x88, 0x4f, 0x1a, 0xa8, 0x3, 0xf7, + 0x87, 0x80, 0x7e, 0x20, 0x10, 0xf, 0xc4, 0x2, + 0x1, 0xfb, 0xc3, 0x80, 0x24, 0x88, 0x4f, 0x1b, + 0x20, 0x4, 0x6e, 0xe6, 0x19, 0x90, 0x6, 0x7f, + 0xf5, 0x7, 0x0, 0x7e, 0x51, 0x71, 0x0, 0xfd, + 0x0, 0xc0, 0x1f, 0x98, 0x64, 0x3, 0xfa, 0x45, + 0xc0, 0x3f, 0x30, 0x48, 0x0, + + /* U+53 "S" */ + 0x0, 0x1d, 0xf7, 0xe2, 0x80, 0x65, 0xc4, 0x55, + 0x15, 0x58, 0x0, 0x68, 0x76, 0xeb, 0x91, 0xe, + 0x8, 0xc, 0x40, 0x14, 0x85, 0x0, 0x42, 0x1, + 0x8a, 0x6c, 0x10, 0x19, 0x40, 0x33, 0x30, 0x6, + 0xc2, 0xb1, 0x84, 0x3, 0x93, 0x50, 0xe7, 0xa0, + 0x3, 0x8a, 0xfa, 0x5, 0xf4, 0x3, 0xc2, 0xfc, + 0xa5, 0x40, 0xac, 0x1, 0xd4, 0xa, 0x1d, 0x28, + 0x1, 0xfb, 0xc2, 0x44, 0x2, 0x70, 0x40, 0x47, + 0x2e, 0xa9, 0xc8, 0x19, 0x0, 0x45, 0xa2, 0x18, + 0x63, 0xc8, 0x0, + + /* U+54 "T" */ + 0x3f, 0xff, 0xf2, 0xb, 0x36, 0x0, 0x33, 0x71, + 0x4c, 0xe2, 0x19, 0x9c, 0x40, 0x1f, 0xff, 0xf0, + 0xf, 0xff, 0xc8, + + /* U+55 "U" */ + 0xaf, 0x10, 0xc, 0x5f, 0x20, 0x1f, 0xfc, 0x73, + 0x0, 0xff, 0xef, 0x18, 0x7, 0xff, 0x3c, 0xc0, + 0x40, 0x30, 0x81, 0xf8, 0x20, 0x6, 0x40, 0xf7, + 0x9, 0x20, 0x1, 0x48, 0x38, 0xd0, 0xed, 0x53, + 0x46, 0x84, 0x17, 0x11, 0x54, 0x98, 0xa0, + + /* U+56 "V" */ + 0x2f, 0xc0, 0xf, 0x6f, 0x89, 0x10, 0xc0, 0x38, + 0x48, 0xc4, 0x10, 0x14, 0x3, 0x38, 0x58, 0x3, + 0x43, 0x0, 0x36, 0x2, 0x0, 0x10, 0x1c, 0x3, + 0x20, 0x98, 0x4, 0xa2, 0x40, 0x3, 0x17, 0x0, + 0xde, 0x8, 0x0, 0xb0, 0xd0, 0xc, 0x81, 0xa0, + 0x4, 0x4, 0x0, 0xc2, 0x68, 0x2, 0x68, 0x1, + 0xeb, 0x4, 0x40, 0x68, 0x7, 0x94, 0x33, 0xc1, + 0xc0, 0x3c, 0x44, 0x54, 0x31, 0x0, 0xf9, 0x8, + 0x50, 0x3, 0xf6, 0x80, 0x2c, 0x3, 0xf2, 0x0, + 0x98, 0x6, + + /* U+57 "W" */ + 0x3f, 0x70, 0x5, 0xf8, 0x0, 0xfd, 0xc8, 0x38, + 0x0, 0xa0, 0x40, 0xc0, 0x42, 0x6, 0x2, 0x20, + 0x70, 0x30, 0x10, 0x16, 0x2, 0x0, 0x68, 0x70, + 0x30, 0x11, 0x1, 0x40, 0xc8, 0x4, 0x8, 0x18, + 0x43, 0xc9, 0x5c, 0x8, 0x40, 0x4, 0x2, 0x4f, + 0xe4, 0xc, 0x40, 0xe, 0x3, 0x52, 0x20, 0x11, + 0xb0, 0x0, 0x81, 0xc7, 0x54, 0x1c, 0x48, 0x0, + 0xe1, 0x80, 0xc2, 0x2c, 0xf, 0x0, 0x10, 0x38, + 0x18, 0x13, 0x81, 0x0, 0x4, 0x4, 0x80, 0xa, + 0x20, 0xc0, 0x11, 0x3, 0x0, 0x38, 0x0, 0x40, + 0x13, 0x1, 0x80, 0xc, 0x0, 0x20, 0x11, 0x7, + 0x0, 0x14, 0x8, 0x0, + + /* U+58 "X" */ + 0xc, 0xf5, 0x0, 0xc3, 0xfe, 0x10, 0xf0, 0x80, + 0xd, 0x61, 0x2, 0x6, 0xa4, 0xc0, 0x2, 0x51, + 0x70, 0xa, 0x2, 0x0, 0x12, 0x16, 0x1, 0x89, + 0xc5, 0xcd, 0xd, 0x40, 0x3a, 0x46, 0x7c, 0x3c, + 0x3, 0xc3, 0x2, 0x68, 0x60, 0x1f, 0x38, 0x3, + 0x80, 0x3f, 0x48, 0x2, 0x40, 0x3e, 0x17, 0x26, + 0x35, 0x0, 0xf5, 0x84, 0x40, 0x20, 0x3, 0x8d, + 0x49, 0x45, 0xc9, 0x80, 0x37, 0x84, 0x80, 0x24, + 0x20, 0x40, 0xa, 0x66, 0x40, 0x0, 0xb8, 0xc8, + 0x2, 0x3, 0xc0, 0x34, 0xb, 0x90, + + /* U+59 "Y" */ + 0x2f, 0xd0, 0xe, 0x1f, 0xe0, 0x24, 0x25, 0x0, + 0xd2, 0x12, 0x0, 0x80, 0x90, 0xc, 0xc0, 0xc0, + 0x3, 0x3c, 0x0, 0x61, 0x71, 0x0, 0xa0, 0x24, + 0x1, 0x61, 0x20, 0x19, 0x9, 0x45, 0x49, 0x84, + 0x3, 0xa0, 0x26, 0x41, 0x60, 0x1e, 0x52, 0x73, + 0x52, 0x0, 0xfa, 0xc0, 0x12, 0x1, 0xf9, 0x80, + 0xcc, 0x1, 0xff, 0xd6, 0x70, 0xf, 0xfe, 0x88, + + /* U+5A "Z" */ + 0xcf, 0xff, 0xc9, 0x6c, 0xde, 0x0, 0x33, 0xcc, + 0xf6, 0x2, 0x90, 0x7, 0xac, 0x2c, 0x3, 0xd0, + 0x30, 0x20, 0x1c, 0x4e, 0x4e, 0x1, 0xe9, 0x9, + 0x0, 0xf2, 0x21, 0x50, 0x3, 0xd2, 0x16, 0x1, + 0xe7, 0x28, 0x10, 0xe, 0x18, 0x27, 0x0, 0xf5, + 0x84, 0x0, 0x79, 0x15, 0x14, 0x3, 0xd0, 0x0, + 0x88, 0xf2, 0x8, 0x23, 0xbf, 0xb0, + + /* U+5B "[" */ + 0x68, 0x88, 0x2d, 0xde, 0x0, 0x17, 0xf8, 0x3, + 0xff, 0xfe, 0x0, 0x28, 0x80, 0x4, 0xee, 0x0, + + /* U+5C "\\" */ + 0x9f, 0x10, 0xe, 0xa0, 0x60, 0xe, 0x32, 0xa0, + 0xf, 0x51, 0x18, 0x7, 0x30, 0x58, 0x7, 0xa, + 0x30, 0x7, 0xb8, 0x50, 0x3, 0x94, 0x78, 0x3, + 0xce, 0xa2, 0x1, 0xd4, 0xe, 0x1, 0xc6, 0x54, + 0x1, 0xea, 0x32, 0x0, 0xe6, 0xa, 0x0, 0xe1, + 0x46, 0x0, 0xf7, 0xa, 0x0, 0x72, 0x87, 0x0, + + /* U+5D "]" */ + 0x8, 0x89, 0x81, 0xde, 0xb0, 0xff, 0x10, 0x7, + 0xff, 0xfc, 0x1, 0x10, 0x20, 0x3, 0xb8, 0x0, + + /* U+5E "^" */ + 0x0, 0xb7, 0x40, 0x1c, 0x64, 0x43, 0x0, 0xd4, + 0x0, 0xa0, 0xc, 0xca, 0xa6, 0x0, 0x98, 0x3b, + 0x80, 0xa0, 0xa, 0x14, 0x40, 0xc8, 0x11, 0xb0, + 0x1, 0x8c, 0xa8, 0x28, 0x1, 0x41, 0x40, + + /* U+5F "_" */ + 0x37, 0x7f, 0xc6, 0x91, 0x1f, 0x90, + + /* U+60 "`" */ + 0x57, 0x30, 0x4a, 0xe0, 0x1f, 0x39, + + /* U+61 "a" */ + 0x0, 0x26, 0x7f, 0x62, 0x80, 0x4d, 0x62, 0xee, + 0x3a, 0x60, 0x19, 0x2d, 0x89, 0xd0, 0x90, 0x4, + 0x48, 0x4, 0x48, 0x4, 0x2e, 0x80, 0x18, 0x40, + 0x21, 0x9d, 0xff, 0x94, 0x2, 0xc6, 0x4a, 0xbc, + 0x40, 0x3, 0x14, 0x4a, 0xa1, 0x88, 0x7, 0xe1, + 0x70, 0x3, 0x8c, 0x4b, 0xcf, 0x90, 0x8, 0xb1, + 0x5e, 0x16, 0x1c, 0x14, + + /* U+62 "b" */ + 0x4f, 0x80, 0xf, 0xfe, 0xe3, 0xef, 0xeb, 0x0, + 0x67, 0x87, 0x53, 0x97, 0x0, 0x87, 0x6a, 0x98, + 0x30, 0x20, 0x6, 0x20, 0x1, 0x48, 0x38, 0x7, + 0xc8, 0x1e, 0x1, 0xf0, 0x81, 0x80, 0x7c, 0x20, + 0x60, 0x1f, 0x28, 0x78, 0x1, 0x40, 0x35, 0x83, + 0x80, 0xb, 0x5d, 0xb0, 0xa0, 0x40, 0x10, 0xb3, + 0x21, 0x97, 0x0, + + /* U+63 "c" */ + 0x0, 0x1d, 0xf7, 0xea, 0x80, 0x49, 0x88, 0xec, + 0x15, 0x20, 0xa, 0xc, 0x99, 0x6a, 0x31, 0xa8, + 0xb9, 0x80, 0x5e, 0x4b, 0xa1, 0x80, 0x19, 0x35, + 0x84, 0x1c, 0x3, 0xe1, 0x7, 0x0, 0xfb, 0x43, + 0x0, 0x31, 0x42, 0x28, 0xb9, 0x0, 0x50, 0xee, + 0xa, 0xd, 0x98, 0xd5, 0x73, 0x4, 0xc4, 0x77, + 0xd, 0xc0, 0x0, + + /* U+64 "d" */ + 0x0, 0xfa, 0x3d, 0x0, 0x3f, 0xfa, 0x8b, 0xbf, + 0xce, 0x1, 0x9a, 0x89, 0x52, 0x1c, 0x0, 0x32, + 0x3b, 0x54, 0xd1, 0x0, 0x38, 0x31, 0x0, 0x9, + 0x80, 0x1e, 0x18, 0x1, 0xf1, 0x83, 0x80, 0x7c, + 0x60, 0xe0, 0x1f, 0x78, 0x60, 0x7, 0xce, 0xc, + 0x40, 0x1, 0x50, 0x0, 0xc8, 0xed, 0x53, 0xc8, + 0x2, 0x6a, 0x25, 0x46, 0x80, 0x0, + + /* U+65 "e" */ + 0x0, 0x15, 0x77, 0xe2, 0x80, 0x47, 0xaa, 0x8e, + 0x55, 0x0, 0xd, 0x1d, 0xa8, 0xe3, 0x72, 0x61, + 0x92, 0x0, 0xa4, 0x17, 0xc3, 0x26, 0x77, 0x87, + 0x18, 0x23, 0x36, 0x50, 0x30, 0x6, 0x7f, 0xfa, + 0xb4, 0x2c, 0x3, 0xe6, 0x7, 0x40, 0x8, 0xac, + 0x86, 0xc2, 0xea, 0x2b, 0x54, 0xc1, 0x35, 0x51, + 0xde, 0xf1, + + /* U+66 "f" */ + 0x0, 0xe2, 0x68, 0x74, 0x0, 0xe7, 0xd9, 0x78, + 0xb0, 0xc, 0x70, 0x57, 0xfe, 0xd0, 0xd, 0x61, + 0x8, 0x0, 0x20, 0xc, 0x20, 0xc0, 0x1d, 0x1f, + 0xe6, 0xc, 0xff, 0x90, 0x2e, 0x64, 0x60, 0xf3, + 0x32, 0x81, 0xb3, 0x14, 0x2d, 0x9a, 0x10, 0xf, + 0xff, 0xf8, 0x7, 0xff, 0x8, + + /* U+67 "g" */ + 0x0, 0x36, 0xff, 0x43, 0xfa, 0x3, 0xc8, 0x44, + 0xa4, 0x0, 0x6, 0x7, 0x1d, 0xd8, 0x60, 0x7, + 0x9, 0x10, 0x9, 0x0, 0x1e, 0x6, 0x1, 0xfc, + 0xe0, 0x1f, 0xce, 0x1, 0xf7, 0x86, 0x0, 0x7c, + 0xe0, 0xc4, 0x0, 0x16, 0x0, 0xc, 0x8e, 0xd5, + 0x3c, 0x40, 0x26, 0xa2, 0x57, 0x67, 0x0, 0xcb, + 0xbf, 0xb0, 0x40, 0xc1, 0xa, 0x1, 0x12, 0x91, + 0x0, 0xea, 0xe2, 0xb4, 0x24, 0x1, 0x72, 0xee, + 0x54, 0xc4, 0x0, + + /* U+68 "h" */ + 0x4f, 0x70, 0xf, 0xfe, 0xe1, 0xdf, 0xf4, 0x88, + 0x5, 0x78, 0xc, 0x6d, 0xa0, 0x11, 0x6d, 0xce, + 0x91, 0x98, 0x0, 0xc4, 0x1, 0x50, 0x28, 0x3, + 0xc0, 0x30, 0x80, 0x7f, 0x18, 0x7, 0xff, 0xa0, + + /* U+69 "i" */ + 0x0, 0xcd, 0xe8, 0x1, 0xf7, 0x1, 0x0, 0x7d, + 0x1c, 0xc0, 0x1f, 0x84, 0x3, 0xbf, 0xf9, 0x80, + 0x33, 0x34, 0x60, 0x1e, 0x99, 0xa8, 0x3, 0xff, + 0xed, 0x33, 0x50, 0x54, 0xc9, 0xc1, 0x9a, 0x30, + 0x36, 0x65, 0x0, + + /* U+6A "j" */ + 0x0, 0xd3, 0xc4, 0x1, 0x8c, 0x44, 0x1, 0xab, + 0x8c, 0x3, 0x84, 0x7, 0xff, 0x8c, 0x59, 0xa2, + 0x0, 0xa6, 0x65, 0x0, 0xff, 0xf9, 0x10, 0x7, + 0xa, 0x81, 0xc4, 0x27, 0xc2, 0x1, 0x5d, 0x8a, + 0x9c, 0x0, + + /* U+6B "k" */ + 0x4f, 0x80, 0xf, 0xff, 0x1a, 0xfe, 0x88, 0x7, + 0x92, 0x8b, 0x4, 0x3, 0x92, 0xc7, 0xc4, 0x3, + 0x8e, 0xc7, 0x8, 0x3, 0x8b, 0x42, 0xc8, 0x3, + 0xca, 0x21, 0x20, 0x1f, 0xad, 0x4e, 0x40, 0x3c, + 0xe9, 0x64, 0xca, 0x1, 0xf0, 0xf0, 0x51, 0x0, + 0x7c, 0x72, 0x1e, 0x1, 0xf9, 0x94, 0xa8, 0x0, + + /* U+6C "l" */ + 0xf, 0xfe, 0x60, 0xc, 0xcd, 0x18, 0x7, 0xa6, + 0x6a, 0x0, 0xff, 0xff, 0x80, 0x7f, 0xf4, 0xe6, + 0x6a, 0xa, 0x99, 0x38, 0x33, 0x46, 0x6, 0xcc, + 0xa0, + + /* U+6D "m" */ + 0x1f, 0x9b, 0xfd, 0x5b, 0xfd, 0x30, 0x9, 0xb1, + 0xca, 0x8a, 0xb, 0x80, 0x25, 0x78, 0x11, 0x4b, + 0xa9, 0x0, 0x46, 0x0, 0x33, 0x0, 0xc, 0x4, + 0x3, 0xff, 0xfe, 0x1, 0xfc, + + /* U+6E "n" */ + 0x4f, 0x54, 0xcf, 0xd9, 0x10, 0xb, 0xad, 0x98, + 0xd, 0xa0, 0x12, 0xed, 0x4e, 0x99, 0x88, 0x0, + 0xc4, 0x1, 0x58, 0x38, 0x3, 0xc0, 0x30, 0x81, + 0x80, 0x7f, 0xfc, 0x0, + + /* U+6F "o" */ + 0x0, 0x25, 0xff, 0xad, 0x0, 0x26, 0xb5, 0x66, + 0x2d, 0xb0, 0x14, 0x97, 0xcc, 0xbc, 0xa4, 0xa8, + 0x2c, 0x40, 0x3, 0x61, 0x46, 0xe, 0x1, 0x90, + 0xd, 0xc0, 0x40, 0x31, 0x3, 0xb8, 0x4, 0x3, + 0x8, 0x39, 0x82, 0x0, 0x64, 0x3, 0xa0, 0x81, + 0x0, 0xc, 0x5, 0x14, 0x97, 0xcc, 0xbc, 0xa4, + 0x81, 0xac, 0x99, 0x85, 0x6c, 0x0, + + /* U+70 "p" */ + 0x4f, 0x67, 0xdf, 0xd6, 0x0, 0xd1, 0x2e, 0xa5, + 0x2e, 0x1, 0x1f, 0xd5, 0x30, 0x20, 0x40, 0xa, + 0x20, 0x3, 0x70, 0x70, 0x7, 0x80, 0x6c, 0xe, + 0x0, 0xf9, 0xc0, 0x40, 0x3e, 0x70, 0x10, 0xf, + 0xb0, 0x34, 0x1, 0x60, 0x11, 0x30, 0x20, 0x0, + 0xf6, 0x65, 0xa3, 0x2, 0x0, 0x75, 0x76, 0x29, + 0x70, 0xb, 0xe3, 0xbf, 0x58, 0x3, 0xff, 0xa8, + + /* U+71 "q" */ + 0x0, 0x2e, 0xff, 0x4c, 0x7a, 0x3, 0xd0, 0x4c, + 0x2b, 0x80, 0x6, 0x7, 0x19, 0x98, 0x80, 0x7, + 0x9, 0x10, 0x8, 0xc0, 0x1e, 0x6, 0x1, 0xfc, + 0xe0, 0x1f, 0xce, 0x1, 0xf7, 0x86, 0x0, 0x7c, + 0xe0, 0xc4, 0x0, 0x15, 0x0, 0xc, 0xe, 0x4c, + 0xbc, 0x80, 0x27, 0xa3, 0x67, 0x67, 0x0, 0xcb, + 0xbf, 0xd0, 0x1, 0xff, 0xd5, + + /* U+72 "r" */ + 0xcf, 0x6, 0xdf, 0xe5, 0x0, 0x4c, 0x88, 0x82, + 0x20, 0x3, 0xdf, 0xef, 0xa0, 0x2, 0xd0, 0x3, + 0xca, 0x1, 0xff, 0xe9, + + /* U+73 "s" */ + 0x0, 0x1d, 0xf7, 0xeb, 0x80, 0x49, 0x8a, 0xec, + 0x11, 0x60, 0x9, 0xf, 0x99, 0x6a, 0x24, 0x1, + 0x8, 0x5, 0x34, 0xc1, 0x61, 0xce, 0x60, 0x4a, + 0x40, 0xd6, 0xb1, 0x9f, 0x44, 0x1, 0x25, 0xfd, + 0xb2, 0xe0, 0x93, 0xa0, 0x1, 0x26, 0x42, 0xc7, + 0x12, 0x20, 0x10, 0x80, 0x8a, 0xb, 0xe6, 0x2e, + 0x9, 0x81, 0xe9, 0x59, 0xd9, 0xf0, 0x0, + + /* U+74 "t" */ + 0x0, 0x99, 0xc0, 0x3f, 0x5c, 0x0, 0x7f, 0xf0, + 0xe7, 0xfc, 0x41, 0xff, 0x83, 0x66, 0x42, 0x13, + 0x38, 0x11, 0x98, 0x60, 0xcd, 0x80, 0x3f, 0xfd, + 0x4c, 0x8, 0x1, 0xf7, 0x5, 0xd4, 0xd9, 0x80, + 0x4b, 0x44, 0xac, 0xe0, + + /* U+75 "u" */ + 0x3f, 0x80, 0xd, 0x1e, 0x80, 0x1f, 0xfe, 0x81, + 0x0, 0xf8, 0x40, 0x3f, 0x88, 0x1c, 0x3, 0x28, + 0x4, 0xe3, 0x6c, 0xfa, 0x60, 0x14, 0x41, 0x66, + 0xae, 0x0, 0x0, + + /* U+76 "v" */ + 0xd, 0xf0, 0xe, 0x1f, 0xc0, 0xa0, 0x50, 0xc, + 0xe1, 0x40, 0xc1, 0xc0, 0x1a, 0x81, 0x80, 0x55, + 0x4, 0x0, 0x26, 0xc0, 0x17, 0x3, 0x0, 0x18, + 0x28, 0x2, 0x42, 0xa0, 0x5, 0x11, 0x80, 0x6a, + 0x22, 0xd4, 0x1, 0xcc, 0x15, 0x40, 0x60, 0xe, + 0x14, 0x65, 0x50, 0x80, 0x7b, 0xc4, 0xb8, 0x3, + 0xe4, 0x11, 0x20, 0x4, + + /* U+77 "w" */ + 0x6f, 0x20, 0x5, 0x58, 0x5, 0xf0, 0xa0, 0xe0, + 0x4, 0x40, 0x0, 0xc3, 0x4c, 0x34, 0x8, 0x40, + 0xc1, 0x41, 0x0, 0x88, 0xe, 0x24, 0x81, 0xc2, + 0x20, 0x47, 0xc, 0x57, 0xc0, 0x35, 0x0, 0x79, + 0x2, 0x66, 0x14, 0x14, 0xc0, 0xa, 0x8, 0x48, + 0x81, 0x31, 0xc0, 0x1, 0x87, 0x1, 0x90, 0xd0, + 0x28, 0x4, 0x6a, 0x80, 0x4, 0x71, 0x10, 0x4, + 0xa1, 0x80, 0xc, 0x15, 0x0, 0xde, 0x6, 0x0, + 0x40, 0xc0, 0x0, + + /* U+78 "x" */ + 0x7f, 0x90, 0xc, 0xff, 0x40, 0xe8, 0xca, 0x0, + 0x38, 0x2a, 0x0, 0x50, 0xd8, 0x87, 0x7, 0x0, + 0x43, 0x43, 0x52, 0x50, 0x60, 0x19, 0x1d, 0x19, + 0x1c, 0x3, 0xd2, 0x0, 0xf0, 0xf, 0xac, 0x1, + 0x20, 0x1e, 0x65, 0x54, 0x94, 0x80, 0x62, 0x91, + 0xa6, 0x46, 0x40, 0xb, 0x83, 0x40, 0x14, 0x34, + 0x21, 0x6, 0xe6, 0x0, 0x1b, 0x1a, 0x0, + + /* U+79 "y" */ + 0x1f, 0xe0, 0xf, 0x77, 0x88, 0x94, 0x54, 0x3, + 0x28, 0xa8, 0x84, 0x87, 0x0, 0x6e, 0x9, 0x0, + 0x19, 0x90, 0x80, 0x2, 0x86, 0x60, 0xa, 0x42, + 0xc0, 0xc, 0x12, 0x1, 0x94, 0x98, 0x1, 0x22, + 0xa0, 0x1d, 0x60, 0xc8, 0x32, 0x1, 0xe6, 0x1b, + 0xe0, 0x60, 0xf, 0x98, 0x95, 0x84, 0x3, 0xe9, + 0x0, 0x58, 0x7, 0xe1, 0x12, 0x10, 0x7, 0xe7, + 0x1f, 0x0, 0xfc, 0x50, 0x48, 0x1, 0xe3, 0xac, + 0xe, 0x0, 0xf9, 0x54, 0x76, 0x60, 0x1e, + + /* U+7A "z" */ + 0x5f, 0xff, 0xc6, 0xef, 0xe5, 0x0, 0x11, 0x22, + 0x39, 0xc2, 0x84, 0x3, 0xa8, 0x9d, 0x40, 0x39, + 0x94, 0xe0, 0x3, 0x8e, 0x47, 0x40, 0x38, 0x74, + 0x34, 0x40, 0x3a, 0x86, 0x4c, 0x3, 0xa1, 0x15, + 0x80, 0x39, 0x1c, 0x9, 0xdf, 0x90, 0x80, 0xf, + 0x11, 0xda, + + /* U+7B "{" */ + 0x0, 0xc9, 0x92, 0x1, 0x1d, 0xb5, 0x80, 0x50, + 0x14, 0x40, 0x12, 0x20, 0x3, 0x8, 0x7, 0xe1, + 0x0, 0xc6, 0x1, 0xe4, 0xd, 0x0, 0x13, 0x41, + 0x30, 0x3, 0xe4, 0xf0, 0x40, 0x12, 0xc5, 0x40, + 0x12, 0x4c, 0x22, 0x80, 0x64, 0xc, 0x0, 0xc4, + 0x6, 0x1, 0xe1, 0x0, 0xc2, 0xe, 0x1, 0xc6, + 0x60, 0xe, 0x80, 0x90, 0xc, 0x94, 0xd4, 0x1, + 0x97, 0xec, + + /* U+7C "|" */ + 0xbb, 0x0, 0x7f, 0xf6, 0x0, + + /* U+7D "}" */ + 0xac, 0x30, 0xd, 0xf, 0x86, 0x1, 0x15, 0x4, + 0x80, 0x61, 0x24, 0x0, 0xe1, 0x10, 0x7, 0xff, + 0x1, 0xc0, 0x40, 0x31, 0x82, 0x80, 0x69, 0x1a, + 0x52, 0x0, 0xe, 0x5, 0x48, 0x5, 0xc2, 0xfe, + 0x0, 0x73, 0x98, 0x40, 0x6, 0x3, 0x80, 0x67, + 0x1, 0x0, 0xff, 0x84, 0x40, 0x18, 0x49, 0x40, + 0x35, 0x4, 0x0, 0x58, 0xb6, 0x60, 0x16, 0xf2, + 0x0, 0x60, + + /* U+7E "~" */ + 0x3, 0xdf, 0xd5, 0x0, 0xcc, 0x63, 0xa6, 0xa7, + 0x52, 0x0, 0x29, 0x57, 0x1f, 0xae, 0x56, 0xea, + 0xc1, 0x64, 0xa1, 0x0, 0x54, 0x9a, 0x96, 0x0 +}; + +/*--------------------- + * 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 = 192, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 0, .adv_w = 192, .box_w = 3, .box_h = 15, .ofs_x = 4, .ofs_y = 0}, + {.bitmap_index = 13, .adv_w = 192, .box_w = 6, .box_h = 5, .ofs_x = 3, .ofs_y = 10}, + {.bitmap_index = 26, .adv_w = 192, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 110, .adv_w = 192, .box_w = 10, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 193, .adv_w = 192, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 269, .adv_w = 192, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 346, .adv_w = 192, .box_w = 3, .box_h = 5, .ofs_x = 4, .ofs_y = 10}, + {.bitmap_index = 353, .adv_w = 192, .box_w = 6, .box_h = 22, .ofs_x = 3, .ofs_y = -5}, + {.bitmap_index = 413, .adv_w = 192, .box_w = 6, .box_h = 22, .ofs_x = 3, .ofs_y = -5}, + {.bitmap_index = 472, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 5}, + {.bitmap_index = 518, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 543, .adv_w = 192, .box_w = 4, .box_h = 6, .ofs_x = 3, .ofs_y = -4}, + {.bitmap_index = 555, .adv_w = 192, .box_w = 8, .box_h = 2, .ofs_x = 2, .ofs_y = 6}, + {.bitmap_index = 561, .adv_w = 192, .box_w = 4, .box_h = 3, .ofs_x = 4, .ofs_y = 0}, + {.bitmap_index = 567, .adv_w = 192, .box_w = 9, .box_h = 16, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 617, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 689, .adv_w = 192, .box_w = 6, .box_h = 15, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 708, .adv_w = 192, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 774, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 841, .adv_w = 192, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 893, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 957, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1027, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1078, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1150, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1220, .adv_w = 192, .box_w = 4, .box_h = 11, .ofs_x = 5, .ofs_y = 0}, + {.bitmap_index = 1237, .adv_w = 192, .box_w = 5, .box_h = 15, .ofs_x = 4, .ofs_y = -4}, + {.bitmap_index = 1265, .adv_w = 192, .box_w = 9, .box_h = 10, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 1305, .adv_w = 192, .box_w = 10, .box_h = 6, .ofs_x = 1, .ofs_y = 4}, + {.bitmap_index = 1322, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 1365, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1424, .adv_w = 192, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1513, .adv_w = 192, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1585, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1648, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1707, .adv_w = 192, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1765, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1798, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1825, .adv_w = 192, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1895, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1915, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1941, .adv_w = 192, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1975, .adv_w = 192, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2035, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2050, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2101, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2149, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2216, .adv_w = 192, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2262, .adv_w = 192, .box_w = 12, .box_h = 18, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 2351, .adv_w = 192, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2412, .adv_w = 192, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2487, .adv_w = 192, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2506, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2545, .adv_w = 192, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2619, .adv_w = 192, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2711, .adv_w = 192, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2789, .adv_w = 192, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2845, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2899, .adv_w = 192, .box_w = 5, .box_h = 20, .ofs_x = 4, .ofs_y = -3}, + {.bitmap_index = 2915, .adv_w = 192, .box_w = 8, .box_h = 16, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 2963, .adv_w = 192, .box_w = 5, .box_h = 20, .ofs_x = 3, .ofs_y = -3}, + {.bitmap_index = 2979, .adv_w = 192, .box_w = 8, .box_h = 8, .ofs_x = 2, .ofs_y = 7}, + {.bitmap_index = 3010, .adv_w = 192, .box_w = 10, .box_h = 2, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3016, .adv_w = 192, .box_w = 4, .box_h = 3, .ofs_x = 4, .ofs_y = 12}, + {.bitmap_index = 3022, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3074, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3125, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3176, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3230, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3280, .adv_w = 192, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3325, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 3392, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3424, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3459, .adv_w = 192, .box_w = 7, .box_h = 19, .ofs_x = 2, .ofs_y = -4}, + {.bitmap_index = 3493, .adv_w = 192, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3541, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3566, .adv_w = 192, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3595, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3623, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3677, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 3733, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 3786, .adv_w = 192, .box_w = 8, .box_h = 11, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 3806, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3861, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3897, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3924, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3976, .adv_w = 192, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4043, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 4098, .adv_w = 192, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 4169, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 4211, .adv_w = 192, .box_w = 7, .box_h = 20, .ofs_x = 3, .ofs_y = -4}, + {.bitmap_index = 4269, .adv_w = 192, .box_w = 2, .box_h = 19, .ofs_x = 5, .ofs_y = -4}, + {.bitmap_index = 4274, .adv_w = 192, .box_w = 7, .box_h = 20, .ofs_x = 3, .ofs_y = -4}, + {.bitmap_index = 4332, .adv_w = 192, .box_w = 12, .box_h = 4, .ofs_x = 0, .ofs_y = 4} +}; + +/*--------------------- + * 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 + } +}; + +/*-------------------- + * 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 = NULL, + .kern_scale = 0, + .cmap_num = 1, + .bpp = 4, + .kern_classes = 0, + .bitmap_format = 1 +}; + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +lv_font_t font_3 = { + .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 = 22, /*The maximum line height required by the font*/ + .base_line = 5, /*Baseline measured from the bottom of the line*/ +#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) + .subpx = LV_FONT_SUBPX_NONE, +#endif + .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +}; + +#endif /*#if FONT_3*/ diff --git a/src/libs/lvgl/tests/lv_test_main.c b/src/libs/lvgl/tests/lv_test_main.c new file mode 100644 index 00000000..c590c62f --- /dev/null +++ b/src/libs/lvgl/tests/lv_test_main.c @@ -0,0 +1,145 @@ +#include "../lvgl.h" +#include <stdio.h> +#include <stdlib.h> +#include "lv_test_core/lv_test_core.h" +#include "lv_test_widgets/lv_test_label.h" + +#if LV_BUILD_TEST +#include <sys/time.h> + +static void hal_init(void); +static void dummy_flush_cb(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p); + +lv_color_t test_fb[LV_HOR_RES_MAX * LV_VER_RES_MAX]; + +int main(void) +{ + printf("Call lv_init...\n"); + lv_init(); + + hal_init(); + + lv_test_core(); + lv_test_label(); + + printf("Exit with success!\n"); + return 0; +} + +#if LV_USE_FILESYSTEM +static lv_fs_res_t open_cb(struct _lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode) +{ + (void) drv; + (void) mode; + + FILE * fp = fopen(path, "rb"); // only reading is supported + + *((FILE **)file_p) = fp; + return NULL == fp ? LV_FS_RES_UNKNOWN : LV_FS_RES_OK; +} + +static lv_fs_res_t close_cb(struct _lv_fs_drv_t * drv, void * file_p) +{ + (void) drv; + + FILE * fp = *((FILE **) file_p); + fclose(fp); + return LV_FS_RES_OK; +} + +static lv_fs_res_t read_cb(struct _lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br) +{ + (void) drv; + + FILE * fp = *((FILE **) file_p); + *br = fread(buf, 1, btr, fp); + return (*br <= 0) ? LV_FS_RES_UNKNOWN : LV_FS_RES_OK; +} + +static lv_fs_res_t seek_cb(struct _lv_fs_drv_t * drv, void * file_p, uint32_t pos) +{ + (void) drv; + + FILE * fp = *((FILE **) file_p); + fseek (fp, pos, SEEK_SET); + + return LV_FS_RES_OK; +} + +static lv_fs_res_t tell_cb(struct _lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p) +{ + (void) drv; + + FILE * fp = *((FILE **) file_p); + *pos_p = ftell(fp); + + return LV_FS_RES_OK; +} + +static bool ready_cb(struct _lv_fs_drv_t * drv) +{ + (void) drv; + return true; +} +#endif + +static void hal_init(void) +{ + static lv_disp_buf_t disp_buf; + lv_color_t * disp_buf1 = (lv_color_t *)malloc(LV_HOR_RES * LV_VER_RES * sizeof(lv_color_t)); + + lv_disp_buf_init(&disp_buf, disp_buf1, NULL, LV_HOR_RES * LV_VER_RES); + + lv_disp_drv_t disp_drv; + lv_disp_drv_init(&disp_drv); + disp_drv.buffer = &disp_buf; + disp_drv.flush_cb = dummy_flush_cb; + lv_disp_drv_register(&disp_drv); + +#if LV_USE_FILESYSTEM + lv_fs_drv_t drv; + lv_fs_drv_init(&drv); /*Basic initialization*/ + + drv.letter = 'f'; /*An uppercase letter to identify the drive */ + drv.file_size = sizeof(FILE *); /*Size required to store a file object*/ + drv.ready_cb = ready_cb; /*Callback to tell if the drive is ready to use */ + drv.open_cb = open_cb; /*Callback to open a file */ + drv.close_cb = close_cb; /*Callback to close a file */ + drv.read_cb = read_cb; /*Callback to read a file */ + drv.seek_cb = seek_cb; /*Callback to seek in a file (Move cursor) */ + drv.tell_cb = tell_cb; /*Callback to tell the cursor position */ + + lv_fs_drv_register(&drv); /*Finally register the drive*/ +#endif +} +#include <stdio.h> + +static void dummy_flush_cb(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) +{ + LV_UNUSED(area); + LV_UNUSED(color_p); + + memcpy(test_fb, color_p, lv_area_get_size(area) * sizeof(lv_color_t)); + + lv_disp_flush_ready(disp_drv); +} + +uint32_t custom_tick_get(void) +{ + static uint64_t start_ms = 0; + if(start_ms == 0) { + struct timeval tv_start; + gettimeofday(&tv_start, NULL); + start_ms = (tv_start.tv_sec * 1000000 + tv_start.tv_usec) / 1000; + } + + struct timeval tv_now; + gettimeofday(&tv_now, NULL); + uint64_t now_ms; + now_ms = (tv_now.tv_sec * 1000000 + tv_now.tv_usec) / 1000; + + uint32_t time_ms = now_ms - start_ms; + return time_ms; +} + +#endif diff --git a/src/libs/lvgl/tests/lv_test_ref_imgs/lv_test_img32_label_1.png b/src/libs/lvgl/tests/lv_test_ref_imgs/lv_test_img32_label_1.png Binary files differnew file mode 100644 index 00000000..29c84d08 --- /dev/null +++ b/src/libs/lvgl/tests/lv_test_ref_imgs/lv_test_img32_label_1.png diff --git a/src/libs/lvgl/tests/lv_test_widgets/lv_test_label.c b/src/libs/lvgl/tests/lv_test_widgets/lv_test_label.c new file mode 100644 index 00000000..586ebd28 --- /dev/null +++ b/src/libs/lvgl/tests/lv_test_widgets/lv_test_label.c @@ -0,0 +1,69 @@ +/** + * @file lv_test_label.c + * + */ + +/********************* + * INCLUDES + *********************/ +#include "../../lvgl.h" +#include "../lv_test_assert.h" +#include "lv_test_label.h" + +#if LV_BUILD_TEST + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * STATIC PROTOTYPES + **********************/ +static void create_copy(void); + +/********************** + * STATIC VARIABLES + **********************/ + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +void lv_test_label(void) +{ + lv_test_print(""); + lv_test_print("==================="); + lv_test_print("Start lv_label tests"); + lv_test_print("==================="); + +#if LV_USE_LABEL + create_copy(); +#else + lv_test_print("Skip label test: LV_USE_LABEL == 0"); +#endif +} + +/********************** + * STATIC FUNCTIONS + **********************/ + +static void create_copy(void) +{ + lv_test_print(""); + lv_test_print("Create a label"); + lv_test_print("---------------------------"); + + lv_label_create(lv_scr_act(), NULL); +#if LV_COLOR_DEPTH == 32 + lv_test_assert_img_eq("lv_test_img32_label_1.png", "Create a label and leave the default settings"); +#endif +} +#endif diff --git a/src/libs/lvgl/tests/lv_test_widgets/lv_test_label.h b/src/libs/lvgl/tests/lv_test_widgets/lv_test_label.h new file mode 100644 index 00000000..36aac4e5 --- /dev/null +++ b/src/libs/lvgl/tests/lv_test_widgets/lv_test_label.h @@ -0,0 +1,38 @@ +/** + * @file lv_test_label.h + * + */ + +#ifndef LV_TEST_LABEL_H +#define LV_TEST_LABEL_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * GLOBAL PROTOTYPES + **********************/ +void lv_test_label(void); + +/********************** + * MACROS + **********************/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /*LV_TEST_CONT_H*/ |