questmark 0.0.36 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/.github/workflows/docs.yml +56 -0
  2. package/bin/questmark +1 -1
  3. package/dist/browser/bundle.js +28365 -0
  4. package/dist/node/QuestVM.d.ts +1 -2
  5. package/dist/node/QuestVM.js +81 -83
  6. package/dist/node/QuestVM.js.map +1 -1
  7. package/dist/node/cli.js +33 -49
  8. package/dist/node/cli.js.map +1 -1
  9. package/dist/node/index.d.ts +2 -2
  10. package/dist/node/index.js +2 -14
  11. package/dist/node/index.js.map +1 -1
  12. package/dist/node/parseMarkdown.d.ts +18 -7
  13. package/dist/node/parseMarkdown.js +81 -77
  14. package/dist/node/parseMarkdown.js.map +1 -1
  15. package/docs/explanation/how-questmark-works.md +123 -0
  16. package/docs/explanation/why-questmark.md +72 -0
  17. package/docs/how-to/compile-to-bytecode.md +62 -0
  18. package/docs/how-to/play-a-document.md +57 -0
  19. package/docs/how-to/use-the-library.md +98 -0
  20. package/docs/index.md +61 -0
  21. package/docs/reference/api.md +135 -0
  22. package/docs/reference/cli.md +66 -0
  23. package/docs/reference/language.md +213 -0
  24. package/docs/tutorials/first-conversation.md +219 -0
  25. package/package.json +33 -31
  26. package/readme.md +55 -80
  27. package/tsconfig.json +8 -3
  28. package/tsconfig.webpack.json +9 -0
  29. package/webpack.config.cjs +49 -0
  30. package/dist/browser/QuestVM.d.ts +0 -13
  31. package/dist/browser/QuestVM.js +0 -89
  32. package/dist/browser/QuestVM.js.map +0 -1
  33. package/dist/browser/cli.d.ts +0 -2
  34. package/dist/browser/cli.js +0 -80
  35. package/dist/browser/cli.js.map +0 -1
  36. package/dist/browser/index.d.ts +0 -2
  37. package/dist/browser/index.js +0 -15
  38. package/dist/browser/index.js.map +0 -1
  39. package/dist/browser/parseMarkdown.d.ts +0 -25
  40. package/dist/browser/parseMarkdown.js +0 -413
  41. package/dist/browser/parseMarkdown.js.map +0 -1
@@ -1,52 +1,57 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.parseMarkdown = exports.NoLinkBehaviour = void 0;
7
- const mdast_util_from_markdown_1 = __importDefault(require("mdast-util-from-markdown"));
8
- const unist_util_find_after_1 = __importDefault(require("unist-util-find-after"));
9
- const unist_util_remove_position_1 = __importDefault(require("unist-util-remove-position"));
10
- const unist_util_find_all_after_1 = __importDefault(require("unist-util-find-all-after"));
11
- const unist_util_find_all_between_1 = __importDefault(require("unist-util-find-all-between"));
12
- const unist_util_visit_parents_1 = __importDefault(require("unist-util-visit-parents"));
13
- const unist_util_visit_1 = __importDefault(require("unist-util-visit"));
14
- const unist_builder_1 = __importDefault(require("unist-builder"));
15
- require("array-flat-polyfill");
16
- const tzo_1 = require("tzo");
17
- var NoLinkBehaviour;
1
+ import { fromMarkdown } from "mdast-util-from-markdown";
2
+ import { findAfter } from "unist-util-find-after";
3
+ import { removePosition } from "unist-util-remove-position";
4
+ import { findAllAfter } from "unist-util-find-all-after";
5
+ import { visitParents } from "unist-util-visit-parents";
6
+ import { visit } from "unist-util-visit";
7
+ import { u } from "unist-builder";
8
+ import 'array-flat-polyfill';
9
+ import { Tokenizer, pushString, pushNumber, invokeFunction } from "tzo";
10
+ export var NoLinkBehaviour;
18
11
  (function (NoLinkBehaviour) {
19
12
  NoLinkBehaviour[NoLinkBehaviour["EXIT"] = 0] = "EXIT";
20
13
  NoLinkBehaviour[NoLinkBehaviour["LOOPBACK_TO_OPTIONS"] = 1] = "LOOPBACK_TO_OPTIONS"; // DEFAULT: Loopback to the options section if no link is found for an option and an option does not explicitly call an `exit` or `goto` effect.
21
- })(NoLinkBehaviour = exports.NoLinkBehaviour || (exports.NoLinkBehaviour = {}));
14
+ })(NoLinkBehaviour || (NoLinkBehaviour = {}));
15
+ function childrenBetween(parent, start, end) {
16
+ const children = parent.children || [];
17
+ const startIndex = children.indexOf(start);
18
+ if (startIndex === -1) {
19
+ throw new Error("Expected child node");
20
+ }
21
+ const endIndex = end ? children.indexOf(end) : children.length;
22
+ if (end && endIndex === -1) {
23
+ throw new Error("Expected child node");
24
+ }
25
+ return children.slice(startIndex + 1, endIndex);
26
+ }
22
27
  var EmitOn;
23
28
  (function (EmitOn) {
24
29
  EmitOn[EmitOn["CLASSIC"] = 0] = "CLASSIC";
25
30
  EmitOn[EmitOn["END_OF_LINE"] = 1] = "END_OF_LINE";
26
31
  })(EmitOn || (EmitOn = {}));
27
- function parseMarkdown(file_contents) {
28
- const tree = mdast_util_from_markdown_1.default(file_contents);
29
- const tokenizer = new tzo_1.Tokenizer();
30
- const root = unist_builder_1.default('questmarkDocument', { options: {} }, []);
32
+ export function parseMarkdown(file_contents) {
33
+ const tree = fromMarkdown(file_contents);
34
+ const tokenizer = new Tokenizer();
35
+ const root = u('questmarkDocument', { options: {} }, []);
31
36
  let last_once_directive_nr = 0;
32
37
  let noLinkBehaviour = NoLinkBehaviour.LOOPBACK_TO_OPTIONS;
33
38
  let retainWhitespace = false;
34
39
  let emitOn = EmitOn.CLASSIC;
35
40
  let missed_emits = 0;
36
41
  let strip_leading_newlines = false;
37
- unist_util_visit_parents_1.default(tree, 'heading', (x, ancestors) => {
42
+ visitParents(tree, 'heading', (x, ancestors) => {
38
43
  if (ancestors.length > 1) {
39
44
  return;
40
45
  }
41
46
  // capture name
42
47
  let name = "";
43
- unist_util_visit_parents_1.default(x, 'text', t => {
48
+ visitParents(x, 'text', t => {
44
49
  name = `${name} ${t.value}`;
45
50
  });
46
51
  name = name.trim();
47
52
  // capture children belonging to this heading group
48
- const nextHeading = unist_util_find_after_1.default(tree, x, 'heading');
49
- const children = nextHeading !== null ? unist_util_find_all_between_1.default(tree, x, nextHeading) : unist_util_find_all_after_1.default(tree, x);
53
+ const nextHeading = findAfter(tree, x, 'heading');
54
+ const children = nextHeading ? childrenBetween(tree, x, nextHeading) : findAllAfter(tree, x);
50
55
  if (name === "QUESTMARK-OPTIONS-HEADER") {
51
56
  root.options = getQuestmarkOptions(children);
52
57
  }
@@ -56,14 +61,14 @@ function parseMarkdown(file_contents) {
56
61
  });
57
62
  function getQuestmarkOptions(children) {
58
63
  let code = '';
59
- unist_util_visit_1.default(unist_builder_1.default('bla', children), 'code', n => {
64
+ visit(u('bla', children), 'code', (n) => {
60
65
  code = `${code} ${n.value}`;
61
66
  });
62
67
  return JSON.parse(code.trim());
63
68
  }
64
69
  function createStateNode(name, children) {
65
70
  // create new state node
66
- const stateNode = unist_builder_1.default('state', { name, options: [] }, []);
71
+ const stateNode = u('state', { name, options: [] }, []);
67
72
  let found = false;
68
73
  let stateChildren = [];
69
74
  let remainingChildren = [];
@@ -102,13 +107,13 @@ function parseMarkdown(file_contents) {
102
107
  const options = remainingChildren.map((li) => {
103
108
  // li's `link` / `text` children are the main links / options, but only the first item is considered (the others are effect nodes)
104
109
  // li's `inlineCode` children are either precondition or effect code blocks
105
- const optionNode = unist_builder_1.default("option", { preconditionChildren: null, effectChildren: null, text: null, link: null, directives: null });
110
+ const optionNode = u("option", { preconditionChildren: null, effectChildren: null, text: null, link: null, directives: null });
106
111
  let effectNodes = [];
107
112
  let preconditionNodes = [];
108
113
  let text = [];
109
114
  let link = [];
110
115
  let directives = [];
111
- unist_util_visit_1.default(li, n => {
116
+ visit(li, (n) => {
112
117
  if (text.length > 0 && n.type !== "paragraph") {
113
118
  if (n.type === "text" && n.value && n.value.trim().length === 0) {
114
119
  // whitespace only node!
@@ -163,7 +168,7 @@ function parseMarkdown(file_contents) {
163
168
  stateNode.options = options;
164
169
  return stateNode;
165
170
  }
166
- const qvmState = unist_builder_1.default("questmarkVMState", {
171
+ const qvmState = u("questmarkVMState", {
167
172
  stack: [],
168
173
  context: {},
169
174
  programList: [],
@@ -209,18 +214,18 @@ function parseMarkdown(file_contents) {
209
214
  if (node.options["initial-context"]) {
210
215
  Object.entries(node.options["initial-context"]).forEach(entry => {
211
216
  if (typeof entry[1] === "string") {
212
- q(tzo_1.pushString(entry[1]));
217
+ q(pushString(entry[1]));
213
218
  }
214
219
  else if (typeof entry[1] === "number") {
215
- q(tzo_1.pushNumber(entry[1]));
220
+ q(pushNumber(entry[1]));
216
221
  }
217
- q(tzo_1.pushString(entry[0]));
218
- q(tzo_1.invokeFunction("setContext"));
222
+ q(pushString(entry[0]));
223
+ q(invokeFunction("setContext"));
219
224
  });
220
225
  }
221
226
  if (node.options["initial-state"]) {
222
- q(tzo_1.pushString(node.options["initial-state"]));
223
- q(tzo_1.invokeFunction("goto"));
227
+ q(pushString(node.options["initial-state"]));
228
+ q(invokeFunction("goto"));
224
229
  }
225
230
  if (node.options["options"]) {
226
231
  if (node.options["options"]["no_link_behaviour"]) {
@@ -256,15 +261,15 @@ function parseMarkdown(file_contents) {
256
261
  const nodeLabel = node.name;
257
262
  const nodeOptionsLabel = node.name + "__options";
258
263
  qvmState.labelMap[nodeLabel] = qvmState.programList.length;
259
- unist_util_visit_1.default(node, visitorFunc); // parse children immediately, before we parse the node's options
264
+ visit(node, visitorFunc); // parse children immediately, before we parse the node's options
260
265
  // if there are any missing emits, perform them now
261
266
  if (missed_emits > 0) {
262
267
  while (missed_emits > 1) {
263
- q(tzo_1.invokeFunction("rconcat"));
268
+ q(invokeFunction("rconcat"));
264
269
  missed_emits -= 1;
265
270
  }
266
271
  missed_emits = 0;
267
- q(tzo_1.invokeFunction("emit")); // need to still emit!
272
+ q(invokeFunction("emit")); // need to still emit!
268
273
  }
269
274
  qvmState.labelMap[nodeOptionsLabel] = qvmState.programList.length; // add a label immediately after the node's options to be able to shortcut jump to in certain cases
270
275
  node.options.forEach(option => {
@@ -277,10 +282,10 @@ function parseMarkdown(file_contents) {
277
282
  last_once_directive_nr += 1;
278
283
  }
279
284
  if (has_once_directive) {
280
- q(tzo_1.pushString(once_directive_name));
281
- q(tzo_1.invokeFunction("hasContext"));
282
- q(tzo_1.invokeFunction("jz"));
283
- q(tzo_1.invokeFunction("{")); // once directive block start
285
+ q(pushString(once_directive_name));
286
+ q(invokeFunction("hasContext"));
287
+ q(invokeFunction("jz"));
288
+ q(invokeFunction("{")); // once directive block start
284
289
  }
285
290
  if (option.preconditionChildren !== null) {
286
291
  has_precondition = true;
@@ -294,25 +299,25 @@ function parseMarkdown(file_contents) {
294
299
  });
295
300
  }
296
301
  if (has_precondition) {
297
- q(tzo_1.invokeFunction("jgz"));
298
- q(tzo_1.invokeFunction("{")); // precondition block start
302
+ q(invokeFunction("jgz"));
303
+ q(invokeFunction("{")); // precondition block start
299
304
  }
300
305
  if (option.text !== null) {
301
306
  if (option.text.includes("`")) {
302
307
  // TODO: support inlineCode in options. Can do via `concat`.
303
308
  console.warn("WARN: Option text contains a backtick. Inline code elements in option blocks is currently not supported!");
304
309
  }
305
- q(tzo_1.pushString(option.text));
310
+ q(pushString(option.text));
306
311
  }
307
- q(tzo_1.invokeFunction("ppc")); // push address of effect body to stack
308
- q(tzo_1.pushNumber(4));
309
- q(tzo_1.invokeFunction("+"));
310
- q(tzo_1.invokeFunction("{")); // effect body start
312
+ q(invokeFunction("ppc")); // push address of effect body to stack
313
+ q(pushNumber(4));
314
+ q(invokeFunction("+"));
315
+ q(invokeFunction("{")); // effect body start
311
316
  if (has_once_directive) {
312
317
  // set the once directive context variable immediatley
313
- q(tzo_1.pushNumber(1));
314
- q(tzo_1.pushString(once_directive_name));
315
- q(tzo_1.invokeFunction("setContext"));
318
+ q(pushNumber(1));
319
+ q(pushString(once_directive_name));
320
+ q(invokeFunction("setContext"));
316
321
  }
317
322
  if (option.effectChildren !== null) {
318
323
  option.effectChildren.forEach(child => {
@@ -327,13 +332,13 @@ function parseMarkdown(file_contents) {
327
332
  }
328
333
  else {
329
334
  let t = getText(child);
330
- q(tzo_1.pushString(fixText(child), t));
335
+ q(pushString(fixText(child), t));
331
336
  if (emitOn === EmitOn.CLASSIC || (emitOn === EmitOn.END_OF_LINE && t.replace(/[\t\f\v ]+$/, "").endsWith('\n'))) {
332
337
  while (missed_emits > 0) {
333
- q(tzo_1.invokeFunction("rconcat"));
338
+ q(invokeFunction("rconcat"));
334
339
  missed_emits -= 1;
335
340
  }
336
- q(tzo_1.invokeFunction("emit"));
341
+ q(invokeFunction("emit"));
337
342
  }
338
343
  else {
339
344
  missed_emits += 1;
@@ -344,36 +349,36 @@ function parseMarkdown(file_contents) {
344
349
  // if there are any missing emits, perform them now before we close off this option effect body
345
350
  if (missed_emits > 0) {
346
351
  while (missed_emits > 1) {
347
- q(tzo_1.invokeFunction("rconcat"));
352
+ q(invokeFunction("rconcat"));
348
353
  missed_emits -= 1;
349
354
  }
350
355
  missed_emits = 0;
351
- q(tzo_1.invokeFunction("emit")); // need to still emit!
356
+ q(invokeFunction("emit")); // need to still emit!
352
357
  }
353
358
  if (option.link !== null) {
354
- q(tzo_1.pushString(option.link.substr(1)));
355
- q(tzo_1.invokeFunction("goto"));
359
+ q(pushString(option.link.substr(1)));
360
+ q(invokeFunction("goto"));
356
361
  }
357
362
  if (noLinkBehaviour === NoLinkBehaviour.LOOPBACK_TO_OPTIONS) {
358
- q(tzo_1.pushString(nodeOptionsLabel)); // ensure that options with no link or "goto" effect loop back to the options
359
- q(tzo_1.invokeFunction("goto"));
363
+ q(pushString(nodeOptionsLabel)); // ensure that options with no link or "goto" effect loop back to the options
364
+ q(invokeFunction("goto"));
360
365
  }
361
366
  else if (noLinkBehaviour === NoLinkBehaviour.EXIT) {
362
- q(tzo_1.invokeFunction("exit")); // ensure that options with no effect or link cause the VM to exit
367
+ q(invokeFunction("exit")); // ensure that options with no effect or link cause the VM to exit
363
368
  }
364
- q(tzo_1.invokeFunction("}")); // effect body end
365
- q(tzo_1.invokeFunction("response"));
369
+ q(invokeFunction("}")); // effect body end
370
+ q(invokeFunction("response"));
366
371
  if (has_once_directive) {
367
372
  // when there was a once directive, ensure we close its block
368
- q(tzo_1.invokeFunction("}")); // once directive block end
373
+ q(invokeFunction("}")); // once directive block end
369
374
  }
370
375
  if (has_precondition) {
371
376
  // when there was a precondition, ensure we close the precondition block
372
- q(tzo_1.invokeFunction("}")); // precondition block end
377
+ q(invokeFunction("}")); // precondition block end
373
378
  }
374
379
  });
375
- q(tzo_1.invokeFunction("getResponse")); // getResponse is expected to pause the VM and push the relevant programlist index onto the stack
376
- q(tzo_1.invokeFunction("goto")); // goto whatever was pushed onto the stack by getResponse
380
+ q(invokeFunction("getResponse")); // getResponse is expected to pause the VM and push the relevant programlist index onto the stack
381
+ q(invokeFunction("goto")); // goto whatever was pushed onto the stack by getResponse
377
382
  return "skip";
378
383
  // children have been parsed earlier
379
384
  break;
@@ -386,13 +391,13 @@ function parseMarkdown(file_contents) {
386
391
  break;
387
392
  case "text":
388
393
  let t = getText(node);
389
- q(tzo_1.pushString(fixText(node), t));
394
+ q(pushString(fixText(node), t));
390
395
  if (emitOn === EmitOn.CLASSIC || (emitOn === EmitOn.END_OF_LINE && t.replace(/[\t\f\v ]+$/, "").endsWith('\n'))) {
391
396
  while (missed_emits > 0) {
392
- q(tzo_1.invokeFunction("rconcat"));
397
+ q(invokeFunction("rconcat"));
393
398
  missed_emits -= 1;
394
399
  }
395
- q(tzo_1.invokeFunction("emit"));
400
+ q(invokeFunction("emit"));
396
401
  }
397
402
  else {
398
403
  missed_emits += 1;
@@ -402,12 +407,11 @@ function parseMarkdown(file_contents) {
402
407
  break;
403
408
  }
404
409
  };
405
- unist_util_visit_1.default(root, visitorFunc);
406
- q(tzo_1.invokeFunction("exit")); // ensure we always exit at the end
410
+ visit(root, visitorFunc);
411
+ q(invokeFunction("exit")); // ensure we always exit at the end
407
412
  return {
408
- parsedMDFile: unist_util_remove_position_1.default(root, true),
413
+ parsedMDFile: removePosition(root, { force: true }),
409
414
  qvmState
410
415
  };
411
416
  }
412
- exports.parseMarkdown = parseMarkdown;
413
417
  //# sourceMappingURL=parseMarkdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseMarkdown.js","sourceRoot":"","sources":["../../src/parseMarkdown.ts"],"names":[],"mappings":";;;;;;AACA,wFAAoD;AACpD,kFAA8C;AAC9C,4FAAwD;AACxD,0FAAqD;AACrD,8FAAyD;AAEzD,wFAAoD;AACpD,wEAAkD;AAClD,kEAA8B;AAC9B,+BAA6B;AAE7B,6BAAwE;AAexE,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,qDAAQ,CAAA;IACR,mFAAuB,CAAA,CAAC,gJAAgJ;AAC1K,CAAC,EAHW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAG1B;AAED,IAAK,MAGJ;AAHD,WAAK,MAAM;IACT,yCAAW,CAAA;IACX,iDAAe,CAAA;AACjB,CAAC,EAHI,MAAM,KAAN,MAAM,QAGV;AAED,SAAgB,aAAa,CAAC,aAAqB;IACjD,MAAM,IAAI,GAAG,kCAAY,CAAC,aAAa,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,eAAS,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,uBAAC,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,sBAAsB,GAAG,CAAC,CAAC;IAC/B,IAAI,eAAe,GAAG,eAAe,CAAC,mBAAmB,CAAC;IAC1D,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC5B,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,sBAAsB,GAAG,KAAK,CAAC;IACnC,kCAAY,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE;QAC7C,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACxB,OAAO;SACR;QAED,eAAe;QACf,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,kCAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE;YAC1B,IAAI,GAAG,GAAG,IAAI,IAAK,CAAS,CAAC,KAAK,EAAE,CAAA;QACtC,CAAC,CAAC,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAEnB,mDAAmD;QACnD,MAAM,WAAW,GAAG,+BAAS,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,qCAAc,CAAC,IAAI,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,mCAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAErG,IAAI,IAAI,KAAK,0BAA0B,EAAE;YACvC,IAAI,CAAC,OAAO,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;SAC9C;aAAM;YACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;SACrD;IACH,CAAC,CAAC,CAAC;IAEH,SAAS,mBAAmB,CAAC,QAAgB;QAC3C,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,0BAAK,CAAC,uBAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE;YACpC,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,SAAS,eAAe,CAAC,IAAY,EAAE,QAAgB;QACrD,wBAAwB;QACxB,MAAM,SAAS,GAAG,uBAAC,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAGxD,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,aAAa,GAAG,EAAE,CAAC;QACvB,IAAI,iBAAiB,GAAG,EAAE,CAAC;QAC3B,qEAAqE;QACrE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACvB,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,EAAE;gBACpD,KAAK,GAAG,IAAI,CAAC;aACd;YACD,IAAI,KAAK,EAAE;gBACT,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC/B;iBAAM;gBACL,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC3B;QACH,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,QAAQ,GAAG,aAAa,CAAC;QAEnC,yEAAyE;QACzE,iBAAiB,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAChD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,EAAE;gBACpD,OAAO,KAAK,CAAC,QAAQ,CAAC;aACvB;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEX,kEAAkE;QAClE,IAAI,gBAAgB,GAAG,IAAI,CAAC;QAC5B,iBAAiB,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAChD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE;gBAC7B,gBAAgB,GAAG,KAAK,CAAC;gBACzB,OAAO,KAAK,CAAC;aACd;iBAAM;gBACL,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACvC;QACH,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QAEhC,4EAA4E;QAC5E,MAAM,OAAO,GAAW,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAU,EAAE,EAAE;YAC3D,kIAAkI;YAClI,2EAA2E;YAC3E,MAAM,UAAU,GAAe,uBAAC,CAAC,QAAQ,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3I,IAAI,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,iBAAiB,GAAG,EAAE,CAAC;YAC3B,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,0BAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACZ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE;oBAC7C,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,IAAK,CAAC,CAAC,KAAgB,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;wBAC3E,wBAAwB;qBACzB;yBAAM;wBACL,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACrB;iBACF;gBAED,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;oBACrB,IAAI,CAAC,CAAC,KAAK,IAAK,CAAC,CAAC,KAAgB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;wBACzE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;qBACpB;iBACF;gBACD,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;oBACrB,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;wBAC9B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;qBAClB;iBACF;gBAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE;oBAChD,IAAK,CAAC,CAAC,KAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;wBACvC,4BAA4B;wBAC3B,CAAC,CAAC,KAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;qBACnF;yBAAM;wBACL,qCAAqC;wBACrC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBAC3B;iBACF;YACH,CAAC,CAAC,CAAC;YACH,UAAU,CAAC,oBAAoB,GAAG,iBAAiB,CAAC;YACpD,UAAU,CAAC,cAAc,GAAG,WAAW,CAAC;YACxC,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC;YACnC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACxC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBAChC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;aACxB;YACD,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBAChC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;aACxB;YACD,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;aAC9B;YACD,IAAI,UAAU,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE;gBAChD,UAAU,CAAC,oBAAoB,GAAG,IAAI,CAAC;aACxC;YACD,IAAI,UAAU,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1C,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC;aAClC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,uBAAC,CAAC,kBAAkB,EAAE;QACrC,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,EAAE;QACf,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,CAAC;QACjB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;KACC,EAAE,EAAE,CAAC,CAAC;IAErB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE;QACd,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAA;IACD,MAAM,WAAW,GAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACzD,IAAI,OAAO,GAAG,CAAC,CAAO,EAAE,EAAE;YACxB,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,gBAAgB,EAAE;gBACpB,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;aAChF;iBAAM;gBACL,IAAI,GAAG,CAAC,CAAC,KAAe,CAAC;aAC1B;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAA;QAED,IAAI,OAAO,GAAG,CAAC,CAAO,EAAE,EAAE;YACxB,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5F,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;aACtB;YACD,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAC5K,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAC1D,IAAI,GAAG,IAAI,IAAI,GAAG,CAAC;aACpB;YACD,IAAI,sBAAsB,EAAE;gBAC1B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;aACrC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAA;QAED,IAAI,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE;YAC7D,OAAO;SACR;QACD,QAAQ,IAAI,CAAC,IAAI,EAAE;YACjB,KAAK,mBAAmB;gBACtB,IAAI,IAAI,CAAC,OAAO,EAAE;oBAChB,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE;wBACnC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;4BAC9D,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;gCAChC,CAAC,CAAC,gBAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;6BACzB;iCAAM,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;gCACvC,CAAC,CAAC,gBAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;6BACzB;4BACD,CAAC,CAAC,gBAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BACxB,CAAC,CAAC,oBAAc,CAAC,YAAY,CAAC,CAAC,CAAC;wBAClC,CAAC,CAAC,CAAA;qBACH;oBACD,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;wBACjC,CAAC,CAAC,gBAAU,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;wBAC7C,CAAC,CAAC,oBAAc,CAAC,MAAM,CAAC,CAAC,CAAC;qBAC3B;oBACD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;wBAC3B,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,EAAE;4BAChD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,KAAK,MAAM,EAAE;gCAC3D,eAAe,GAAG,eAAe,CAAC,IAAI,CAAA;6BACvC;iCAAM,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,KAAK,qBAAqB,EAAE;gCACjF,eAAe,GAAG,eAAe,CAAC,mBAAmB,CAAA;6BACtD;iCAAM;gCACL,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;6BACzG;yBACF;wBAED,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,EAAE;4BACzC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,KAAK,QAAQ,EAAE;gCACtD,gBAAgB,GAAG,IAAI,CAAC;6BACzB;yBACF;wBAED,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,EAAE;4BACtC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,KAAK,aAAa,EAAE;gCACxD,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;6BAC7B;yBACF;wBAED,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,wBAAwB,CAAC,EAAE;4BACrD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE;gCAC9D,sBAAsB,GAAG,IAAI,CAAC;6BAC/B;yBACF;qBACF;iBACF;gBACD,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,SAAS,GAAG,IAAI,CAAC,IAAc,CAAC;gBACtC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,GAAG,WAAqB,CAAC;gBAC3D,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;gBAC3D,0BAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,iEAAiE;gBAC3F,mDAAmD;gBACnD,IAAI,YAAY,GAAG,CAAC,EAAE;oBACpB,OAAM,YAAY,GAAG,CAAC,EAAE;wBACtB,CAAC,CAAC,oBAAc,CAAC,SAAS,CAAC,CAAC,CAAC;wBAC7B,YAAY,IAAI,CAAC,CAAC;qBACnB;oBACD,YAAY,GAAG,CAAC,CAAC;oBACjB,CAAC,CAAC,oBAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,sBAAsB;iBAClD;gBACD,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,mGAAmG;gBACrK,IAAI,CAAC,OAAwB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;oBAC9C,IAAI,gBAAgB,GAAG,KAAK,CAAC;oBAC7B,IAAI,kBAAkB,GAAG,KAAK,CAAC;oBAC/B,IAAI,mBAAmB,GAAG,IAAI,CAAC;oBAE/B,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;wBACrE,kBAAkB,GAAG,IAAI,CAAC;wBAC1B,mBAAmB,GAAG,WAAW,sBAAsB,EAAE,CAAC;wBAC1D,sBAAsB,IAAI,CAAC,CAAC;qBAC7B;oBACD,IAAI,kBAAkB,EAAE;wBACtB,CAAC,CAAC,gBAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC;wBACnC,CAAC,CAAC,oBAAc,CAAC,YAAY,CAAC,CAAC,CAAC;wBAChC,CAAC,CAAC,oBAAc,CAAC,IAAI,CAAC,CAAC,CAAC;wBACxB,CAAC,CAAC,oBAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,6BAA6B;qBACtD;oBACD,IAAI,MAAM,CAAC,oBAAoB,KAAK,IAAI,EAAE;wBACxC,gBAAgB,GAAG,IAAI,CAAC;wBACxB,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;4BAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;gCAC/B,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;6BAC3D;iCAAM;gCACL,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;6BACpF;wBACH,CAAC,CAAC,CAAA;qBACH;oBACD,IAAI,gBAAgB,EAAE;wBACpB,CAAC,CAAC,oBAAc,CAAC,KAAK,CAAC,CAAC,CAAC;wBACzB,CAAC,CAAC,oBAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,2BAA2B;qBACpD;oBACD,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;wBACxB,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;4BAC7B,4DAA4D;4BAC5D,OAAO,CAAC,IAAI,CAAC,0GAA0G,CAAC,CAAC;yBAC1H;wBACD,CAAC,CAAC,gBAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;qBAC3B;oBACD,CAAC,CAAC,oBAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,uCAAuC;oBACjE,CAAC,CAAC,gBAAU,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjB,CAAC,CAAC,oBAAc,CAAC,GAAG,CAAC,CAAC,CAAC;oBACvB,CAAC,CAAC,oBAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB;oBAC5C,IAAI,kBAAkB,EAAE;wBACtB,sDAAsD;wBACtD,CAAC,CAAC,gBAAU,CAAC,CAAC,CAAC,CAAC,CAAA;wBAChB,CAAC,CAAC,gBAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC;wBACnC,CAAC,CAAC,oBAAc,CAAC,YAAY,CAAC,CAAC,CAAC;qBACjC;oBACD,IAAI,MAAM,CAAC,cAAc,KAAK,IAAI,EAAE;wBAClC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;4BACpC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;gCAC/B,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;6BAC3D;iCAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;gCAChC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;oCAC5B,OAAO;iCACR;gCACD,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;6BAC3D;iCAAM;gCACL,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;gCACvB,CAAC,CAAC,gBAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gCACjC,IAAI,MAAM,KAAK,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;oCAC/G,OAAO,YAAY,GAAG,CAAC,EAAE;wCACvB,CAAC,CAAC,oBAAc,CAAC,SAAS,CAAC,CAAC,CAAC;wCAC7B,YAAY,IAAI,CAAC,CAAC;qCACnB;oCACD,CAAC,CAAC,oBAAc,CAAC,MAAM,CAAC,CAAC,CAAC;iCAC3B;qCAAM;oCACL,YAAY,IAAI,CAAC,CAAC;iCACnB;6BACF;wBACH,CAAC,CAAC,CAAA;qBACH;oBAED,+FAA+F;oBAC/F,IAAI,YAAY,GAAG,CAAC,EAAE;wBACpB,OAAM,YAAY,GAAG,CAAC,EAAE;4BACtB,CAAC,CAAC,oBAAc,CAAC,SAAS,CAAC,CAAC,CAAC;4BAC7B,YAAY,IAAI,CAAC,CAAC;yBACnB;wBACD,YAAY,GAAG,CAAC,CAAC;wBACjB,CAAC,CAAC,oBAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,sBAAsB;qBAClD;oBAED,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;wBACxB,CAAC,CAAC,gBAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACrC,CAAC,CAAC,oBAAc,CAAC,MAAM,CAAC,CAAC,CAAC;qBAC3B;oBACD,IAAI,eAAe,KAAK,eAAe,CAAC,mBAAmB,EAAE;wBAC3D,CAAC,CAAC,gBAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,6EAA6E;wBAC9G,CAAC,CAAC,oBAAc,CAAC,MAAM,CAAC,CAAC,CAAC;qBAC3B;yBAAM,IAAI,eAAe,KAAK,eAAe,CAAC,IAAI,EAAE;wBACnD,CAAC,CAAC,oBAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,kEAAkE;qBAC9F;oBACD,CAAC,CAAC,oBAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB;oBAC1C,CAAC,CAAC,oBAAc,CAAC,UAAU,CAAC,CAAC,CAAC;oBAC9B,IAAI,kBAAkB,EAAE;wBACtB,6DAA6D;wBAC7D,CAAC,CAAC,oBAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,2BAA2B;qBACpD;oBACD,IAAI,gBAAgB,EAAE;wBACpB,wEAAwE;wBACxE,CAAC,CAAC,oBAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB;qBAClD;gBACH,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,oBAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,iGAAiG;gBACnI,CAAC,CAAC,oBAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,yDAAyD;gBACpF,OAAO,MAAM,CAAC;gBACd,oCAAoC;gBACpC,MAAM;YACR,KAAK,YAAY,CAAC;YAClB,KAAK,MAAM;gBACT,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;oBAC3B,MAAM;iBACP;gBACD,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzD,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC,CAAC,gBAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAI,MAAM,KAAK,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;oBAC/G,OAAO,YAAY,GAAG,CAAC,EAAE;wBACvB,CAAC,CAAC,oBAAc,CAAC,SAAS,CAAC,CAAC,CAAC;wBAC7B,YAAY,IAAI,CAAC,CAAC;qBACnB;oBACD,CAAC,CAAC,oBAAc,CAAC,MAAM,CAAC,CAAC,CAAC;iBAC3B;qBAAM;oBACL,YAAY,IAAI,CAAC,CAAC;iBACnB;gBACD,MAAM;YACR;gBACE,MAAM;SACT;IACH,CAAC,CAAC;IACF,0BAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACzB,CAAC,CAAC,oBAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,mCAAmC;IAE9D,OAAO;QACL,YAAY,EAAE,oCAAc,CAAC,IAAI,EAAE,IAAI,CAAC;QACxC,QAAQ;KACT,CAAA;AACH,CAAC;AAxYD,sCAwYC"}
1
+ {"version":3,"file":"parseMarkdown.js","sourceRoot":"","sources":["../../src/parseMarkdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ # How Questmark works
2
+
3
+ Questmark is a compiler and an interpreter. A document goes through a
4
+ pipeline:
5
+
6
+ ```
7
+ Markdown document
8
+ │ mdast-util-from-markdown
9
+ ▼
10
+ mdast AST (generic Markdown tree)
11
+ │ visit headings, collect children
12
+ ▼
13
+ Questmark tree (states, options, headers)
14
+ │ visit nodes, tokenize Tzo code
15
+ ▼
16
+ Tzo bytecode (VMState: programList + labelMap)
17
+ │ QuestVM (a Tzo VM)
18
+ ▼
19
+ A running conversation
20
+ ```
21
+
22
+ ## 1. From Markdown to a Questmark tree
23
+
24
+ The compiler first parses the document with
25
+ [`mdast-util-from-markdown`](https://www.npmjs.com/package/mdast-util-from-markdown),
26
+ producing a standard Markdown abstract syntax tree.
27
+
28
+ It then walks that tree. Every top-level `# heading` starts a **state**, and
29
+ everything between one heading and the next belongs to that state. One heading
30
+ is special: `QUESTMARK-OPTIONS-HEADER`. Its indented code block is parsed as
31
+ JSON and supplies the document's configuration — the initial state, the initial
32
+ context, and interpreter behaviour flags.
33
+
34
+ Each state's children are split into two parts:
35
+
36
+ - the **text**, everything before the first list, and
37
+ - the **options**, the list items themselves.
38
+
39
+ Each option is decomposed further: backticked code *before* the option's text
40
+ becomes a **precondition** or a **directive** (like `@once`); the option's text
41
+ and link are kept as the label and target; backticked code *after* the text,
42
+ and paragraphs following the option line, become its **effect** and its
43
+ **post-option text**.
44
+
45
+ The result is a small custom tree of `state` and `option` nodes, built with
46
+ [`unist-builder`](https://www.npmjs.com/package/unist-builder) so that it
47
+ benefits from the unist ecosystem's visitor utilities.
48
+
49
+ ## 2. From the tree to Tzo bytecode
50
+
51
+ The compiler visits that tree with [`unist-util-visit`](https://www.npmjs.com/package/unist-util-visit)
52
+ and emits instructions into a flat program list, using Tzo's `Tokenizer` to
53
+ turn each snippet of backticked code into instructions.
54
+
55
+ Text nodes become `pushString` + `emit`. Inline code becomes the tokenized
56
+ instructions directly. Each state registers two positions in the program's
57
+ `labelMap`: one for the state itself, and one for its `__options` menu (used to
58
+ loop back to the options after an effect).
59
+
60
+ An option compiles to roughly this shape:
61
+
62
+ ```
63
+ pushString "Order a drink" ; the label, shown in the menu
64
+ ppc 4 + { ...effect... } ; the effect body, entered when chosen
65
+ response ; register the choice with the player
66
+ ```
67
+
68
+ Preconditions and the `@once` directive wrap the option in a conditional block:
69
+
70
+ ```
71
+ ...precondition code... jgz { ...option... }
72
+ ```
73
+
74
+ The block delimiters `{` and `}` are real instructions: `jgz` (and `jz`) skip
75
+ the *next* instruction when their test passes, and `{` scans forward and jumps
76
+ past its matching `}`. So a precondition leaves a value on the stack; if it is
77
+ greater than zero the `jgz` skips the `{` and the option body runs, otherwise
78
+ the `{` jumps to the end of the block and the option is never offered. `@once`
79
+ works the same way, keyed on an internal `__once__N` context variable.
80
+
81
+ The whole document compiles to a **VMState**: the `programList`, the
82
+ `labelMap`, and the initial `context`, which is populated from
83
+ `initial-context` by a sequence of `setContext` instructions at the top of the
84
+ program.
85
+
86
+ ## 3. Interpreting with QuestVM
87
+
88
+ [`QuestVM`](../reference/api.md) extends Tzo's `VM`. It registers the three
89
+ opcodes that make a conversation interactive:
90
+
91
+ - **`emit`** calls the host's text callback. A single state can emit several
92
+ chunks — text, a number from `getContext`, more text — which is why a host
93
+ typically concatenates them.
94
+ - **`response`** records the position of an option's effect body, along with
95
+ its label, as a candidate choice.
96
+ - **`getResponse`** suspends the VM and hands the collected choices to the
97
+ host. When the host returns the chosen option's id, the VM pushes the saved
98
+ program position and resumes — executing that option's effect and following
99
+ its `goto`/`exit`.
100
+
101
+ Because choices are only recorded inside their precondition blocks, options
102
+ that are hidden by preconditions never reach the host. The interpreter never
103
+ needs to know *why* an option is hidden; the compiled bytecode handles it.
104
+
105
+ ## The two behaviours worth knowing about
106
+
107
+ - **No-link options.** When a chosen option has no link and no effect, the
108
+ compiled code either jumps back to the state's `__options` label
109
+ (`loopback_to_options`, the default) or exits the conversation (`exit`),
110
+ depending on the header flag. With loopback, an option that is always
111
+ available and always chosen will loop forever — which is correct, but can
112
+ surprise new authors.
113
+ - **Persistence.** The compiled VMState is plain JSON. It can be written out
114
+ and reloaded later, which is how the CLI's `--output`/`--no-run` flow works:
115
+ compile once, ship the JSON, interpret it in a game or a web page without
116
+ needing the compiler at runtime.
117
+
118
+ ## See also
119
+
120
+ - [Why Questmark?](why-questmark.md) — the problem this design is answering.
121
+ - [Language reference](../reference/language.md) — what you can write.
122
+ - [Tzo](https://github.com/jorisvddonk/tzo) — the bytecode and VM Questmark
123
+ is built on.
@@ -0,0 +1,72 @@
1
+ # Why Questmark?
2
+
3
+ Questmark exists to solve a specific problem in game dialogue and interactive
4
+ fiction production.
5
+
6
+ ## The problem
7
+
8
+ Dialogue systems in modern games need to do two very different things at once:
9
+
10
+ - represent a **conversation graph** — the branching structure of what can be
11
+ said, and
12
+ - trigger **side effects** in the game world — flags, items, faction changes —
13
+ when the player chooses something.
14
+
15
+ That means the people writing dialogue prose need to know how to *write prose*,
16
+ and the people implementing side effects need to know how to *program*. These
17
+ are rarely the same people, and the tools tend to favour one or the other:
18
+
19
+ - A scripting language with an associated editor attracts programmers. Prose
20
+ authors either learn to program, or keep writing in Word documents.
21
+ - Proprietary, editor-bound dialogue tools make dialogue hard or impossible to
22
+ merge, diff, and version in source control.
23
+
24
+ ## The shared language: Markdown
25
+
26
+ Almost every writer and every programmer already knows Markdown, or one of its
27
+ modern dialects. Questmark leans on that shared knowledge: **every
28
+ properly-structured Markdown document with headers and in-document links is
29
+ already a Questmark document.**
30
+
31
+ - Dialogue trees and quests are expressed with ordinary Markdown — headings,
32
+ lists, and links.
33
+ - Questmark-specific behaviour is added with small, backticked snippets of code
34
+ where authors and programmers agree it's needed.
35
+ - Comments and annotations from writers and reviewers are simply Markdown that
36
+ the Questmark compiler ignores.
37
+
38
+ ## The workflow Questmark enables
39
+
40
+ 1. **Authors** write dialogue trees in Markdown, which can be demoed
41
+ interactively — by interpreting it as HTML, by running it in a simple
42
+ Questmark runner, or by running it inside a game engine.
43
+ 2. **Reviewers** add comments and feedback in the same document, without
44
+ affecting what the interpreter produces.
45
+ 3. **Gameplay programmers** add interactivity where it's needed — no more than
46
+ where it's needed.
47
+ 4. **Authors** can edit prose freely without disturbing the dialogue's
48
+ interactivity, and programmers can adjust logic without touching the prose.
49
+ 5. The game ships.
50
+
51
+ Because Questmark documents are plain text, they sit happily under revision
52
+ control, where they can be reviewed, merged, and diffed like any other code.
53
+
54
+ ## Where Questmark stands today
55
+
56
+ Questmark is a proof of concept implemented in TypeScript. The spec is still
57
+ informal and the feature set is still settling. The repository includes
58
+ compiler, interpreter, CLI, and a test suite; the companion
59
+ [questmark-webrenderer](https://github.com/jorisvddonk/questmark-webrenderer)
60
+ renders and plays documents in the browser.
61
+
62
+ Open questions the project is still working through:
63
+
64
+ - How should inline HTML be treated?
65
+ - How can the compiler be extended with custom directives and macros?
66
+ - How can a document be translated to another language while keeping its
67
+ scripting logic intact and easy to modify?
68
+
69
+ ## See also
70
+
71
+ - [How Questmark works](how-questmark-works.md) — the pipeline from Markdown to
72
+ bytecode to a running conversation.
@@ -0,0 +1,62 @@
1
+ # How to compile a Questmark document to bytecode
2
+
3
+ Questmark compiles to [Tzo](https://github.com/jorisvddonk/tzo) bytecode. A
4
+ compiled document is a JSON file describing a complete VM state, which you can
5
+ store, inspect, or ship in a game.
6
+
7
+ ## Compile a document to JSON
8
+
9
+ ```bash
10
+ npx questmark --input path/to/document.md --output path/to/vmstate.json --no-run
11
+ ```
12
+
13
+ - `--input` — the Questmark document (local path or `http(s)://` URL).
14
+ - `--output` — where to write the compiled JSON.
15
+ - `--no-run` — parse and compile only; do not interpret the document.
16
+
17
+ The output is a JSON serialization of a Tzo `VMState`, containing the compiled
18
+ program, its label map, and the initial context. No interpreter is required to
19
+ produce or read this file.
20
+
21
+ ## Compile without writing a file
22
+
23
+ Omit `--output`. The CLI parses the document but discards the compiled state —
24
+ handy for checking that a document parses cleanly:
25
+
26
+ ```bash
27
+ npx questmark --input path/to/document.md --no-run
28
+ ```
29
+
30
+ ## Play a compiled document
31
+
32
+ You can interpret a compiled `.json` the same way you play a source document:
33
+
34
+ ```bash
35
+ npx questmark --input path/to/vmstate.json
36
+ ```
37
+
38
+ ## From the project directory
39
+
40
+ Inside a checkout of the repository the same commands are available via
41
+ `npm start`:
42
+
43
+ ```bash
44
+ npm start -- --input path/to/document.md --output path/to/vmstate.json --no-run
45
+ npm start -- --input path/to/vmstate.json
46
+ ```
47
+
48
+ ## What the compiled output looks like
49
+
50
+ A compiled VM state has these top-level fields:
51
+
52
+ | Field | Description |
53
+ | --- | --- |
54
+ | `programList` | The array of instructions in the compiled program. |
55
+ | `labelMap` | Maps state names (and state `__options` labels) to positions in `programList`. |
56
+ | `context` | The initial context bag of variables. |
57
+ | `stack` | The interpreter stack (empty at compile time). |
58
+ | `programCounter` | Where execution starts (0 at compile time). |
59
+ | `exit` / `pause` | Interpreter flags (both `false` at compile time). |
60
+
61
+ See the [explanation of how Questmark works](../explanation/how-questmark-works.md)
62
+ for what these instructions mean.