highmark-markdown 0.0.405 → 0.0.407

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 (100) hide show
  1. package/example.js +1682 -832
  2. package/lib/defaultMarkdownStyle.js +2 -2
  3. package/lib/example/constants.js +7 -11
  4. package/lib/example/importer.js +60 -0
  5. package/lib/example/view/textarea/css.js +2 -2
  6. package/lib/example/view.js +50 -16
  7. package/lib/example.js +2 -2
  8. package/lib/index.js +9 -9
  9. package/lib/markdown/bnf.js +2 -2
  10. package/lib/mixins/node.js +42 -6
  11. package/lib/node/markdown/blockLine.js +15 -1
  12. package/lib/node/markdown/blockListingEnd.js +15 -1
  13. package/lib/node/markdown/blockListingStart.js +15 -1
  14. package/lib/node/markdown/contentsLink.js +2 -2
  15. package/lib/node/markdown/contentsList.js +2 -2
  16. package/lib/node/markdown/directive/embee.js +15 -18
  17. package/lib/node/markdown/directive/include.js +18 -23
  18. package/lib/node/markdown/directive.js +16 -10
  19. package/lib/node/markdown/directives.js +13 -62
  20. package/lib/node/markdown/division.js +63 -54
  21. package/lib/node/markdown/emailLink.js +1 -8
  22. package/lib/node/markdown/endOfLine.js +15 -8
  23. package/lib/node/markdown/footnotesList.js +2 -9
  24. package/lib/node/markdown/heading.js +3 -10
  25. package/lib/node/markdown/plainText.js +10 -2
  26. package/lib/node/markdown/subDivision.js +24 -8
  27. package/lib/node/markdown/tableCell.js +4 -5
  28. package/lib/node/markdown.js +35 -65
  29. package/lib/replacement/contentsItem.js +9 -7
  30. package/lib/replacement/contentsLink.js +2 -31
  31. package/lib/replacement/contentsList.js +4 -10
  32. package/lib/replacement/embedDirective.js +163 -0
  33. package/lib/replacement/footnote.js +81 -5
  34. package/lib/replacement/footnotesItem.js +13 -17
  35. package/lib/replacement/footnotesList.js +23 -22
  36. package/lib/replacement/includeDirective.js +176 -0
  37. package/lib/replacement/line.js +9 -7
  38. package/lib/replacement/subDivision/embedDirectives.js +152 -0
  39. package/lib/replacement/subDivision/footnote.js +10 -2
  40. package/lib/replacement/subDivision/footnotesDirective.js +33 -2
  41. package/lib/replacement/subDivision/includeDirectives.js +184 -0
  42. package/lib/replacement/subDivision.js +55 -12
  43. package/lib/replacement.js +28 -6
  44. package/lib/utilities/childNodes.js +4 -17
  45. package/lib/utilities/footnotes.js +9 -6
  46. package/lib/utilities/processing.js +83 -0
  47. package/lib/utilities/query.js +2 -2
  48. package/lib/utilities/replacement.js +31 -6
  49. package/package.json +1 -1
  50. package/src/defaultMarkdownStyle.js +0 -1
  51. package/src/example/constants.js +3 -4
  52. package/src/example/importer.js +121 -0
  53. package/src/example/view/textarea/css.js +1 -1
  54. package/src/example/view.js +9 -40
  55. package/src/example.js +2 -2
  56. package/src/index.js +1 -1
  57. package/src/markdown/bnf.js +3 -1
  58. package/src/mixins/node.js +54 -5
  59. package/src/node/markdown/blockLine.js +2 -0
  60. package/src/node/markdown/blockListingEnd.js +2 -0
  61. package/src/node/markdown/blockListingStart.js +2 -0
  62. package/src/node/markdown/contentsLink.js +1 -2
  63. package/src/node/markdown/contentsList.js +1 -1
  64. package/src/node/markdown/directive/embee.js +15 -18
  65. package/src/node/markdown/directive/include.js +20 -28
  66. package/src/node/markdown/directive.js +1 -5
  67. package/src/node/markdown/directives.js +15 -52
  68. package/src/node/markdown/division.js +74 -69
  69. package/src/node/markdown/emailLink.js +0 -6
  70. package/src/node/markdown/endOfLine.js +2 -6
  71. package/src/node/markdown/footnotesList.js +2 -8
  72. package/src/node/markdown/heading.js +2 -8
  73. package/src/node/markdown/plainText.js +6 -0
  74. package/src/node/markdown/subDivision.js +24 -7
  75. package/src/node/markdown/tableCell.js +4 -5
  76. package/src/node/markdown.js +26 -74
  77. package/src/replacement/contentsItem.js +7 -2
  78. package/src/replacement/contentsLink.js +1 -3
  79. package/src/replacement/contentsList.js +4 -6
  80. package/src/replacement/embedDirective.js +34 -0
  81. package/src/replacement/footnote.js +38 -1
  82. package/src/replacement/footnotesItem.js +10 -23
  83. package/src/replacement/footnotesList.js +28 -20
  84. package/src/replacement/includeDirective.js +49 -0
  85. package/src/replacement/line.js +7 -2
  86. package/src/replacement/subDivision/embedDirectives.js +52 -0
  87. package/src/replacement/subDivision/footnote.js +9 -0
  88. package/src/replacement/subDivision/footnotesDirective.js +6 -0
  89. package/src/replacement/subDivision/includeDirectives.js +58 -0
  90. package/src/replacement/subDivision.js +13 -14
  91. package/src/replacement.js +19 -9
  92. package/src/utilities/childNodes.js +3 -5
  93. package/src/utilities/footnotes.js +9 -7
  94. package/src/utilities/processing.js +93 -0
  95. package/src/utilities/query.js +9 -9
  96. package/src/utilities/replacement.js +28 -5
  97. package/lib/replacement/imported.js +0 -151
  98. package/lib/utilities/markdown.js +0 -87
  99. package/src/replacement/imported.js +0 -13
  100. package/src/utilities/markdown.js +0 -103
@@ -24,12 +24,11 @@ export default class TableCellMarkdownNode extends MarkdownNode {
24
24
 
25
25
  lineMarkdownNode.createDOMElement(context);
26
26
 
27
- const domElements = lineMarkdownNode.getDOMElements(),
28
- parentDOMElement = domElement; ///
27
+ const parentDOMElement = domElement; ///
29
28
 
30
- domElements.forEach((domElement) => {
31
- parentDOMElement.appendChild(domElement)
32
- });
29
+ domElement = lineMarkdownNode.getDOMElement();
30
+
31
+ parentDOMElement.appendChild(domElement)
33
32
  }
34
33
 
35
34
  static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(TableCellMarkdownNode, ruleName, childNodes, opacity); }
@@ -102,80 +102,34 @@ class MarkdownNode extends NonTerminalNode {
102
102
  return attributeValue;
103
103
  }
104
104
 
105
- resolveIncludes(context) {
106
- const childNodes = this.getChildNodes();
107
-
108
- childNodes.forEach((childNode) => {
109
- const childNodeNonTerminalNode = childNode.isNonTerminalNode();
110
-
111
- if (childNodeNonTerminalNode) {
112
- const nonTerminalNode = childNode, ///
113
- markdownNode = nonTerminalNode; ///
105
+ isPlainTextMarkdownNode() {
106
+ const plainTextMarkdownNode = false;
114
107
 
115
- markdownNode.resolveIncludes(context);
116
- }
117
- });
108
+ return plainTextMarkdownNode;
118
109
  }
119
110
 
120
- resolveEmbeddings(context) {
121
- const childNodes = this.getChildNodes();
122
-
123
- childNodes.forEach((childNode) => {
124
- const childNodeNonTerminalNode = childNode.isNonTerminalNode();
125
-
126
- if (childNodeNonTerminalNode) {
127
- const nonTerminalNode = childNode, ///
128
- markdownNode = nonTerminalNode; ///
129
-
130
- markdownNode.resolveEmbeddings(context);
131
- }
132
- });
133
- }
111
+ lines(context) {
112
+ let lines;
134
113
 
135
- retrieveParentNode(childNode, node = this) {
136
- let parentNode = null;
114
+ ({ lines = null } = this.constructor);
137
115
 
138
- const nodeNonTerminalNode = node.isNonTerminalNode();
116
+ if (lines === null) {
117
+ const childNodes = this.getChildNodes();
139
118
 
140
- if (nodeNonTerminalNode) {
141
- const nonTerminalNode = node, ///
142
- childNodes = nonTerminalNode.getChildNodes(),
143
- index = childNodes.indexOf(childNode);
119
+ lines = childNodes.reduce((lines, childNode) => {
120
+ const childNodeMarkdownNode = (childNode instanceof MarkdownNode);
144
121
 
145
- if (index !== -1) {
146
- parentNode = node; ///
147
- } else {
148
- const nodes = childNodes; ///
122
+ if (childNodeMarkdownNode) {
123
+ const markdownNode = childNode, ///
124
+ markdownNodeLines = markdownNode.lines(context);
149
125
 
150
- nodes.some((node) => {
151
- parentNode = this.retrieveParentNode(childNode, node);
126
+ lines += markdownNodeLines;
127
+ }
152
128
 
153
- if (parentNode !== null) {
154
- return true;
155
- }
156
- });
157
- }
129
+ return lines;
130
+ }, 0);
158
131
  }
159
132
 
160
- return parentNode;
161
- }
162
-
163
- lines(context) {
164
- const childNodes = this.getChildNodes(),
165
- lines = childNodes.reduce((lines, childNode) => {
166
- const childNodeNonTerminalNode = childNode.isNonTerminalNode();
167
-
168
- if (childNodeNonTerminalNode) {
169
- const nonTerminalNode = childNode, ///
170
- markdownNode = nonTerminalNode, ///
171
- markdownNodeLines = markdownNode.lines(context);
172
-
173
- lines += markdownNodeLines;
174
- }
175
-
176
- return lines;
177
- }, 0);
178
-
179
133
  return lines;
180
134
  }
181
135
 
@@ -214,11 +168,10 @@ ${childNodesHTML}${indent}${closingTag}
214
168
  childNodesAsHTML(indent, context) {
215
169
  const childNodes = this.getChildNodes(),
216
170
  childNodesHTML = childNodes.reduce((childNodesHTML, childNode) => {
217
- const childNodeNonTerminalNode = childNode.isNonTerminalNode();
171
+ const childNodeMarkdownNode = (childNode instanceof MarkdownNode);
218
172
 
219
- if (childNodeNonTerminalNode) {
220
- const nonTerminalNode = childNode, ///
221
- markdownNode = nonTerminalNode, ///
173
+ if (childNodeMarkdownNode) {
174
+ const markdownNode = childNode, ///
222
175
  markdownNodeHTML = markdownNode.asHTML(indent, context);
223
176
 
224
177
  if (markdownNodeHTML !== null) {
@@ -268,19 +221,18 @@ ${childNodesHTML}${indent}${closingTag}
268
221
  const childNodes = this.getChildNodes();
269
222
 
270
223
  childNodes.forEach((childNode) => {
271
- const childNodeNonTerminalNode = childNode.isNonTerminalNode();
224
+ const childNodeMarkdownNode = (childNode instanceof MarkdownNode);
272
225
 
273
- if (childNodeNonTerminalNode) {
274
- const nonTerminalNode = childNode, ///
275
- markdownNode = nonTerminalNode; ///
226
+ if (childNodeMarkdownNode) {
227
+ const markdownNode = childNode; ///
276
228
 
277
229
  markdownNode.createDOMElement(context);
278
230
 
279
- const domElements = markdownNode.getDOMElements();
231
+ const domElement = markdownNode.getDOMElement();
280
232
 
281
- domElements.forEach((domElement) => {
233
+ if (domElement !== null) {
282
234
  this.addDOMElement(domElement);
283
- });
235
+ }
284
236
  }
285
237
  });
286
238
  }
@@ -5,7 +5,12 @@ import ContentsLinkReplacement from "../replacement/contentsLink";
5
5
  import ContentsItemMarkdownNode from "../node/markdown/contentsItem";
6
6
 
7
7
  export default class ContentsItemReplacement extends Replacement {
8
- static fromNodeAndTokens(node, tokens) { return Replacement.fromNodeAndTokens(ContentsItemReplacement, node, tokens); }
8
+ getContentsItemMarkdownNode() {
9
+ const node = this.getNode(),
10
+ contentsItemMarkdownNode = node; ///
11
+
12
+ return contentsItemMarkdownNode;
13
+ }
9
14
 
10
15
  static fromNestedHeadingMarkdownNode(nestedHeadingMarkdownNode, context) {
11
16
  const replacements = [],
@@ -42,7 +47,7 @@ export default class ContentsItemReplacement extends Replacement {
42
47
  replacement.getTokens(tokens);
43
48
  });
44
49
 
45
- const contentsItemReplacement = ContentsItemReplacement.fromNodeAndTokens(node, tokens);
50
+ const contentsItemReplacement = Replacement.fromNodeAndTokens(ContentsItemReplacement, node, tokens);
46
51
 
47
52
  return contentsItemReplacement;
48
53
  }
@@ -5,8 +5,6 @@ import LineReplacement from "../replacement/line";
5
5
  import ContentsLinkMarkdownNode from "../node/markdown/contentsLink";
6
6
 
7
7
  export default class ContentsLinkReplacement extends Replacement {
8
- static fromNodeAndTokens(node, tokens) { return super.fromNodeAndTokens(ContentsLinkReplacement, node, tokens); }
9
-
10
8
  static fromNestedHeadingMarkdownNode(nestedHeadingMarkdownNode, context) {
11
9
  let contentsLinkReplacement = null;
12
10
 
@@ -21,7 +19,7 @@ export default class ContentsLinkReplacement extends Replacement {
21
19
  node = contentsLinkMarkdownNode, ///
22
20
  tokens = lineReplacement.getTokens();
23
21
 
24
- contentsLinkReplacement = ContentsLinkReplacement.fromNodeAndTokens(node, tokens);
22
+ contentsLinkReplacement = Replacement.fromNodeAndTokens(ContentsLinkReplacement, node, tokens);
25
23
  }
26
24
 
27
25
  return contentsLinkReplacement;
@@ -13,15 +13,13 @@ const { filter } = arrayUtilities;
13
13
 
14
14
  export default class ContentsListReplacement extends Replacement {
15
15
  replaceContentsDirectiveSubdivisionReplacement(contentsDirectiveSubDivisionReplacement, divisionMarkdownNode, context) {
16
- const contentsDirectiveSubDivisionReplacementRemovedNode = contentsDirectiveSubDivisionReplacement.getRemovedNode(),
17
- replacedNode = contentsDirectiveSubDivisionReplacementRemovedNode, ///
16
+ const subDivisionMarkdownNode = contentsDirectiveSubDivisionReplacement.getSubDivisionMarkdownNode(),
17
+ replacedNode = subDivisionMarkdownNode, ///
18
18
  parentNode = divisionMarkdownNode; ///
19
19
 
20
20
  super.replace(replacedNode, parentNode, context)
21
21
  }
22
22
 
23
- static fromNodeAndTokens(node, tokens) { return Replacement.fromNodeAndTokens(ContentsListReplacement, node, tokens); }
24
-
25
23
  static fromNestedHeadingMarkdownNodes(nestedHeadingMarkdownNodes, context) {
26
24
  const contentsItemReplacements = contentsItemReplacementsFromNestedHeadingMarkdownNodes(nestedHeadingMarkdownNodes, context),
27
25
  contentsListMarkdownNode = ContentsListMarkdownNode.fromContentsItemReplacements(contentsItemReplacements),
@@ -32,7 +30,7 @@ export default class ContentsListReplacement extends Replacement {
32
30
  contentsItemReplacement.getTokens(tokens);
33
31
  });
34
32
 
35
- const contentsListReplacement = ContentsListReplacement.fromNodeAndTokens(node, tokens);
33
+ const contentsListReplacement = Replacement.fromNodeAndTokens(ContentsListReplacement, node, tokens);
36
34
 
37
35
  return contentsListReplacement;
38
36
  }
@@ -54,7 +52,7 @@ export default class ContentsListReplacement extends Replacement {
54
52
  contentsItemReplacement.getTokens(tokens);
55
53
  });
56
54
 
57
- contentsListReplacement = ContentsListReplacement.fromNodeAndTokens(node, tokens);
55
+ contentsListReplacement = Replacement.fromNodeAndTokens(ContentsListReplacement, node, tokens);
58
56
  }
59
57
 
60
58
  return contentsListReplacement;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ import Replacement from "../replacement";
4
+
5
+ import { subDivisionMarkdownNodesFromNode } from "../utilities/query";
6
+
7
+ export default class EmbedDirectiveReplacement extends Replacement {
8
+ addAfterSubDivisionMarkdownNode(subDivisionMarkdownNode, divisionMarkdownNode, subDivisionMarkdownNodes, context) {
9
+ const existingNode = subDivisionMarkdownNode, ///
10
+ parentNode = divisionMarkdownNode; ///
11
+
12
+ super.addAfter(existingNode, parentNode, context);
13
+
14
+ divisionMarkdownNode = this.getDivisionMarkdownNode(); ///
15
+
16
+ const node = divisionMarkdownNode; ///
17
+
18
+ subDivisionMarkdownNodesFromNode(node, subDivisionMarkdownNodes);
19
+ }
20
+
21
+ getDivisionMarkdownNode() {
22
+ const node = this.getNode(),
23
+ divisionMarkdownNode = node; ///
24
+
25
+ return divisionMarkdownNode;
26
+ }
27
+
28
+ static fromDivisionMarkdownNodeAndTokens(divisionMarkdownNode, tokens) {
29
+ const node = divisionMarkdownNode, ///
30
+ embedDirectiveReplacement = Replacement.fromNodeAndTokens(EmbedDirectiveReplacement, node, tokens);
31
+
32
+ return embedDirectiveReplacement;
33
+ }
34
+ }
@@ -5,11 +5,48 @@ import Replacement from "../replacement";
5
5
  import { footnoteMarkdownNodeFromNode } from "../utilities/query";
6
6
 
7
7
  export default class FootnoteReplacement extends Replacement {
8
+ constructor(node, tokens, number) {
9
+ super(node, tokens);
10
+
11
+ this.number = number;
12
+ }
13
+
14
+ getNumber() {
15
+ return this.number;
16
+ }
17
+
18
+ setNumber(number) {
19
+ this.number = number;
20
+ }
21
+
22
+ isNumbered() {
23
+ const numbered = (this.number !== null);
24
+
25
+ return numbered;
26
+ }
27
+
28
+ isUnnumbered() {
29
+ const numbered = this.isNumbered(),
30
+ unnumbered = !numbered;
31
+
32
+ return unnumbered;
33
+ }
34
+
35
+ getFootnoteMarkdownNode() {
36
+ const node = this.getNode(),
37
+ footnoteMarkdownNode = node; ///
38
+
39
+ return footnoteMarkdownNode;
40
+ }
41
+
42
+ static fromNode(node, context, ...remainingArguments) { return Replacement.fromNode(FootnoteReplacement, node, context, ...remainingArguments); }
43
+
8
44
  static fromFootnoteSubDivisionReplacement(footnoteSubDivisionReplacement) {
9
45
  const node = footnoteSubDivisionReplacement.getNode(),
10
46
  footnoteMarkdownNode = footnoteMarkdownNodeFromNode(node),
11
47
  descendentNode = footnoteMarkdownNode, ///
12
- footnoteReplacement = footnoteSubDivisionReplacement.contract(FootnoteReplacement, descendentNode);
48
+ number = null,
49
+ footnoteReplacement = footnoteSubDivisionReplacement.contract(FootnoteReplacement, descendentNode, number);
13
50
 
14
51
  return footnoteReplacement;
15
52
  }
@@ -1,37 +1,24 @@
1
1
  "use strict";
2
2
 
3
- import { arrayUtilities } from "necessary";
4
-
5
3
  import Replacement from "../replacement";
6
4
 
7
5
  import FootnotesItemMarkdownNode from "../node/markdown/footnotesItem";
8
6
 
9
- const { extract } = arrayUtilities;
10
-
11
7
  export default class FootnotesItemReplacement extends Replacement {
12
- static fromNode(node, context) { return Replacement.fromNode(FootnotesItemReplacement, node, context); }
13
-
14
- static fromFootnoteReplacementsAndIdentifier(footnoteReplacements, identifier, context) {
15
- let footnotesItemReplacement = null;
8
+ getFootnotesItemMarkdownNode() {
9
+ const node = this.getNode(),
10
+ footnotesItemMarkdownNode = node; ///
16
11
 
17
- const footnoteReplacement = extract(footnoteReplacements, (footnoteReplacement) => {
18
- const node = footnoteReplacement.getNode(),
19
- footnoteMarkdownNode = node, ///
20
- footnoteMarkdownNodeIdentifier = footnoteMarkdownNode.identifier(context);
12
+ return footnotesItemMarkdownNode;
13
+ }
21
14
 
22
- if (footnoteMarkdownNodeIdentifier === identifier) {
23
- return true;
24
- }
25
- }) || null;
15
+ static fromNode(node, context) { return Replacement.fromNode(FootnotesItemReplacement, node, context); }
26
16
 
27
- if (footnoteReplacement !== null) {
28
- const node = footnoteReplacement.getNode(),
29
- footnoteMarkdownNode = node, ///
17
+ static fromFootnoteReplacementAndIdentifier(footnoteReplacement, identifier) {
18
+ const footnoteMarkdownNode = footnoteReplacement.getFootnoteMarkdownNode(),
30
19
  footnotesItemMarkdownNode = FootnotesItemMarkdownNode.fromFootnotesMarkdownNodeAndIdentifier(footnoteMarkdownNode, identifier),
31
- ascendantNode = footnotesItemMarkdownNode; ///
32
-
33
- footnotesItemReplacement = footnoteReplacement.expand(FootnotesItemReplacement, ascendantNode);
34
- }
20
+ ascendantNode = footnotesItemMarkdownNode, ///
21
+ footnotesItemReplacement = footnoteReplacement.expand(FootnotesItemReplacement, ascendantNode);
35
22
 
36
23
  return footnotesItemReplacement;
37
24
  }
@@ -13,43 +13,36 @@ export default class FootnotesListReplacement extends Replacement {
13
13
  super.appendTo(parentNode, context);
14
14
  }
15
15
 
16
- static fromNodeAndTokens(node, tokens) { return Replacement.fromNodeAndTokens(FootnotesListReplacement, node, tokens); }
17
-
18
- static fromFootnoteReplacementsAndDivisionMarkdownNode(footnoteReplacements, divisionMarkdownNode, context) {
16
+ static fromDivisionMarkdownNodeAndFootnoteMap(divisionMarkdownNode, footnoteMap, context) {
19
17
  let footnotesListReplacement = null;
20
18
 
21
- const { footnoteNumberMap } = context;
22
-
23
19
  const node = divisionMarkdownNode, ///
24
- footnoteNumbers = Object.values(footnoteNumberMap),
20
+ start = startFromFootnoteMap(footnoteMap),
25
21
  linkMarkdownNodes = linkMarkdownNodesFromNode(node),
26
- footnoteNumbersLength = footnoteNumbers.length,
27
22
  footnotesItemReplacements = [];
28
23
 
29
- let count = 0;
24
+ let number = start;
30
25
 
31
26
  linkMarkdownNodes.forEach((linkMarkdownNode) => {
32
- const identifier = linkMarkdownNode.identifier(context);
27
+ const identifier = linkMarkdownNode.identifier(context),
28
+ footnoteReplacement = footnoteMap[identifier] || null;
33
29
 
34
- let footnoteNumber = footnoteNumberMap[identifier] || null;
30
+ if (footnoteReplacement !== null) {
31
+ const footnoteReplacementUnnumbered = footnoteReplacement.isUnnumbered();
35
32
 
36
- if (footnoteNumber === null) {
37
- const footnotesItemReplacement = FootnotesItemReplacement.fromFootnoteReplacementsAndIdentifier(footnoteReplacements, identifier, context);
33
+ if (footnoteReplacementUnnumbered) {
34
+ const footnotesItemReplacement = FootnotesItemReplacement.fromFootnoteReplacementAndIdentifier(footnoteReplacement, identifier, context);
38
35
 
39
- if (footnotesItemReplacement !== null) {
40
36
  footnotesItemReplacements.push(footnotesItemReplacement);
41
37
 
42
- count++;
38
+ footnoteReplacement.setNumber(number);
43
39
 
44
- footnoteNumber = footnoteNumbersLength + count;
45
-
46
- footnoteNumberMap[identifier] = footnoteNumber;
40
+ number++;
47
41
  }
48
42
  }
49
43
  });
50
44
 
51
- const start = footnoteNumbersLength + 1,
52
- footnotesListMarkdownNode = FootnotesListMarkdownNode.fromFootnotesItemReplacementsAndStart(footnotesItemReplacements, start);
45
+ const footnotesListMarkdownNode = FootnotesListMarkdownNode.fromFootnotesItemReplacementsAndStart(footnotesItemReplacements, start);
53
46
 
54
47
  if (footnotesListMarkdownNode !== null) {
55
48
  const node = footnotesListMarkdownNode, ///
@@ -59,9 +52,24 @@ export default class FootnotesListReplacement extends Replacement {
59
52
  footnotesItemReplacement.getTokens(tokens);
60
53
  });
61
54
 
62
- footnotesListReplacement = FootnotesListReplacement.fromNodeAndTokens(node, tokens);
55
+ footnotesListReplacement = Replacement.fromNodeAndTokens(FootnotesListReplacement, node, tokens);
63
56
  }
64
57
 
65
58
  return footnotesListReplacement;
66
59
  }
67
60
  }
61
+
62
+ function startFromFootnoteMap(footnoteMap) {
63
+ const footnoteReplacements = Object.values(footnoteMap), ///
64
+ numberedFootnoteReplacements = footnoteReplacements.filter((footnoteReplacement) => {
65
+ const footnoteReplacementNumbered = footnoteReplacement.isNumbered();
66
+
67
+ if (footnoteReplacementNumbered) {
68
+ return true;
69
+ }
70
+ }),
71
+ numberedFootnoteReplacementsLength = numberedFootnoteReplacements.length,
72
+ start = numberedFootnoteReplacementsLength + 1;
73
+
74
+ return start;
75
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ import Replacement from "../replacement";
4
+
5
+ import { subDivisionMarkdownNodesFromNode } from "../utilities/query";
6
+
7
+ export default class IncludeDirectiveReplacement extends Replacement {
8
+ addDivisionMarkdownNode(context) {
9
+ const divisionMarkdownNode = this.getDivisionMarkdownNode(),
10
+ ignored = divisionMarkdownNode.isIgnored();
11
+
12
+ if (!ignored) {
13
+ const { divisionMarkdownNodes } = context;
14
+
15
+ divisionMarkdownNodes.push(divisionMarkdownNode);
16
+
17
+ let tokens = this.getTokens();
18
+
19
+ const includedTokens = tokens; ///
20
+
21
+ ({ tokens } = context);
22
+
23
+ const tokensLength = tokens.length,
24
+ start = tokensLength, ///
25
+ deleteCount = 0;
26
+
27
+ tokens.splice(start, deleteCount, ...includedTokens);
28
+ }
29
+
30
+ const node = divisionMarkdownNode, ///
31
+ subDivisionMarkdownNodes = subDivisionMarkdownNodesFromNode(node);
32
+
33
+ return subDivisionMarkdownNodes;
34
+ }
35
+
36
+ getDivisionMarkdownNode() {
37
+ const node = this.getNode(),
38
+ divisionMarkdownNode = node; ///
39
+
40
+ return divisionMarkdownNode;
41
+ }
42
+
43
+ static fromDivisionMarkdownNodeAndTokens(divisionMarkdownNode, tokens) {
44
+ const node = divisionMarkdownNode, ///
45
+ includeDirectiveReplacement = Replacement.fromNodeAndTokens(IncludeDirectiveReplacement, node, tokens);
46
+
47
+ return includeDirectiveReplacement;
48
+ }
49
+ }
@@ -3,11 +3,16 @@
3
3
  import Replacement from "../replacement";
4
4
 
5
5
  export default class LineReplacement extends Replacement {
6
- static fromNode(node, context) { return Replacement.fromNode(LineReplacement, node, context); }
6
+ getLineMarkdownNode() {
7
+ const node = this.getNode(),
8
+ lineMarkdownNode = node; ///
9
+
10
+ return lineMarkdownNode;
11
+ }
7
12
 
8
13
  static fromLineMarkdownNode(lineMarkdownNode, context) {
9
14
  const node = lineMarkdownNode, ///
10
- lineReplacement = LineReplacement.fromNode(node, context);
15
+ lineReplacement = Replacement.fromNode(LineReplacement, node, context);
11
16
 
12
17
  return lineReplacement;
13
18
  }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ import { arrayUtilities } from "necessary";
4
+
5
+ import SubDivisionReplacement from "../../replacement/subDivision";
6
+
7
+ import { embedDirectiveMarkdownNodesFromNode } from "../../utilities/query";
8
+
9
+ const { backwardsForEach } = arrayUtilities;
10
+
11
+ export default class EmbedDirectivesSubDivisionReplacement extends SubDivisionReplacement {
12
+ constructor(node, tokens, subDivisionMarkdownNode, embedDirectiveMarkdownNodes) {
13
+ super(node, tokens, subDivisionMarkdownNode);
14
+
15
+ this.embedDirectiveMarkdownNodes = embedDirectiveMarkdownNodes;
16
+ }
17
+
18
+ getEmbedDirectiveMarkdownNodes() {
19
+ return this.embedDirectiveMarkdownNodes;
20
+ }
21
+
22
+ replaceSubDivisionMarkdownNode(divisionMarkdownNode, context) {
23
+ const subDivisionMarkdownNodes = [],
24
+ subDivisionMarkdownNode = this.getSubDivisionMarkdownNode();
25
+
26
+ backwardsForEach(this.embedDirectiveMarkdownNodes, (embedDirectiveMarkdownNode) => {
27
+ const embedDirectiveReplacement = embedDirectiveMarkdownNode.resolve(context);
28
+
29
+ if (embedDirectiveReplacement !== null) {
30
+ embedDirectiveReplacement.addAfterSubDivisionMarkdownNode(subDivisionMarkdownNode, divisionMarkdownNode, subDivisionMarkdownNodes, context);
31
+ }
32
+ });
33
+
34
+ this.removeFromDivisionMarkdownNode(divisionMarkdownNode, context);
35
+
36
+ return subDivisionMarkdownNodes;
37
+ }
38
+
39
+ static fromSubDivisionMarkdownNode(subDivisionMarkdownNode, context) {
40
+ let embedDirectivesSubDivisionReplacement = null;
41
+
42
+ const node = subDivisionMarkdownNode, ///
43
+ embedDirectiveMarkdownNodes = embedDirectiveMarkdownNodesFromNode(node),
44
+ embedDirectiveMarkdownNodesLength = embedDirectiveMarkdownNodes.length;
45
+
46
+ if (embedDirectiveMarkdownNodesLength > 0) {
47
+ embedDirectivesSubDivisionReplacement = SubDivisionReplacement.fromSubDivisionMarkdownNode(EmbedDirectivesSubDivisionReplacement, subDivisionMarkdownNode, context, embedDirectiveMarkdownNodes);
48
+ }
49
+
50
+ return embedDirectivesSubDivisionReplacement;
51
+ }
52
+ }
@@ -5,6 +5,15 @@ import SubDivisionReplacement from "../../replacement/subDivision";
5
5
  import { footnoteMarkdownNodeFromNode } from "../../utilities/query";
6
6
 
7
7
  export default class FootnoteSubDivisionReplacement extends SubDivisionReplacement {
8
+ identifier(context) {
9
+ const subDivisionMarkdownNode = this.getSubDivisionMarkdownNode(),
10
+ node = subDivisionMarkdownNode, ///
11
+ footnoteMarkdownNode = footnoteMarkdownNodeFromNode(node),
12
+ identifier = footnoteMarkdownNode.identifier(context);
13
+
14
+ return identifier;
15
+ }
16
+
8
17
  static fromSubDivisionMarkdownNode(subDivisionMarkdownNode, context) {
9
18
  let footnoteSubDivisionReplacement = null;
10
19
 
@@ -5,6 +5,12 @@ import SubDivisionReplacement from "../../replacement/subDivision";
5
5
  import { footnotesDirectiveMarkdownNodeFromNode } from "../../utilities/query";
6
6
 
7
7
  export default class FootnotesDirectiveSubDivisionReplacement extends SubDivisionReplacement {
8
+ appendToDivisionMarkdownNode(divisionMarkdownNode, context) {
9
+ const parentNode = divisionMarkdownNode; ///
10
+
11
+ super.appendTo(parentNode, context);
12
+ }
13
+
8
14
  static fromSubDivisionMarkdownNode(subDivisionMarkdownNode, context) {
9
15
  let footnotesDirectiveSubDivisionReplacement = null;
10
16
 
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ import SubDivisionReplacement from "../../replacement/subDivision";
4
+
5
+ import { includeDirectiveMarkdownNodesFromNode } from "../../utilities/query";
6
+
7
+ export default class IncludeDirectivesSubDivisionReplacement extends SubDivisionReplacement {
8
+ constructor(node, tokens, subDivisionMarkdownNode, includeDirectiveMarkdownNodes) {
9
+ super(node, tokens, subDivisionMarkdownNode);
10
+
11
+ this.includeDirectiveMarkdownNodes = includeDirectiveMarkdownNodes;
12
+ }
13
+
14
+ getIncludeDirectiveMarkdownNodes() {
15
+ return this.includeDirectiveMarkdownNodes;
16
+ }
17
+
18
+ removeFromDivisionMarkdownNode(divisionMarkdownNode, context) {
19
+ const ignored = divisionMarkdownNode.isIgnored();
20
+
21
+ if (ignored) {
22
+ return;
23
+ }
24
+
25
+ super.removeFromDivisionMarkdownNode(divisionMarkdownNode, context);
26
+ }
27
+
28
+ removeSubDivisionMarkdownNode(divisionMarkdownNode, context) {
29
+ this.includeDirectiveMarkdownNodes.forEach((includeDirectiveMarkdownNode) => {
30
+ const includeDirectiveReplacement = includeDirectiveMarkdownNode.resolve(context);
31
+
32
+ if (includeDirectiveReplacement !== null) {
33
+ const divisionMarkdownNode = includeDirectiveReplacement.getDivisionMarkdownNode(),
34
+ subDivisionMarkdownNodes = includeDirectiveReplacement.addDivisionMarkdownNode(context);
35
+
36
+ subDivisionMarkdownNodes.forEach((subDivisionMarkdownNode) => {
37
+ subDivisionMarkdownNode.resolveIncludes(divisionMarkdownNode, context);
38
+ });
39
+ }
40
+ });
41
+
42
+ this.removeFromDivisionMarkdownNode(divisionMarkdownNode, context);
43
+ }
44
+
45
+ static fromSubDivisionMarkdownNode(subDivisionMarkdownNode, context) {
46
+ let includeDirectivesSubDivisionReplacement = null;
47
+
48
+ const node = subDivisionMarkdownNode, ///
49
+ includeDirectiveMarkdownNodes = includeDirectiveMarkdownNodesFromNode(node),
50
+ includeDirectiveMarkdownNodesLength = includeDirectiveMarkdownNodes.length;
51
+
52
+ if (includeDirectiveMarkdownNodesLength > 0) {
53
+ includeDirectivesSubDivisionReplacement = SubDivisionReplacement.fromSubDivisionMarkdownNode(IncludeDirectivesSubDivisionReplacement, subDivisionMarkdownNode, context, includeDirectiveMarkdownNodes);
54
+ }
55
+
56
+ return includeDirectivesSubDivisionReplacement;
57
+ }
58
+ }