From d79166a5bc7cdbcb0386e4179fec9ae14e23a96d Mon Sep 17 00:00:00 2001 From: Dustin Swan Date: Mon, 23 Feb 2026 21:11:20 -0700 Subject: [PATCH] Font editer coming a long. first font is looking good. some parser changes to accomodate any string as record fields. other stuff --- src/ast.ts | 13 +- src/cg/06-font.cg | 4942 ++++++++++++++++++++++++++++++++++++++ src/cg/06-fontEditor.cg | 36 +- src/cg/06-pixelEditor.cg | 9 +- src/compiler.ts | 8 +- src/parser.ts | 4 +- 6 files changed, 4987 insertions(+), 25 deletions(-) create mode 100644 src/cg/06-font.cg diff --git a/src/ast.ts b/src/ast.ts index cd38eca..46a1fa6 100644 --- a/src/ast.ts +++ b/src/ast.ts @@ -220,7 +220,7 @@ export function prettyPrint(ast: AST, indent = 0): string { const parts = ast.entries.map(entry => entry.kind === 'spread' ? `...${prettyPrint(entry.expr, indent + 1)}` - : `${entry.key} = ${prettyPrint(entry.value, indent + 1)}` + : `${needsQuotes(entry.key) ? `"${entry.key}"` : entry.key} = ${prettyPrint(entry.value, indent + 1)}` ); if (parts.length <= 1) return `{ ${parts.join(', ')} }`; const inner = parts.map(p => `${' '.repeat(indent + 1)}${p}`).join(',\n'); @@ -238,11 +238,12 @@ export function prettyPrint(ast: AST, indent = 0): string { } case 'record-access': - return `${prettyPrint(ast.record, indent)}.${ast.field}`; + const field = needsQuotes(ast.field) ? `"${ast.field}"` : ast.field; + return `${prettyPrint(ast.record, indent)}.${field}`; case 'record-update': { const updates = Object.entries(ast.updates) - .map(([k, v]) => `${k} = ${prettyPrint(v, indent)}`) + .map(([k, v]) => `${needsQuotes(k) ? `"${k}"` : k} = ${prettyPrint(v, indent)}`) .join(', '); return `${prettyPrint(ast.record, indent)}.{ ${updates} }` } @@ -298,7 +299,7 @@ function prettyPrintPattern(pattern: Pattern): string { case 'record': const fields = Object.entries(pattern.fields) - .map(([k, p]) => `${k} = ${prettyPrintPattern(p)}`) + .map(([k, p]) => `${needsQuotes(k) ? `"${k}"` : k} = ${prettyPrintPattern(p)}`) .join(', '); return `{${fields}}`; @@ -306,3 +307,7 @@ function prettyPrintPattern(pattern: Pattern): string { return `Unknown AST kind: ${(pattern as any).kind}` } } + +function needsQuotes(key: string): boolean { + return !/^[a-z_][a-zA-Z0-9_]*$/.test(key); +} diff --git a/src/cg/06-font.cg b/src/cg/06-font.cg new file mode 100644 index 0000000..5a0c78f --- /dev/null +++ b/src/cg/06-font.cg @@ -0,0 +1,4942 @@ + myFontBackup = { glyphs = { + "0" = { + w = 7, + h = 12, + map = [ + { + x = 2, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 4, + y = 2 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 1, + y = 7 + }, + { + x = 2, + y = 8 + }, + { + x = 1, + y = 3 + }, + { + x = 1, + y = 4 + }, + { + x = 1, + y = 5 + }, + { + x = 1, + y = 6 + }, + { + x = 5, + y = 3 + }, + { + x = 5, + y = 4 + }, + { + x = 5, + y = 5 + }, + { + x = 5, + y = 6 + }, + { + x = 5, + y = 7 + }, + { + x = 3, + y = 5 + } + ] + }, + "1" = { + w = 7, + h = 12, + map = [ + { + x = 3, + y = 2 + }, + { + x = 2, + y = 3 + }, + { + x = 3, + y = 3 + }, + { + x = 3, + y = 4 + }, + { + x = 3, + y = 5 + }, + { + x = 3, + y = 6 + }, + { + x = 3, + y = 7 + }, + { + x = 3, + y = 8 + }, + { + x = 1, + y = 4 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + } + ] + }, + "2" = { + w = 7, + h = 12, + map = [ + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 5, + y = 3 + }, + { + x = 4, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 1, + y = 3 + }, + { + x = 2, + y = 7 + }, + { + x = 3, + y = 6 + }, + { + x = 4, + y = 5 + }, + { + x = 5, + y = 4 + } + ] + }, + "3" = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 7 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 6 + }, + { + x = 5, + y = 5 + }, + { + x = 6, + y = 4 + }, + { + x = 6, + y = 3 + }, + { + x = 5, + y = 2 + }, + { + x = 4, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 4, + y = 5 + }, + { + x = 3, + y = 5 + }, + { + x = 2, + y = 5 + }, + { + x = 1, + y = 2 + }, + { + x = 0, + y = 3 + }, + { + x = 2, + y = 2 + } + ] + }, + "4" = { + w = 7, + h = 12, + map = [ + { + x = 4, + y = 2 + }, + { + x = 3, + y = 3 + }, + { + x = 2, + y = 4 + }, + { + x = 1, + y = 5 + }, + { + x = 1, + y = 6 + }, + { + x = 2, + y = 6 + }, + { + x = 3, + y = 6 + }, + { + x = 4, + y = 6 + }, + { + x = 5, + y = 6 + }, + { + x = 4, + y = 3 + }, + { + x = 4, + y = 4 + }, + { + x = 4, + y = 5 + }, + { + x = 4, + y = 7 + }, + { + x = 4, + y = 8 + }, + { + x = 0, + y = 6 + }, + { + x = 6, + y = 6 + } + ] + }, + "5" = { + w = 7, + h = 12, + map = [ + { + x = 1, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 5, + y = 2 + }, + { + x = 4, + y = 2 + }, + { + x = 0, + y = 3 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 5 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 7 + }, + { + x = 5, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 1, + y = 8 + }, + { + x = 0, + y = 2 + }, + { + x = 6, + y = 2 + }, + { + x = 0, + y = 7 + }, + { + x = 2, + y = 4 + }, + { + x = 3, + y = 4 + }, + { + x = 4, + y = 4 + }, + { + x = 5, + y = 4 + }, + { + x = 6, + y = 5 + }, + { + x = 1, + y = 5 + } + ] + }, + "6" = { + w = 7, + h = 12, + map = [ + { + x = 6, + y = 3 + }, + { + x = 5, + y = 2 + }, + { + x = 4, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 1, + y = 2 + }, + { + x = 0, + y = 3 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 6 + }, + { + x = 5, + y = 5 + }, + { + x = 4, + y = 5 + }, + { + x = 3, + y = 5 + }, + { + x = 2, + y = 5 + }, + { + x = 1, + y = 5 + } + ] + }, + "7" = { + w = 7, + h = 12, + map = [ + { + x = 1, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 4, + y = 2 + }, + { + x = 5, + y = 2 + }, + { + x = 5, + y = 3 + }, + { + x = 4, + y = 4 + }, + { + x = 3, + y = 5 + }, + { + x = 3, + y = 6 + }, + { + x = 3, + y = 7 + }, + { + x = 3, + y = 8 + } + ] + }, + "8" = { + w = 7, + h = 12, + map = [ + { + x = 3, + y = 2 + }, + { + x = 3, + y = 5 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 2, + y = 5 + }, + { + x = 4, + y = 5 + }, + { + x = 1, + y = 3 + }, + { + x = 1, + y = 4 + }, + { + x = 5, + y = 4 + }, + { + x = 5, + y = 3 + }, + { + x = 2, + y = 2 + }, + { + x = 4, + y = 2 + }, + { + x = 1, + y = 8 + }, + { + x = 6, + y = 7 + }, + { + x = 5, + y = 8 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 1, + y = 5 + }, + { + x = 5, + y = 5 + }, + { + x = 6, + y = 6 + } + ] + }, + "9" = { + w = 7, + h = 12, + map = [ + { + x = 1, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 4, + y = 2 + }, + { + x = 5, + y = 2 + }, + { + x = 6, + y = 3 + }, + { + x = 0, + y = 3 + }, + { + x = 0, + y = 4 + }, + { + x = 1, + y = 5 + }, + { + x = 2, + y = 5 + }, + { + x = 3, + y = 5 + }, + { + x = 4, + y = 5 + }, + { + x = 5, + y = 5 + }, + { + x = 6, + y = 4 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 7 + }, + { + x = 5, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 1, + y = 8 + }, + { + x = 0, + y = 7 + } + ] + }, + "A" = { + w = 7, + h = 12, + map = [ + { + x = 2, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 1, + y = 3 + }, + { + x = 0, + y = 8 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 4 + }, + { + x = 5, + y = 6 + }, + { + x = 1, + y = 6 + }, + { + x = 2, + y = 6 + }, + { + x = 3, + y = 6 + }, + { + x = 4, + y = 6 + }, + { + x = 4, + y = 2 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 8 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 4 + }, + { + x = 5, + y = 3 + } + ] + }, + "B" = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 2 + }, + { + x = 1, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 0, + y = 3 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 8 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 3, + y = 5 + }, + { + x = 2, + y = 5 + }, + { + x = 1, + y = 5 + }, + { + x = 4, + y = 5 + }, + { + x = 4, + y = 2 + }, + { + x = 5, + y = 5 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 7 + }, + { + x = 5, + y = 8 + }, + { + x = 5, + y = 4 + }, + { + x = 5, + y = 3 + } + ] + }, + "C" = { + w = 7, + h = 12, + map = [ + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 3 + }, + { + x = 1, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 4, + y = 2 + }, + { + x = 5, + y = 8 + }, + { + x = 6, + y = 7 + }, + { + x = 5, + y = 3 + } + ] + }, + "D" = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 3 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 1, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 0, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 3, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 0, + y = 8 + }, + { + x = 1, + y = 8 + }, + { + x = 4, + y = 2 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 4 + }, + { + x = 5, + y = 3 + } + ] + }, + "E" = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 3 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 2 + }, + { + x = 1, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 8 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 1, + y = 5 + }, + { + x = 2, + y = 5 + }, + { + x = 3, + y = 5 + }, + { + x = 4, + y = 5 + }, + { + x = 4, + y = 2 + }, + { + x = 6, + y = 8 + }, + { + x = 5, + y = 5 + }, + { + x = 5, + y = 2 + } + ] + }, + "F" = { + w = 6, + h = 12, + map = [ + { + x = 0, + y = 3 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 8 + }, + { + x = 0, + y = 2 + }, + { + x = 1, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 4, + y = 2 + }, + { + x = 5, + y = 2 + }, + { + x = 1, + y = 5 + }, + { + x = 2, + y = 5 + }, + { + x = 3, + y = 5 + }, + { + x = 4, + y = 5 + } + ] + }, + "G" = { + w = 7, + h = 12, + map = [ + { + x = 3, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 1, + y = 2 + }, + { + x = 0, + y = 3 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 4, + y = 5 + }, + { + x = 3, + y = 5 + }, + { + x = 5, + y = 5 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 5 + }, + { + x = 5, + y = 8 + }, + { + x = 4, + y = 2 + }, + { + x = 5, + y = 3 + } + ] + }, + "H" = { + w = 6, + h = 12, + map = [ + { + x = 0, + y = 3 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 8 + }, + { + x = 0, + y = 2 + }, + { + x = 5, + y = 2 + }, + { + x = 5, + y = 3 + }, + { + x = 5, + y = 4 + }, + { + x = 5, + y = 7 + }, + { + x = 5, + y = 8 + }, + { + x = 5, + y = 6 + }, + { + x = 5, + y = 5 + }, + { + x = 4, + y = 5 + }, + { + x = 3, + y = 5 + }, + { + x = 2, + y = 5 + }, + { + x = 1, + y = 5 + } + ] + }, + "I" = { + w = 7, + h = 12, + map = [ + { + x = 1, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 4, + y = 2 + }, + { + x = 5, + y = 2 + }, + { + x = 3, + y = 3 + }, + { + x = 3, + y = 4 + }, + { + x = 3, + y = 5 + }, + { + x = 3, + y = 6 + }, + { + x = 3, + y = 7 + }, + { + x = 2, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 1, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 5, + y = 8 + } + ] + }, + "J" = { + w = 7, + h = 12, + map = [ + { + x = 1, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 4, + y = 2 + }, + { + x = 5, + y = 2 + }, + { + x = 3, + y = 3 + }, + { + x = 3, + y = 4 + }, + { + x = 3, + y = 5 + }, + { + x = 3, + y = 6 + }, + { + x = 3, + y = 7 + }, + { + x = 2, + y = 8 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 1, + y = 8 + } + ] + }, + "K" = { + w = 7, + h = 12, + map = [ + { + x = 1, + y = 2 + }, + { + x = 1, + y = 3 + }, + { + x = 1, + y = 4 + }, + { + x = 1, + y = 5 + }, + { + x = 1, + y = 6 + }, + { + x = 1, + y = 7 + }, + { + x = 1, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 4, + y = 7 + }, + { + x = 3, + y = 6 + }, + { + x = 2, + y = 5 + }, + { + x = 3, + y = 4 + }, + { + x = 4, + y = 3 + }, + { + x = 5, + y = 2 + } + ] + }, + "L" = { + w = 7, + h = 12, + map = [ + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 1, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 1, + y = 7 + }, + { + x = 1, + y = 6 + }, + { + x = 1, + y = 3 + }, + { + x = 1, + y = 5 + }, + { + x = 1, + y = 4 + }, + { + x = 1, + y = 2 + } + ] + }, + "M" = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 6 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 3 + }, + { + x = 0, + y = 2 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 8 + }, + { + x = 6, + y = 2 + }, + { + x = 6, + y = 3 + }, + { + x = 6, + y = 4 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 8 + }, + { + x = 1, + y = 3 + }, + { + x = 2, + y = 4 + }, + { + x = 3, + y = 5 + }, + { + x = 4, + y = 4 + }, + { + x = 5, + y = 3 + } + ] + }, + "N" = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 6 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 3 + }, + { + x = 0, + y = 2 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 8 + }, + { + x = 1, + y = 3 + }, + { + x = 2, + y = 4 + }, + { + x = 3, + y = 5 + }, + { + x = 4, + y = 6 + }, + { + x = 5, + y = 7 + }, + { + x = 6, + y = 8 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 3 + }, + { + x = 6, + y = 2 + }, + { + x = 6, + y = 4 + } + ] + }, + "O" = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 5 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 4 + }, + { + x = 3, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 1, + y = 2 + }, + { + x = 5, + y = 2 + }, + { + x = 4, + y = 2 + }, + { + x = 0, + y = 3 + }, + { + x = 6, + y = 3 + } + ] + }, + "P" = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 3 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 2 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 8 + }, + { + x = 1, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 4, + y = 2 + }, + { + x = 5, + y = 2 + }, + { + x = 6, + y = 3 + }, + { + x = 6, + y = 4 + }, + { + x = 5, + y = 5 + }, + { + x = 4, + y = 5 + }, + { + x = 3, + y = 5 + }, + { + x = 2, + y = 5 + }, + { + x = 1, + y = 5 + } + ] + }, + "Q" = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 4 + }, + { + x = 1, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 0, + y = 3 + }, + { + x = 3, + y = 2 + }, + { + x = 4, + y = 2 + }, + { + x = 5, + y = 2 + }, + { + x = 6, + y = 3 + }, + { + x = 6, + y = 4 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 7 + }, + { + x = 5, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 1, + y = 8 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 5 + }, + { + x = 3, + y = 6 + }, + { + x = 4, + y = 7 + }, + { + x = 6, + y = 9 + } + ] + }, + "R" = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 2 + }, + { + x = 0, + y = 3 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 8 + }, + { + x = 1, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 4, + y = 2 + }, + { + x = 5, + y = 2 + }, + { + x = 6, + y = 3 + }, + { + x = 6, + y = 4 + }, + { + x = 5, + y = 5 + }, + { + x = 4, + y = 5 + }, + { + x = 3, + y = 5 + }, + { + x = 2, + y = 5 + }, + { + x = 1, + y = 5 + }, + { + x = 4, + y = 6 + }, + { + x = 5, + y = 7 + }, + { + x = 6, + y = 8 + } + ] + }, + "S" = { + w = 7, + h = 12, + map = [ + { + x = 6, + y = 3 + }, + { + x = 5, + y = 2 + }, + { + x = 4, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 1, + y = 2 + }, + { + x = 0, + y = 3 + }, + { + x = 0, + y = 4 + }, + { + x = 1, + y = 5 + }, + { + x = 2, + y = 5 + }, + { + x = 3, + y = 5 + }, + { + x = 4, + y = 5 + }, + { + x = 5, + y = 5 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 7 + }, + { + x = 5, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 1, + y = 8 + }, + { + x = 0, + y = 7 + } + ] + }, + "T" = { + w = 7, + h = 12, + map = [ + { + x = 1, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 4, + y = 2 + }, + { + x = 5, + y = 2 + }, + { + x = 3, + y = 3 + }, + { + x = 3, + y = 4 + }, + { + x = 3, + y = 5 + }, + { + x = 3, + y = 6 + }, + { + x = 3, + y = 7 + }, + { + x = 3, + y = 8 + }, + { + x = 0, + y = 2 + }, + { + x = 6, + y = 2 + } + ] + }, + "U" = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 2 + }, + { + x = 0, + y = 3 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 5 + }, + { + x = 6, + y = 2 + }, + { + x = 6, + y = 3 + }, + { + x = 6, + y = 4 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 7 + }, + { + x = 5, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 1, + y = 8 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 6 + } + ] + }, + "V" = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 2 + }, + { + x = 0, + y = 3 + }, + { + x = 3, + y = 8 + }, + { + x = 6, + y = 3 + }, + { + x = 6, + y = 2 + }, + { + x = 2, + y = 7 + }, + { + x = 4, + y = 7 + }, + { + x = 2, + y = 6 + }, + { + x = 1, + y = 5 + }, + { + x = 1, + y = 4 + }, + { + x = 4, + y = 6 + }, + { + x = 5, + y = 5 + }, + { + x = 5, + y = 4 + } + ] + }, + "W" = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 2 + }, + { + x = 0, + y = 3 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 8 + }, + { + x = 1, + y = 7 + }, + { + x = 2, + y = 6 + }, + { + x = 3, + y = 5 + }, + { + x = 4, + y = 6 + }, + { + x = 5, + y = 7 + }, + { + x = 6, + y = 8 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 4 + }, + { + x = 6, + y = 3 + }, + { + x = 6, + y = 2 + } + ] + }, + "X" = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 2 + }, + { + x = 1, + y = 3 + }, + { + x = 2, + y = 4 + }, + { + x = 4, + y = 6 + }, + { + x = 5, + y = 7 + }, + { + x = 6, + y = 8 + }, + { + x = 0, + y = 8 + }, + { + x = 1, + y = 7 + }, + { + x = 2, + y = 6 + }, + { + x = 3, + y = 5 + }, + { + x = 4, + y = 4 + }, + { + x = 5, + y = 3 + }, + { + x = 6, + y = 2 + } + ] + }, + "Y" = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 2 + }, + { + x = 1, + y = 3 + }, + { + x = 2, + y = 4 + }, + { + x = 3, + y = 5 + }, + { + x = 4, + y = 4 + }, + { + x = 5, + y = 3 + }, + { + x = 6, + y = 2 + }, + { + x = 3, + y = 6 + }, + { + x = 3, + y = 7 + }, + { + x = 3, + y = 8 + } + ] + }, + "Z" = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 2 + }, + { + x = 1, + y = 2 + }, + { + x = 2, + y = 2 + }, + { + x = 3, + y = 2 + }, + { + x = 4, + y = 2 + }, + { + x = 5, + y = 2 + }, + { + x = 6, + y = 2 + }, + { + x = 5, + y = 3 + }, + { + x = 4, + y = 4 + }, + { + x = 3, + y = 5 + }, + { + x = 2, + y = 6 + }, + { + x = 1, + y = 7 + }, + { + x = 0, + y = 8 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 6, + y = 8 + } + ] + }, + a = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 7 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 5 + }, + { + x = 1, + y = 6 + }, + { + x = 2, + y = 6 + }, + { + x = 3, + y = 6 + }, + { + x = 4, + y = 6 + }, + { + x = 5, + y = 6 + }, + { + x = 6, + y = 6 + }, + { + x = 5, + y = 4 + }, + { + x = 4, + y = 4 + }, + { + x = 3, + y = 4 + }, + { + x = 2, + y = 4 + }, + { + x = 1, + y = 4 + }, + { + x = 0, + y = 4 + }, + { + x = 6, + y = 8 + } + ] + }, + b = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 2 + }, + { + x = 0, + y = 3 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 2, + y = 8 + }, + { + x = 1, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 5 + }, + { + x = 5, + y = 4 + }, + { + x = 4, + y = 4 + }, + { + x = 3, + y = 4 + }, + { + x = 2, + y = 4 + }, + { + x = 1, + y = 4 + } + ] + }, + c = { + w = 7, + h = 12, + map = [ + { + x = 4, + y = 4 + }, + { + x = 3, + y = 4 + }, + { + x = 2, + y = 4 + }, + { + x = 1, + y = 4 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 5, + y = 4 + }, + { + x = 6, + y = 4 + }, + { + x = 6, + y = 8 + } + ] + }, + d = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 5 + }, + { + x = 1, + y = 4 + }, + { + x = 2, + y = 4 + }, + { + x = 3, + y = 4 + }, + { + x = 4, + y = 4 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 6 + }, + { + x = 5, + y = 4 + }, + { + x = 6, + y = 4 + }, + { + x = 6, + y = 3 + }, + { + x = 6, + y = 2 + } + ] + }, + e = { + w = 7, + h = 12, + map = [ + { + x = 4, + y = 4 + }, + { + x = 3, + y = 4 + }, + { + x = 2, + y = 4 + }, + { + x = 1, + y = 4 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 5, + y = 4 + }, + { + x = 6, + y = 5 + }, + { + x = 5, + y = 6 + }, + { + x = 4, + y = 6 + }, + { + x = 3, + y = 6 + }, + { + x = 2, + y = 6 + }, + { + x = 1, + y = 6 + }, + { + x = 6, + y = 8 + } + ] + }, + f = { + w = 7, + h = 12, + map = [ + { + x = 3, + y = 5 + }, + { + x = 1, + y = 5 + }, + { + x = 4, + y = 5 + }, + { + x = 2, + y = 5 + }, + { + x = 3, + y = 8 + }, + { + x = 3, + y = 7 + }, + { + x = 3, + y = 6 + }, + { + x = 3, + y = 4 + }, + { + x = 3, + y = 3 + }, + { + x = 4, + y = 2 + }, + { + x = 5, + y = 2 + }, + { + x = 6, + y = 3 + }, + { + x = 5, + y = 5 + } + ] + }, + g = { + w = 7, + h = 12, + map = [ + { + x = 1, + y = 4 + }, + { + x = 2, + y = 4 + }, + { + x = 3, + y = 4 + }, + { + x = 4, + y = 4 + }, + { + x = 5, + y = 4 + }, + { + x = 6, + y = 5 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 8 + }, + { + x = 6, + y = 9 + }, + { + x = 6, + y = 10 + }, + { + x = 5, + y = 11 + }, + { + x = 4, + y = 11 + }, + { + x = 3, + y = 11 + }, + { + x = 2, + y = 11 + }, + { + x = 1, + y = 11 + }, + { + x = 0, + y = 10 + } + ] + }, + h = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 2 + }, + { + x = 0, + y = 3 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 8 + }, + { + x = 2, + y = 4 + }, + { + x = 3, + y = 4 + }, + { + x = 4, + y = 4 + }, + { + x = 5, + y = 4 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 8 + }, + { + x = 1, + y = 5 + } + ] + }, + i = { + w = 7, + h = 12, + map = [ + { + x = 3, + y = 8 + }, + { + x = 3, + y = 7 + }, + { + x = 3, + y = 6 + }, + { + x = 3, + y = 5 + }, + { + x = 3, + y = 4 + }, + { + x = 3, + y = 2 + } + ] + }, + j = { + w = 7, + h = 12, + map = [ + { + x = 3, + y = 4 + }, + { + x = 3, + y = 5 + }, + { + x = 3, + y = 6 + }, + { + x = 3, + y = 7 + }, + { + x = 3, + y = 8 + }, + { + x = 3, + y = 9 + }, + { + x = 3, + y = 10 + }, + { + x = 2, + y = 11 + }, + { + x = 1, + y = 11 + }, + { + x = 0, + y = 10 + }, + { + x = 3, + y = 2 + }, + { + x = 0, + y = 9 + } + ] + }, + k = { + w = 7, + h = 12, + map = [ + { + x = 1, + y = 2 + }, + { + x = 1, + y = 4 + }, + { + x = 1, + y = 3 + }, + { + x = 1, + y = 5 + }, + { + x = 1, + y = 7 + }, + { + x = 1, + y = 8 + }, + { + x = 1, + y = 6 + }, + { + x = 2, + y = 6 + }, + { + x = 3, + y = 6 + }, + { + x = 4, + y = 7 + }, + { + x = 5, + y = 8 + }, + { + x = 3, + y = 5 + }, + { + x = 4, + y = 4 + } + ] + }, + l = { + w = 7, + h = 12, + map = [ + { + x = 3, + y = 2 + }, + { + x = 3, + y = 3 + }, + { + x = 3, + y = 4 + }, + { + x = 3, + y = 5 + }, + { + x = 3, + y = 6 + }, + { + x = 3, + y = 7 + }, + { + x = 4, + y = 8 + }, + { + x = 3, + y = 8 + } + ] + }, + m = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 8 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 5 + }, + { + x = 1, + y = 4 + }, + { + x = 2, + y = 4 + }, + { + x = 3, + y = 5 + }, + { + x = 3, + y = 6 + }, + { + x = 3, + y = 7 + }, + { + x = 4, + y = 4 + }, + { + x = 5, + y = 4 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 8 + }, + { + x = 3, + y = 8 + } + ] + }, + n = { + w = 7, + h = 12, + map = [ + { + x = 3, + y = 4 + }, + { + x = 4, + y = 4 + }, + { + x = 2, + y = 4 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 8 + }, + { + x = 1, + y = 4 + }, + { + x = 5, + y = 4 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 8 + } + ] + }, + o = { + w = 7, + h = 12, + map = [ + { + x = 2, + y = 4 + }, + { + x = 3, + y = 4 + }, + { + x = 4, + y = 4 + }, + { + x = 5, + y = 4 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 7 + }, + { + x = 5, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 1, + y = 8 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 5 + }, + { + x = 1, + y = 4 + } + ] + }, + p = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 11 + }, + { + x = 0, + y = 10 + }, + { + x = 0, + y = 9 + }, + { + x = 0, + y = 8 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 5 + }, + { + x = 1, + y = 4 + }, + { + x = 2, + y = 4 + }, + { + x = 3, + y = 4 + }, + { + x = 4, + y = 4 + }, + { + x = 5, + y = 4 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 7 + }, + { + x = 5, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 1, + y = 8 + } + ] + }, + q = { + w = 7, + h = 12, + map = [ + { + x = 1, + y = 4 + }, + { + x = 2, + y = 4 + }, + { + x = 3, + y = 4 + }, + { + x = 4, + y = 4 + }, + { + x = 5, + y = 4 + }, + { + x = 6, + y = 5 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 8 + }, + { + x = 6, + y = 9 + }, + { + x = 6, + y = 10 + }, + { + x = 6, + y = 11 + } + ] + }, + r = { + w = 7, + h = 12, + map = [ + { + x = 2, + y = 4 + }, + { + x = 3, + y = 4 + }, + { + x = 4, + y = 4 + }, + { + x = 5, + y = 4 + }, + { + x = 6, + y = 5 + }, + { + x = 0, + y = 8 + }, + { + x = 0, + y = 7 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 5 + }, + { + x = 1, + y = 4 + } + ] + }, + s = { + w = 7, + h = 12, + map = [ + { + x = 2, + y = 4 + }, + { + x = 3, + y = 4 + }, + { + x = 4, + y = 4 + }, + { + x = 5, + y = 4 + }, + { + x = 1, + y = 4 + }, + { + x = 0, + y = 5 + }, + { + x = 1, + y = 6 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 6, + y = 7 + }, + { + x = 2, + y = 6 + }, + { + x = 3, + y = 6 + }, + { + x = 4, + y = 6 + }, + { + x = 5, + y = 6 + }, + { + x = 0, + y = 8 + }, + { + x = 6, + y = 4 + } + ] + }, + t = { + w = 7, + h = 12, + map = [ + { + x = 3, + y = 8 + }, + { + x = 3, + y = 7 + }, + { + x = 3, + y = 6 + }, + { + x = 3, + y = 5 + }, + { + x = 3, + y = 4 + }, + { + x = 3, + y = 3 + }, + { + x = 2, + y = 4 + }, + { + x = 4, + y = 4 + }, + { + x = 3, + y = 2 + }, + { + x = 1, + y = 4 + }, + { + x = 5, + y = 4 + } + ] + }, + u = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 5 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 4 + } + ] + }, + v = { + w = 7, + h = 12, + map = [ + { + x = 1, + y = 5 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 7 + }, + { + x = 2, + y = 6 + }, + { + x = 2, + y = 7 + }, + { + x = 4, + y = 6 + }, + { + x = 5, + y = 5 + }, + { + x = 1, + y = 4 + }, + { + x = 5, + y = 4 + } + ] + }, + w = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 4 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 7 + }, + { + x = 3, + y = 6 + }, + { + x = 3, + y = 5 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 4 + } + ] + }, + x = { + w = 7, + h = 12, + map = [ + { + x = 1, + y = 4 + }, + { + x = 2, + y = 5 + }, + { + x = 3, + y = 6 + }, + { + x = 4, + y = 7 + }, + { + x = 5, + y = 8 + }, + { + x = 4, + y = 5 + }, + { + x = 5, + y = 4 + }, + { + x = 2, + y = 7 + }, + { + x = 1, + y = 8 + } + ] + }, + y = { + w = 7, + h = 12, + map = [ + { + x = 0, + y = 4 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 4 + }, + { + x = 6, + y = 8 + }, + { + x = 6, + y = 9 + }, + { + x = 6, + y = 10 + }, + { + x = 5, + y = 11 + }, + { + x = 4, + y = 11 + }, + { + x = 2, + y = 11 + }, + { + x = 1, + y = 11 + }, + { + x = 3, + y = 11 + }, + { + x = 0, + y = 10 + } + ] + }, + z = { + w = 7, + h = 12, + map = [ + { + x = 1, + y = 4 + }, + { + x = 2, + y = 4 + }, + { + x = 3, + y = 4 + }, + { + x = 4, + y = 4 + }, + { + x = 5, + y = 4 + }, + { + x = 2, + y = 8 + }, + { + x = 1, + y = 8 + }, + { + x = 3, + y = 8 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 4, + y = 5 + }, + { + x = 3, + y = 6 + }, + { + x = 2, + y = 7 + } + ] + }, + "!" = { + w = 7, + h = 12, + map = [ + { + x = 3, + y = 2 + }, + { + x = 3, + y = 4 + }, + { + x = 3, + y = 3 + }, + { + x = 3, + y = 5 + }, + { + x = 3, + y = 6 + }, + { + x = 3, + y = 8 + } + ] + }, + "@" = { + w = 7, + h = 12, + map = [ + { + x = 2, + y = 4 + }, + { + x = 2, + y = 5 + }, + { + x = 2, + y = 6 + }, + { + x = 3, + y = 7 + }, + { + x = 4, + y = 6 + }, + { + x = 4, + y = 5 + }, + { + x = 4, + y = 4 + }, + { + x = 3, + y = 3 + }, + { + x = 4, + y = 8 + }, + { + x = 5, + y = 8 + }, + { + x = 6, + y = 7 + }, + { + x = 6, + y = 6 + }, + { + x = 6, + y = 5 + }, + { + x = 6, + y = 3 + }, + { + x = 6, + y = 4 + }, + { + x = 5, + y = 2 + }, + { + x = 4, + y = 1 + }, + { + x = 3, + y = 1 + }, + { + x = 2, + y = 1 + }, + { + x = 1, + y = 2 + }, + { + x = 0, + y = 3 + }, + { + x = 0, + y = 4 + }, + { + x = 0, + y = 5 + }, + { + x = 0, + y = 6 + }, + { + x = 0, + y = 7 + }, + { + x = 1, + y = 8 + }, + { + x = 2, + y = 9 + }, + { + x = 4, + y = 3 + } + ] + }, + "#" = { + w = 7, + h = 12, + map = [ + { + x = 4, + y = 2 + }, + { + x = 4, + y = 3 + }, + { + x = 4, + y = 4 + }, + { + x = 4, + y = 5 + }, + { + x = 4, + y = 6 + }, + { + x = 4, + y = 7 + }, + { + x = 4, + y = 8 + }, + { + x = 2, + y = 2 + }, + { + x = 2, + y = 3 + }, + { + x = 2, + y = 4 + }, + { + x = 2, + y = 5 + }, + { + x = 2, + y = 6 + }, + { + x = 2, + y = 7 + }, + { + x = 2, + y = 8 + }, + { + x = 1, + y = 4 + }, + { + x = 3, + y = 4 + }, + { + x = 5, + y = 4 + }, + { + x = 1, + y = 6 + }, + { + x = 3, + y = 6 + }, + { + x = 5, + y = 6 + } + ] + }, + "$" = { + w = 7, + h = 12, + map = [ + { + x = 3, + y = 2 + }, + { + x = 3, + y = 3 + }, + { + x = 3, + y = 4 + }, + { + x = 3, + y = 5 + }, + { + x = 3, + y = 6 + }, + { + x = 3, + y = 7 + }, + { + x = 3, + y = 8 + }, + { + x = 5, + y = 3 + }, + { + x = 4, + y = 3 + }, + { + x = 2, + y = 3 + }, + { + x = 1, + y = 3 + }, + { + x = 0, + y = 4 + }, + { + x = 1, + y = 5 + }, + { + x = 2, + y = 5 + }, + { + x = 4, + y = 5 + }, + { + x = 5, + y = 5 + }, + { + x = 6, + y = 6 + }, + { + x = 4, + y = 7 + }, + { + x = 2, + y = 7 + }, + { + x = 5, + y = 7 + }, + { + x = 1, + y = 7 + }, + { + x = 0, + y = 7 + }, + { + x = 6, + y = 3 + } + ] + }, + "%" = { + w = 7, + h = 12, + map = [ + { + x = 1, + y = 2 + }, + { + x = 0, + y = 3 + }, + { + x = 1, + y = 4 + }, + { + x = 2, + y = 3 + }, + { + x = 6, + y = 2 + }, + { + x = 5, + y = 3 + }, + { + x = 4, + y = 4 + }, + { + x = 3, + y = 5 + }, + { + x = 2, + y = 6 + }, + { + x = 1, + y = 7 + }, + { + x = 0, + y = 8 + }, + { + x = 5, + y = 6 + }, + { + x = 4, + y = 7 + }, + { + x = 5, + y = 8 + }, + { + x = 6, + y = 7 + } + ] + }, + "^" = { + w = 7, + h = 12, + map = [ + { + x = 3, + y = 2 + }, + { + x = 2, + y = 3 + }, + { + x = 1, + y = 4 + }, + { + x = 4, + y = 3 + }, + { + x = 5, + y = 4 + } + ] + } + } }; diff --git a/src/cg/06-fontEditor.cg b/src/cg/06-fontEditor.cg index 74c326a..f612583 100644 --- a/src/cg/06-fontEditor.cg +++ b/src/cg/06-fontEditor.cg @@ -51,12 +51,15 @@ fontEditor = config \ | _ \ { state = state, emit = [] }, view = state emit \ - tileSize = 50; + tileSize = 52; tileView = g \ glyph = g.value; key = g.key; - scale = max 1 (floor (min (tileSize / glyph.w) (tileSize / glyph.h)) - 2); + # scale = max 1 (floor (min (tileSize / glyph.w) (tileSize / glyph.h)) - 2); + scale = 4; + x = floor ((tileSize - glyph.w * scale) / 2); + ui.clickable { onClick = \ editGlyph (c.path & ".glyphs." & key), child = ui.stack { @@ -64,30 +67,41 @@ fontEditor = config \ ui.rect { w = tileSize, h = tileSize, strokeWidth = 1, strokeColor = "#fff" }, # center tileSize tileSize (glyphView { glyph = glyph, scale = scale }) ui.positioned { - x = scale, y = scale, + x = 3 * scale, y = scale, child = glyphView { glyph = glyph, scale = scale } } ] } }; + headerHeight = 30; + header = ui.row { gap = 10, children = [ inputButton { + h = headerHeight, key = "new-glyph-button", label = "New Glyph", - onSubmit = key \ rebindAt (c.path & ".glyphs." & key) { w = 5, h = 7, map = [] } + onSubmit = key \ rebindAt (c.path & ".glyphs." & key) { w = 7, h = 12, map = [] } } ] }; - ui.column { - gap = 2, - children = [ - header, - ...map tileView (entries state.glyphs) - ] - } + perRow = floor (ctx.w / tileSize) - 1; + + grid = ui.stack { + children = mapWithIndex (g idx \ + x = (idx % perRow) * tileSize + 2 * (idx % perRow); + y = (floor (idx / perRow)) * tileSize + 2 * (floor (idx / perRow)); + + ui.positioned { + x = x, + y = y, + child = tileView g + }) (entries state.glyphs) + }; + + ui.column { gap = 2, children = [ header, grid ] } } }; diff --git a/src/cg/06-pixelEditor.cg b/src/cg/06-pixelEditor.cg index ede9e05..05a559d 100644 --- a/src/cg/06-pixelEditor.cg +++ b/src/cg/06-pixelEditor.cg @@ -36,6 +36,7 @@ pixelEditor = config \ { state = newState, emit = saveGlyph newState }); existing = eval! (c.path); + _ = debug! "existing" existing; # return App { @@ -50,16 +51,16 @@ pixelEditor = config \ init = existing | Value v \ { map = v.map, - pixelWidth = 5, - pixelHeight = 7, + pixelWidth = v.w, + pixelHeight = v.h, cellSize = 30, selectedRow = 0, selectedCol = 0 } | _ \ { map = [], - pixelWidth = 5, - pixelHeight = 7, + pixelWidth = 7, + pixelHeight = 12, cellSize = 30, selectedRow = 0, selectedCol = 0 diff --git a/src/compiler.ts b/src/compiler.ts index d63cf79..f9bfc15 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -56,7 +56,7 @@ export function compile(ast: AST, ctx: CompileCtx = defaultCtx): string { const parts = ast.entries.map(entry => entry.kind === 'spread' ? `...${compile(entry.expr, ctx)}` - : `${sanitizeName(entry.key)}: ${compile(entry.value, ctx)}` + : `${JSON.stringify(entry.key)}: ${compile(entry.value, ctx)}` ) return `({${parts.join(', ')}})`; } @@ -69,11 +69,11 @@ export function compile(ast: AST, ctx: CompileCtx = defaultCtx): string { } case 'record-access': - return `${compile(ast.record, ctx)}.${sanitizeName(ast.field)}`; + return `${compile(ast.record, ctx)}[${JSON.stringify(ast.field)}]`; case 'record-update': const updates = Object.entries(ast.updates) - .map(([k, v]) => `${sanitizeName(k)}: ${compile(v, ctx)}`); + .map(([k, v]) => `${JSON.stringify(k)}: ${compile(v, ctx)}`); return `({...${compile(ast.record, ctx)}, ${updates.join(', ')}})`; case 'let': { @@ -207,7 +207,7 @@ function compilePattern(pattern: Pattern, expr: string): { condition: string, bi let condition = 'true'; const bindings: string[] = []; for (const [field, fieldPattern] of Object.entries(pattern.fields)) { - const sub = compilePattern(fieldPattern, `${expr}.${sanitizeName(field)}`); + const sub = compilePattern(fieldPattern, `${expr}[${JSON.stringify(field)}]`); if (sub.condition !== 'true') condition += ` && ${sub.condition}`; bindings.push(...sub.bindings); } diff --git a/src/parser.ts b/src/parser.ts index aa46414..1e25974 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -44,11 +44,11 @@ export class Parser { private expectIdent(): Token { const token = this.current(); - if (token.kind === 'ident' || token.kind === 'type-ident') { + if (token.kind === 'ident' || token.kind === 'type-ident' || token.kind === 'string') { this.advance(); return token; } - throw this.error(`Expected identifier, got ${token.kind}`); + throw ParseError(`Expected identifier, got ${token.kind}`); } private getPos(token: Token) {