This commit is contained in:
Phillip Burgess 2021-09-06 21:30:40 -07:00
commit 811f608a16
2 changed files with 547 additions and 409 deletions

View File

@ -44,426 +44,429 @@
** William Skellenger (williamj@skellenger.net)
** Twitter: @skelliam
**
** Jan 09, 2020: Bitmaps now compressed, to fix the bounding box problem,
** because non-compressed the calculated text width were wrong.
** Andreas Merkle (web@blue-andi.de)
*/
#define TOMTHUMB_USE_EXTENDED 0
const uint8_t TomThumbBitmaps[] PROGMEM = {
0x00, /* 0x20 space */
0x80, 0x80, 0x80, 0x00, 0x80, /* 0x21 exclam */
0xA0, 0xA0, /* 0x22 quotedbl */
0xA0, 0xE0, 0xA0, 0xE0, 0xA0, /* 0x23 numbersign */
0x60, 0xC0, 0x60, 0xC0, 0x40, /* 0x24 dollar */
0x80, 0x20, 0x40, 0x80, 0x20, /* 0x25 percent */
0xC0, 0xC0, 0xE0, 0xA0, 0x60, /* 0x26 ampersand */
0x80, 0x80, /* 0x27 quotesingle */
0x40, 0x80, 0x80, 0x80, 0x40, /* 0x28 parenleft */
0x80, 0x40, 0x40, 0x40, 0x80, /* 0x29 parenright */
0xA0, 0x40, 0xA0, /* 0x2A asterisk */
0x40, 0xE0, 0x40, /* 0x2B plus */
0x40, 0x80, /* 0x2C comma */
0xE0, /* 0x2D hyphen */
0x80, /* 0x2E period */
0x20, 0x20, 0x40, 0x80, 0x80, /* 0x2F slash */
0x60, 0xA0, 0xA0, 0xA0, 0xC0, /* 0x30 zero */
0x40, 0xC0, 0x40, 0x40, 0x40, /* 0x31 one */
0xC0, 0x20, 0x40, 0x80, 0xE0, /* 0x32 two */
0xC0, 0x20, 0x40, 0x20, 0xC0, /* 0x33 three */
0xA0, 0xA0, 0xE0, 0x20, 0x20, /* 0x34 four */
0xE0, 0x80, 0xC0, 0x20, 0xC0, /* 0x35 five */
0x60, 0x80, 0xE0, 0xA0, 0xE0, /* 0x36 six */
0xE0, 0x20, 0x40, 0x80, 0x80, /* 0x37 seven */
0xE0, 0xA0, 0xE0, 0xA0, 0xE0, /* 0x38 eight */
0xE0, 0xA0, 0xE0, 0x20, 0xC0, /* 0x39 nine */
0x80, 0x00, 0x80, /* 0x3A colon */
0x40, 0x00, 0x40, 0x80, /* 0x3B semicolon */
0x20, 0x40, 0x80, 0x40, 0x20, /* 0x3C less */
0xE0, 0x00, 0xE0, /* 0x3D equal */
0x80, 0x40, 0x20, 0x40, 0x80, /* 0x3E greater */
0xE0, 0x20, 0x40, 0x00, 0x40, /* 0x3F question */
0x40, 0xA0, 0xE0, 0x80, 0x60, /* 0x40 at */
0x40, 0xA0, 0xE0, 0xA0, 0xA0, /* 0x41 A */
0xC0, 0xA0, 0xC0, 0xA0, 0xC0, /* 0x42 B */
0x60, 0x80, 0x80, 0x80, 0x60, /* 0x43 C */
0xC0, 0xA0, 0xA0, 0xA0, 0xC0, /* 0x44 D */
0xE0, 0x80, 0xE0, 0x80, 0xE0, /* 0x45 E */
0xE0, 0x80, 0xE0, 0x80, 0x80, /* 0x46 F */
0x60, 0x80, 0xE0, 0xA0, 0x60, /* 0x47 G */
0xA0, 0xA0, 0xE0, 0xA0, 0xA0, /* 0x48 H */
0xE0, 0x40, 0x40, 0x40, 0xE0, /* 0x49 I */
0x20, 0x20, 0x20, 0xA0, 0x40, /* 0x4A J */
0xA0, 0xA0, 0xC0, 0xA0, 0xA0, /* 0x4B K */
0x80, 0x80, 0x80, 0x80, 0xE0, /* 0x4C L */
0xA0, 0xE0, 0xE0, 0xA0, 0xA0, /* 0x4D M */
0xA0, 0xE0, 0xE0, 0xE0, 0xA0, /* 0x4E N */
0x40, 0xA0, 0xA0, 0xA0, 0x40, /* 0x4F O */
0xC0, 0xA0, 0xC0, 0x80, 0x80, /* 0x50 P */
0x40, 0xA0, 0xA0, 0xE0, 0x60, /* 0x51 Q */
0xC0, 0xA0, 0xE0, 0xC0, 0xA0, /* 0x52 R */
0x60, 0x80, 0x40, 0x20, 0xC0, /* 0x53 S */
0xE0, 0x40, 0x40, 0x40, 0x40, /* 0x54 T */
0xA0, 0xA0, 0xA0, 0xA0, 0x60, /* 0x55 U */
0xA0, 0xA0, 0xA0, 0x40, 0x40, /* 0x56 V */
0xA0, 0xA0, 0xE0, 0xE0, 0xA0, /* 0x57 W */
0xA0, 0xA0, 0x40, 0xA0, 0xA0, /* 0x58 X */
0xA0, 0xA0, 0x40, 0x40, 0x40, /* 0x59 Y */
0xE0, 0x20, 0x40, 0x80, 0xE0, /* 0x5A Z */
0xE0, 0x80, 0x80, 0x80, 0xE0, /* 0x5B bracketleft */
0x80, 0x40, 0x20, /* 0x5C backslash */
0xE0, 0x20, 0x20, 0x20, 0xE0, /* 0x5D bracketright */
0x40, 0xA0, /* 0x5E asciicircum */
0xE0, /* 0x5F underscore */
0x80, 0x40, /* 0x60 grave */
0xC0, 0x60, 0xA0, 0xE0, /* 0x61 a */
0x80, 0xC0, 0xA0, 0xA0, 0xC0, /* 0x62 b */
0x60, 0x80, 0x80, 0x60, /* 0x63 c */
0x20, 0x60, 0xA0, 0xA0, 0x60, /* 0x64 d */
0x60, 0xA0, 0xC0, 0x60, /* 0x65 e */
0x20, 0x40, 0xE0, 0x40, 0x40, /* 0x66 f */
0x60, 0xA0, 0xE0, 0x20, 0x40, /* 0x67 g */
0x80, 0xC0, 0xA0, 0xA0, 0xA0, /* 0x68 h */
0x80, 0x00, 0x80, 0x80, 0x80, /* 0x69 i */
0x20, 0x00, 0x20, 0x20, 0xA0, 0x40, /* 0x6A j */
0x80, 0xA0, 0xC0, 0xC0, 0xA0, /* 0x6B k */
0xC0, 0x40, 0x40, 0x40, 0xE0, /* 0x6C l */
0xE0, 0xE0, 0xE0, 0xA0, /* 0x6D m */
0xC0, 0xA0, 0xA0, 0xA0, /* 0x6E n */
0x40, 0xA0, 0xA0, 0x40, /* 0x6F o */
0xC0, 0xA0, 0xA0, 0xC0, 0x80, /* 0x70 p */
0x60, 0xA0, 0xA0, 0x60, 0x20, /* 0x71 q */
0x60, 0x80, 0x80, 0x80, /* 0x72 r */
0x60, 0xC0, 0x60, 0xC0, /* 0x73 s */
0x40, 0xE0, 0x40, 0x40, 0x60, /* 0x74 t */
0xA0, 0xA0, 0xA0, 0x60, /* 0x75 u */
0xA0, 0xA0, 0xE0, 0x40, /* 0x76 v */
0xA0, 0xE0, 0xE0, 0xE0, /* 0x77 w */
0xA0, 0x40, 0x40, 0xA0, /* 0x78 x */
0xA0, 0xA0, 0x60, 0x20, 0x40, /* 0x79 y */
0xE0, 0x60, 0xC0, 0xE0, /* 0x7A z */
0x60, 0x40, 0x80, 0x40, 0x60, /* 0x7B braceleft */
0x80, 0x80, 0x00, 0x80, 0x80, /* 0x7C bar */
0xC0, 0x40, 0x20, 0x40, 0xC0, /* 0x7D braceright */
0x60, 0xC0, /* 0x7E asciitilde */
0x00, /* 0x20 space */
0xE8, /* 0x21 exclam */
0xB4, /* 0x22 quotedbl */
0xBE, 0xFA, /* 0x23 numbersign */
0x79, 0xE4, /* 0x24 dollar */
0x85, 0x42, /* 0x25 percent */
0xDB, 0xD6, /* 0x26 ampersand */
0xC0, /* 0x27 quotesingle */
0x6A, 0x40, /* 0x28 parenleft */
0x95, 0x80, /* 0x29 parenright */
0xAA, 0x80, /* 0x2A asterisk */
0x5D, 0x00, /* 0x2B plus */
0x60, /* 0x2C comma */
0xE0, /* 0x2D hyphen */
0x80, /* 0x2E period */
0x25, 0x48, /* 0x2F slash */
0x76, 0xDC, /* 0x30 zero */
0x75, 0x40, /* 0x31 one */
0xC5, 0x4E, /* 0x32 two */
0xC5, 0x1C, /* 0x33 three */
0xB7, 0x92, /* 0x34 four */
0xF3, 0x1C, /* 0x35 five */
0x73, 0xDE, /* 0x36 six */
0xE5, 0x48, /* 0x37 seven */
0xF7, 0xDE, /* 0x38 eight */
0xF7, 0x9C, /* 0x39 nine */
0xA0, /* 0x3A colon */
0x46, /* 0x3B semicolon */
0x2A, 0x22, /* 0x3C less */
0xE3, 0x80, /* 0x3D equal */
0x88, 0xA8, /* 0x3E greater */
0xE5, 0x04, /* 0x3F question */
0x57, 0xC6, /* 0x40 at */
0x57, 0xDA, /* 0x41 A */
0xD7, 0x5C, /* 0x42 B */
0x72, 0x46, /* 0x43 C */
0xD6, 0xDC, /* 0x44 D */
0xF3, 0xCE, /* 0x45 E */
0xF3, 0xC8, /* 0x46 F */
0x73, 0xD6, /* 0x47 G */
0xB7, 0xDA, /* 0x48 H */
0xE9, 0x2E, /* 0x49 I */
0x24, 0xD4, /* 0x4A J */
0xB7, 0x5A, /* 0x4B K */
0x92, 0x4E, /* 0x4C L */
0xBF, 0xDA, /* 0x4D M */
0xBF, 0xFA, /* 0x4E N */
0x56, 0xD4, /* 0x4F O */
0xD7, 0x48, /* 0x50 P */
0x56, 0xF6, /* 0x51 Q */
0xD7, 0xEA, /* 0x52 R */
0x71, 0x1C, /* 0x53 S */
0xE9, 0x24, /* 0x54 T */
0xB6, 0xD6, /* 0x55 U */
0xB6, 0xA4, /* 0x56 V */
0xB7, 0xFA, /* 0x57 W */
0xB5, 0x5A, /* 0x58 X */
0xB5, 0x24, /* 0x59 Y */
0xE5, 0x4E, /* 0x5A Z */
0xF2, 0x4E, /* 0x5B bracketleft */
0x88, 0x80, /* 0x5C backslash */
0xE4, 0x9E, /* 0x5D bracketright */
0x54, /* 0x5E asciicircum */
0xE0, /* 0x5F underscore */
0x90, /* 0x60 grave */
0xCE, 0xF0, /* 0x61 a */
0x9A, 0xDC, /* 0x62 b */
0x72, 0x30, /* 0x63 c */
0x2E, 0xD6, /* 0x64 d */
0x77, 0x30, /* 0x65 e */
0x2B, 0xA4, /* 0x66 f */
0x77, 0x94, /* 0x67 g */
0x9A, 0xDA, /* 0x68 h */
0xB8, /* 0x69 i */
0x20, 0x9A, 0x80, /* 0x6A j */
0x97, 0x6A, /* 0x6B k */
0xC9, 0x2E, /* 0x6C l */
0xFF, 0xD0, /* 0x6D m */
0xD6, 0xD0, /* 0x6E n */
0x56, 0xA0, /* 0x6F o */
0xD6, 0xE8, /* 0x70 p */
0x76, 0xB2, /* 0x71 q */
0x72, 0x40, /* 0x72 r */
0x79, 0xE0, /* 0x73 s */
0x5D, 0x26, /* 0x74 t */
0xB6, 0xB0, /* 0x75 u */
0xB7, 0xA0, /* 0x76 v */
0xBF, 0xF0, /* 0x77 w */
0xA9, 0x50, /* 0x78 x */
0xB5, 0x94, /* 0x79 y */
0xEF, 0x70, /* 0x7A z */
0x6A, 0x26, /* 0x7B braceleft */
0xD8, /* 0x7C bar */
0xC8, 0xAC, /* 0x7D braceright */
0x78, /* 0x7E asciitilde */
#if (TOMTHUMB_USE_EXTENDED)
0x80, 0x00, 0x80, 0x80, 0x80, /* 0xA1 exclamdown */
0x40, 0xE0, 0x80, 0xE0, 0x40, /* 0xA2 cent */
0x60, 0x40, 0xE0, 0x40, 0xE0, /* 0xA3 sterling */
0xA0, 0x40, 0xE0, 0x40, 0xA0, /* 0xA4 currency */
0xA0, 0xA0, 0x40, 0xE0, 0x40, /* 0xA5 yen */
0x80, 0x80, 0x00, 0x80, 0x80, /* 0xA6 brokenbar */
0x60, 0x40, 0xA0, 0x40, 0xC0, /* 0xA7 section */
0xA0, /* 0xA8 dieresis */
0x60, 0x80, 0x60, /* 0xA9 copyright */
0x60, 0xA0, 0xE0, 0x00, 0xE0, /* 0xAA ordfeminine */
0x40, 0x80, 0x40, /* 0xAB guillemotleft */
0xE0, 0x20, /* 0xAC logicalnot */
0xC0, /* 0xAD softhyphen */
0xC0, 0xC0, 0xA0, /* 0xAE registered */
0xE0, /* 0xAF macron */
0x40, 0xA0, 0x40, /* 0xB0 degree */
0x40, 0xE0, 0x40, 0x00, 0xE0, /* 0xB1 plusminus */
0xC0, 0x40, 0x60, /* 0xB2 twosuperior */
0xE0, 0x60, 0xE0, /* 0xB3 threesuperior */
0x40, 0x80, /* 0xB4 acute */
0xA0, 0xA0, 0xA0, 0xC0, 0x80, /* 0xB5 mu */
0x60, 0xA0, 0x60, 0x60, 0x60, /* 0xB6 paragraph */
0xE0, 0xE0, 0xE0, /* 0xB7 periodcentered */
0x40, 0x20, 0xC0, /* 0xB8 cedilla */
0x80, 0x80, 0x80, /* 0xB9 onesuperior */
0x40, 0xA0, 0x40, 0x00, 0xE0, /* 0xBA ordmasculine */
0x80, 0x40, 0x80, /* 0xBB guillemotright */
0x80, 0x80, 0x00, 0x60, 0x20, /* 0xBC onequarter */
0x80, 0x80, 0x00, 0xC0, 0x60, /* 0xBD onehalf */
0xC0, 0xC0, 0x00, 0x60, 0x20, /* 0xBE threequarters */
0x40, 0x00, 0x40, 0x80, 0xE0, /* 0xBF questiondown */
0x40, 0x20, 0x40, 0xE0, 0xA0, /* 0xC0 Agrave */
0x40, 0x80, 0x40, 0xE0, 0xA0, /* 0xC1 Aacute */
0xE0, 0x00, 0x40, 0xE0, 0xA0, /* 0xC2 Acircumflex */
0x60, 0xC0, 0x40, 0xE0, 0xA0, /* 0xC3 Atilde */
0xA0, 0x40, 0xA0, 0xE0, 0xA0, /* 0xC4 Adieresis */
0xC0, 0xC0, 0xA0, 0xE0, 0xA0, /* 0xC5 Aring */
0x60, 0xC0, 0xE0, 0xC0, 0xE0, /* 0xC6 AE */
0x60, 0x80, 0x80, 0x60, 0x20, 0x40, /* 0xC7 Ccedilla */
0x40, 0x20, 0xE0, 0xC0, 0xE0, /* 0xC8 Egrave */
0x40, 0x80, 0xE0, 0xC0, 0xE0, /* 0xC9 Eacute */
0xE0, 0x00, 0xE0, 0xC0, 0xE0, /* 0xCA Ecircumflex */
0xA0, 0x00, 0xE0, 0xC0, 0xE0, /* 0xCB Edieresis */
0x40, 0x20, 0xE0, 0x40, 0xE0, /* 0xCC Igrave */
0x40, 0x80, 0xE0, 0x40, 0xE0, /* 0xCD Iacute */
0xE0, 0x00, 0xE0, 0x40, 0xE0, /* 0xCE Icircumflex */
0xA0, 0x00, 0xE0, 0x40, 0xE0, /* 0xCF Idieresis */
0xC0, 0xA0, 0xE0, 0xA0, 0xC0, /* 0xD0 Eth */
0xC0, 0x60, 0xA0, 0xE0, 0xA0, /* 0xD1 Ntilde */
0x40, 0x20, 0xE0, 0xA0, 0xE0, /* 0xD2 Ograve */
0x40, 0x80, 0xE0, 0xA0, 0xE0, /* 0xD3 Oacute */
0xE0, 0x00, 0xE0, 0xA0, 0xE0, /* 0xD4 Ocircumflex */
0xC0, 0x60, 0xE0, 0xA0, 0xE0, /* 0xD5 Otilde */
0xA0, 0x00, 0xE0, 0xA0, 0xE0, /* 0xD6 Odieresis */
0xA0, 0x40, 0xA0, /* 0xD7 multiply */
0x60, 0xA0, 0xE0, 0xA0, 0xC0, /* 0xD8 Oslash */
0x80, 0x40, 0xA0, 0xA0, 0xE0, /* 0xD9 Ugrave */
0x20, 0x40, 0xA0, 0xA0, 0xE0, /* 0xDA Uacute */
0xE0, 0x00, 0xA0, 0xA0, 0xE0, /* 0xDB Ucircumflex */
0xA0, 0x00, 0xA0, 0xA0, 0xE0, /* 0xDC Udieresis */
0x20, 0x40, 0xA0, 0xE0, 0x40, /* 0xDD Yacute */
0x80, 0xE0, 0xA0, 0xE0, 0x80, /* 0xDE Thorn */
0x60, 0xA0, 0xC0, 0xA0, 0xC0, 0x80, /* 0xDF germandbls */
0x40, 0x20, 0x60, 0xA0, 0xE0, /* 0xE0 agrave */
0x40, 0x80, 0x60, 0xA0, 0xE0, /* 0xE1 aacute */
0xE0, 0x00, 0x60, 0xA0, 0xE0, /* 0xE2 acircumflex */
0x60, 0xC0, 0x60, 0xA0, 0xE0, /* 0xE3 atilde */
0xA0, 0x00, 0x60, 0xA0, 0xE0, /* 0xE4 adieresis */
0x60, 0x60, 0x60, 0xA0, 0xE0, /* 0xE5 aring */
0x60, 0xE0, 0xE0, 0xC0, /* 0xE6 ae */
0x60, 0x80, 0x60, 0x20, 0x40, /* 0xE7 ccedilla */
0x40, 0x20, 0x60, 0xE0, 0x60, /* 0xE8 egrave */
0x40, 0x80, 0x60, 0xE0, 0x60, /* 0xE9 eacute */
0xE0, 0x00, 0x60, 0xE0, 0x60, /* 0xEA ecircumflex */
0xA0, 0x00, 0x60, 0xE0, 0x60, /* 0xEB edieresis */
0x80, 0x40, 0x80, 0x80, 0x80, /* 0xEC igrave */
0x40, 0x80, 0x40, 0x40, 0x40, /* 0xED iacute */
0xE0, 0x00, 0x40, 0x40, 0x40, /* 0xEE icircumflex */
0xA0, 0x00, 0x40, 0x40, 0x40, /* 0xEF idieresis */
0x60, 0xC0, 0x60, 0xA0, 0x60, /* 0xF0 eth */
0xC0, 0x60, 0xC0, 0xA0, 0xA0, /* 0xF1 ntilde */
0x40, 0x20, 0x40, 0xA0, 0x40, /* 0xF2 ograve */
0x40, 0x80, 0x40, 0xA0, 0x40, /* 0xF3 oacute */
0xE0, 0x00, 0x40, 0xA0, 0x40, /* 0xF4 ocircumflex */
0xC0, 0x60, 0x40, 0xA0, 0x40, /* 0xF5 otilde */
0xA0, 0x00, 0x40, 0xA0, 0x40, /* 0xF6 odieresis */
0x40, 0x00, 0xE0, 0x00, 0x40, /* 0xF7 divide */
0x60, 0xE0, 0xA0, 0xC0, /* 0xF8 oslash */
0x80, 0x40, 0xA0, 0xA0, 0x60, /* 0xF9 ugrave */
0x20, 0x40, 0xA0, 0xA0, 0x60, /* 0xFA uacute */
0xE0, 0x00, 0xA0, 0xA0, 0x60, /* 0xFB ucircumflex */
0xA0, 0x00, 0xA0, 0xA0, 0x60, /* 0xFC udieresis */
0x20, 0x40, 0xA0, 0x60, 0x20, 0x40, /* 0xFD yacute */
0x80, 0xC0, 0xA0, 0xC0, 0x80, /* 0xFE thorn */
0xA0, 0x00, 0xA0, 0x60, 0x20, 0x40, /* 0xFF ydieresis */
0x00, /* 0x11D gcircumflex */
0x60, 0xC0, 0xE0, 0xC0, 0x60, /* 0x152 OE */
0x60, 0xE0, 0xC0, 0xE0, /* 0x153 oe */
0xA0, 0x60, 0xC0, 0x60, 0xC0, /* 0x160 Scaron */
0xA0, 0x60, 0xC0, 0x60, 0xC0, /* 0x161 scaron */
0xA0, 0x00, 0xA0, 0x40, 0x40, /* 0x178 Ydieresis */
0xA0, 0xE0, 0x60, 0xC0, 0xE0, /* 0x17D Zcaron */
0xA0, 0xE0, 0x60, 0xC0, 0xE0, /* 0x17E zcaron */
0x00, /* 0xEA4 uni0EA4 */
0x00, /* 0x13A0 uni13A0 */
0x80, /* 0x2022 bullet */
0xA0, /* 0x2026 ellipsis */
0x60, 0xE0, 0xE0, 0xC0, 0x60, /* 0x20AC Euro */
0xE0, 0xA0, 0xA0, 0xA0, 0xE0, /* 0xFFFD uniFFFD */
#endif /* (TOMTHUMB_USE_EXTENDED) */
0xB8, /* 0xA1 exclamdown */
0x5E, 0x74, /* 0xA2 cent */
0x6B, 0xAE, /* 0xA3 sterling */
0xAB, 0xAA, /* 0xA4 currency */
0xB5, 0x74, /* 0xA5 yen */
0xD8, /* 0xA6 brokenbar */
0x6A, 0xAC, /* 0xA7 section */
0xA0, /* 0xA8 dieresis */
0x71, 0x80, /* 0xA9 copyright */
0x77, 0x8E, /* 0xAA ordfeminine */
0x64, /* 0xAB guillemotleft */
0xE4, /* 0xAC logicalnot */
0xC0, /* 0xAD softhyphen */
0xDA, 0x80, /* 0xAE registered */
0xE0, /* 0xAF macron */
0x55, 0x00, /* 0xB0 degree */
0x5D, 0x0E, /* 0xB1 plusminus */
0xC9, 0x80, /* 0xB2 twosuperior */
0xEF, 0x80, /* 0xB3 threesuperior */
0x60, /* 0xB4 acute */
0xB6, 0xE8, /* 0xB5 mu */
0x75, 0xB6, /* 0xB6 paragraph */
0xFF, 0x80, /* 0xB7 periodcentered */
0x47, 0x00, /* 0xB8 cedilla */
0xE0, /* 0xB9 onesuperior */
0x55, 0x0E, /* 0xBA ordmasculine */
0x98, /* 0xBB guillemotright */
0x90, 0x32, /* 0xBC onequarter */
0x90, 0x66, /* 0xBD onehalf */
0xD8, 0x32, /* 0xBE threequarters */
0x41, 0x4E, /* 0xBF questiondown */
0x45, 0x7A, /* 0xC0 Agrave */
0x51, 0x7A, /* 0xC1 Aacute */
0xE1, 0x7A, /* 0xC2 Acircumflex */
0x79, 0x7A, /* 0xC3 Atilde */
0xAA, 0xFA, /* 0xC4 Adieresis */
0xDA, 0xFA, /* 0xC5 Aring */
0x7B, 0xEE, /* 0xC6 AE */
0x72, 0x32, 0x80, /* 0xC7 Ccedilla */
0x47, 0xEE, /* 0xC8 Egrave */
0x53, 0xEE, /* 0xC9 Eacute */
0xE3, 0xEE, /* 0xCA Ecircumflex */
0xA3, 0xEE, /* 0xCB Edieresis */
0x47, 0xAE, /* 0xCC Igrave */
0x53, 0xAE, /* 0xCD Iacute */
0xE3, 0xAE, /* 0xCE Icircumflex */
0xA3, 0xAE, /* 0xCF Idieresis */
0xD7, 0xDC, /* 0xD0 Eth */
0xCE, 0xFA, /* 0xD1 Ntilde */
0x47, 0xDE, /* 0xD2 Ograve */
0x53, 0xDE, /* 0xD3 Oacute */
0xE3, 0xDE, /* 0xD4 Ocircumflex */
0xCF, 0xDE, /* 0xD5 Otilde */
0xA3, 0xDE, /* 0xD6 Odieresis */
0xAA, 0x80, /* 0xD7 multiply */
0x77, 0xDC, /* 0xD8 Oslash */
0x8A, 0xDE, /* 0xD9 Ugrave */
0x2A, 0xDE, /* 0xDA Uacute */
0xE2, 0xDE, /* 0xDB Ucircumflex */
0xA2, 0xDE, /* 0xDC Udieresis */
0x2A, 0xF4, /* 0xDD Yacute */
0x9E, 0xF8, /* 0xDE Thorn */
0x77, 0x5D, 0x00, /* 0xDF germandbls */
0x45, 0xDE, /* 0xE0 agrave */
0x51, 0xDE, /* 0xE1 aacute */
0xE1, 0xDE, /* 0xE2 acircumflex */
0x79, 0xDE, /* 0xE3 atilde */
0xA1, 0xDE, /* 0xE4 adieresis */
0x6D, 0xDE, /* 0xE5 aring */
0x7F, 0xE0, /* 0xE6 ae */
0x71, 0x94, /* 0xE7 ccedilla */
0x45, 0xF6, /* 0xE8 egrave */
0x51, 0xF6, /* 0xE9 eacute */
0xE1, 0xF6, /* 0xEA ecircumflex */
0xA1, 0xF6, /* 0xEB edieresis */
0x9A, 0x80, /* 0xEC igrave */
0x65, 0x40, /* 0xED iacute */
0xE1, 0x24, /* 0xEE icircumflex */
0xA1, 0x24, /* 0xEF idieresis */
0x79, 0xD6, /* 0xF0 eth */
0xCF, 0x5A, /* 0xF1 ntilde */
0x45, 0x54, /* 0xF2 ograve */
0x51, 0x54, /* 0xF3 oacute */
0xE1, 0x54, /* 0xF4 ocircumflex */
0xCD, 0x54, /* 0xF5 otilde */
0xA1, 0x54, /* 0xF6 odieresis */
0x43, 0x84, /* 0xF7 divide */
0x7E, 0xE0, /* 0xF8 oslash */
0x8A, 0xD6, /* 0xF9 ugrave */
0x2A, 0xD6, /* 0xFA uacute */
0xE2, 0xD6, /* 0xFB ucircumflex */
0xA2, 0xD6, /* 0xFC udieresis */
0x2A, 0xB2, 0x80, /* 0xFD yacute */
0x9A, 0xE8, /* 0xFE thorn */
0xA2, 0xB2, 0x80, /* 0xFF ydieresis */
0x00, /* 0x11D gcircumflex */
0x7B, 0xE6, /* 0x152 OE */
0x7F, 0x70, /* 0x153 oe */
0xAF, 0x3C, /* 0x160 Scaron */
0xAF, 0x3C, /* 0x161 scaron */
0xA2, 0xA4, /* 0x178 Ydieresis */
0xBD, 0xEE, /* 0x17D Zcaron */
0xBD, 0xEE, /* 0x17E zcaron */
0x00, /* 0xEA4 uni0EA4 */
0x00, /* 0x13A0 uni13A0 */
0x80, /* 0x2022 bullet */
0xA0, /* 0x2026 ellipsis */
0x7F, 0xE6, /* 0x20AC Euro */
0xEA, 0xAA, 0xE0, /* 0xFFFD uniFFFD */
#endif /* (TOMTHUMB_USE_EXTENDED) */
};
/* {offset, width, height, advance cursor, x offset, y offset} */
const GFXglyph TomThumbGlyphs[] PROGMEM = {
{0, 8, 1, 2, 0, -5}, /* 0x20 space */
{1, 8, 5, 2, 0, -5}, /* 0x21 exclam */
{6, 8, 2, 4, 0, -5}, /* 0x22 quotedbl */
{8, 8, 5, 4, 0, -5}, /* 0x23 numbersign */
{13, 8, 5, 4, 0, -5}, /* 0x24 dollar */
{18, 8, 5, 4, 0, -5}, /* 0x25 percent */
{23, 8, 5, 4, 0, -5}, /* 0x26 ampersand */
{28, 8, 2, 2, 0, -5}, /* 0x27 quotesingle */
{30, 8, 5, 3, 0, -5}, /* 0x28 parenleft */
{35, 8, 5, 3, 0, -5}, /* 0x29 parenright */
{40, 8, 3, 4, 0, -5}, /* 0x2A asterisk */
{43, 8, 3, 4, 0, -4}, /* 0x2B plus */
{46, 8, 2, 3, 0, -2}, /* 0x2C comma */
{48, 8, 1, 4, 0, -3}, /* 0x2D hyphen */
{49, 8, 1, 2, 0, -1}, /* 0x2E period */
{50, 8, 5, 4, 0, -5}, /* 0x2F slash */
{55, 8, 5, 4, 0, -5}, /* 0x30 zero */
{60, 8, 5, 3, 0, -5}, /* 0x31 one */
{65, 8, 5, 4, 0, -5}, /* 0x32 two */
{70, 8, 5, 4, 0, -5}, /* 0x33 three */
{75, 8, 5, 4, 0, -5}, /* 0x34 four */
{80, 8, 5, 4, 0, -5}, /* 0x35 five */
{85, 8, 5, 4, 0, -5}, /* 0x36 six */
{90, 8, 5, 4, 0, -5}, /* 0x37 seven */
{95, 8, 5, 4, 0, -5}, /* 0x38 eight */
{100, 8, 5, 4, 0, -5}, /* 0x39 nine */
{105, 8, 3, 2, 0, -4}, /* 0x3A colon */
{108, 8, 4, 3, 0, -4}, /* 0x3B semicolon */
{112, 8, 5, 4, 0, -5}, /* 0x3C less */
{117, 8, 3, 4, 0, -4}, /* 0x3D equal */
{120, 8, 5, 4, 0, -5}, /* 0x3E greater */
{125, 8, 5, 4, 0, -5}, /* 0x3F question */
{130, 8, 5, 4, 0, -5}, /* 0x40 at */
{135, 8, 5, 4, 0, -5}, /* 0x41 A */
{140, 8, 5, 4, 0, -5}, /* 0x42 B */
{145, 8, 5, 4, 0, -5}, /* 0x43 C */
{150, 8, 5, 4, 0, -5}, /* 0x44 D */
{155, 8, 5, 4, 0, -5}, /* 0x45 E */
{160, 8, 5, 4, 0, -5}, /* 0x46 F */
{165, 8, 5, 4, 0, -5}, /* 0x47 G */
{170, 8, 5, 4, 0, -5}, /* 0x48 H */
{175, 8, 5, 4, 0, -5}, /* 0x49 I */
{180, 8, 5, 4, 0, -5}, /* 0x4A J */
{185, 8, 5, 4, 0, -5}, /* 0x4B K */
{190, 8, 5, 4, 0, -5}, /* 0x4C L */
{195, 8, 5, 4, 0, -5}, /* 0x4D M */
{200, 8, 5, 4, 0, -5}, /* 0x4E N */
{205, 8, 5, 4, 0, -5}, /* 0x4F O */
{210, 8, 5, 4, 0, -5}, /* 0x50 P */
{215, 8, 5, 4, 0, -5}, /* 0x51 Q */
{220, 8, 5, 4, 0, -5}, /* 0x52 R */
{225, 8, 5, 4, 0, -5}, /* 0x53 S */
{230, 8, 5, 4, 0, -5}, /* 0x54 T */
{235, 8, 5, 4, 0, -5}, /* 0x55 U */
{240, 8, 5, 4, 0, -5}, /* 0x56 V */
{245, 8, 5, 4, 0, -5}, /* 0x57 W */
{250, 8, 5, 4, 0, -5}, /* 0x58 X */
{255, 8, 5, 4, 0, -5}, /* 0x59 Y */
{260, 8, 5, 4, 0, -5}, /* 0x5A Z */
{265, 8, 5, 4, 0, -5}, /* 0x5B bracketleft */
{270, 8, 3, 4, 0, -4}, /* 0x5C backslash */
{273, 8, 5, 4, 0, -5}, /* 0x5D bracketright */
{278, 8, 2, 4, 0, -5}, /* 0x5E asciicircum */
{280, 8, 1, 4, 0, -1}, /* 0x5F underscore */
{281, 8, 2, 3, 0, -5}, /* 0x60 grave */
{283, 8, 4, 4, 0, -4}, /* 0x61 a */
{287, 8, 5, 4, 0, -5}, /* 0x62 b */
{292, 8, 4, 4, 0, -4}, /* 0x63 c */
{296, 8, 5, 4, 0, -5}, /* 0x64 d */
{301, 8, 4, 4, 0, -4}, /* 0x65 e */
{305, 8, 5, 4, 0, -5}, /* 0x66 f */
{310, 8, 5, 4, 0, -4}, /* 0x67 g */
{315, 8, 5, 4, 0, -5}, /* 0x68 h */
{320, 8, 5, 2, 0, -5}, /* 0x69 i */
{325, 8, 6, 4, 0, -5}, /* 0x6A j */
{331, 8, 5, 4, 0, -5}, /* 0x6B k */
{336, 8, 5, 4, 0, -5}, /* 0x6C l */
{341, 8, 4, 4, 0, -4}, /* 0x6D m */
{345, 8, 4, 4, 0, -4}, /* 0x6E n */
{349, 8, 4, 4, 0, -4}, /* 0x6F o */
{353, 8, 5, 4, 0, -4}, /* 0x70 p */
{358, 8, 5, 4, 0, -4}, /* 0x71 q */
{363, 8, 4, 4, 0, -4}, /* 0x72 r */
{367, 8, 4, 4, 0, -4}, /* 0x73 s */
{371, 8, 5, 4, 0, -5}, /* 0x74 t */
{376, 8, 4, 4, 0, -4}, /* 0x75 u */
{380, 8, 4, 4, 0, -4}, /* 0x76 v */
{384, 8, 4, 4, 0, -4}, /* 0x77 w */
{388, 8, 4, 4, 0, -4}, /* 0x78 x */
{392, 8, 5, 4, 0, -4}, /* 0x79 y */
{397, 8, 4, 4, 0, -4}, /* 0x7A z */
{401, 8, 5, 4, 0, -5}, /* 0x7B braceleft */
{406, 8, 5, 2, 0, -5}, /* 0x7C bar */
{411, 8, 5, 4, 0, -5}, /* 0x7D braceright */
{416, 8, 2, 4, 0, -5}, /* 0x7E asciitilde */
{0, 1, 1, 2, 0, -5}, /* 0x20 space */
{1, 1, 5, 2, 0, -5}, /* 0x21 exclam */
{2, 3, 2, 4, 0, -5}, /* 0x22 quotedbl */
{3, 3, 5, 4, 0, -5}, /* 0x23 numbersign */
{5, 3, 5, 4, 0, -5}, /* 0x24 dollar */
{7, 3, 5, 4, 0, -5}, /* 0x25 percent */
{9, 3, 5, 4, 0, -5}, /* 0x26 ampersand */
{11, 1, 2, 2, 0, -5}, /* 0x27 quotesingle */
{12, 2, 5, 3, 0, -5}, /* 0x28 parenleft */
{14, 2, 5, 3, 0, -5}, /* 0x29 parenright */
{16, 3, 3, 4, 0, -5}, /* 0x2A asterisk */
{18, 3, 3, 4, 0, -4}, /* 0x2B plus */
{20, 2, 2, 3, 0, -2}, /* 0x2C comma */
{21, 3, 1, 4, 0, -3}, /* 0x2D hyphen */
{22, 1, 1, 2, 0, -1}, /* 0x2E period */
{23, 3, 5, 4, 0, -5}, /* 0x2F slash */
{25, 3, 5, 4, 0, -5}, /* 0x30 zero */
{27, 2, 5, 3, 0, -5}, /* 0x31 one */
{29, 3, 5, 4, 0, -5}, /* 0x32 two */
{31, 3, 5, 4, 0, -5}, /* 0x33 three */
{33, 3, 5, 4, 0, -5}, /* 0x34 four */
{35, 3, 5, 4, 0, -5}, /* 0x35 five */
{37, 3, 5, 4, 0, -5}, /* 0x36 six */
{39, 3, 5, 4, 0, -5}, /* 0x37 seven */
{41, 3, 5, 4, 0, -5}, /* 0x38 eight */
{43, 3, 5, 4, 0, -5}, /* 0x39 nine */
{45, 1, 3, 2, 0, -4}, /* 0x3A colon */
{46, 2, 4, 3, 0, -4}, /* 0x3B semicolon */
{47, 3, 5, 4, 0, -5}, /* 0x3C less */
{49, 3, 3, 4, 0, -4}, /* 0x3D equal */
{51, 3, 5, 4, 0, -5}, /* 0x3E greater */
{53, 3, 5, 4, 0, -5}, /* 0x3F question */
{55, 3, 5, 4, 0, -5}, /* 0x40 at */
{57, 3, 5, 4, 0, -5}, /* 0x41 A */
{59, 3, 5, 4, 0, -5}, /* 0x42 B */
{61, 3, 5, 4, 0, -5}, /* 0x43 C */
{63, 3, 5, 4, 0, -5}, /* 0x44 D */
{65, 3, 5, 4, 0, -5}, /* 0x45 E */
{67, 3, 5, 4, 0, -5}, /* 0x46 F */
{69, 3, 5, 4, 0, -5}, /* 0x47 G */
{71, 3, 5, 4, 0, -5}, /* 0x48 H */
{73, 3, 5, 4, 0, -5}, /* 0x49 I */
{75, 3, 5, 4, 0, -5}, /* 0x4A J */
{77, 3, 5, 4, 0, -5}, /* 0x4B K */
{79, 3, 5, 4, 0, -5}, /* 0x4C L */
{81, 3, 5, 4, 0, -5}, /* 0x4D M */
{83, 3, 5, 4, 0, -5}, /* 0x4E N */
{85, 3, 5, 4, 0, -5}, /* 0x4F O */
{87, 3, 5, 4, 0, -5}, /* 0x50 P */
{89, 3, 5, 4, 0, -5}, /* 0x51 Q */
{91, 3, 5, 4, 0, -5}, /* 0x52 R */
{93, 3, 5, 4, 0, -5}, /* 0x53 S */
{95, 3, 5, 4, 0, -5}, /* 0x54 T */
{97, 3, 5, 4, 0, -5}, /* 0x55 U */
{99, 3, 5, 4, 0, -5}, /* 0x56 V */
{101, 3, 5, 4, 0, -5}, /* 0x57 W */
{103, 3, 5, 4, 0, -5}, /* 0x58 X */
{105, 3, 5, 4, 0, -5}, /* 0x59 Y */
{107, 3, 5, 4, 0, -5}, /* 0x5A Z */
{109, 3, 5, 4, 0, -5}, /* 0x5B bracketleft */
{111, 3, 3, 4, 0, -4}, /* 0x5C backslash */
{113, 3, 5, 4, 0, -5}, /* 0x5D bracketright */
{115, 3, 2, 4, 0, -5}, /* 0x5E asciicircum */
{116, 3, 1, 4, 0, -1}, /* 0x5F underscore */
{117, 2, 2, 3, 0, -5}, /* 0x60 grave */
{118, 3, 4, 4, 0, -4}, /* 0x61 a */
{120, 3, 5, 4, 0, -5}, /* 0x62 b */
{122, 3, 4, 4, 0, -4}, /* 0x63 c */
{124, 3, 5, 4, 0, -5}, /* 0x64 d */
{126, 3, 4, 4, 0, -4}, /* 0x65 e */
{128, 3, 5, 4, 0, -5}, /* 0x66 f */
{130, 3, 5, 4, 0, -4}, /* 0x67 g */
{132, 3, 5, 4, 0, -5}, /* 0x68 h */
{134, 1, 5, 2, 0, -5}, /* 0x69 i */
{135, 3, 6, 4, 0, -5}, /* 0x6A j */
{138, 3, 5, 4, 0, -5}, /* 0x6B k */
{140, 3, 5, 4, 0, -5}, /* 0x6C l */
{142, 3, 4, 4, 0, -4}, /* 0x6D m */
{144, 3, 4, 4, 0, -4}, /* 0x6E n */
{146, 3, 4, 4, 0, -4}, /* 0x6F o */
{148, 3, 5, 4, 0, -4}, /* 0x70 p */
{150, 3, 5, 4, 0, -4}, /* 0x71 q */
{152, 3, 4, 4, 0, -4}, /* 0x72 r */
{154, 3, 4, 4, 0, -4}, /* 0x73 s */
{156, 3, 5, 4, 0, -5}, /* 0x74 t */
{158, 3, 4, 4, 0, -4}, /* 0x75 u */
{160, 3, 4, 4, 0, -4}, /* 0x76 v */
{162, 3, 4, 4, 0, -4}, /* 0x77 w */
{164, 3, 4, 4, 0, -4}, /* 0x78 x */
{166, 3, 5, 4, 0, -4}, /* 0x79 y */
{168, 3, 4, 4, 0, -4}, /* 0x7A z */
{170, 3, 5, 4, 0, -5}, /* 0x7B braceleft */
{172, 1, 5, 2, 0, -5}, /* 0x7C bar */
{173, 3, 5, 4, 0, -5}, /* 0x7D braceright */
{175, 3, 2, 4, 0, -5}, /* 0x7E asciitilde */
#if (TOMTHUMB_USE_EXTENDED)
{418, 8, 5, 2, 0, -5}, /* 0xA1 exclamdown */
{423, 8, 5, 4, 0, -5}, /* 0xA2 cent */
{428, 8, 5, 4, 0, -5}, /* 0xA3 sterling */
{433, 8, 5, 4, 0, -5}, /* 0xA4 currency */
{438, 8, 5, 4, 0, -5}, /* 0xA5 yen */
{443, 8, 5, 2, 0, -5}, /* 0xA6 brokenbar */
{448, 8, 5, 4, 0, -5}, /* 0xA7 section */
{453, 8, 1, 4, 0, -5}, /* 0xA8 dieresis */
{454, 8, 3, 4, 0, -5}, /* 0xA9 copyright */
{457, 8, 5, 4, 0, -5}, /* 0xAA ordfeminine */
{462, 8, 3, 3, 0, -5}, /* 0xAB guillemotleft */
{465, 8, 2, 4, 0, -4}, /* 0xAC logicalnot */
{467, 8, 1, 3, 0, -3}, /* 0xAD softhyphen */
{468, 8, 3, 4, 0, -5}, /* 0xAE registered */
{471, 8, 1, 4, 0, -5}, /* 0xAF macron */
{472, 8, 3, 4, 0, -5}, /* 0xB0 degree */
{475, 8, 5, 4, 0, -5}, /* 0xB1 plusminus */
{480, 8, 3, 4, 0, -5}, /* 0xB2 twosuperior */
{483, 8, 3, 4, 0, -5}, /* 0xB3 threesuperior */
{486, 8, 2, 3, 0, -5}, /* 0xB4 acute */
{488, 8, 5, 4, 0, -5}, /* 0xB5 mu */
{493, 8, 5, 4, 0, -5}, /* 0xB6 paragraph */
{498, 8, 3, 4, 0, -4}, /* 0xB7 periodcentered */
{501, 8, 3, 4, 0, -3}, /* 0xB8 cedilla */
{504, 8, 3, 2, 0, -5}, /* 0xB9 onesuperior */
{507, 8, 5, 4, 0, -5}, /* 0xBA ordmasculine */
{512, 8, 3, 3, 0, -5}, /* 0xBB guillemotright */
{515, 8, 5, 4, 0, -5}, /* 0xBC onequarter */
{520, 8, 5, 4, 0, -5}, /* 0xBD onehalf */
{525, 8, 5, 4, 0, -5}, /* 0xBE threequarters */
{530, 8, 5, 4, 0, -5}, /* 0xBF questiondown */
{535, 8, 5, 4, 0, -5}, /* 0xC0 Agrave */
{540, 8, 5, 4, 0, -5}, /* 0xC1 Aacute */
{545, 8, 5, 4, 0, -5}, /* 0xC2 Acircumflex */
{550, 8, 5, 4, 0, -5}, /* 0xC3 Atilde */
{555, 8, 5, 4, 0, -5}, /* 0xC4 Adieresis */
{560, 8, 5, 4, 0, -5}, /* 0xC5 Aring */
{565, 8, 5, 4, 0, -5}, /* 0xC6 AE */
{570, 8, 6, 4, 0, -5}, /* 0xC7 Ccedilla */
{576, 8, 5, 4, 0, -5}, /* 0xC8 Egrave */
{581, 8, 5, 4, 0, -5}, /* 0xC9 Eacute */
{586, 8, 5, 4, 0, -5}, /* 0xCA Ecircumflex */
{591, 8, 5, 4, 0, -5}, /* 0xCB Edieresis */
{596, 8, 5, 4, 0, -5}, /* 0xCC Igrave */
{601, 8, 5, 4, 0, -5}, /* 0xCD Iacute */
{606, 8, 5, 4, 0, -5}, /* 0xCE Icircumflex */
{611, 8, 5, 4, 0, -5}, /* 0xCF Idieresis */
{616, 8, 5, 4, 0, -5}, /* 0xD0 Eth */
{621, 8, 5, 4, 0, -5}, /* 0xD1 Ntilde */
{626, 8, 5, 4, 0, -5}, /* 0xD2 Ograve */
{631, 8, 5, 4, 0, -5}, /* 0xD3 Oacute */
{636, 8, 5, 4, 0, -5}, /* 0xD4 Ocircumflex */
{641, 8, 5, 4, 0, -5}, /* 0xD5 Otilde */
{646, 8, 5, 4, 0, -5}, /* 0xD6 Odieresis */
{651, 8, 3, 4, 0, -4}, /* 0xD7 multiply */
{654, 8, 5, 4, 0, -5}, /* 0xD8 Oslash */
{659, 8, 5, 4, 0, -5}, /* 0xD9 Ugrave */
{664, 8, 5, 4, 0, -5}, /* 0xDA Uacute */
{669, 8, 5, 4, 0, -5}, /* 0xDB Ucircumflex */
{674, 8, 5, 4, 0, -5}, /* 0xDC Udieresis */
{679, 8, 5, 4, 0, -5}, /* 0xDD Yacute */
{684, 8, 5, 4, 0, -5}, /* 0xDE Thorn */
{689, 8, 6, 4, 0, -5}, /* 0xDF germandbls */
{695, 8, 5, 4, 0, -5}, /* 0xE0 agrave */
{700, 8, 5, 4, 0, -5}, /* 0xE1 aacute */
{705, 8, 5, 4, 0, -5}, /* 0xE2 acircumflex */
{710, 8, 5, 4, 0, -5}, /* 0xE3 atilde */
{715, 8, 5, 4, 0, -5}, /* 0xE4 adieresis */
{720, 8, 5, 4, 0, -5}, /* 0xE5 aring */
{725, 8, 4, 4, 0, -4}, /* 0xE6 ae */
{729, 8, 5, 4, 0, -4}, /* 0xE7 ccedilla */
{734, 8, 5, 4, 0, -5}, /* 0xE8 egrave */
{739, 8, 5, 4, 0, -5}, /* 0xE9 eacute */
{744, 8, 5, 4, 0, -5}, /* 0xEA ecircumflex */
{749, 8, 5, 4, 0, -5}, /* 0xEB edieresis */
{754, 8, 5, 3, 0, -5}, /* 0xEC igrave */
{759, 8, 5, 3, 0, -5}, /* 0xED iacute */
{764, 8, 5, 4, 0, -5}, /* 0xEE icircumflex */
{769, 8, 5, 4, 0, -5}, /* 0xEF idieresis */
{774, 8, 5, 4, 0, -5}, /* 0xF0 eth */
{779, 8, 5, 4, 0, -5}, /* 0xF1 ntilde */
{784, 8, 5, 4, 0, -5}, /* 0xF2 ograve */
{789, 8, 5, 4, 0, -5}, /* 0xF3 oacute */
{794, 8, 5, 4, 0, -5}, /* 0xF4 ocircumflex */
{799, 8, 5, 4, 0, -5}, /* 0xF5 otilde */
{804, 8, 5, 4, 0, -5}, /* 0xF6 odieresis */
{809, 8, 5, 4, 0, -5}, /* 0xF7 divide */
{814, 8, 4, 4, 0, -4}, /* 0xF8 oslash */
{818, 8, 5, 4, 0, -5}, /* 0xF9 ugrave */
{823, 8, 5, 4, 0, -5}, /* 0xFA uacute */
{828, 8, 5, 4, 0, -5}, /* 0xFB ucircumflex */
{833, 8, 5, 4, 0, -5}, /* 0xFC udieresis */
{838, 8, 6, 4, 0, -5}, /* 0xFD yacute */
{844, 8, 5, 4, 0, -4}, /* 0xFE thorn */
{849, 8, 6, 4, 0, -5}, /* 0xFF ydieresis */
{855, 8, 1, 2, 0, -1}, /* 0x11D gcircumflex */
{856, 8, 5, 4, 0, -5}, /* 0x152 OE */
{861, 8, 4, 4, 0, -4}, /* 0x153 oe */
{865, 8, 5, 4, 0, -5}, /* 0x160 Scaron */
{870, 8, 5, 4, 0, -5}, /* 0x161 scaron */
{875, 8, 5, 4, 0, -5}, /* 0x178 Ydieresis */
{880, 8, 5, 4, 0, -5}, /* 0x17D Zcaron */
{885, 8, 5, 4, 0, -5}, /* 0x17E zcaron */
{890, 8, 1, 2, 0, -1}, /* 0xEA4 uni0EA4 */
{891, 8, 1, 2, 0, -1}, /* 0x13A0 uni13A0 */
{892, 8, 1, 2, 0, -3}, /* 0x2022 bullet */
{893, 8, 1, 4, 0, -1}, /* 0x2026 ellipsis */
{894, 8, 5, 4, 0, -5}, /* 0x20AC Euro */
{899, 8, 5, 4, 0, -5}, /* 0xFFFD uniFFFD */
{176, 1, 5, 2, 0, -5}, /* 0xA1 exclamdown */
{177, 3, 5, 4, 0, -5}, /* 0xA2 cent */
{179, 3, 5, 4, 0, -5}, /* 0xA3 sterling */
{181, 3, 5, 4, 0, -5}, /* 0xA4 currency */
{183, 3, 5, 4, 0, -5}, /* 0xA5 yen */
{185, 1, 5, 2, 0, -5}, /* 0xA6 brokenbar */
{186, 3, 5, 4, 0, -5}, /* 0xA7 section */
{188, 3, 1, 4, 0, -5}, /* 0xA8 dieresis */
{189, 3, 3, 4, 0, -5}, /* 0xA9 copyright */
{191, 3, 5, 4, 0, -5}, /* 0xAA ordfeminine */
{193, 2, 3, 3, 0, -5}, /* 0xAB guillemotleft */
{194, 3, 2, 4, 0, -4}, /* 0xAC logicalnot */
{195, 2, 1, 3, 0, -3}, /* 0xAD softhyphen */
{196, 3, 3, 4, 0, -5}, /* 0xAE registered */
{198, 3, 1, 4, 0, -5}, /* 0xAF macron */
{199, 3, 3, 4, 0, -5}, /* 0xB0 degree */
{201, 3, 5, 4, 0, -5}, /* 0xB1 plusminus */
{203, 3, 3, 4, 0, -5}, /* 0xB2 twosuperior */
{205, 3, 3, 4, 0, -5}, /* 0xB3 threesuperior */
{207, 2, 2, 3, 0, -5}, /* 0xB4 acute */
{208, 3, 5, 4, 0, -5}, /* 0xB5 mu */
{210, 3, 5, 4, 0, -5}, /* 0xB6 paragraph */
{212, 3, 3, 4, 0, -4}, /* 0xB7 periodcentered */
{214, 3, 3, 4, 0, -3}, /* 0xB8 cedilla */
{216, 1, 3, 2, 0, -5}, /* 0xB9 onesuperior */
{217, 3, 5, 4, 0, -5}, /* 0xBA ordmasculine */
{219, 2, 3, 3, 0, -5}, /* 0xBB guillemotright */
{220, 3, 5, 4, 0, -5}, /* 0xBC onequarter */
{222, 3, 5, 4, 0, -5}, /* 0xBD onehalf */
{224, 3, 5, 4, 0, -5}, /* 0xBE threequarters */
{226, 3, 5, 4, 0, -5}, /* 0xBF questiondown */
{228, 3, 5, 4, 0, -5}, /* 0xC0 Agrave */
{230, 3, 5, 4, 0, -5}, /* 0xC1 Aacute */
{232, 3, 5, 4, 0, -5}, /* 0xC2 Acircumflex */
{234, 3, 5, 4, 0, -5}, /* 0xC3 Atilde */
{236, 3, 5, 4, 0, -5}, /* 0xC4 Adieresis */
{238, 3, 5, 4, 0, -5}, /* 0xC5 Aring */
{240, 3, 5, 4, 0, -5}, /* 0xC6 AE */
{242, 3, 6, 4, 0, -5}, /* 0xC7 Ccedilla */
{245, 3, 5, 4, 0, -5}, /* 0xC8 Egrave */
{247, 3, 5, 4, 0, -5}, /* 0xC9 Eacute */
{249, 3, 5, 4, 0, -5}, /* 0xCA Ecircumflex */
{251, 3, 5, 4, 0, -5}, /* 0xCB Edieresis */
{253, 3, 5, 4, 0, -5}, /* 0xCC Igrave */
{255, 3, 5, 4, 0, -5}, /* 0xCD Iacute */
{257, 3, 5, 4, 0, -5}, /* 0xCE Icircumflex */
{259, 3, 5, 4, 0, -5}, /* 0xCF Idieresis */
{261, 3, 5, 4, 0, -5}, /* 0xD0 Eth */
{263, 3, 5, 4, 0, -5}, /* 0xD1 Ntilde */
{265, 3, 5, 4, 0, -5}, /* 0xD2 Ograve */
{267, 3, 5, 4, 0, -5}, /* 0xD3 Oacute */
{269, 3, 5, 4, 0, -5}, /* 0xD4 Ocircumflex */
{271, 3, 5, 4, 0, -5}, /* 0xD5 Otilde */
{273, 3, 5, 4, 0, -5}, /* 0xD6 Odieresis */
{275, 3, 3, 4, 0, -4}, /* 0xD7 multiply */
{277, 3, 5, 4, 0, -5}, /* 0xD8 Oslash */
{279, 3, 5, 4, 0, -5}, /* 0xD9 Ugrave */
{281, 3, 5, 4, 0, -5}, /* 0xDA Uacute */
{283, 3, 5, 4, 0, -5}, /* 0xDB Ucircumflex */
{285, 3, 5, 4, 0, -5}, /* 0xDC Udieresis */
{287, 3, 5, 4, 0, -5}, /* 0xDD Yacute */
{289, 3, 5, 4, 0, -5}, /* 0xDE Thorn */
{291, 3, 6, 4, 0, -5}, /* 0xDF germandbls */
{294, 3, 5, 4, 0, -5}, /* 0xE0 agrave */
{296, 3, 5, 4, 0, -5}, /* 0xE1 aacute */
{298, 3, 5, 4, 0, -5}, /* 0xE2 acircumflex */
{300, 3, 5, 4, 0, -5}, /* 0xE3 atilde */
{302, 3, 5, 4, 0, -5}, /* 0xE4 adieresis */
{304, 3, 5, 4, 0, -5}, /* 0xE5 aring */
{306, 3, 4, 4, 0, -4}, /* 0xE6 ae */
{308, 3, 5, 4, 0, -4}, /* 0xE7 ccedilla */
{310, 3, 5, 4, 0, -5}, /* 0xE8 egrave */
{312, 3, 5, 4, 0, -5}, /* 0xE9 eacute */
{314, 3, 5, 4, 0, -5}, /* 0xEA ecircumflex */
{316, 3, 5, 4, 0, -5}, /* 0xEB edieresis */
{318, 2, 5, 3, 0, -5}, /* 0xEC igrave */
{320, 2, 5, 3, 0, -5}, /* 0xED iacute */
{322, 3, 5, 4, 0, -5}, /* 0xEE icircumflex */
{324, 3, 5, 4, 0, -5}, /* 0xEF idieresis */
{326, 3, 5, 4, 0, -5}, /* 0xF0 eth */
{328, 3, 5, 4, 0, -5}, /* 0xF1 ntilde */
{330, 3, 5, 4, 0, -5}, /* 0xF2 ograve */
{332, 3, 5, 4, 0, -5}, /* 0xF3 oacute */
{334, 3, 5, 4, 0, -5}, /* 0xF4 ocircumflex */
{336, 3, 5, 4, 0, -5}, /* 0xF5 otilde */
{338, 3, 5, 4, 0, -5}, /* 0xF6 odieresis */
{340, 3, 5, 4, 0, -5}, /* 0xF7 divide */
{342, 3, 4, 4, 0, -4}, /* 0xF8 oslash */
{344, 3, 5, 4, 0, -5}, /* 0xF9 ugrave */
{346, 3, 5, 4, 0, -5}, /* 0xFA uacute */
{348, 3, 5, 4, 0, -5}, /* 0xFB ucircumflex */
{350, 3, 5, 4, 0, -5}, /* 0xFC udieresis */
{352, 3, 6, 4, 0, -5}, /* 0xFD yacute */
{355, 3, 5, 4, 0, -4}, /* 0xFE thorn */
{357, 3, 6, 4, 0, -5}, /* 0xFF ydieresis */
{360, 1, 1, 2, 0, -1}, /* 0x11D gcircumflex */
{361, 3, 5, 4, 0, -5}, /* 0x152 OE */
{363, 3, 4, 4, 0, -4}, /* 0x153 oe */
{365, 3, 5, 4, 0, -5}, /* 0x160 Scaron */
{367, 3, 5, 4, 0, -5}, /* 0x161 scaron */
{369, 3, 5, 4, 0, -5}, /* 0x178 Ydieresis */
{371, 3, 5, 4, 0, -5}, /* 0x17D Zcaron */
{373, 3, 5, 4, 0, -5}, /* 0x17E zcaron */
{375, 1, 1, 2, 0, -1}, /* 0xEA4 uni0EA4 */
{376, 1, 1, 2, 0, -1}, /* 0x13A0 uni13A0 */
{377, 1, 1, 2, 0, -3}, /* 0x2022 bullet */
{378, 3, 1, 4, 0, -1}, /* 0x2026 ellipsis */
{379, 3, 5, 4, 0, -5}, /* 0x20AC Euro */
{381, 4, 5, 5, 0, -5}, /* 0xFFFD uniFFFD */
#endif /* (TOMTHUMB_USE_EXTENDED) */
};

135
fontconvert/bdf2adafruit.py Normal file
View File

@ -0,0 +1,135 @@
#!/usr/bin/python2
# MIT License.
# Copyright (c) 2016 William Skellenger
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
# This small script is designed to mostly take a BDF file and convert it to a
# format that can largely be cut/pasted as an Adafruit-format font.
# It was written in an hour or so and did what I needed it to do.
# I used it for one file. Maybe it bombs on other files.
# William Skellenger, Feb 2016
# (email: williamj@skellenger.net)
# (Twitter: @skelliam)
#
# Usage: bdf2adafruit.py <somefont.bdf> > out.txt
#
# Once you have out.txt you can cut/paste the contents into a new font
# header file as part of the Adafruit GFX library.
import sys
myfile = open(sys.argv[1])
processing = 0
getting_rows = 0
chars = []
bitmapData = []
class Glyph:
encoding = -1
rows = []
comment = ""
offset = -1
width = 0
height = 0
advance = 0
xoffs = 0
yoffs = 0
def __init__(self, comment):
self.comment = comment
self.rows = []
for line in myfile.readlines():
if 'STARTCHAR' in line:
processing = 1
vals = line.split()
g = Glyph(vals[1])
#g.width = 8 #in this example always 8 bits wide
elif 'ENDCHAR' in line:
dataByteCompressed = 0
dataByteCompressedIndex = 8
g.height = len(bitmapData)
for value in bitmapData:
bitIndex = 0
while bitIndex < g.width:
bit = (value >> (7 - bitIndex)) & 0x01
dataByteCompressed |= bit << (dataByteCompressedIndex - 1)
dataByteCompressedIndex -= 1
if dataByteCompressedIndex == 0:
dataByteCompressedIndex = 8
g.rows.append(dataByteCompressed)
dataByteCompressed = 0
bitIndex += 1
if 8 != dataByteCompressedIndex:
g.rows.append(dataByteCompressed)
chars.append(g) #append the completed glyph into list
processing = 0
getting_rows = 0
bitmapData.clear()
if processing:
if 'ENCODING' in line:
vals = line.split()
g.encoding = int(vals[1])
elif 'DWIDTH' in line:
vals = line.split()
#g.advance = int(vals[1]) #cursor advance seems to be the first number in DWIDTH
elif 'BBX' in line:
vals = line.split()
g.xoffs = 0
g.yoffs = -(int(vals[2]) + int(vals[4]))
g.advance = (int(vals[1]) + 1) #x bounding box + 1
g.width = int(vals[1])
elif 'BITMAP' in line:
getting_rows = 1
elif getting_rows:
#g.rows.append(int(line, 16)) #append pixel rows into glyph's list of rows
bitmapData.append(int(line, 16))
print
i=0
for char in chars:
char.offset = i
print("\t", end='')
num = 3
for row in char.rows:
if num != 3:
print(" ", end = '')
print("0x%02X," %(row), end = ''),
i+=1
num-=1
if num == 1:
print("\t\t", end = '')
if num == 2:
print("\t\t\t", end = '')
print("\t/* 0x%02X %s */" %(char.encoding, char.comment))
for char in chars:
# offset, bit-width, bit-height, advance cursor, x offset, y offset
print("\t{ %d, %d, %d, %d, %d, %d }, /* 0x%02X %s */" %(
char.offset, char.width, char.height,
char.advance, char.xoffs, char.yoffs,
char.encoding, char.comment))