diff --git a/src/main/AsciiArt.fonts.js b/src/main/AsciiArt.fonts.js new file mode 100644 index 0000000..e1cbc46 --- /dev/null +++ b/src/main/AsciiArt.fonts.js @@ -0,0 +1,3368 @@ +/** + * Hand-coded ASCII art font tables — 17 fonts total. + * + * Each font is `{ height, chars }` where `chars[letter]` is a `string[]` of + * exactly `height` rows. Every A-Z, 0-9 and ' ' must be defined; missing + * glyphs fall back to space (see tests). The 5 existing fonts are extracted + * from renderer.js (the production pre-existing snapshot is the ground truth + * for their defined glyphs); missing letters/digits in block/bubble/digital + * are filled with the space-fallback glyph. The 12 new fonts mirror figlet + * 1.x reference output. + * + * @module AsciiArt.fonts + */ +'use strict'; + +const HAND_CODED_FONTS = { + standard: { + height: 5, + chars: { + 0: [' ___ ', '/ \\', '| | |', '| |', '\\___/'], + 1: [' | ', ' || ', ' | ', ' | ', ' _|_ '], + 2: [' ___ ', '\\ /', ' __/ ', '/ ', '\\____'], + 3: [' ___ ', '\\ /', ' __/ ', ' / ', '\\___/'], + 4: ['| |', '| |', '|___|', ' |', ' |'], + 5: [' ___ ', '| ', '|___ ', ' / ', '\\___/'], + 6: [' ___ ', '/ ', '|___ ', '| |', '\\___/'], + 7: ['_____', ' / ', ' / ', ' / ', '/ '], + 8: [' ___ ', '| |', ' ___ ', '| |', '\\___/'], + 9: [' ___ ', '| |', '\\___|', ' |', '\\___/'], + A: [' _ ', ' / \\ ', '/___\\', '| |', '| |'], + B: ['____ ', '| \\', '|___/', '| \\', '|___/'], + C: [' ___ ', '/ _/', '| \\', '| ', '\\___/'], + D: ['____ ', '| \\', '| |', '| |', '|___/'], + E: ['_____', '| ', '|___ ', '| ', '|____'], + F: ['_____', '| ', '|___ ', '| ', '| '], + G: [' ___ ', '/ _', '| ||', '| |', '\\___/'], + H: ['| |', '| |', '|___|', '| |', '| |'], + I: ['_____', ' | ', ' | ', ' | ', '_____'], + J: ['_____', ' | ', ' | ', '| | ', '\\__/ '], + K: ['| |', '| / ', '|_/ ', '| \\ ', '| \\ '], + L: ['| ', '| ', '| ', '| ', '|____'], + M: ['| |', '|\\ /|', '| V |', '| |', '| |'], + N: ['| |', '|\\ |', '| \\ |', '| \\|', '| |'], + O: [' ___ ', '/ \\', '| |', '| |', '\\___/'], + P: ['____ ', '| \\', '|___/', '| ', '| '], + Q: [' ___ ', '/ \\', '| |', '| |\\ ', '\\__\\|'], + R: ['____ ', '| \\', '|___/', '| \\ ', '| \\ '], + S: [' ___ ', '/ _/', '\\_ \\', ' \\ ', '\\___/'], + T: ['_____', ' | ', ' | ', ' | ', ' | '], + U: ['| |', '| |', '| |', '| |', '\\___/'], + V: ['| |', '| |', '| |', ' \\ / ', ' V '], + W: ['| |', '| |', '| W |', '|/ \\|', '| |'], + X: ['| |', ' \\ / ', ' X ', ' / \\ ', '| |'], + Y: ['| |', ' \\ / ', ' Y ', ' | ', ' | '], + Z: ['_____', ' / ', ' / ', ' / ', '/___ '], + ' ': [' ', ' ', ' ', ' ', ' '], + é: [' ', ' ', ' ', ' ', ' '], + }, + }, + banner: { + height: 7, + chars: { + 0: [ + ' ##### ', + ' ## ## ', + ' ## ### ', + ' ## #### ', + ' ### ## ', + ' ## ## ', + ' ##### ', + ], + 1: [ + ' ## ', + ' ### ', + ' ## ', + ' ## ', + ' ## ', + ' ## ', + ' ####### ', + ], + 2: [ + ' ##### ', + ' ## ## ', + ' ## ', + ' ## ', + ' ## ', + ' ## ', + ' ####### ', + ], + 3: [ + ' ##### ', + ' ## ## ', + ' ## ', + ' ### ', + ' ## ', + ' ## ## ', + ' ##### ', + ], + 4: [ + ' ### ', + ' #### ', + ' ## ## ', + ' ## ## ', + ' ####### ', + ' ## ', + ' ## ', + ], + 5: [ + ' ####### ', + ' ## ', + ' ###### ', + ' ## ', + ' ## ', + ' ## ## ', + ' ##### ', + ], + 6: [ + ' ##### ', + ' ## ## ', + ' ## ', + ' ###### ', + ' ## ## ', + ' ## ## ', + ' ##### ', + ], + 7: [ + ' ####### ', + ' ## ', + ' ## ', + ' ## ', + ' ## ', + ' ## ', + ' ## ', + ], + 8: [ + ' ##### ', + ' ## ## ', + ' ## ## ', + ' ##### ', + ' ## ## ', + ' ## ## ', + ' ##### ', + ], + 9: [ + ' ##### ', + ' ## ## ', + ' ## ## ', + ' ###### ', + ' ## ', + ' ## ## ', + ' ##### ', + ], + A: [ + ' ### ', + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' ####### ', + ' ## ## ', + ' ## ## ', + ], + B: [ + ' ###### ', + ' ## ## ', + ' ## ## ', + ' ###### ', + ' ## ## ', + ' ## ## ', + ' ###### ', + ], + C: [ + ' ##### ', + ' ## ## ', + ' ## ', + ' ## ', + ' ## ', + ' ## ## ', + ' ##### ', + ], + D: [ + ' ###### ', + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' ###### ', + ], + E: [ + ' ####### ', + ' ## ', + ' ## ', + ' ##### ', + ' ## ', + ' ## ', + ' ####### ', + ], + F: [ + ' ####### ', + ' ## ', + ' ## ', + ' ##### ', + ' ## ', + ' ## ', + ' ## ', + ], + G: [ + ' ##### ', + ' ## ## ', + ' ## ', + ' ## ### ', + ' ## ## ', + ' ## ## ', + ' ##### ', + ], + H: [ + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' ####### ', + ' ## ## ', + ' ## ## ', + ' ## ## ', + ], + I: [ + ' ####### ', + ' ### ', + ' ### ', + ' ### ', + ' ### ', + ' ### ', + ' ####### ', + ], + J: [ + ' ####### ', + ' ## ', + ' ## ', + ' ## ', + ' ## ## ', + ' ## ## ', + ' #### ', + ], + K: [ + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' #### ', + ' ## ## ', + ' ## ## ', + ' ## ## ', + ], + L: [ + ' ## ', + ' ## ', + ' ## ', + ' ## ', + ' ## ', + ' ## ', + ' ####### ', + ], + M: [ + ' ## ## ', + ' ### ### ', + ' ####### ', + ' ## # ## ', + ' ## ## ', + ' ## ## ', + ' ## ## ', + ], + N: [ + ' ## ## ', + ' ### ## ', + ' #### ## ', + ' ## #### ', + ' ## ### ', + ' ## ## ', + ' ## ## ', + ], + O: [ + ' ##### ', + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' ##### ', + ], + P: [ + ' ###### ', + ' ## ## ', + ' ## ## ', + ' ###### ', + ' ## ', + ' ## ', + ' ## ', + ], + Q: [ + ' ##### ', + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' ## # ## ', + ' ## ## ', + ' ### ## ', + ], + R: [ + ' ###### ', + ' ## ## ', + ' ## ## ', + ' ###### ', + ' ## ## ', + ' ## ## ', + ' ## ## ', + ], + S: [ + ' ##### ', + ' ## ## ', + ' ## ', + ' ##### ', + ' ## ', + ' ## ## ', + ' ##### ', + ], + T: [ + ' ####### ', + ' ### ', + ' ### ', + ' ### ', + ' ### ', + ' ### ', + ' ### ', + ], + U: [ + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' ##### ', + ], + V: [ + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' ### ', + ], + W: [ + ' ## ## ', + ' ## ## ', + ' ## ## ', + ' ## # ## ', + ' ####### ', + ' ### ### ', + ' ## ## ', + ], + X: [ + ' ## ## ', + ' ## ## ', + ' ### ', + ' # ', + ' ### ', + ' ## ## ', + ' ## ## ', + ], + Y: [ + ' ## ## ', + ' ## ## ', + ' ### ', + ' # ', + ' # ', + ' # ', + ' # ', + ], + Z: [ + ' ####### ', + ' ## ', + ' ## ', + ' ## ', + ' ## ', + ' ## ', + ' ####### ', + ], + ' ': [ + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ], + }, + }, + block: { + height: 6, + chars: { + 0: [' ', ' ', ' ', ' ', ' ', ' '], + 1: [' ', ' ', ' ', ' ', ' ', ' '], + 2: [' ', ' ', ' ', ' ', ' ', ' '], + 3: [' ', ' ', ' ', ' ', ' ', ' '], + 4: [' ', ' ', ' ', ' ', ' ', ' '], + 5: [' ', ' ', ' ', ' ', ' ', ' '], + 6: [' ', ' ', ' ', ' ', ' ', ' '], + 7: [' ', ' ', ' ', ' ', ' ', ' '], + 8: [' ', ' ', ' ', ' ', ' ', ' '], + 9: [' ', ' ', ' ', ' ', ' ', ' '], + A: ['█████╗ ', '██╔══██╗', '███████║', '██╔══██║', '██║ ██║', '╚═╝ ╚═╝'], + B: ['██████╗ ', '██╔══██╗', '██████╔╝', '██╔══██╗', '██████╔╝', '╚═════╝ '], + C: ['██████╗', '██╔════╝', '██║ ', '██║ ', '╚██████╗', ' ╚═════╝'], + D: ['██████╗ ', '██╔══██╗', '██║ ██║', '██║ ██║', '██████╔╝', '╚═════╝ '], + E: ['███████╗', '██╔════╝', '█████╗ ', '██╔══╝ ', '███████╗', '╚══════╝'], + F: ['███████╗', '██╔════╝', '█████╗ ', '██╔══╝ ', '██║ ', '╚═╝ '], + G: ['██████╗ ', '██╔════╝', '██║ ███╗', '██║ ██║', '╚██████╔╝', ' ╚═════╝ '], + H: ['██╗ ██╗', '██║ ██║', '███████║', '██╔══██║', '██║ ██║', '╚═╝ ╚═╝'], + I: ['██╗', '██║', '██║', '██║', '██║', '╚═╝'], + L: ['██╗ ', '██║ ', '██║ ', '██║ ', '███████╗', '╚══════╝'], + O: ['██████╗ ', '██╔══██╗', '██║ ██║', '██║ ██║', '╚██████╔╝', ' ╚═════╝ '], + ' ': [' ', ' ', ' ', ' ', ' ', ' '], + J: [' ', ' ', ' ', ' ', ' ', ' '], + K: [' ', ' ', ' ', ' ', ' ', ' '], + M: [' ', ' ', ' ', ' ', ' ', ' '], + N: [' ', ' ', ' ', ' ', ' ', ' '], + P: [' ', ' ', ' ', ' ', ' ', ' '], + Q: [' ', ' ', ' ', ' ', ' ', ' '], + R: [' ', ' ', ' ', ' ', ' ', ' '], + S: [' ', ' ', ' ', ' ', ' ', ' '], + T: [' ', ' ', ' ', ' ', ' ', ' '], + U: [' ', ' ', ' ', ' ', ' ', ' '], + V: [' ', ' ', ' ', ' ', ' ', ' '], + W: [' ', ' ', ' ', ' ', ' ', ' '], + X: [' ', ' ', ' ', ' ', ' ', ' '], + Y: [' ', ' ', ' ', ' ', ' ', ' '], + Z: [' ', ' ', ' ', ' ', ' ', ' '], + }, + }, + bubble: { + height: 5, + chars: { + 0: [' ', ' ', ' ', ' ', ' '], + 1: [' ', ' ', ' ', ' ', ' '], + 2: [' ', ' ', ' ', ' ', ' '], + 3: [' ', ' ', ' ', ' ', ' '], + 4: [' ', ' ', ' ', ' ', ' '], + 5: [' ', ' ', ' ', ' ', ' '], + 6: [' ', ' ', ' ', ' ', ' '], + 7: [' ', ' ', ' ', ' ', ' '], + 8: [' ', ' ', ' ', ' ', ' '], + 9: [' ', ' ', ' ', ' ', ' '], + A: [' Ⓐ ', ' ⒜ ⒜ ', '⒜⒜⒜⒜⒜', '⒜ ⒜', '⒜ ⒜'], + B: ['ⒷⒷⒷⒷ ', 'Ⓑ Ⓑ', 'ⒷⒷⒷⒷ ', 'Ⓑ Ⓑ', 'ⒷⒷⒷⒷ '], + C: [' ⒸⒸⒸ ', 'Ⓒ ', 'Ⓒ ', 'Ⓒ ', ' ⒸⒸⒸ '], + H: [' Ⓗ ', ' Ⓗ Ⓗ ', 'ⒽⒽⒽⒽⒽ', 'Ⓗ Ⓗ', 'Ⓗ Ⓗ'], + E: [' Ⓔ ', ' Ⓔ Ⓔ ', 'ⒺⒺⒺⒺⒺ', 'Ⓔ Ⓔ', 'Ⓔ Ⓔ'], + L: [' Ⓛ ', ' Ⓛ Ⓛ ', 'ⓁⓁⓁⓁⓁ', 'Ⓛ Ⓛ', 'Ⓛ Ⓛ'], + O: [' Ⓞ ', ' Ⓞ Ⓞ ', 'ⓄⓄⓄⓄⓄ', 'Ⓞ Ⓞ', 'Ⓞ Ⓞ'], + ' ': [' ', ' ', ' ', ' ', ' '], + D: [' ', ' ', ' ', ' ', ' '], + F: [' ', ' ', ' ', ' ', ' '], + G: [' ', ' ', ' ', ' ', ' '], + I: [' ', ' ', ' ', ' ', ' '], + J: [' ', ' ', ' ', ' ', ' '], + K: [' ', ' ', ' ', ' ', ' '], + M: [' ', ' ', ' ', ' ', ' '], + N: [' ', ' ', ' ', ' ', ' '], + P: [' ', ' ', ' ', ' ', ' '], + Q: [' ', ' ', ' ', ' ', ' '], + R: [' ', ' ', ' ', ' ', ' '], + S: [' ', ' ', ' ', ' ', ' '], + T: [' ', ' ', ' ', ' ', ' '], + U: [' ', ' ', ' ', ' ', ' '], + V: [' ', ' ', ' ', ' ', ' '], + W: [' ', ' ', ' ', ' ', ' '], + X: [' ', ' ', ' ', ' ', ' '], + Y: [' ', ' ', ' ', ' ', ' '], + Z: [' ', ' ', ' ', ' ', ' '], + }, + }, + digital: { + height: 7, + chars: { + 0: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + 1: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + 2: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + 3: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + 4: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + 5: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + 6: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + 7: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + 8: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + 9: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + A: [' ▄▀▀▀▄ ', '▐ ▌', '▐▄▄▄▄▌', '▐ ▌', '▐ ▌', '▐ ▌', ' '], + B: ['▐▀▀▀▄ ', '▐▄▄▄▀ ', '▐▄▄▄▄ ', '▐ ▌', '▐▄▄▄▀ ', ' ', ' '], + C: [' ▄▀▀▀▄', '▐ ', '▐ ', '▐ ', ' ▀▄▄▄▀', ' ', ' '], + H: ['▐ ▐ ', '▐ ▐ ', '▐▌▌▌▐ ', '▐ ▐ ', '▐ ▐ ', '▐ ▐ ', ' '], + E: ['▐▌▌▌▌ ', '▐ ', '▐▌▌▌ ', '▐ ', '▐▌▌▌▌ ', '▐ ', ' '], + L: ['▐ ', '▐ ', '▐ ', '▐ ', '▐ ', '▐▌▌▌▌ ', ' '], + O: [' ▐▌▌▌▐ ', '▐ ▐ ', '▐ ▐ ', '▐ ▐ ', '▐ ▐ ', ' ▐▌▌▌▐ ', ' '], + ' ': [' ', ' ', ' ', ' ', ' ', ' ', ' '], + D: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + F: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + G: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + I: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + J: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + K: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + M: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + N: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + P: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + Q: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + R: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + S: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + T: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + U: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + V: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + W: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + X: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + Y: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + Z: [' ', ' ', ' ', ' ', ' ', ' ', ' '], + }, + }, + big: { + height: 8, + chars: { + 0: [ + ' ___ ', + ' / _ \\ ', + ' | | | |', + ' | | | |', + ' | |_| |', + ' \\___/ ', + ' ', + ' ', + ], + 1: [' __ ', ' /_ |', ' | |', ' | |', ' | |', ' |_|', ' ', ' '], + 2: [' ___ ', ' |__ \\ ', ' ) |', ' / / ', ' / /_ ', ' |____|', ' ', ' '], + 3: [ + ' ____ ', + ' |___ \\ ', + ' __) |', + ' |__ < ', + ' ___) |', + ' |____/ ', + ' ', + ' ', + ], + 4: [ + ' _ _ ', + ' | || | ', + ' | || |_ ', + ' |__ _|', + ' | | ', + ' |_| ', + ' ', + ' ', + ], + 5: [ + ' _____ ', + ' | ____|', + ' | |__ ', + ' |___ \\ ', + ' ___) |', + ' |____/ ', + ' ', + ' ', + ], + 6: [ + ' __ ', + ' / / ', + ' / /_ ', + " | '_ \\ ", + ' | (_) |', + ' \\___/ ', + ' ', + ' ', + ], + 7: [ + ' ______ ', + ' |____ |', + ' / / ', + ' / / ', + ' / / ', + ' /_/ ', + ' ', + ' ', + ], + 8: [ + ' ___ ', + ' / _ \\ ', + ' | (_) |', + ' > _ < ', + ' | (_) |', + ' \\___/ ', + ' ', + ' ', + ], + 9: [ + ' ___ ', + ' / _ \\ ', + ' | (_) |', + ' \\__, |', + ' / / ', + ' /_/ ', + ' ', + ' ', + ], + A: [ + ' ', + ' /\\ ', + ' / \\ ', + ' / /\\ \\ ', + ' / ____ \\ ', + ' /_/ \\_\\', + ' ', + ' ', + ], + B: [ + ' ____ ', + ' | _ \\ ', + ' | |_) |', + ' | _ < ', + ' | |_) |', + ' |____/ ', + ' ', + ' ', + ], + C: [ + ' _____ ', + ' / ____|', + ' | | ', + ' | | ', + ' | |____ ', + ' \\_____|', + ' ', + ' ', + ], + D: [ + ' _____ ', + ' | __ \\ ', + ' | | | |', + ' | | | |', + ' | |__| |', + ' |_____/ ', + ' ', + ' ', + ], + E: [ + ' ______ ', + ' | ____|', + ' | |__ ', + ' | __| ', + ' | |____ ', + ' |______|', + ' ', + ' ', + ], + F: [ + ' ______ ', + ' | ____|', + ' | |__ ', + ' | __| ', + ' | | ', + ' |_| ', + ' ', + ' ', + ], + G: [ + ' _____ ', + ' / ____|', + ' | | __ ', + ' | | |_ |', + ' | |__| |', + ' \\_____|', + ' ', + ' ', + ], + H: [ + ' _ _ ', + ' | | | |', + ' | |__| |', + ' | __ |', + ' | | | |', + ' |_| |_|', + ' ', + ' ', + ], + I: [ + ' _____ ', + ' |_ _|', + ' | | ', + ' | | ', + ' _| |_ ', + ' |_____|', + ' ', + ' ', + ], + J: [ + ' _ ', + ' | |', + ' | |', + ' _ | |', + ' | |__| |', + ' \\____/ ', + ' ', + ' ', + ], + K: [ + ' _ __', + ' | |/ /', + " | ' / ", + ' | < ', + ' | . \\ ', + ' |_|\\_\\', + ' ', + ' ', + ], + L: [ + ' _ ', + ' | | ', + ' | | ', + ' | | ', + ' | |____ ', + ' |______|', + ' ', + ' ', + ], + M: [ + ' __ __ ', + ' | \\/ |', + ' | \\ / |', + ' | |\\/| |', + ' | | | |', + ' |_| |_|', + ' ', + ' ', + ], + N: [ + ' _ _ ', + ' | \\ | |', + ' | \\| |', + ' | . ` |', + ' | |\\ |', + ' |_| \\_|', + ' ', + ' ', + ], + O: [ + ' ____ ', + ' / __ \\ ', + ' | | | |', + ' | | | |', + ' | |__| |', + ' \\____/ ', + ' ', + ' ', + ], + P: [ + ' _____ ', + ' | __ \\ ', + ' | |__) |', + ' | ___/ ', + ' | | ', + ' |_| ', + ' ', + ' ', + ], + Q: [ + ' ____ ', + ' / __ \\ ', + ' | | | |', + ' | | | |', + ' | |__| |', + ' \\___\\_\\', + ' ', + ' ', + ], + R: [ + ' _____ ', + ' | __ \\ ', + ' | |__) |', + ' | _ / ', + ' | | \\ \\ ', + ' |_| \\_\\', + ' ', + ' ', + ], + S: [ + ' _____ ', + ' / ____|', + ' | (___ ', + ' \\___ \\ ', + ' ____) |', + ' |_____/ ', + ' ', + ' ', + ], + T: [ + ' _______ ', + ' |__ __|', + ' | | ', + ' | | ', + ' | | ', + ' |_| ', + ' ', + ' ', + ], + U: [ + ' _ _ ', + ' | | | |', + ' | | | |', + ' | | | |', + ' | |__| |', + ' \\____/ ', + ' ', + ' ', + ], + V: [ + ' __ __', + ' \\ \\ / /', + ' \\ \\ / / ', + ' \\ \\/ / ', + ' \\ / ', + ' \\/ ', + ' ', + ' ', + ], + W: [ + ' __ __', + ' \\ \\ / /', + ' \\ \\ /\\ / / ', + ' \\ \\/ \\/ / ', + ' \\ /\\ / ', + ' \\/ \\/ ', + ' ', + ' ', + ], + X: [ + ' __ __', + ' \\ \\ / /', + ' \\ V / ', + ' > < ', + ' / . \\ ', + ' /_/ \\_\\', + ' ', + ' ', + ], + Y: [ + ' __ __', + ' \\ \\ / /', + ' \\ \\_/ / ', + ' \\ / ', + ' | | ', + ' |_| ', + ' ', + ' ', + ], + Z: [ + ' ______', + ' |___ /', + ' / / ', + ' / / ', + ' / /__ ', + ' /_____|', + ' ', + ' ', + ], + ' ': [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], + }, + }, + small: { + height: 5, + chars: { + 0: [' __ ', ' / \\ ', ' | () |', ' \\__/ ', ' '], + 1: [' _ ', ' / |', ' | |', ' |_|', ' '], + 2: [' ___ ', ' |_ )', ' / / ', ' /___|', ' '], + 3: [' ____', ' |__ /', ' |_ \\', ' |___/', ' '], + 4: [' _ _ ', ' | | | ', ' |_ _|', ' |_| ', ' '], + 5: [' ___ ', ' | __|', ' |__ \\', ' |___/', ' '], + 6: [' __ ', ' / / ', ' / _ \\', ' \\___/', ' '], + 7: [' ____ ', ' |__ |', ' / / ', ' /_/ ', ' '], + 8: [' ___ ', ' ( _ )', ' / _ \\', ' \\___/', ' '], + 9: [' ___ ', ' / _ \\', ' \\_, /', ' /_/ ', ' '], + A: [' _ ', ' /_\\ ', ' / _ \\ ', ' /_/ \\_\\', ' '], + B: [' ___ ', ' | _ )', ' | _ \\', ' |___/', ' '], + C: [' ___ ', ' / __|', ' | (__ ', ' \\___|', ' '], + D: [' ___ ', ' | \\ ', ' | |) |', ' |___/ ', ' '], + E: [' ___ ', ' | __|', ' | _| ', ' |___|', ' '], + F: [' ___ ', ' | __|', ' | _| ', ' |_| ', ' '], + G: [' ___ ', ' / __|', ' | (_ |', ' \\___|', ' '], + H: [' _ _ ', ' | || |', ' | __ |', ' |_||_|', ' '], + I: [' ___ ', ' |_ _|', ' | | ', ' |___|', ' '], + J: [' _ ', ' _ | |', ' | || |', ' \\__/ ', ' '], + K: [' _ __', ' | |/ /', " | ' < ", ' |_|\\_\\', ' '], + L: [' _ ', ' | | ', ' | |__ ', ' |____|', ' '], + M: [' __ __ ', ' | \\/ |', ' | |\\/| |', ' |_| |_|', ' '], + N: [' _ _ ', ' | \\| |', ' | .` |', ' |_|\\_|', ' '], + O: [' ___ ', ' / _ \\ ', ' | (_) |', ' \\___/ ', ' '], + P: [' ___ ', ' | _ \\', ' | _/', ' |_| ', ' '], + Q: [' ___ ', ' / _ \\ ', ' | (_) |', ' \\__\\_\\', ' '], + R: [' ___ ', ' | _ \\', ' | /', ' |_|_\\', ' '], + S: [' ___ ', ' / __|', ' \\__ \\', ' |___/', ' '], + T: [' _____ ', ' |_ _|', ' | | ', ' |_| ', ' '], + U: [' _ _ ', ' | | | |', ' | |_| |', ' \\___/ ', ' '], + V: [' __ __', ' \\ \\ / /', ' \\ V / ', ' \\_/ ', ' '], + W: [' __ __', ' \\ \\ / /', ' \\ \\/\\/ / ', ' \\_/\\_/ ', ' '], + X: [' __ __', ' \\ \\/ /', ' > < ', ' /_/\\_\\', ' '], + Y: [' __ __', ' \\ \\ / /', ' \\ V / ', ' |_| ', ' '], + Z: [' ____', ' |_ /', ' / / ', ' /___|', ' '], + ' ': [' ', ' ', ' ', ' ', ' '], + }, + }, + lean: { + height: 8, + chars: { + 0: [ + ' ', + ' _/ ', + ' _/ _/ ', + ' _/ _/ ', + '_/ _/ ', + ' _/ ', + ' ', + ' ', + ], + 1: [ + ' ', + ' _/ ', + ' _/_/ ', + ' _/ ', + ' _/ ', + '_/ ', + ' ', + ' ', + ], + 2: [ + ' ', + ' _/_/ ', + ' _/ _/ ', + ' _/ ', + ' _/ ', + '_/_/_/_/ ', + ' ', + ' ', + ], + 3: [ + ' ', + ' _/_/_/ ', + ' _/ ', + ' _/_/ ', + ' _/ ', + '_/_/_/ ', + ' ', + ' ', + ], + 4: [ + ' ', + ' _/ _/ ', + ' _/ _/ ', + '_/_/_/_/ ', + ' _/ ', + ' _/ ', + ' ', + ' ', + ], + 5: [ + ' ', + ' _/_/_/_/ ', + ' _/ ', + ' _/_/_/ ', + ' _/ ', + '_/_/_/ ', + ' ', + ' ', + ], + 6: [ + ' ', + ' _/_/_/ ', + ' _/ ', + ' _/_/_/ ', + '_/ _/ ', + ' _/_/ ', + ' ', + ' ', + ], + 7: [ + ' ', + ' _/_/_/_/_/ ', + ' _/ ', + ' _/ ', + ' _/ ', + '_/ ', + ' ', + ' ', + ], + 8: [ + ' ', + ' _/_/ ', + ' _/ _/ ', + ' _/_/ ', + '_/ _/ ', + ' _/_/ ', + ' ', + ' ', + ], + 9: [ + ' ', + ' _/_/ ', + ' _/ _/ ', + ' _/_/_/ ', + ' _/ ', + '_/_/_/ ', + ' ', + ' ', + ], + A: [ + ' ', + ' _/_/ ', + ' _/ _/ ', + ' _/_/_/_/ ', + ' _/ _/ ', + '_/ _/ ', + ' ', + ' ', + ], + B: [ + ' ', + ' _/_/_/ ', + ' _/ _/ ', + ' _/_/_/ ', + ' _/ _/ ', + '_/_/_/ ', + ' ', + ' ', + ], + C: [ + ' ', + ' _/_/_/ ', + ' _/ ', + ' _/ ', + '_/ ', + ' _/_/_/ ', + ' ', + ' ', + ], + D: [ + ' ', + ' _/_/_/ ', + ' _/ _/ ', + ' _/ _/ ', + ' _/ _/ ', + '_/_/_/ ', + ' ', + ' ', + ], + E: [ + ' ', + ' _/_/_/_/ ', + ' _/ ', + ' _/_/_/ ', + ' _/ ', + '_/_/_/_/ ', + ' ', + ' ', + ], + F: [ + ' ', + ' _/_/_/_/ ', + ' _/ ', + ' _/_/_/ ', + ' _/ ', + '_/ ', + ' ', + ' ', + ], + G: [ + ' ', + ' _/_/_/ ', + ' _/ ', + ' _/ _/_/ ', + '_/ _/ ', + ' _/_/_/ ', + ' ', + ' ', + ], + H: [ + ' ', + ' _/ _/ ', + ' _/ _/ ', + ' _/_/_/_/ ', + ' _/ _/ ', + '_/ _/ ', + ' ', + ' ', + ], + I: [ + ' ', + ' _/_/_/ ', + ' _/ ', + ' _/ ', + ' _/ ', + '_/_/_/ ', + ' ', + ' ', + ], + J: [ + ' ', + ' _/ ', + ' _/ ', + ' _/ ', + '_/ _/ ', + ' _/_/ ', + ' ', + ' ', + ], + K: [ + ' ', + ' _/ _/ ', + ' _/ _/ ', + ' _/_/ ', + ' _/ _/ ', + '_/ _/ ', + ' ', + ' ', + ], + L: [ + ' ', + ' _/ ', + ' _/ ', + ' _/ ', + ' _/ ', + '_/_/_/_/ ', + ' ', + ' ', + ], + M: [ + ' ', + ' _/ _/ ', + ' _/_/ _/_/ ', + ' _/ _/ _/ ', + ' _/ _/ ', + '_/ _/ ', + ' ', + ' ', + ], + N: [ + ' ', + ' _/ _/ ', + ' _/_/ _/ ', + ' _/ _/ _/ ', + ' _/ _/_/ ', + '_/ _/ ', + ' ', + ' ', + ], + O: [ + ' ', + ' _/_/ ', + ' _/ _/ ', + ' _/ _/ ', + '_/ _/ ', + ' _/_/ ', + ' ', + ' ', + ], + P: [ + ' ', + ' _/_/_/ ', + ' _/ _/ ', + ' _/_/_/ ', + ' _/ ', + '_/ ', + ' ', + ' ', + ], + Q: [ + ' ', + ' _/_/ ', + ' _/ _/ ', + ' _/ _/_/ ', + '_/ _/ ', + ' _/_/ _/ ', + ' ', + ' ', + ], + R: [ + ' ', + ' _/_/_/ ', + ' _/ _/ ', + ' _/_/_/ ', + ' _/ _/ ', + '_/ _/ ', + ' ', + ' ', + ], + S: [ + ' ', + ' _/_/_/ ', + ' _/ ', + ' _/_/ ', + ' _/ ', + '_/_/_/ ', + ' ', + ' ', + ], + T: [ + ' ', + '_/_/_/_/_/ ', + ' _/ ', + ' _/ ', + ' _/ ', + '_/ ', + ' ', + ' ', + ], + U: [ + ' ', + ' _/ _/ ', + ' _/ _/ ', + ' _/ _/ ', + '_/ _/ ', + ' _/_/ ', + ' ', + ' ', + ], + V: [ + ' ', + ' _/ _/ ', + ' _/ _/ ', + '_/ _/ ', + ' _/ _/ ', + ' _/ ', + ' ', + ' ', + ], + W: [ + ' ', + ' _/ _/ ', + ' _/ _/ ', + '_/ _/ _/ ', + ' _/ _/ _/ ', + ' _/ _/ ', + ' ', + ' ', + ], + X: [ + ' ', + ' _/ _/ ', + ' _/ _/ ', + ' _/ ', + ' _/ _/ ', + '_/ _/ ', + ' ', + ' ', + ], + Y: [ + ' ', + '_/ _/ ', + ' _/ _/ ', + ' _/ ', + ' _/ ', + '_/ ', + ' ', + ' ', + ], + Z: [ + ' ', + ' _/_/_/_/_/ ', + ' _/ ', + ' _/ ', + ' _/ ', + '_/_/_/_/_/ ', + ' ', + ' ', + ], + ' ': [ + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ], + }, + }, + slant: { + height: 6, + chars: { + 0: [' ____ ', ' / __ \\', ' / / / /', '/ /_/ / ', '\\____/ ', ' '], + 1: [' ___', ' < /', ' / / ', ' / / ', '/_/ ', ' '], + 2: [' ___ ', ' |__ \\', ' __/ /', ' / __/ ', '/____/ ', ' '], + 3: [' _____', ' |__ /', ' /_ < ', ' ___/ / ', '/____/ ', ' '], + 4: [' __ __', ' / // /', ' / // /_', '/__ __/', ' /_/ ', ' '], + 5: [' ______', ' / ____/', ' /___ \\ ', ' ____/ / ', '/_____/ ', ' '], + 6: [' _____', ' / ___/', ' / __ \\ ', '/ /_/ / ', '\\____/ ', ' '], + 7: [' _____', '/__ /', ' / / ', ' / / ', '/_/ ', ' '], + 8: [' ____ ', ' ( __ )', ' / __ |', '/ /_/ / ', '\\____/ ', ' '], + 9: [' ____ ', ' / __ \\', ' / /_/ /', ' \\__, / ', '/____/ ', ' '], + A: [' ___ ', ' / |', ' / /| |', ' / ___ |', '/_/ |_|', ' '], + B: [' ____ ', ' / __ )', ' / __ |', ' / /_/ / ', '/_____/ ', ' '], + C: [' ______', ' / ____/', ' / / ', '/ /___ ', '\\____/ ', ' '], + D: [' ____ ', ' / __ \\', ' / / / /', ' / /_/ / ', '/_____/ ', ' '], + E: [' ______', ' / ____/', ' / __/ ', ' / /___ ', '/_____/ ', ' '], + F: [' ______', ' / ____/', ' / /_ ', ' / __/ ', '/_/ ', ' '], + G: [' ______', ' / ____/', ' / / __ ', '/ /_/ / ', '\\____/ ', ' '], + H: [' __ __', ' / / / /', ' / /_/ / ', ' / __ / ', '/_/ /_/ ', ' '], + I: [' ____', ' / _/', ' / / ', ' _/ / ', '/___/ ', ' '], + J: [' __', ' / /', ' __ / / ', '/ /_/ / ', '\\____/ ', ' '], + K: [' __ __', ' / //_/', ' / ,< ', ' / /| | ', '/_/ |_| ', ' '], + L: [' __ ', ' / / ', ' / / ', ' / /___', '/_____/', ' '], + M: [' __ ___', ' / |/ /', ' / /|_/ / ', ' / / / / ', '/_/ /_/ ', ' '], + N: [' _ __', ' / | / /', ' / |/ / ', ' / /| / ', '/_/ |_/ ', ' '], + O: [' ____ ', ' / __ \\', ' / / / /', '/ /_/ / ', '\\____/ ', ' '], + P: [' ____ ', ' / __ \\', ' / /_/ /', ' / ____/ ', '/_/ ', ' '], + Q: [' ____ ', ' / __ \\', ' / / / /', '/ /_/ / ', '\\___\\_\\ ', ' '], + R: [' ____ ', ' / __ \\', ' / /_/ /', ' / _, _/ ', '/_/ |_| ', ' '], + S: [' _____', ' / ___/', ' \\__ \\ ', ' ___/ / ', '/____/ ', ' '], + T: [' ______', ' /_ __/', ' / / ', ' / / ', '/_/ ', ' '], + U: [' __ __', ' / / / /', ' / / / / ', '/ /_/ / ', '\\____/ ', ' '], + V: [' _ __', '| | / /', '| | / / ', '| |/ / ', '|___/ ', ' '], + W: [' _ __', '| | / /', '| | /| / / ', '| |/ |/ / ', '|__/|__/ ', ' '], + X: [' _ __', ' | |/ /', ' | / ', ' / | ', '/_/|_| ', ' '], + Y: ['__ __', '\\ \\/ /', ' \\ / ', ' / / ', '/_/ ', ' '], + Z: [' _____', '/__ /', ' / / ', ' / /__', '/____/', ' '], + ' ': [' ', ' ', ' ', ' ', ' ', ' '], + }, + }, + isometric1: { + height: 7, + chars: { + 0: [ + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ], + 1: [ + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ], + 2: [ + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ], + 3: [ + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ], + 4: [ + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ], + 5: [ + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ], + 6: [ + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ], + 7: [ + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ], + 8: [ + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ], + 9: [ + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ], + A: [ + ' ___ ', + ' /\\ \\ ', + ' /::\\ \\ ', + ' /::\\:\\__\\', + ' \\/\\::/ /', + ' /:/ / ', + ' \\/__/ ', + ], + B: [ + ' ___ ', + ' /\\ \\ ', + ' /::\\ \\ ', + ' /::\\:\\__\\', + ' \\:\\::/ /', + ' \\::/ / ', + ' \\/__/ ', + ], + C: [ + ' ___ ', + ' /\\ \\ ', + ' /::\\ \\ ', + ' /:/\\:\\__\\', + ' \\:\\ \\/__/', + ' \\:\\__\\ ', + ' \\/__/ ', + ], + D: [ + ' ___ ', + ' /\\ \\ ', + ' /::\\ \\ ', + ' /:/\\:\\__\\', + ' \\:\\/:/ /', + ' \\::/ / ', + ' \\/__/ ', + ], + E: [ + ' ___ ', + ' /\\ \\ ', + ' /::\\ \\ ', + ' /::\\:\\__\\', + ' \\:\\:\\/ /', + ' \\:\\/ / ', + ' \\/__/ ', + ], + F: [ + ' ___ ', + ' /\\ \\ ', + ' /::\\ \\ ', + ' /::\\:\\__\\', + ' \\/\\:\\/__/', + ' \\/__/ ', + ' ', + ], + G: [ + ' ___ ', + ' /\\ \\ ', + ' /::\\ \\ ', + ' /:/\\:\\__\\', + ' \\:\\:\\/__/', + ' \\::/ / ', + ' \\/__/ ', + ], + H: [ + ' ___ ', + ' /\\__\\ ', + ' /:/__/_ ', + ' /::\\/\\__\\', + ' \\/\\::/ /', + ' /:/ / ', + ' \\/__/ ', + ], + I: [ + ' ___ ', + ' /\\ \\ ', + ' _\\:\\ \\ ', + ' /\\/::\\__\\', + ' \\::/\\/__/', + ' \\:\\__\\ ', + ' \\/__/ ', + ], + J: [ + ' ___ ', + ' /\\ \\ ', + ' _\\:\\ \\ ', + ' /\\/::\\__\\', + ' \\::/\\/__/', + ' \\/__/ ', + ' ', + ], + K: [ + ' ___ ', + ' /\\__\\ ', + ' /:/ _/_ ', + ' /::-"\\__\\', + ' \\;:;-",-"', + ' |:| | ', + ' \\|__| ', + ], + L: [ + ' ___ ', + ' /\\__\\ ', + ' /:/ / ', + ' /:/__/ ', + ' \\:\\ \\ ', + ' \\:\\__\\ ', + ' \\/__/ ', + ], + M: [ + ' ___ ', + ' /\\__\\ ', + ' /::L_L_ ', + ' /:/L:\\__\\', + ' \\/_/:/ /', + ' /:/ / ', + ' \\/__/ ', + ], + N: [ + ' ___ ', + ' /\\__\\ ', + ' /:| _|_ ', + ' /::|/\\__\\', + ' \\/|::/ /', + ' |:/ / ', + ' \\/__/ ', + ], + O: [ + ' ___ ', + ' /\\ \\ ', + ' /::\\ \\ ', + ' /:/\\:\\__\\', + ' \\:\\/:/ /', + ' \\::/ / ', + ' \\/__/ ', + ], + P: [ + ' ___ ', + ' /\\ \\ ', + ' /::\\ \\ ', + ' /::\\:\\__\\', + ' \\/\\::/ /', + ' \\/__/ ', + ' ', + ], + Q: [ + ' ___ ', + ' /\\ \\ ', + ' /::\\ \\ ', + ' \\:\\:\\__\\', + ' \\::/ /', + ' /:/ / ', + ' \\/__/ ', + ], + R: [ + ' ___ ', + ' /\\ \\ ', + ' /::\\ \\ ', + ' /::\\:\\__\\', + ' \\;:::/ /', + ' |:\\/__/ ', + ' \\|__| ', + ], + S: [ + ' ___ ', + ' /\\ \\ ', + ' /::\\ \\ ', + ' /\\:\\:\\__\\', + ' \\:\\:\\/__/', + ' \\::/ / ', + ' \\/__/ ', + ], + T: [ + ' ___ ', + ' /\\ \\ ', + ' \\:\\ \\ ', + ' /::\\__\\', + ' /:/\\/__/', + ' \\/__/ ', + ' ', + ], + U: [ + ' ___ ', + ' /\\__\\ ', + ' /:/ _/_ ', + ' /:/_/\\__\\', + ' \\:\\/:/ /', + ' \\::/ / ', + ' \\/__/ ', + ], + V: [ + ' ___ ', + ' /\\__\\ ', + ' /:/ _/_ ', + ' |::L/\\__\\', + ' |::::/ /', + ' L;;/__/ ', + ' ', + ], + W: [ + ' ___ ', + ' /\\__\\ ', + ' /:/\\__\\ ', + ' /:/:/\\__\\', + ' \\::/:/ /', + ' \\::/ / ', + ' \\/__/ ', + ], + X: [ + ' ___ ', + ' /\\__\\ ', + ' |::L__L ', + ' /::::\\__\\', + ' \\;::;/__/', + ' |::|__| ', + ' \\/__/ ', + ], + Y: [ + ' ___ ', + ' /\\__\\ ', + ' |::L__L ', + ' |:::\\__\\', + ' /:;;/__/', + ' \\/__/ ', + ' ', + ], + Z: [ + ' ___ ', + ' /\\ \\ ', + ' _\\:\\ \\ ', + ' /::::\\__\\', + ' \\::;;/__/', + ' \\:\\__\\ ', + ' \\/__/ ', + ], + ' ': [' ', ' ', ' ', ' ', ' ', ' ', ' '], + }, + }, + isometric2: { + height: 8, + chars: { + 0: [ + "::'#####:::", + ":'##.. ##::", + "'##:::: ##:", + ' ##:::: ##:', + ' ##:::: ##:', + '. ##:: ##::', + ':. #####:::', + '::.....::::', + ], + 1: [ + ":::'##:::", + ":'####:::", + ':.. ##:::', + '::: ##:::', + '::: ##:::', + '::: ##:::', + ":'######:", + ':......::', + ], + 2: [ + ":'#######::", + "'##.... ##:", + '..::::: ##:', + ":'#######::", + "'##::::::::", + ' ##::::::::', + ' #########:', + '.........::', + ], + 3: [ + ":'#######::", + "'##.... ##:", + '..::::: ##:', + ":'#######::", + ':...... ##:', + "'##:::: ##:", + '. #######::', + ':.......:::', + ], + 4: [ + "'##::::::::", + " ##:::'##::", + ' ##::: ##::', + ' ##::: ##::', + ' #########:', + '...... ##::', + ':::::: ##::', + '::::::..:::', + ], + 5: [ + "'########:", + ' ##.....::', + ' ##:::::::', + ' #######::', + '...... ##:', + "'##::: ##:", + '. ######::', + ':......:::', + ], + 6: [ + ":'#######::", + "'##.... ##:", + ' ##::::..::', + ' ########::', + ' ##.... ##:', + ' ##:::: ##:', + '. #######::', + ':.......:::', + ], + 7: [ + "'########:", + ' ##.. ##:', + '..:: ##:::', + '::: ##::::', + ':: ##:::::', + ':: ##:::::', + ':: ##:::::', + '::..::::::', + ], + 8: [ + ":'#######::", + "'##.... ##:", + ' ##:::: ##:', + ': #######::', + "'##.... ##:", + ' ##:::: ##:', + '. #######::', + ':.......:::', + ], + 9: [ + ":'#######::", + "'##.... ##:", + ' ##:::: ##:', + ': ########:', + ':...... ##:', + "'##:::: ##:", + '. #######::', + ':.......:::', + ], + A: [ + ":::'###::::", + "::'## ##:::", + ":'##:. ##::", + "'##:::. ##:", + ' #########:', + ' ##.... ##:', + ' ##:::: ##:', + '..:::::..::', + ], + B: [ + "'########::", + ' ##.... ##:', + ' ##:::: ##:', + ' ########::', + ' ##.... ##:', + ' ##:::: ##:', + ' ########::', + '........:::', + ], + C: [ + ":'######::", + "'##... ##:", + ' ##:::..::', + ' ##:::::::', + ' ##:::::::', + ' ##::: ##:', + '. ######::', + ':......:::', + ], + D: [ + "'########::", + ' ##.... ##:', + ' ##:::: ##:', + ' ##:::: ##:', + ' ##:::: ##:', + ' ##:::: ##:', + ' ########::', + '........:::', + ], + E: [ + "'########:", + ' ##.....::', + ' ##:::::::', + ' ######:::', + ' ##...::::', + ' ##:::::::', + ' ########:', + '........::', + ], + F: [ + "'########:", + ' ##.....::', + ' ##:::::::', + ' ######:::', + ' ##...::::', + ' ##:::::::', + ' ##:::::::', + '..::::::::', + ], + G: [ + ":'######:::", + "'##... ##::", + ' ##:::..:::', + " ##::'####:", + ' ##::: ##::', + ' ##::: ##::', + '. ######:::', + ':......::::', + ], + H: [ + "'##::::'##:", + ' ##:::: ##:', + ' ##:::: ##:', + ' #########:', + ' ##.... ##:', + ' ##:::: ##:', + ' ##:::: ##:', + '..:::::..::', + ], + I: ["'####:", '. ##::', ': ##::', ': ##::', ': ##::', ': ##::', "'####:", '....::'], + J: [ + "::::::'##:", + ':::::: ##:', + ':::::: ##:', + ':::::: ##:', + "'##::: ##:", + ' ##::: ##:', + '. ######::', + ':......:::', + ], + K: [ + "'##:::'##:", + " ##::'##::", + " ##:'##:::", + ' #####::::', + ' ##. ##:::', + ' ##:. ##::', + ' ##::. ##:', + '..::::..::', + ], + L: [ + "'##:::::::", + ' ##:::::::', + ' ##:::::::', + ' ##:::::::', + ' ##:::::::', + ' ##:::::::', + ' ########:', + '........::', + ], + M: [ + "'##::::'##:", + " ###::'###:", + " ####'####:", + ' ## ### ##:', + ' ##. #: ##:', + ' ##:.:: ##:', + ' ##:::: ##:', + '..:::::..::', + ], + N: [ + "'##::: ##:", + ' ###:: ##:', + ' ####: ##:', + ' ## ## ##:', + ' ##. ####:', + ' ##:. ###:', + ' ##::. ##:', + '..::::..::', + ], + O: [ + ":'#######::", + "'##.... ##:", + ' ##:::: ##:', + ' ##:::: ##:', + ' ##:::: ##:', + ' ##:::: ##:', + '. #######::', + ':.......:::', + ], + P: [ + "'########::", + ' ##.... ##:', + ' ##:::: ##:', + ' ########::', + ' ##.....:::', + ' ##::::::::', + ' ##::::::::', + '..:::::::::', + ], + Q: [ + ":'#######::", + "'##.... ##:", + ' ##:::: ##:', + ' ##:::: ##:', + " ##:'## ##:", + ' ##:.. ##::', + ': ##### ##:', + ':.....:..::', + ], + R: [ + "'########::", + ' ##.... ##:', + ' ##:::: ##:', + ' ########::', + ' ##.. ##:::', + ' ##::. ##::', + ' ##:::. ##:', + '..:::::..::', + ], + S: [ + ":'######::", + "'##... ##:", + ' ##:::..::', + '. ######::', + ':..... ##:', + "'##::: ##:", + '. ######::', + ':......:::', + ], + T: [ + "'########:", + '... ##..::', + '::: ##::::', + '::: ##::::', + '::: ##::::', + '::: ##::::', + '::: ##::::', + ':::..:::::', + ], + U: [ + "'##::::'##:", + ' ##:::: ##:', + ' ##:::: ##:', + ' ##:::: ##:', + ' ##:::: ##:', + ' ##:::: ##:', + '. #######::', + ':.......:::', + ], + V: [ + "'##::::'##:", + ' ##:::: ##:', + ' ##:::: ##:', + ' ##:::: ##:', + '. ##:: ##::', + ':. ## ##:::', + '::. ###::::', + ':::...:::::', + ], + W: [ + "'##:::::'##:", + " ##:'##: ##:", + ' ##: ##: ##:', + ' ##: ##: ##:', + ' ##: ##: ##:', + ' ##: ##: ##:', + '. ###. ###::', + ':...::...:::', + ], + X: [ + "'##::::'##:", + ". ##::'##::", + ":. ##'##:::", + '::. ###::::', + ':: ## ##:::', + ': ##:. ##::', + ' ##:::. ##:', + '..:::::..::', + ], + Y: [ + "'##:::'##:", + ". ##:'##::", + ':. ####:::', + '::. ##::::', + '::: ##::::', + '::: ##::::', + '::: ##::::', + ':::..:::::', + ], + Z: [ + "'########:", + '..... ##::', + ':::: ##:::', + '::: ##::::', + ':: ##:::::', + ': ##::::::', + ' ########:', + '........::', + ], + ' ': [':::', ':::', ':::', ':::', ':::', ':::', ':::', ':::'], + }, + }, + isometric3: { + height: 8, + chars: { + 0: [ + ' ____ ', + ' F _ ] ', + ' J |/ | L ', + ' | | /| | ', + ' F /_J J ', + ' J\\______/F', + ' J______F ', + ' ', + ], + 1: [' __ ', ' / J ', ' LFJ ', ' J L', ' J L', ' J__L', ' |__|', ' '], + 2: [ + ' ____ ', + ' / _ `. ', + " J_/-7 .' ", + " `-:'.'.' ", + " .' ;_J__ ", + ' J________L', + ' |________|', + ' ', + ], + 3: [ + ' ____ ', + ' F___ J ', + ' `-__| L ', + ' |__ ( ', + ' .-____] J ', + ' J\\______/F', + ' J______F ', + ' ', + ], + 4: [ + ' _ _ ', + ' FJ L] ', + ' J |__| L ', + ' |____ | ', + ' L____J J ', + ' J__L', + ' J__|', + ' ', + ], + 5: [ + ' ____ ', + ' F ___L ', + ' J |___| ', + ' |____ \\ ', + ' .--___) \\', + ' J\\______J', + ' J______F', + ' ', + ], + 6: [ + ' ____ ', + ' F ___] ', + ' J `--_] ', + ' | ,--. L ', + ' F L__J | ', + ' J\\______/L', + ' J______F ', + ' ', + ], + 7: [' ____ ', ' F___ ]', ' `--7 /', ' / //', ' J L ', ' J__L ', ' |__| ', ' '], + 8: [ + ' ____ ', + ' F __ J ', + " J `--' L ", + ' / ,--. \\ ', + ' F L__J J ', + ' J\\______/L', + ' J______F ', + ' ', + ], + 9: [ + ' ____ ', + ' F __ J ', + " J '--' L ", + ' J`---. | ', + ' `---J J ', + ' J__L', + ' J__|', + ' ', + ], + A: [ + ' _ ', + ' /.\\ ', + ' //_\\\\ ', + ' / ___ \\ ', + ' / L___J \\ ', + ' J__L J__L', + ' |__L J__|', + ' ', + ], + B: [ + ' ___ ', + ' F _ ", ', + " J `-'(| ", + ' | ,--.\\ ', + ' F L__J \\', + ' J_______J', + ' |_______F', + ' ', + ], + C: [ + ' ___ ', + ' ,"___". ', + ' FJ---L] ', + ' J | LJ ', + ' | \\___--.', + ' J\\_____/F', + ' J_____F ', + ' ', + ], + D: [ + ' ___ ', + ' F __". ', + ' J |--\\ L', + ' | | J |', + ' F L__J |', + ' J______/F', + ' |______F ', + ' ', + ], + E: [ + ' ____ ', + ' F ___J ', + ' J |___: ', + ' | _____| ', + ' F L____: ', + ' J________L', + ' |________|', + ' ', + ], + F: [ + ' ____ ', + ' F ___J ', + ' J |___: ', + ' | _____|', + ' F |____J', + ' J__F ', + ' |__| ', + ' ', + ], + G: [ + ' ___ ', + ' ,"___". ', + ' FJ---L] ', + ' J | [""L', + ' | \\___] |', + ' J\\_____/F', + ' J_____F ', + ' ', + ], + H: [ + ' _ _ ', + ' FJ L] ', + ' J |__| L ', + ' | __ | ', + ' F L__J J ', + ' J__L J__L', + ' |__L J__|', + ' ', + ], + I: [' __ ', ' FJ ', ' J L ', ' | | ', ' F J ', ' J____L', ' |____|', ' '], + J: [ + ' _ ', + ' L] ', + ' | L', + ' | |', + '.--__J J', + 'J\\_____/', + ' J_____/', + ' ', + ], + K: [ + ' _ _ ', + ' FJ / ; ', + ' J |/ (| ', + ' | L ', + ' F L:\\ L ', + 'J__L \\\\__L', + '|__L \\L_|', + ' ', + ], + L: [ + ' _ ', + ' FJ ', + ' J | ', + ' | | ', + ' F L_____ ', + ' J________L', + ' |________|', + ' ', + ], + M: [ + ' __ __ ', + ' F \\/ ] ', + ' J |\\__/| L ', + " | |`--'| | ", + ' F L J J ', + ' J__L J__L', + ' |__L J__|', + ' ', + ], + N: [ + ' _ _ ', + ' F L L] ', + ' J \\| L ', + ' | |\\ | ', + ' F L\\\\ J ', + ' J__L \\\\__L', + ' |__L J__|', + ' ', + ], + O: [ + ' ____ ', + ' F __ ] ', + ' J |--| L ', + ' | | | | ', + ' F L__J J ', + ' J\\______/F', + ' J______F ', + ' ', + ], + P: [ + ' ___ ', + ' F _ ",', + " J `-' |", + ' | __/F', + ' F |__/ ', + ' J__| ', + ' |__L ', + ' ', + ], + Q: [ + ' ____ ', + ' F __ ] ', + ' J |--| L ', + ' | | _| | ', + ' F L_F J ', + ' J\\_____ \\', + ' J_____\\J]', + ' \\J ', + ], + R: [ + ' ___ ', + ' F _ ", ', + " J `-'(| ", + ' | _ L ', + ' F |_\\ L ', + ' J__| \\\\__L', + ' |__| J__|', + ' ', + ], + S: [ + ' ___ ', + ' F __". ', + ' J (___| ', + ' J\\___ \\ ', + ' .--___) \\', + ' J\\______J', + ' J______F', + ' ', + ], + T: [' ____ ', ' /_ _\\', ' [J L]', ' | | ', ' F J ', ' J____L', ' |____|', ' '], + U: [ + ' _ _ ', + ' FJ L] ', + ' J | | L ', + ' | | | | ', + ' F L__J J ', + ' J\\______/F', + ' J______F ', + ' ', + ], + V: [ + ' _ _ ', + ' FJ L] ', + ' J | | L', + ' J J F L', + ' J\\ \\/ /F', + ' \\\\__// ', + ' \\__/ ', + ' ', + ], + W: [ + ' _ _ ', + ' F L J J ', + ' J J .. L L ', + ' | |/ \\| | ', + ' F /\\ J ', + ' J___//\\\\___L', + ' |___/ \\___|', + ' ', + ], + X: [ + ' _ _ ', + ' FJ LJ ', + ' J \\/ F ', + ' / \\ ', + ' / /\\ \\ ', + ' J__//\\\\__L', + ' |__/ \\__|', + ' ', + ], + Y: [' _ _ ', ' FJ LJ', ' J \\/ F', ' J\\ /L', ' F J ', ' |____|', ' |____|', ' '], + Z: [ + ' ____ ', + " [__ '. ", + " `--7 .' ", + " .'.'.' ", + " .' (_(__ ", + ' J________L', + ' |________|', + ' ', + ], + ' ': [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], + }, + }, + isometric4: { + height: 7, + chars: { + 0: [ + ' ', + ' @@@@@@ ', + '@@! @@@ ', + '@!@ !@! ', + '!!: !!! ', + ' : : :: ', + ' ', + ], + 1: [' ', ' @@@ ', '@@@@ ', ' !@! ', ' !!! ', ' :: ', ' '], + 2: [ + ' ', + ' @@@@@@ ', + '@@ @@@ ', + ' .!!@! ', + ' !!: ', + ':.:: ::: ', + ' ', + ], + 3: [' ', '@@@@@@ ', ' @@! ', ' @!!!: ', ' !!: ', '::: :: ', ' '], + 4: [ + ' ', + '@@@ @@@ ', + '@@@ @@@ ', + '@!@!@!@! ', + ' !!! ', + ' : : ', + ' ', + ], + 5: [' ', '@@@@@@@ ', '!@@ ', '!!@@!! ', ' !:! ', ':: : : ', ' '], + 6: [ + ' ', + ' @@@@@ ', + '@@!@ ', + '@!@!@!@ ', + '!!: !!! ', + ' : : :: ', + ' ', + ], + 7: [ + ' ', + '@@@@@@@@ ', + ' @@! ', + ' @!! ', + ' .!!: ', + ': : ', + ' ', + ], + 8: [ + ' ', + ' @@@@@@ ', + '@@! @@@ ', + ' !@!@!@ ', + '!!: !!! ', + ' :.:: : ', + ' ', + ], + 9: [ + ' ', + ' @@@@@@ ', + '@@! @@@ ', + ' @!@@!@! ', + ' !!: ', + ' : ::: ', + ' ', + ], + A: [ + ' ', + ' @@@@@@ ', + '@@! @@@ ', + '@!@!@!@! ', + '!!: !!! ', + ' : : : ', + ' ', + ], + B: [ + ' ', + '@@@@@@@ ', + '@@! @@@ ', + '@!@!@!@ ', + '!!: !!! ', + ':: : :: ', + ' ', + ], + C: [ + ' ', + ' @@@@@@@ ', + '!@@ ', + '!@! ', + ':!! ', + ' :: :: : ', + ' ', + ], + D: [ + ' ', + '@@@@@@@ ', + '@@! @@@ ', + '@!@ !@! ', + '!!: !!! ', + ':: : : ', + ' ', + ], + E: [ + ' ', + '@@@@@@@@ ', + '@@! ', + '@!!!:! ', + '!!: ', + ': :: :: ', + ' ', + ], + F: [ + ' ', + '@@@@@@@@ ', + '@@! ', + '@!!!:! ', + '!!: ', + ' : ', + ' ', + ], + G: [ + ' ', + ' @@@@@@@ ', + '!@@ ', + '!@! @!@!@ ', + ':!! !!: ', + ' :: :: : ', + ' ', + ], + H: [ + ' ', + '@@@ @@@ ', + '@@! @@@ ', + '@!@!@!@! ', + '!!: !!! ', + ' : : : ', + ' ', + ], + I: [' ', '@@@ ', '@@! ', '!!@ ', '!!: ', ': ', ' '], + J: [' ', ' @@@ ', ' @@! ', ' !!@ ', '. .!! ', '::.:: ', ' '], + K: [ + ' ', + '@@@ @@@ ', + '@@! !@@ ', + '@!@@!@! ', + '!!: :!! ', + ' : ::: ', + ' ', + ], + L: [ + ' ', + '@@@ ', + '@@! ', + '@!! ', + '!!: ', + ': ::.: : ', + ' ', + ], + M: [ + ' ', + '@@@@@@@@@@ ', + '@@! @@! @@! ', + '@!! !!@ @!@ ', + '!!: !!: ', + ' : : ', + ' ', + ], + N: [ + ' ', + '@@@ @@@ ', + '@@!@!@@@ ', + '@!@@!!@! ', + '!!: !!! ', + ':: : ', + ' ', + ], + O: [ + ' ', + ' @@@@@@ ', + '@@! @@@ ', + '@!@ !@! ', + '!!: !!! ', + ' : :. : ', + ' ', + ], + P: [ + ' ', + '@@@@@@@ ', + '@@! @@@ ', + '@!@@!@! ', + '!!: ', + ' : ', + ' ', + ], + Q: [ + ' ', + ' @@@@@@ ', + '@@! @@@ ', + '@!@ !@! ', + '!!:!!:!: ', + ' : :. ::: ', + ' ', + ], + R: [ + ' ', + '@@@@@@@ ', + '@@! @@@ ', + '@!@!!@! ', + '!!: :!! ', + ' : : : ', + ' ', + ], + S: [' ', ' @@@@@@ ', '!@@ ', ' !@@!! ', ' !:! ', '::.: : ', ' '], + T: [' ', '@@@@@@@ ', ' @!! ', ' @!! ', ' !!: ', ' : ', ' '], + U: [ + ' ', + '@@@ @@@ ', + '@@! @@@ ', + '@!@ !@! ', + '!!: !!! ', + ' :.:: : ', + ' ', + ], + V: [ + ' ', + '@@@ @@@ ', + '@@! @@@ ', + '@!@ !@! ', + ' !: .:! ', + ' :: ', + ' ', + ], + W: [ + ' ', + '@@@ @@@ @@@ ', + '@@! @@! @@! ', + '@!! !!@ @!@ ', + ' !: !!: !! ', + ' ::.: ::: ', + ' ', + ], + X: [ + ' ', + '@@@ @@@ ', + '@@! !@@ ', + ' !@@!@! ', + ' !: :!! ', + '::: ::: ', + ' ', + ], + Y: [' ', '@@@ @@@ ', '@@! !@@ ', ' !@!@! ', ' !!: ', ' .: ', ' '], + Z: [ + ' ', + '@@@@@@@@ ', + ' @@! ', + ' @!! ', + ' !!: ', + ':.::.: : ', + ' ', + ], + ' ': [' ', ' ', ' ', ' ', ' ', ' ', ' '], + }, + }, + 'three-d': { + height: 8, + chars: { + 0: [' **** ', ' *///**', '/* */*', '/* * /*', '/** /*', '/* /*', '/ **** ', ' //// '], + 1: [' ** ', ' *** ', '//** ', ' /** ', ' /** ', ' /** ', ' ****', '//// '], + 2: [' **** ', ' */// *', '/ /*', ' *** ', ' *// ', ' * ', '/******', '////// '], + 3: [' **** ', ' */// *', '/ /*', ' *** ', ' /// *', ' * /*', '/ **** ', ' //// '], + 4: [' ** ', ' */* ', ' * /* ', ' ******', '/////* ', ' /* ', ' /* ', ' / '], + 5: [' ******', '/*//// ', '/***** ', '///// *', ' /*', ' * /*', '/ **** ', ' //// '], + 6: [' **** ', ' */// *', '/* / ', '/***** ', '/*/// *', '/* /*', '/ **** ', ' //// '], + 7: [' ******', '//////*', ' /*', ' * ', ' * ', ' * ', ' * ', ' / '], + 8: [' **** ', ' */// *', '/* /*', '/ **** ', ' */// *', '/* /*', '/ **** ', ' //// '], + 9: [' **** ', ' */// *', '/* /*', '/ **** ', ' ///* ', ' * ', ' * ', ' / '], + A: [ + ' ** ', + ' **** ', + ' **//** ', + ' ** //** ', + ' **********', + '/**//////**', + '/** /**', + '// // ', + ], + B: [ + ' ****** ', + '/*////** ', + '/* /** ', + '/****** ', + '/*//// **', + '/* /**', + '/******* ', + '/////// ', + ], + C: [ + ' ****** ', + ' **////**', + ' ** // ', + '/** ', + '/** ', + '//** **', + ' //****** ', + ' ////// ', + ], + D: [ + ' ******* ', + '/**////** ', + '/** /**', + '/** /**', + '/** /**', + '/** ** ', + '/******* ', + '/////// ', + ], + E: [ + ' ********', + '/**///// ', + '/** ', + '/******* ', + '/**//// ', + '/** ', + '/********', + '//////// ', + ], + F: [ + ' ********', + '/**///// ', + '/** ', + '/******* ', + '/**//// ', + '/** ', + '/** ', + '// ', + ], + G: [ + ' ******** ', + ' **//////**', + ' ** // ', + '/** ', + '/** *****', + '//** ////**', + ' //******** ', + ' //////// ', + ], + H: [ + ' ** **', + '/** /**', + '/** /**', + '/**********', + '/**//////**', + '/** /**', + '/** /**', + '// // ', + ], + I: [' **', '/**', '/**', '/**', '/**', '/**', '/**', '// '], + J: [ + ' **', + ' /**', + ' /**', + ' /**', + ' /**', + ' ** /**', + '//***** ', + ' ///// ', + ], + K: [ + ' ** **', + '/** ** ', + '/** ** ', + '/**** ', + '/**/** ', + '/**//** ', + '/** //**', + '// // ', + ], + L: [ + ' ** ', + '/** ', + '/** ', + '/** ', + '/** ', + '/** ', + '/********', + '//////// ', + ], + M: [ + ' **** ****', + '/**/** **/**', + '/**//** ** /**', + '/** //*** /**', + '/** //* /**', + '/** / /**', + '/** /**', + '// // ', + ], + N: [ + ' **** **', + '/**/** /**', + '/**//** /**', + '/** //** /**', + '/** //**/**', + '/** //****', + '/** //***', + '// /// ', + ], + O: [ + ' ******* ', + ' **/////** ', + ' ** //**', + '/** /**', + '/** /**', + '//** ** ', + ' //******* ', + ' /////// ', + ], + P: [ + ' ******* ', + '/**////**', + '/** /**', + '/******* ', + '/**//// ', + '/** ', + '/** ', + '// ', + ], + Q: [ + ' ******* ', + ' **/////** ', + ' ** //** ', + '/** /** ', + '/** **/** ', + '//** // ** ', + ' //******* **', + ' /////// // ', + ], + R: [ + ' ******* ', + '/**////** ', + '/** /** ', + '/******* ', + '/**///** ', + '/** //** ', + '/** //**', + '// // ', + ], + S: [ + ' ********', + ' **////// ', + '/** ', + '/*********', + '////////**', + ' /**', + ' ******** ', + '//////// ', + ], + T: [ + ' **********', + '/////**/// ', + ' /** ', + ' /** ', + ' /** ', + ' /** ', + ' /** ', + ' // ', + ], + U: [ + ' ** **', + '/** /**', + '/** /**', + '/** /**', + '/** /**', + '/** /**', + '//******* ', + ' /////// ', + ], + V: [ + ' ** **', + '/** /**', + '/** /**', + '//** ** ', + ' //** ** ', + ' //**** ', + ' //** ', + ' // ', + ], + W: [ + ' ** **', + '/** /**', + '/** * /**', + '/** *** /**', + '/** **/**/**', + '/**** //****', + '/**/ ///**', + '// // ', + ], + X: [ + ' ** **', + '//** ** ', + ' //** ** ', + ' //*** ', + ' **/** ', + ' ** //** ', + ' ** //**', + '// // ', + ], + Y: [ + ' ** **', + '//** ** ', + ' //**** ', + ' //** ', + ' /** ', + ' /** ', + ' /** ', + ' // ', + ], + Z: [ + ' ********', + '//////** ', + ' ** ', + ' ** ', + ' ** ', + ' ** ', + ' ********', + '//////// ', + ], + ' ': [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], + }, + }, + 'three-x-five': { + height: 6, + chars: { + 0: [' ', '### ', '# # ', '# # ', '# # ', '### '], + 1: [' ', ' # ', '## ', ' # ', ' # ', '### '], + 2: [' ', '### ', ' # ', '### ', '# ', '### '], + 3: [' ', '### ', ' # ', ' ## ', ' # ', '### '], + 4: [' ', '# # ', '# # ', '### ', ' # ', ' # '], + 5: [' ', '### ', '# ', '### ', ' # ', '### '], + 6: [' ', '### ', '# ', '### ', '# # ', '### '], + 7: [' ', '### ', ' # ', ' # ', ' # ', ' # '], + 8: [' ', '### ', '# # ', '### ', '# # ', '### '], + 9: [' ', '### ', '# # ', '### ', ' # ', '### '], + A: [' ', ' # ', '# # ', '### ', '# # ', '# # '], + B: [' ', '## ', '# # ', '## ', '# # ', '## '], + C: [' ', ' ## ', '# ', '# ', '# ', ' ## '], + D: [' ', '## ', '# # ', '# # ', '# # ', '## '], + E: [' ', '### ', '# ', '## ', '# ', '### '], + F: [' ', '### ', '# ', '## ', '# ', '# '], + G: [' ', ' ## ', '# ', '# # ', '# # ', ' ## '], + H: [' ', '# # ', '# # ', '### ', '# # ', '# # '], + I: [' ', '### ', ' # ', ' # ', ' # ', '### '], + J: [' ', ' ## ', ' # ', ' # ', '# # ', ' # '], + K: [' ', '# # ', '# # ', '## ', '# # ', '# # '], + L: [' ', '# ', '# ', '# ', '# ', '### '], + M: [' ', '# # ', '### ', '### ', '# # ', '# # '], + N: [' ', '### ', '# # ', '# # ', '# # ', '# # '], + O: [' ', ' # ', '# # ', '# # ', '# # ', ' # '], + P: [' ', '## ', '# # ', '## ', '# ', '# '], + Q: [' ', ' # ', '# # ', '# # ', ' ## ', ' # '], + R: [' ', '## ', '# # ', '## ', '# # ', '# # '], + S: [' ', ' ## ', '# ', ' # ', ' # ', '## '], + T: [' ', '### ', ' # ', ' # ', ' # ', ' # '], + U: [' ', '# # ', '# # ', '# # ', '# # ', '### '], + V: [' ', '# # ', '# # ', '# # ', '# # ', ' # '], + W: [' ', '# # ', '# # ', '### ', '### ', '# # '], + X: [' ', '# # ', '# # ', ' # ', '# # ', '# # '], + Y: [' ', '# # ', '# # ', ' # ', ' # ', ' # '], + Z: [' ', '### ', ' # ', ' # ', '# ', '### '], + ' ': [' ', ' ', ' ', ' ', ' ', ' '], + }, + }, + 'ansi-shadow': { + height: 7, + chars: { + 0: [ + ' ██████╗ ', + '██╔═████╗', + '██║██╔██║', + '████╔╝██║', + '╚██████╔╝', + ' ╚═════╝ ', + ' ', + ], + 1: [' ██╗', '███║', '╚██║', ' ██║', ' ██║', ' ╚═╝', ' '], + 2: ['██████╗ ', '╚════██╗', ' █████╔╝', '██╔═══╝ ', '███████╗', '╚══════╝', ' '], + 3: ['██████╗ ', '╚════██╗', ' █████╔╝', ' ╚═══██╗', '██████╔╝', '╚═════╝ ', ' '], + 4: ['██╗ ██╗', '██║ ██║', '███████║', '╚════██║', ' ██║', ' ╚═╝', ' '], + 5: ['███████╗', '██╔════╝', '███████╗', '╚════██║', '███████║', '╚══════╝', ' '], + 6: [ + ' ██████╗ ', + '██╔════╝ ', + '███████╗ ', + '██╔═══██╗', + '╚██████╔╝', + ' ╚═════╝ ', + ' ', + ], + 7: ['███████╗', '╚════██║', ' ██╔╝', ' ██╔╝ ', ' ██║ ', ' ╚═╝ ', ' '], + 8: [' █████╗ ', '██╔══██╗', '╚█████╔╝', '██╔══██╗', '╚█████╔╝', ' ╚════╝ ', ' '], + 9: [' █████╗ ', '██╔══██╗', '╚██████║', ' ╚═══██║', ' █████╔╝', ' ╚════╝ ', ' '], + A: [' █████╗ ', '██╔══██╗', '███████║', '██╔══██║', '██║ ██║', '╚═╝ ╚═╝', ' '], + B: ['██████╗ ', '██╔══██╗', '██████╔╝', '██╔══██╗', '██████╔╝', '╚═════╝ ', ' '], + C: [' ██████╗', '██╔════╝', '██║ ', '██║ ', '╚██████╗', ' ╚═════╝', ' '], + D: ['██████╗ ', '██╔══██╗', '██║ ██║', '██║ ██║', '██████╔╝', '╚═════╝ ', ' '], + E: ['███████╗', '██╔════╝', '█████╗ ', '██╔══╝ ', '███████╗', '╚══════╝', ' '], + F: ['███████╗', '██╔════╝', '█████╗ ', '██╔══╝ ', '██║ ', '╚═╝ ', ' '], + G: [ + ' ██████╗ ', + '██╔════╝ ', + '██║ ███╗', + '██║ ██║', + '╚██████╔╝', + ' ╚═════╝ ', + ' ', + ], + H: ['██╗ ██╗', '██║ ██║', '███████║', '██╔══██║', '██║ ██║', '╚═╝ ╚═╝', ' '], + I: ['██╗', '██║', '██║', '██║', '██║', '╚═╝', ' '], + J: [' ██╗', ' ██║', ' ██║', '██ ██║', '╚█████╔╝', ' ╚════╝ ', ' '], + K: ['██╗ ██╗', '██║ ██╔╝', '█████╔╝ ', '██╔═██╗ ', '██║ ██╗', '╚═╝ ╚═╝', ' '], + L: ['██╗ ', '██║ ', '██║ ', '██║ ', '███████╗', '╚══════╝', ' '], + M: [ + '███╗ ███╗', + '████╗ ████║', + '██╔████╔██║', + '██║╚██╔╝██║', + '██║ ╚═╝ ██║', + '╚═╝ ╚═╝', + ' ', + ], + N: [ + '███╗ ██╗', + '████╗ ██║', + '██╔██╗ ██║', + '██║╚██╗██║', + '██║ ╚████║', + '╚═╝ ╚═══╝', + ' ', + ], + O: [ + ' ██████╗ ', + '██╔═══██╗', + '██║ ██║', + '██║ ██║', + '╚██████╔╝', + ' ╚═════╝ ', + ' ', + ], + P: ['██████╗ ', '██╔══██╗', '██████╔╝', '██╔═══╝ ', '██║ ', '╚═╝ ', ' '], + Q: [ + ' ██████╗ ', + '██╔═══██╗', + '██║ ██║', + '██║▄▄ ██║', + '╚██████╔╝', + ' ╚══▀▀═╝ ', + ' ', + ], + R: ['██████╗ ', '██╔══██╗', '██████╔╝', '██╔══██╗', '██║ ██║', '╚═╝ ╚═╝', ' '], + S: ['███████╗', '██╔════╝', '███████╗', '╚════██║', '███████║', '╚══════╝', ' '], + T: [ + '████████╗', + '╚══██╔══╝', + ' ██║ ', + ' ██║ ', + ' ██║ ', + ' ╚═╝ ', + ' ', + ], + U: [ + '██╗ ██╗', + '██║ ██║', + '██║ ██║', + '██║ ██║', + '╚██████╔╝', + ' ╚═════╝ ', + ' ', + ], + V: [ + '██╗ ██╗', + '██║ ██║', + '██║ ██║', + '╚██╗ ██╔╝', + ' ╚████╔╝ ', + ' ╚═══╝ ', + ' ', + ], + W: [ + '██╗ ██╗', + '██║ ██║', + '██║ █╗ ██║', + '██║███╗██║', + '╚███╔███╔╝', + ' ╚══╝╚══╝ ', + ' ', + ], + X: ['██╗ ██╗', '╚██╗██╔╝', ' ╚███╔╝ ', ' ██╔██╗ ', '██╔╝ ██╗', '╚═╝ ╚═╝', ' '], + Y: [ + '██╗ ██╗', + '╚██╗ ██╔╝', + ' ╚████╔╝ ', + ' ╚██╔╝ ', + ' ██║ ', + ' ╚═╝ ', + ' ', + ], + Z: ['███████╗', '╚══███╔╝', ' ███╔╝ ', ' ███╔╝ ', '███████╗', '╚══════╝', ' '], + ' ': [' ', ' ', ' ', ' ', ' ', ' ', ' '], + }, + }, + 'calvin-s': { + height: 7, + chars: { + 0: [ + ' _______ ', + '| _ |', + '| | | |', + '| | | |', + '| |_| |', + '| |', + '|_______|', + ], + 1: [' ____ ', '| | ', ' | | ', ' | | ', ' | | ', ' | | ', ' |___| '], + 2: [ + ' _______ ', + '| |', + '|____ |', + ' ____| |', + '| ______|', + '| |_____ ', + '|_______|', + ], + 3: [ + ' _______ ', + '| |', + '|___ |', + ' ___| |', + '|___ |', + ' ___| |', + '|_______|', + ], + 4: [ + ' _ ___ ', + '| | | |', + '| |_| |', + '| |', + '|___ |', + ' | |', + ' |___|', + ], + 5: [ + ' _______ ', + '| |', + '| ____|', + '| |____ ', + '|_____ |', + ' _____| |', + '|_______|', + ], + 6: [ + ' ___ ', + '| | ', + '| |___ ', + '| _ |', + '| | | |', + '| |_| |', + '|_______|', + ], + 7: [ + ' _______ ', + '| |', + '|___ |', + ' | |', + ' | |', + ' | |', + ' |___|', + ], + 8: [ + ' _____ ', + ' | _ | ', + ' | |_| | ', + '| _ |', + '| | | |', + '| |_| |', + '|_______|', + ], + 9: [ + ' _______ ', + '| _ |', + '| | | |', + '| |_| |', + '|___ |', + ' | |', + ' |___|', + ], + A: [ + ' _______ ', + '| _ |', + '| |_| |', + '| |', + '| |', + '| _ |', + '|__| |__|', + ], + B: [ + ' _______ ', + '| _ |', + '| |_| |', + '| |', + '| _ | ', + '| |_| |', + '|_______|', + ], + C: [ + ' _______ ', + '| |', + '| |', + '| |', + '| _|', + '| |_ ', + '|_______|', + ], + D: [ + ' ______ ', + '| | ', + '| _ |', + '| | | |', + '| |_| |', + '| |', + '|______| ', + ], + E: [ + ' _______ ', + '| |', + '| ___|', + '| |___ ', + '| ___|', + '| |___ ', + '|_______|', + ], + F: [ + ' _______ ', + '| |', + '| ___|', + '| |___ ', + '| ___|', + '| | ', + '|___| ', + ], + G: [ + ' _______ ', + '| |', + '| ___|', + '| | __ ', + '| || |', + '| |_| |', + '|_______|', + ], + H: [ + ' __ __ ', + '| | | |', + '| |_| |', + '| |', + '| |', + '| _ |', + '|__| |__|', + ], + I: [' ___ ', '| | ', '| | ', '| | ', '| | ', '| | ', '|___| '], + J: [ + ' ___ ', + ' | |', + ' | |', + ' | |', + ' ___| |', + '| |', + '|_______|', + ], + K: [ + ' ___ _ ', + '| | | |', + '| |_| |', + '| _|', + '| |_ ', + '| _ |', + '|___| |_|', + ], + L: [ + ' ___ ', + '| | ', + '| | ', + '| | ', + '| |___ ', + '| |', + '|_______|', + ], + M: [ + ' __ __ ', + '| |_| |', + '| |', + '| |', + '| |', + '| ||_|| |', + '|_| |_|', + ], + N: [ + ' __ _ ', + '| | | |', + '| |_| |', + '| |', + '| _ |', + '| | | |', + '|_| |__|', + ], + O: [ + ' _______ ', + '| |', + '| _ |', + '| | | |', + '| |_| |', + '| |', + '|_______|', + ], + P: [ + ' _______ ', + '| |', + '| _ |', + '| |_| |', + '| ___|', + '| | ', + '|___| ', + ], + Q: [ + ' _______ ', + '| |', + '| _ |', + '| | | |', + '| |_| |', + '| | ', + '|____||_|', + ], + R: [ + ' ______ ', + '| _ | ', + '| | || ', + '| |_||_ ', + '| __ |', + '| | | |', + '|___| |_|', + ], + S: [ + ' _______ ', + '| |', + '| _____|', + '| |_____ ', + '|_____ |', + ' _____| |', + '|_______|', + ], + T: [ + ' _______ ', + '| |', + '|_ _|', + ' | | ', + ' | | ', + ' | | ', + ' |___| ', + ], + U: [ + ' __ __ ', + '| | | |', + '| | | |', + '| |_| |', + '| |', + '| |', + '|_______|', + ], + V: [ + ' __ __ ', + '| | | |', + '| |_| |', + '| |', + '| |', + ' | | ', + ' |___| ', + ], + W: [ + ' _ _ ', + '| | _ | |', + '| || || |', + '| |', + '| |', + '| _ |', + '|__| |__|', + ], + X: [ + ' __ __ ', + '| |_| |', + '| |', + '| |', + ' | | ', + '| _ |', + '|__| |__|', + ], + Y: [ + ' __ __ ', + '| | | |', + '| |_| |', + '| |', + '|_ _|', + ' | | ', + ' |___| ', + ], + Z: [ + ' _______ ', + '| |', + '|____ |', + ' ____| |', + '| ______|', + '| |_____ ', + '|_______|', + ], + ' ': [' ', ' ', ' ', ' ', ' ', ' ', ' '], + }, + }, +}; + +module.exports = { HAND_CODED_FONTS }; diff --git a/tests/main/__snapshots__/ascii-art.fonts.test.js.snap b/tests/main/__snapshots__/ascii-art.fonts.test.js.snap new file mode 100644 index 0000000..a75c31d --- /dev/null +++ b/tests/main/__snapshots__/ascii-art.fonts.test.js.snap @@ -0,0 +1,167 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`AsciiArt.fonts HELLO snapshot per font ansi-shadow 1`] = ` +"██╗ ██╗███████╗██╗ ██╗ ██████╗ +██║ ██║██╔════╝██║ ██║ ██╔═══██╗ +███████║█████╗ ██║ ██║ ██║ ██║ +██╔══██║██╔══╝ ██║ ██║ ██║ ██║ +██║ ██║███████╗███████╗███████╗╚██████╔╝ +╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝ ╚═════╝ + " +`; + +exports[`AsciiArt.fonts HELLO snapshot per font banner 1`] = ` +" ## ## ####### ## ## ##### + ## ## ## ## ## ## ## + ## ## ## ## ## ## ## + ####### ##### ## ## ## ## + ## ## ## ## ## ## ## + ## ## ## ## ## ## ## + ## ## ####### ####### ####### ##### " +`; + +exports[`AsciiArt.fonts HELLO snapshot per font big 1`] = ` +" _ _ ______ _ _ ____ + | | | | | ____| | | | | / __ \\ + | |__| | | |__ | | | | | | | | + | __ | | __| | | | | | | | | + | | | | | |____ | |____ | |____ | |__| | + |_| |_| |______| |______| |______| \\____/ + + " +`; + +exports[`AsciiArt.fonts HELLO snapshot per font block 1`] = ` +"██╗ ██╗███████╗██╗ ██╗ ██████╗ +██║ ██║██╔════╝██║ ██║ ██╔══██╗ +███████║█████╗ ██║ ██║ ██║ ██║ +██╔══██║██╔══╝ ██║ ██║ ██║ ██║ +██║ ██║███████╗███████╗███████╗╚██████╔╝ +╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝ ╚═════╝ " +`; + +exports[`AsciiArt.fonts HELLO snapshot per font bubble 1`] = ` +" Ⓗ Ⓔ Ⓛ Ⓛ Ⓞ + Ⓗ Ⓗ Ⓔ Ⓔ Ⓛ Ⓛ Ⓛ Ⓛ Ⓞ Ⓞ +ⒽⒽⒽⒽⒽⒺⒺⒺⒺⒺⓁⓁⓁⓁⓁⓁⓁⓁⓁⓁⓄⓄⓄⓄⓄ +Ⓗ ⒽⒺ ⒺⓁ ⓁⓁ ⓁⓄ Ⓞ +Ⓗ ⒽⒺ ⒺⓁ ⓁⓁ ⓁⓄ Ⓞ" +`; + +exports[`AsciiArt.fonts HELLO snapshot per font calvin-s 1`] = ` +" __ __ _______ ___ ___ _______ +| | | || || | | | | | +| |_| || ___|| | | | | _ | +| || |___ | | | | | | | | +| || ___|| |___ | |___ | |_| | +| _ || |___ | || || | +|__| |__||_______||_______||_______||_______|" +`; + +exports[`AsciiArt.fonts HELLO snapshot per font digital 1`] = ` +"▐ ▐ ▐▌▌▌▌ ▐ ▐ ▐▌▌▌▐ +▐ ▐ ▐ ▐ ▐ ▐ ▐ +▐▌▌▌▐ ▐▌▌▌ ▐ ▐ ▐ ▐ +▐ ▐ ▐ ▐ ▐ ▐ ▐ +▐ ▐ ▐▌▌▌▌ ▐ ▐ ▐ ▐ +▐ ▐ ▐ ▐▌▌▌▌ ▐▌▌▌▌ ▐▌▌▌▐ + " +`; + +exports[`AsciiArt.fonts HELLO snapshot per font isometric1 1`] = ` +" ___ ___ ___ ___ ___ + /\\__\\ /\\ \\ /\\__\\ /\\__\\ /\\ \\ + /:/__/_ /::\\ \\ /:/ / /:/ / /::\\ \\ + /::\\/\\__\\ /::\\:\\__\\ /:/__/ /:/__/ /:/\\:\\__\\ + \\/\\::/ / \\:\\:\\/ / \\:\\ \\ \\:\\ \\ \\:\\/:/ / + /:/ / \\:\\/ / \\:\\__\\ \\:\\__\\ \\::/ / + \\/__/ \\/__/ \\/__/ \\/__/ \\/__/ " +`; + +exports[`AsciiArt.fonts HELLO snapshot per font isometric2 1`] = ` +"'##::::'##:'########:'##:::::::'##::::::::'#######:: + ##:::: ##: ##.....:: ##::::::: ##:::::::'##.... ##: + ##:::: ##: ##::::::: ##::::::: ##::::::: ##:::: ##: + #########: ######::: ##::::::: ##::::::: ##:::: ##: + ##.... ##: ##...:::: ##::::::: ##::::::: ##:::: ##: + ##:::: ##: ##::::::: ##::::::: ##::::::: ##:::: ##: + ##:::: ##: ########: ########: ########:. #######:: +..:::::..::........::........::........:::.......:::" +`; + +exports[`AsciiArt.fonts HELLO snapshot per font isometric3 1`] = ` +" _ _ ____ _ _ ____ + FJ L] F ___J FJ FJ F __ ] + J |__| L J |___: J | J | J |--| L + | __ | | _____| | | | | | | | | + F L__J J F L____: F L_____ F L_____ F L__J J + J__L J__L J________L J________L J________L J\\______/F + |__L J__| |________| |________| |________| J______F + " +`; + +exports[`AsciiArt.fonts HELLO snapshot per font isometric4 1`] = ` +" +@@@ @@@ @@@@@@@@ @@@ @@@ @@@@@@ +@@! @@@ @@! @@! @@! @@! @@@ +@!@!@!@! @!!!:! @!! @!! @!@ !@! +!!: !!! !!: !!: !!: !!: !!! + : : : : :: :: : ::.: : : ::.: : : :. : + " +`; + +exports[`AsciiArt.fonts HELLO snapshot per font lean 1`] = ` +" + _/ _/ _/_/_/_/ _/ _/ _/_/ + _/ _/ _/ _/ _/ _/ _/ + _/_/_/_/ _/_/_/ _/ _/ _/ _/ + _/ _/ _/ _/ _/ _/ _/ +_/ _/ _/_/_/_/ _/_/_/_/ _/_/_/_/ _/_/ + + " +`; + +exports[`AsciiArt.fonts HELLO snapshot per font slant 1`] = ` +" __ __ ______ __ __ ____ + / / / / / ____/ / / / / / __ \\ + / /_/ / / __/ / / / / / / / / + / __ / / /___ / /___ / /___/ /_/ / +/_/ /_/ /_____/ /_____//_____/\\____/ + " +`; + +exports[`AsciiArt.fonts HELLO snapshot per font small 1`] = ` +" _ _ ___ _ _ ___ + | || | | __| | | | | / _ \\ + | __ | | _| | |__ | |__ | (_) | + |_||_| |___| |____| |____| \\___/ + " +`; + +exports[`AsciiArt.fonts HELLO snapshot per font standard 1`] = ` +"| |_____| | ___ +| || | | / \\ +|___||___ | | | | +| || | | | | +| ||____|____|____\\___/" +`; + +exports[`AsciiArt.fonts HELLO snapshot per font three-d 1`] = ` +" ** ** ******** ** ** ******* +/** /**/**///// /** /** **/////** +/** /**/** /** /** ** //** +/**********/******* /** /** /** /** +/**//////**/**//// /** /** /** /** +/** /**/** /** /** //** ** +/** /**/********/********/******** //******* +// // //////// //////// //////// /////// " +`; + +exports[`AsciiArt.fonts HELLO snapshot per font three-x-five 1`] = ` +" +# # ### # # # +# # # # # # # +### ## # # # # +# # # # # # # +# # ### ### ### # " +`; diff --git a/tests/main/ascii-art.fonts.test.js b/tests/main/ascii-art.fonts.test.js new file mode 100644 index 0000000..623c66d --- /dev/null +++ b/tests/main/ascii-art.fonts.test.js @@ -0,0 +1,80 @@ +/** + * @jest-environment node + * + * Per-font snapshot tests for the 17 hand-coded ASCII art fonts. Snapshots + * are the safety net that catches drift when the font tables are hand-edited. + * Line endings are normalized to \n and trailing whitespace is trimmed so + * editor auto-trim does not produce spurious diffs. + */ +const AsciiArtFonts = require('../../src/main/AsciiArt.fonts'); + +const FONT_IDS = Object.freeze([ + // 5 existing + 'standard', + 'banner', + 'block', + 'bubble', + 'digital', + // 12 new + 'big', + 'small', + 'lean', + 'slant', + 'isometric1', + 'isometric2', + 'isometric3', + 'isometric4', + 'three-d', + 'three-x-five', + 'ansi-shadow', + 'calvin-s', +]); + +const normalize = (s) => s.replace(/\r\n/g, '\n').replace(/[ \t]+\n/g, '\n'); + +describe('AsciiArt.fonts table shape', () => { + test.each(FONT_IDS)('%s has height and chars for A-Z 0-9 and space', (id) => { + const font = AsciiArtFonts.HAND_CODED_FONTS[id]; + expect(font).toBeDefined(); + expect(typeof font.height).toBe('number'); + expect(font.height).toBeGreaterThanOrEqual(4); + expect(font.height).toBeLessThanOrEqual(8); + expect(typeof font.chars).toBe('object'); + for (const ch of 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 '.split('')) { + expect(font.chars[ch]).toBeDefined(); + expect(font.chars[ch]).toHaveLength(font.height); + for (const line of font.chars[ch]) { + expect(typeof line).toBe('string'); + } + } + }); +}); + +describe('AsciiArt.fonts HELLO snapshot per font', () => { + test.each(FONT_IDS)('%s', (id) => { + const font = AsciiArtFonts.HAND_CODED_FONTS[id]; + const lines = Array(font.height).fill(''); + for (const ch of 'HELLO') { + const glyph = font.chars[ch] || font.chars[' ']; + for (let i = 0; i < font.height; i++) lines[i] += glyph[i]; + } + expect(normalize(lines.join('\n'))).toMatchSnapshot(); + }); +}); + +describe('AsciiArt.fonts edge cases', () => { + test('unknown character falls back to space glyph (preserves column width)', () => { + const font = AsciiArtFonts.HAND_CODED_FONTS.standard; + const fallback = font.chars[' ']; + const unknown = font.chars['é']; + expect(unknown).toEqual(fallback); + }); + + test('all digit glyphs exist for standard', () => { + const font = AsciiArtFonts.HAND_CODED_FONTS.standard; + for (const d of '0123456789') { + expect(font.chars[d]).toBeDefined(); + expect(font.chars[d]).toHaveLength(font.height); + } + }); +});