buba/buba/static/display.js
2025-06-02 14:23:22 +02:00

1663 lines
No EOL
58 KiB
JavaScript

export default class {
constructor(container, config = {}) {
this.ready = false;
this.svgns = "http://www.w3.org/2000/svg";
this.config = Object.assign({
templateSvgUrl: "static/geascript-proportional.svg",
rows: 4,
cols: 120,
segments: 24,
stripWidth: 0,
}, config);
console.log("Building display...");
this.container = container;
this.segmentsDom = undefined;
this.defineFont()
fetch(this.config.templateSvgUrl)
.then(res => res.blob())
.then(blob => blob.bytes())
.then(blob => {
let parser = new DOMParser();
this.segmentsDom = parser.parseFromString(new TextDecoder().decode(blob), 'image/svg+xml');
this.buildDisplay()
this.ready = true;
console.log("Done building display");
})
.catch(err => console.log(err));
}
buildDisplay() {
const svgTemplate = this.segmentsDom.getElementsByTagName("svg")[0];
const segmentsGroup = svgTemplate.getElementById("segments");
const segmentElements = Array.from(segmentsGroup.childNodes).filter(e => e.nodeType === Node.ELEMENT_NODE);
const viewBox = svgTemplate.getAttribute("viewBox").split(" ").map(x => parseFloat(x));
if (this.config.stripWidth === 0) {
this.config.stripWidth = viewBox[2];
}
for (var s of segmentElements) {
s.removeAttribute("style");
}
this.container.innerHTML = "";
for (let r = 0; r < this.config.rows; r++) {
const rowDiv = document.createElement("div");
this.container.appendChild(rowDiv);
rowDiv.id = `geavision__row_${r}`
rowDiv.classList = "geavision geavision__row";
let rowSvg = document.createElementNS(this.svgns, "svg");
rowDiv.appendChild(rowSvg);
rowSvg.classList = "geavision geavision__row geavision__row_svg";
rowSvg.id = `geavision__row_${r}_svg`;
const width = this.config.stripWidth * this.config.cols
rowSvg.setAttribute("viewBox", `0 0 ${parseInt(width)} ${parseInt(viewBox[3])}`);
for (let c = 0; c < this.config.cols; c++) {
let g = document.createElementNS(this.svgns, "g");
rowSvg.appendChild(g);
g.id = `geavision__row_${r}_${c}`;
g.setAttribute("transform", `translate(${this.config.stripWidth * (c)} 0)`);
// segmentElements must be in the correct order in the SVG
for (let s = 1; s <= segmentElements.length; s++) {
const clone = segmentElements[s - 1].cloneNode(true);
g.appendChild(clone);
clone.id = `geavision__row_${r}_${c}_${s}`;
clone.classList = "gvsoff";
}
}
}
}
eraseCol(row, col) {
if (!this.ready)
return;
for (let i = 1; i <= this.config.segments; i++) {
const e = this.container.querySelector(`#geavision__row_${row}_${col}_${i}`)
if (e) {
e.classList = "gvsoff";
} else {
console.log(`Unable to find element #geavision__row_${row}_${col}_${i} for segment '${i}'`)
}
}
}
eraseCols(row, col_start, col_end) {
for (let i = col_start; i < col_end; i++) {
this.eraseCol(row, i);
}
}
eraseRow(row) {
this.eraseCol(row, 0, this.config.cols);
}
applyCharacter(row, col, char) {
if (!this.ready)
return;
let f = this.font[char];
if (f === undefined)
return 0;
for (let c of this.font[char]) {
if (col >= this.config.cols)
return this.font[char].length;
for (let s = 0; s < c.length; s++) {
const e = this.container.querySelector(`#geavision__row_${row}_${col}_${s + 1}`)
if (e) {
e.classList = c[s] === '#' ? "gvson" : "gvsoff";
} else {
console.log(`Unable to find element #geavision__row_${row}_${col}_${s + 1} for segment '${c}'`)
}
}
col++;
}
return this.font[char].length
}
applyText(row, col, text) {
// console.log("Applying text", row, text);
for (let c of text) {
col += this.applyCharacter(row, col, c)
}
return col;
}
set_pages(pages) {
console.log("set pages", pages);
// ignore for now
}
simple_text(page, row, col, text, align) {
// console.log("simple text", page, row, col, text, align);
this.eraseCols(row, col, this.config.cols);
this.applyText(row, col, text);
}
defineFont() {
/*
* This is the font definition for the Geascript Proportional font, reverse engineered from the actual display.
* The index is the unicode code point of the character. However, the actual font is encoded in CP437, so the
* position in the source code corresponds to the CP437 code point.
*/
let defs = {}
// 0x00-0x0f; work around wrong Python encoding by assigning the same glyph to both the identity code and the correct Unicode codepoint
defs['\u0001'] = defs['\u263a'] = [ // ☺︎
'#....# .#.... ..#.#. .#.###',
'....## ##.### #.#### ...###',
'.#..#. #..... ..##.. ..####',
'...... ...... ...... ......',
];
defs['\u0002'] = defs['\u263c'] = [ // ☻
'.####. #.#### ##.#.# #.#...',
'####.. ..#... .#.... ###...',
'#.##.# .##### ##..## ##....',
'...... ...... ...... ......',
];
defs['\u0003'] = defs['\u2665'] = [ // ♥︎
'...### ###### ###.#. ......',
'....## ###### ###### #.....',
'...### ###### ####.. ......',
'...... ...... ...... ......',
];
defs['\u0004'] = defs['\u2666'] = [ // ♦︎
'...... .....# ###.#. ......',
'...... ..#### ###### #.....',
'...... ....#. ####.. ......',
'...... ...... ...... ......',
];
defs['\u0005'] = defs['\u2663'] = [ // ♣︎
'.....# .#.... ###... ....##',
'...### ###### ###### ######',
'....#. #..... ###... ....##',
'...... ...... ...... ......',
];
defs['\u0006'] = defs['\u2660'] = [ // ♠︎
'...... .....# ###.#. ....##',
'...... ..#### ###### ######',
'...... ....#. ####.. ....##',
'...... ...... ...... ......',
];
defs['\u0007'] = defs['\u2022'] = [ // •
'...... ...### #..... ......',
'...... ...... ...... ......',
];
defs['\u0008'] = defs['\u25d6'] = [ // ◘
'###### ###### ###### ######',
'###### ###... .##### ######',
'###### ###### ###### ######',
'...... ...... ...... ......',
];
defs['\u0009'] = defs['\u25cb'] = [ // ○
'...... ###### ##.... ......',
'...... ###... .#.... ......',
'...... ###### ##.... ......',
'...... ...... ...... ......',
];
defs['\u000a'] = defs['\u25d9'] = [ // ◙
'###### ...... ..#### ######',
'###### ...### #.#### ######',
'###### ...... ..#### ######',
'...... ...... ...... ......',
];
defs['\u000b'] = defs['\u2642'] = [ // ♂︎
'...... .....# ###### #.#...',
'...... ...### #..... ###...',
'...... ...### #..... ###...',
'.#...# .##### #..... ###...',
'###### ##..#. ###### ##....',
'...... ...... ...... ......',
];
defs['\u000c'] = defs['\u2640'] = [ // ♀︎
'.##### ###... .#.... ......',
'###... ###### ###### ###...',
'#.#### ###... .#.... ......',
'...... ...... ...... ......',
];
defs['\u000d'] = defs['\u266a'] = [ // ♪
'...... ...... ...... ####..',
'###### ###### ###### ####..',
'....#. #.##.# ...... ......',
'...... ...... ...... ......',
];
defs['\u000e'] = defs['\u266b'] = [ // ♫
'...... ...... ...... ####..',
'###### ###### ###### ####..',
'###... ...... ...... ......',
'#.##.# .#.... ...... ######',
'....#. #.#### ###### ######',
'...... ...... ...... ......',
];
defs['\u000f'] = defs['\u263c'] = [ // ☼
'####.# .#.### #...## ###...',
'....## #####. #####. ......',
'###### ##.... ..#### ###..',
'....## ####.# #####. ......',
'#####. #..### #..#.# ###...',
'...... ...... ...... ......',
];
// 0x10-0x1f
defs['\u0010'] = defs['\u25ba'] = [ // ►
'#.#### ###### ###### ##....',
'....#. #.#### ####.. ......',
'...... ....#. ...... ......',
'...... ...... ...... ......',
];
defs['\u0011'] = defs['\u25c4'] = [ // ◄
'...... .....# ...... ......',
'.....# .##### ###.#. ......',
'.##### ###### ###### #.#...',
'...... ...... ...... ......',
];
defs['\u0012'] = defs['\u2195'] = [ // ↕︎
'.....# .##... ..#.#. ......',
'..#### ###### ###### #.....',
'....#. #.#... ..##.. ......',
'...... ...... ...... ......',
];
defs['\u0013'] = defs['\u203c'] = [ // ‼︎
'###### ###### ###### ...###',
'...... ...... ...... ......',
'###### ###### ###### ...###',
'...... ...... ...... ......',
];
defs['\u0014'] = defs['\u00b6'] = [ // ¶
'.##### ####.# ...... ......',
'###... ...### #..... ......',
'###### ###### ###### ######',
'###... ...... ...... ......',
'###### ###### ###### ######',
'...... ...... ...... ......',
];
defs['\u0015'] = defs['\u00a7'] = [ // §
'...... ...... ...... ......',
];
defs['\u0016'] = defs['\u25ac'] = [ // ▬
'...... ...... ..#### ######',
'...... ...... ..#### ######',
'...... ...... ..#### ######',
'...... ...... ...... ......',
];
defs['\u0017'] = defs['\u21a8'] = [ // ↨
'.....# .##... ..#.#. ...#..',
'..#### ###### ###### #..#..',
'....#. #.#... ..##.. ...#..',
'...... ...... ...... ......',
];
defs['\u0018'] = defs['\u2191'] = [ // ↑
'.....# .##... ...... ......',
'..#### ###### ###### ###...',
'....#. #.#... ...... ......',
'...... ...... ...... ......',
];
defs['\u0019'] = defs['\u2193'] = [ // ↓
'...... ...... ..#.#. ......',
'###### ###### ###### #.....',
'...... ...... ..##.. ......',
'...... ...... ...... ......',
];
defs['\u001a'] = defs['\u2192'] = [ // →
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ....#. ####.. ......',
'...... ...... ...... ......',
];
defs['\u001b'] = defs['\u2190'] = [ // ←
'...... .....# ###.#. ......',
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ...... ...... ......',
];
defs['\u001c'] = defs['\u221f'] = [ // ∟
'...... ###### ##.... ......',
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ...... ...... ......',
];
defs['\u001d'] = defs['\u2194'] = [ // ↔︎
'...... .....# ###.#. ......',
'...... ...... .#.... ......',
'...... ....#. ####.. ......',
'...... ...... ...... ......',
];
defs['\u001e'] = defs['\u25b2'] = [ // ▲
'...... .....# ##.... ......',
'...... ..#### ##.... ......',
'...... ....#. ##.... ......',
'...... ...... ...... ......',
];
defs['\u001f'] = defs['\u25bc'] = [ // ▼
'...... ...#.# ...... ......',
'...... ...### ###... ......',
'...... ...##. ...... ......',
'...... ...... ...... ......',
];
// 0x20-0x2f
defs['\u0020'] = [ // space
'...... ...... ...... ......',
];
defs['\u0021'] = [ // !
'###### ###### ##.... ###...',
'...... ...... ...... ......',
];
defs['\u0022'] = [ // "
'###### ...... ...... ......',
'...... ...... ...... ......',
'###### ...... ...... ......',
'...... ...... ...... ......',
];
defs['\u0023'] = [ // #
'...... ###... .#.... ......',
'###### ###### ###### ###...',
'...... ###... .#.... ......',
'###### ###### ###### ###...',
'...... ###... .#.... ......',
'...... ...... ...... ......',
];
defs['\u0024'] = [ // $
'.....# ####.# ..#.#. ......',
'...### ...### #.#### ......',
'###### ###### ###### ###...',
'...### ...### #.#### ......',
'....#. ....#. ####.. ......',
'...... ...... ...... ......',
];
defs['\u0025'] = [ // %
'...### .....# ###### ......',
'.....# .####. ...... ......',
'...##. #..... ..#### ......',
'...... ...... ...... ......',
];
defs['\u0026'] = [ // &
'.###.# .#...# ###### #.#...',
'###.## ###### ...... ###...',
'#.###. #...#. ###.## ##....',
'...... ...... ..##.# #.#...',
'...... ...... ...... ......',
];
defs['\u0027'] = [ // '
'###### ...... ...... ......',
'...... ...... ...... ......',
];
defs['\u0028'] = [ // (
'.....# .##### ###.#. ......',
'.####. #..... ...#.# #.#...',
'#..... ...... ...... .#....',
'...... ...... ...... ......',
];
defs['\u0029'] = [ // )
'.#.... ...... ...... ..#...',
'#.##.# .#.... ....## ##....',
'....#. #.#### ####.. ......',
'...... ...... ...... ......',
];
defs['\u002a'] = [ // *
'...... ...#.# .#..## ......',
'...... ....## #####. ......',
'...... ...##. .#.#.# ......',
'...... ...... ...... ......',
];
defs['\u002b'] = [ // +
'...... ...... .#.... ......',
'...... ...### ###### ......',
'...... ...... .#.... ......',
'...... ...... ...... ......',
];
defs['\u002c'] = [ // ,
'...... ...... ...... .....#',
'...... ...... ...... #####.',
'...... ...... ...... ......',
];
defs['\u002d'] = [ // -
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ...... ...... ......',
];
defs['\u002e'] = [ // .
'...... ...... ...... ###...',
'...... ...... ...... ......',
];
defs['\u002f'] = [ // /
'...... .....# ###### ###...',
'.....# .####. ...... ......',
'#####. ...... ...... ......',
'...... ...... ...... ......',
];
// 0x30-0x3f
defs['\u0030'] = [ // 0
'.##### ###### ###### #.#...',
'###... ...... ...... ###...',
'#.#### ###### ###### ##....',
'...... ...... ...... ......',
];
defs['\u0031'] = [ // 1
'.....# .#.... ...... ......',
'.####. #..... ...... ......',
'###### ###### ###### ###...',
'...... ...... ...... ......',
];
defs['\u0032'] = [ // 2
'.##... .....# ###### ###...',
'###... ...### #..... ###...',
'#.#### #####. ...... ###...',
'...... ...... ...... ......',
];
defs['\u0033'] = [ // 3
'.##... ...... ...... #.#...',
'###... ...### #..... ###...',
'#.#### #####. ###### ##....',
'...... ...... ...... ......',
];
defs['\u0034'] = [ // 4
'###### ###### ##..........',
'...... ...... .#.... ......',
'...... ###### ###### ###...',
'...... ...... ...... ......',
];
defs['\u0035'] = [ // 5
'###### ###... ..#### #.#...',
'###... ###... ...... ###...',
'###... #.#### ###### ##....',
'...... ...... ...... ......',
];
defs['\u0036'] = [ // 6
'.##### ###### ###### #.#...',
'###... ###... ...... ###...',
'#.#... #.#### ###### ##....',
'...... ...... ...... ......',
];
defs['\u0037'] = [ // 7
'###... .....# ###### ###...',
'###..# .####. ...... ......',
'#####. #..... ...... ......',
'...... ...... ...... ......',
];
defs['\u0038'] = [ // 8
'.##### ####.# ###### #.#...',
'###... ...### #..... ###...',
'#.#### #####. ###### ##....',
'...... ...... ...... ......',
];
defs['\u0039'] = [ // 9
'.##### ####.# ...... #.#...',
'###... ...### #..... ###...',
'#.#### ###### ###### ##....',
'...... ...... ...... ......',
];
defs['\u003a'] = [ // :
'...... ###... ..#### ......',
'...... ...... ...... ......',
];
defs['\u003b'] = [ // ;
'...... ...... ...... .....#',
'...... ...... .#.... #####.',
'...... ...... ...... ......',
];
defs['\u003c'] = [ // <
'...... .....# ###.#. ......',
'...... .####. ...#.# #.#...',
'...... #..... ...... .#...',
'...... ...... ...... ......',
];
defs['\u003d'] = [ // =
'...... ...### #.#### ......',
'...... ...### #.#### ......',
'...... ...### #.#### ......',
'...... ...... ...... ......',
];
defs['\u003e'] = [ // >
'...... .#.... ...... ..#...',
'...... #.##.# ....## ##....',
'...... ....#. ####.. ......',
'...... ...... ...... ......',
];
defs['\u003f'] = [ // ?
'.##### ...... ...... ......',
'###... .....# ###### ....##',
'#.#### #####. ...... ......',
'...... ...... ...... ......',
];
// 0x40-0x4f
defs['\u0040'] = [ // @
'...... .##### ###### ######',
'...... ###... ...... ....##',
'...... ###... .##### #.#.#.',
'...... ###... .#.... ##....',
'...... #.#### ###### ###...',
'...... ...... ...... ......',
];
defs['\u0041'] = [ // A
'.##### ###### ###### ###...',
'###... ...### #..... ......',
'#.#### ###### ###### ###...',
'...... ...... ...... ......',
];
defs['\u0042'] = [ // B
'###### ###### ###### ###...',
'###... ...### #..... ###...',
'#.#### #####. ###### ##....',
'...... ...... ...... ......',
];
defs['\u0043'] = [ // C
'.##### ###### ###### #.#...',
'###... ...... ...... ###...',
'#.#... ...... ...... ##....',
'...... ...... ...... ......',
];
defs['\u0044'] = [ // D
'###### ###### ###### ###...',
'###... ...... ...... ###...',
'#.#### ###### ###### ##....',
'...... ...... ...... ......',
];
defs['\u0045'] = [ // E
'###### ###### ###### ###...',
'###... ...### #..... ###...',
'###... ...... ...... ###...',
'...... ...... ...... ......',
];
defs['\u0046'] = [ // F
'###### ###### ###### ###...',
'###... ...### #..... ......',
'###... ...... ...... ......',
'...... ...... ...... ......',
];
defs['\u0047'] = [ // G
'.##### ###### ###### #.#...',
'###... .....# ...... ###...',
'#.#... ...### ###### ##....',
'...... ...... ...... ......',
];
defs['\u0048'] = [ // H
'###### ###### ###### ###...',
'...... ...### #..... ......',
'###### ###### ###### ###...',
'...... ...... ...... ......',
];
defs['\u0049'] = [ // I
'###### ###### ###### ###...',
'...... ...... ...... ......',
];
defs['\u004a'] = [ // J
'###... ...... .....# #.#...',
'###... ...... ...... ###...',
'#.#### ###### ###### ##....',
'...... ...... ...... ......',
];
defs['\u004b'] = [ // K
'###### ###### ###### ###...',
'.....# .####. ###.#. ......',
'.####. #..... ...#.# ###...',
'...... ...... ...... ......',
];
defs['\u004c'] = [ // L
'###### ###### ###### ###...',
'...... ...... ...... ###...',
'...... ...... ...... ###...',
'...... ...... ...... ......',
];
defs['\u004d'] = [ // M
'#.#### ###### ###### ###...',
'....## ####.. ...... ......',
'.##### ###### ###### ###...',
'...... ...... ...... ......',
];
defs['\u004e'] = [ // N
'#.#### ###### ###### ###...',
'....#. #.##.# ...... ......',
'###### ###### ###### ###...',
'...... ...... ...... ......',
];
defs['\u004f'] = [ // O
'.##### ###### ###### #.#...',
'###... ...... ...... ###...',
'#.#### ###### ###### ##....',
'...... ...... ...... ......',
];
// 0x50-0x5f
defs['\u0050'] = [ // P
'###### ###### ###### ###...',
'###... ...### #..... ......',
'#.#### #####. ...... ......',
'...... ...... ...... ......',
];
defs['\u0051'] = [ // Q
'.##### ###### ###### #.#...',
'###... ...... ..#.#. ##....',
'#.#### ###### ####.# #.#...',
'...... ...... ...... ......',
];
defs['\u0052'] = [ // R
'###### ###### ###### ###...',
'###... ...### ###.#. ......',
'#.#### #####. ...#.# #.#...',
'...... ...... ...... ......',
];
defs['\u0053'] = [ // S
'.##### ####.# ...... #.#...',
'###... ...### #..... ###...',
'#.#... ....#. ###### ##....',
'...... ...... ...... ......',
];
defs['\u0054'] = [ // T
'###... ...... ...... ......',
'###### ###### ###### ###...',
'###... ...... ...... ......',
'...... ...... ...... ......',
];
defs['\u0055'] = [ // U
'###### ###### ###### #.#...',
'...... ...... ...... ###...',
'###### ###### ###### ##....',
'...... ...... ...... ......',
];
defs['\u0056'] = [ // V
'###### ###### ###.#. ......',
'...... ...... ...### #.....',
'###### ###### ####.. ......',
'...... ...... ...... ......',
];
defs['\u0057'] = [ // W
'###### ###### ###### #.....',
'...... ...... #####. ......',
'###### ###### ###### #.....',
'...... ...... ...... ......',
];
defs['\u0058'] = [ // X
'####.# .#...# ###### ###...',
'....## ###### ...... ......',
'#####. #...#. ###### ###...',
'...... ...... ...... ......',
];
defs['\u0059'] = [ // Y
'###### ####.# ...... ......',
'...... ....## ###### ###...',
'###### #####. ...... ......',
'...... ...... ...... ......',
];
defs['\u005a'] = [ // Z
'###... .....# ###### ###...',
'###..# .####. ...... ###...',
'#####. #..... ...... ###...',
'...... ...... ...... ......',
];
defs['\u005b'] = [ // [
'###### ###### ###### ###...',
'###... ...... ...... ###...',
'...... ...... ...... ......',
];
defs['\u005c'] = [ // \\ (defined like space in device font
'...... ...... ...... ......',
'...... ...... ...... ......',
'...... ...... ...... ......',
];
defs['\u005d'] = [ // ];
'###... ...... ...... ###...',
'###### ###### ###### ###...',
'...... ...... ...... ......',
];
defs['\u005e'] = [ // ^
'.....# .##... ...... ......',
'..#### ##.... ...... ......',
'....#. #.#... ...... ......',
'...... ...... ...... ......',
];
defs['\u005f'] = [ // _
'...... ...... ...... ###...',
'...... ...... ...... ###...',
'...... ...... ...... ###...',
'...... ...... ...... ......',
];
// 0x60-0x6f
defs['\u0060'] = [ // `
'####.# .#.... ...... ......',
'....#. #.... ...... ......',
'...... ...... ...... ......',
];
defs['\u0061'] = [ // a
'...... .##... .##### #.#...',
'...... ###... .#.... ##....',
'...... #.#### ###### ###...',
'...... ...... ...... ......',
];
defs['\u0062'] = [ // b
'###### ###### ###### ###...',
'...... ###... ...... ###...',
'...... #.#### ###### ##....',
'...... ...... ...... ......',
];
defs['\u0063'] = [ // c
'...... .##### ###### #.#...',
'...... ###... ...... ###...',
'...... #.#... ...... ##....',
'...... ...... ...... ......',
];
defs['\u0064'] = [ // d
'...... .##### ###### #.#...',
'...... ###... ...... ###...',
'###### ###### ###### ###...',
'...... ...... ...... ......',
];
defs['\u0065'] = [ // e
'...... .##### ###### #.#...',
'...... ###... .#.... ###...',
'...... #.#### ##.... ##....',
'...... ...... ...... ......',
];
defs['\u0066'] = [ // f
'...... ###... ...... ......',
'.##### ###### ###### ###...',
'#.#... ###... ...... ......',
'...... ...... ...... ......',
];
defs['\u0067'] = [ // g
'...... .##### ###### #.#.##',
'...... ###... ...... ###.##',
'...... #.#### ###### #####.',
'...... ...... ...... ......',
];
defs['\u0068'] = [ // h
'###### ###### ###### ###...',
'...... ###... ...... ......',
'...... #.#### ###### ###...',
'...... ...... ...... ......',
];
defs['\u0069'] = [ // i
'###... ###### ###### ###...',
'...... ...... ...... ......',
];
defs['\u006a'] = [ // j
'...... ...... ...... ....##',
'###... ###### ###### #####.',
'...... ...... ...... ......',
];
defs['\u006b'] = [ // k
'###### ###### ###### ###...',
'...... .....# ###.#. ......',
'...... .####. ...#.# #.#...',
'...... ...... ...... ......',
];
defs['\u006c'] = [ // l
'###### ###### ###### #.#...',
'...... ...... ...... ##....',
'...... ...... ...... ......',
];
defs['\u006d'] = [ // m
'...... ###### ###### ###...',
'...... .##... ...... ......',
'...... #.#### ###### ###...',
'...... .##... ...... ......',
'...... #.#### ###### ###...',
'...... ...... ...... ......',
];
defs['\u006e'] = [ // n
'...... ###### ###### ###...',
'...... .##... ...... ......',
'...... #.#### ###### ###...',
'...... ...... ...... ......',
];
defs['\u006f'] = [ // o
'...... .##### ###### #.#...',
'...... ###... ...... ###...',
'...... #.#### ###### ##....',
'...... ...... ...... ......',
];
// 0x70-0x7f
defs['\u0070'] = [ // p
'...... ###### ###### ######',
'...... ###... ...... ###...',
'...... #.#### ###### ##....',
'...... ...... ...... ......',
];
defs['\u0071'] = [ // q
'...... .##### ###### #.#...',
'...... ###... ...... ###...',
'...... ###### ###### ######',
'...... ...... ...... ......',
];
defs['\u0072'] = [ // r
'...... ###### ###### ###...',
'...... .##... ...... ......',
'...... ...... ...... ......',
];
defs['\u0073'] = [ // s
'...... .##### ##.... #.#...',
'...... ###... .#.... ###...',
'...... #.#... .##### ##....',
'...... ...... ...... ......',
];
defs['\u0074'] = [ // t
'...... ###... ...... ......',
'###### ###### ###### #.#...',
'...... ###... ...... ##....',
'...... ...... ...... ......',
];
defs['\u0075'] = [ // u
'...... ###### ###### #.#...',
'...... ...... ...... ###...',
'...... ###### ###### #.#...',
'...... ...... ...... ......',
];
defs['\u0076'] = [ // v
'...... ###### ###.#. ......',
'...... ...... ...### #.....',
'...... ###### ####.. ......',
'...... ...... ...... ......',
];
defs['\u0077'] = [ // w
'...... ###### ###### #.....',
'...... ...... #####. ......',
'...... ###### ###### #.....',
'...... ...... ...... ......',
];
defs['\u0078'] = [ // x
'...... ####.# ....## ##....',
'...... ....## #####. ......',
'...... #####. ...#.# #.#...',
'...... ...... ...... ......',
];
defs['\u0079'] = [ // y
'...... ###### ###### #.#.##',
'...... ...... ...... ###.##',
'...... ###### ###### #####.',
'...... ...... ...... ......',
];
defs['\u007a'] = [ // z
'...... ###... ....## ###...',
'...... ###..# ####.. ###...',
'...... #####. ...... ###...',
'...... ...... ...... ......',
];
defs['\u007b'] = [ // {
'...... .....# ...... ......',
'.##### #####. ###### #.#...',
'###... ...... ...... ###...',
'...... ...... ...... ......',
];
defs['\u007c'] = [ // |
'###### ###### ###### ######',
'...... ...... ...... ......',
];
defs['\u007d'] = [ // }
'###... ...... ...... ###...',
'#.#### ####.# ###### ##....',
'...... ....#. ...... ......',
'...... ...... ...... ......',
];
defs['\u007e'] = [ // ~
'...... ...... ...... ......',
'...... .....# ##.... ......',
'...... ...### ...... ......',
'...... ....#. ###.#. ......',
'...... ...... ...### ......',
'...... ...... .###.. ......',
'...... ...... ...... ......',
];
defs['\u2302'] = [ // CP437 0x7f
'.....# .##### ###### ###...',
'..#### ...... ...... ###...',
'....#. #.#### ###### ###...',
'...... ...... ...... ......',
];
defs['\u007f'] = defs['\u2302'] // Python codec incorrectly maps \u007f to 0x7f
// 0x80-0x8f
defs['\u00c7'] = [ // Ç
'.##### ###### ###### #.#..#',
'###... ...... ...... #####.',
'#.#... ...... ...... ##....',
'...... ...... ...... ......',
];
defs['\u00fc'] = [ // ü
'###... ###### ###### #.#...',
'...... ...... ...... ###...',
'###... ###### ###### #.#...',
'...... ...... ...... ......',
];
defs['\u00e9'] = [ // é
'...... .##### ###### #.#...',
'.##... ###... .#.... ###...',
'#..... #.#### ##.... ##....',
'...... ...... ...... ......',
];
defs['\u00e2'] = [ // â
'.##... .##... .##### #.#...',
'###... ###... .#.... ##....',
'#.#... #.#### ###### ###...',
'...... ...... ...... ......',
];
defs['\u00e4'] = [ // ä
'###... .##... .##### #.#...',
'...... ###... .#.... ##....',
'###... #.#### ###### ###...',
'...... ...... ...... ......',
];
defs['\u00e0'] = [ // à
'.#.... .##... .##### #.#...',
'###... ###... .#.... ##....',
'#.#... #.#### ###### ###...',
'...... ...... ...... ......',
];
defs['\u00e5'] = [ // å
'...... .##... .##### #.#...',
'###... ###... .#.... ##....',
'...... #.#### ###### ###...',
'...... ...... ...... ......',
];
defs['\u00e7'] = [ // ç
'...... .##### ###### #.#..#',
'...... ###... ...... #####.',
'...... #.#... ...... ##....',
'...... ...... ...... ......',
];
defs['\u00ea'] = [ // ê
'.##... .##### ###### #.#...',
'###... ###... .#.... ###...',
'#.#... #.#### ##.... ##....',
'...... ...... ...... ......',
];
defs['\u00eb'] = [ // ë
'###... .##### ###### #.#...',
'...... ###... .#.... ###...',
'###... #.#### ##.... ##....',
'...... ...... ...... ......',
];
defs['\u00e8'] = [ // è
'.#.... .##### ###### #.#...',
'###... ###... .#.... ###...',
'#.#... #.#### ##.... ##....',
'...... ...... ...... ......',
];
defs['\u00ef'] = [ // ï
'###... ...... ...... ......',
'...... ###### ###### ###...',
'###... ...... ...... ......',
'...... ...... ...... ......',
];
defs['\u00ee'] = [ // î
'.####. ...... ...... ......',
'###... ###### ###### ###...',
'#.##.# ...... ...... ......',
'...... ...... ...... ......',
];
defs['\u00ec'] = [ // ì
'###... ...... ...... ......',
'###... ###### ###### ###...',
'#.#... ...... ...... ......',
'...... ...... ...... ......',
];
defs['\u00c4'] = [ // Ä
'###... .##### ###### ###...',
'...... ###... .#.... ......',
'###... #.#### ###### ###...',
'...... ...... ...... ......',
];
defs['\u00c5'] = [ // Å
'...... .##### ###### ###...',
'###... ###... .#.... ......',
'...... #.#### ###### ###...',
'...... ...... ...... ......',
];
// 0x90-0x9f
defs['\u00c9'] = [ // É
'...... ###### ###### ###...',
'.##... ###... .#.... ###...',
'#..... ###... ...... ###...',
'...... ...... ...... ......',
];
defs['\u00e6'] = [ // æ
'...... .##... .##### #.#...',
'...... ###... .#.... ##....',
'...... #.#### ###### ###...',
'...... ###... .#.... #.#...',
'...... #.#### ##.... ##....',
'...... ...... ...... ......',
];
defs['\u00c6'] = [ // Æ
'.##### ###### ###### ###...',
'###... ...### #..... ......',
'###### ###### ###### ###...',
'###... ...### #..... ###...',
'###... ...... ...... ###...',
'...... ...... ...... ......',
];
defs['\u00f4'] = [ // ô
'.##... .##### ###### #.#...',
'###... ###... ...... ###...',
'#.#... #.#### ###### ##....',
'...... ...... ...... ......',
];
defs['\u00f6'] = [ // ö
'###... .##### ###### #.#...',
'...... ###... ...... ###...',
'###... #.#### ###### ##....',
'...... ...... ...... ......',
];
defs['\u00f2'] = [ // ò
'.#.... .##### ###### #.#...',
'###... ###... ...... ###...',
'#.#... #.#### ###### ##....',
'...... ...... ...... ......',
];
defs['\u00fb'] = [ // û
'.##... ###### ###### #.#...',
'###... ...... ...... ###...',
'#.#... ###### ###### ##....',
'...... ...... ...... ......',
];
defs['\u00f9'] = [ // ù
'.#.... ###### ###### #.#...',
'###... ...... ...... ###...',
'#.#... ###### ###### ##....',
'...... ...... ...... ......',
];
defs['\u00ff'] = [ // ÿ
'###... ###### ###### #.#.##',
'...... ...... ...... ###.##',
'###... ###### ###### #####.',
'...... ...... ...... ......',
];
defs['\u00d6'] = [ // Ö
'###... .##### ###### #.#...',
'...... ###... ...... ###...',
'###... #.#### ###### ##....',
'...... ...... ...... ......',
];
defs['\u00dc'] = [ // Ü
'###... ###### ###### #.#...',
'...... ...... ...... ###...',
'###... ###### ###### ##....',
'...... ...... ...... ......',
];
defs['\u00a2'] = [ // ¢
'...... .##### ###### #.#...',
'...### ###... ...... ######',
'...... #.#... ...... ##....',
'...... ...... ...... ......',
];
defs['\u00a3'] = [ // £
'...... ###... ....## ###...',
'.##### ###### ####.. ###...',
'#.#... ###... ...... ##....',
'...... ...... ...... ......',
];
defs['\u00a5'] = [ // ¥
'#.##.# .#.### #.#### ......',
'....## ###### ###### ###...',
'.####. #..### #.#### ......',
'...... ...... ...... ......',
];
defs['\u20a7'] = [ // ₧
'###### ###### ###### ###...',
'###... ...### #..... ......',
'#.#### #####. .#.... ......',
'...... ...### ###### #.#...',
'...... ...... .#.... .#....',
'...... ...... ...... ......',
];
defs['\u0192'] = [ // ƒ
'...... ...### #..... #.#...',
'.##### ###### ###### ##....',
'#.#... ...### #..... ......',
'...... ...... ...... ......',
];
// 0xa0-0xaf
defs['\u00e1'] = [ // á
'.##... .##... .##### #.#...',
'###... ###... .#.... ##....',
'#..... #.#### ###### ###...',
'...... ...... ...... ......',
];
defs['\u00ed'] = [ // í
'.##... ...... ...... ......',
'###... ###### ###### ###...',
'#..... ...... ...... ......',
];
defs['\u00f3'] = [ // ó
'.##... .##### ###### #.#...',
'###... ###... ...... ###...',
'#..... #.#### ###### ##....',
'...... ...... ...... ......',
];
defs['\u00fa'] = [ // ú
'.##... ###### ###### #.#...',
'###... ...... ...... ###...',
'#..... ###### ###### #.#...',
'...... ...... ...... ......',
];
defs['\u00f1'] = [ // ñ
'###... ###### ###### ###...',
'###... ###... ...... ......',
'###... #.#### ###### ###...',
'...... ...... ...... ......',
];
defs['\u00d1'] = [ // Ñ
'###... ###### ###### ###...',
'###... ....#. ###.#. ......',
'###... ###### ###### ###...',
'...... ...... ...... ......',
];
defs['\u00aa'] = [ // ª
'.##... .##### ###.#. ......',
'###... ###... ..#### ......',
'#.#### ###### ###### ......',
'...... ...... ...... ......',
];
defs['\u00ba'] = [ // º
'.##### ###### ###.#. ......',
'###... ...... ..#### ......',
'#.#### ###### ####.. ......',
'...... ...... ...... ......',
];
defs['\u00bf'] = [ // ¿
'...... .....# ###### #.#...',
'###... #####. ...... ###...',
'...... ...... ..#### ##...',
'...... ...... ...... ......',
];
defs['\u2310'] = [ // ⌐
'...... ...... .##### ......',
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ...... ...... ......',
];
defs['\u00ac'] = [ // ¬
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ...... .##### ......',
'...... ...... ...... ......',
];
defs['\u00bd'] = [ // ½
'.##... ...... ....## ##....',
'###### ###..# ####.. ......',
'.....# .##### #..... ..##..',
'.####. #..### ....## ##.#..',
'#..... ....#. ####.. ...#..',
'...... ...... ...... ......',
];
defs['\u00bc'] = [ // ¼
'.##... ...... ....## ##....',
'###### ###..# ####.. ......',
'.....# .##### ###### ......',
'.####. #..... ..#### ......',
'#..... ...### ###### ####..',
'...... ...... ...... ......',
];
defs['\u00a1'] = [ // ¡
'###... ###### ###### ###...',
'...... ...... ...... ......',
];
defs['\u00ab'] = [ // «
'...... .....# ###.#.. .....',
'...... .####. ...#.# #.#...',
'...... .....# ###.#.. .....',
'...... .####. ...#.# #.#...',
'...... ...... ...... ......',
];
defs['\u00bb'] = [ // »
'...... #.##.# ....## ##....',
'...... ....#. ####... .....',
'...... #.##.# ....## ##....',
'...... ....#. ####... .....',
'...... ...... ...... ......',
];
// 0xb0-0xbf
defs['\u2591'] = [ // ░
'###... ...### #..... ###...',
'...... ...... ...... ......',
'###... ...### #..... ###...',
'...... ...... ...... ......',
'###... ...### #..... ###...',
'...... ...... ...... ......',
];
defs['\u2592'] = [ // ▒
'###... ...### #..... ###...',
'...### ###... .##### ...###',
'###... ...### #..... ###...',
'...### ###... .##### ...###',
'###... ...### #..... ###...',
'...... ...... ...... ......',
];
defs['\u2593'] = [ // ▓
'###### ###### ###### ######',
'###... ...### #..... ###...',
'###### ###### ###### ######',
'###... ...### #..... ###...',
'###### ###### ###### ######',
'...... ...... ...... ......',
];
defs['\u2502'] = [ // │
'...... ...... ...... ......',
'...... ...... ...... ......',
'###### ###### ###### ######',
'...... ...... ...... ......',
'...... ...... ...... ......',
];
defs['\u2524'] = [ // ┤, in this font a symbol representing a train cab pointing left
'...... .....# ###### ...#..',
'.....# .####. ..#### ...#..',
'...### #..... ..#### ...#..',
'...... ...... ...... ......',
];
defs['\u2561'] = [ // ╡, in this font a symbol representing a train cab pointing right
'...### .#.... ..#### ...#..',
'....#. #.##.# ..#### ...#..',
'...... ....#. ###### ...#..',
'...... ...... ...... ......',
];
defs['\u2562'] = [ // ╢, in this font a line just below the baseline
'...... ...... ...... ...#..',
'...... ...... ...... ...#..',
'...... ...... ...... ...#..',
'...... ...... ...... ......',
];
defs['\u2556'] = [ // ╖
'...... ...... .#.... ......',
'...... ...... .##### ######',
'...... ...... .#.... ......',
'...... ...... .##### ######',
'...... ...... ...... ......',
'...... ...... ...... ......',
];
defs['\u2555'] = [ // ╕
'...... ...### #.#### ......',
'...... ...### #.#### ......',
'...... ...### ###### ######',
'...... ...... ...... ......',
'...... ...... ...... ......',
];
defs['\u2563'] = [ // ╣
'...... ...### #.#### ......',
'###### ###### #.#### ######',
'...... ...... ...... ......',
'###### ###### ###### ######',
'...... ...... ...... ......',
'...... ...... ...... ......',
];
defs['\u2551'] = [ // ║
'...... ...... ...... ......',
'###### ###### ###### ######',
'...... ...... ...... ......',
'###### ###### ###### ######',
'...... ...... ...... ......',
'...... ...... ...... ......',
];
defs['\u2557'] = [ // ╗
'...... ...### #.#### ......',
'...... ...### #.#### ######',
'...... ...### #..... ......',
'...... ...### ###### ######',
'...... ...... ...... ......',
];
defs['\u255d'] = [ // ╝
'...... ...### #.#### ......',
'###### ###### #.#### ......',
'...... ...... ..#### ......',
'###### ###### ###### ......',
'...... ...... ...... ......',
];
defs['\u255c'] = [ // ╜
'...... ...... .#.... ......',
'###### ###### ##.... ......',
'...... ...... .#.... ......',
'###### ###### ##.... ......',
'...... ...... ...... ......',
];
defs['\u255b'] = [ // ╛
'...... ...### #.#### ......',
'...... ...### #.#### ......',
'###### ###### ###### ......',
'...... ...... ...... ......',
];
defs['\u2510'] = [ // ┐
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ...... .##### ######',
'...... ...... ...... ......',
'...... ...... ...... ......',
'...... ...... ...... ......',
];
// 0xc0-0xcf
defs['\u2514'] = [ // └
'...... ...... ...... ......',
'...... ...... ...... ......',
'###### ###### ##.... ......',
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ...... ...... ......',
];
defs['\u2534'] = [ // ┴
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'###### ###### ##.... ......',
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ...... ...... ......',
];
defs['\u252c'] = [ // ┬
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ...... .##### ######',
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ...... ...... ......',
];
defs['\u251c'] = [ // ├
'...... ...... ...... ......',
'...... ...... ...... ......',
'###### ###### ###### ######',
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ...... ...... ......',
];
defs['\u2500'] = [ // ─
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ...... ...... ......',
];
defs['\u253c'] = [ // ┼
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'###### ###### ###### ######',
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ...... ...... ......',
];
defs['\u255e'] = [ // ╞
'...... ...... ...... ......',
'...... ...... ...... ......',
'###### ###### ###### ######',
'...... ...### #.#### ......',
'...... ...### #.#### ......',
'...... ...... ...... ......',
];
defs['\u255f'] = [ // ╟
'...... ...... ...... ......',
'###### ###### ###### ######',
'...... ...... ...... ......',
'###### ###### ###### ######',
'...... ...... .#.... ......',
'...... ...... ...... ......',
];
defs['\u255a'] = [ // ╚
'###### ###### ###### ......',
'...... ...... ..#### ......',
'###### ###### #.#### ......',
'...... ...### #.#### ......',
'...... ...... ...... ......',
];
defs['\u2554'] = [ // ╔
'...... ...### ###### ######',
'...... ...### #..... ......',
'...... ...### #.#### ######',
'...... ...### #.#### ......',
'...... ...... ...... ......',
];
defs['\u2569'] = [ // ╩
'...... ...### #.#### ......',
'###### ###### #.#### ......',
'...... ...... ..#### ......',
'###### ###### #.#### ......',
'...... ...### #.#### ......',
'...... ...... ...... ......',
];
defs['\u2566'] = [ // ╦
'...... ...### #.#### ......',
'...... ...### #.#### ######',
'...... ...### #..... ......',
'...... ...### #.#### ######',
'...... ...### #.#### ......',
'...... ...... ...... ......',
];
defs['\u2560'] = [ // ╠
'...... ...... ...... ......',
'###### ###### ###### ######',
'...... ...... ...... ......',
'###### ###### #.#### ######',
'...... ...### #.#### ......',
'...... ...... ...... ......',
];
defs['\u2550'] = [ // ═
'...... ...### #.#### ......',
'...... ...### #.#### ......',
'...... ...### #.#### ......',
'...... ...### #.#### ......',
'...... ...### #.#### ......',
'...... ...... ...... ......',
];
defs['\u256c'] = [ // ╬
'...... ...### #.#### ......',
'###### ###### #.#### ######',
'...... ...... ...... ......',
'###### ###### #.#### ######',
'...... ...### #.#### ......',
'...... ...... ...... ......',
];
defs['\u2567'] = [ // ╧
'...... ...### #.#### ......',
'...... ...### #.#### ......',
'###### ###### #.#### ......',
'...... ...### #.#### ......',
'...... ...### #.#### ......',
'...... ...... ...... ......',
];
// 0xd0-0xdf
defs['\u2568'] = [ // ╨
'...... ...... .#.... ......',
'###### ###### ##.... ......',
'...... ...... .#.... ......',
'###### ###### ##.... ......',
'...... ...... .#.... ......',
'...... ...... ...... ......',
];
defs['\u2564'] = [ // ╤
'...... ...### #.#### ......',
'...... ...### #.#### ......',
'...... ...### #.#### ######',
'...... ...### #.#### ......',
'...... ...### #.#### ......',
'...... ...... ...... ......',
];
defs['\u2565'] = [ // ╥
'...... ...... .#.... ......',
'...... ...... .##### ######',
'...... ...... .#.... ......',
'...... ...... .##### ######',
'...... ...... .#.... ......',
'...... ...... ...... ......',
];
defs['\u2559'] = [ // ╙
'...... ...... ...... ......',
'###### ###### ##.... ......',
'...... ...... .#.... ......',
'###### ###### ##.... ......',
'...... ...... .#.... ......',
'...... ...... ...... ......',
];
defs['\u2558'] = [ // ╘
'...... ...... ...... ......',
'...... ...... ...... ......',
'###### ###### ###### ......',
'...... ...### #.#### ......',
'...... ...### #.#### ......',
'...... ...... ...... ......',
];
defs['\u2552'] = [ // ╒
'...... ...... ...... ......',
'...... ...... ...... ......',
'...... ...### ###### ######',
'...... ...### #.#### ......',
'...... ...### #.#### ......',
'...... ...... ...... ......',
];
defs['\u2553'] = [ // ╓
'...... ...... ...... ......',
'...... ...... .##### ######',
'...... ...... .#.... ......',
'...... ...... .##### ######',
'...... ...... .#.... ......',
'...... ...... ...... ......',
];
defs['\u256b'] = [ // ╫
'...... ...... .#.... ......',
'###### ###### ###### ######',
'...... ...... .#.... ......',
'###### ###### ###### ######',
'...... ...... .#.... ......',
'...... ...... ...... ......',
];
defs['\u256a'] = [ // ╪
'...... ...### #.#### ......',
'###### ###### ###### ######',
'...... ...### #.#### ......',
'###### ###### ###### ######',
'...... ...### #.#### ......',
'...... ...... ...... ......',
];
defs['\u2518'] = [ // ┘
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'###### ###### ##.... ......',
'...... ...... ...... ......',
'...... ...... ...... ......',
'...... ...... ...... ......',
];
defs['\u250c'] = [ // ┌
'...... ...... ...... ......',
'...... ...... ...... ......',
'...... ...... .##### ######',
'...... ...... .#.... ......',
'...... ...... .#.... ......',
'...... ...... ...... ......',
];
defs['\u2588'] = [ // █
'###### ###### ###### ######',
'###### ###### ###### ######',
'###### ###### ###### ######',
'###### ###### ###### ######',
'###### ###### ###### ######',
'...... ...... ...... ......',
];
defs['\u2584'] = [ // ▄
'...... ...... .##### ######',
'...... ...... .##### ######',
'...... ...... .##### ######',
'...... ...... .##### ######',
'...... ...... .##### ######',
'...... ...... ...... ......',
];
defs['\u258c'] = [ // ▌
'###### ###### ###### ######',
'###### ###### ###### ######',
'###### ###### ###### ######',
'...... ...... ...... ......',
'...... ...... ...... ......',
'...... ...... ...... ......',
];
defs['\u2590'] = [ // ▐, possible deviation from CP437, seems to not render at all on original
'...... ...... ...... ......',
'...... ...... ...... ......',
'###### ###### ###### ######',
'###### ###### ###### ######',
'###### ###### ###### ######',
'...... ...... ...... ......',
];
defs['\u2580'] = [ // ▀
'###### ###### ##.... ......',
'###### ###### ##.... ......',
'###### ###### ##.... ......',
'###### ###### ##.... ......',
'###### ###### ##.... ......',
'...... ...... ...... ......',
];
/*
// 0xe0-0xef
defs['\u00e0'] = [ // x
];
defs['\u00e1'] = [ // x
];
defs['\u00e2'] = [ // x
];
defs['\u00e3'] = [ // x
];
defs['\u00e4'] = [ // x
];
defs['\u00e5'] = [ // x
];
defs['\u00e6'] = [ // x
];
defs['\u00e7'] = [ // x
];
defs['\u00e8'] = [ // x
];
defs['\u00e9'] = [ // x
];
defs['\u00ea'] = [ // x
];
defs['\u00eb'] = [ // x
];
defs['\u00ec'] = [ // x
];
defs['\u00ed'] = [ // x
];
defs['\u00ee'] = [ // x
];
defs['\u00ef'] = [ // x
];
// 0xf0-0xff
defs['\u00f0'] = [ // x
];
defs['\u00f1'] = [ // x
];
defs['\u00f2'] = [ // x
];
defs['\u00f3'] = [ // x
];
defs['\u00f4'] = [ // x
];
defs['\u00f5'] = [ // x
];
defs['\u00f6'] = [ // x
];
defs['\u00f7'] = [ // x
];
defs['\u00f8'] = [ // x
];
defs['\u00f9'] = [ // x
];
defs['\u00fa'] = [ // x
];
defs['\u00fb'] = [ // x
];
defs['\u00fc'] = [ // x
];
defs['\u00fd'] = [ // x
];
defs['\u00fe'] = [ // x
];
defs['\u00ff'] = [ // x
];
*/
this.font = [];
for (let d of Object.keys(defs).toSorted()) {
let f = [];
for (let c of defs[d]) {
f.push(c.replace(/[^.#]/g, ""))
}
this.font[d] = f;
}
}
}