firmware/shared/zevvpeep.py
2019-04-25 09:31:52 -04:00

416 lines
24 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# autogen'ed. don't edit
#
# cmdline: ./build.py build
#
# special chars (if present):
# √ ± µ ×
#
# 'assets/zevv-peep-iso8859-15-07x14.bdf' => FontSmall
# 'assets/zevv-peep-iso8859-15-10x20.bdf' => FontLarge
# 'assets/4x6.bdf' => FontTiny
#
__all__ = ["FontSmall", "FontLarge", "FontTiny"]
from ucollections import namedtuple
GlyphInfo = namedtuple('GlyphInfo', 'x y w h bits')
class FontBase:
pass
class FontSmall(FontBase):
height = 14
code_range = range(32, 215)
@staticmethod
def lookup(cp):
# lookup glyph data for a single codepoint, or return None
bboxes = [None, (0, -3, 7, 14, 0), (0, -3, 7, 14, 4), (0, -3,
7, 14, 5), (0, -3, 7, 14, 7), (0, -3, 7, 14, 9), (0, -3, 7, 14, 10),
(0, -3, 7, 14, 11), (0, -3, 7, 14, 12), (0, -3, 7, 14, 13), (0, -3,
7, 14, 14)]
code_points = [
(range(32, 127), [1, 2, 14, 20, 31, 43, 55, 67, 73, 87, 101, 111, 122,
136, 144, 157, 170, 182, 194, 206, 218, 230, 242, 254, 266, 278,
290, 303, 317, 329, 339, 351, 363, 375, 387, 399, 411, 423, 435,
447, 459, 471, 483, 495, 507, 519, 531, 543, 555, 567, 580, 592,
604, 616, 628, 640, 652, 664, 676, 688, 702, 715, 729, 734, 748,
754, 766, 778, 790, 802, 814, 826, 841, 853, 865, 879, 891, 903,
915, 927, 939, 953, 967, 979, 991, 1003, 1015, 1027, 1039, 1051,
1066, 1078, 1092, 1105, 1119]),
(range(177, 182), [1125, 0, 0, 0, 1138]), # ± µ
(range(215, 216), [1151]), # ×
]
bitmaps = b"""\
\xaa\x01\x07\x00\x10\x10\x10\x10\x10\x10\x10\x00\x10\x10\x03\x00\x28\x28\
\x28\x28\x06\x00\x00\x24\x24\x7e\x24\x24\x7e\x24\x24\x07\x00\x00\x10\x3c\
\x50\x50\x38\x14\x14\x78\x10\x07\x00\x22\x52\x54\x28\x08\x10\x14\x2a\x4a\
\x44\x07\x00\x00\x30\x48\x48\x30\x30\x4a\x44\x44\x3a\x03\x00\x10\x10\x10\
\x10\x09\x04\x08\x10\x10\x20\x20\x20\x20\x20\x10\x10\x08\x04\x09\x20\x10\
\x08\x08\x04\x04\x04\x04\x04\x08\x08\x10\x20\x05\x00\x00\x00\x00\x24\x18\
\x7e\x18\x24\x06\x00\x00\x00\x08\x08\x08\x3e\x08\x08\x08\x09\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x18\x30\x20\x40\x04\x00\x00\x00\x00\x00\x00\x7e\
\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x38\x10\x08\x02\x02\x04\x04\
\x08\x08\x10\x10\x20\x20\x40\x40\x07\x00\x18\x24\x42\x42\x4a\x52\x42\x42\
\x24\x18\x07\x00\x08\x18\x28\x48\x08\x08\x08\x08\x08\x08\x07\x00\x3c\x42\
\x42\x02\x04\x08\x10\x20\x40\x7e\x07\x00\x3c\x42\x02\x02\x1c\x02\x02\x42\
\x42\x3c\x07\x00\x0c\x14\x14\x24\x24\x44\x7e\x04\x04\x04\x07\x00\x7e\x40\
\x40\x7c\x42\x02\x02\x02\x42\x3c\x07\x00\x3c\x42\x40\x40\x5c\x62\x42\x42\
\x42\x3c\x07\x00\x7e\x02\x04\x04\x08\x08\x10\x10\x20\x20\x07\x00\x3c\x42\
\x42\x42\x3c\x42\x42\x42\x42\x3c\x07\x00\x3c\x42\x42\x42\x46\x3a\x02\x02\
\x42\x3c\x08\x00\x00\x00\x10\x38\x10\x00\x00\x00\x10\x38\x10\x09\x00\x00\
\x00\x10\x38\x10\x00\x00\x00\x18\x30\x20\x40\x07\x00\x00\x04\x08\x10\x20\
\x40\x20\x10\x08\x04\x05\x00\x00\x00\x00\x00\x7e\x00\x00\x7e\x07\x00\x00\
\x20\x10\x08\x04\x02\x04\x08\x10\x20\x07\x00\x78\x04\x04\x08\x10\x20\x20\
\x00\x20\x20\x07\x00\x1c\x22\x42\x4e\x52\x52\x52\x4e\x20\x1c\x07\x00\x3c\
\x42\x42\x42\x42\x7e\x42\x42\x42\x42\x07\x00\x78\x44\x44\x44\x7c\x42\x42\
\x42\x42\x7c\x07\x00\x3c\x42\x42\x40\x40\x40\x40\x42\x42\x3c\x07\x00\x78\
\x44\x42\x42\x42\x42\x42\x42\x44\x78\x07\x00\x7e\x40\x40\x40\x7c\x40\x40\
\x40\x40\x7e\x07\x00\x7e\x40\x40\x40\x7c\x40\x40\x40\x40\x40\x07\x00\x3c\
\x42\x42\x40\x40\x4e\x42\x42\x42\x3c\x07\x00\x42\x42\x42\x42\x7e\x42\x42\
\x42\x42\x42\x07\x00\x7c\x10\x10\x10\x10\x10\x10\x10\x10\x7c\x07\x00\x1e\
\x02\x02\x02\x02\x02\x02\x42\x42\x3c\x07\x00\x42\x44\x48\x50\x68\x48\x44\
\x44\x42\x42\x07\x00\x40\x40\x40\x40\x40\x40\x40\x40\x40\x7e\x07\x00\x42\
\x66\x66\x5a\x5a\x5a\x42\x42\x42\x42\x07\x00\x42\x62\x62\x52\x52\x4a\x4a\
\x46\x46\x42\x07\x00\x3c\x42\x42\x42\x42\x42\x42\x42\x42\x3c\x07\x00\x7c\
\x42\x42\x42\x42\x7c\x40\x40\x40\x40\x08\x00\x3c\x42\x42\x42\x42\x42\x42\
\x4a\x4a\x3c\x06\x07\x00\x7c\x42\x42\x42\x42\x7c\x50\x48\x44\x42\x07\x00\
\x3c\x42\x40\x40\x30\x0c\x02\x02\x42\x3c\x07\x00\x7e\x08\x08\x08\x08\x08\
\x08\x08\x08\x08\x07\x00\x42\x42\x42\x42\x42\x42\x42\x42\x42\x3c\x07\x00\
\x42\x42\x42\x42\x42\x42\x24\x24\x18\x18\x07\x00\x42\x42\x42\x42\x42\x5a\
\x5a\x5a\x24\x24\x07\x00\x42\x42\x24\x24\x18\x18\x24\x24\x42\x42\x07\x00\
\x42\x42\x42\x42\x24\x18\x08\x08\x08\x08\x07\x00\x7e\x02\x04\x04\x08\x10\
\x10\x20\x40\x7e\x09\x1e\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x1e\
\x08\x40\x40\x20\x20\x10\x10\x08\x08\x04\x04\x02\x02\x09\x78\x08\x08\x08\
\x08\x08\x08\x08\x08\x08\x08\x08\x78\x02\x00\x18\x24\x42\x09\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x03\x00\x30\x18\x08\x04\x07\x00\
\x00\x00\x00\x3c\x02\x3e\x42\x42\x46\x3a\x07\x00\x40\x40\x40\x5c\x62\x42\
\x42\x42\x62\x5c\x07\x00\x00\x00\x00\x3c\x42\x40\x40\x40\x42\x3c\x07\x00\
\x02\x02\x02\x3a\x46\x42\x42\x42\x46\x3a\x07\x00\x00\x00\x00\x3c\x42\x42\
\x7e\x40\x40\x3e\x07\x00\x1c\x22\x20\x20\x20\x7c\x20\x20\x20\x20\x0a\x00\
\x00\x00\x00\x3a\x46\x42\x42\x46\x3a\x02\x02\x42\x3c\x07\x00\x40\x40\x40\
\x5c\x62\x42\x42\x42\x42\x42\x07\x00\x08\x08\x00\x38\x08\x08\x08\x08\x08\
\x08\x09\x00\x04\x04\x00\x1c\x04\x04\x04\x04\x04\x04\x44\x38\x07\x00\x40\
\x40\x40\x44\x48\x50\x70\x48\x44\x42\x07\x00\x20\x20\x20\x20\x20\x20\x20\
\x20\x20\x1c\x07\x00\x00\x00\x00\x74\x4a\x4a\x4a\x4a\x42\x42\x07\x00\x00\
\x00\x00\x5c\x62\x42\x42\x42\x42\x42\x07\x00\x00\x00\x00\x3c\x42\x42\x42\
\x42\x42\x3c\x09\x00\x00\x00\x00\x5c\x62\x42\x42\x62\x5c\x40\x40\x40\x09\
\x00\x00\x00\x00\x3a\x46\x42\x42\x46\x3a\x02\x02\x02\x07\x00\x00\x00\x00\
\x5c\x62\x40\x40\x40\x40\x40\x07\x00\x00\x00\x00\x3c\x42\x40\x3c\x02\x42\
\x3c\x07\x00\x00\x20\x20\x7c\x20\x20\x20\x20\x22\x1c\x07\x00\x00\x00\x00\
\x42\x42\x42\x42\x42\x46\x3a\x07\x00\x00\x00\x00\x42\x42\x42\x24\x24\x18\
\x18\x07\x00\x00\x00\x00\x42\x42\x4a\x4a\x4a\x5a\x24\x07\x00\x00\x00\x00\
\x42\x24\x18\x00\x18\x24\x42\x0a\x00\x00\x00\x00\x42\x42\x42\x42\x46\x3a\
\x02\x02\x42\x3c\x07\x00\x00\x00\x00\x7e\x02\x04\x08\x10\x20\x7e\x09\x06\
\x08\x08\x08\x08\x08\x30\x08\x08\x08\x08\x08\x06\x08\x10\x10\x10\x10\x10\
\x10\x10\x10\x10\x10\x10\x10\x09\x60\x10\x10\x10\x10\x10\x0c\x10\x10\x10\
\x10\x10\x60\x03\x00\x00\x32\x4a\x44\x08\x00\x00\x00\x08\x08\x08\x7e\x08\
\x08\x08\x00\x7e\x08\x00\x00\x00\x00\x44\x44\x44\x44\x4c\x7a\x40\x40\x06\
\x00\x00\x00\x00\x42\x24\x18\x18\x24\x42\
"""
for r,d in code_points:
if cp not in r: continue
ptr = d[cp-r.start]
if not ptr: return None
x,y, w,h, dlen = bboxes[bitmaps[ptr]]
bits = bitmaps[ptr+1:ptr+1+dlen]
return GlyphInfo(x,y, w,h, bits)
return None
class FontLarge(FontBase):
height = 21
code_range = range(32, 215)
@staticmethod
def lookup(cp):
# lookup glyph data for a single codepoint, or return None
bboxes = [None, (0, -5, 10, 21, 0), (0, -5, 10, 21, 14), (0,
-5, 10, 21, 16), (0, -5, 10, 21, 22), (0, -5, 10, 21, 26), (0, -5,
10, 21, 30), (0, -5, 10, 21, 32), (0, -5, 10, 21, 34), (0, -5, 10,
21, 36), (0, -5, 10, 21, 38), (0, -5, 10, 21, 40)]
code_points = [
(range(32, 127), [1, 2, 35, 50, 81, 118, 151, 184, 199, 238, 277, 304,
335, 372, 395, 428, 463, 496, 529, 562, 595, 628, 661, 694, 727,
760, 793, 826, 863, 896, 923, 956, 989, 1022, 1055, 1088, 1121,
1154, 1187, 1220, 1253, 1286, 1319, 1352, 1385, 1418, 1451, 1484,
1517, 1550, 1585, 1618, 1651, 1684, 1717, 1750, 1783, 1816, 1849,
1882, 1919, 1954, 1991, 2006, 2043, 2058, 2091, 2124, 2157, 2190,
2223, 2256, 2297, 2330, 2363, 2402, 2435, 2468, 2501, 2534, 2567,
2608, 2649, 2682, 2715, 2748, 2781, 2814, 2847, 2880, 2921, 2954,
2991, 3026, 3063]),
(range(177, 182), [3080, 0, 0, 0, 3115]), # ± µ
(range(215, 216), [3150]), # ×
]
bitmaps = b"""\
\xaa\x01\x07\x00\x00\x00\x00\x00\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\
\x00\x08\x00\x08\x00\x08\x00\x08\x00\x00\x00\x00\x00\x08\x00\x08\x00\x02\
\x00\x00\x00\x00\x00\x00\x11\x00\x11\x00\x11\x00\x11\x00\x06\x00\x00\x00\
\x00\x00\x00\x00\x00\x08\x80\x08\x80\x08\x80\x3f\xc0\x11\x00\x11\x00\x11\
\x00\x7f\x80\x22\x00\x22\x00\x22\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x04\x00\x04\x00\x1f\x00\x24\x80\x24\x00\x24\x00\x1f\x00\x04\x80\
\x04\x80\x24\x80\x1f\x00\x04\x00\x04\x00\x07\x00\x00\x00\x00\x00\x00\x10\
\x80\x29\x00\x29\x00\x2a\x00\x12\x00\x04\x00\x04\x00\x08\x00\x09\x00\x12\
\x80\x12\x80\x22\x80\x21\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x1c\x00\x22\x00\x22\x00\x22\x00\x1c\x00\x18\x00\x24\x80\x23\x00\x21\x00\
\x23\x00\x1c\x80\x02\x00\x00\x00\x00\x00\x00\x04\x00\x04\x00\x04\x00\x04\
\x00\x0a\x00\x00\x00\x00\x00\x80\x01\x00\x02\x00\x04\x00\x04\x00\x08\x00\
\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x04\x00\x04\x00\x02\x00\
\x01\x00\x00\x80\x0a\x00\x00\x00\x00\x20\x00\x10\x00\x08\x00\x04\x00\x04\
\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x04\x00\x04\
\x00\x08\x00\x10\x00\x20\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x08\x00\x08\x00\x6b\x00\x1c\x00\x0c\x00\x12\x00\x21\x00\x06\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x04\x00\x04\x00\x04\
\x00\x7f\xc0\x04\x00\x04\x00\x04\x00\x04\x00\x09\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x0c\x00\x0c\x00\x18\x00\x30\x00\x04\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x80\x07\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x0c\x00\x08\x00\x00\x00\
\x00\x00\x00\x00\x80\x00\x80\x01\x00\x01\x00\x02\x00\x02\x00\x04\x00\x04\
\x00\x08\x00\x08\x00\x10\x00\x10\x00\x20\x00\x20\x00\x07\x00\x00\x00\x00\
\x00\x00\x0e\x00\x11\x00\x20\x80\x20\x80\x22\x80\x22\x80\x24\x80\x28\x80\
\x28\x80\x20\x80\x20\x80\x11\x00\x0e\x00\x07\x00\x00\x00\x00\x00\x00\x04\
\x00\x0c\x00\x14\x00\x24\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\
\x00\x04\x00\x04\x00\x04\x00\x07\x00\x00\x00\x00\x00\x00\x0e\x00\x11\x00\
\x20\x80\x20\x80\x00\x80\x01\x00\x02\x00\x04\x00\x08\x00\x10\x00\x20\x00\
\x20\x00\x3f\x80\x07\x00\x00\x00\x00\x00\x00\x0e\x00\x11\x00\x20\x80\x00\
\x80\x00\x80\x01\x00\x0e\x00\x01\x00\x00\x80\x20\x80\x20\x80\x11\x00\x0e\
\x00\x07\x00\x00\x00\x00\x00\x00\x03\x00\x05\x00\x05\x00\x09\x00\x09\x00\
\x11\x00\x11\x00\x21\x00\x3f\x80\x01\x00\x01\x00\x01\x00\x01\x00\x07\x00\
\x00\x00\x00\x00\x00\x3f\x80\x20\x00\x20\x00\x20\x00\x2e\x00\x31\x00\x00\
\x80\x00\x80\x00\x80\x20\x80\x20\x80\x11\x00\x0e\x00\x07\x00\x00\x00\x00\
\x00\x00\x0e\x00\x11\x00\x20\x80\x20\x00\x20\x00\x2e\x00\x31\x00\x20\x80\
\x20\x80\x20\x80\x20\x80\x11\x00\x0e\x00\x07\x00\x00\x00\x00\x00\x00\x3f\
\x80\x00\x80\x01\x00\x01\x00\x02\x00\x02\x00\x04\x00\x04\x00\x08\x00\x08\
\x00\x08\x00\x10\x00\x10\x00\x07\x00\x00\x00\x00\x00\x00\x0e\x00\x11\x00\
\x20\x80\x20\x80\x20\x80\x11\x00\x0e\x00\x11\x00\x20\x80\x20\x80\x20\x80\
\x11\x00\x0e\x00\x07\x00\x00\x00\x00\x00\x00\x0e\x00\x11\x00\x20\x80\x20\
\x80\x20\x80\x20\x80\x11\x80\x0e\x80\x00\x80\x00\x80\x00\x80\x21\x00\x1e\
\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\
\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x0c\x00\x09\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x0c\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x0c\x00\x18\x00\x30\x00\x07\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x00\x04\x00\x08\x00\
\x10\x00\x20\x00\x10\x00\x08\x00\x04\x00\x02\x00\x01\x00\x05\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x80\x00\x00\x00\
\x00\x00\x00\x3f\x80\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\
\x08\x00\x04\x00\x02\x00\x01\x00\x00\x80\x01\x00\x02\x00\x04\x00\x08\x00\
\x10\x00\x07\x00\x00\x00\x00\x00\x00\x1e\x00\x21\x00\x00\x80\x00\x80\x01\
\x00\x02\x00\x04\x00\x08\x00\x08\x00\x00\x00\x00\x00\x08\x00\x08\x00\x07\
\x00\x00\x00\x00\x00\x00\x0e\x00\x11\x00\x20\x80\x27\x80\x28\x80\x28\x80\
\x28\x80\x28\x80\x29\x80\x26\x80\x20\x00\x10\x00\x0f\x00\x07\x00\x00\x00\
\x00\x00\x00\x0e\x00\x11\x00\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x3f\
\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x07\x00\x00\x00\x00\x00\x00\
\x3c\x00\x22\x00\x21\x00\x21\x00\x21\x00\x21\x00\x3e\x00\x21\x00\x20\x80\
\x20\x80\x20\x80\x21\x00\x3e\x00\x07\x00\x00\x00\x00\x00\x00\x0e\x00\x11\
\x00\x20\x80\x20\x80\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x80\x20\
\x80\x11\x00\x0e\x00\x07\x00\x00\x00\x00\x00\x00\x3c\x00\x22\x00\x21\x00\
\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x21\x00\x22\x00\
\x3c\x00\x07\x00\x00\x00\x00\x00\x00\x3f\x80\x20\x00\x20\x00\x20\x00\x20\
\x00\x20\x00\x3f\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x3f\x80\x07\
\x00\x00\x00\x00\x00\x00\x7f\x80\x40\x00\x40\x00\x40\x00\x40\x00\x7e\x00\
\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x07\x00\x00\x00\
\x00\x00\x00\x0e\x00\x11\x00\x20\x80\x20\x80\x20\x00\x20\x00\x20\x00\x27\
\x80\x20\x80\x20\x80\x20\x80\x10\x80\x0f\x00\x07\x00\x00\x00\x00\x00\x00\
\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x3f\x80\x20\x80\x20\x80\
\x20\x80\x20\x80\x20\x80\x20\x80\x07\x00\x00\x00\x00\x00\x00\x1f\x00\x04\
\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\
\x00\x04\x00\x1f\x00\x07\x00\x00\x00\x00\x00\x00\x07\x80\x00\x80\x00\x80\
\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x20\x80\x20\x80\x11\x00\
\x0e\x00\x07\x00\x00\x00\x00\x00\x00\x20\x80\x21\x00\x22\x00\x24\x00\x28\
\x00\x38\x00\x24\x00\x24\x00\x22\x00\x22\x00\x21\x00\x21\x00\x20\x80\x07\
\x00\x00\x00\x00\x00\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\
\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x3f\x80\x07\x00\x00\x00\
\x00\x00\x00\x40\x40\x60\xc0\x60\xc0\x51\x40\x51\x40\x4a\x40\x4a\x40\x44\
\x40\x44\x40\x40\x40\x40\x40\x40\x40\x40\x40\x07\x00\x00\x00\x00\x00\x00\
\x20\x80\x30\x80\x30\x80\x28\x80\x28\x80\x24\x80\x24\x80\x24\x80\x22\x80\
\x22\x80\x21\x80\x21\x80\x20\x80\x07\x00\x00\x00\x00\x00\x00\x0e\x00\x11\
\x00\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\
\x80\x11\x00\x0e\x00\x07\x00\x00\x00\x00\x00\x00\x3e\x00\x21\x00\x20\x80\
\x20\x80\x20\x80\x20\x80\x21\x00\x3e\x00\x20\x00\x20\x00\x20\x00\x20\x00\
\x20\x00\x08\x00\x00\x00\x00\x00\x00\x0e\x00\x11\x00\x20\x80\x20\x80\x20\
\x80\x20\x80\x20\x80\x20\x80\x20\x80\x24\x80\x24\x80\x15\x00\x0e\x00\x03\
\x80\x07\x00\x00\x00\x00\x00\x00\x3e\x00\x21\x00\x20\x80\x20\x80\x20\x80\
\x20\x80\x21\x00\x3e\x00\x28\x00\x24\x00\x22\x00\x21\x00\x20\x80\x07\x00\
\x00\x00\x00\x00\x00\x0e\x00\x11\x00\x20\x80\x20\x00\x20\x00\x10\x00\x0e\
\x00\x01\x00\x00\x80\x00\x80\x20\x80\x11\x00\x0e\x00\x07\x00\x00\x00\x00\
\x00\x00\x3f\x80\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\
\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x07\x00\x00\x00\x00\x00\x00\x20\
\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\
\x80\x20\x80\x11\x00\x0e\x00\x07\x00\x00\x00\x00\x00\x00\x20\x80\x20\x80\
\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x11\x00\x11\x00\x0a\x00\
\x0a\x00\x04\x00\x07\x00\x00\x00\x00\x00\x00\x40\x40\x40\x40\x40\x40\x40\
\x40\x40\x40\x44\x40\x44\x40\x44\x40\x4a\x40\x2a\x80\x2a\x80\x11\x00\x11\
\x00\x07\x00\x00\x00\x00\x00\x00\x20\x80\x20\x80\x20\x80\x11\x00\x11\x00\
\x0e\x00\x04\x00\x0e\x00\x11\x00\x11\x00\x20\x80\x20\x80\x20\x80\x07\x00\
\x00\x00\x00\x00\x00\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x11\x00\x0a\
\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x07\x00\x00\x00\x00\
\x00\x00\x3f\x80\x00\x80\x01\x00\x01\x00\x02\x00\x02\x00\x04\x00\x08\x00\
\x08\x00\x10\x00\x10\x00\x20\x00\x3f\x80\x09\x00\x00\x00\x00\x0f\x80\x08\
\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\
\x00\x08\x00\x08\x00\x08\x00\x08\x00\x0f\x80\x08\x00\x00\x00\x00\x00\x00\
\x20\x00\x20\x00\x10\x00\x10\x00\x08\x00\x08\x00\x04\x00\x04\x00\x02\x00\
\x02\x00\x01\x00\x01\x00\x00\x80\x00\x80\x09\x00\x00\x00\x00\x3e\x00\x02\
\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\
\x00\x02\x00\x02\x00\x02\x00\x02\x00\x3e\x00\x02\x00\x00\x00\x00\x00\x00\
\x04\x00\x0a\x00\x11\x00\x20\x80\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x7f\x80\x02\x00\x00\x00\x00\x00\x00\x0c\x00\
\x0c\x00\x06\x00\x03\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x1f\x00\x00\x80\x00\x80\x1f\x80\x20\x80\x20\x80\x20\x80\x21\
\x80\x1e\x80\x07\x00\x00\x00\x00\x00\x00\x20\x00\x20\x00\x20\x00\x20\x00\
\x2e\x00\x31\x00\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x31\x00\x2e\x00\
\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x11\
\x00\x20\x80\x20\x00\x20\x00\x20\x00\x20\x80\x11\x00\x0e\x00\x07\x00\x00\
\x00\x00\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x0e\x80\x11\x80\x20\x80\
\x20\x80\x20\x80\x20\x80\x20\x80\x11\x80\x0e\x80\x07\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x11\x00\x20\x80\x20\x80\x3f\
\x80\x20\x00\x20\x00\x10\x80\x0f\x00\x07\x00\x00\x00\x00\x00\x00\x07\x00\
\x08\x80\x08\x00\x08\x00\x08\x00\x08\x00\x3f\x00\x08\x00\x08\x00\x08\x00\
\x08\x00\x08\x00\x08\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x0e\x80\x11\x80\x20\x80\x20\x80\x20\x80\x20\x80\x11\x80\x0e\
\x80\x00\x80\x00\x80\x20\x80\x11\x00\x0e\x00\x07\x00\x00\x00\x00\x00\x00\
\x20\x00\x20\x00\x20\x00\x20\x00\x2f\x00\x30\x80\x20\x80\x20\x80\x20\x80\
\x20\x80\x20\x80\x20\x80\x20\x80\x07\x00\x00\x00\x00\x00\x00\x00\x00\x04\
\x00\x04\x00\x00\x00\x1c\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\
\x00\x04\x00\x04\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\x00\
\x00\x00\x07\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\
\x01\x00\x21\x00\x21\x00\x1e\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x20\
\x00\x20\x00\x20\x00\x21\x00\x22\x00\x24\x00\x28\x00\x38\x00\x24\x00\x22\
\x00\x21\x00\x20\x80\x07\x00\x00\x00\x00\x00\x00\x10\x00\x10\x00\x10\x00\
\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\
\x0e\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\
\x80\x44\x40\x44\x40\x44\x40\x44\x40\x44\x40\x44\x40\x40\x40\x40\x40\x07\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x31\x00\
\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x20\x80\x07\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x11\x00\x20\x80\x20\
\x80\x20\x80\x20\x80\x20\x80\x11\x00\x0e\x00\x0b\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x31\x00\x20\x80\x20\x80\x20\x80\
\x20\x80\x31\x00\x2e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x0b\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x80\x11\x80\x20\
\x80\x20\x80\x20\x80\x20\x80\x11\x80\x0e\x80\x00\x80\x00\x80\x00\x80\x00\
\x80\x00\x80\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x2e\x00\x31\x00\x20\x80\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\
\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x20\
\x80\x20\x00\x20\x00\x1f\x00\x00\x80\x00\x80\x20\x80\x1f\x00\x07\x00\x00\
\x00\x00\x00\x00\x00\x00\x08\x00\x08\x00\x08\x00\x3f\x00\x08\x00\x08\x00\
\x08\x00\x08\x00\x08\x00\x08\x00\x08\x80\x07\x00\x07\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x20\x80\x20\x80\x20\x80\x20\
\x80\x20\x80\x20\x80\x11\x80\x0e\x80\x07\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x20\x80\x20\x80\x20\x80\x20\x80\x11\x00\x11\x00\
\x0a\x00\x04\x00\x04\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x40\x40\x44\x40\x44\x40\x44\x40\x44\x40\x2a\x80\x2a\x80\x2a\
\x80\x11\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x20\x80\x20\x80\x11\x00\x0a\x00\x04\x00\x0a\x00\x11\x00\x20\x80\x20\x80\
\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x20\
\x80\x20\x80\x20\x80\x20\x80\x20\x80\x11\x80\x0e\x80\x00\x80\x00\x80\x00\
\x80\x21\x00\x1e\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x3f\x80\x00\x80\x01\x00\x02\x00\x04\x00\x08\x00\x10\x00\x20\x00\
\x3f\x80\x09\x00\x00\x00\x00\x03\x80\x04\x00\x04\x00\x04\x00\x04\x00\x04\
\x00\x04\x00\x04\x00\x38\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\
\x00\x03\x80\x08\x00\x00\x00\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\
\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\x08\x00\
\x08\x00\x09\x00\x00\x00\x00\x38\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\
\x00\x04\x00\x04\x00\x03\x80\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\
\x00\x38\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x40\x24\x40\
\x23\x80\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\
\x00\x04\x00\x04\x00\x3f\x80\x04\x00\x04\x00\x04\x00\x00\x00\x00\x00\x3f\
\x80\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\
\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x33\x00\x2c\x80\x20\x00\x20\x00\
\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x80\x21\
\x00\x12\x00\x0c\x00\x0c\x00\x12\x00\x21\x00\x40\x80\
"""
for r,d in code_points:
if cp not in r: continue
ptr = d[cp-r.start]
if not ptr: return None
x,y, w,h, dlen = bboxes[bitmaps[ptr]]
bits = bitmaps[ptr+1:ptr+1+dlen]
return GlyphInfo(x,y, w,h, bits)
return None
class FontTiny(FontBase):
height = 6
code_range = range(32, 8730)
@staticmethod
def lookup(cp):
# lookup glyph data for a single codepoint, or return None
bboxes = [None, (0, -1, 4, 6, 0), (0, -1, 4, 6, 2), (0, -1, 4,
6, 3), (0, -1, 4, 6, 4), (0, -1, 4, 6, 5), (0, -1, 4, 6, 6)]
code_points = [
(range(32, 127), [1, 2, 8, 11, 17, 24, 30, 36, 39, 46, 53, 59, 65, 72,
76, 82, 88, 94, 100, 106, 112, 118, 124, 130, 136, 142, 148, 154,
161, 167, 172, 178, 184, 190, 196, 202, 208, 214, 220, 226, 232,
238, 244, 250, 256, 262, 268, 274, 280, 286, 293, 299, 305, 311,
317, 323, 329, 335, 341, 347, 353, 359, 365, 368, 375, 378, 384,
390, 396, 402, 408, 414, 421, 427, 433, 440, 446, 452, 458, 464,
470, 477, 484, 490, 496, 502, 508, 514, 520, 526, 533, 539, 546,
552, 559]),
(range(177, 182), [562, 0, 0, 0, 568]), # ± µ
(range(215, 216), [575]), # ×
(range(8730, 8731), [580]), # √
]
bitmaps = b"""\
\xaa\x01\x05\x40\x40\x40\x00\x40\x02\xa0\xa0\x05\xa0\xf0\xa0\xf0\xa0\x06\
\x40\xe0\xc0\x20\xe0\x40\x05\x80\x20\x40\x80\x20\x05\x40\xa0\x40\xa0\x50\
\x02\x40\x40\x06\x20\x40\x40\x40\x40\x20\x06\x80\x40\x40\x40\x40\x80\x05\
\xa0\x40\xe0\x40\xa0\x05\x40\x40\xe0\x40\x40\x06\x00\x00\x00\x00\x40\x80\
\x03\x00\x00\xe0\x05\x00\x00\x00\x00\x40\x05\x20\x20\x40\x80\x80\x05\x40\
\xa0\xe0\xa0\x40\x05\x40\xc0\x40\x40\xe0\x05\x40\xa0\x20\x40\xe0\x05\xe0\
\x20\x40\x20\xc0\x05\xa0\xa0\xe0\x20\x20\x05\xe0\x80\xc0\x20\xc0\x05\x60\
\x80\xc0\xa0\x40\x05\xe0\x20\x40\x80\x80\x05\x60\xa0\x40\xa0\xc0\x05\x40\
\xa0\x60\x20\xc0\x05\x00\x40\x00\x00\x40\x06\x00\x40\x00\x00\x40\x80\x05\
\x20\x40\x80\x40\x20\x04\x00\xe0\x00\xe0\x05\x80\x40\x20\x40\x80\x05\xc0\
\x20\x40\x00\x40\x05\x60\xa0\xa0\x80\x60\x05\x40\xa0\xe0\xa0\xa0\x05\xc0\
\xa0\xc0\xa0\xc0\x05\x40\xa0\x80\xa0\x40\x05\xc0\xa0\xa0\xa0\xc0\x05\xe0\
\x80\xc0\x80\xe0\x05\xe0\x80\xc0\x80\x80\x05\x60\x80\xa0\xa0\x60\x05\xa0\
\xa0\xe0\xa0\xa0\x05\xe0\x40\x40\x40\xe0\x05\x20\x20\x20\xa0\x40\x05\xa0\
\xa0\xc0\xa0\xa0\x05\x80\x80\x80\x80\xe0\x05\xa0\xe0\xe0\xa0\xa0\x05\x20\
\xa0\xe0\xa0\x80\x05\x40\xa0\xa0\xa0\x40\x05\xc0\xa0\xc0\x80\x80\x06\x40\
\xa0\xa0\xa0\x40\x20\x05\xc0\xa0\xc0\xa0\xa0\x05\x60\x80\x40\x20\xc0\x05\
\xe0\x40\x40\x40\x40\x05\xa0\xa0\xa0\xa0\xe0\x05\xa0\xa0\xa0\xe0\x40\x05\
\xa0\xa0\xe0\xe0\xa0\x05\xa0\xa0\x40\xa0\xa0\x05\xa0\xa0\x40\x40\x40\x05\
\xe0\x20\x40\x80\xe0\x05\x60\x40\x40\x40\x60\x05\x80\x80\x40\x20\x20\x05\
\xc0\x40\x40\x40\xc0\x02\x40\xa0\x06\x00\x00\x00\x00\x00\xe0\x02\x40\x20\
\x05\x00\x60\xa0\xa0\x60\x05\x80\xc0\xa0\xa0\xc0\x05\x00\x60\x80\x80\x60\
\x05\x20\x60\xa0\xa0\x60\x05\x00\x40\xa0\xc0\x60\x05\x20\x40\xe0\x40\x40\
\x06\x00\x60\xa0\x60\x20\xc0\x05\x80\xc0\xa0\xa0\xa0\x05\x40\x00\xc0\x40\
\xe0\x06\x20\x00\x20\x20\x20\xc0\x05\x80\xa0\xc0\xa0\xa0\x05\xc0\x40\x40\
\x40\xe0\x05\x00\xa0\xe0\xa0\xa0\x05\x00\xc0\xa0\xa0\xa0\x05\x00\x40\xa0\
\xa0\x40\x06\x00\xc0\xa0\xc0\x80\x80\x06\x00\x60\xa0\xa0\x60\x20\x05\x00\
\xa0\xc0\x80\x80\x05\x00\x60\xc0\x20\xc0\x05\x40\xe0\x40\x40\x20\x05\x00\
\xa0\xa0\xa0\x60\x05\x00\xa0\xa0\xa0\x40\x05\x00\xa0\xa0\xe0\xa0\x05\x00\
\xa0\x40\x40\xa0\x06\x00\xa0\xa0\x60\x20\xc0\x05\x00\xe0\x20\x40\xe0\x06\
\x20\x40\xc0\x40\x40\x20\x05\x40\x40\x40\x40\x40\x06\x80\x40\x60\x40\x40\
\x80\x02\x50\xa0\x05\x40\xe0\x40\x00\xe0\x06\x00\xa0\xa0\xa0\xc0\x80\x04\
\x00\xa0\x40\xa0\x05\x30\x20\x20\xa0\x60\
"""
for r,d in code_points:
if cp not in r: continue
ptr = d[cp-r.start]
if not ptr: return None
x,y, w,h, dlen = bboxes[bitmaps[ptr]]
bits = bitmaps[ptr+1:ptr+1+dlen]
return GlyphInfo(x,y, w,h, bits)
return None