buba/buba/static/display.js

867 lines
No EOL
29 KiB
JavaScript

export default class {
constructor(container, config = {}) {
this.svgns = "http://www.w3.org/2000/svg";
this.config = Object.assign({
templateSvgUrl: "static/geascript-proportional.svg",
rows: 4,
cols: 120,
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()
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 = 1; r <= 4; 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])}`);
// rowSvg.setAttribute("width", "320");
// rowSvg.setAttribute("height", "15");
for (let c = 1; 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 - 1)} 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";
}
}
}
let c = 1
this.applyText(1, 1, " !\"#$%&'()*+,-./0123456789:;<=>?");
this.applyText(2, 1, "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_");
this.applyText(3, 1, "`abcdefghijklmnopqrstuvwxyz{|}~\u2302");
}
applyCharacter(row, col, char) {
let f = this.font[char]
if (f === undefined)
return 0;
for (let c of this.font[char]) {
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) {
for (let c of text) {
col += this.applyCharacter(row, col, c)
}
return col;
}
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
defs['\u0001'] = []
defs['\u0002'] = []
defs['\u0003'] = []
defs['\u0004'] = []
defs['\u0005'] = []
defs['\u0006'] = []
defs['\u0007'] = []
defs['\u0008'] = []
defs['\u0009'] = []
defs['\u000a'] = []
defs['\u000b'] = []
defs['\u000c'] = []
defs['\u000d'] = []
defs['\u000e'] = []
defs['\u000f'] = []
// 0x10-0x1f
defs['\u0010'] = []
defs['\u0011'] = []
defs['\u0012'] = []
defs['\u0013'] = []
defs['\u0014'] = []
defs['\u0015'] = []
defs['\u0016'] = []
defs['\u0017'] = []
defs['\u0018'] = []
defs['\u0019'] = []
defs['\u001a'] = []
defs['\u001b'] = []
defs['\u001c'] = []
defs['\u001d'] = []
defs['\u001e'] = []
defs['\u001f'] = []
// 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
'.....# .##### ###### ###...',
'..#### ...... ...... ###...',
'....#. #.#### ###### ###...',
'...... ...... ...... ......',
]
// 0x80-0x8f
defs['\u0080'] = []
defs['\u0081'] = []
defs['\u0082'] = []
defs['\u0083'] = []
defs['\u0084'] = []
defs['\u0085'] = []
defs['\u0086'] = []
defs['\u0087'] = []
defs['\u0088'] = []
defs['\u0089'] = []
defs['\u008a'] = []
defs['\u008b'] = []
defs['\u008c'] = []
defs['\u008d'] = []
defs['\u008e'] = []
defs['\u008f'] = []
// 0x90-0x9f
defs['\u0090'] = []
defs['\u0091'] = []
defs['\u0092'] = []
defs['\u0093'] = []
defs['\u0094'] = []
defs['\u0095'] = []
defs['\u0096'] = []
defs['\u0097'] = []
defs['\u0098'] = []
defs['\u0099'] = []
defs['\u009a'] = []
defs['\u009b'] = []
defs['\u009c'] = []
defs['\u009d'] = []
defs['\u009e'] = []
defs['\u009f'] = []
// 0xa0-0xaf
defs['\u00a0'] = []
defs['\u00a1'] = []
defs['\u00a2'] = []
defs['\u00a3'] = []
defs['\u00a4'] = []
defs['\u00a5'] = []
defs['\u00a6'] = []
defs['\u00a7'] = []
defs['\u00a8'] = []
defs['\u00a9'] = []
defs['\u00aa'] = []
defs['\u00ab'] = []
defs['\u00ac'] = []
defs['\u00ad'] = []
defs['\u00ae'] = []
defs['\u00af'] = []
// 0xb0-0xbf
defs['\u00b0'] = []
defs['\u00b1'] = []
defs['\u00b2'] = []
defs['\u00b3'] = []
defs['\u00b4'] = []
defs['\u00b5'] = []
defs['\u00b6'] = []
defs['\u00b7'] = []
defs['\u00b8'] = []
defs['\u00b9'] = []
defs['\u00ba'] = []
defs['\u00bb'] = []
defs['\u00bc'] = []
defs['\u00bd'] = []
defs['\u00be'] = []
defs['\u00bf'] = []
// 0xc0-0xcf
defs['\u00c0'] = []
defs['\u00c1'] = []
defs['\u00c2'] = []
defs['\u00c3'] = []
defs['\u00c4'] = []
defs['\u00c5'] = []
defs['\u00c6'] = []
defs['\u00c7'] = []
defs['\u00c8'] = []
defs['\u00c9'] = []
defs['\u00ca'] = []
defs['\u00cb'] = []
defs['\u00cc'] = []
defs['\u00cd'] = []
defs['\u00ce'] = []
defs['\u00cf'] = []
// 0xd0-0xdf
defs['\u00d0'] = []
defs['\u00d1'] = []
defs['\u00d2'] = []
defs['\u00d3'] = []
defs['\u00d4'] = []
defs['\u00d5'] = []
defs['\u00d6'] = []
defs['\u00d7'] = []
defs['\u00d8'] = []
defs['\u00d9'] = []
defs['\u00da'] = []
defs['\u00db'] = []
defs['\u00dc'] = []
defs['\u00dd'] = []
defs['\u00de'] = []
defs['\u00df'] = []
// 0xe0-0xef
defs['\u00e0'] = []
defs['\u00e1'] = []
defs['\u00e2'] = []
defs['\u00e3'] = []
defs['\u00e4'] = []
defs['\u00e5'] = []
defs['\u00e6'] = []
defs['\u00e7'] = []
defs['\u00e8'] = []
defs['\u00e9'] = []
defs['\u00ea'] = []
defs['\u00eb'] = []
defs['\u00ec'] = []
defs['\u00ed'] = []
defs['\u00ee'] = []
defs['\u00ef'] = []
// 0xf0-0xff
defs['\u00f0'] = []
defs['\u00f1'] = []
defs['\u00f2'] = []
defs['\u00f3'] = []
defs['\u00f4'] = []
defs['\u00f5'] = []
defs['\u00f6'] = []
defs['\u00f7'] = []
defs['\u00f8'] = []
defs['\u00f9'] = []
defs['\u00fa'] = []
defs['\u00fb'] = []
defs['\u00fc'] = []
defs['\u00fd'] = []
defs['\u00fe'] = []
defs['\u00ff'] = []
this.font = []
for (let d of Object.keys(defs)) {
let f = []
for (let c of defs[d]) {
f.push(c.replace(/[^.#]/g, ""))
}
this.font[d] = f
}
}
}