|
|
#include "font.h"
|
|
|
#include "utf8.h"
|
|
|
#include <stdint.h>
|
|
|
|
|
|
#define FONT_EXTRAS_START (0x7e - 0x20 + 1)
|
|
|
|
|
|
const struct FontSymbol font[] = {
|
|
|
// ASCII from 0x20 to 0x7e are ordered at the beginning for quick access by index
|
|
|
{.symbol=" ", .graphic = {0x00, 0x00, 0x00, 0x00, 0x00}}, // 0x20
|
|
|
{.symbol="!", .graphic = {0x00, 0x00, 0x5f, 0x00, 0x00}}, // 0x21
|
|
|
{.symbol="\"", .graphic = {0x00, 0x07, 0x00, 0x07, 0x00}}, // 0x22
|
|
|
{.symbol="#", .graphic = {0x14, 0x7f, 0x14, 0x7f, 0x14}}, // 0x23
|
|
|
{.symbol="$", .graphic = {0x24, 0x2a, 0x7f, 0x2a, 0x12}}, // 0x24
|
|
|
{.symbol="%", .graphic = {0x23, 0x13, 0x08, 0x64, 0x62}}, // 0x25
|
|
|
{.symbol="&", .graphic = {0x36, 0x49, 0x55, 0x22, 0x50}}, // 0x26
|
|
|
{.symbol="'", .graphic = {0x00, 0x05, 0x03, 0x00, 0x00}}, // 0x27
|
|
|
{.symbol="(", .graphic = {0x00, 0x1c, 0x22, 0x41, 0x00}}, // 0x28
|
|
|
{.symbol=")", .graphic = {0x00, 0x41, 0x22, 0x1c, 0x00}}, // 0x29
|
|
|
{.symbol="*", .graphic = {0x14, 0x08, 0x3e, 0x08, 0x14}}, // 0x2a
|
|
|
{.symbol="+", .graphic = {0x08, 0x08, 0x3e, 0x08, 0x08}}, // 0x2b
|
|
|
{.symbol=",", .graphic = {0x00, 0x50, 0x30, 0x00, 0x00}}, // 0x2c
|
|
|
{.symbol="-", .graphic = {0x08, 0x08, 0x08, 0x08, 0x08}}, // 0x2d
|
|
|
{.symbol=".", .graphic = {0x00, 0x60, 0x60, 0x00, 0x00}}, // 0x2e
|
|
|
{.symbol="/", .graphic = {0x20, 0x10, 0x08, 0x04, 0x02}}, // 0x2f
|
|
|
{.symbol="0", .graphic = {0x3e, 0x51, 0x49, 0x45, 0x3e}}, // 0x30
|
|
|
{.symbol="1", .graphic = {0x00, 0x42, 0x7f, 0x40, 0x00}}, // 0x31
|
|
|
{.symbol="2", .graphic = {0x42, 0x61, 0x51, 0x49, 0x46}}, // 0x32
|
|
|
{.symbol="3", .graphic = {0x21, 0x41, 0x45, 0x4b, 0x31}}, // 0x33
|
|
|
{.symbol="4", .graphic = {0x18, 0x14, 0x12, 0x7f, 0x10}}, // 0x34
|
|
|
{.symbol="5", .graphic = {0x27, 0x45, 0x45, 0x45, 0x39}}, // 0x35
|
|
|
{.symbol="6", .graphic = {0x3c, 0x4a, 0x49, 0x49, 0x30}}, // 0x36
|
|
|
{.symbol="7", .graphic = {0x01, 0x71, 0x09, 0x05, 0x03}}, // 0x37
|
|
|
{.symbol="8", .graphic = {0x36, 0x49, 0x49, 0x49, 0x36}}, // 0x38
|
|
|
{.symbol="9", .graphic = {0x06, 0x49, 0x49, 0x29, 0x1e}}, // 0x39
|
|
|
{.symbol=":", .graphic = {0x00, 0x36, 0x36, 0x00, 0x00}}, // 0x3a
|
|
|
{.symbol=";", .graphic = {0x00, 0x56, 0x36, 0x00, 0x00}}, // 0x3b
|
|
|
{.symbol="<", .graphic = {0x08, 0x14, 0x22, 0x41, 0x00}}, // 0x3c
|
|
|
{.symbol="=", .graphic = {0x14, 0x14, 0x14, 0x14, 0x14}}, // 0x3d
|
|
|
{.symbol=">", .graphic = {0x00, 0x41, 0x22, 0x14, 0x08}}, // 0x3e
|
|
|
{.symbol="?", .graphic = {0x02, 0x01, 0x51, 0x09, 0x06}}, // 0x3f
|
|
|
{.symbol="@", .graphic = {0x32, 0x49, 0x79, 0x41, 0x3e}}, // 0x40
|
|
|
{.symbol="A", .graphic = {0x7e, 0x11, 0x11, 0x11, 0x7e}}, // 0x41
|
|
|
{.symbol="B", .graphic = {0x7f, 0x49, 0x49, 0x49, 0x36}}, // 0x42
|
|
|
{.symbol="C", .graphic = {0x3e, 0x41, 0x41, 0x41, 0x22}}, // 0x43
|
|
|
{.symbol="D", .graphic = {0x7f, 0x41, 0x41, 0x22, 0x1c}}, // 0x44
|
|
|
{.symbol="E", .graphic = {0x7f, 0x49, 0x49, 0x49, 0x41}}, // 0x45
|
|
|
{.symbol="F", .graphic = {0x7f, 0x09, 0x09, 0x09, 0x01}}, // 0x46
|
|
|
{.symbol="G", .graphic = {0x3e, 0x41, 0x49, 0x49, 0x7a}}, // 0x47
|
|
|
{.symbol="H", .graphic = {0x7f, 0x08, 0x08, 0x08, 0x7f}}, // 0x48
|
|
|
{.symbol="I", .graphic = {0x00, 0x41, 0x7f, 0x41, 0x00}}, // 0x49
|
|
|
{.symbol="J", .graphic = {0x20, 0x40, 0x41, 0x3f, 0x01}}, // 0x4a
|
|
|
{.symbol="K", .graphic = {0x7f, 0x08, 0x14, 0x22, 0x41}}, // 0x4b
|
|
|
{.symbol="L", .graphic = {0x7f, 0x40, 0x40, 0x40, 0x40}}, // 0x4c
|
|
|
{.symbol="M", .graphic = {0x7f, 0x02, 0x0c, 0x02, 0x7f}}, // 0x4d
|
|
|
{.symbol="N", .graphic = {0x7f, 0x04, 0x08, 0x10, 0x7f}}, // 0x4e
|
|
|
{.symbol="O", .graphic = {0x3e, 0x41, 0x41, 0x41, 0x3e}}, // 0x4f
|
|
|
{.symbol="P", .graphic = {0x7f, 0x09, 0x09, 0x09, 0x06}}, // 0x50
|
|
|
{.symbol="Q", .graphic = {0x3e, 0x41, 0x51, 0x21, 0x5e}}, // 0x51
|
|
|
{.symbol="R", .graphic = {0x7f, 0x09, 0x19, 0x29, 0x46}}, // 0x52
|
|
|
{.symbol="S", .graphic = {0x46, 0x49, 0x49, 0x49, 0x31}}, // 0x53
|
|
|
{.symbol="T", .graphic = {0x01, 0x01, 0x7f, 0x01, 0x01}}, // 0x54
|
|
|
{.symbol="U", .graphic = {0x3f, 0x40, 0x40, 0x40, 0x3f}}, // 0x55
|
|
|
{.symbol="V", .graphic = {0x1f, 0x20, 0x40, 0x20, 0x1f}}, // 0x56
|
|
|
{.symbol="W", .graphic = {0x3f, 0x40, 0x38, 0x40, 0x3f}}, // 0x57
|
|
|
{.symbol="X", .graphic = {0x63, 0x14, 0x08, 0x14, 0x63}}, // 0x58
|
|
|
{.symbol="Y", .graphic = {0x07, 0x08, 0x70, 0x08, 0x07}}, // 0x59
|
|
|
{.symbol="Z", .graphic = {0x61, 0x51, 0x49, 0x45, 0x43}}, // 0x5a
|
|
|
{.symbol="[", .graphic = {0x00, 0x7f, 0x41, 0x41, 0x00}}, // 0x5b
|
|
|
{.symbol="\\", .graphic = {0x02, 0x04, 0x08, 0x10, 0x20}}, // 0x5c
|
|
|
{.symbol="]", .graphic = {0x00, 0x41, 0x41, 0x7f, 0x00}}, // 0x5d
|
|
|
{.symbol="^", .graphic = {0x04, 0x02, 0x01, 0x02, 0x04}}, // 0x5e
|
|
|
{.symbol="_", .graphic = {0x40, 0x40, 0x40, 0x40, 0x40}}, // 0x5f
|
|
|
{.symbol="`", .graphic = {0x00, 0x01, 0x02, 0x04, 0x00}}, // 0x60
|
|
|
{.symbol="a", .graphic = {0x20, 0x54, 0x54, 0x54, 0x78}}, // 0x61
|
|
|
{.symbol="b", .graphic = {0x7f, 0x48, 0x44, 0x44, 0x38}}, // 0x62
|
|
|
{.symbol="c", .graphic = {0x38, 0x44, 0x44, 0x44, 0x20}}, // 0x63
|
|
|
{.symbol="d", .graphic = {0x38, 0x44, 0x44, 0x48, 0x7f}}, // 0x64
|
|
|
{.symbol="e", .graphic = {0x38, 0x54, 0x54, 0x54, 0x18}}, // 0x65
|
|
|
{.symbol="f", .graphic = {0x08, 0x7e, 0x09, 0x01, 0x02}}, // 0x66
|
|
|
{.symbol="g", .graphic = {0x0c, 0x52, 0x52, 0x52, 0x3e}}, // 0x67
|
|
|
{.symbol="h", .graphic = {0x7f, 0x08, 0x04, 0x04, 0x78}}, // 0x68
|
|
|
{.symbol="i", .graphic = {0x00, 0x44, 0x7d, 0x40, 0x00}}, // 0x69
|
|
|
{.symbol="j", .graphic = {0x20, 0x40, 0x44, 0x3d, 0x00}}, // 0x6a
|
|
|
{.symbol="k", .graphic = {0x7f, 0x10, 0x28, 0x44, 0x00}}, // 0x6b
|
|
|
{.symbol="l", .graphic = {0x00, 0x41, 0x7f, 0x40, 0x00}}, // 0x6c
|
|
|
{.symbol="m", .graphic = {0x7c, 0x04, 0x18, 0x04, 0x78}}, // 0x6d
|
|
|
{.symbol="n", .graphic = {0x7c, 0x08, 0x04, 0x04, 0x78}}, // 0x6e
|
|
|
{.symbol="o", .graphic = {0x38, 0x44, 0x44, 0x44, 0x38}}, // 0x6f
|
|
|
{.symbol="p", .graphic = {0x7c, 0x14, 0x14, 0x14, 0x08}}, // 0x70
|
|
|
{.symbol="q", .graphic = {0x08, 0x14, 0x14, 0x18, 0x7c}}, // 0x71
|
|
|
{.symbol="r", .graphic = {0x7c, 0x08, 0x04, 0x04, 0x08}}, // 0x72
|
|
|
{.symbol="s", .graphic = {0x48, 0x54, 0x54, 0x54, 0x20}}, // 0x73
|
|
|
{.symbol="t", .graphic = {0x04, 0x3f, 0x44, 0x40, 0x20}}, // 0x74
|
|
|
{.symbol="u", .graphic = {0x3c, 0x40, 0x40, 0x20, 0x7c}}, // 0x75
|
|
|
{.symbol="v", .graphic = {0x1c, 0x20, 0x40, 0x20, 0x1c}}, // 0x76
|
|
|
{.symbol="w", .graphic = {0x3c, 0x40, 0x30, 0x40, 0x3c}}, // 0x77
|
|
|
{.symbol="x", .graphic = {0x44, 0x28, 0x10, 0x28, 0x44}}, // 0x78
|
|
|
{.symbol="y", .graphic = {0x0c, 0x50, 0x50, 0x50, 0x3c}}, // 0x79
|
|
|
{.symbol="z", .graphic = {0x44, 0x64, 0x54, 0x4c, 0x44}}, // 0x7a
|
|
|
{.symbol="{", .graphic = {0x00, 0x08, 0x36, 0x41, 0x00}}, // 0x7b
|
|
|
{.symbol="|", .graphic = {0x00, 0x00, 0x7f, 0x00, 0x00}}, // 0x7c
|
|
|
{.symbol="}", .graphic = {0x00, 0x41, 0x36, 0x08, 0x00}}, // 0x7d
|
|
|
{.symbol="~", .graphic = {0x10, 0x08, 0x08, 0x10, 0x08}}, // 0x7e
|
|
|
|
|
|
// start of UTF8 glyphs. These can include custom graphics mapped to codepoints
|
|
|
{.symbol="<EFBFBD>", .graphic = {0xFF, 0x81, 0x81, 0x81, 0xFF}}, // box
|
|
|
|
|
|
{.symbol="×", .graphic = { 0x22, 0x14, 0x08, 0x14, 0x22 }}, // cross
|
|
|
{.symbol="↑", .graphic = { 0x08, 0x04, 0x3e, 0x04, 0x08 }}, // arrow_up
|
|
|
{.symbol="↓", .graphic = { 0x08, 0x10, 0x3e, 0x10, 0x08 }}, // arrow_down
|
|
|
{.symbol="←", .graphic = { 0x08, 0x1c, 0x2a, 0x08, 0x08 }}, // arrow_left
|
|
|
{.symbol="→", .graphic = { 0x08, 0x08, 0x2a, 0x1c, 0x08 }}, // arrow_right
|
|
|
{.symbol="⏰", .graphic = { 0x1c, 0x22, 0x2e, 0x2a, 0x1c }}, // clock
|
|
|
{.symbol="⌛", .graphic = { 0x63, 0x55, 0x4d, 0x55, 0x63 }}, // hourglass
|
|
|
{.symbol="☸", .graphic = { 0x1c, 0x22, 0x2a, 0x22, 0x1c }}, // wheel
|
|
|
{.symbol="⏎", .graphic = { 0x10, 0x38, 0x54, 0x10, 0x1e }}, // return
|
|
|
{.symbol="🌡", .graphic = { 0x60, 0x9e, 0x81, 0x9e, 0x6a }}, // thermometer
|
|
|
{.symbol="°", .graphic = { 0x00, 0x07, 0x05, 0x07, 0x00 }}, // degree
|
|
|
{.symbol="🔙", .graphic = { 0x04, 0x4e, 0x55, 0x44, 0x38 }}, // back
|
|
|
{.symbol="▶", .graphic = { 0x7f, 0x3e, 0x1c, 0x08, 0x00 }}, // tri_right
|
|
|
{.symbol="◀", .graphic = { 0x00, 0x08, 0x1c, 0x3e, 0x7f }}, // tri_left
|
|
|
|
|
|
// End of the list
|
|
|
{},
|
|
|
};
|
|
|
|
|
|
const struct FontSymbol *Font_GetSymbol(struct Utf8Char ch) {
|
|
|
if (ch.bytes[0] < ' ') {
|
|
|
return &font[FONT_EXTRAS_START]; // replacement character
|
|
|
}
|
|
|
|
|
|
if (ch.bytes[0] < 127) {
|
|
|
return &font[ch.bytes[0] - 0x20];
|
|
|
}
|
|
|
|
|
|
const struct FontSymbol *sym = &font[FONT_EXTRAS_START];
|
|
|
while (sym->symbol[0]) {
|
|
|
if (sym->uint == ch.uint) {
|
|
|
return sym;
|
|
|
}
|
|
|
sym++;
|
|
|
}
|
|
|
|
|
|
return &font[FONT_EXTRAS_START]; // replacement character
|
|
|
}
|
|
|
|