diff --git a/src/3x5.ts b/src/3x5.ts index 428c2a6..7ed606c 100644 --- a/src/3x5.ts +++ b/src/3x5.ts @@ -1,7 +1,7 @@ -import { ALL as HTML } from './lib/html'; -import { parse } from './parser'; -import { runNoctl, Vm } from './vm'; -import { AsHtml } from './words'; +import { ALL as HTML } from "./lib/html"; +import { parse } from "./parser"; +import { runNoctl, Vm } from "./vm"; +import { AsHtml } from "./words"; /** * Basic unit of information, also an "actor" in the programming system @@ -36,53 +36,68 @@ function renderCard(state: Vm, code: string) { let theCard: Card = { id: 100, fields: {}, - code: String.raw` - h1 "Hello, World!" - para [2 + 2] - block { - This is a paragraph of text, with one [b bold] word. Yes, this means there has to be some magic in text processing... this won't work. - } - block -red "Beware!" - para "All text should be quoted, it's clearer that way. & blockquotes already should contain paragraphs. (maybe normalize nested paragraphs)" - block { - First block - } { - Second block - - Is this markdown-parsed? - - [button "No we want to render UI" \\{noop}] - } { - Since we want escapes to work, these blocks [i will] be subject to substitutions, maybe via a relaxed bareWordTmpl. - } - # A comment - para { - line endings escaped\ - one slash - - not escaped if \\ - two slashes - - escaped with a slash if \\\ - three slashes - - not escaped with two slashes if \\\\ - four slashes - - escaped with two slashes if \\\\\ - five slashes - - not escaped with three slashes if \\\\\\ - six slashes - } - `, + code: "", }; +const TEXTAREA_STYLE: Partial = { + display: "block", + width: "100%", +}; + +const codeInput = document.createElement("textarea"); +Object.assign(codeInput.style, TEXTAREA_STYLE, { height: "20em" }); +codeInput.value = String.raw` +h1 "Hello, World!" +para [2 + 2] +block { + This is a paragraph of text, with one [b bold] word. Yes, this means there has to be some magic in text processing... this won't work. +} +block -red "Beware!" +para "All text should be quoted, it's clearer that way. & blockquotes already should contain paragraphs. (maybe normalize nested paragraphs)" +block { + First block +} { + Second block + + Is this markdown-parsed? + + [button "No we want to render UI" \\{noop}] +} { + Since we want escapes to work, these blocks [i will] be subject to substitutions, maybe via a relaxed bareWordTmpl. +} +# A comment +para { + line endings escaped\ + one slash + + not escaped if \\ + two slashes + + escaped with a slash if \\\ + three slashes + + not escaped with two slashes if \\\\ + four slashes + + escaped with two slashes if \\\\\ + five slashes + + not escaped with three slashes if \\\\\\ + six slashes +} +`.trim(); + +const rerender = Object.assign(document.createElement("button"), { + onclick: () => render(), + textContent: "Render", +}); const state = document.createElement("pre"); const display = document.createElement("blockquote"); const debugDisplay = document.createElement("pre"); function render() { + theCard.code = codeInput.value; + const vm: Vm = { mode: "render", commands: { ...HTML }, @@ -96,4 +111,11 @@ function render() { } render(); -document.body.append(state, display, debugDisplay); +document.body.append( + fieldInput, + codeInput, + rerender, + state, + display, + debugDisplay +);