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.
- package/example.js +1682 -832
- package/lib/defaultMarkdownStyle.js +2 -2
- package/lib/example/constants.js +7 -11
- package/lib/example/importer.js +60 -0
- package/lib/example/view/textarea/css.js +2 -2
- package/lib/example/view.js +50 -16
- package/lib/example.js +2 -2
- package/lib/index.js +9 -9
- package/lib/markdown/bnf.js +2 -2
- package/lib/mixins/node.js +42 -6
- package/lib/node/markdown/blockLine.js +15 -1
- package/lib/node/markdown/blockListingEnd.js +15 -1
- package/lib/node/markdown/blockListingStart.js +15 -1
- package/lib/node/markdown/contentsLink.js +2 -2
- package/lib/node/markdown/contentsList.js +2 -2
- package/lib/node/markdown/directive/embee.js +15 -18
- package/lib/node/markdown/directive/include.js +18 -23
- package/lib/node/markdown/directive.js +16 -10
- package/lib/node/markdown/directives.js +13 -62
- package/lib/node/markdown/division.js +63 -54
- package/lib/node/markdown/emailLink.js +1 -8
- package/lib/node/markdown/endOfLine.js +15 -8
- package/lib/node/markdown/footnotesList.js +2 -9
- package/lib/node/markdown/heading.js +3 -10
- package/lib/node/markdown/plainText.js +10 -2
- package/lib/node/markdown/subDivision.js +24 -8
- package/lib/node/markdown/tableCell.js +4 -5
- package/lib/node/markdown.js +35 -65
- package/lib/replacement/contentsItem.js +9 -7
- package/lib/replacement/contentsLink.js +2 -31
- package/lib/replacement/contentsList.js +4 -10
- package/lib/replacement/embedDirective.js +163 -0
- package/lib/replacement/footnote.js +81 -5
- package/lib/replacement/footnotesItem.js +13 -17
- package/lib/replacement/footnotesList.js +23 -22
- package/lib/replacement/includeDirective.js +176 -0
- package/lib/replacement/line.js +9 -7
- package/lib/replacement/subDivision/embedDirectives.js +152 -0
- package/lib/replacement/subDivision/footnote.js +10 -2
- package/lib/replacement/subDivision/footnotesDirective.js +33 -2
- package/lib/replacement/subDivision/includeDirectives.js +184 -0
- package/lib/replacement/subDivision.js +55 -12
- package/lib/replacement.js +28 -6
- package/lib/utilities/childNodes.js +4 -17
- package/lib/utilities/footnotes.js +9 -6
- package/lib/utilities/processing.js +83 -0
- package/lib/utilities/query.js +2 -2
- package/lib/utilities/replacement.js +31 -6
- package/package.json +1 -1
- package/src/defaultMarkdownStyle.js +0 -1
- package/src/example/constants.js +3 -4
- package/src/example/importer.js +121 -0
- package/src/example/view/textarea/css.js +1 -1
- package/src/example/view.js +9 -40
- package/src/example.js +2 -2
- package/src/index.js +1 -1
- package/src/markdown/bnf.js +3 -1
- package/src/mixins/node.js +54 -5
- package/src/node/markdown/blockLine.js +2 -0
- package/src/node/markdown/blockListingEnd.js +2 -0
- package/src/node/markdown/blockListingStart.js +2 -0
- package/src/node/markdown/contentsLink.js +1 -2
- package/src/node/markdown/contentsList.js +1 -1
- package/src/node/markdown/directive/embee.js +15 -18
- package/src/node/markdown/directive/include.js +20 -28
- package/src/node/markdown/directive.js +1 -5
- package/src/node/markdown/directives.js +15 -52
- package/src/node/markdown/division.js +74 -69
- package/src/node/markdown/emailLink.js +0 -6
- package/src/node/markdown/endOfLine.js +2 -6
- package/src/node/markdown/footnotesList.js +2 -8
- package/src/node/markdown/heading.js +2 -8
- package/src/node/markdown/plainText.js +6 -0
- package/src/node/markdown/subDivision.js +24 -7
- package/src/node/markdown/tableCell.js +4 -5
- package/src/node/markdown.js +26 -74
- package/src/replacement/contentsItem.js +7 -2
- package/src/replacement/contentsLink.js +1 -3
- package/src/replacement/contentsList.js +4 -6
- package/src/replacement/embedDirective.js +34 -0
- package/src/replacement/footnote.js +38 -1
- package/src/replacement/footnotesItem.js +10 -23
- package/src/replacement/footnotesList.js +28 -20
- package/src/replacement/includeDirective.js +49 -0
- package/src/replacement/line.js +7 -2
- package/src/replacement/subDivision/embedDirectives.js +52 -0
- package/src/replacement/subDivision/footnote.js +9 -0
- package/src/replacement/subDivision/footnotesDirective.js +6 -0
- package/src/replacement/subDivision/includeDirectives.js +58 -0
- package/src/replacement/subDivision.js +13 -14
- package/src/replacement.js +19 -9
- package/src/utilities/childNodes.js +3 -5
- package/src/utilities/footnotes.js +9 -7
- package/src/utilities/processing.js +93 -0
- package/src/utilities/query.js +9 -9
- package/src/utilities/replacement.js +28 -5
- package/lib/replacement/imported.js +0 -151
- package/lib/utilities/markdown.js +0 -87
- package/src/replacement/imported.js +0 -13
- 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
|
|
28
|
-
parentDOMElement = domElement; ///
|
|
27
|
+
const parentDOMElement = domElement; ///
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
|
|
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); }
|
package/src/node/markdown.js
CHANGED
|
@@ -102,80 +102,34 @@ class MarkdownNode extends NonTerminalNode {
|
|
|
102
102
|
return attributeValue;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
|
|
106
|
-
const
|
|
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
|
-
|
|
116
|
-
}
|
|
117
|
-
});
|
|
108
|
+
return plainTextMarkdownNode;
|
|
118
109
|
}
|
|
119
110
|
|
|
120
|
-
|
|
121
|
-
|
|
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
|
-
|
|
136
|
-
let parentNode = null;
|
|
114
|
+
({ lines = null } = this.constructor);
|
|
137
115
|
|
|
138
|
-
|
|
116
|
+
if (lines === null) {
|
|
117
|
+
const childNodes = this.getChildNodes();
|
|
139
118
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
childNodes = nonTerminalNode.getChildNodes(),
|
|
143
|
-
index = childNodes.indexOf(childNode);
|
|
119
|
+
lines = childNodes.reduce((lines, childNode) => {
|
|
120
|
+
const childNodeMarkdownNode = (childNode instanceof MarkdownNode);
|
|
144
121
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
const nodes = childNodes; ///
|
|
122
|
+
if (childNodeMarkdownNode) {
|
|
123
|
+
const markdownNode = childNode, ///
|
|
124
|
+
markdownNodeLines = markdownNode.lines(context);
|
|
149
125
|
|
|
150
|
-
|
|
151
|
-
|
|
126
|
+
lines += markdownNodeLines;
|
|
127
|
+
}
|
|
152
128
|
|
|
153
|
-
|
|
154
|
-
|
|
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
|
|
171
|
+
const childNodeMarkdownNode = (childNode instanceof MarkdownNode);
|
|
218
172
|
|
|
219
|
-
if (
|
|
220
|
-
const
|
|
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
|
|
224
|
+
const childNodeMarkdownNode = (childNode instanceof MarkdownNode);
|
|
272
225
|
|
|
273
|
-
if (
|
|
274
|
-
const
|
|
275
|
-
markdownNode = nonTerminalNode; ///
|
|
226
|
+
if (childNodeMarkdownNode) {
|
|
227
|
+
const markdownNode = childNode; ///
|
|
276
228
|
|
|
277
229
|
markdownNode.createDOMElement(context);
|
|
278
230
|
|
|
279
|
-
const
|
|
231
|
+
const domElement = markdownNode.getDOMElement();
|
|
280
232
|
|
|
281
|
-
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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
|
|
17
|
-
replacedNode =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
let footnotesItemReplacement = null;
|
|
8
|
+
getFootnotesItemMarkdownNode() {
|
|
9
|
+
const node = this.getNode(),
|
|
10
|
+
footnotesItemMarkdownNode = node; ///
|
|
16
11
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
footnoteMarkdownNode = node, ///
|
|
20
|
-
footnoteMarkdownNodeIdentifier = footnoteMarkdownNode.identifier(context);
|
|
12
|
+
return footnotesItemMarkdownNode;
|
|
13
|
+
}
|
|
21
14
|
|
|
22
|
-
|
|
23
|
-
return true;
|
|
24
|
-
}
|
|
25
|
-
}) || null;
|
|
15
|
+
static fromNode(node, context) { return Replacement.fromNode(FootnotesItemReplacement, node, context); }
|
|
26
16
|
|
|
27
|
-
|
|
28
|
-
const
|
|
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
|
|
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
|
-
|
|
20
|
+
start = startFromFootnoteMap(footnoteMap),
|
|
25
21
|
linkMarkdownNodes = linkMarkdownNodesFromNode(node),
|
|
26
|
-
footnoteNumbersLength = footnoteNumbers.length,
|
|
27
22
|
footnotesItemReplacements = [];
|
|
28
23
|
|
|
29
|
-
let
|
|
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
|
-
|
|
30
|
+
if (footnoteReplacement !== null) {
|
|
31
|
+
const footnoteReplacementUnnumbered = footnoteReplacement.isUnnumbered();
|
|
35
32
|
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
38
|
+
footnoteReplacement.setNumber(number);
|
|
43
39
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
footnoteNumberMap[identifier] = footnoteNumber;
|
|
40
|
+
number++;
|
|
47
41
|
}
|
|
48
42
|
}
|
|
49
43
|
});
|
|
50
44
|
|
|
51
|
-
const
|
|
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 =
|
|
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
|
+
}
|
package/src/replacement/line.js
CHANGED
|
@@ -3,11 +3,16 @@
|
|
|
3
3
|
import Replacement from "../replacement";
|
|
4
4
|
|
|
5
5
|
export default class LineReplacement extends Replacement {
|
|
6
|
-
|
|
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 =
|
|
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
|
+
}
|