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
@@ -3,5 +3,7 @@
3
3
  import MarkdownNode from "../../node/markdown";
4
4
 
5
5
  export default class BlockListingEndMarkdownNode extends MarkdownNode {
6
+ static lines = 1;
7
+
6
8
  static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(BlockListingEndMarkdownNode, ruleName, childNodes, opacity); }
7
9
  }
@@ -24,5 +24,7 @@ export default class BlockListingStartMarkdownNode extends MarkdownNode {
24
24
  return className;
25
25
  }
26
26
 
27
+ static lines = 1;
28
+
27
29
  static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(BlockListingStartMarkdownNode, ruleName, childNodes, opacity); }
28
30
  }
@@ -31,8 +31,7 @@ export default class ContentsLinkMarkdownNode extends MarkdownNode {
31
31
  clone() { return super.clone(this.identifier); }
32
32
 
33
33
  static fromLineReplacementAndIdentifier(lineReplacement, identifier) {
34
- const lineReplacementNode = lineReplacement.getNode(),
35
- lineMarkdownNode = lineReplacementNode, ///
34
+ const lineMarkdownNode = lineReplacement.getLineMarkdownNode(),
36
35
  ruleName = CONTENTS_LINK_RULE_NAME,
37
36
  childNodes = [
38
37
  lineMarkdownNode
@@ -8,7 +8,7 @@ export default class ContentsListMarkdownNode extends MarkdownNode {
8
8
  static fromContentsItemReplacements(contentsItemReplacements) {
9
9
  const ruleName = CONTENTS_LIST_RULE_NAME,
10
10
  childNodes = contentsItemReplacements.map((contentsItemReplacement) => {
11
- const contentsItemReplacementNode = contentsItemReplacement.getNode(),
11
+ const contentsItemReplacementNode = contentsItemReplacement.getContentsItemMarkdownNode(),
12
12
  childNode = contentsItemReplacementNode; ///
13
13
 
14
14
  return childNode;
@@ -2,38 +2,35 @@
2
2
 
3
3
  import { arrayUtilities } from "necessary";
4
4
 
5
- import ImportedReplacement from "../../../replacement/imported";
6
5
  import DirectiveMarkdownNode from "../../../node/markdown/directive";
6
+ import EmbedDirectiveReplacement from "../../../replacement/embedDirective";
7
7
 
8
8
  const { last } = arrayUtilities;
9
9
 
10
10
  export default class EmbedDirectiveMarkdownNode extends DirectiveMarkdownNode {
11
- import(context) {
12
- let importedReplacement = null;
11
+ resolve(context) {
12
+ let embedDirectiveReplacement = null;
13
13
 
14
- const { importer = null } = context;
14
+ const { importer } = context;
15
15
 
16
- if (importer !== null) {
17
- const filePath = this.filePath(context);
16
+ const filePath = this.filePath(context);
18
17
 
19
- importer(filePath, context);
18
+ importer(filePath, context);
20
19
 
21
- const { importedNode = null,
22
- importedTokens = null } = context;
20
+ const { importedNode = null,
21
+ importedTokens = null } = context;
23
22
 
24
- if (importedNode !== null) {
25
- const node = importedNode, ///
26
- tokens = importedTokens; ///
23
+ if (importedNode !== null) {
24
+ delete context.importedNode;
25
+ delete context.importedTokens;
27
26
 
28
- importedReplacement = ImportedReplacement.fromNodeAndTokens(node, tokens);
27
+ const divisionMarkdownNode = importedNode, ///
28
+ tokens = importedTokens; ///
29
29
 
30
- delete context.importedNode;
31
- delete context.importedTokens;
32
- delete context.importedClassName;
33
- }
30
+ embedDirectiveReplacement = EmbedDirectiveReplacement.fromDivisionMarkdownNodeAndTokens(divisionMarkdownNode, tokens);
34
31
  }
35
32
 
36
- return importedReplacement;
33
+ return embedDirectiveReplacement;
37
34
  }
38
35
 
39
36
  filePath(context) {
@@ -3,47 +3,39 @@
3
3
  import { arrayUtilities } from "necessary";
4
4
 
5
5
  import DirectiveMarkdownNode from "../../../node/markdown/directive";
6
+ import IncludeDirectiveReplacement from "../../../replacement/includeDirective";
6
7
 
7
- const { push, last } = arrayUtilities;
8
+ const { last } = arrayUtilities;
8
9
 
9
10
  export default class IncludeDirectiveMarkdownNode extends DirectiveMarkdownNode {
10
- resolveIncludes(context) {
11
- let html = null;
11
+ resolve(context) {
12
+ let includeDirectiveReplacement = null;
12
13
 
13
- const { importer = null } = context;
14
+ const { importer } = context;
14
15
 
15
- if (importer !== null) {
16
- const filePath = this.filePath(context);
16
+ const filePath = this.filePath(context);
17
17
 
18
- importer(filePath, context);
18
+ importer(filePath, context);
19
19
 
20
- const { importedNode = null,
21
- importedTokens = null,
22
- importedClassName = null } = context;
20
+ const { importedNode = null,
21
+ importedTokens = null,
22
+ importedClassName = null } = context;
23
23
 
24
- if (importedNode !== null) {
25
- delete context.importedNode;
26
- delete context.importedTokens;
27
- delete context.importedClassName;
24
+ if (importedNode !== null) {
25
+ delete context.importedNode;
26
+ delete context.importedTokens;
27
+ delete context.importedClassName;
28
28
 
29
- const { tokens, divisionMarkdownNodes } = context,
30
- divisionMarkdownNode = importedNode, ///
31
- divisionClassName = importedClassName, ///
32
- ignored = divisionMarkdownNode.isIgnored();
29
+ const divisionMarkdownNode = importedNode, ///
30
+ divisionClassName = importedClassName, ///
31
+ tokens = importedTokens; ///
33
32
 
34
- divisionMarkdownNode.setDivisionClassName(divisionClassName);
33
+ divisionMarkdownNode.setDivisionClassName(divisionClassName);
35
34
 
36
- if (!ignored) {
37
- push(tokens, importedTokens);
38
-
39
- divisionMarkdownNodes.push(divisionMarkdownNode);
40
- }
41
-
42
- divisionMarkdownNode.resolveIncludes(context);
43
- }
35
+ includeDirectiveReplacement = IncludeDirectiveReplacement.fromDivisionMarkdownNodeAndTokens(divisionMarkdownNode, tokens);
44
36
  }
45
37
 
46
- return html;
38
+ return includeDirectiveReplacement;
47
39
  }
48
40
 
49
41
  filePath(context) {
@@ -3,11 +3,7 @@
3
3
  import MarkdownNode from "../../node/markdown";
4
4
 
5
5
  export default class DirectiveMarkdownNode extends MarkdownNode {
6
- lines(context) {
7
- const lines = 0;
8
-
9
- return lines;
10
- }
6
+ static lines = 0;
11
7
 
12
8
  static fromRuleNameChildNodesAndOpacity(Class, ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(Class, ruleName, childNodes, opacity); }
13
9
  }
@@ -4,75 +4,38 @@ import { arrayUtilities } from "necessary";
4
4
 
5
5
  import MarkdownNode from "../../node/markdown";
6
6
 
7
- const { clear, first, push } = arrayUtilities;
7
+ const { first } = arrayUtilities;
8
8
 
9
9
  export default class DirectivesMarkdownNode extends MarkdownNode {
10
- constructor(ruleName, childNodes, opacity, precedence, domElement, domElements) {
11
- super(ruleName, childNodes, opacity, precedence, domElement);
12
-
13
- this.domElements = domElements;
14
- }
15
-
16
10
  getDOMElement() {
17
- let domElement = null;
18
-
19
- const domElementsLength = this.domElements.length;
20
-
21
- if (domElementsLength > 0) {
22
- const firstDOMElement = first(this.domElements);
23
-
24
- domElement = firstDOMElement; ///
25
- }
11
+ const directiveMarkdownNode = this.getDirectiveMarkdownNode(),
12
+ directiveMarkdownNodeDOMElement = directiveMarkdownNode.getDOMElement(),
13
+ domElement = directiveMarkdownNodeDOMElement; ///
26
14
 
27
15
  return domElement;
28
16
  }
29
17
 
30
- getDOMElements() {
31
- return this.domElements;
32
- }
33
-
34
18
  asHTML(indent, context) {
35
- const childNodesHTML = this.childNodesAsHTML(indent, context),
36
- html = childNodesHTML; ///
19
+ const directiveMarkdownNode = this.getDirectiveMarkdownNode(),
20
+ directiveMarkdownNodeHTML = directiveMarkdownNode.asHTML(indent, context),
21
+ html = directiveMarkdownNodeHTML; ///
37
22
 
38
23
  return html;
39
24
  }
40
25
 
41
26
  createDOMElement(context) {
42
- const domElement = null,
43
- childNodes = this.getChildNodes();
44
-
45
- clear(this.domElements);
27
+ const directiveMarkdownNode = this.getDirectiveMarkdownNode();
46
28
 
47
- childNodes.forEach((childNode) => {
48
- const childNodeNonTerminalNode = childNode.isNonTerminalNode();
49
-
50
- if (childNodeNonTerminalNode) {
51
- const nonTerminalNode = childNode, ///
52
- markdownNode = nonTerminalNode; ///
53
-
54
- markdownNode.createDOMElement(context);
55
-
56
- const markdownNodeDOMElements = markdownNode.getDOMElements();
57
-
58
- push(this.domElements, markdownNodeDOMElements);
59
- }
60
- });
61
-
62
- return domElement;
29
+ directiveMarkdownNode.createDOMElement(context);
63
30
  }
64
31
 
65
- clone() {
66
- const domElements = [],
67
- directivesMarkdownNode = super.clone(domElements);
32
+ getDirectiveMarkdownNode() {
33
+ const childNodes = this.getChildNodes(),
34
+ firstChildNode = first(childNodes),
35
+ directiveMarkdownNode = firstChildNode; ///
68
36
 
69
- return directivesMarkdownNode;
37
+ return directiveMarkdownNode;
70
38
  }
71
39
 
72
- static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) {
73
- const domElements = [],
74
- directivesMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(DirectivesMarkdownNode, ruleName, childNodes, opacity, domElements);
75
-
76
- return directivesMarkdownNode;
77
- }
40
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(DirectivesMarkdownNode, ruleName, childNodes, opacity); }
78
41
  }
@@ -14,12 +14,9 @@ import PageNumberDirectiveSubDivisionReplacement from "../../replacement/subDivi
14
14
  import { EMPTY_STRING } from "../../constants";
15
15
  import { DIVISION_RULE_NAME } from "../../ruleNames";
16
16
  import { renumberLinkMarkdownNodes } from "../../utilities/footnotes";
17
- import { subDivisionMarkdownNodesFromNode,
18
- embedDirectiveMarkdownNodesFromNode,
19
- ignoreDirectiveMarkdownNodeFromNode,
20
- pageNumberDirectiveMarkdownNodeFromNode } from "../../utilities/query";
17
+ import { subDivisionMarkdownNodesFromNode, ignoreDirectiveMarkdownNodeFromNode, pageNumberDirectiveMarkdownNodeFromNode } from "../../utilities/query";
21
18
 
22
- const { clear } = arrayUtilities;
19
+ const { clear, filter } = arrayUtilities;
23
20
 
24
21
  export default class DivisionMarkdownNode extends MarkdownNode {
25
22
  constructor(ruleName, childNodes, precedence, opacity, domElement, divisionClassName) {
@@ -43,19 +40,30 @@ export default class DivisionMarkdownNode extends MarkdownNode {
43
40
  }
44
41
 
45
42
  isIgnored() {
46
- const node = this,
43
+ const node = this, ///
47
44
  ignoreDirectiveMarkdownNode = ignoreDirectiveMarkdownNodeFromNode(node),
48
45
  ignored = (ignoreDirectiveMarkdownNode !== null);
49
46
 
50
47
  return ignored;
51
48
  }
52
49
 
53
- paginate(context) {
50
+ paginate(paginatedDivisionMarkdownNodes, context) {
51
+ const footnotesDirectiveSubDivisionReplacement = this.removeSubDivisionMarkdownNode(FootnotesDirectiveSubDivisionReplacement, context),
52
+ pageNumberDirectiveSubDivisionReplacement = this.removeSubDivisionMarkdownNode(PageNumberDirectiveSubDivisionReplacement, context),
53
+ subDivisionReplacements = [
54
+ footnotesDirectiveSubDivisionReplacement,
55
+ pageNumberDirectiveSubDivisionReplacement
56
+ ];
57
+
58
+ filter(subDivisionReplacements, (subDivisionReplacement) => {
59
+ if (subDivisionReplacement !== null) {
60
+ return true;
61
+ }
62
+ });
63
+
54
64
  const { linesPerPage } = context,
55
- childNodes = this.getChildNodes(),
56
65
  paginatedChildNodes = [],
57
- divisionMarkdownNodes = [],
58
- pageNumberDirectiveSubDivisionReplacement = this.removeSubDivisionMarkdownNode(PageNumberDirectiveSubDivisionReplacement, context);
66
+ childNodes = this.getChildNodes();
59
67
 
60
68
  let totalLines = 0;
61
69
 
@@ -68,9 +76,10 @@ export default class DivisionMarkdownNode extends MarkdownNode {
68
76
  paginatedChildNodes.push(paginatedChildNode);
69
77
 
70
78
  if (totalLines > linesPerPage) {
71
- const divisionMarkdownNode = DivisionMarkdownNode.fromPageNumberDirectiveSubDivisionReplacementPaginatedChildNodesAndDivisionClassName(pageNumberDirectiveSubDivisionReplacement, paginatedChildNodes, this.divisionClassName, context);
79
+ const divisionMarkdownNode = DivisionMarkdownNode.fromPaginatedChildNodesSubDivisionReplacementsAndDivisionClassName(paginatedChildNodes, subDivisionReplacements, this.divisionClassName, context),
80
+ paginatedDivisionMarkdownNode = divisionMarkdownNode; ///
72
81
 
73
- divisionMarkdownNodes.push(divisionMarkdownNode);
82
+ paginatedDivisionMarkdownNodes.push(paginatedDivisionMarkdownNode);
74
83
 
75
84
  clear(paginatedChildNodes);
76
85
 
@@ -79,21 +88,26 @@ export default class DivisionMarkdownNode extends MarkdownNode {
79
88
  });
80
89
 
81
90
  if (totalLines > 0) {
82
- const divisionMarkdownNode = DivisionMarkdownNode.fromPageNumberDirectiveSubDivisionReplacementPaginatedChildNodesAndDivisionClassName(pageNumberDirectiveSubDivisionReplacement, paginatedChildNodes, this.divisionClassName, context);
91
+ const divisionMarkdownNode = DivisionMarkdownNode.fromPaginatedChildNodesSubDivisionReplacementsAndDivisionClassName(paginatedChildNodes, subDivisionReplacements, this.divisionClassName, context),
92
+ paginatedDivisionMarkdownNode = divisionMarkdownNode; ///
83
93
 
84
- divisionMarkdownNodes.push(divisionMarkdownNode);
94
+ paginatedDivisionMarkdownNodes.push(paginatedDivisionMarkdownNode);
85
95
  }
86
-
87
- return divisionMarkdownNodes;
88
96
  }
89
97
 
90
98
  setPageNumber(pageNumber) {
91
- const node = this,
92
- pageNumberDirective = pageNumberDirectiveMarkdownNodeFromNode(node);
99
+ const subDivisionMarkdownNodes = this.findSubDivisionMarkdownNodes();
93
100
 
94
- if (pageNumberDirective !== null) {
95
- pageNumberDirective.setPageNumber(pageNumber);
96
- }
101
+ subDivisionMarkdownNodes.some((subDivisionMarkdownNode) => {
102
+ const node = subDivisionMarkdownNode, ///
103
+ pageNumberDirective = pageNumberDirectiveMarkdownNodeFromNode(node);
104
+
105
+ if (pageNumberDirective !== null) {
106
+ pageNumberDirective.setPageNumber(pageNumber);
107
+
108
+ return true;
109
+ }
110
+ });
97
111
  }
98
112
 
99
113
  createContents(divisionMarkdownNodes, context) {
@@ -115,16 +129,18 @@ export default class DivisionMarkdownNode extends MarkdownNode {
115
129
  return contentsCreated;
116
130
  }
117
131
 
118
- createFootnotes(footnoteReplacements, context) {
119
- if (footnoteReplacements !== null) {
132
+ createFootnotes(footnoteMap, context) {
133
+ const footnotesDirectiveSubDivisionReplacement = this.removeSubDivisionMarkdownNode(FootnotesDirectiveSubDivisionReplacement, context);
134
+
135
+ if (footnotesDirectiveSubDivisionReplacement !== null) {
120
136
  const divisionMarkdownNode = this, ///
121
- footnotesListReplacement = FootnotesListReplacement.fromFootnoteReplacementsAndDivisionMarkdownNode(footnoteReplacements, divisionMarkdownNode, context);
137
+ footnotesListReplacement = FootnotesListReplacement.fromDivisionMarkdownNodeAndFootnoteMap(divisionMarkdownNode, footnoteMap, context);
122
138
 
123
139
  if (footnotesListReplacement !== null) {
124
- renumberLinkMarkdownNodes(divisionMarkdownNode, callback, context);
125
-
126
140
  footnotesListReplacement.appendToDivisionMarkdownNode(divisionMarkdownNode, context);
127
141
  }
142
+
143
+ renumberLinkMarkdownNodes(divisionMarkdownNode, footnoteMap, callback, context);
128
144
  }
129
145
 
130
146
  function callback() {
@@ -132,33 +148,32 @@ export default class DivisionMarkdownNode extends MarkdownNode {
132
148
  }
133
149
  }
134
150
 
135
- prepareFootnotes(context) {
151
+ prepareFootnotes(footnoteMap, context) {
136
152
  const footnoteSubDivisionReplacements = this.removeSubDivisionMarkdownNodes(FootnoteSubDivisionReplacement, context);
137
153
 
138
- let footnoteReplacements = footnoteReplacementsFromFootnoteSubDivisionReplacements(footnoteSubDivisionReplacements);
154
+ footnoteSubDivisionReplacements.forEach((footnoteSubDivisionReplacement) => {
155
+ const footnoteReplacement = FootnoteReplacement.fromFootnoteSubDivisionReplacement(footnoteSubDivisionReplacement),
156
+ identifier = footnoteSubDivisionReplacement.identifier(context);
139
157
 
140
- const footnotesDirectiveSubDivisionReplacement = this.removeSubDivisionMarkdownNode(FootnotesDirectiveSubDivisionReplacement, context);
158
+ footnoteMap[identifier] = footnoteReplacement;
159
+ })
160
+ }
141
161
 
142
- if (footnotesDirectiveSubDivisionReplacement === null) {
143
- footnoteReplacements = null;
144
- }
162
+ resolveIncludes(context) {
163
+ const divisionMarkdownNode = this, ///
164
+ subDivisionMarkdownNodes = this.findSubDivisionMarkdownNodes();
145
165
 
146
- return footnoteReplacements;
166
+ subDivisionMarkdownNodes.forEach((subDivisionMarkdownNode) => {
167
+ subDivisionMarkdownNode.resolveIncludes(divisionMarkdownNode, context);
168
+ });
147
169
  }
148
170
 
149
171
  resolveEmbeddings(context) {
150
- const node = this, ///
151
- embedDirectiveMarkdownNodes = embedDirectiveMarkdownNodesFromNode(node);
152
-
153
- embedDirectiveMarkdownNodes.map((embedDirectiveMarkdownNode) => {
154
- const importedReplacement = embedDirectiveMarkdownNode.import(context);
172
+ const divisionMarkdownNode = this, ///
173
+ subDivisionMarkdownNodes = this.findSubDivisionMarkdownNodes();
155
174
 
156
- if (importedReplacement !== null) {
157
- const childNode = embedDirectiveMarkdownNode, ///
158
- parentNode = this.retrieveParentNode(childNode);
159
-
160
- importedReplacement.replaceEmbedDirectiveMarkdownNode(embedDirectiveMarkdownNode, parentNode, context);
161
- }
175
+ subDivisionMarkdownNodes.forEach((subDivisionMarkdownNode) => {
176
+ subDivisionMarkdownNode.resolveEmbeddings(divisionMarkdownNode, context);
162
177
  });
163
178
  }
164
179
 
@@ -205,7 +220,7 @@ export default class DivisionMarkdownNode extends MarkdownNode {
205
220
  subDivisionReplacement = this.findSubDivisionReplacement(SubDivisionReplacement, context);
206
221
 
207
222
  if (subDivisionReplacement !== null) {
208
- subDivisionReplacement.removeFromMarkdownNode(divisionMarkdownNode, context);
223
+ subDivisionReplacement.removeFromDivisionMarkdownNode(divisionMarkdownNode, context);
209
224
  }
210
225
 
211
226
  return subDivisionReplacement;
@@ -216,20 +231,20 @@ export default class DivisionMarkdownNode extends MarkdownNode {
216
231
  subDivisionReplacements = this.findSubDivisionReplacements(SubDivisionReplacement, context);
217
232
 
218
233
  subDivisionReplacements.forEach((subDivisionReplacement) => {
219
- subDivisionReplacement.removeFromMarkdownNode(divisionMarkdownNode, context);
234
+ subDivisionReplacement.removeFromDivisionMarkdownNode(divisionMarkdownNode, context);
220
235
  });
221
236
 
222
237
  return subDivisionReplacements;
223
238
  }
224
239
 
225
- createFootnotesListReplacement(context) {
226
- const footnoteSubDivisionReplacements = this.findSubDivisionReplacements(FootnoteSubDivisionReplacement, context),
227
- footnoteReplacements = footnoteReplacementsFromFootnoteSubDivisionReplacements(footnoteSubDivisionReplacements),
228
- divisionMarkdownNode = this, ///
229
- footnotesListReplacement = FootnotesListReplacement.fromFootnoteReplacementsAndDivisionMarkdownNode(footnoteReplacements, divisionMarkdownNode, context);
230
-
231
- return footnotesListReplacement;
232
- }
240
+ // createFootnotesListReplacement(context) {
241
+ // const footnoteSubDivisionReplacements = this.findSubDivisionReplacements(FootnoteSubDivisionReplacement, context),
242
+ // footnoteReplacements = footnoteReplacementsFromFootnoteSubDivisionReplacements(footnoteSubDivisionReplacements),
243
+ // divisionMarkdownNode = this, ///
244
+ // footnotesListReplacement = FootnotesListReplacement.fromFootnoteReplacementsAndDivisionMarkdownNode(footnoteReplacements, divisionMarkdownNode, context);
245
+ //
246
+ // return footnotesListReplacement;
247
+ // }
233
248
 
234
249
  asHTML(context) {
235
250
  let html = null;
@@ -258,7 +273,7 @@ ${childNodesHTML}${indent}${closingTag}
258
273
  return divisionMarkdownNode;
259
274
  }
260
275
 
261
- static fromPageNumberDirectiveSubDivisionReplacementPaginatedChildNodesAndDivisionClassName(pageNumberDirectiveSubDivisionReplacement, paginatedChildNodes, divisionClassName, context) {
276
+ static fromPaginatedChildNodesSubDivisionReplacementsAndDivisionClassName(paginatedChildNodes, subDivisionReplacements, divisionClassName, context) {
262
277
  const ruleName = DIVISION_RULE_NAME,
263
278
  childNodes = [
264
279
  ...paginatedChildNodes
@@ -266,22 +281,12 @@ ${childNodesHTML}${indent}${closingTag}
266
281
  opacity = null,
267
282
  divisionMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(DivisionMarkdownNode, ruleName, childNodes, opacity, divisionClassName);
268
283
 
269
- if (pageNumberDirectiveSubDivisionReplacement !== null) {
270
- pageNumberDirectiveSubDivisionReplacement = pageNumberDirectiveSubDivisionReplacement.clone(); ///
284
+ subDivisionReplacements.forEach((subDivisionReplacement) => {
285
+ subDivisionReplacement = subDivisionReplacement.clone(); ///
271
286
 
272
- pageNumberDirectiveSubDivisionReplacement.appendToDivisionMarkdownNode(divisionMarkdownNode, context);
273
- }
287
+ subDivisionReplacement.appendToDivisionMarkdownNode(divisionMarkdownNode, context);
288
+ });
274
289
 
275
290
  return divisionMarkdownNode;
276
291
  }
277
292
  }
278
-
279
- function footnoteReplacementsFromFootnoteSubDivisionReplacements(footnoteSubDivisionReplacements) {
280
- const footnoteReplacements = footnoteSubDivisionReplacements.map((footnoteSubDivisionReplacement) => {
281
- const footnoteReplacement = FootnoteReplacement.fromFootnoteSubDivisionReplacement(footnoteSubDivisionReplacement);
282
-
283
- return footnoteReplacement;
284
- });
285
-
286
- return footnoteReplacements;
287
- }
@@ -10,12 +10,6 @@ import { HREF_ATTRIBUTE_NAME } from "../../attributeNames";
10
10
  const { first, second, secondLast } = arrayUtilities;
11
11
 
12
12
  class EmailLinkMarkdownNode extends MarkdownNode {
13
- lines(context) {
14
- const lines = 0;
15
-
16
- return lines;
17
- }
18
-
19
13
  inlineText(context) {
20
14
  let inlineText = null;
21
15
 
@@ -5,12 +5,6 @@ import MarkdownNode from "../../node/markdown";
5
5
  import { CARRIAGE_RETURN } from "../../constants";
6
6
 
7
7
  export default class EndOfLineMarkdownNode extends MarkdownNode {
8
- lines(context) {
9
- const lines = 0;
10
-
11
- return lines;
12
- }
13
-
14
8
  content(context) {
15
9
  const content = CARRIAGE_RETURN;
16
10
 
@@ -34,5 +28,7 @@ export default class EndOfLineMarkdownNode extends MarkdownNode {
34
28
  return domElement;
35
29
  }
36
30
 
31
+ static lines = 1;
32
+
37
33
  static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(EndOfLineMarkdownNode, ruleName, childNodes, opacity); }
38
34
  }
@@ -30,12 +30,6 @@ export default class FootnotesListMarkdownNode extends MarkdownNode {
30
30
 
31
31
  clone() { return super.clone(this.start); }
32
32
 
33
- static fromDivisionMarkdownNode(divisionMarkdownNode, context) {
34
- let footnotesListMarkdownNode = null;
35
-
36
- return footnotesListMarkdownNode;
37
- }
38
-
39
33
  static fromFootnotesItemReplacementsAndStart(footnotesItemReplacements, start) {
40
34
  let footnotesListMarkdownNode = null;
41
35
 
@@ -44,8 +38,8 @@ export default class FootnotesListMarkdownNode extends MarkdownNode {
44
38
  if (footnotesItemReplacementsLength > 0) {
45
39
  const ruleName = FOOTNOTES_LIST_RULE_NAME,
46
40
  childNodes = footnotesItemReplacements.map((footnotesItemReplacement) => {
47
- const footnotesItemReplacementMode = footnotesItemReplacement.getNode(),
48
- childNode = footnotesItemReplacementMode; ///
41
+ const footnotesItemReplacementMode = footnotesItemReplacement.getFootnotesItemMarkdownNode(),
42
+ childNode = footnotesItemReplacementMode; ///
49
43
 
50
44
  return childNode;
51
45
  }),
@@ -11,12 +11,6 @@ import { replaceSpacesWithHyphens, removedLeadingWhitespace, removeNonAlphabetic
11
11
  const { last } = arrayUtilities;
12
12
 
13
13
  export default class HeadingMarkdownNode extends MarkdownNode {
14
- lines(context) {
15
- const { lines } = this.constructor;
16
-
17
- return lines;
18
- }
19
-
20
14
  getDepth() {
21
15
  const { depth } = this.constructor;
22
16
 
@@ -26,9 +20,9 @@ export default class HeadingMarkdownNode extends MarkdownNode {
26
20
  addAnchor(context) {
27
21
  const identifier = this.identifier(context),
28
22
  anchorMarkdownNode = AnchorMarkdownNode.fromIdentifier(identifier),
29
- childNode = anchorMarkdownNode; ///
23
+ prependedChildNode = anchorMarkdownNode; ///
30
24
 
31
- this.prependChildNode(childNode);
25
+ this.prependChildNode(prependedChildNode);
32
26
  }
33
27
 
34
28
  identifier(context) {
@@ -3,5 +3,11 @@
3
3
  import MarkdownNode from "../../node/markdown";
4
4
 
5
5
  export default class PlainTextMarkdownNode extends MarkdownNode {
6
+ isPlainTextMarkdownNode() {
7
+ const plainTextMarkdownNode = true;
8
+
9
+ return plainTextMarkdownNode;
10
+ }
11
+
6
12
  static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(PlainTextMarkdownNode, ruleName, childNodes, opacity); }
7
13
  }
@@ -3,22 +3,39 @@
3
3
  import { arrayUtilities } from "necessary";
4
4
 
5
5
  import MarkdownNode from "../../node/markdown";
6
+ import EmbedDirectivesSubDivisionReplacement from "../../replacement/subDivision/embedDirectives";
7
+ import IncludeDirectivesSubDivisionReplacement from "../../replacement/subDivision/includeDirectives";
6
8
 
7
9
  const { second } = arrayUtilities;
8
10
 
9
11
  export default class SubDivisionMarkdownNode extends MarkdownNode {
10
- getDOMElement() {
11
- const secondMarkdownNode = this.getSecondMarkdownNode(),
12
- domElement = secondMarkdownNode.getDOMElement();
12
+ resolveEmbeddings(divisionMarkdownNode, context) {
13
+ const subDivisionMarkdownNode = this, ///
14
+ embedDirectivesSubDivisionReplacement = EmbedDirectivesSubDivisionReplacement.fromSubDivisionMarkdownNode(subDivisionMarkdownNode, context);
13
15
 
14
- return domElement;
16
+ if (embedDirectivesSubDivisionReplacement !== null) {
17
+ const subDivisionMarkdownNodes = embedDirectivesSubDivisionReplacement.replaceSubDivisionMarkdownNode(divisionMarkdownNode, context);
18
+
19
+ subDivisionMarkdownNodes.forEach((subDivisionMarkdownNode) => {
20
+ subDivisionMarkdownNode.resolveEmbeddings(divisionMarkdownNode, context);
21
+ });
22
+ }
15
23
  }
16
24
 
17
- getDOMElements() {
25
+ resolveIncludes(divisionMarkdownNode, context) {
26
+ const subDivisionMarkdownNode = this, ///
27
+ includeDirectivesSubDivisionReplacement = IncludeDirectivesSubDivisionReplacement.fromSubDivisionMarkdownNode(subDivisionMarkdownNode, context);
28
+
29
+ if (includeDirectivesSubDivisionReplacement !== null) {
30
+ includeDirectivesSubDivisionReplacement.removeSubDivisionMarkdownNode(divisionMarkdownNode, context);
31
+ }
32
+ }
33
+
34
+ getDOMElement() {
18
35
  const secondMarkdownNode = this.getSecondMarkdownNode(),
19
- domElements = secondMarkdownNode.getDOMElements();
36
+ domElement = secondMarkdownNode.getDOMElement();
20
37
 
21
- return domElements;
38
+ return domElement;
22
39
  }
23
40
 
24
41
  lines(context) {