arduinoprojects

git clone https://git.tarina.org/arduinoprojects
Log | Files | Refs

TomThumb.h (23771B)


      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 /* {offset, width, height, advance cursor, x offset, y offset} */
    261 const GFXglyph TomThumbGlyphs[] PROGMEM = {
    262     {0, 8, 1, 2, 0, -5},   /* 0x20 space */
    263     {1, 8, 5, 2, 0, -5},   /* 0x21 exclam */
    264     {6, 8, 2, 4, 0, -5},   /* 0x22 quotedbl */
    265     {8, 8, 5, 4, 0, -5},   /* 0x23 numbersign */
    266     {13, 8, 5, 4, 0, -5},  /* 0x24 dollar */
    267     {18, 8, 5, 4, 0, -5},  /* 0x25 percent */
    268     {23, 8, 5, 4, 0, -5},  /* 0x26 ampersand */
    269     {28, 8, 2, 2, 0, -5},  /* 0x27 quotesingle */
    270     {30, 8, 5, 3, 0, -5},  /* 0x28 parenleft */
    271     {35, 8, 5, 3, 0, -5},  /* 0x29 parenright */
    272     {40, 8, 3, 4, 0, -5},  /* 0x2A asterisk */
    273     {43, 8, 3, 4, 0, -4},  /* 0x2B plus */
    274     {46, 8, 2, 3, 0, -2},  /* 0x2C comma */
    275     {48, 8, 1, 4, 0, -3},  /* 0x2D hyphen */
    276     {49, 8, 1, 2, 0, -1},  /* 0x2E period */
    277     {50, 8, 5, 4, 0, -5},  /* 0x2F slash */
    278     {55, 8, 5, 4, 0, -5},  /* 0x30 zero */
    279     {60, 8, 5, 3, 0, -5},  /* 0x31 one */
    280     {65, 8, 5, 4, 0, -5},  /* 0x32 two */
    281     {70, 8, 5, 4, 0, -5},  /* 0x33 three */
    282     {75, 8, 5, 4, 0, -5},  /* 0x34 four */
    283     {80, 8, 5, 4, 0, -5},  /* 0x35 five */
    284     {85, 8, 5, 4, 0, -5},  /* 0x36 six */
    285     {90, 8, 5, 4, 0, -5},  /* 0x37 seven */
    286     {95, 8, 5, 4, 0, -5},  /* 0x38 eight */
    287     {100, 8, 5, 4, 0, -5}, /* 0x39 nine */
    288     {105, 8, 3, 2, 0, -4}, /* 0x3A colon */
    289     {108, 8, 4, 3, 0, -4}, /* 0x3B semicolon */
    290     {112, 8, 5, 4, 0, -5}, /* 0x3C less */
    291     {117, 8, 3, 4, 0, -4}, /* 0x3D equal */
    292     {120, 8, 5, 4, 0, -5}, /* 0x3E greater */
    293     {125, 8, 5, 4, 0, -5}, /* 0x3F question */
    294     {130, 8, 5, 4, 0, -5}, /* 0x40 at */
    295     {135, 8, 5, 4, 0, -5}, /* 0x41 A */
    296     {140, 8, 5, 4, 0, -5}, /* 0x42 B */
    297     {145, 8, 5, 4, 0, -5}, /* 0x43 C */
    298     {150, 8, 5, 4, 0, -5}, /* 0x44 D */
    299     {155, 8, 5, 4, 0, -5}, /* 0x45 E */
    300     {160, 8, 5, 4, 0, -5}, /* 0x46 F */
    301     {165, 8, 5, 4, 0, -5}, /* 0x47 G */
    302     {170, 8, 5, 4, 0, -5}, /* 0x48 H */
    303     {175, 8, 5, 4, 0, -5}, /* 0x49 I */
    304     {180, 8, 5, 4, 0, -5}, /* 0x4A J */
    305     {185, 8, 5, 4, 0, -5}, /* 0x4B K */
    306     {190, 8, 5, 4, 0, -5}, /* 0x4C L */
    307     {195, 8, 5, 4, 0, -5}, /* 0x4D M */
    308     {200, 8, 5, 4, 0, -5}, /* 0x4E N */
    309     {205, 8, 5, 4, 0, -5}, /* 0x4F O */
    310     {210, 8, 5, 4, 0, -5}, /* 0x50 P */
    311     {215, 8, 5, 4, 0, -5}, /* 0x51 Q */
    312     {220, 8, 5, 4, 0, -5}, /* 0x52 R */
    313     {225, 8, 5, 4, 0, -5}, /* 0x53 S */
    314     {230, 8, 5, 4, 0, -5}, /* 0x54 T */
    315     {235, 8, 5, 4, 0, -5}, /* 0x55 U */
    316     {240, 8, 5, 4, 0, -5}, /* 0x56 V */
    317     {245, 8, 5, 4, 0, -5}, /* 0x57 W */
    318     {250, 8, 5, 4, 0, -5}, /* 0x58 X */
    319     {255, 8, 5, 4, 0, -5}, /* 0x59 Y */
    320     {260, 8, 5, 4, 0, -5}, /* 0x5A Z */
    321     {265, 8, 5, 4, 0, -5}, /* 0x5B bracketleft */
    322     {270, 8, 3, 4, 0, -4}, /* 0x5C backslash */
    323     {273, 8, 5, 4, 0, -5}, /* 0x5D bracketright */
    324     {278, 8, 2, 4, 0, -5}, /* 0x5E asciicircum */
    325     {280, 8, 1, 4, 0, -1}, /* 0x5F underscore */
    326     {281, 8, 2, 3, 0, -5}, /* 0x60 grave */
    327     {283, 8, 4, 4, 0, -4}, /* 0x61 a */
    328     {287, 8, 5, 4, 0, -5}, /* 0x62 b */
    329     {292, 8, 4, 4, 0, -4}, /* 0x63 c */
    330     {296, 8, 5, 4, 0, -5}, /* 0x64 d */
    331     {301, 8, 4, 4, 0, -4}, /* 0x65 e */
    332     {305, 8, 5, 4, 0, -5}, /* 0x66 f */
    333     {310, 8, 5, 4, 0, -4}, /* 0x67 g */
    334     {315, 8, 5, 4, 0, -5}, /* 0x68 h */
    335     {320, 8, 5, 2, 0, -5}, /* 0x69 i */
    336     {325, 8, 6, 4, 0, -5}, /* 0x6A j */
    337     {331, 8, 5, 4, 0, -5}, /* 0x6B k */
    338     {336, 8, 5, 4, 0, -5}, /* 0x6C l */
    339     {341, 8, 4, 4, 0, -4}, /* 0x6D m */
    340     {345, 8, 4, 4, 0, -4}, /* 0x6E n */
    341     {349, 8, 4, 4, 0, -4}, /* 0x6F o */
    342     {353, 8, 5, 4, 0, -4}, /* 0x70 p */
    343     {358, 8, 5, 4, 0, -4}, /* 0x71 q */
    344     {363, 8, 4, 4, 0, -4}, /* 0x72 r */
    345     {367, 8, 4, 4, 0, -4}, /* 0x73 s */
    346     {371, 8, 5, 4, 0, -5}, /* 0x74 t */
    347     {376, 8, 4, 4, 0, -4}, /* 0x75 u */
    348     {380, 8, 4, 4, 0, -4}, /* 0x76 v */
    349     {384, 8, 4, 4, 0, -4}, /* 0x77 w */
    350     {388, 8, 4, 4, 0, -4}, /* 0x78 x */
    351     {392, 8, 5, 4, 0, -4}, /* 0x79 y */
    352     {397, 8, 4, 4, 0, -4}, /* 0x7A z */
    353     {401, 8, 5, 4, 0, -5}, /* 0x7B braceleft */
    354     {406, 8, 5, 2, 0, -5}, /* 0x7C bar */
    355     {411, 8, 5, 4, 0, -5}, /* 0x7D braceright */
    356     {416, 8, 2, 4, 0, -5}, /* 0x7E asciitilde */
    357 #if (TOMTHUMB_USE_EXTENDED)
    358     {418, 8, 5, 2, 0, -5}, /* 0xA1 exclamdown */
    359     {423, 8, 5, 4, 0, -5}, /* 0xA2 cent */
    360     {428, 8, 5, 4, 0, -5}, /* 0xA3 sterling */
    361     {433, 8, 5, 4, 0, -5}, /* 0xA4 currency */
    362     {438, 8, 5, 4, 0, -5}, /* 0xA5 yen */
    363     {443, 8, 5, 2, 0, -5}, /* 0xA6 brokenbar */
    364     {448, 8, 5, 4, 0, -5}, /* 0xA7 section */
    365     {453, 8, 1, 4, 0, -5}, /* 0xA8 dieresis */
    366     {454, 8, 3, 4, 0, -5}, /* 0xA9 copyright */
    367     {457, 8, 5, 4, 0, -5}, /* 0xAA ordfeminine */
    368     {462, 8, 3, 3, 0, -5}, /* 0xAB guillemotleft */
    369     {465, 8, 2, 4, 0, -4}, /* 0xAC logicalnot */
    370     {467, 8, 1, 3, 0, -3}, /* 0xAD softhyphen */
    371     {468, 8, 3, 4, 0, -5}, /* 0xAE registered */
    372     {471, 8, 1, 4, 0, -5}, /* 0xAF macron */
    373     {472, 8, 3, 4, 0, -5}, /* 0xB0 degree */
    374     {475, 8, 5, 4, 0, -5}, /* 0xB1 plusminus */
    375     {480, 8, 3, 4, 0, -5}, /* 0xB2 twosuperior */
    376     {483, 8, 3, 4, 0, -5}, /* 0xB3 threesuperior */
    377     {486, 8, 2, 3, 0, -5}, /* 0xB4 acute */
    378     {488, 8, 5, 4, 0, -5}, /* 0xB5 mu */
    379     {493, 8, 5, 4, 0, -5}, /* 0xB6 paragraph */
    380     {498, 8, 3, 4, 0, -4}, /* 0xB7 periodcentered */
    381     {501, 8, 3, 4, 0, -3}, /* 0xB8 cedilla */
    382     {504, 8, 3, 2, 0, -5}, /* 0xB9 onesuperior */
    383     {507, 8, 5, 4, 0, -5}, /* 0xBA ordmasculine */
    384     {512, 8, 3, 3, 0, -5}, /* 0xBB guillemotright */
    385     {515, 8, 5, 4, 0, -5}, /* 0xBC onequarter */
    386     {520, 8, 5, 4, 0, -5}, /* 0xBD onehalf */
    387     {525, 8, 5, 4, 0, -5}, /* 0xBE threequarters */
    388     {530, 8, 5, 4, 0, -5}, /* 0xBF questiondown */
    389     {535, 8, 5, 4, 0, -5}, /* 0xC0 Agrave */
    390     {540, 8, 5, 4, 0, -5}, /* 0xC1 Aacute */
    391     {545, 8, 5, 4, 0, -5}, /* 0xC2 Acircumflex */
    392     {550, 8, 5, 4, 0, -5}, /* 0xC3 Atilde */
    393     {555, 8, 5, 4, 0, -5}, /* 0xC4 Adieresis */
    394     {560, 8, 5, 4, 0, -5}, /* 0xC5 Aring */
    395     {565, 8, 5, 4, 0, -5}, /* 0xC6 AE */
    396     {570, 8, 6, 4, 0, -5}, /* 0xC7 Ccedilla */
    397     {576, 8, 5, 4, 0, -5}, /* 0xC8 Egrave */
    398     {581, 8, 5, 4, 0, -5}, /* 0xC9 Eacute */
    399     {586, 8, 5, 4, 0, -5}, /* 0xCA Ecircumflex */
    400     {591, 8, 5, 4, 0, -5}, /* 0xCB Edieresis */
    401     {596, 8, 5, 4, 0, -5}, /* 0xCC Igrave */
    402     {601, 8, 5, 4, 0, -5}, /* 0xCD Iacute */
    403     {606, 8, 5, 4, 0, -5}, /* 0xCE Icircumflex */
    404     {611, 8, 5, 4, 0, -5}, /* 0xCF Idieresis */
    405     {616, 8, 5, 4, 0, -5}, /* 0xD0 Eth */
    406     {621, 8, 5, 4, 0, -5}, /* 0xD1 Ntilde */
    407     {626, 8, 5, 4, 0, -5}, /* 0xD2 Ograve */
    408     {631, 8, 5, 4, 0, -5}, /* 0xD3 Oacute */
    409     {636, 8, 5, 4, 0, -5}, /* 0xD4 Ocircumflex */
    410     {641, 8, 5, 4, 0, -5}, /* 0xD5 Otilde */
    411     {646, 8, 5, 4, 0, -5}, /* 0xD6 Odieresis */
    412     {651, 8, 3, 4, 0, -4}, /* 0xD7 multiply */
    413     {654, 8, 5, 4, 0, -5}, /* 0xD8 Oslash */
    414     {659, 8, 5, 4, 0, -5}, /* 0xD9 Ugrave */
    415     {664, 8, 5, 4, 0, -5}, /* 0xDA Uacute */
    416     {669, 8, 5, 4, 0, -5}, /* 0xDB Ucircumflex */
    417     {674, 8, 5, 4, 0, -5}, /* 0xDC Udieresis */
    418     {679, 8, 5, 4, 0, -5}, /* 0xDD Yacute */
    419     {684, 8, 5, 4, 0, -5}, /* 0xDE Thorn */
    420     {689, 8, 6, 4, 0, -5}, /* 0xDF germandbls */
    421     {695, 8, 5, 4, 0, -5}, /* 0xE0 agrave */
    422     {700, 8, 5, 4, 0, -5}, /* 0xE1 aacute */
    423     {705, 8, 5, 4, 0, -5}, /* 0xE2 acircumflex */
    424     {710, 8, 5, 4, 0, -5}, /* 0xE3 atilde */
    425     {715, 8, 5, 4, 0, -5}, /* 0xE4 adieresis */
    426     {720, 8, 5, 4, 0, -5}, /* 0xE5 aring */
    427     {725, 8, 4, 4, 0, -4}, /* 0xE6 ae */
    428     {729, 8, 5, 4, 0, -4}, /* 0xE7 ccedilla */
    429     {734, 8, 5, 4, 0, -5}, /* 0xE8 egrave */
    430     {739, 8, 5, 4, 0, -5}, /* 0xE9 eacute */
    431     {744, 8, 5, 4, 0, -5}, /* 0xEA ecircumflex */
    432     {749, 8, 5, 4, 0, -5}, /* 0xEB edieresis */
    433     {754, 8, 5, 3, 0, -5}, /* 0xEC igrave */
    434     {759, 8, 5, 3, 0, -5}, /* 0xED iacute */
    435     {764, 8, 5, 4, 0, -5}, /* 0xEE icircumflex */
    436     {769, 8, 5, 4, 0, -5}, /* 0xEF idieresis */
    437     {774, 8, 5, 4, 0, -5}, /* 0xF0 eth */
    438     {779, 8, 5, 4, 0, -5}, /* 0xF1 ntilde */
    439     {784, 8, 5, 4, 0, -5}, /* 0xF2 ograve */
    440     {789, 8, 5, 4, 0, -5}, /* 0xF3 oacute */
    441     {794, 8, 5, 4, 0, -5}, /* 0xF4 ocircumflex */
    442     {799, 8, 5, 4, 0, -5}, /* 0xF5 otilde */
    443     {804, 8, 5, 4, 0, -5}, /* 0xF6 odieresis */
    444     {809, 8, 5, 4, 0, -5}, /* 0xF7 divide */
    445     {814, 8, 4, 4, 0, -4}, /* 0xF8 oslash */
    446     {818, 8, 5, 4, 0, -5}, /* 0xF9 ugrave */
    447     {823, 8, 5, 4, 0, -5}, /* 0xFA uacute */
    448     {828, 8, 5, 4, 0, -5}, /* 0xFB ucircumflex */
    449     {833, 8, 5, 4, 0, -5}, /* 0xFC udieresis */
    450     {838, 8, 6, 4, 0, -5}, /* 0xFD yacute */
    451     {844, 8, 5, 4, 0, -4}, /* 0xFE thorn */
    452     {849, 8, 6, 4, 0, -5}, /* 0xFF ydieresis */
    453     {855, 8, 1, 2, 0, -1}, /* 0x11D gcircumflex */
    454     {856, 8, 5, 4, 0, -5}, /* 0x152 OE */
    455     {861, 8, 4, 4, 0, -4}, /* 0x153 oe */
    456     {865, 8, 5, 4, 0, -5}, /* 0x160 Scaron */
    457     {870, 8, 5, 4, 0, -5}, /* 0x161 scaron */
    458     {875, 8, 5, 4, 0, -5}, /* 0x178 Ydieresis */
    459     {880, 8, 5, 4, 0, -5}, /* 0x17D Zcaron */
    460     {885, 8, 5, 4, 0, -5}, /* 0x17E zcaron */
    461     {890, 8, 1, 2, 0, -1}, /* 0xEA4 uni0EA4 */
    462     {891, 8, 1, 2, 0, -1}, /* 0x13A0 uni13A0 */
    463     {892, 8, 1, 2, 0, -3}, /* 0x2022 bullet */
    464     {893, 8, 1, 4, 0, -1}, /* 0x2026 ellipsis */
    465     {894, 8, 5, 4, 0, -5}, /* 0x20AC Euro */
    466     {899, 8, 5, 4, 0, -5}, /* 0xFFFD uniFFFD */
    467 #endif                     /* (TOMTHUMB_USE_EXTENDED) */
    468 };
    469 
    470 const GFXfont TomThumb PROGMEM = {(uint8_t *)TomThumbBitmaps,
    471                                   (GFXglyph *)TomThumbGlyphs, 0x20, 0x7E, 6};