highmark-markdown 0.0.404 → 0.0.406
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 +1537 -728
- package/lib/defaultMarkdownStyle.js +2 -2
- package/lib/example/constants.js +7 -11
- package/lib/example/importer.js +56 -0
- package/lib/example/view/textarea/css.js +2 -2
- package/lib/example/view.js +51 -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/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/directives.js +13 -62
- package/lib/node/markdown/division.js +63 -54
- package/lib/node/markdown/footnotesList.js +2 -9
- package/lib/node/markdown/heading.js +3 -3
- 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 +24 -60
- 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 +115 -0
- package/src/example/view/textarea/css.js +1 -1
- package/src/example/view.js +11 -36
- 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/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/directives.js +15 -52
- package/src/node/markdown/division.js +74 -69
- package/src/node/markdown/footnotesList.js +2 -8
- package/src/node/markdown/heading.js +2 -2
- 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 +15 -70
- 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
|
@@ -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
|
+
}
|
|
@@ -3,34 +3,33 @@
|
|
|
3
3
|
import Replacement from "../replacement";
|
|
4
4
|
|
|
5
5
|
export default class SubDivisionReplacement extends Replacement {
|
|
6
|
-
constructor(node, tokens,
|
|
6
|
+
constructor(node, tokens, subDivisionMarkdownNode) {
|
|
7
7
|
super(node, tokens);
|
|
8
8
|
|
|
9
|
-
this.
|
|
9
|
+
this.subDivisionMarkdownNode = subDivisionMarkdownNode;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
return this.
|
|
12
|
+
getSubDivisionMarkdownNode() {
|
|
13
|
+
return this.subDivisionMarkdownNode;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
parentNode = divisionMarkdownNode
|
|
16
|
+
removeFromDivisionMarkdownNode(divisionMarkdownNode, context) {
|
|
17
|
+
const removedNode = this.subDivisionMarkdownNode, ///
|
|
18
|
+
parentNode = divisionMarkdownNode;
|
|
19
19
|
|
|
20
|
-
super.removeFrom(
|
|
20
|
+
super.removeFrom(removedNode, parentNode, context);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
static fromNodeAndTokens(Class, node, tokens) {
|
|
24
|
-
const
|
|
25
|
-
subDivisionReplacement = Replacement.fromNodeAndTokens(Class, node, tokens,
|
|
23
|
+
static fromNodeAndTokens(Class, node, tokens, ...remainingArguments) {
|
|
24
|
+
const subDivisionMarkdownNode = null,
|
|
25
|
+
subDivisionReplacement = Replacement.fromNodeAndTokens(Class, node, tokens, subDivisionMarkdownNode, ...remainingArguments);
|
|
26
26
|
|
|
27
27
|
return subDivisionReplacement;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
static fromSubDivisionMarkdownNode(Class, subDivisionMarkdownNode, context) {
|
|
30
|
+
static fromSubDivisionMarkdownNode(Class, subDivisionMarkdownNode, context, ...remainingArguments) {
|
|
31
31
|
const node = subDivisionMarkdownNode, ///
|
|
32
|
-
|
|
33
|
-
subDivisionReplacement = Replacement.fromNode(Class, node, context, removedNode);
|
|
32
|
+
subDivisionReplacement = Replacement.fromNode(Class, node, context, subDivisionMarkdownNode, ...remainingArguments);
|
|
34
33
|
|
|
35
34
|
return subDivisionReplacement;
|
|
36
35
|
}
|
package/src/replacement.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { arrayUtilities } from "necessary";
|
|
4
4
|
|
|
5
5
|
import { leadingIndexFromNodeAndTokens, trailingIndexFromNodeAndTokens } from "./utilities/node";
|
|
6
|
-
import { removeNode, appendNode, removeTokens, appendTokens, replaceNode, replaceNodes, replaceTokens } from "./utilities/replacement";
|
|
6
|
+
import { removeNode, appendNode, removeTokens, appendTokens, replaceNode, replaceNodes, replaceTokens, addNodesAfter, addTokensAfter } from "./utilities/replacement";
|
|
7
7
|
|
|
8
8
|
const { push } = arrayUtilities;
|
|
9
9
|
|
|
@@ -25,7 +25,7 @@ export default class Replacement {
|
|
|
25
25
|
|
|
26
26
|
getChildNodes() { return this.node.getChildNodes(); }
|
|
27
27
|
|
|
28
|
-
contract(Class, descendentNode) {
|
|
28
|
+
contract(Class, descendentNode, ...remainingArguments) {
|
|
29
29
|
if (descendentNode === undefined) {
|
|
30
30
|
descendentNode = Class; ///
|
|
31
31
|
|
|
@@ -37,12 +37,12 @@ export default class Replacement {
|
|
|
37
37
|
context = { ///
|
|
38
38
|
tokens
|
|
39
39
|
},
|
|
40
|
-
replacement = Class.fromNode(node, context);
|
|
40
|
+
replacement = Class.fromNode(node, context, ...remainingArguments);
|
|
41
41
|
|
|
42
42
|
return replacement;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
expand(Class, ascendantNode) {
|
|
45
|
+
expand(Class, ascendantNode, ...remainingArguments) {
|
|
46
46
|
if (ascendantNode === undefined) {
|
|
47
47
|
ascendantNode = Class;
|
|
48
48
|
|
|
@@ -54,19 +54,29 @@ export default class Replacement {
|
|
|
54
54
|
context = {
|
|
55
55
|
tokens
|
|
56
56
|
},
|
|
57
|
-
replacement = Class.fromNode(node, context);
|
|
57
|
+
replacement = Class.fromNode(node, context, ...remainingArguments);
|
|
58
58
|
|
|
59
59
|
return replacement;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
appendTo(parentNode, context) {
|
|
63
63
|
const { tokens } = context,
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
appendedNode = this.node, ///
|
|
65
|
+
appendedTokens = this.tokens; ///
|
|
66
66
|
|
|
67
|
-
appendNode(
|
|
67
|
+
appendNode(appendedNode, parentNode);
|
|
68
68
|
|
|
69
|
-
appendTokens(
|
|
69
|
+
appendTokens(appendedTokens, parentNode, tokens);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
addAfter(existingNode, parentNode, context) {
|
|
73
|
+
const { tokens } = context,
|
|
74
|
+
addedNodes = this.getChildNodes(), ///
|
|
75
|
+
addedTokens = this.tokens; ///
|
|
76
|
+
|
|
77
|
+
addNodesAfter(existingNode, addedNodes, parentNode);
|
|
78
|
+
|
|
79
|
+
addTokensAfter(existingNode, addedTokens, tokens);
|
|
70
80
|
}
|
|
71
81
|
|
|
72
82
|
replace(replacedNode, parentNode, context) {
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import { arrayUtilities } from "necessary";
|
|
4
4
|
|
|
5
|
-
import PlainTextMarkdownNode from "../node/markdown/plainText";
|
|
6
|
-
|
|
7
5
|
import { EMPTY_STRING } from "../constants";
|
|
8
6
|
import { contentFromNodes } from "../utilities/content";
|
|
9
7
|
|
|
@@ -19,7 +17,7 @@ export function htmlFromChildNodes(childNodes, context) {
|
|
|
19
17
|
if (childNodeNonTerminalNode) {
|
|
20
18
|
const nonTerminalNode = childNode, ///
|
|
21
19
|
markdownNode = nonTerminalNode, ///
|
|
22
|
-
markdownNodePlainTextMarkdownNode = (
|
|
20
|
+
markdownNodePlainTextMarkdownNode = markdownNode.isPlainTextMarkdownNode();
|
|
23
21
|
|
|
24
22
|
if (markdownNodePlainTextMarkdownNode) {
|
|
25
23
|
const plainTextMarkdownNode = markdownNode; ///
|
|
@@ -67,7 +65,7 @@ export function plainTextFromChildNodes(childNodes, context) {
|
|
|
67
65
|
if (childNodeNonTerminalNode) {
|
|
68
66
|
const nonTerminalNode = childNode, ///
|
|
69
67
|
markdownNode = nonTerminalNode, ///
|
|
70
|
-
markdownNodePlainTextMarkdownNode = (
|
|
68
|
+
markdownNodePlainTextMarkdownNode = markdownNode.isPlainTextMarkdownNode();
|
|
71
69
|
|
|
72
70
|
if (markdownNodePlainTextMarkdownNode) {
|
|
73
71
|
const plainTextMarkdownNode = markdownNode; ///
|
|
@@ -117,7 +115,7 @@ export function domElementsFromChildNodes(childNodes, context) {
|
|
|
117
115
|
if (childNodeNonTerminalNode) {
|
|
118
116
|
const nonTerminalNode = childNode, ///
|
|
119
117
|
markdownNode = nonTerminalNode, ///
|
|
120
|
-
markdownNodePlainTextMarkdownNode = (
|
|
118
|
+
markdownNodePlainTextMarkdownNode = markdownNode.isPlainTextMarkdownNode();
|
|
121
119
|
|
|
122
120
|
if (markdownNodePlainTextMarkdownNode) {
|
|
123
121
|
const plainTextMarkdownNode = markdownNode; ///
|
|
@@ -2,19 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
import { linkMarkdownNodesFromNode } from "../utilities/query";
|
|
4
4
|
|
|
5
|
-
export function renumberLinkMarkdownNodes(divisionMarkdownNode, callback, context) {
|
|
6
|
-
const
|
|
7
|
-
node = divisionMarkdownNode, ///
|
|
5
|
+
export function renumberLinkMarkdownNodes(divisionMarkdownNode, footnoteMap, callback, context) {
|
|
6
|
+
const node = divisionMarkdownNode, ///
|
|
8
7
|
linkMarkdownNodes = linkMarkdownNodesFromNode(node);
|
|
9
8
|
|
|
10
9
|
linkMarkdownNodes.forEach((linkMarkdownNode) => {
|
|
11
10
|
const identifier = linkMarkdownNode.identifier(context),
|
|
12
|
-
|
|
13
|
-
number = footnoteNumber; ///
|
|
11
|
+
footnoteReplacement = footnoteMap[identifier] || null;
|
|
14
12
|
|
|
15
|
-
|
|
13
|
+
if (footnoteReplacement !== null) {
|
|
14
|
+
const number = footnoteReplacement.getNumber();
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
linkMarkdownNode.setNumber(number);
|
|
17
|
+
|
|
18
|
+
callback(linkMarkdownNode);
|
|
19
|
+
}
|
|
18
20
|
});
|
|
19
21
|
}
|
|
20
22
|
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export function postprocess(divisionMarkdownNode, context) {
|
|
4
|
+
let divisionMarkdownNodes;
|
|
5
|
+
|
|
6
|
+
divisionMarkdownNodes = resolveIncludes(divisionMarkdownNode, context);
|
|
7
|
+
|
|
8
|
+
resolveEmbeddings(divisionMarkdownNodes, context);
|
|
9
|
+
|
|
10
|
+
const footnoteMap = prepareFootnotes(divisionMarkdownNodes, context);
|
|
11
|
+
|
|
12
|
+
divisionMarkdownNodes = paginate(divisionMarkdownNodes, context);
|
|
13
|
+
|
|
14
|
+
createFootnotes(divisionMarkdownNodes, footnoteMap, context);
|
|
15
|
+
|
|
16
|
+
createContents(divisionMarkdownNodes, context);
|
|
17
|
+
|
|
18
|
+
return divisionMarkdownNodes;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function paginate(divisionMarkdownNodes, context) {
|
|
22
|
+
const paginatedDivisionMarkdownNodes = [];
|
|
23
|
+
|
|
24
|
+
divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
|
|
25
|
+
divisionMarkdownNode.paginate(paginatedDivisionMarkdownNodes, context);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
paginatedDivisionMarkdownNodes.forEach((paginatedDivisionMarkdownNode, index) => {
|
|
29
|
+
const pageNumber = index + 1;
|
|
30
|
+
|
|
31
|
+
paginatedDivisionMarkdownNode.setPageNumber(pageNumber);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
divisionMarkdownNodes = paginatedDivisionMarkdownNodes; ///
|
|
35
|
+
|
|
36
|
+
return divisionMarkdownNodes;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function createContents(divisionMarkdownNodes, context) {
|
|
40
|
+
divisionMarkdownNodes.some((divisionMarkdownNode) => {
|
|
41
|
+
const contentsCreated = divisionMarkdownNode.createContents(divisionMarkdownNodes, context);
|
|
42
|
+
|
|
43
|
+
if (contentsCreated) {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function createFootnotes(divisionMarkdownNodes, footnoteMap, context) {
|
|
50
|
+
divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
|
|
51
|
+
divisionMarkdownNode.createFootnotes(footnoteMap, context);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function resolveIncludes(divisionMarkdownNode, context) {
|
|
56
|
+
const divisionMarkdownNodes = [];
|
|
57
|
+
|
|
58
|
+
Object.assign(context, {
|
|
59
|
+
divisionMarkdownNodes
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
const divisionMarkdownNodeIgnored = divisionMarkdownNode.isIgnored();
|
|
63
|
+
|
|
64
|
+
if (!divisionMarkdownNodeIgnored) {
|
|
65
|
+
divisionMarkdownNodes.push(divisionMarkdownNode);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
divisionMarkdownNode.resolveIncludes(context);
|
|
69
|
+
|
|
70
|
+
delete context.divisionMarkdownNodes;
|
|
71
|
+
|
|
72
|
+
return divisionMarkdownNodes;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function prepareFootnotes(divisionMarkdownNodes, context) {
|
|
76
|
+
const footnoteMap = {};
|
|
77
|
+
|
|
78
|
+
divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
|
|
79
|
+
divisionMarkdownNode.prepareFootnotes(footnoteMap, context);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
return footnoteMap;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function resolveEmbeddings(divisionMarkdownNodes, context) {
|
|
86
|
+
divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
|
|
87
|
+
divisionMarkdownNode.resolveEmbeddings(context);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export default {
|
|
92
|
+
postprocess
|
|
93
|
+
};
|
package/src/utilities/query.js
CHANGED
|
@@ -5,16 +5,16 @@ import { arrayUtilities } from "necessary";
|
|
|
5
5
|
|
|
6
6
|
const { first, push } = arrayUtilities;
|
|
7
7
|
|
|
8
|
-
const footnoteMarkdownNodeQuery = Query.fromExpression("
|
|
9
|
-
ignoreDirectiveMarkdownNodeQuery = Query.fromExpression("
|
|
10
|
-
contentsDirectiveMarkdownNodeQuery = Query.fromExpression("
|
|
11
|
-
footnotesDirectiveMarkdownNodeQuery = Query.fromExpression("
|
|
12
|
-
pageNumberDirectiveMarkdownNodeQuery = Query.fromExpression("
|
|
8
|
+
const footnoteMarkdownNodeQuery = Query.fromExpression("/subDivision/footnote"),
|
|
9
|
+
ignoreDirectiveMarkdownNodeQuery = Query.fromExpression("/division/subDivision/directives/ignoreDirective"),
|
|
10
|
+
contentsDirectiveMarkdownNodeQuery = Query.fromExpression("/subDivision/directives/contentsDirective"),
|
|
11
|
+
footnotesDirectiveMarkdownNodeQuery = Query.fromExpression("/subDivision/directives/footnotesDirective"),
|
|
12
|
+
pageNumberDirectiveMarkdownNodeQuery = Query.fromExpression("/subDivision/directives/pageNumber"), ///
|
|
13
13
|
linkMarkdownNodesQuery = Query.fromExpression("//link"),
|
|
14
|
-
headingMarkdownNodesQuery = Query.fromExpression("
|
|
15
|
-
subDivisionMarkdownNodesQuery = Query.fromExpression("
|
|
16
|
-
embedDirectiveMarkdownNodesQuery = Query.fromExpression("
|
|
17
|
-
includeDirectiveMarkdownNodesQuery = Query.fromExpression("
|
|
14
|
+
headingMarkdownNodesQuery = Query.fromExpression("/division/subDivision/primaryHeading|secondaryHeading|tertiaryHeading|quaternaryHeading"),
|
|
15
|
+
subDivisionMarkdownNodesQuery = Query.fromExpression("/division/subDivision"),
|
|
16
|
+
embedDirectiveMarkdownNodesQuery = Query.fromExpression("/subDivision/directives/embedDirective"),
|
|
17
|
+
includeDirectiveMarkdownNodesQuery = Query.fromExpression("/subDivision/directives/includeDirective"),
|
|
18
18
|
linkFootnoteOrFootnotesDirectiveMarkdownNodesQuery = Query.fromExpression("//link|footnote|footnotesDirective");
|
|
19
19
|
|
|
20
20
|
export function nodeQuery(expression) {
|