acid-drop

- Hacking the planet from a LilyGo T-Deck using custom firmware
git clone git://git.acid.vegas/acid-drop.git
Log | Files | Refs | Archive | README | LICENSE

TomThumb.h (24111B)

      1 /**
      2 ** The original 3x5 font is licensed under the 3-clause BSD license:
      3 **
      4 ** Copyright 1999 Brian J. Swetland
      5 ** Copyright 1999 Vassilii Khachaturov
      6 ** Portions (of vt100.c/vt100.h) copyright Dan Marks
      7 ** 
      8 ** All rights reserved.
      9 **
     10 ** Redistribution and use in source and binary forms, with or without
     11 ** modification, are permitted provided that the following conditions
     12 ** are met:
     13 ** 1. Redistributions of source code must retain the above copyright
     14 **    notice, this list of conditions, and the following disclaimer.
     15 ** 2. Redistributions in binary form must reproduce the above copyright
     16 **    notice, this list of conditions, and the following disclaimer in the
     17 **    documentation and/or other materials provided with the distribution.
     18 ** 3. The name of the authors may not be used to endorse or promote products
     19 **    derived from this software without specific prior written permission.
     20 **
     21 ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     22 ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     23 ** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     24 ** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     25 ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     26 ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     27 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     28 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     29 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     30 ** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     31 ** 
     32 ** Modifications to Tom Thumb for improved readability are from Robey Pointer, 
     33 ** see:
     34 ** http://robey.lag.net/2010/01/23/tiny-monospace-font.html
     35 ** 
     36 ** The original author does not have any objection to relicensing of Robey 
     37 ** Pointer's modifications (in this file) in a more permissive license.  See 
     38 ** the discussion at the above blog, and also here:
     39 ** http://opengameart.org/forumtopic/how-to-submit-art-using-the-3-clause-bsd-license
     40 **
     41 ** Feb 21, 2016: Conversion from Linux BDF --> Adafruit GFX font,
     42 ** with the help of this Python script:
     43 ** https://gist.github.com/skelliam/322d421f028545f16f6d
     44 ** William Skellenger (williamj@skellenger.net)
     45 ** Twitter: @skelliam
     46 ** 
     47 */
     48 
     49 #define TOMTHUMB_USE_EXTENDED 0
     50 
     51 const uint8_t TomThumbBitmaps[] PROGMEM = {
     52    0x00,                                /* 0x20 space */
     53    0x80, 0x80, 0x80, 0x00, 0x80,        /* 0x21 exclam */
     54    0xA0, 0xA0,                          /* 0x22 quotedbl */
     55    0xA0, 0xE0, 0xA0, 0xE0, 0xA0,        /* 0x23 numbersign */
     56    0x60, 0xC0, 0x60, 0xC0, 0x40,        /* 0x24 dollar */
     57    0x80, 0x20, 0x40, 0x80, 0x20,        /* 0x25 percent */
     58    0xC0, 0xC0, 0xE0, 0xA0, 0x60,        /* 0x26 ampersand */
     59    0x80, 0x80,                          /* 0x27 quotesingle */
     60    0x40, 0x80, 0x80, 0x80, 0x40,        /* 0x28 parenleft */
     61    0x80, 0x40, 0x40, 0x40, 0x80,        /* 0x29 parenright */
     62    0xA0, 0x40, 0xA0,                    /* 0x2A asterisk */
     63    0x40, 0xE0, 0x40,                    /* 0x2B plus */
     64    0x40, 0x80,                          /* 0x2C comma */
     65    0xE0,                                /* 0x2D hyphen */
     66    0x80,                                /* 0x2E period */
     67    0x20, 0x20, 0x40, 0x80, 0x80,        /* 0x2F slash */
     68    0x60, 0xA0, 0xA0, 0xA0, 0xC0,        /* 0x30 zero */
     69    0x40, 0xC0, 0x40, 0x40, 0x40,        /* 0x31 one */
     70    0xC0, 0x20, 0x40, 0x80, 0xE0,        /* 0x32 two */
     71    0xC0, 0x20, 0x40, 0x20, 0xC0,        /* 0x33 three */
     72    0xA0, 0xA0, 0xE0, 0x20, 0x20,        /* 0x34 four */
     73    0xE0, 0x80, 0xC0, 0x20, 0xC0,        /* 0x35 five */
     74    0x60, 0x80, 0xE0, 0xA0, 0xE0,        /* 0x36 six */
     75    0xE0, 0x20, 0x40, 0x80, 0x80,        /* 0x37 seven */
     76    0xE0, 0xA0, 0xE0, 0xA0, 0xE0,        /* 0x38 eight */
     77    0xE0, 0xA0, 0xE0, 0x20, 0xC0,        /* 0x39 nine */
     78    0x80, 0x00, 0x80,                    /* 0x3A colon */
     79    0x40, 0x00, 0x40, 0x80,              /* 0x3B semicolon */
     80    0x20, 0x40, 0x80, 0x40, 0x20,        /* 0x3C less */
     81    0xE0, 0x00, 0xE0,                    /* 0x3D equal */
     82    0x80, 0x40, 0x20, 0x40, 0x80,        /* 0x3E greater */
     83    0xE0, 0x20, 0x40, 0x00, 0x40,        /* 0x3F question */
     84    0x40, 0xA0, 0xE0, 0x80, 0x60,        /* 0x40 at */
     85    0x40, 0xA0, 0xE0, 0xA0, 0xA0,        /* 0x41 A */
     86    0xC0, 0xA0, 0xC0, 0xA0, 0xC0,        /* 0x42 B */
     87    0x60, 0x80, 0x80, 0x80, 0x60,        /* 0x43 C */
     88    0xC0, 0xA0, 0xA0, 0xA0, 0xC0,        /* 0x44 D */
     89    0xE0, 0x80, 0xE0, 0x80, 0xE0,        /* 0x45 E */
     90    0xE0, 0x80, 0xE0, 0x80, 0x80,        /* 0x46 F */
     91    0x60, 0x80, 0xE0, 0xA0, 0x60,        /* 0x47 G */
     92    0xA0, 0xA0, 0xE0, 0xA0, 0xA0,        /* 0x48 H */
     93    0xE0, 0x40, 0x40, 0x40, 0xE0,        /* 0x49 I */
     94    0x20, 0x20, 0x20, 0xA0, 0x40,        /* 0x4A J */
     95    0xA0, 0xA0, 0xC0, 0xA0, 0xA0,        /* 0x4B K */
     96    0x80, 0x80, 0x80, 0x80, 0xE0,        /* 0x4C L */
     97    0xA0, 0xE0, 0xE0, 0xA0, 0xA0,        /* 0x4D M */
     98    0xA0, 0xE0, 0xE0, 0xE0, 0xA0,        /* 0x4E N */
     99    0x40, 0xA0, 0xA0, 0xA0, 0x40,        /* 0x4F O */
    100    0xC0, 0xA0, 0xC0, 0x80, 0x80,        /* 0x50 P */
    101    0x40, 0xA0, 0xA0, 0xE0, 0x60,        /* 0x51 Q */
    102    0xC0, 0xA0, 0xE0, 0xC0, 0xA0,        /* 0x52 R */
    103    0x60, 0x80, 0x40, 0x20, 0xC0,        /* 0x53 S */
    104    0xE0, 0x40, 0x40, 0x40, 0x40,        /* 0x54 T */
    105    0xA0, 0xA0, 0xA0, 0xA0, 0x60,        /* 0x55 U */
    106    0xA0, 0xA0, 0xA0, 0x40, 0x40,        /* 0x56 V */
    107    0xA0, 0xA0, 0xE0, 0xE0, 0xA0,        /* 0x57 W */
    108    0xA0, 0xA0, 0x40, 0xA0, 0xA0,        /* 0x58 X */
    109    0xA0, 0xA0, 0x40, 0x40, 0x40,        /* 0x59 Y */
    110    0xE0, 0x20, 0x40, 0x80, 0xE0,        /* 0x5A Z */
    111    0xE0, 0x80, 0x80, 0x80, 0xE0,        /* 0x5B bracketleft */
    112    0x80, 0x40, 0x20,                    /* 0x5C backslash */
    113    0xE0, 0x20, 0x20, 0x20, 0xE0,        /* 0x5D bracketright */
    114    0x40, 0xA0,                          /* 0x5E asciicircum */
    115    0xE0,                                /* 0x5F underscore */
    116    0x80, 0x40,                          /* 0x60 grave */
    117    0xC0, 0x60, 0xA0, 0xE0,              /* 0x61 a */
    118    0x80, 0xC0, 0xA0, 0xA0, 0xC0,        /* 0x62 b */
    119    0x60, 0x80, 0x80, 0x60,              /* 0x63 c */
    120    0x20, 0x60, 0xA0, 0xA0, 0x60,        /* 0x64 d */
    121    0x60, 0xA0, 0xC0, 0x60,              /* 0x65 e */
    122    0x20, 0x40, 0xE0, 0x40, 0x40,        /* 0x66 f */
    123    0x60, 0xA0, 0xE0, 0x20, 0x40,        /* 0x67 g */
    124    0x80, 0xC0, 0xA0, 0xA0, 0xA0,        /* 0x68 h */
    125    0x80, 0x00, 0x80, 0x80, 0x80,        /* 0x69 i */
    126    0x20, 0x00, 0x20, 0x20, 0xA0, 0x40,  /* 0x6A j */
    127    0x80, 0xA0, 0xC0, 0xC0, 0xA0,        /* 0x6B k */
    128    0xC0, 0x40, 0x40, 0x40, 0xE0,        /* 0x6C l */
    129    0xE0, 0xE0, 0xE0, 0xA0,              /* 0x6D m */
    130    0xC0, 0xA0, 0xA0, 0xA0,              /* 0x6E n */
    131    0x40, 0xA0, 0xA0, 0x40,              /* 0x6F o */
    132    0xC0, 0xA0, 0xA0, 0xC0, 0x80,        /* 0x70 p */
    133    0x60, 0xA0, 0xA0, 0x60, 0x20,        /* 0x71 q */
    134    0x60, 0x80, 0x80, 0x80,              /* 0x72 r */
    135    0x60, 0xC0, 0x60, 0xC0,              /* 0x73 s */
    136    0x40, 0xE0, 0x40, 0x40, 0x60,        /* 0x74 t */
    137    0xA0, 0xA0, 0xA0, 0x60,              /* 0x75 u */
    138    0xA0, 0xA0, 0xE0, 0x40,              /* 0x76 v */
    139    0xA0, 0xE0, 0xE0, 0xE0,              /* 0x77 w */
    140    0xA0, 0x40, 0x40, 0xA0,              /* 0x78 x */
    141    0xA0, 0xA0, 0x60, 0x20, 0x40,        /* 0x79 y */
    142    0xE0, 0x60, 0xC0, 0xE0,              /* 0x7A z */
    143    0x60, 0x40, 0x80, 0x40, 0x60,        /* 0x7B braceleft */
    144    0x80, 0x80, 0x00, 0x80, 0x80,        /* 0x7C bar */
    145    0xC0, 0x40, 0x20, 0x40, 0xC0,        /* 0x7D braceright */
    146    0x60, 0xC0,                          /* 0x7E asciitilde */
    147 #if (TOMTHUMB_USE_EXTENDED)
    148    0x80, 0x00, 0x80, 0x80, 0x80,        /* 0xA1 exclamdown */
    149    0x40, 0xE0, 0x80, 0xE0, 0x40,        /* 0xA2 cent */
    150    0x60, 0x40, 0xE0, 0x40, 0xE0,        /* 0xA3 sterling */
    151    0xA0, 0x40, 0xE0, 0x40, 0xA0,        /* 0xA4 currency */
    152    0xA0, 0xA0, 0x40, 0xE0, 0x40,        /* 0xA5 yen */
    153    0x80, 0x80, 0x00, 0x80, 0x80,        /* 0xA6 brokenbar */
    154    0x60, 0x40, 0xA0, 0x40, 0xC0,        /* 0xA7 section */
    155    0xA0,                                /* 0xA8 dieresis */
    156    0x60, 0x80, 0x60,                    /* 0xA9 copyright */
    157    0x60, 0xA0, 0xE0, 0x00, 0xE0,        /* 0xAA ordfeminine */
    158    0x40, 0x80, 0x40,                    /* 0xAB guillemotleft */
    159    0xE0, 0x20,                          /* 0xAC logicalnot */
    160    0xC0,                                /* 0xAD softhyphen */
    161    0xC0, 0xC0, 0xA0,                    /* 0xAE registered */
    162    0xE0,                                /* 0xAF macron */
    163    0x40, 0xA0, 0x40,                    /* 0xB0 degree */
    164    0x40, 0xE0, 0x40, 0x00, 0xE0,        /* 0xB1 plusminus */
    165    0xC0, 0x40, 0x60,                    /* 0xB2 twosuperior */
    166    0xE0, 0x60, 0xE0,                    /* 0xB3 threesuperior */
    167    0x40, 0x80,                          /* 0xB4 acute */
    168    0xA0, 0xA0, 0xA0, 0xC0, 0x80,        /* 0xB5 mu */
    169    0x60, 0xA0, 0x60, 0x60, 0x60,        /* 0xB6 paragraph */
    170    0xE0, 0xE0, 0xE0,                    /* 0xB7 periodcentered */
    171    0x40, 0x20, 0xC0,                    /* 0xB8 cedilla */
    172    0x80, 0x80, 0x80,                    /* 0xB9 onesuperior */
    173    0x40, 0xA0, 0x40, 0x00, 0xE0,        /* 0xBA ordmasculine */
    174    0x80, 0x40, 0x80,                    /* 0xBB guillemotright */
    175    0x80, 0x80, 0x00, 0x60, 0x20,        /* 0xBC onequarter */
    176    0x80, 0x80, 0x00, 0xC0, 0x60,        /* 0xBD onehalf */
    177    0xC0, 0xC0, 0x00, 0x60, 0x20,        /* 0xBE threequarters */
    178    0x40, 0x00, 0x40, 0x80, 0xE0,        /* 0xBF questiondown */
    179    0x40, 0x20, 0x40, 0xE0, 0xA0,        /* 0xC0 Agrave */
    180    0x40, 0x80, 0x40, 0xE0, 0xA0,        /* 0xC1 Aacute */
    181    0xE0, 0x00, 0x40, 0xE0, 0xA0,        /* 0xC2 Acircumflex */
    182    0x60, 0xC0, 0x40, 0xE0, 0xA0,        /* 0xC3 Atilde */
    183    0xA0, 0x40, 0xA0, 0xE0, 0xA0,        /* 0xC4 Adieresis */
    184    0xC0, 0xC0, 0xA0, 0xE0, 0xA0,        /* 0xC5 Aring */
    185    0x60, 0xC0, 0xE0, 0xC0, 0xE0,        /* 0xC6 AE */
    186    0x60, 0x80, 0x80, 0x60, 0x20, 0x40,  /* 0xC7 Ccedilla */
    187    0x40, 0x20, 0xE0, 0xC0, 0xE0,        /* 0xC8 Egrave */
    188    0x40, 0x80, 0xE0, 0xC0, 0xE0,        /* 0xC9 Eacute */
    189    0xE0, 0x00, 0xE0, 0xC0, 0xE0,        /* 0xCA Ecircumflex */
    190    0xA0, 0x00, 0xE0, 0xC0, 0xE0,        /* 0xCB Edieresis */
    191    0x40, 0x20, 0xE0, 0x40, 0xE0,        /* 0xCC Igrave */
    192    0x40, 0x80, 0xE0, 0x40, 0xE0,        /* 0xCD Iacute */
    193    0xE0, 0x00, 0xE0, 0x40, 0xE0,        /* 0xCE Icircumflex */
    194    0xA0, 0x00, 0xE0, 0x40, 0xE0,        /* 0xCF Idieresis */
    195    0xC0, 0xA0, 0xE0, 0xA0, 0xC0,        /* 0xD0 Eth */
    196    0xC0, 0x60, 0xA0, 0xE0, 0xA0,        /* 0xD1 Ntilde */
    197    0x40, 0x20, 0xE0, 0xA0, 0xE0,        /* 0xD2 Ograve */
    198    0x40, 0x80, 0xE0, 0xA0, 0xE0,        /* 0xD3 Oacute */
    199    0xE0, 0x00, 0xE0, 0xA0, 0xE0,        /* 0xD4 Ocircumflex */
    200    0xC0, 0x60, 0xE0, 0xA0, 0xE0,        /* 0xD5 Otilde */
    201    0xA0, 0x00, 0xE0, 0xA0, 0xE0,        /* 0xD6 Odieresis */
    202    0xA0, 0x40, 0xA0,                    /* 0xD7 multiply */
    203    0x60, 0xA0, 0xE0, 0xA0, 0xC0,        /* 0xD8 Oslash */
    204    0x80, 0x40, 0xA0, 0xA0, 0xE0,        /* 0xD9 Ugrave */
    205    0x20, 0x40, 0xA0, 0xA0, 0xE0,        /* 0xDA Uacute */
    206    0xE0, 0x00, 0xA0, 0xA0, 0xE0,        /* 0xDB Ucircumflex */
    207    0xA0, 0x00, 0xA0, 0xA0, 0xE0,        /* 0xDC Udieresis */
    208    0x20, 0x40, 0xA0, 0xE0, 0x40,        /* 0xDD Yacute */
    209    0x80, 0xE0, 0xA0, 0xE0, 0x80,        /* 0xDE Thorn */
    210    0x60, 0xA0, 0xC0, 0xA0, 0xC0, 0x80,  /* 0xDF germandbls */
    211    0x40, 0x20, 0x60, 0xA0, 0xE0,        /* 0xE0 agrave */
    212    0x40, 0x80, 0x60, 0xA0, 0xE0,        /* 0xE1 aacute */
    213    0xE0, 0x00, 0x60, 0xA0, 0xE0,        /* 0xE2 acircumflex */
    214    0x60, 0xC0, 0x60, 0xA0, 0xE0,        /* 0xE3 atilde */
    215    0xA0, 0x00, 0x60, 0xA0, 0xE0,        /* 0xE4 adieresis */
    216    0x60, 0x60, 0x60, 0xA0, 0xE0,        /* 0xE5 aring */
    217    0x60, 0xE0, 0xE0, 0xC0,              /* 0xE6 ae */
    218    0x60, 0x80, 0x60, 0x20, 0x40,        /* 0xE7 ccedilla */
    219    0x40, 0x20, 0x60, 0xE0, 0x60,        /* 0xE8 egrave */
    220    0x40, 0x80, 0x60, 0xE0, 0x60,        /* 0xE9 eacute */
    221    0xE0, 0x00, 0x60, 0xE0, 0x60,        /* 0xEA ecircumflex */
    222    0xA0, 0x00, 0x60, 0xE0, 0x60,        /* 0xEB edieresis */
    223    0x80, 0x40, 0x80, 0x80, 0x80,        /* 0xEC igrave */
    224    0x40, 0x80, 0x40, 0x40, 0x40,        /* 0xED iacute */
    225    0xE0, 0x00, 0x40, 0x40, 0x40,        /* 0xEE icircumflex */
    226    0xA0, 0x00, 0x40, 0x40, 0x40,        /* 0xEF idieresis */
    227    0x60, 0xC0, 0x60, 0xA0, 0x60,        /* 0xF0 eth */
    228    0xC0, 0x60, 0xC0, 0xA0, 0xA0,        /* 0xF1 ntilde */
    229    0x40, 0x20, 0x40, 0xA0, 0x40,        /* 0xF2 ograve */
    230    0x40, 0x80, 0x40, 0xA0, 0x40,        /* 0xF3 oacute */
    231    0xE0, 0x00, 0x40, 0xA0, 0x40,        /* 0xF4 ocircumflex */
    232    0xC0, 0x60, 0x40, 0xA0, 0x40,        /* 0xF5 otilde */
    233    0xA0, 0x00, 0x40, 0xA0, 0x40,        /* 0xF6 odieresis */
    234    0x40, 0x00, 0xE0, 0x00, 0x40,        /* 0xF7 divide */
    235    0x60, 0xE0, 0xA0, 0xC0,              /* 0xF8 oslash */
    236    0x80, 0x40, 0xA0, 0xA0, 0x60,        /* 0xF9 ugrave */
    237    0x20, 0x40, 0xA0, 0xA0, 0x60,        /* 0xFA uacute */
    238    0xE0, 0x00, 0xA0, 0xA0, 0x60,        /* 0xFB ucircumflex */
    239    0xA0, 0x00, 0xA0, 0xA0, 0x60,        /* 0xFC udieresis */
    240    0x20, 0x40, 0xA0, 0x60, 0x20, 0x40,  /* 0xFD yacute */
    241    0x80, 0xC0, 0xA0, 0xC0, 0x80,        /* 0xFE thorn */
    242    0xA0, 0x00, 0xA0, 0x60, 0x20, 0x40,  /* 0xFF ydieresis */
    243    0x00,                                /* 0x11D gcircumflex */
    244    0x60, 0xC0, 0xE0, 0xC0, 0x60,        /* 0x152 OE */
    245    0x60, 0xE0, 0xC0, 0xE0,              /* 0x153 oe */
    246    0xA0, 0x60, 0xC0, 0x60, 0xC0,        /* 0x160 Scaron */
    247    0xA0, 0x60, 0xC0, 0x60, 0xC0,        /* 0x161 scaron */
    248    0xA0, 0x00, 0xA0, 0x40, 0x40,        /* 0x178 Ydieresis */
    249    0xA0, 0xE0, 0x60, 0xC0, 0xE0,        /* 0x17D Zcaron */
    250    0xA0, 0xE0, 0x60, 0xC0, 0xE0,        /* 0x17E zcaron */
    251    0x00,                                /* 0xEA4 uni0EA4 */
    252    0x00,                                /* 0x13A0 uni13A0 */
    253    0x80,                                /* 0x2022 bullet */
    254    0xA0,                                /* 0x2026 ellipsis */
    255    0x60, 0xE0, 0xE0, 0xC0, 0x60,        /* 0x20AC Euro */
    256    0xE0, 0xA0, 0xA0, 0xA0, 0xE0,        /* 0xFFFD uniFFFD */
    257 #endif /* (TOMTHUMB_USE_EXTENDED)  */
    258   };
    259 
    260 
    261 /* {offset, width, height, advance cursor, x offset, y offset} */
    262 const GFXglyph TomThumbGlyphs[] PROGMEM = {
    263    { 0, 8, 1, 2, 0, -5 },    /* 0x20 space */
    264    { 1, 8, 5, 2, 0, -5 },    /* 0x21 exclam */
    265    { 6, 8, 2, 4, 0, -5 },    /* 0x22 quotedbl */
    266    { 8, 8, 5, 4, 0, -5 },    /* 0x23 numbersign */
    267    { 13, 8, 5, 4, 0, -5 },   /* 0x24 dollar */
    268    { 18, 8, 5, 4, 0, -5 },   /* 0x25 percent */
    269    { 23, 8, 5, 4, 0, -5 },   /* 0x26 ampersand */
    270    { 28, 8, 2, 2, 0, -5 },   /* 0x27 quotesingle */
    271    { 30, 8, 5, 3, 0, -5 },   /* 0x28 parenleft */
    272    { 35, 8, 5, 3, 0, -5 },   /* 0x29 parenright */
    273    { 40, 8, 3, 4, 0, -5 },   /* 0x2A asterisk */
    274    { 43, 8, 3, 4, 0, -4 },   /* 0x2B plus */
    275    { 46, 8, 2, 3, 0, -2 },   /* 0x2C comma */
    276    { 48, 8, 1, 4, 0, -3 },   /* 0x2D hyphen */
    277    { 49, 8, 1, 2, 0, -1 },   /* 0x2E period */
    278    { 50, 8, 5, 4, 0, -5 },   /* 0x2F slash */
    279    { 55, 8, 5, 4, 0, -5 },   /* 0x30 zero */
    280    { 60, 8, 5, 3, 0, -5 },   /* 0x31 one */
    281    { 65, 8, 5, 4, 0, -5 },   /* 0x32 two */
    282    { 70, 8, 5, 4, 0, -5 },   /* 0x33 three */
    283    { 75, 8, 5, 4, 0, -5 },   /* 0x34 four */
    284    { 80, 8, 5, 4, 0, -5 },   /* 0x35 five */
    285    { 85, 8, 5, 4, 0, -5 },   /* 0x36 six */
    286    { 90, 8, 5, 4, 0, -5 },   /* 0x37 seven */
    287    { 95, 8, 5, 4, 0, -5 },   /* 0x38 eight */
    288    { 100, 8, 5, 4, 0, -5 },  /* 0x39 nine */
    289    { 105, 8, 3, 2, 0, -4 },  /* 0x3A colon */
    290    { 108, 8, 4, 3, 0, -4 },  /* 0x3B semicolon */
    291    { 112, 8, 5, 4, 0, -5 },  /* 0x3C less */
    292    { 117, 8, 3, 4, 0, -4 },  /* 0x3D equal */
    293    { 120, 8, 5, 4, 0, -5 },  /* 0x3E greater */
    294    { 125, 8, 5, 4, 0, -5 },  /* 0x3F question */
    295    { 130, 8, 5, 4, 0, -5 },  /* 0x40 at */
    296    { 135, 8, 5, 4, 0, -5 },  /* 0x41 A */
    297    { 140, 8, 5, 4, 0, -5 },  /* 0x42 B */
    298    { 145, 8, 5, 4, 0, -5 },  /* 0x43 C */
    299    { 150, 8, 5, 4, 0, -5 },  /* 0x44 D */
    300    { 155, 8, 5, 4, 0, -5 },  /* 0x45 E */
    301    { 160, 8, 5, 4, 0, -5 },  /* 0x46 F */
    302    { 165, 8, 5, 4, 0, -5 },  /* 0x47 G */
    303    { 170, 8, 5, 4, 0, -5 },  /* 0x48 H */
    304    { 175, 8, 5, 4, 0, -5 },  /* 0x49 I */
    305    { 180, 8, 5, 4, 0, -5 },  /* 0x4A J */
    306    { 185, 8, 5, 4, 0, -5 },  /* 0x4B K */
    307    { 190, 8, 5, 4, 0, -5 },  /* 0x4C L */
    308    { 195, 8, 5, 4, 0, -5 },  /* 0x4D M */
    309    { 200, 8, 5, 4, 0, -5 },  /* 0x4E N */
    310    { 205, 8, 5, 4, 0, -5 },  /* 0x4F O */
    311    { 210, 8, 5, 4, 0, -5 },  /* 0x50 P */
    312    { 215, 8, 5, 4, 0, -5 },  /* 0x51 Q */
    313    { 220, 8, 5, 4, 0, -5 },  /* 0x52 R */
    314    { 225, 8, 5, 4, 0, -5 },  /* 0x53 S */
    315    { 230, 8, 5, 4, 0, -5 },  /* 0x54 T */
    316    { 235, 8, 5, 4, 0, -5 },  /* 0x55 U */
    317    { 240, 8, 5, 4, 0, -5 },  /* 0x56 V */
    318    { 245, 8, 5, 4, 0, -5 },  /* 0x57 W */
    319    { 250, 8, 5, 4, 0, -5 },  /* 0x58 X */
    320    { 255, 8, 5, 4, 0, -5 },  /* 0x59 Y */
    321    { 260, 8, 5, 4, 0, -5 },  /* 0x5A Z */
    322    { 265, 8, 5, 4, 0, -5 },  /* 0x5B bracketleft */
    323    { 270, 8, 3, 4, 0, -4 },  /* 0x5C backslash */
    324    { 273, 8, 5, 4, 0, -5 },  /* 0x5D bracketright */
    325    { 278, 8, 2, 4, 0, -5 },  /* 0x5E asciicircum */
    326    { 280, 8, 1, 4, 0, -1 },  /* 0x5F underscore */
    327    { 281, 8, 2, 3, 0, -5 },  /* 0x60 grave */
    328    { 283, 8, 4, 4, 0, -4 },  /* 0x61 a */
    329    { 287, 8, 5, 4, 0, -5 },  /* 0x62 b */
    330    { 292, 8, 4, 4, 0, -4 },  /* 0x63 c */
    331    { 296, 8, 5, 4, 0, -5 },  /* 0x64 d */
    332    { 301, 8, 4, 4, 0, -4 },  /* 0x65 e */
    333    { 305, 8, 5, 4, 0, -5 },  /* 0x66 f */
    334    { 310, 8, 5, 4, 0, -4 },  /* 0x67 g */
    335    { 315, 8, 5, 4, 0, -5 },  /* 0x68 h */
    336    { 320, 8, 5, 2, 0, -5 },  /* 0x69 i */
    337    { 325, 8, 6, 4, 0, -5 },  /* 0x6A j */
    338    { 331, 8, 5, 4, 0, -5 },  /* 0x6B k */
    339    { 336, 8, 5, 4, 0, -5 },  /* 0x6C l */
    340    { 341, 8, 4, 4, 0, -4 },  /* 0x6D m */
    341    { 345, 8, 4, 4, 0, -4 },  /* 0x6E n */
    342    { 349, 8, 4, 4, 0, -4 },  /* 0x6F o */
    343    { 353, 8, 5, 4, 0, -4 },  /* 0x70 p */
    344    { 358, 8, 5, 4, 0, -4 },  /* 0x71 q */
    345    { 363, 8, 4, 4, 0, -4 },  /* 0x72 r */
    346    { 367, 8, 4, 4, 0, -4 },  /* 0x73 s */
    347    { 371, 8, 5, 4, 0, -5 },  /* 0x74 t */
    348    { 376, 8, 4, 4, 0, -4 },  /* 0x75 u */
    349    { 380, 8, 4, 4, 0, -4 },  /* 0x76 v */
    350    { 384, 8, 4, 4, 0, -4 },  /* 0x77 w */
    351    { 388, 8, 4, 4, 0, -4 },  /* 0x78 x */
    352    { 392, 8, 5, 4, 0, -4 },  /* 0x79 y */
    353    { 397, 8, 4, 4, 0, -4 },  /* 0x7A z */
    354    { 401, 8, 5, 4, 0, -5 },  /* 0x7B braceleft */
    355    { 406, 8, 5, 2, 0, -5 },  /* 0x7C bar */
    356    { 411, 8, 5, 4, 0, -5 },  /* 0x7D braceright */
    357    { 416, 8, 2, 4, 0, -5 },  /* 0x7E asciitilde */
    358 #if (TOMTHUMB_USE_EXTENDED)
    359    { 418, 8, 5, 2, 0, -5 },  /* 0xA1 exclamdown */
    360    { 423, 8, 5, 4, 0, -5 },  /* 0xA2 cent */
    361    { 428, 8, 5, 4, 0, -5 },  /* 0xA3 sterling */
    362    { 433, 8, 5, 4, 0, -5 },  /* 0xA4 currency */
    363    { 438, 8, 5, 4, 0, -5 },  /* 0xA5 yen */
    364    { 443, 8, 5, 2, 0, -5 },  /* 0xA6 brokenbar */
    365    { 448, 8, 5, 4, 0, -5 },  /* 0xA7 section */
    366    { 453, 8, 1, 4, 0, -5 },  /* 0xA8 dieresis */
    367    { 454, 8, 3, 4, 0, -5 },  /* 0xA9 copyright */
    368    { 457, 8, 5, 4, 0, -5 },  /* 0xAA ordfeminine */
    369    { 462, 8, 3, 3, 0, -5 },  /* 0xAB guillemotleft */
    370    { 465, 8, 2, 4, 0, -4 },  /* 0xAC logicalnot */
    371    { 467, 8, 1, 3, 0, -3 },  /* 0xAD softhyphen */
    372    { 468, 8, 3, 4, 0, -5 },  /* 0xAE registered */
    373    { 471, 8, 1, 4, 0, -5 },  /* 0xAF macron */
    374    { 472, 8, 3, 4, 0, -5 },  /* 0xB0 degree */
    375    { 475, 8, 5, 4, 0, -5 },  /* 0xB1 plusminus */
    376    { 480, 8, 3, 4, 0, -5 },  /* 0xB2 twosuperior */
    377    { 483, 8, 3, 4, 0, -5 },  /* 0xB3 threesuperior */
    378    { 486, 8, 2, 3, 0, -5 },  /* 0xB4 acute */
    379    { 488, 8, 5, 4, 0, -5 },  /* 0xB5 mu */
    380    { 493, 8, 5, 4, 0, -5 },  /* 0xB6 paragraph */
    381    { 498, 8, 3, 4, 0, -4 },  /* 0xB7 periodcentered */
    382    { 501, 8, 3, 4, 0, -3 },  /* 0xB8 cedilla */
    383    { 504, 8, 3, 2, 0, -5 },  /* 0xB9 onesuperior */
    384    { 507, 8, 5, 4, 0, -5 },  /* 0xBA ordmasculine */
    385    { 512, 8, 3, 3, 0, -5 },  /* 0xBB guillemotright */
    386    { 515, 8, 5, 4, 0, -5 },  /* 0xBC onequarter */
    387    { 520, 8, 5, 4, 0, -5 },  /* 0xBD onehalf */
    388    { 525, 8, 5, 4, 0, -5 },  /* 0xBE threequarters */
    389    { 530, 8, 5, 4, 0, -5 },  /* 0xBF questiondown */
    390    { 535, 8, 5, 4, 0, -5 },  /* 0xC0 Agrave */
    391    { 540, 8, 5, 4, 0, -5 },  /* 0xC1 Aacute */
    392    { 545, 8, 5, 4, 0, -5 },  /* 0xC2 Acircumflex */
    393    { 550, 8, 5, 4, 0, -5 },  /* 0xC3 Atilde */
    394    { 555, 8, 5, 4, 0, -5 },  /* 0xC4 Adieresis */
    395    { 560, 8, 5, 4, 0, -5 },  /* 0xC5 Aring */
    396    { 565, 8, 5, 4, 0, -5 },  /* 0xC6 AE */
    397    { 570, 8, 6, 4, 0, -5 },  /* 0xC7 Ccedilla */
    398    { 576, 8, 5, 4, 0, -5 },  /* 0xC8 Egrave */
    399    { 581, 8, 5, 4, 0, -5 },  /* 0xC9 Eacute */
    400    { 586, 8, 5, 4, 0, -5 },  /* 0xCA Ecircumflex */
    401    { 591, 8, 5, 4, 0, -5 },  /* 0xCB Edieresis */
    402    { 596, 8, 5, 4, 0, -5 },  /* 0xCC Igrave */
    403    { 601, 8, 5, 4, 0, -5 },  /* 0xCD Iacute */
    404    { 606, 8, 5, 4, 0, -5 },  /* 0xCE Icircumflex */
    405    { 611, 8, 5, 4, 0, -5 },  /* 0xCF Idieresis */
    406    { 616, 8, 5, 4, 0, -5 },  /* 0xD0 Eth */
    407    { 621, 8, 5, 4, 0, -5 },  /* 0xD1 Ntilde */
    408    { 626, 8, 5, 4, 0, -5 },  /* 0xD2 Ograve */
    409    { 631, 8, 5, 4, 0, -5 },  /* 0xD3 Oacute */
    410    { 636, 8, 5, 4, 0, -5 },  /* 0xD4 Ocircumflex */
    411    { 641, 8, 5, 4, 0, -5 },  /* 0xD5 Otilde */
    412    { 646, 8, 5, 4, 0, -5 },  /* 0xD6 Odieresis */
    413    { 651, 8, 3, 4, 0, -4 },  /* 0xD7 multiply */
    414    { 654, 8, 5, 4, 0, -5 },  /* 0xD8 Oslash */
    415    { 659, 8, 5, 4, 0, -5 },  /* 0xD9 Ugrave */
    416    { 664, 8, 5, 4, 0, -5 },  /* 0xDA Uacute */
    417    { 669, 8, 5, 4, 0, -5 },  /* 0xDB Ucircumflex */
    418    { 674, 8, 5, 4, 0, -5 },  /* 0xDC Udieresis */
    419    { 679, 8, 5, 4, 0, -5 },  /* 0xDD Yacute */
    420    { 684, 8, 5, 4, 0, -5 },  /* 0xDE Thorn */
    421    { 689, 8, 6, 4, 0, -5 },  /* 0xDF germandbls */
    422    { 695, 8, 5, 4, 0, -5 },  /* 0xE0 agrave */
    423    { 700, 8, 5, 4, 0, -5 },  /* 0xE1 aacute */
    424    { 705, 8, 5, 4, 0, -5 },  /* 0xE2 acircumflex */
    425    { 710, 8, 5, 4, 0, -5 },  /* 0xE3 atilde */
    426    { 715, 8, 5, 4, 0, -5 },  /* 0xE4 adieresis */
    427    { 720, 8, 5, 4, 0, -5 },  /* 0xE5 aring */
    428    { 725, 8, 4, 4, 0, -4 },  /* 0xE6 ae */
    429    { 729, 8, 5, 4, 0, -4 },  /* 0xE7 ccedilla */
    430    { 734, 8, 5, 4, 0, -5 },  /* 0xE8 egrave */
    431    { 739, 8, 5, 4, 0, -5 },  /* 0xE9 eacute */
    432    { 744, 8, 5, 4, 0, -5 },  /* 0xEA ecircumflex */
    433    { 749, 8, 5, 4, 0, -5 },  /* 0xEB edieresis */
    434    { 754, 8, 5, 3, 0, -5 },  /* 0xEC igrave */
    435    { 759, 8, 5, 3, 0, -5 },  /* 0xED iacute */
    436    { 764, 8, 5, 4, 0, -5 },  /* 0xEE icircumflex */
    437    { 769, 8, 5, 4, 0, -5 },  /* 0xEF idieresis */
    438    { 774, 8, 5, 4, 0, -5 },  /* 0xF0 eth */
    439    { 779, 8, 5, 4, 0, -5 },  /* 0xF1 ntilde */
    440    { 784, 8, 5, 4, 0, -5 },  /* 0xF2 ograve */
    441    { 789, 8, 5, 4, 0, -5 },  /* 0xF3 oacute */
    442    { 794, 8, 5, 4, 0, -5 },  /* 0xF4 ocircumflex */
    443    { 799, 8, 5, 4, 0, -5 },  /* 0xF5 otilde */
    444    { 804, 8, 5, 4, 0, -5 },  /* 0xF6 odieresis */
    445    { 809, 8, 5, 4, 0, -5 },  /* 0xF7 divide */
    446    { 814, 8, 4, 4, 0, -4 },  /* 0xF8 oslash */
    447    { 818, 8, 5, 4, 0, -5 },  /* 0xF9 ugrave */
    448    { 823, 8, 5, 4, 0, -5 },  /* 0xFA uacute */
    449    { 828, 8, 5, 4, 0, -5 },  /* 0xFB ucircumflex */
    450    { 833, 8, 5, 4, 0, -5 },  /* 0xFC udieresis */
    451    { 838, 8, 6, 4, 0, -5 },  /* 0xFD yacute */
    452    { 844, 8, 5, 4, 0, -4 },  /* 0xFE thorn */
    453    { 849, 8, 6, 4, 0, -5 },  /* 0xFF ydieresis */
    454    { 855, 8, 1, 2, 0, -1 },  /* 0x11D gcircumflex */
    455    { 856, 8, 5, 4, 0, -5 },  /* 0x152 OE */
    456    { 861, 8, 4, 4, 0, -4 },  /* 0x153 oe */
    457    { 865, 8, 5, 4, 0, -5 },  /* 0x160 Scaron */
    458    { 870, 8, 5, 4, 0, -5 },  /* 0x161 scaron */
    459    { 875, 8, 5, 4, 0, -5 },  /* 0x178 Ydieresis */
    460    { 880, 8, 5, 4, 0, -5 },  /* 0x17D Zcaron */
    461    { 885, 8, 5, 4, 0, -5 },  /* 0x17E zcaron */
    462    { 890, 8, 1, 2, 0, -1 },  /* 0xEA4 uni0EA4 */
    463    { 891, 8, 1, 2, 0, -1 },  /* 0x13A0 uni13A0 */
    464    { 892, 8, 1, 2, 0, -3 },  /* 0x2022 bullet */
    465    { 893, 8, 1, 4, 0, -1 },  /* 0x2026 ellipsis */
    466    { 894, 8, 5, 4, 0, -5 },  /* 0x20AC Euro */
    467    { 899, 8, 5, 4, 0, -5 },  /* 0xFFFD uniFFFD */
    468 #endif /* (TOMTHUMB_USE_EXTENDED) */
    469 };
    470 
    471 const GFXfont TomThumb PROGMEM = {
    472   (uint8_t  *)TomThumbBitmaps,
    473   (GFXglyph *)TomThumbGlyphs,
    474   0x20, 0x7E, 6 };