diff --git a/3x5.js b/3x5.js index 355aa05..940da9a 100644 --- a/3x5.js +++ b/3x5.js @@ -24,7 +24,7 @@ * @returns {string} Markup to render / output */ function renderCard(state, code) { - const script = parseNotcl(code); + const script = Notcl.parse(code); state.output = JSON.stringify(script, null, 2); return state.output; } diff --git a/notcl.js b/notcl.js index 180d15c..187e36a 100644 --- a/notcl.js +++ b/notcl.js @@ -1,84 +1,88 @@ /** - * @typedef {Command[]} Script - * @typedef {Word[]} Command - * @typedef {object} Word + * @typedef {Notcl.Command[]} Notcl.Script + * @typedef {Notcl.Word[]} Notcl.Command + * @typedef {object} Notcl.Word * @property {string} text */ -const InterCommandWhitespace = Peg.Regex(/[^\S\n;]*/y); +var Notcl = (() => { + const InterCommandWhitespace = Peg.Regex(/[^\S\n;]*/y); -const CommentPattern = Peg.Regex(/#.*\n/y); + const Comment = Peg.Regex(/#.*\n/y); -const PreWordWhitespace = Peg.Regex(/[^\S\n;]*/y); + const PreWordWhitespace = Peg.Regex(/[^\S\n;]*/y); -const BasicWord = Peg.Map(Peg.Regex(/[^\s;]+/y), ([word]) => ({ - text: word, -})); + const BasicWord = Peg.Map(Peg.Regex(/[^\s;]+/y), ([word]) => ({ + text: word, + })); -const WordPattern = Peg.Map( - Peg.Sequence(PreWordWhitespace, BasicWord), - ([_, word]) => word -); + const Word = Peg.Map( + Peg.Sequence(PreWordWhitespace, BasicWord), + ([_, word]) => word + ); -/** - * Parse out a Notcl script into an easier-to-interpret representation. - * No script is actually executed yet. - * - * @param {string} code - * @returns Script - */ -function parseNotcl(code) { - /* Preprocess */ - // fold line endings - code = code.replace(/(?