From 8b5c1ee9ba9b0ae4b79eabc6fad161a7f8e43c30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Wed, 28 Dec 2022 19:39:15 +0100 Subject: [PATCH] add font generation & missing font flags --- Makefile | 9 +- fb_text.c | 12 +- fb_text.h | 4 +- font.c | 219 +++++------------------------ font_35.inc.c | 102 ++++++++++++++ font_45.inc.c | 102 ++++++++++++++ font_57.inc.c | 116 +++++++++++++++ fontedit_35.c | 13 +- fontedit_45.c | 22 ++- fontedit_57.c | 44 ++---- fontedit_gen45.c | 40 ------ fontedit_gen45_extra.c | 36 ----- fontedit_gen57.c | 124 ---------------- fontedit_gen57_extra.c | 45 ------ fontedit.c => fontedit_gen_table.c | 0 fontedit_render.inc.c | 48 +++++++ main.c | 4 + 17 files changed, 465 insertions(+), 475 deletions(-) create mode 100644 font_35.inc.c create mode 100644 font_45.inc.c create mode 100644 font_57.inc.c delete mode 100644 fontedit_gen45.c delete mode 100644 fontedit_gen45_extra.c delete mode 100644 fontedit_gen57.c delete mode 100644 fontedit_gen57_extra.c rename fontedit.c => fontedit_gen_table.c (100%) create mode 100644 fontedit_render.inc.c diff --git a/Makefile b/Makefile index e3f9d45..56f607e 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,11 @@ -.PHONY: build run +.PHONY: build run fonts -all: ufb-test +all: fonts ufb-test + +fonts: fontedit_35.c fontedit_45.c fontedit_57.c + tcc -run fontedit_35.c > font_35.inc.c || true + tcc -run fontedit_45.c > font_45.inc.c || true + tcc -run fontedit_57.c > font_57.inc.c || true run: ufb-test ./ufb-test diff --git a/fb_text.c b/fb_text.c index 91487d5..bb82c3e 100644 --- a/fb_text.c +++ b/fb_text.c @@ -16,9 +16,12 @@ void fb_text_P_or_RAM(fbpos_t x, fbpos_t y, const char *text, uint8_t flags, fbc uint8_t symw; uint8_t symh; - if (flags & FONT_TINY) { + if (flags & FONT_4X5) { symw = 4; symh = 5; + } else if (flags & FONT_3X5) { + symw = 3; + symh = 5; } else { symw = 5; symh = 7; @@ -26,10 +29,13 @@ void fb_text_P_or_RAM(fbpos_t x, fbpos_t y, const char *text, uint8_t flags, fbc while ((uchar = Utf8Iterator_Next(&iter)).uint) { const uint8_t *data; - if (flags & FONT_TINY) { + if (flags & FONT_4X5) { const font4x_bitmap_t *sym = font45_getsym(&uchar); data = sym->data; - } else { + } else if (flags & FONT_3X5) { + const font3x_bitmap_t *sym = font35_getsym(&uchar); + data = sym->data; + } else{ const font5x_bitmap_t *sym = font57_getsym(&uchar); data = sym->data; } diff --git a/fb_text.h b/fb_text.h index c6edea3..b05e900 100644 --- a/fb_text.h +++ b/fb_text.h @@ -8,7 +8,9 @@ #include "framebuffer.h" /// Use tiny font 5x4, supports only digits and select symbols -#define FONT_TINY 8 +#define FONT_4X5 8 +#define FONT_3X5 16 +#define FONT_5X7 0 // default font /// Use bold variant (each character is printed twice, 1px offset) #define FONT_BOLD 1 /// Print characters 2x wider diff --git a/font.c b/font.c index c52c73f..e21766c 100644 --- a/font.c +++ b/font.c @@ -3,8 +3,6 @@ #include "progmem.h" #include -#define FONT_EXTRAS_START (0x7e - 0x20 + 1) - union utf_lookup { const char symbol[4]; /// symbol as uint, but not decoded - just for matching! @@ -26,203 +24,58 @@ struct utf_glyph3x { font3x_bitmap_t graphic; }; -#define F57_NUM_ASCII 95 -#define F57_ASCII_START 0x20 -#define F57_ASCII_END 0x7e - -// ASCII symbols are stored as bare graphic to reduce ROM size -static const font5x_bitmap_t PROGMEM font57_ascii[F57_NUM_ASCII] = { - {{0x00, 0x00, 0x00, 0x00, 0x00}}, // 0x20 - {{0x00, 0x00, 0x5f, 0x00, 0x00}}, // ! 0x21 - {{0x00, 0x07, 0x00, 0x07, 0x00}}, // \" 0x22 - {{0x14, 0x7f, 0x14, 0x7f, 0x14}}, // # 0x23 - {{0x24, 0x2a, 0x7f, 0x2a, 0x12}}, // $ 0x24 - {{0x23, 0x13, 0x08, 0x64, 0x62}}, // % 0x25 - {{0x36, 0x49, 0x55, 0x22, 0x50}}, // & 0x26 - {{0x00, 0x05, 0x03, 0x00, 0x00}}, // ' 0x27 - {{0x00, 0x1c, 0x22, 0x41, 0x00}}, // ( 0x28 - {{0x00, 0x41, 0x22, 0x1c, 0x00}}, // ) 0x29 - {{0x14, 0x08, 0x3e, 0x08, 0x14}}, // * 0x2a - {{0x08, 0x08, 0x3e, 0x08, 0x08}}, // + 0x2b - {{0x00, 0x50, 0x30, 0x00, 0x00}}, // , 0x2c - {{0x08, 0x08, 0x08, 0x08, 0x08}}, // - 0x2d - {{0x00, 0x60, 0x60, 0x00, 0x00}}, // . 0x2e - {{0x20, 0x10, 0x08, 0x04, 0x02}}, // / 0x2f - {{0x3e, 0x51, 0x49, 0x45, 0x3e}}, // 0 0x30 - {{0x00, 0x42, 0x7f, 0x40, 0x00}}, // 1 0x31 - {{0x42, 0x61, 0x51, 0x49, 0x46}}, // 2 0x32 - {{0x21, 0x41, 0x45, 0x4b, 0x31}}, // 3 0x33 - {{0x18, 0x14, 0x12, 0x7f, 0x10}}, // 4 0x34 - {{0x27, 0x45, 0x45, 0x45, 0x39}}, // 5 0x35 - {{0x3c, 0x4a, 0x49, 0x49, 0x30}}, // 6 0x36 - {{0x01, 0x71, 0x09, 0x05, 0x03}}, // 7 0x37 - {{0x36, 0x49, 0x49, 0x49, 0x36}}, // 8 0x38 - {{0x06, 0x49, 0x49, 0x29, 0x1e}}, // 9 0x39 - {{0x00, 0x36, 0x36, 0x00, 0x00}}, // : 0x3a - {{0x00, 0x56, 0x36, 0x00, 0x00}}, // ; 0x3b - {{0x08, 0x14, 0x22, 0x41, 0x00}}, // < 0x3c - {{0x14, 0x14, 0x14, 0x14, 0x14}}, // = 0x3d - {{0x00, 0x41, 0x22, 0x14, 0x08}}, // > 0x3e - {{0x02, 0x01, 0x51, 0x09, 0x06}}, // ? 0x3f - {{0x32, 0x49, 0x79, 0x41, 0x3e}}, // @ 0x40 - {{0x7e, 0x11, 0x11, 0x11, 0x7e}}, // A 0x41 - {{0x7f, 0x49, 0x49, 0x49, 0x36}}, // B 0x42 - {{0x3e, 0x41, 0x41, 0x41, 0x22}}, // C 0x43 - {{0x7f, 0x41, 0x41, 0x22, 0x1c}}, // D 0x44 - {{0x7f, 0x49, 0x49, 0x49, 0x41}}, // E 0x45 - {{0x7f, 0x09, 0x09, 0x09, 0x01}}, // F 0x46 - {{0x3e, 0x41, 0x49, 0x49, 0x7a}}, // G 0x47 - {{0x7f, 0x08, 0x08, 0x08, 0x7f}}, // H 0x48 - {{0x00, 0x41, 0x7f, 0x41, 0x00}}, // I 0x49 - {{0x20, 0x40, 0x41, 0x3f, 0x01}}, // J 0x4a - {{0x7f, 0x08, 0x14, 0x22, 0x41}}, // K 0x4b - {{0x7f, 0x40, 0x40, 0x40, 0x40}}, // L 0x4c - {{0x7f, 0x02, 0x0c, 0x02, 0x7f}}, // M 0x4d - {{0x7f, 0x04, 0x08, 0x10, 0x7f}}, // N 0x4e - {{0x3e, 0x41, 0x41, 0x41, 0x3e}}, // O 0x4f - {{0x7f, 0x09, 0x09, 0x09, 0x06}}, // P 0x50 - {{0x3e, 0x41, 0x51, 0x21, 0x5e}}, // Q 0x51 - {{0x7f, 0x09, 0x19, 0x29, 0x46}}, // R 0x52 - {{0x46, 0x49, 0x49, 0x49, 0x31}}, // S 0x53 - {{0x01, 0x01, 0x7f, 0x01, 0x01}}, // T 0x54 - {{0x3f, 0x40, 0x40, 0x40, 0x3f}}, // U 0x55 - {{0x1f, 0x20, 0x40, 0x20, 0x1f}}, // V 0x56 - {{0x3f, 0x40, 0x38, 0x40, 0x3f}}, // W 0x57 - {{0x63, 0x14, 0x08, 0x14, 0x63}}, // X 0x58 - {{0x07, 0x08, 0x70, 0x08, 0x07}}, // Y 0x59 - {{0x61, 0x51, 0x49, 0x45, 0x43}}, // Z 0x5a - {{0x00, 0x7f, 0x41, 0x41, 0x00}}, // [ 0x5b - {{0x02, 0x04, 0x08, 0x10, 0x20}}, // \\ 0x5c - {{0x00, 0x41, 0x41, 0x7f, 0x00}}, // ] 0x5d - {{0x04, 0x02, 0x01, 0x02, 0x04}}, // ^ 0x5e - {{0x40, 0x40, 0x40, 0x40, 0x40}}, // _ 0x5f - {{0x00, 0x01, 0x02, 0x04, 0x00}}, // ` 0x60 - {{0x20, 0x54, 0x54, 0x54, 0x78}}, // a 0x61 - {{0x7f, 0x48, 0x44, 0x44, 0x38}}, // b 0x62 - {{0x38, 0x44, 0x44, 0x44, 0x20}}, // c 0x63 - {{0x38, 0x44, 0x44, 0x48, 0x7f}}, // d 0x64 - {{0x38, 0x54, 0x54, 0x54, 0x18}}, // e 0x65 - {{0x08, 0x7e, 0x09, 0x01, 0x02}}, // f 0x66 - {{0x0c, 0x52, 0x52, 0x52, 0x3e}}, // g 0x67 - {{0x7f, 0x08, 0x04, 0x04, 0x78}}, // h 0x68 - {{0x00, 0x44, 0x7d, 0x40, 0x00}}, // i 0x69 - {{0x20, 0x40, 0x44, 0x3d, 0x00}}, // j 0x6a - {{0x7f, 0x10, 0x28, 0x44, 0x00}}, // k 0x6b - {{0x00, 0x41, 0x7f, 0x40, 0x00}}, // l 0x6c - {{0x7c, 0x04, 0x18, 0x04, 0x78}}, // m 0x6d - {{0x7c, 0x08, 0x04, 0x04, 0x78}}, // n 0x6e - {{0x38, 0x44, 0x44, 0x44, 0x38}}, // o 0x6f - {{0x7c, 0x14, 0x14, 0x14, 0x08}}, // p 0x70 - {{0x08, 0x14, 0x14, 0x18, 0x7c}}, // q 0x71 - {{0x7c, 0x08, 0x04, 0x04, 0x08}}, // r 0x72 - {{0x48, 0x54, 0x54, 0x54, 0x20}}, // s 0x73 - {{0x04, 0x3f, 0x44, 0x40, 0x20}}, // t 0x74 - {{0x3c, 0x40, 0x40, 0x20, 0x7c}}, // u 0x75 - {{0x1c, 0x20, 0x40, 0x20, 0x1c}}, // v 0x76 - {{0x3c, 0x40, 0x30, 0x40, 0x3c}}, // w 0x77 - {{0x44, 0x28, 0x10, 0x28, 0x44}}, // x 0x78 - {{0x0c, 0x50, 0x50, 0x50, 0x3c}}, // y 0x79 - {{0x44, 0x64, 0x54, 0x4c, 0x44}}, // z 0x7a - {{0x00, 0x08, 0x36, 0x41, 0x00}}, // { 0x7b - {{0x00, 0x00, 0x7f, 0x00, 0x00}}, // | 0x7c - {{0x00, 0x41, 0x36, 0x08, 0x00}}, // } 0x7d - {{0x10, 0x08, 0x08, 0x10, 0x08}}, // ~ 0x7e -}; -#define F57_NUM_EXTRA 16 +#include "font_35.inc.c" +#include "font_45.inc.c" +#include "font_57.inc.c" + + +#define ASCII_START 0x20 +#define ASCII_END 0x7e + +#define FONT_GETSYM_IMPL(rettype, symtype, fontname) \ + const rettype *fontname##_getsym(const struct Utf8Char *ch) { \ + const uint8_t byte0 = ch->bytes[0]; \ + if (byte0 < ASCII_START) { \ + goto fail; \ + } \ + if (byte0 <= ASCII_END) { \ + return &fontname##_ascii[byte0 - ASCII_START]; \ + } \ + for (uint8_t i = 0; i < sizeof(fontname##_extra) / sizeof(fontname##_extra[0]); i++) { \ + const struct symtype *sym = &fontname##_extra[i]; \ + const uint32_t table_ch = pgm_read_dword(&sym->utf.uint); \ + if (table_ch == ch->uint) { \ + return &sym->graphic; \ + } \ + } \ + fail: return &fontname ## _extra[0].graphic; \ + } -// utf8 characters list ending with empty struct -static const struct utf_glyph5x PROGMEM font57_extra[F57_NUM_EXTRA] = { - {.symbol="�", {{0xFE, 0x82, 0x82, 0x82, 0xFE}}}, // box - error code - {.symbol="×", {{0x22, 0x14, 0x08, 0x14, 0x22}}}, // cross - {.symbol="↑", {{0x08, 0x04, 0x3e, 0x04, 0x08}}}, // arrow_up - {.symbol="↓", {{0x08, 0x10, 0x3e, 0x10, 0x08}}}, // arrow_down - {.symbol="←", {{0x08, 0x1c, 0x2a, 0x08, 0x08}}}, // arrow_left - {.symbol="→", {{0x08, 0x08, 0x2a, 0x1c, 0x08}}}, // arrow_right - {.symbol="⏰", {{0x1c, 0x22, 0x2e, 0x2a, 0x1c}}}, // clock - {.symbol="⌛", {{0x63, 0x55, 0x4d, 0x55, 0x63}}}, // hourglass - {.symbol="☸", {{0x1c, 0x22, 0x2a, 0x22, 0x1c}}}, // wheel - {.symbol="⏎", {{0x10, 0x38, 0x54, 0x10, 0x1e}}}, // return - {.symbol="🌡", {{0x60, 0x9e, 0x81, 0x9e, 0x6a}}}, // thermometer - {.symbol="°", {{0x00, 0x07, 0x05, 0x07, 0x00}}}, // degree - {.symbol="μ", {{0x7C, 0x20, 0x20, 0x10, 0x3C}}}, // micro - {.symbol="🔙", {{0x04, 0x4e, 0x55, 0x44, 0x38}}}, // back - {.symbol="▶", {{0x7f, 0x3e, 0x1c, 0x08, 0x00}}}, // tri_right - {.symbol="◀", {{0x00, 0x08, 0x1c, 0x3e, 0x7f}}}, // tri_left -}; -#define F45_NUM_ASCII -static const font4x_bitmap_t PROGMEM font45_ascii[F45_NUM_ASCII] = { - {{0x0e, 0x11, 0x11, 0x0e}}, // 0 - {{0x04, 0x12, 0x1f, 0x10}}, // 1 - {{0x12, 0x19, 0x15, 0x12}}, // 2 - {{0x0a, 0x11, 0x15, 0x0a}}, // 3 - {{0x07, 0x04, 0x1e, 0x04}}, // 4 - {{0x17, 0x15, 0x15, 0x09}}, // 5 - {{0x0e, 0x15, 0x15, 0x09}}, // 6 - {{0x11, 0x09, 0x05, 0x03}}, // 7 - {{0x0a, 0x15, 0x15, 0x0a}}, // 8 - {{0x12, 0x15, 0x15, 0x0a}}, // 9 - {{0x00, 0x00, 0x00, 0x00}}, // ' ' -}; +FONT_GETSYM_IMPL(font5x_bitmap_t, utf_glyph5x, font57) +FONT_GETSYM_IMPL(font4x_bitmap_t, utf_glyph4x, font45) +FONT_GETSYM_IMPL(font3x_bitmap_t, utf_glyph3x, font35) -#define F45_NUM_EXTRA 7 -static const struct utf_glyph4x PROGMEM font45_extra[F45_NUM_EXTRA] = { - {.symbol="�", {{0x1f, 0x11, 0x11, 0x1f}}}, // box - error code - {.symbol="°", {{0x02, 0x05, 0x02, 0x00}}}, - {.symbol="-", {{0x00, 0x04, 0x04, 0x04}}}, - {.symbol="C", {{0x0e, 0x11, 0x11, 0x0a}}}, - {.symbol="P", {{0x1f, 0x05, 0x05, 0x02}}}, - {.symbol="M", {{0x1f, 0x01, 0x02, 0x1f}}}, - {.symbol=".", {{0x00, 0x18, 0x18, 0x00}}}, -}; +#if 0 const font5x_bitmap_t *font57_getsym(const struct Utf8Char *ch) { const uint8_t byte0 = ch->bytes[0]; - if (byte0 < F57_ASCII_START) { - // low ASCII is not supported. + if (byte0 < ASCII_START) { goto fail; } - - if (byte0 <= F57_ASCII_END) { - // valid ASCII at hard positions. - // In this case only the first byte is significant. - return &font57_ascii[byte0 - F57_ASCII_START]; + if (byte0 <= ASCII_END) { + return &font57_ascii[byte0 - ASCII_START]; } - - // search UTF8 - for (uint8_t i = 0; i < F57_NUM_EXTRA; i++) { + for (uint8_t i = 0; i < sizeof(font57_extra) / sizeof(font57_extra[0]); i++) { const struct utf_glyph5x *sym = &font57_extra[i]; const uint32_t table_ch = pgm_read_dword(&sym->uint); if (table_ch == ch->uint) { return &sym->graphic; } } - - fail: +fail: return &font57_extra[0].graphic; // replacement character } - -const font4x_bitmap_t *font45_getsym(const struct Utf8Char *ch) -{ - const uint8_t byte0 = ch->bytes[0]; - if (byte0 == ' ') { - return &font45_ascii[10]; - } - if (byte0 >= '0' && byte0 <= '9') { - return &font45_ascii[byte0 - '0']; - } - - // search UTF8 - for (uint8_t i = 0; i < F45_NUM_EXTRA; i++) { - const struct utf_glyph4x *sym = &font45_extra[i]; - const uint32_t table_ch = pgm_read_dword(&sym->uint); - if (table_ch == ch->uint) { - return &sym->graphic; - } - } - - fail: - return &font45_extra[0].graphic; // replacement character -} +#endif diff --git a/font_35.inc.c b/font_35.inc.c new file mode 100644 index 0000000..6e48af8 --- /dev/null +++ b/font_35.inc.c @@ -0,0 +1,102 @@ +static const font3x_bitmap_t PROGMEM font35_ascii[] = { + {{0x00, 0x00, 0x00}}, + {{0x00, 0x17, 0x00}}, + {{0x03, 0x00, 0x03}}, + {{0x0a, 0x1f, 0x0a}}, + {{0x16, 0x1f, 0x1a}}, + {{0x19, 0x04, 0x13}}, + {{0x1d, 0x17, 0x19}}, + {{0x00, 0x03, 0x00}}, + {{0x0e, 0x11, 0x00}}, + {{0x11, 0x0e, 0x00}}, + {{0x05, 0x02, 0x05}}, + {{0x04, 0x0e, 0x04}}, + {{0x10, 0x08, 0x00}}, + {{0x04, 0x04, 0x04}}, + {{0x18, 0x18, 0x00}}, + {{0x18, 0x04, 0x03}}, + {{0x1f, 0x11, 0x1f}}, + {{0x12, 0x1f, 0x10}}, + {{0x1d, 0x15, 0x17}}, + {{0x11, 0x15, 0x1f}}, + {{0x07, 0x04, 0x1f}}, + {{0x17, 0x15, 0x1d}}, + {{0x1f, 0x15, 0x1d}}, + {{0x03, 0x01, 0x1f}}, + {{0x1f, 0x15, 0x1f}}, + {{0x17, 0x15, 0x1f}}, + {{0x00, 0x0a, 0x00}}, + {{0x10, 0x0a, 0x00}}, + {{0x04, 0x0a, 0x11}}, + {{0x0a, 0x0a, 0x0a}}, + {{0x11, 0x0a, 0x04}}, + {{0x01, 0x15, 0x07}}, + {{0x0f, 0x11, 0x17}}, + {{0x1f, 0x05, 0x1f}}, + {{0x1f, 0x15, 0x1e}}, + {{0x1f, 0x11, 0x11}}, + {{0x1f, 0x11, 0x0e}}, + {{0x1f, 0x15, 0x11}}, + {{0x1f, 0x05, 0x01}}, + {{0x1f, 0x11, 0x1d}}, + {{0x1f, 0x04, 0x1f}}, + {{0x11, 0x1f, 0x11}}, + {{0x19, 0x11, 0x1f}}, + {{0x1f, 0x04, 0x1b}}, + {{0x1f, 0x10, 0x10}}, + {{0x1f, 0x03, 0x1f}}, + {{0x1f, 0x01, 0x1e}}, + {{0x1f, 0x11, 0x1f}}, + {{0x1f, 0x05, 0x07}}, + {{0x0f, 0x09, 0x1f}}, + {{0x1f, 0x0d, 0x17}}, + {{0x17, 0x15, 0x1d}}, + {{0x01, 0x1f, 0x01}}, + {{0x1f, 0x10, 0x1f}}, + {{0x0f, 0x10, 0x0f}}, + {{0x1f, 0x18, 0x1f}}, + {{0x1b, 0x04, 0x1b}}, + {{0x07, 0x1c, 0x07}}, + {{0x19, 0x15, 0x13}}, + {{0x00, 0x1f, 0x11}}, + {{0x03, 0x04, 0x18}}, + {{0x11, 0x1f, 0x00}}, + {{0x02, 0x01, 0x02}}, + {{0x10, 0x10, 0x10}}, + {{0x01, 0x02, 0x00}}, + {{0x1d, 0x15, 0x1e}}, + {{0x1f, 0x14, 0x1c}}, + {{0x1c, 0x14, 0x14}}, + {{0x1c, 0x14, 0x1f}}, + {{0x0f, 0x15, 0x17}}, + {{0x04, 0x1f, 0x05}}, + {{0x17, 0x15, 0x0f}}, + {{0x1f, 0x04, 0x1c}}, + {{0x14, 0x1d, 0x10}}, + {{0x18, 0x10, 0x1d}}, + {{0x1f, 0x08, 0x14}}, + {{0x11, 0x1f, 0x10}}, + {{0x1c, 0x0c, 0x1c}}, + {{0x1c, 0x04, 0x18}}, + {{0x1c, 0x14, 0x1c}}, + {{0x1e, 0x0a, 0x0e}}, + {{0x0e, 0x0a, 0x1e}}, + {{0x1c, 0x04, 0x04}}, + {{0x16, 0x16, 0x1a}}, + {{0x02, 0x1f, 0x12}}, + {{0x1e, 0x10, 0x1e}}, + {{0x0e, 0x10, 0x0e}}, + {{0x1c, 0x18, 0x1c}}, + {{0x14, 0x08, 0x14}}, + {{0x16, 0x14, 0x1e}}, + {{0x1a, 0x16, 0x16}}, + {{0x04, 0x0e, 0x11}}, + {{0x00, 0x1f, 0x00}}, + {{0x11, 0x0e, 0x04}}, + {{0x04, 0x02, 0x06}}, +}; + +static const struct utf_glyph3x PROGMEM font35_extra[] = { + {.utf={.symbol="�"}, {{0x1f, 0x1f, 0x1f}}}, + {.utf={.symbol="°"}, {{0x07, 0x05, 0x07}}}, +}; diff --git a/font_45.inc.c b/font_45.inc.c new file mode 100644 index 0000000..8db4f48 --- /dev/null +++ b/font_45.inc.c @@ -0,0 +1,102 @@ +static const font4x_bitmap_t PROGMEM font45_ascii[] = { + {{0x00, 0x00, 0x00, 0x00}}, + {{0x00, 0x17, 0x17, 0x00}}, + {{0x03, 0x00, 0x03, 0x00}}, + {{0x0a, 0x1f, 0x0a, 0x1f}}, + {{0x12, 0x1d, 0x17, 0x09}}, + {{0x12, 0x08, 0x04, 0x12}}, + {{0x1f, 0x15, 0x1f, 0x14}}, + {{0x00, 0x03, 0x00, 0x00}}, + {{0x00, 0x0e, 0x11, 0x00}}, + {{0x00, 0x11, 0x0e, 0x00}}, + {{0x05, 0x02, 0x02, 0x05}}, + {{0x04, 0x0e, 0x04, 0x00}}, + {{0x00, 0x10, 0x08, 0x00}}, + {{0x00, 0x04, 0x04, 0x04}}, + {{0x00, 0x18, 0x18, 0x00}}, + {{0x10, 0x08, 0x04, 0x02}}, + {{0x0e, 0x11, 0x11, 0x0e}}, + {{0x04, 0x12, 0x1f, 0x10}}, + {{0x12, 0x19, 0x15, 0x12}}, + {{0x0a, 0x11, 0x15, 0x0a}}, + {{0x07, 0x04, 0x1e, 0x04}}, + {{0x17, 0x15, 0x15, 0x09}}, + {{0x0e, 0x15, 0x15, 0x09}}, + {{0x11, 0x09, 0x05, 0x03}}, + {{0x0a, 0x15, 0x15, 0x0a}}, + {{0x12, 0x15, 0x15, 0x0a}}, + {{0x00, 0x00, 0x0a, 0x00}}, + {{0x00, 0x10, 0x0a, 0x00}}, + {{0x04, 0x0a, 0x11, 0x00}}, + {{0x0a, 0x0a, 0x0a, 0x00}}, + {{0x11, 0x0a, 0x04, 0x00}}, + {{0x01, 0x01, 0x15, 0x02}}, + {{0x1f, 0x11, 0x17, 0x16}}, + {{0x1e, 0x05, 0x05, 0x1e}}, + {{0x1f, 0x15, 0x15, 0x0a}}, + {{0x0e, 0x11, 0x11, 0x0a}}, + {{0x1f, 0x11, 0x11, 0x0e}}, + {{0x1f, 0x15, 0x15, 0x11}}, + {{0x1f, 0x05, 0x05, 0x01}}, + {{0x0e, 0x11, 0x15, 0x0d}}, + {{0x1f, 0x04, 0x04, 0x1f}}, + {{0x00, 0x11, 0x1f, 0x11}}, + {{0x09, 0x11, 0x11, 0x0f}}, + {{0x1f, 0x04, 0x0a, 0x11}}, + {{0x1f, 0x10, 0x10, 0x10}}, + {{0x1f, 0x03, 0x01, 0x1f}}, + {{0x1f, 0x02, 0x04, 0x1f}}, + {{0x0e, 0x11, 0x11, 0x0e}}, + {{0x1f, 0x05, 0x05, 0x02}}, + {{0x0e, 0x11, 0x19, 0x1e}}, + {{0x1f, 0x05, 0x0d, 0x12}}, + {{0x12, 0x15, 0x15, 0x09}}, + {{0x01, 0x1f, 0x01, 0x00}}, + {{0x0f, 0x10, 0x10, 0x0f}}, + {{0x07, 0x08, 0x10, 0x1f}}, + {{0x1f, 0x08, 0x18, 0x1f}}, + {{0x1b, 0x04, 0x0c, 0x13}}, + {{0x03, 0x1c, 0x04, 0x03}}, + {{0x19, 0x15, 0x15, 0x13}}, + {{0x00, 0x1f, 0x11, 0x00}}, + {{0x02, 0x04, 0x08, 0x10}}, + {{0x00, 0x11, 0x1f, 0x00}}, + {{0x02, 0x01, 0x02, 0x00}}, + {{0x10, 0x10, 0x10, 0x10}}, + {{0x00, 0x01, 0x02, 0x00}}, + {{0x19, 0x15, 0x15, 0x1e}}, + {{0x1f, 0x14, 0x14, 0x08}}, + {{0x0c, 0x12, 0x12, 0x12}}, + {{0x08, 0x14, 0x14, 0x1f}}, + {{0x0e, 0x15, 0x15, 0x16}}, + {{0x04, 0x1e, 0x05, 0x01}}, + {{0x13, 0x15, 0x15, 0x0f}}, + {{0x1f, 0x04, 0x04, 0x18}}, + {{0x00, 0x14, 0x1d, 0x10}}, + {{0x18, 0x10, 0x1d, 0x00}}, + {{0x1f, 0x08, 0x14, 0x12}}, + {{0x11, 0x1f, 0x10, 0x00}}, + {{0x1e, 0x06, 0x06, 0x1e}}, + {{0x1e, 0x02, 0x02, 0x1c}}, + {{0x0c, 0x12, 0x12, 0x0c}}, + {{0x1f, 0x05, 0x05, 0x02}}, + {{0x02, 0x05, 0x05, 0x1f}}, + {{0x1e, 0x04, 0x02, 0x06}}, + {{0x10, 0x16, 0x1a, 0x02}}, + {{0x02, 0x0f, 0x12, 0x10}}, + {{0x0e, 0x10, 0x10, 0x1e}}, + {{0x06, 0x08, 0x10, 0x0e}}, + {{0x1e, 0x18, 0x18, 0x1e}}, + {{0x12, 0x0c, 0x0c, 0x12}}, + {{0x17, 0x14, 0x14, 0x0f}}, + {{0x12, 0x1a, 0x16, 0x12}}, + {{0x00, 0x04, 0x1f, 0x11}}, + {{0x00, 0x00, 0x1f, 0x00}}, + {{0x00, 0x11, 0x1f, 0x04}}, + {{0x02, 0x04, 0x02, 0x04}}, +}; + +static const struct utf_glyph4x PROGMEM font45_extra[] = { + {.utf={.symbol="�"}, {{0x1f, 0x11, 0x11, 0x1f}}}, + {.utf={.symbol="°"}, {{0x07, 0x05, 0x07, 0x00}}}, +}; diff --git a/font_57.inc.c b/font_57.inc.c new file mode 100644 index 0000000..79f9ea2 --- /dev/null +++ b/font_57.inc.c @@ -0,0 +1,116 @@ +static const font5x_bitmap_t PROGMEM font57_ascii[] = { + {{0x00, 0x00, 0x00, 0x00, 0x00}}, + {{0x00, 0x00, 0x5f, 0x00, 0x00}}, + {{0x00, 0x07, 0x00, 0x07, 0x00}}, + {{0x14, 0x7f, 0x14, 0x7f, 0x14}}, + {{0x24, 0x2a, 0x7f, 0x2a, 0x12}}, + {{0x23, 0x13, 0x08, 0x64, 0x62}}, + {{0x36, 0x49, 0x55, 0x22, 0x50}}, + {{0x00, 0x05, 0x03, 0x00, 0x00}}, + {{0x00, 0x1c, 0x22, 0x41, 0x00}}, + {{0x00, 0x41, 0x22, 0x1c, 0x00}}, + {{0x14, 0x08, 0x3e, 0x08, 0x14}}, + {{0x08, 0x08, 0x3e, 0x08, 0x08}}, + {{0x00, 0x50, 0x30, 0x00, 0x00}}, + {{0x08, 0x08, 0x08, 0x08, 0x08}}, + {{0x00, 0x60, 0x60, 0x00, 0x00}}, + {{0x20, 0x10, 0x08, 0x04, 0x02}}, + {{0x3e, 0x51, 0x49, 0x45, 0x3e}}, + {{0x00, 0x42, 0x7f, 0x40, 0x00}}, + {{0x42, 0x61, 0x51, 0x49, 0x46}}, + {{0x21, 0x41, 0x45, 0x4b, 0x31}}, + {{0x18, 0x14, 0x12, 0x7f, 0x10}}, + {{0x27, 0x45, 0x45, 0x45, 0x39}}, + {{0x3c, 0x4a, 0x49, 0x49, 0x30}}, + {{0x01, 0x71, 0x09, 0x05, 0x03}}, + {{0x36, 0x49, 0x49, 0x49, 0x36}}, + {{0x06, 0x49, 0x49, 0x29, 0x1e}}, + {{0x00, 0x36, 0x36, 0x00, 0x00}}, + {{0x00, 0x56, 0x36, 0x00, 0x00}}, + {{0x08, 0x14, 0x22, 0x41, 0x00}}, + {{0x14, 0x14, 0x14, 0x14, 0x14}}, + {{0x00, 0x41, 0x22, 0x14, 0x08}}, + {{0x02, 0x01, 0x51, 0x09, 0x06}}, + {{0x32, 0x49, 0x79, 0x41, 0x3e}}, + {{0x7e, 0x11, 0x11, 0x11, 0x7e}}, + {{0x7f, 0x49, 0x49, 0x49, 0x36}}, + {{0x3e, 0x41, 0x41, 0x41, 0x22}}, + {{0x7f, 0x41, 0x41, 0x22, 0x1c}}, + {{0x7f, 0x49, 0x49, 0x49, 0x41}}, + {{0x7f, 0x09, 0x09, 0x09, 0x01}}, + {{0x3e, 0x41, 0x49, 0x49, 0x7a}}, + {{0x7f, 0x08, 0x08, 0x08, 0x7f}}, + {{0x00, 0x41, 0x7f, 0x41, 0x00}}, + {{0x20, 0x40, 0x41, 0x3f, 0x01}}, + {{0x7f, 0x08, 0x14, 0x22, 0x41}}, + {{0x7f, 0x40, 0x40, 0x40, 0x40}}, + {{0x7f, 0x02, 0x0c, 0x02, 0x7f}}, + {{0x7f, 0x04, 0x08, 0x10, 0x7f}}, + {{0x3e, 0x41, 0x41, 0x41, 0x3e}}, + {{0x7f, 0x09, 0x09, 0x09, 0x06}}, + {{0x3e, 0x41, 0x51, 0x21, 0x5e}}, + {{0x7f, 0x09, 0x19, 0x29, 0x46}}, + {{0x46, 0x49, 0x49, 0x49, 0x31}}, + {{0x01, 0x01, 0x7f, 0x01, 0x01}}, + {{0x3f, 0x40, 0x40, 0x40, 0x3f}}, + {{0x1f, 0x20, 0x40, 0x20, 0x1f}}, + {{0x3f, 0x40, 0x38, 0x40, 0x3f}}, + {{0x63, 0x14, 0x08, 0x14, 0x63}}, + {{0x07, 0x08, 0x70, 0x08, 0x07}}, + {{0x61, 0x51, 0x49, 0x45, 0x43}}, + {{0x00, 0x7f, 0x41, 0x41, 0x00}}, + {{0x02, 0x04, 0x08, 0x10, 0x20}}, + {{0x00, 0x41, 0x41, 0x7f, 0x00}}, + {{0x04, 0x02, 0x01, 0x02, 0x04}}, + {{0x40, 0x40, 0x40, 0x40, 0x40}}, + {{0x00, 0x01, 0x02, 0x04, 0x00}}, + {{0x20, 0x54, 0x54, 0x54, 0x78}}, + {{0x7f, 0x48, 0x44, 0x44, 0x38}}, + {{0x38, 0x44, 0x44, 0x44, 0x20}}, + {{0x38, 0x44, 0x44, 0x48, 0x7f}}, + {{0x38, 0x54, 0x54, 0x54, 0x18}}, + {{0x08, 0x7e, 0x09, 0x01, 0x02}}, + {{0x0c, 0x52, 0x52, 0x52, 0x3e}}, + {{0x7f, 0x08, 0x04, 0x04, 0x78}}, + {{0x00, 0x44, 0x7d, 0x40, 0x00}}, + {{0x20, 0x40, 0x44, 0x3d, 0x00}}, + {{0x7f, 0x10, 0x28, 0x44, 0x00}}, + {{0x00, 0x41, 0x7f, 0x40, 0x00}}, + {{0x7c, 0x04, 0x18, 0x04, 0x78}}, + {{0x7c, 0x08, 0x04, 0x04, 0x78}}, + {{0x38, 0x44, 0x44, 0x44, 0x38}}, + {{0x7c, 0x14, 0x14, 0x14, 0x08}}, + {{0x08, 0x14, 0x14, 0x18, 0x7c}}, + {{0x7c, 0x08, 0x04, 0x04, 0x08}}, + {{0x48, 0x54, 0x54, 0x54, 0x20}}, + {{0x04, 0x3f, 0x44, 0x40, 0x20}}, + {{0x3c, 0x40, 0x40, 0x20, 0x7c}}, + {{0x1c, 0x20, 0x40, 0x20, 0x1c}}, + {{0x3c, 0x40, 0x30, 0x40, 0x3c}}, + {{0x44, 0x28, 0x10, 0x28, 0x44}}, + {{0x0c, 0x50, 0x50, 0x50, 0x3c}}, + {{0x44, 0x64, 0x54, 0x4c, 0x44}}, + {{0x00, 0x08, 0x36, 0x41, 0x00}}, + {{0x00, 0x00, 0x7f, 0x00, 0x00}}, + {{0x00, 0x41, 0x36, 0x08, 0x00}}, + {{0x10, 0x08, 0x08, 0x10, 0x08}}, +}; + +static const struct utf_glyph5x PROGMEM font57_extra[] = { + {.utf={.symbol="�"}, {{0x7f, 0x41, 0x41, 0x41, 0x7f}}}, + {.utf={.symbol="×"}, {{0x22, 0x14, 0x08, 0x14, 0x22}}}, + {.utf={.symbol="↑"}, {{0x08, 0x04, 0x3e, 0x04, 0x08}}}, + {.utf={.symbol="↓"}, {{0x08, 0x10, 0x3e, 0x10, 0x08}}}, + {.utf={.symbol="←"}, {{0x08, 0x1c, 0x2a, 0x08, 0x08}}}, + {.utf={.symbol="→"}, {{0x08, 0x08, 0x2a, 0x1c, 0x08}}}, + {.utf={.symbol="⏰"}, {{0x1c, 0x22, 0x2e, 0x2a, 0x1c}}}, + {.utf={.symbol="⌛"}, {{0x63, 0x55, 0x4d, 0x55, 0x63}}}, + {.utf={.symbol="☸"}, {{0x1c, 0x22, 0x2a, 0x22, 0x1c}}}, + {.utf={.symbol="⏎"}, {{0x10, 0x38, 0x54, 0x10, 0x1e}}}, + {.utf={.symbol="🌡"}, {{0x20, 0x7e, 0x79, 0x7e, 0x2a}}}, + {.utf={.symbol="°"}, {{0x00, 0x07, 0x05, 0x07, 0x00}}}, + {.utf={.symbol="μ"}, {{0x7c, 0x20, 0x20, 0x10, 0x3c}}}, + {.utf={.symbol="🔙"}, {{0x04, 0x4e, 0x55, 0x44, 0x38}}}, + {.utf={.symbol="▶"}, {{0x7f, 0x3e, 0x1c, 0x08, 0x00}}}, + {.utf={.symbol="◀"}, {{0x00, 0x08, 0x1c, 0x3e, 0x7f}}}, +}; diff --git a/fontedit_35.c b/fontedit_35.c index 7e12700..df3f297 100644 --- a/fontedit_35.c +++ b/fontedit_35.c @@ -1,4 +1,7 @@ -const char* symbols[] = { +#define FONT_W 3 +#define FONT_H 5 + +const char* font_ascii[] = { // 32 " " " ", " ", @@ -569,7 +572,9 @@ const char* symbols[] = { "x x", " ", " ", +}; +const char *font_extras[] = { // Extras // Extra 0 "°" "xxx", @@ -585,3 +590,9 @@ const char* symbols[] = { " ", }; +const char *font_extras_utf[] = { + "�", + "°", +}; + +#include "fontedit_render.inc.c" diff --git a/fontedit_45.c b/fontedit_45.c index ef034bd..e4402bf 100644 --- a/fontedit_45.c +++ b/fontedit_45.c @@ -1,4 +1,7 @@ -const char *symbols[] = { +#define FONT_W 4 +#define FONT_H 5 + +const char *font_ascii[] = { // 32 " " " ", " ", @@ -270,8 +273,8 @@ const char *symbols[] = { "x ", "xxxx", // 77 "M" - "## #", - "# ##", + "#XX#", + "#X #", "# #", "# #", "# #", @@ -332,7 +335,7 @@ const char *symbols[] = { // 87 "W" "x x", "x x", - "xxxx", + "x x", "xxxx", "x xx", // 88 "X" @@ -569,9 +572,9 @@ const char *symbols[] = { " x x", " ", " ", +}; - // Extras - +const char *font_extras[] = { // Extra 0 - unknown symbol "####", "# #", @@ -584,5 +587,12 @@ const char *symbols[] = { "xxx ", " ", " ", +}; +const char *font_extras_utf[] = { + "�", + "°", }; + + +#include "fontedit_render.inc.c" diff --git a/fontedit_57.c b/fontedit_57.c index 1b9e7b3..4742f39 100644 --- a/fontedit_57.c +++ b/fontedit_57.c @@ -1,4 +1,7 @@ -const char *symbols[] = { +#define FONT_W 5 +#define FONT_H 7 + +const char *font_ascii[] = { // 32 " " " ", " ", @@ -759,7 +762,9 @@ const char *symbols[] = { "# # ", " ", " ", +}; +const char *font_extras[] = { // Extras // Extra 0 @@ -892,52 +897,23 @@ const char *symbols[] = { " #", }; -const char* extra_utf[] = { +const char *font_extras_utf[] = { "�", "×", "↑", "↓", "←", "→", - "⏰", + "⏰", // clock "⌛", "☸", "⏎", "🌡", "°", "μ", - "🔙", + "🔙", // back "▶", "◀", }; -#include -#include -#include - -void main() { - printf("static const font5x_bitmap_t PROGMEM font57[] = {\n"); - - const int fw = 5; - const int fh = 7; - for (int i = 32; i < 127; i++) { - uint8_t line[8] = {}; - for(int j = 0; j < fh; j++) { - const char *row = symbols[(i - 32)*fh + j]; - for(int k = 0; k < fw; k++) { - line[k] |= (row[k] != 32) << j; - } - } - - printf(" {{"); - for(int k = 0; k < fw; k++) { - if (k > 0) printf(", "); - printf("0x%02x", line[k]); - } - printf("}},\n"); - } - - printf("};\n"); - - // TODO specials -} +#include "fontedit_render.inc.c" diff --git a/fontedit_gen45.c b/fontedit_gen45.c deleted file mode 100644 index 9f005de..0000000 --- a/fontedit_gen45.c +++ /dev/null @@ -1,40 +0,0 @@ -#include -#include -#include - -struct X { - uint8_t data[4]; -}; - -const struct X font[] = { - {{0x0e, 0x11, 0x11, 0x0e}}, // 0 - {{0x04, 0x12, 0x1f, 0x10}}, // 1 - {{0x12, 0x19, 0x15, 0x12}}, // 2 - {{0x0a, 0x11, 0x15, 0x0a}}, // 3 - {{0x07, 0x04, 0x1e, 0x04}}, // 4 - {{0x17, 0x15, 0x15, 0x09}}, // 5 - {{0x0e, 0x15, 0x15, 0x09}}, // 6 - {{0x11, 0x09, 0x05, 0x03}}, // 7 - {{0x0a, 0x15, 0x15, 0x0a}}, // 8 - {{0x12, 0x15, 0x15, 0x0a}}, // 9 - {{0x00, 0x00, 0x00, 0x00}}, // ' ' -}; - -void main() { - printf("const char* symbols[] = {\n"); - for(int c = 0; c < 11; c++) { - printf(" // %d \"%c\"\n", c+'0', c+'0'); - for(int j=0;j<5;j++){ - printf(" \""); - for(int k=0;k<4;k++){ - if (font[c].data[k]& (1< -#include -#include - -struct X { - uint8_t data[4]; -}; - -const struct X font[] = { - {{0x1f, 0x11, 0x11, 0x1f}}, - {{0x02, 0x05, 0x02, 0x00}}, - {{0x00, 0x04, 0x04, 0x04}}, - {{0x0e, 0x11, 0x11, 0x0a}}, - {{0x1f, 0x05, 0x05, 0x02}}, - {{0x1f, 0x01, 0x02, 0x1f}}, - {{0x00, 0x18, 0x18, 0x00}}, -}; - -void main() { - printf("const char* symbols[] = {\n"); - for(int c = 0; c < 7; c++) { - printf(" // %d \"%c\"\n", c+'0', c+'0'); - for(int j=0;j<5;j++){ - printf(" \""); - for(int k=0;k<4;k++){ - if (font[c].data[k]& (1< -#include -#include - -struct X { - uint8_t data[5]; -}; - -const struct X font[] = { - {{0x00, 0x00, 0x00, 0x00, 0x00}}, // 0x20 - {{0x00, 0x00, 0x5f, 0x00, 0x00}}, // ! 0x21 - {{0x00, 0x07, 0x00, 0x07, 0x00}}, // \" 0x22 - {{0x14, 0x7f, 0x14, 0x7f, 0x14}}, // # 0x23 - {{0x24, 0x2a, 0x7f, 0x2a, 0x12}}, // $ 0x24 - {{0x23, 0x13, 0x08, 0x64, 0x62}}, // % 0x25 - {{0x36, 0x49, 0x55, 0x22, 0x50}}, // & 0x26 - {{0x00, 0x05, 0x03, 0x00, 0x00}}, // ' 0x27 - {{0x00, 0x1c, 0x22, 0x41, 0x00}}, // ( 0x28 - {{0x00, 0x41, 0x22, 0x1c, 0x00}}, // ) 0x29 - {{0x14, 0x08, 0x3e, 0x08, 0x14}}, // * 0x2a - {{0x08, 0x08, 0x3e, 0x08, 0x08}}, // + 0x2b - {{0x00, 0x50, 0x30, 0x00, 0x00}}, // , 0x2c - {{0x08, 0x08, 0x08, 0x08, 0x08}}, // - 0x2d - {{0x00, 0x60, 0x60, 0x00, 0x00}}, // . 0x2e - {{0x20, 0x10, 0x08, 0x04, 0x02}}, // / 0x2f - {{0x3e, 0x51, 0x49, 0x45, 0x3e}}, // 0 0x30 - {{0x00, 0x42, 0x7f, 0x40, 0x00}}, // 1 0x31 - {{0x42, 0x61, 0x51, 0x49, 0x46}}, // 2 0x32 - {{0x21, 0x41, 0x45, 0x4b, 0x31}}, // 3 0x33 - {{0x18, 0x14, 0x12, 0x7f, 0x10}}, // 4 0x34 - {{0x27, 0x45, 0x45, 0x45, 0x39}}, // 5 0x35 - {{0x3c, 0x4a, 0x49, 0x49, 0x30}}, // 6 0x36 - {{0x01, 0x71, 0x09, 0x05, 0x03}}, // 7 0x37 - {{0x36, 0x49, 0x49, 0x49, 0x36}}, // 8 0x38 - {{0x06, 0x49, 0x49, 0x29, 0x1e}}, // 9 0x39 - {{0x00, 0x36, 0x36, 0x00, 0x00}}, // : 0x3a - {{0x00, 0x56, 0x36, 0x00, 0x00}}, // ; 0x3b - {{0x08, 0x14, 0x22, 0x41, 0x00}}, // < 0x3c - {{0x14, 0x14, 0x14, 0x14, 0x14}}, // = 0x3d - {{0x00, 0x41, 0x22, 0x14, 0x08}}, // > 0x3e - {{0x02, 0x01, 0x51, 0x09, 0x06}}, // ? 0x3f - {{0x32, 0x49, 0x79, 0x41, 0x3e}}, // @ 0x40 - {{0x7e, 0x11, 0x11, 0x11, 0x7e}}, // A 0x41 - {{0x7f, 0x49, 0x49, 0x49, 0x36}}, // B 0x42 - {{0x3e, 0x41, 0x41, 0x41, 0x22}}, // C 0x43 - {{0x7f, 0x41, 0x41, 0x22, 0x1c}}, // D 0x44 - {{0x7f, 0x49, 0x49, 0x49, 0x41}}, // E 0x45 - {{0x7f, 0x09, 0x09, 0x09, 0x01}}, // F 0x46 - {{0x3e, 0x41, 0x49, 0x49, 0x7a}}, // G 0x47 - {{0x7f, 0x08, 0x08, 0x08, 0x7f}}, // H 0x48 - {{0x00, 0x41, 0x7f, 0x41, 0x00}}, // I 0x49 - {{0x20, 0x40, 0x41, 0x3f, 0x01}}, // J 0x4a - {{0x7f, 0x08, 0x14, 0x22, 0x41}}, // K 0x4b - {{0x7f, 0x40, 0x40, 0x40, 0x40}}, // L 0x4c - {{0x7f, 0x02, 0x0c, 0x02, 0x7f}}, // M 0x4d - {{0x7f, 0x04, 0x08, 0x10, 0x7f}}, // N 0x4e - {{0x3e, 0x41, 0x41, 0x41, 0x3e}}, // O 0x4f - {{0x7f, 0x09, 0x09, 0x09, 0x06}}, // P 0x50 - {{0x3e, 0x41, 0x51, 0x21, 0x5e}}, // Q 0x51 - {{0x7f, 0x09, 0x19, 0x29, 0x46}}, // R 0x52 - {{0x46, 0x49, 0x49, 0x49, 0x31}}, // S 0x53 - {{0x01, 0x01, 0x7f, 0x01, 0x01}}, // T 0x54 - {{0x3f, 0x40, 0x40, 0x40, 0x3f}}, // U 0x55 - {{0x1f, 0x20, 0x40, 0x20, 0x1f}}, // V 0x56 - {{0x3f, 0x40, 0x38, 0x40, 0x3f}}, // W 0x57 - {{0x63, 0x14, 0x08, 0x14, 0x63}}, // X 0x58 - {{0x07, 0x08, 0x70, 0x08, 0x07}}, // Y 0x59 - {{0x61, 0x51, 0x49, 0x45, 0x43}}, // Z 0x5a - {{0x00, 0x7f, 0x41, 0x41, 0x00}}, // [ 0x5b - {{0x02, 0x04, 0x08, 0x10, 0x20}}, // \\ 0x5c - {{0x00, 0x41, 0x41, 0x7f, 0x00}}, // ] 0x5d - {{0x04, 0x02, 0x01, 0x02, 0x04}}, // ^ 0x5e - {{0x40, 0x40, 0x40, 0x40, 0x40}}, // _ 0x5f - {{0x00, 0x01, 0x02, 0x04, 0x00}}, // ` 0x60 - {{0x20, 0x54, 0x54, 0x54, 0x78}}, // a 0x61 - {{0x7f, 0x48, 0x44, 0x44, 0x38}}, // b 0x62 - {{0x38, 0x44, 0x44, 0x44, 0x20}}, // c 0x63 - {{0x38, 0x44, 0x44, 0x48, 0x7f}}, // d 0x64 - {{0x38, 0x54, 0x54, 0x54, 0x18}}, // e 0x65 - {{0x08, 0x7e, 0x09, 0x01, 0x02}}, // f 0x66 - {{0x0c, 0x52, 0x52, 0x52, 0x3e}}, // g 0x67 - {{0x7f, 0x08, 0x04, 0x04, 0x78}}, // h 0x68 - {{0x00, 0x44, 0x7d, 0x40, 0x00}}, // i 0x69 - {{0x20, 0x40, 0x44, 0x3d, 0x00}}, // j 0x6a - {{0x7f, 0x10, 0x28, 0x44, 0x00}}, // k 0x6b - {{0x00, 0x41, 0x7f, 0x40, 0x00}}, // l 0x6c - {{0x7c, 0x04, 0x18, 0x04, 0x78}}, // m 0x6d - {{0x7c, 0x08, 0x04, 0x04, 0x78}}, // n 0x6e - {{0x38, 0x44, 0x44, 0x44, 0x38}}, // o 0x6f - {{0x7c, 0x14, 0x14, 0x14, 0x08}}, // p 0x70 - {{0x08, 0x14, 0x14, 0x18, 0x7c}}, // q 0x71 - {{0x7c, 0x08, 0x04, 0x04, 0x08}}, // r 0x72 - {{0x48, 0x54, 0x54, 0x54, 0x20}}, // s 0x73 - {{0x04, 0x3f, 0x44, 0x40, 0x20}}, // t 0x74 - {{0x3c, 0x40, 0x40, 0x20, 0x7c}}, // u 0x75 - {{0x1c, 0x20, 0x40, 0x20, 0x1c}}, // v 0x76 - {{0x3c, 0x40, 0x30, 0x40, 0x3c}}, // w 0x77 - {{0x44, 0x28, 0x10, 0x28, 0x44}}, // x 0x78 - {{0x0c, 0x50, 0x50, 0x50, 0x3c}}, // y 0x79 - {{0x44, 0x64, 0x54, 0x4c, 0x44}}, // z 0x7a - {{0x00, 0x08, 0x36, 0x41, 0x00}}, // { 0x7b - {{0x00, 0x00, 0x7f, 0x00, 0x00}}, // | 0x7c - {{0x00, 0x41, 0x36, 0x08, 0x00}}, // } 0x7d - {{0x10, 0x08, 0x08, 0x10, 0x08}}, // ~ 0x7e -}; - -void main() { - printf("const char* symbols[] = {\n"); - for(int c = 32; c < 127; c++) { - printf(" // %d \"%c\"\n", c, c); - for(int j=0;j<7;j++){ - printf(" \""); - for(int k=0;k<5;k++){ - if (font[c - ' '].data[k]& (1< -#include -#include - -struct X { - uint8_t data[5]; -}; - -const struct X font[] = { - {{0xFE, 0x82, 0x82, 0x82, 0xFE}}, - {{0x22, 0x14, 0x08, 0x14, 0x22}}, - {{0x08, 0x04, 0x3e, 0x04, 0x08}}, - {{0x08, 0x10, 0x3e, 0x10, 0x08}}, - {{0x08, 0x1c, 0x2a, 0x08, 0x08}}, - {{0x08, 0x08, 0x2a, 0x1c, 0x08}}, - {{0x1c, 0x22, 0x2e, 0x2a, 0x1c}}, - {{0x63, 0x55, 0x4d, 0x55, 0x63}}, - {{0x1c, 0x22, 0x2a, 0x22, 0x1c}}, - {{0x10, 0x38, 0x54, 0x10, 0x1e}}, - {{0x60, 0x9e, 0x81, 0x9e, 0x6a}}, - {{0x00, 0x07, 0x05, 0x07, 0x00}}, - {{0x7C, 0x20, 0x20, 0x10, 0x3C}}, - {{0x04, 0x4e, 0x55, 0x44, 0x38}}, - {{0x7f, 0x3e, 0x1c, 0x08, 0x00}}, - {{0x00, 0x08, 0x1c, 0x3e, 0x7f}}, -}; - -void main() { - printf("const char* symbols[] = {\n"); - for(int c = 0; c < sizeof(font)/sizeof(font[0]); c++) { - printf(" // Extra %d\n", c, c); - for(int j=0;j<7;j++){ - printf(" \""); - for(int k=0;k<5;k++){ - if (font[c].data[k]& (1< +#include +#include + +void generate_glyph_tables() { + printf("static const font%dx_bitmap_t PROGMEM font%d%d_ascii[] = {\n", FONT_W, FONT_W, FONT_H); + for (int i = 32; i < 127; i++) { + uint8_t line[8] = {}; + for(int j = 0; j < FONT_H; j++) { + const char *row = font_ascii[(i - 32)*FONT_H + j]; + for(int k = 0; k < FONT_W; k++) { + line[k] |= (row[k] != 32) << j; + } + } + + printf(" {{"); + for(int k = 0; k < FONT_W; k++) { + if (k > 0) printf(", "); + printf("0x%02x", line[k]); + } + printf("}},\n"); + } + printf("};\n\n"); + + printf("static const struct utf_glyph%dx PROGMEM font%d%d_extra[] = {\n", FONT_W, FONT_W, FONT_H); + for (int i = 0; i < sizeof(font_extras) / (sizeof(font_extras[0]) * FONT_H); i++) { + uint8_t line[8] = {}; + for(int j = 0; j < FONT_H; j++) { + const char *row = font_extras[i*FONT_H + j]; + for(int k = 0; k < FONT_W; k++) { + line[k] |= (row[k] != 32) << j; + } + } + + printf(" {.utf={.symbol=\"%s\"}, {{", font_extras_utf[i]); + for(int k = 0; k < FONT_W; k++) { + if (k > 0) printf(", "); + printf("0x%02x", line[k]); + } + printf("}}},\n"); + } + printf("};\n"); +} + + +void main() { + generate_glyph_tables(); +} diff --git a/main.c b/main.c index 3dc9c46..8c3bd52 100644 --- a/main.c +++ b/main.c @@ -99,6 +99,10 @@ void main() { fb_text(15, 15, "MEOW", FONT_DOUBLEH, 1); fb_text(40, 15, "MEOW", FONT_DOUBLEW, 1); fb_text(40, 23, "MEOW", FONT_BOLD, 1); + + fb_text(5, 5, "Tiny 3x5", FONT_3X5, 1); + fb_text(40, 5, "Tiny 4x5 MEOW", FONT_4X5, 1); + fb_frame(12,12,80,20,1,1); // fb_text(36, 5, "-123456789.0 CPM°", FONT_TINY, 1);