@the_dissidents/libemmm 0.0.3 → 0.0.5

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 (125) hide show
  1. package/README.md +6 -3
  2. package/dist/index.d.mts +23 -2
  3. package/dist/index.d.ts +23 -2
  4. package/dist/index.js +157 -33
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +157 -33
  7. package/dist/index.mjs.map +1 -1
  8. package/dist/src/builtin/builtin.d.ts +2 -0
  9. package/dist/src/builtin/builtin.js +18 -0
  10. package/dist/src/builtin/builtin.js.map +1 -0
  11. package/dist/src/builtin/define-modifier.d.ts +12 -0
  12. package/dist/src/builtin/define-modifier.js +129 -0
  13. package/dist/src/builtin/define-modifier.js.map +1 -0
  14. package/dist/src/builtin/define-shorthand.d.ts +14 -0
  15. package/dist/src/builtin/define-shorthand.js +178 -0
  16. package/dist/src/builtin/define-shorthand.js.map +1 -0
  17. package/dist/src/builtin/internal.d.ts +41 -0
  18. package/dist/src/builtin/internal.js +106 -0
  19. package/dist/src/builtin/internal.js.map +1 -0
  20. package/dist/src/builtin/module.d.ts +16 -0
  21. package/dist/src/builtin/module.js +156 -0
  22. package/dist/src/builtin/module.js.map +1 -0
  23. package/dist/src/builtin/slot.d.ts +7 -0
  24. package/dist/src/builtin/slot.js +136 -0
  25. package/dist/src/builtin/slot.js.map +1 -0
  26. package/dist/src/builtin/var.d.ts +12 -0
  27. package/dist/src/builtin/var.js +103 -0
  28. package/dist/src/builtin/var.js.map +1 -0
  29. package/dist/src/debug-print.d.ts +14 -0
  30. package/dist/src/debug-print.js +113 -0
  31. package/dist/src/debug-print.js.map +1 -0
  32. package/dist/src/debug.d.ts +15 -0
  33. package/dist/src/debug.js +47 -0
  34. package/dist/src/debug.js.map +1 -0
  35. package/dist/src/default/bullets.d.ts +4 -0
  36. package/dist/src/default/bullets.js +39 -0
  37. package/dist/src/default/bullets.js.map +1 -0
  38. package/dist/src/default/code.d.ts +6 -0
  39. package/dist/src/default/code.js +13 -0
  40. package/dist/src/default/code.js.map +1 -0
  41. package/dist/src/default/default.d.ts +2 -0
  42. package/dist/src/default/default.js +20 -0
  43. package/dist/src/default/default.js.map +1 -0
  44. package/dist/src/default/headings.d.ts +20 -0
  45. package/dist/src/default/headings.js +125 -0
  46. package/dist/src/default/headings.js.map +1 -0
  47. package/dist/src/default/html-renderer.d.ts +26 -0
  48. package/dist/src/default/html-renderer.js +108 -0
  49. package/dist/src/default/html-renderer.js.map +1 -0
  50. package/dist/src/default/inline-styles.d.ts +4 -0
  51. package/dist/src/default/inline-styles.js +24 -0
  52. package/dist/src/default/inline-styles.js.map +1 -0
  53. package/dist/src/default/misc.d.ts +6 -0
  54. package/dist/src/default/misc.js +112 -0
  55. package/dist/src/default/misc.js.map +1 -0
  56. package/dist/src/default/notes.d.ts +28 -0
  57. package/dist/src/default/notes.js +109 -0
  58. package/dist/src/default/notes.js.map +1 -0
  59. package/dist/src/default/quotes.d.ts +4 -0
  60. package/dist/src/default/quotes.js +36 -0
  61. package/dist/src/default/quotes.js.map +1 -0
  62. package/dist/src/default/vars.d.ts +2 -0
  63. package/dist/src/default/vars.js +39 -0
  64. package/dist/src/default/vars.js.map +1 -0
  65. package/dist/src/index.d.ts +13 -0
  66. package/dist/src/index.js +58 -0
  67. package/dist/src/index.js.map +1 -0
  68. package/dist/src/interface.d.ts +174 -0
  69. package/dist/src/interface.js +93 -0
  70. package/dist/src/interface.js.map +1 -0
  71. package/dist/src/messages.d.ts +165 -0
  72. package/dist/src/messages.js +279 -0
  73. package/dist/src/messages.js.map +1 -0
  74. package/dist/src/modifier-helper.d.ts +6 -0
  75. package/dist/src/modifier-helper.js +113 -0
  76. package/dist/src/modifier-helper.js.map +1 -0
  77. package/dist/src/parser-config.d.ts +44 -0
  78. package/dist/src/parser-config.js +67 -0
  79. package/dist/src/parser-config.js.map +1 -0
  80. package/dist/src/parser.d.ts +3 -0
  81. package/dist/src/parser.js +652 -0
  82. package/dist/src/parser.js.map +1 -0
  83. package/dist/src/renderer.d.ts +49 -0
  84. package/dist/src/renderer.js +81 -0
  85. package/dist/src/renderer.js.map +1 -0
  86. package/dist/src/scanner.d.ts +22 -0
  87. package/dist/src/scanner.js +50 -0
  88. package/dist/src/scanner.js.map +1 -0
  89. package/dist/src/temp.d.ts +1 -0
  90. package/dist/src/temp.js +108 -0
  91. package/dist/src/temp.js.map +1 -0
  92. package/dist/src/typing-helper.d.ts +7 -0
  93. package/dist/src/typing-helper.js +3 -0
  94. package/dist/src/typing-helper.js.map +1 -0
  95. package/dist/src/util.d.ts +29 -0
  96. package/dist/src/util.js +177 -0
  97. package/dist/src/util.js.map +1 -0
  98. package/dist/tests/advanced_syntax.test.d.ts +1 -0
  99. package/dist/tests/advanced_syntax.test.js +180 -0
  100. package/dist/tests/advanced_syntax.test.js.map +1 -0
  101. package/dist/tests/basic_syntax.test.d.ts +1 -0
  102. package/dist/tests/basic_syntax.test.js +431 -0
  103. package/dist/tests/basic_syntax.test.js.map +1 -0
  104. package/dist/tests/default/headings.test.d.ts +1 -0
  105. package/dist/tests/default/headings.test.js +90 -0
  106. package/dist/tests/default/headings.test.js.map +1 -0
  107. package/dist/tests/define_block.test.d.ts +1 -0
  108. package/dist/tests/define_block.test.js +209 -0
  109. package/dist/tests/define_block.test.js.map +1 -0
  110. package/dist/tests/define_inline.test.d.ts +1 -0
  111. package/dist/tests/define_inline.test.js +289 -0
  112. package/dist/tests/define_inline.test.js.map +1 -0
  113. package/dist/tests/modules.test.d.ts +1 -0
  114. package/dist/tests/modules.test.js +137 -0
  115. package/dist/tests/modules.test.js.map +1 -0
  116. package/dist/tests/shorthands.test.d.ts +1 -0
  117. package/dist/tests/shorthands.test.js +79 -0
  118. package/dist/tests/shorthands.test.js.map +1 -0
  119. package/dist/tsup.config.d.ts +2 -0
  120. package/dist/tsup.config.js +12 -0
  121. package/dist/tsup.config.js.map +1 -0
  122. package/dist/vitest.config.d.ts +2 -0
  123. package/dist/vitest.config.js +17 -0
  124. package/dist/vitest.config.js.map +1 -0
  125. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -36,11 +36,21 @@ var ModifierBase = class {
36
36
  if (args) Object.assign(this, args);
37
37
  }
38
38
  roleHint;
39
+ /**
40
+ * If true, any modifier encountered in the content of it will *not* be expanded, *unless* that modifier is `alwaysTryExpand`.
41
+ */
39
42
  delayContentExpansion = false;
43
+ /**
44
+ * If true, such a modifier will always be expanded whenever it is encountered, *even if* contained in a modifier with `delayContentExpansion`.
45
+ */
40
46
  alwaysTryExpand = false;
47
+ /** Called before the modifier's content is parsed. */
41
48
  beforeParseContent;
49
+ /** Called after the modifier's content is parsed. */
42
50
  afterParseContent;
51
+ /** Called before reparsing of the expansion. */
43
52
  beforeProcessExpansion;
53
+ /** Called before reparsing of the expansion. */
44
54
  afterProcessExpansion;
45
55
  prepareExpand;
46
56
  expand;
@@ -425,6 +435,7 @@ __export(messages_exports, {
425
435
  NoNestedModuleMessage: () => NoNestedModuleMessage,
426
436
  OnlySimpleParagraphsPermittedMessage: () => OnlySimpleParagraphsPermittedMessage,
427
437
  OverwriteDefinitionsMessage: () => OverwriteDefinitionsMessage,
438
+ OverwriteSpecialVariableMessage: () => OverwriteSpecialVariableMessage,
428
439
  ReachedRecursionLimitMessage: () => ReachedRecursionLimitMessage,
429
440
  SlotUsedOutsideDefinitionMessage: () => SlotUsedOutsideDefinitionMessage,
430
441
  UnclosedInlineModifierMessage: () => UnclosedInlineModifierMessage,
@@ -705,6 +716,18 @@ var OverwriteDefinitionsMessage = class {
705
716
  return `using this module will overwrite: ${this.what}`;
706
717
  }
707
718
  };
719
+ var OverwriteSpecialVariableMessage = class {
720
+ constructor(location, varname, previous) {
721
+ this.location = location;
722
+ this.varname = varname;
723
+ this.previous = previous;
724
+ }
725
+ code = 6;
726
+ severity = 1 /* Warning */;
727
+ get info() {
728
+ return `${this.varname} is already defined (as "${this.previous}"), will be overwritten`;
729
+ }
730
+ };
708
731
 
709
732
  // src/parser-config.ts
710
733
  var ParseContext = class {
@@ -2395,30 +2418,79 @@ var BulletBlockRenderersHTML = [
2395
2418
  ];
2396
2419
 
2397
2420
  // src/default/headings.ts
2421
+ var headings = Symbol();
2422
+ function initHeadings(cxt) {
2423
+ cxt.init(headings, {
2424
+ path: []
2425
+ });
2426
+ }
2427
+ function setHeading(cxt, data) {
2428
+ const path = cxt.get(headings).path;
2429
+ while (path.length > 0 && path.at(-1).level >= data.level)
2430
+ path.pop();
2431
+ path.push(data);
2432
+ return [];
2433
+ }
2434
+ function currentHeadingLevel(cxt) {
2435
+ return cxt.get(headings).path.at(-1)?.level;
2436
+ }
2437
+ function currentExplicitHeadingLevel(cxt) {
2438
+ return cxt.get(headings).path.findLast((x) => !x.implicit)?.level;
2439
+ }
2398
2440
  var headingBlock = new BlockModifierDefinition(
2399
2441
  "heading",
2400
2442
  0 /* Normal */,
2401
2443
  {
2402
2444
  delayContentExpansion: true,
2403
2445
  roleHint: "heading",
2404
- prepareExpand(node) {
2446
+ beforeParseContent(node, cxt) {
2405
2447
  let msgs = checkArguments(node, 0, 1);
2406
2448
  if (msgs) return msgs;
2407
2449
  msgs = onlyPermitSingleBlock(node);
2408
2450
  if (msgs) return msgs;
2409
2451
  msgs = onlyPermitSimpleParagraphs(node);
2410
2452
  if (msgs) return msgs;
2453
+ node.state = { name: void 0, level: currentHeadingLevel(cxt) ?? 1 };
2411
2454
  if (node.arguments.length == 1) {
2412
- let arg = node.arguments[0];
2413
- let num = Number.parseInt(arg.expansion);
2414
- if (isNaN(num)) return [
2415
- new InvalidArgumentMessage(arg.location, "should be a number between 1 and 6")
2416
- ];
2417
- node.state = num;
2418
- } else {
2419
- node.state = 1;
2455
+ const arg = node.arguments[0];
2456
+ const level = Number.parseInt(arg.expansion);
2457
+ if (isNaN(level) || level < 1 || level > 6)
2458
+ msgs = [new InvalidArgumentMessage(
2459
+ arg.location,
2460
+ "should be a number between 1 and 6"
2461
+ )];
2462
+ else node.state.level = level;
2420
2463
  }
2421
- return [];
2464
+ setHeading(cxt, node.state);
2465
+ return msgs ?? [];
2466
+ }
2467
+ }
2468
+ );
2469
+ var implicitHeadingBlock = new BlockModifierDefinition(
2470
+ "implicit-heading",
2471
+ 2 /* None */,
2472
+ {
2473
+ roleHint: "heading",
2474
+ beforeParseContent(node, cxt) {
2475
+ let msgs = checkArguments(node, 0, 1);
2476
+ if (msgs) return msgs;
2477
+ node.state = {
2478
+ name: void 0,
2479
+ implicit: true,
2480
+ level: (currentExplicitHeadingLevel(cxt) ?? 0) + 1
2481
+ };
2482
+ if (node.arguments.length == 1) {
2483
+ const arg = node.arguments[0];
2484
+ const level = Number.parseInt(arg.expansion);
2485
+ if (isNaN(level) || level < 1 || level > 6)
2486
+ msgs = [new InvalidArgumentMessage(
2487
+ arg.location,
2488
+ "should be a number between 1 and 6"
2489
+ )];
2490
+ else node.state.level = level;
2491
+ }
2492
+ setHeading(cxt, node.state);
2493
+ return msgs ?? [];
2422
2494
  }
2423
2495
  }
2424
2496
  );
@@ -2428,41 +2500,49 @@ var numberedHeadingBlock = new BlockModifierDefinition(
2428
2500
  {
2429
2501
  delayContentExpansion: true,
2430
2502
  roleHint: "heading",
2431
- prepareExpand(node) {
2503
+ beforeParseContent(node, cxt) {
2432
2504
  let msgs = checkArguments(node, 1);
2433
2505
  if (msgs) return msgs;
2434
2506
  msgs = onlyPermitSingleBlock(node);
2435
2507
  if (msgs) return msgs;
2436
2508
  msgs = onlyPermitSimpleParagraphs(node);
2437
2509
  if (msgs) return msgs;
2438
- let arg = node.arguments[0];
2439
- let split = arg.expansion.trim().split(".").filter((x) => x.length > 0);
2440
- if (split.length == 0 || split.length > 6) return [
2441
- new InvalidArgumentMessage(arg.location, "heading level must be between 1 and 6")
2442
- ];
2443
- node.state = split;
2444
- debug.trace("numbered-heading", node.state);
2445
- return [];
2510
+ node.state = { name: void 0, level: currentHeadingLevel(cxt) ?? 1 };
2511
+ const arg = node.arguments[0];
2512
+ const split = arg.expansion.trim().split(".").filter((x) => x.length > 0);
2513
+ if (split.length == 0 || split.length > 6)
2514
+ msgs = [new InvalidArgumentMessage(
2515
+ arg.location,
2516
+ "should be a number between 1 and 6"
2517
+ )];
2518
+ else node.state = { name: split.join("."), level: split.length };
2519
+ setHeading(cxt, node.state);
2520
+ return msgs ?? [];
2446
2521
  }
2447
2522
  }
2448
2523
  );
2449
- var HeadingBlocks = [headingBlock, numberedHeadingBlock];
2524
+ var HeadingBlocks = [headingBlock, implicitHeadingBlock, numberedHeadingBlock];
2450
2525
  var HeadingBlockRenderersHTML = [
2451
2526
  [headingBlock, (node, cxt) => {
2452
2527
  if (node.state !== void 0) {
2453
- assert(node.state >= 1 && node.state <= 6);
2454
- let tag = "h" + node.state;
2528
+ let tag = "h" + node.state.level;
2455
2529
  let para = node.content[0];
2456
2530
  return `<${tag}>${cxt.state.render(para.content, cxt)}</${tag}>`;
2457
2531
  }
2458
2532
  return cxt.state.invalidBlock(node, "Bad format");
2459
2533
  }],
2534
+ [implicitHeadingBlock, (node, cxt) => {
2535
+ if (node.state !== void 0) {
2536
+ let tag = "h" + node.state.level;
2537
+ return `<${tag} class='implicit'></${tag}>`;
2538
+ }
2539
+ return cxt.state.invalidBlock(node, "Bad format");
2540
+ }],
2460
2541
  [numberedHeadingBlock, (node, cxt) => {
2461
2542
  if (node.state !== void 0) {
2462
- assert(node.state.length >= 1 && node.state.length <= 6);
2463
- let tag = "h" + node.state.length;
2543
+ let tag = "h" + node.state.level;
2464
2544
  let para = node.content[0];
2465
- return `<${tag}><span class='heading-number'>${node.state.join(".")}</span>${cxt.state.render(para.content, cxt)}</${tag}>`;
2545
+ return `<${tag}><span class='heading-number'>${node.state.name}</span>${cxt.state.render(para.content, cxt)}</${tag}>`;
2466
2546
  }
2467
2547
  return cxt.state.invalidBlock(node, "Bad format");
2468
2548
  }]
@@ -2701,6 +2781,35 @@ var linkInline = new InlineModifierDefinition(
2701
2781
  }
2702
2782
  }
2703
2783
  );
2784
+ var styleBlock = new BlockModifierDefinition(
2785
+ "style",
2786
+ 0 /* Normal */,
2787
+ {
2788
+ prepareExpand(node) {
2789
+ let msgs = checkArguments(node, 1);
2790
+ if (msgs) return msgs;
2791
+ node.state = node.arguments[0].expansion;
2792
+ return [];
2793
+ }
2794
+ }
2795
+ );
2796
+ var breakBlock = new BlockModifierDefinition(
2797
+ "break",
2798
+ 2 /* None */
2799
+ );
2800
+ var linkBlock = new BlockModifierDefinition(
2801
+ "link",
2802
+ 0 /* Normal */,
2803
+ {
2804
+ roleHint: "link",
2805
+ prepareExpand(node) {
2806
+ let msgs = checkArguments(node, 1);
2807
+ if (msgs) return msgs;
2808
+ node.state = node.arguments[0].expansion;
2809
+ return [];
2810
+ }
2811
+ }
2812
+ );
2704
2813
  var imageBlock = new BlockModifierDefinition(
2705
2814
  "image",
2706
2815
  0 /* Normal */,
@@ -2713,14 +2822,13 @@ var imageBlock = new BlockModifierDefinition(
2713
2822
  if (msgs) return msgs;
2714
2823
  msgs = onlyPermitSimpleParagraphs(node);
2715
2824
  if (msgs) return msgs;
2716
- let url = URL.parse(node.arguments.map((x) => x.expansion).join(":"));
2717
- if (url) node.state = url;
2825
+ node.state = node.arguments.map((x) => x.expansion).join(":");
2718
2826
  return [];
2719
2827
  }
2720
2828
  }
2721
2829
  );
2722
2830
  var MiscInlines = [rubyInline, linkInline];
2723
- var MiscBlocks = [imageBlock];
2831
+ var MiscBlocks = [styleBlock, breakBlock, linkBlock, imageBlock];
2724
2832
  var MiscInlineRenderersHTML = [
2725
2833
  [rubyInline, (node, cxt) => {
2726
2834
  if (node.state === void 0)
@@ -2734,6 +2842,19 @@ var MiscInlineRenderersHTML = [
2734
2842
  }]
2735
2843
  ];
2736
2844
  var MiscBlockRenderersHTML = [
2845
+ [styleBlock, (node, cxt) => {
2846
+ if (node.state === void 0)
2847
+ return cxt.state.invalidBlock(node, "bad format");
2848
+ return `<div class="${node.state}" style="display:contents">${cxt.state.render(node.content, cxt)}</div>`;
2849
+ }],
2850
+ [breakBlock, () => {
2851
+ return `<hr>`;
2852
+ }],
2853
+ [linkBlock, (node, cxt) => {
2854
+ if (node.state === void 0)
2855
+ return cxt.state.invalidBlock(node, "bad format");
2856
+ return `<a href="${encodeURI(node.state)}">${cxt.state.render(node.content, cxt)}</a>`;
2857
+ }],
2737
2858
  [imageBlock, (node, cxt) => {
2738
2859
  let transformed;
2739
2860
  if (node.state === void 0)
@@ -2741,9 +2862,9 @@ var MiscBlockRenderersHTML = [
2741
2862
  try {
2742
2863
  transformed = cxt.config.options.transformAsset(node.state);
2743
2864
  } catch {
2744
- return cxt.state.invalidBlock(node, "bad format");
2865
+ return cxt.state.invalidBlock(node, "unable to transform asset");
2745
2866
  }
2746
- const img = transformed ? `<img src="${transformed}" data-original-src="${node.state.href}"/>` : `<img src="${node.state.href}"/>`;
2867
+ const img = transformed ? `<img src="${transformed}" data-original-src="${node.state}"/>` : `<img src="${node.state}"/>`;
2747
2868
  const para = node.content.length == 0 ? "" : "\n<figcaption>" + cxt.state.render(node.content[0].content, cxt) + "</figcaption>";
2748
2869
  return `<figure>${img}${para}</figure>`;
2749
2870
  }]
@@ -2757,10 +2878,13 @@ function createWrapper(name, varname) {
2757
2878
  afterProcessExpansion(node, cxt) {
2758
2879
  let msgs = checkArguments(node, 0);
2759
2880
  if (msgs) return msgs;
2760
- let result = onlyPermitPlaintextParagraph(node);
2881
+ const result = onlyPermitPlaintextParagraph(node);
2761
2882
  if (typeof result !== "string") return result;
2883
+ const previous = cxt.variables.get(varname);
2884
+ if (previous)
2885
+ msgs = [new OverwriteSpecialVariableMessage(node.head, varname, previous)];
2762
2886
  cxt.variables.set(varname, result);
2763
- return [];
2887
+ return msgs ?? [];
2764
2888
  }
2765
2889
  });
2766
2890
  }
@@ -2780,7 +2904,7 @@ var VarWrappers = [
2780
2904
 
2781
2905
  // src/default/default.ts
2782
2906
  var config = Configuration.from(BuiltinConfiguration);
2783
- config.initializers.push(initNotes);
2907
+ config.initializers.push(initNotes, initHeadings);
2784
2908
  config.blockModifiers.add(
2785
2909
  ...HeadingBlocks,
2786
2910
  ...BulletBlocks,