highmark-markdown 0.0.154 → 0.0.155

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 (66) hide show
  1. package/example.js +2212 -1446
  2. package/lib/example/view.js +19 -15
  3. package/lib/index.js +4 -8
  4. package/lib/markdown/bnf.js +2 -2
  5. package/lib/markdown/parser.js +5 -5
  6. package/lib/node/markdown/anchor.js +7 -1
  7. package/lib/node/markdown/contents.js +149 -0
  8. package/lib/node/markdown/contentsItem.js +141 -0
  9. package/lib/node/markdown/contentsList.js +135 -0
  10. package/lib/node/markdown/division.js +80 -62
  11. package/lib/node/markdown/heading/primary.js +134 -0
  12. package/lib/node/markdown/{quaternaryHeading.js → heading/quaternary.js} +20 -6
  13. package/lib/node/markdown/{secondaryHeading.js → heading/secondary.js} +20 -6
  14. package/lib/node/markdown/{tertiaryHeading.js → heading/tertiary.js} +20 -6
  15. package/lib/node/markdown/{header.js → heading.js} +15 -15
  16. package/lib/node/markdown/import.js +16 -9
  17. package/lib/node/markdown/line.js +4 -4
  18. package/lib/node/markdown/markedText.js +5 -3
  19. package/lib/node/markdown.js +35 -14
  20. package/lib/nodeMap.js +7 -7
  21. package/lib/ruleNameToHTMLMap.js +10 -4
  22. package/lib/ruleNames.js +16 -6
  23. package/lib/utilities/childNodes.js +48 -46
  24. package/lib/utilities/footnotes.js +71 -0
  25. package/lib/utilities/nodes.js +21 -0
  26. package/lib/utilities/query.js +30 -3
  27. package/lib/utilities/string.js +2 -2
  28. package/lib/utilities/tokens.js +45 -0
  29. package/lib/utilities/tree.js +172 -0
  30. package/package.json +3 -3
  31. package/src/example/view.js +35 -21
  32. package/src/index.js +1 -2
  33. package/src/markdown/bnf.js +6 -4
  34. package/src/markdown/parser.js +1 -1
  35. package/src/node/markdown/anchor.js +4 -0
  36. package/src/node/markdown/contents.js +40 -0
  37. package/src/node/markdown/contentsItem.js +49 -0
  38. package/src/node/markdown/contentsList.js +35 -0
  39. package/src/node/markdown/division.js +94 -39
  40. package/src/node/markdown/heading/primary.js +9 -0
  41. package/src/node/markdown/heading/quaternary.js +9 -0
  42. package/src/node/markdown/heading/secondary.js +9 -0
  43. package/src/node/markdown/heading/tertiary.js +9 -0
  44. package/src/node/markdown/heading.js +13 -0
  45. package/src/node/markdown/import.js +22 -7
  46. package/src/node/markdown/line.js +6 -4
  47. package/src/node/markdown/markedText.js +4 -4
  48. package/src/node/markdown.js +48 -18
  49. package/src/nodeMap.js +7 -7
  50. package/src/ruleNameToHTMLMap.js +15 -5
  51. package/src/ruleNames.js +6 -2
  52. package/src/utilities/childNodes.js +57 -49
  53. package/src/utilities/{link.js → footnotes.js} +8 -0
  54. package/src/utilities/{node.js → nodes.js} +0 -4
  55. package/src/utilities/query.js +32 -1
  56. package/src/utilities/string.js +1 -2
  57. package/src/utilities/tokens.js +14 -0
  58. package/src/utilities/tree.js +139 -0
  59. package/lib/node/markdown/primaryHeading.js +0 -167
  60. package/lib/utilities/link.js +0 -63
  61. package/lib/utilities/node.js +0 -32
  62. package/src/node/markdown/header.js +0 -14
  63. package/src/node/markdown/primaryHeading.js +0 -38
  64. package/src/node/markdown/quaternaryHeading.js +0 -7
  65. package/src/node/markdown/secondaryHeading.js +0 -7
  66. package/src/node/markdown/tertiaryHeading.js +0 -7
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "replaceTokens", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return replaceTokens;
9
+ }
10
+ });
11
+ function _array_like_to_array(arr, len) {
12
+ if (len == null || len > arr.length) len = arr.length;
13
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
14
+ return arr2;
15
+ }
16
+ function _array_without_holes(arr) {
17
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
18
+ }
19
+ function _iterable_to_array(iter) {
20
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
21
+ }
22
+ function _non_iterable_spread() {
23
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
24
+ }
25
+ function _to_consumable_array(arr) {
26
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
27
+ }
28
+ function _unsupported_iterable_to_array(o, minLen) {
29
+ if (!o) return;
30
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
31
+ var n = Object.prototype.toString.call(o).slice(8, -1);
32
+ if (n === "Object" && o.constructor) n = o.constructor.name;
33
+ if (n === "Map" || n === "Set") return Array.from(n);
34
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
35
+ }
36
+ function replaceTokens(replacedChildNode, replacementTokens, context) {
37
+ var _tokens;
38
+ var tokens = context.tokens, nonTerminalNode = replacedChildNode, lastSignificantToken = nonTerminalNode.getLastSignificantToken(), firstSignificantToken = nonTerminalNode.getFirstSignificantToken(), lastSignificantTokenIndex = tokens.indexOf(lastSignificantToken), firstSignificantTokenIndex = tokens.indexOf(firstSignificantToken), start = firstSignificantTokenIndex, deleteCount = lastSignificantTokenIndex - firstSignificantTokenIndex; ///
39
+ (_tokens = tokens).splice.apply(_tokens, [
40
+ start,
41
+ deleteCount
42
+ ].concat(_to_consumable_array(replacementTokens)));
43
+ }
44
+
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdG9rZW5zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVRva2VucyhyZXBsYWNlZENoaWxkTm9kZSwgcmVwbGFjZW1lbnRUb2tlbnMsIGNvbnRleHQpIHtcbiAgY29uc3QgeyB0b2tlbnMgfSA9IGNvbnRleHQsXG4gICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IHJlcGxhY2VkQ2hpbGROb2RlLCAgLy8vXG4gICAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuID0gbm9uVGVybWluYWxOb2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vblRlcm1pbmFsTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGxhc3RTaWduaWZpY2FudFRva2VuKSxcbiAgICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihmaXJzdFNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICBzdGFydCA9IGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4LCAvLy9cbiAgICAgICAgZGVsZXRlQ291bnQgPSBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4IC0gZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXg7IC8vL1xuXG4gIHRva2Vucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5yZXBsYWNlbWVudFRva2Vucyk7XG59XG4iXSwibmFtZXMiOlsicmVwbGFjZVRva2VucyIsInJlcGxhY2VkQ2hpbGROb2RlIiwicmVwbGFjZW1lbnRUb2tlbnMiLCJjb250ZXh0IiwidG9rZW5zIiwibm9uVGVybWluYWxOb2RlIiwibGFzdFNpZ25pZmljYW50VG9rZW4iLCJnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbiIsImZpcnN0U2lnbmlmaWNhbnRUb2tlbiIsImdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbiIsImxhc3RTaWduaWZpY2FudFRva2VuSW5kZXgiLCJpbmRleE9mIiwiZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgiLCJzdGFydCIsImRlbGV0ZUNvdW50Iiwic3BsaWNlIl0sInJhbmdlTWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsiLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBRWdCQTs7O2VBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQVQsU0FBU0EsY0FBY0MsaUJBQWlCLEVBQUVDLGlCQUFpQixFQUFFQyxPQUFPO1FBVXpFQztJQVRBLElBQU0sQUFBRUEsU0FBV0QsUUFBWEMsUUFDRkMsa0JBQWtCSixtQkFDbEJLLHVCQUF1QkQsZ0JBQWdCRSx1QkFBdUIsSUFDOURDLHdCQUF3QkgsZ0JBQWdCSSx3QkFBd0IsSUFDaEVDLDRCQUE0Qk4sT0FBT08sT0FBTyxDQUFDTCx1QkFDM0NNLDZCQUE2QlIsT0FBT08sT0FBTyxDQUFDSCx3QkFDNUNLLFFBQVFELDRCQUNSRSxjQUFjSiw0QkFBNEJFLDRCQUE0QixHQUFHO0lBRS9FUixDQUFBQSxVQUFBQSxRQUFPVyxNQUFNLENBQWJYLE1BQUFBLFNBQUFBO1FBQWNTO1FBQU9DO0tBQWtDLENBQXZEVixPQUFrQyxxQkFBR0Y7QUFDdkMifQ==
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "nestNodes", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return nestNodes;
9
+ }
10
+ });
11
+ var _necessary = require("necessary");
12
+ function _class_call_check(instance, Constructor) {
13
+ if (!(instance instanceof Constructor)) {
14
+ throw new TypeError("Cannot call a class as a function");
15
+ }
16
+ }
17
+ function _defineProperties(target, props) {
18
+ for(var i = 0; i < props.length; i++){
19
+ var descriptor = props[i];
20
+ descriptor.enumerable = descriptor.enumerable || false;
21
+ descriptor.configurable = true;
22
+ if ("value" in descriptor) descriptor.writable = true;
23
+ Object.defineProperty(target, descriptor.key, descriptor);
24
+ }
25
+ }
26
+ function _create_class(Constructor, protoProps, staticProps) {
27
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
28
+ if (staticProps) _defineProperties(Constructor, staticProps);
29
+ return Constructor;
30
+ }
31
+ var first = _necessary.arrayUtilities.first, last = _necessary.arrayUtilities.last;
32
+ function nestNodes(nodes) {
33
+ var nestedNodesStack = NestedNodeStack.fromNothing();
34
+ nodes.forEach(function(node) {
35
+ var level = node.getLevel();
36
+ var nestedNodesStackLevel = nestedNodesStack.getLevel();
37
+ while(nestedNodesStackLevel < level){
38
+ nestedNodesStackLevel = nestedNodesStack.increment();
39
+ }
40
+ while(nestedNodesStackLevel > level){
41
+ nestedNodesStackLevel = nestedNodesStack.decrement();
42
+ }
43
+ var nestedNode = NestedNode.fromNode(node);
44
+ nestedNodesStack.addNestedNode(nestedNode);
45
+ });
46
+ var nestedNode = nestedNodesStack.getNestedNode();
47
+ return nestedNode;
48
+ }
49
+ var NestedNode = /*#__PURE__*/ function() {
50
+ function NestedNode(node, childNestedNodes) {
51
+ _class_call_check(this, NestedNode);
52
+ this.node = node;
53
+ this.childNestedNodes = childNestedNodes;
54
+ }
55
+ _create_class(NestedNode, [
56
+ {
57
+ key: "getNode",
58
+ value: function getNode() {
59
+ return this.node;
60
+ }
61
+ },
62
+ {
63
+ key: "getChildNestedNodes",
64
+ value: function getChildNestedNodes() {
65
+ return this.childNestedNodes;
66
+ }
67
+ },
68
+ {
69
+ key: "addNestedNode",
70
+ value: function addNestedNode(nestedNode) {
71
+ var childNestedNode = nestedNode; ///
72
+ this.childNestedNodes.push(childNestedNode);
73
+ }
74
+ }
75
+ ], [
76
+ {
77
+ key: "fromNode",
78
+ value: function fromNode(node) {
79
+ var childNestedNodes = [], nestedNode = new NestedNode(node, childNestedNodes);
80
+ return nestedNode;
81
+ }
82
+ },
83
+ {
84
+ key: "fromNothing",
85
+ value: function fromNothing() {
86
+ var node = null, childNestedNodes = [], nestedNode = new NestedNode(node, childNestedNodes);
87
+ return nestedNode;
88
+ }
89
+ }
90
+ ]);
91
+ return NestedNode;
92
+ }();
93
+ var NestedNodeStack = /*#__PURE__*/ function() {
94
+ function NestedNodeStack(nestedNodes) {
95
+ _class_call_check(this, NestedNodeStack);
96
+ this.nestedNodes = nestedNodes;
97
+ }
98
+ _create_class(NestedNodeStack, [
99
+ {
100
+ key: "getNestedNodes",
101
+ value: function getNestedNodes() {
102
+ return this.nestedNodes;
103
+ }
104
+ },
105
+ {
106
+ key: "getLastNestedNode",
107
+ value: function getLastNestedNode() {
108
+ var lastNestedNode = last(this.nestedNodes);
109
+ return lastNestedNode;
110
+ }
111
+ },
112
+ {
113
+ key: "getNestedNode",
114
+ value: function getNestedNode() {
115
+ var firstNestedNode = first(this.nestedNodes), nestedNode = firstNestedNode; ///
116
+ return nestedNode;
117
+ }
118
+ },
119
+ {
120
+ key: "getLevel",
121
+ value: function getLevel() {
122
+ var nestedNodesLength = this.nestedNodes.length, level = nestedNodesLength; ///
123
+ return level;
124
+ }
125
+ },
126
+ {
127
+ key: "increment",
128
+ value: function increment() {
129
+ var nestedNode = NestedNode.fromNothing();
130
+ this.addNestedNode(nestedNode);
131
+ var level = this.getLevel();
132
+ return level;
133
+ }
134
+ },
135
+ {
136
+ key: "decrement",
137
+ value: function decrement() {
138
+ this.removeNestedNode();
139
+ var level = this.getLevel();
140
+ return level;
141
+ }
142
+ },
143
+ {
144
+ key: "addNestedNode",
145
+ value: function addNestedNode(nestedNode) {
146
+ var lastNestedNode = this.getLastNestedNode();
147
+ lastNestedNode.addNestedNode(nestedNode);
148
+ this.nestedNodes.push(nestedNode);
149
+ }
150
+ },
151
+ {
152
+ key: "removeNestedNode",
153
+ value: function removeNestedNode() {
154
+ var nestedNode = this.nestedNodes.pop();
155
+ return nestedNode;
156
+ }
157
+ }
158
+ ], [
159
+ {
160
+ key: "fromNothing",
161
+ value: function fromNothing() {
162
+ var nestedNode = NestedNode.fromNothing(), nestedNodes = [
163
+ nestedNode
164
+ ], nestedNodesStack = new NestedNodeStack(nestedNodes);
165
+ return nestedNodesStack;
166
+ }
167
+ }
168
+ ]);
169
+ return NestedNodeStack;
170
+ }();
171
+
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdHJlZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgZmlyc3QsIGxhc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gbmVzdE5vZGVzKG5vZGVzKSB7XG4gIGNvbnN0IG5lc3RlZE5vZGVzU3RhY2sgPSBOZXN0ZWROb2RlU3RhY2suZnJvbU5vdGhpbmcoKTtcblxuICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgY29uc3QgbGV2ZWwgPSBub2RlLmdldExldmVsKCk7XG5cbiAgICBsZXQgbmVzdGVkTm9kZXNTdGFja0xldmVsID0gbmVzdGVkTm9kZXNTdGFjay5nZXRMZXZlbCgpXG5cbiAgICB3aGlsZSAobmVzdGVkTm9kZXNTdGFja0xldmVsIDwgbGV2ZWwpIHtcbiAgICAgIG5lc3RlZE5vZGVzU3RhY2tMZXZlbCA9IG5lc3RlZE5vZGVzU3RhY2suaW5jcmVtZW50KCk7XG4gICAgfVxuXG4gICAgd2hpbGUgKG5lc3RlZE5vZGVzU3RhY2tMZXZlbCA+IGxldmVsKSB7XG4gICAgICBuZXN0ZWROb2Rlc1N0YWNrTGV2ZWwgPSBuZXN0ZWROb2Rlc1N0YWNrLmRlY3JlbWVudCgpO1xuICAgIH1cblxuICAgIGNvbnN0IG5lc3RlZE5vZGUgPSBOZXN0ZWROb2RlLmZyb21Ob2RlKG5vZGUpO1xuXG4gICAgbmVzdGVkTm9kZXNTdGFjay5hZGROZXN0ZWROb2RlKG5lc3RlZE5vZGUpO1xuICB9KTtcblxuICBjb25zdCBuZXN0ZWROb2RlID0gbmVzdGVkTm9kZXNTdGFjay5nZXROZXN0ZWROb2RlKCk7XG5cbiAgcmV0dXJuIG5lc3RlZE5vZGU7XG59XG5cbmNsYXNzIE5lc3RlZE5vZGUge1xuICBjb25zdHJ1Y3Rvcihub2RlLCBjaGlsZE5lc3RlZE5vZGVzKSB7XG4gICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICB0aGlzLmNoaWxkTmVzdGVkTm9kZXMgPSBjaGlsZE5lc3RlZE5vZGVzO1xuICB9XG5cbiAgZ2V0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlO1xuICB9XG5cbiAgZ2V0Q2hpbGROZXN0ZWROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZE5lc3RlZE5vZGVzO1xuICB9XG5cbiAgYWRkTmVzdGVkTm9kZShuZXN0ZWROb2RlKSB7XG4gICAgY29uc3QgY2hpbGROZXN0ZWROb2RlID0gbmVzdGVkTm9kZTsgLy8vXG5cbiAgICB0aGlzLmNoaWxkTmVzdGVkTm9kZXMucHVzaChjaGlsZE5lc3RlZE5vZGUpO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlKG5vZGUpIHtcbiAgICBjb25zdCBjaGlsZE5lc3RlZE5vZGVzID0gW10sXG4gICAgICAgICAgbmVzdGVkTm9kZSA9IG5ldyBOZXN0ZWROb2RlKG5vZGUsIGNoaWxkTmVzdGVkTm9kZXMpO1xuXG4gICAgcmV0dXJuIG5lc3RlZE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgbm9kZSA9IG51bGwsXG4gICAgICAgICAgY2hpbGROZXN0ZWROb2RlcyA9IFtdLFxuICAgICAgICAgIG5lc3RlZE5vZGUgPSBuZXcgTmVzdGVkTm9kZShub2RlLCBjaGlsZE5lc3RlZE5vZGVzKTtcblxuICAgIHJldHVybiBuZXN0ZWROb2RlO1xuICB9XG59XG5cbmNsYXNzIE5lc3RlZE5vZGVTdGFjayB7XG4gIGNvbnN0cnVjdG9yKG5lc3RlZE5vZGVzKSB7XG4gICAgdGhpcy5uZXN0ZWROb2RlcyA9IG5lc3RlZE5vZGVzO1xuICB9XG5cbiAgZ2V0TmVzdGVkTm9kZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVzdGVkTm9kZXM7XG4gIH1cblxuICBnZXRMYXN0TmVzdGVkTm9kZSgpIHtcbiAgICBjb25zdCBsYXN0TmVzdGVkTm9kZSA9IGxhc3QodGhpcy5uZXN0ZWROb2Rlcyk7XG5cbiAgICByZXR1cm4gbGFzdE5lc3RlZE5vZGU7XG4gIH1cblxuICBnZXROZXN0ZWROb2RlKCkge1xuICAgIGNvbnN0IGZpcnN0TmVzdGVkTm9kZSA9IGZpcnN0KHRoaXMubmVzdGVkTm9kZXMpLFxuICAgICAgICAgIG5lc3RlZE5vZGUgPSBmaXJzdE5lc3RlZE5vZGU7ICAvLy9cblxuICAgIHJldHVybiBuZXN0ZWROb2RlO1xuICB9XG5cbiAgZ2V0TGV2ZWwoKSB7XG4gICAgY29uc3QgbmVzdGVkTm9kZXNMZW5ndGggPSB0aGlzLm5lc3RlZE5vZGVzLmxlbmd0aCxcbiAgICAgICAgICBsZXZlbCA9IG5lc3RlZE5vZGVzTGVuZ3RoOyAgLy8vXG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH1cblxuICBpbmNyZW1lbnQoKSB7XG4gICAgY29uc3QgbmVzdGVkTm9kZSA9IE5lc3RlZE5vZGUuZnJvbU5vdGhpbmcoKTtcblxuICAgIHRoaXMuYWRkTmVzdGVkTm9kZShuZXN0ZWROb2RlKTtcblxuICAgIGNvbnN0IGxldmVsID0gdGhpcy5nZXRMZXZlbCgpO1xuXG4gICAgcmV0dXJuIGxldmVsO1xuICB9XG5cbiAgZGVjcmVtZW50KCkge1xuICAgIHRoaXMucmVtb3ZlTmVzdGVkTm9kZSgpO1xuXG4gICAgY29uc3QgbGV2ZWwgPSB0aGlzLmdldExldmVsKCk7XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH1cblxuICBhZGROZXN0ZWROb2RlKG5lc3RlZE5vZGUpIHtcbiAgICBjb25zdCBsYXN0TmVzdGVkTm9kZSA9IHRoaXMuZ2V0TGFzdE5lc3RlZE5vZGUoKTtcblxuICAgIGxhc3ROZXN0ZWROb2RlLmFkZE5lc3RlZE5vZGUobmVzdGVkTm9kZSk7XG5cbiAgICB0aGlzLm5lc3RlZE5vZGVzLnB1c2gobmVzdGVkTm9kZSk7XG4gIH1cblxuICByZW1vdmVOZXN0ZWROb2RlKCkge1xuICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLm5lc3RlZE5vZGVzLnBvcCgpO1xuXG4gICAgcmV0dXJuIG5lc3RlZE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmVzdGVkTm9kZSA9IE5lc3RlZE5vZGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBuZXN0ZWROb2RlcyA9IFtcbiAgICAgICAgICAgIG5lc3RlZE5vZGVcbiAgICAgICAgICBdLFxuICAgICAgICAgIG5lc3RlZE5vZGVzU3RhY2sgPSBuZXcgTmVzdGVkTm9kZVN0YWNrKG5lc3RlZE5vZGVzKTtcblxuICAgIHJldHVybiBuZXN0ZWROb2Rlc1N0YWNrO1xuICB9XG59XG4iXSwibmFtZXMiOlsibmVzdE5vZGVzIiwiZmlyc3QiLCJhcnJheVV0aWxpdGllcyIsImxhc3QiLCJub2RlcyIsIm5lc3RlZE5vZGVzU3RhY2siLCJOZXN0ZWROb2RlU3RhY2siLCJmcm9tTm90aGluZyIsImZvckVhY2giLCJub2RlIiwibGV2ZWwiLCJnZXRMZXZlbCIsIm5lc3RlZE5vZGVzU3RhY2tMZXZlbCIsImluY3JlbWVudCIsImRlY3JlbWVudCIsIm5lc3RlZE5vZGUiLCJOZXN0ZWROb2RlIiwiZnJvbU5vZGUiLCJhZGROZXN0ZWROb2RlIiwiZ2V0TmVzdGVkTm9kZSIsImNoaWxkTmVzdGVkTm9kZXMiLCJnZXROb2RlIiwiZ2V0Q2hpbGROZXN0ZWROb2RlcyIsImNoaWxkTmVzdGVkTm9kZSIsInB1c2giLCJuZXN0ZWROb2RlcyIsImdldE5lc3RlZE5vZGVzIiwiZ2V0TGFzdE5lc3RlZE5vZGUiLCJsYXN0TmVzdGVkTm9kZSIsImZpcnN0TmVzdGVkTm9kZSIsIm5lc3RlZE5vZGVzTGVuZ3RoIiwibGVuZ3RoIiwicmVtb3ZlTmVzdGVkTm9kZSIsInBvcCJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "highmark-markdown",
3
3
  "author": "James Smith",
4
- "version": "0.0.154",
4
+ "version": "0.0.155",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/highmark-markdown",
7
7
  "description": "Highmark's Markdown.",
@@ -11,8 +11,8 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "necessary": "^13.6.1",
14
- "occam-lexers": "^22.0.15",
15
- "occam-parsers": "^22.0.12",
14
+ "occam-lexers": "^22.0.17",
15
+ "occam-parsers": "^22.0.13",
16
16
  "occam-query": "^3.1.151"
17
17
  },
18
18
  "devDependencies": {
@@ -40,15 +40,26 @@ class View extends Element {
40
40
  let parseTree = null;
41
41
 
42
42
  if (node !== null) {
43
- const divisionClassName = DOCUMENT_DIVISION_CLASS_NAME,
43
+ const divisionMarkdownNode = node, ///
44
+ divisionClassName = DOCUMENT_DIVISION_CLASS_NAME;
45
+
46
+ divisionMarkdownNode.setDivisionClassName(divisionClassName);
47
+
48
+ const parentNode = null,
44
49
  indent = EMPTY_STRING,
45
50
  context = {
46
51
  tokens,
47
- importer,
48
- divisionClassName
49
- },
50
- html = node.asHTML(indent, context),
51
- domElement = node.createDOMElement(context);
52
+ importer
53
+ };
54
+
55
+ divisionMarkdownNode.resolveImports(parentNode, context);
56
+
57
+ divisionMarkdownNode.createContents(context);
58
+
59
+ divisionMarkdownNode.createFootnotes(context);
60
+
61
+ const html = divisionMarkdownNode.asHTML(indent, context),
62
+ domElement = divisionMarkdownNode.createDOMElement(context);
52
63
 
53
64
  this.xmpHTML(html);
54
65
 
@@ -124,7 +135,10 @@ class View extends Element {
124
135
  this.update();
125
136
  }
126
137
 
127
- static initialMarkdown = `@import cover.mds
138
+ static initialMarkdown = `@contents 3
139
+
140
+ @import cover.mds
141
+
128
142
  `;
129
143
 
130
144
  static tagName = "div";
@@ -140,24 +154,24 @@ export default withStyle(View)`
140
154
 
141
155
  `;
142
156
 
143
- const divisionContent = `
144
-
145
- Hello, world!
157
+ function importer(path, context) {
158
+ const content = `
146
159
 
147
- `;
160
+ # Primary heading
148
161
 
149
- function importer(path, indent, context) {
150
- const content = divisionContent, ///
162
+ ` ,
151
163
  tokens = markdownLexer.tokenise(content),
152
164
  node = markdownParser.parse(tokens),
153
- divisionClassName = FRONT_MATTER_DIVISION_CLASS_NAME; //
165
+ divisionMarkdownNode = node, ///
166
+ divisionClassName = FRONT_MATTER_DIVISION_CLASS_NAME;
154
167
 
155
- context = { ///
156
- tokens,
157
- divisionClassName
158
- }
168
+ divisionMarkdownNode.setDivisionClassName(divisionClassName);
159
169
 
160
- const html = node.asHTML(indent, context);
170
+ const importedNode = node, ///
171
+ importedTokens = tokens; ///
161
172
 
162
- return html;
163
- }
173
+ Object.assign(context, {
174
+ importedNode,
175
+ importedTokens
176
+ });
177
+ }
package/src/index.js CHANGED
@@ -4,10 +4,9 @@ export { default as nodeMap } from "./nodeMap";
4
4
  export { default as ruleNames } from "./ruleNames";
5
5
  export { default as tokenTypes } from "./tokenTypes";
6
6
  export { default as MarkdownNode } from "./node/markdown";
7
- export { default as nodeUtilities } from "./utilities/node";
8
7
  export { default as MarkdownLexer } from "./markdown/lexer";
9
- export { default as linkUtilities } from "./utilities/link";
10
8
  export { default as MarkdownParser } from "./markdown/parser";
11
9
  export { default as queryUtilities } from "./utilities/query";
12
10
  export { default as ruleNameToHTMLMap } from "./ruleNameToHTMLMap";
11
+ export { default as footnotesUtilities } from "./utilities/footnotes";
13
12
  export { default as FootnotesListMarkdownNode } from "./node/markdown/footnotesList";
@@ -5,7 +5,9 @@ const bnf = `
5
5
  division ::= ( subDivision | endOfLine | error )+ ;
6
6
 
7
7
 
8
- subDivision.. ::= ( endOfLine | <START_OF_CONTENT> ) ( header
8
+ subDivision.. ::= ( endOfLine | <START_OF_CONTENT> ) ( import
9
+
10
+ | contents
9
11
 
10
12
  | primaryHeading
11
13
 
@@ -36,9 +38,6 @@ const bnf = `
36
38
  error. ::= . ;
37
39
 
38
40
 
39
- header ::= import+ ;
40
-
41
-
42
41
  primaryHeading ::= [single-hash] line ;
43
42
 
44
43
 
@@ -81,6 +80,9 @@ const bnf = `
81
80
  import ::= "@"<NO_WHITESPACE>"import" [path] endOfLine ;
82
81
 
83
82
 
83
+ contents ::= "@"<NO_WHITESPACE>"contents" [number]? endOfLine ;
84
+
85
+
84
86
  tableHead ::= tableHeadRow ;
85
87
 
86
88
 
@@ -5,7 +5,7 @@ import { CommonParser } from "occam-parsers";
5
5
  import bnf from "./bnf";
6
6
  import nodeMap from "../nodeMap";
7
7
 
8
- import { setNonTerminalNodes } from "../utilities/node";
8
+ import { setNonTerminalNodes } from "../utilities/nodes";
9
9
 
10
10
  export default class MarkdownParser extends CommonParser {
11
11
  static bnf = bnf;
@@ -28,6 +28,10 @@ export default class AnchorMarkdownNode extends MarkdownNode {
28
28
  return attributeValue;
29
29
  }
30
30
 
31
+ clone() {
32
+ debugger
33
+ }
34
+
31
35
  static fromIdentifier(identifier) {
32
36
  const ruleName = ANCHOR_RULE_NAME,
33
37
  childNodes = [],
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ import { arrayUtilities } from "necessary";
4
+
5
+ import MarkdownNode from "../../node/markdown";
6
+
7
+ const { fourth } = arrayUtilities;
8
+
9
+ export default class ContentsMarkdownNode extends MarkdownNode {
10
+ asHTML(indent, context) {
11
+ const html = null;
12
+
13
+ return html;
14
+ }
15
+
16
+ createDOMElement(context) {
17
+ const domElement = null;
18
+
19
+ return domElement;
20
+ }
21
+
22
+ maximumLevel(context) {
23
+ let maximumLevel = 1;
24
+
25
+ const childNodes = this.getChildNodes(),
26
+ childNodesLength = childNodes.length;
27
+
28
+ if (childNodesLength === 5) {
29
+ const fourthChildNode = fourth(childNodes),
30
+ numberTerminalNode = fourthChildNode, ///
31
+ numberTerminalNodeContent = numberTerminalNode.getContent();
32
+
33
+ maximumLevel = Number(numberTerminalNodeContent);
34
+ }
35
+
36
+ return maximumLevel;
37
+ }
38
+
39
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsMarkdownNode, ruleName, childNodes, opacity); }
40
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ import { arrayUtilities } from "necessary";
4
+
5
+ import MarkdownNode from "../../node/markdown";
6
+
7
+ import { CONTENTS_ITEM_RULE_NAME } from "../../ruleNames";
8
+
9
+ const { push } = arrayUtilities;
10
+
11
+ export default class ContentsItemMarkdownNode extends MarkdownNode {
12
+ static fromNestedHeadingMarkdownNodeAndContentsListMarkdownNode(nestedHeadingMarkdownNode, ContentsListMarkdownNode, context) {
13
+ const node = nestedHeadingMarkdownNode.getNode(),
14
+ childNestedNodes = nestedHeadingMarkdownNode.getChildNestedNodes(),
15
+ nestedHeadingMarkdownNodes = childNestedNodes, ///
16
+ contentsListMarkdownNode = ContentsListMarkdownNode.fromNestedHeadingMarkdownNodes(nestedHeadingMarkdownNodes);
17
+
18
+ const ruleName = CONTENTS_ITEM_RULE_NAME,
19
+ childNodes = [];
20
+
21
+ if (node !== null) {
22
+ const headingMarkdownNode = node, ///
23
+ headingMarkdownNodeChildNodes = clone(headingMarkdownNode.getChildNodes()); ///
24
+
25
+ push(childNodes, headingMarkdownNodeChildNodes);
26
+ }
27
+
28
+ if (contentsListMarkdownNode !== null) {
29
+ const childNode = contentsListMarkdownNode; ///
30
+
31
+ childNodes.push(childNode);
32
+ }
33
+
34
+ const opacity = null,
35
+ contentsItemMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsItemMarkdownNode, ruleName, childNodes, opacity);
36
+
37
+ return contentsItemMarkdownNode;
38
+ }
39
+ }
40
+
41
+ function clone(nodes) {
42
+ nodes = nodes.map((node) => { ///
43
+ node = node.clone(); ///
44
+
45
+ return node;
46
+ });
47
+
48
+ return nodes;
49
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ import MarkdownNode from "../../node/markdown";
4
+ import ContentsItemMarkdownNode from "../../node/markdown/contentsItem";
5
+
6
+ import { CONTENTS_LIST_RULE_NAME } from "../../ruleNames";
7
+
8
+ export default class ContentsListMarkdownNode extends MarkdownNode {
9
+ static fromNestedHeadingMarkdownNodes(nestedHeadingMarkdownNodes, context) {
10
+ let contentsListMarkdownNode = null;
11
+
12
+ const nestedHeadingMarkdownNodesLength = nestedHeadingMarkdownNodes.length;
13
+
14
+ if (nestedHeadingMarkdownNodesLength > 0) {
15
+ const ruleName = CONTENTS_LIST_RULE_NAME,
16
+ childNodes = childNodesFromNestedHeadingMarkdownNodes(nestedHeadingMarkdownNodes, context),
17
+ opacity = null;
18
+
19
+ contentsListMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsListMarkdownNode, ruleName, childNodes, opacity);
20
+ }
21
+
22
+ return contentsListMarkdownNode;
23
+ }
24
+ }
25
+
26
+ function childNodesFromNestedHeadingMarkdownNodes(nestedHeadingMarkdownNodes, context) {
27
+ const childNodes = nestedHeadingMarkdownNodes.map((nestedHeadingMarkdownNode) => {
28
+ const contentsItemMarkdownNode = ContentsItemMarkdownNode.fromNestedHeadingMarkdownNodeAndContentsListMarkdownNode(nestedHeadingMarkdownNode, ContentsListMarkdownNode, context),
29
+ childNode = contentsItemMarkdownNode; ///
30
+
31
+ return childNode;
32
+ });
33
+
34
+ return childNodes;
35
+ }