highmark-markdown 0.0.379 → 0.0.382
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 +4764 -3417
- package/lib/attributeNames.js +5 -1
- package/lib/constants.js +1 -5
- package/lib/defaultMarkdownStyle.js +2 -2
- package/lib/example/constants.js +15 -7
- package/lib/example/customEventTypes.js +5 -1
- package/lib/example/view/button/page.js +168 -0
- package/lib/example/view/div/html.js +2 -2
- package/lib/example/view/div/pageButtons.js +270 -0
- package/lib/example/view/div/preview.js +105 -13
- package/lib/example/view/textarea/css.js +2 -2
- package/lib/example/view/xmp.js +2 -4
- package/lib/example/view.js +88 -34
- package/lib/example.js +2 -2
- package/lib/index.js +15 -11
- package/lib/markdown/bnf.js +2 -2
- package/lib/mixins/node.js +10 -3
- package/lib/node/markdown/anchor.js +5 -2
- package/lib/node/markdown/blockLine.js +3 -2
- package/lib/node/markdown/contentsLink.js +4 -4
- package/lib/node/markdown/directive/contents.js +6 -6
- package/lib/node/markdown/directive/embee.js +12 -12
- package/lib/node/markdown/directive/footnotes.js +6 -6
- package/lib/node/markdown/directive/ignore.js +6 -6
- package/lib/node/markdown/directive/include.js +6 -6
- package/lib/node/markdown/directive/pageNumber.js +74 -9
- package/lib/node/markdown/directive.js +128 -0
- package/lib/node/markdown/directives.js +33 -2
- package/lib/node/markdown/division.js +128 -28
- package/lib/node/markdown/emailLink.js +8 -1
- package/lib/node/markdown/endOfLine.js +8 -1
- package/lib/node/markdown/footnoteItem.js +3 -3
- package/lib/node/markdown/footnotesList.js +95 -27
- package/lib/node/markdown/heading/primary.js +2 -1
- package/lib/node/markdown/heading/quaternary.js +2 -1
- package/lib/node/markdown/heading/secondary.js +2 -1
- package/lib/node/markdown/heading/tertiary.js +2 -1
- package/lib/node/markdown/heading.js +8 -1
- package/lib/node/markdown/line.js +8 -1
- package/lib/node/markdown/subDivision.js +17 -10
- package/lib/node/markdown.js +15 -1
- package/lib/replacement.js +185 -0
- package/lib/utilities/childNodes.js +7 -5
- package/lib/utilities/content.js +7 -7
- package/lib/utilities/markdown.js +87 -0
- package/lib/utilities/node.js +163 -0
- package/lib/utilities/query.js +25 -9
- package/package.json +1 -1
- package/src/attributeNames.js +1 -0
- package/src/constants.js +0 -1
- package/src/defaultMarkdownStyle.js +5 -1
- package/src/example/constants.js +4 -2
- package/src/example/customEventTypes.js +1 -0
- package/src/example/view/button/page.js +48 -0
- package/src/example/view/div/html.js +0 -1
- package/src/example/view/div/pageButtons.js +98 -0
- package/src/example/view/div/preview.js +51 -11
- package/src/example/view/textarea/css.js +1 -1
- package/src/example/view/xmp.js +1 -5
- package/src/example/view.js +117 -51
- package/src/example.js +2 -2
- package/src/index.js +9 -6
- package/src/markdown/bnf.js +21 -23
- package/src/mixins/node.js +20 -2
- package/src/node/markdown/anchor.js +7 -2
- package/src/node/markdown/blockLine.js +3 -3
- package/src/node/markdown/contentsLink.js +3 -3
- package/src/node/markdown/directive/contents.js +3 -3
- package/src/node/markdown/directive/embee.js +8 -8
- package/src/node/markdown/directive/footnotes.js +3 -3
- package/src/node/markdown/directive/ignore.js +3 -3
- package/src/node/markdown/directive/include.js +3 -3
- package/src/node/markdown/directive/pageNumber.js +53 -5
- package/src/node/markdown/directive.js +13 -0
- package/src/node/markdown/directives.js +10 -1
- package/src/node/markdown/division.js +144 -26
- package/src/node/markdown/emailLink.js +6 -0
- package/src/node/markdown/endOfLine.js +6 -0
- package/src/node/markdown/footnoteItem.js +1 -1
- package/src/node/markdown/footnotesList.js +87 -31
- package/src/node/markdown/heading/primary.js +2 -0
- package/src/node/markdown/heading/quaternary.js +2 -0
- package/src/node/markdown/heading/secondary.js +2 -0
- package/src/node/markdown/heading/tertiary.js +2 -0
- package/src/node/markdown/heading.js +6 -0
- package/src/node/markdown/line.js +12 -1
- package/src/node/markdown/subDivision.js +18 -12
- package/src/node/markdown.js +19 -0
- package/src/replacement.js +158 -0
- package/src/utilities/childNodes.js +6 -4
- package/src/utilities/content.js +12 -20
- package/src/utilities/markdown.js +103 -0
- package/src/utilities/node.js +158 -0
- package/src/utilities/query.js +22 -6
- package/lib/replacementNodeAndTokens.js +0 -149
- package/lib/utilities/footnotes.js +0 -20
- package/lib/utilities/replace.js +0 -66
- package/src/replacementNodeAndTokens.js +0 -152
- package/src/utilities/footnotes.js +0 -16
- package/src/utilities/replace.js +0 -31
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { leadingIndexFromNodeAndTokens, trailingIndexFromNodeAndTokens } from "./utilities/node";
|
|
4
|
+
|
|
5
|
+
export default class Replacement {
|
|
6
|
+
constructor(node, tokens) {
|
|
7
|
+
this.node = node;
|
|
8
|
+
this.tokens = tokens;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
getNode() {
|
|
12
|
+
return this.node;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
getTokens() {
|
|
16
|
+
return this.tokens;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
getChildNodes() { return this.node.getChildNodes(); }
|
|
20
|
+
|
|
21
|
+
contract(descendentNode) {
|
|
22
|
+
const node = descendentNode, ///
|
|
23
|
+
tokens = this.tokens, ///
|
|
24
|
+
context = { ///
|
|
25
|
+
tokens
|
|
26
|
+
},
|
|
27
|
+
replacement = Replacement.fromNode(node, context); ///
|
|
28
|
+
|
|
29
|
+
return replacement;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
expand(ascendantNode) {
|
|
33
|
+
const node = ascendantNode, ///
|
|
34
|
+
tokens = this.tokens, ///
|
|
35
|
+
context = {
|
|
36
|
+
tokens
|
|
37
|
+
},
|
|
38
|
+
replacement = Replacement.fromNode(node, context); ///
|
|
39
|
+
|
|
40
|
+
return replacement;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
clone() {
|
|
44
|
+
const node = this.node.clone(),
|
|
45
|
+
replacementTokens = replacementTokensFromNodeAndTokens(node, this.tokens);
|
|
46
|
+
|
|
47
|
+
replaceNodeTokens(node, replacementTokens, this.tokens);
|
|
48
|
+
|
|
49
|
+
const tokens = replacementTokens, ///
|
|
50
|
+
replacement = new Replacement(node, tokens);
|
|
51
|
+
|
|
52
|
+
return replacement
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
appendTo(markdownNode, context) {
|
|
56
|
+
const { tokens } = context,
|
|
57
|
+
node = markdownNode, ///
|
|
58
|
+
trailingIndex = trailingIndexFromNodeAndTokens(node, tokens),
|
|
59
|
+
replacement = this.clone(), ///
|
|
60
|
+
replacementNode = replacement.getNode(),
|
|
61
|
+
replacementTokens = replacement.getTokens(),
|
|
62
|
+
childNode = replacementNode, ///
|
|
63
|
+
start = trailingIndex + 1,
|
|
64
|
+
deleteCount = 0;
|
|
65
|
+
|
|
66
|
+
markdownNode.appendChildNode(childNode);
|
|
67
|
+
|
|
68
|
+
tokens.splice(start, deleteCount, ...replacementTokens);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
static fromNode(node, context) {
|
|
72
|
+
let { tokens } = context;
|
|
73
|
+
|
|
74
|
+
const replacementTokens = replacementTokensFromNodeAndTokens(node, tokens),
|
|
75
|
+
leadingIndex = leadingIndexFromNodeAndTokens(node, tokens),
|
|
76
|
+
offset = leadingIndex; ///
|
|
77
|
+
|
|
78
|
+
node = node.clone(); ///
|
|
79
|
+
|
|
80
|
+
replaceNodeTokens(node, replacementTokens, tokens, offset);
|
|
81
|
+
|
|
82
|
+
tokens = replacementTokens; ///
|
|
83
|
+
|
|
84
|
+
const replacement = new Replacement(node, tokens);
|
|
85
|
+
|
|
86
|
+
return replacement;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
static fromNodeAndTokens(node, tokens) {
|
|
90
|
+
const replacement = new Replacement(node, tokens);
|
|
91
|
+
|
|
92
|
+
return replacement;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function replaceNodeTokens(node, replacementTokens, tokens, offset = 0) {
|
|
97
|
+
const nodeTerminalNode = node.isTerminalNode();
|
|
98
|
+
|
|
99
|
+
if (nodeTerminalNode) {
|
|
100
|
+
const terminalNode = node; ///
|
|
101
|
+
|
|
102
|
+
replaceTerminalNodeTokens(terminalNode, replacementTokens, tokens, offset);
|
|
103
|
+
} else {
|
|
104
|
+
const nonTerminalNode = node; ///
|
|
105
|
+
|
|
106
|
+
replaceNonTerminalNodeTokens(nonTerminalNode, replacementTokens, tokens, offset);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function replaceChildNodesTokens(childNodes, replacementTokens, tokens, offset) {
|
|
111
|
+
childNodes.forEach((childNode) => {
|
|
112
|
+
const node = childNode; ///
|
|
113
|
+
|
|
114
|
+
replaceNodeTokens(node, replacementTokens, tokens, offset);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function replaceTerminalNodeTokens(terminalNode, replacementTokens, tokens, offset) {
|
|
119
|
+
let index,
|
|
120
|
+
significantToken;
|
|
121
|
+
|
|
122
|
+
significantToken = terminalNode.getSignificantToken();
|
|
123
|
+
|
|
124
|
+
if (significantToken !== null) {
|
|
125
|
+
index = tokens.indexOf(significantToken);
|
|
126
|
+
|
|
127
|
+
index -= offset;
|
|
128
|
+
|
|
129
|
+
const replacementToken = replacementTokens[index];
|
|
130
|
+
|
|
131
|
+
significantToken = replacementToken; ///
|
|
132
|
+
|
|
133
|
+
terminalNode.setSignificantToken(significantToken);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function replaceNonTerminalNodeTokens(nonTerminalNode, replacementTokens, tokens, offset) {
|
|
138
|
+
const childNodes = nonTerminalNode.getChildNodes();
|
|
139
|
+
|
|
140
|
+
replaceChildNodesTokens(childNodes, replacementTokens, tokens, offset);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function replacementTokensFromNodeAndTokens(node, tokens) {
|
|
144
|
+
const leadingIndex = leadingIndexFromNodeAndTokens(node, tokens),
|
|
145
|
+
trailingIndex = trailingIndexFromNodeAndTokens(node, tokens),
|
|
146
|
+
start = leadingIndex, ///
|
|
147
|
+
end = trailingIndex + 1;
|
|
148
|
+
|
|
149
|
+
tokens = tokens.slice(start, end); ///
|
|
150
|
+
|
|
151
|
+
const replacementTokens = tokens.map((token) => { ///
|
|
152
|
+
const replacementToken = token.clone(); ///;
|
|
153
|
+
|
|
154
|
+
return replacementToken;
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
return replacementTokens;
|
|
158
|
+
}
|
|
@@ -82,11 +82,13 @@ export function plainTextFromChildNodes(childNodes, context) {
|
|
|
82
82
|
plainTexts.push(plainText);
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
{
|
|
86
|
+
const childNodes = markdownNode.getChildNodes(),
|
|
87
|
+
plainText = plainTextFromChildNodes(childNodes, context);
|
|
87
88
|
|
|
88
|
-
|
|
89
|
-
|
|
89
|
+
if (plainText !== EMPTY_STRING) {
|
|
90
|
+
plainTexts.push(plainText);
|
|
91
|
+
}
|
|
90
92
|
}
|
|
91
93
|
}
|
|
92
94
|
}
|
package/src/utilities/content.js
CHANGED
|
@@ -4,6 +4,7 @@ import { arrayUtilities } from "necessary";
|
|
|
4
4
|
|
|
5
5
|
import { EMPTY_STRING } from "../constants";
|
|
6
6
|
import { ESCAPED_TOKEN_TYPE } from "../tokenTypes";
|
|
7
|
+
import { leadingIndexFromNodeAndTokens, trailingIndexFromNodeAndTokens } from "../utilities/node";
|
|
7
8
|
|
|
8
9
|
const { first, last } = arrayUtilities;
|
|
9
10
|
|
|
@@ -12,13 +13,10 @@ export function contentFromNode(node, context) {
|
|
|
12
13
|
|
|
13
14
|
let { tokens } = context;
|
|
14
15
|
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const start = firstSignificantTokenIndex, ///
|
|
21
|
-
end = lastSignificantTokenIndex + 1;
|
|
16
|
+
const leadingIndex = leadingIndexFromNodeAndTokens(node, tokens),
|
|
17
|
+
trailingIndex = trailingIndexFromNodeAndTokens(node, tokens),
|
|
18
|
+
start = leadingIndex, ///
|
|
19
|
+
end = trailingIndex + 1;
|
|
22
20
|
|
|
23
21
|
tokens = tokens.slice(start, end);
|
|
24
22
|
|
|
@@ -38,13 +36,11 @@ export function contentFromNodes(nodes, augmentLeft, augmentRight, context) {
|
|
|
38
36
|
|
|
39
37
|
const lastNode = last(nodes),
|
|
40
38
|
firstNode = first(nodes),
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
lastSignificantTokenIndex = tokens.indexOf(lastSignificantToken),
|
|
44
|
-
firstSignificantTokenIndex = tokens.indexOf(firstSignificantToken);
|
|
39
|
+
leadingIndex = leadingIndexFromNodeAndTokens(firstNode, tokens),
|
|
40
|
+
trailingIndex = trailingIndexFromNodeAndTokens(lastNode, tokens);
|
|
45
41
|
|
|
46
|
-
let firstTokenIndex =
|
|
47
|
-
lastTokenIndex =
|
|
42
|
+
let firstTokenIndex = leadingIndex, ///
|
|
43
|
+
lastTokenIndex = trailingIndex; ///
|
|
48
44
|
|
|
49
45
|
if (augmentLeft) {
|
|
50
46
|
const previousTokenIndex = firstTokenIndex - 1;
|
|
@@ -91,14 +87,10 @@ export function contentFromNodes(nodes, augmentLeft, augmentRight, context) {
|
|
|
91
87
|
export function contentFromNodeAndTokens(node, tokens, offset = 0) {
|
|
92
88
|
let content = EMPTY_STRING;
|
|
93
89
|
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
firstToken = firstSignificantToken, ///
|
|
97
|
-
lastToken = lastSignificantToken, ///
|
|
98
|
-
firstTokenIndex = tokens.indexOf(firstToken) + offset, ///
|
|
99
|
-
lastTokenIndex = tokens.indexOf(lastToken);
|
|
90
|
+
const leadingIndex = leadingIndexFromNodeAndTokens(node, tokens) + offset,
|
|
91
|
+
trailingIndex = trailingIndexFromNodeAndTokens(node, tokens);
|
|
100
92
|
|
|
101
|
-
for (let index =
|
|
93
|
+
for (let index = leadingIndex; index <= trailingIndex; index++) {
|
|
102
94
|
const token = tokens[index],
|
|
103
95
|
tokenContent = token.getContent();
|
|
104
96
|
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { arrayUtilities } from "necessary";
|
|
4
|
+
|
|
5
|
+
const { clear, first, push } = arrayUtilities;
|
|
6
|
+
|
|
7
|
+
export function postprocess(divisionMarkdownNode, context) {
|
|
8
|
+
const divisionMarkdownNodes = [
|
|
9
|
+
divisionMarkdownNode
|
|
10
|
+
];
|
|
11
|
+
|
|
12
|
+
resolveIncludes(divisionMarkdownNodes, context);
|
|
13
|
+
|
|
14
|
+
resolveEmbeddings(divisionMarkdownNodes, context);
|
|
15
|
+
|
|
16
|
+
paginateAndFootnotes(divisionMarkdownNodes, context);
|
|
17
|
+
|
|
18
|
+
createContents(divisionMarkdownNodes, context);
|
|
19
|
+
|
|
20
|
+
return divisionMarkdownNodes;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function createContents(divisionMarkdownNodes, context) {
|
|
24
|
+
divisionMarkdownNodes.some((divisionMarkdownNode) => {
|
|
25
|
+
const contentsCreated = divisionMarkdownNode.createContents(context);
|
|
26
|
+
|
|
27
|
+
if (contentsCreated) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function resolveIncludes(divisionMarkdownNodes, context) {
|
|
34
|
+
const firstDivisionMarkdownNode = first(divisionMarkdownNodes),
|
|
35
|
+
divisionMarkdownNode = firstDivisionMarkdownNode; ///
|
|
36
|
+
|
|
37
|
+
Object.assign(context, {
|
|
38
|
+
divisionMarkdownNodes
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
divisionMarkdownNode.resolveIncludes(context);
|
|
42
|
+
|
|
43
|
+
delete context.divisionMarkdownNodes;
|
|
44
|
+
|
|
45
|
+
return divisionMarkdownNodes;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function resolveEmbeddings(divisionMarkdownNodes, context) {
|
|
49
|
+
divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
|
|
50
|
+
divisionMarkdownNode.resolveEmbeddings(context);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function paginateAndFootnotes(divisionMarkdownNodes, context) {
|
|
55
|
+
const { linesPerPage = null } = context;
|
|
56
|
+
|
|
57
|
+
const footnoteNumberMap = {};
|
|
58
|
+
|
|
59
|
+
Object.assign(context, {
|
|
60
|
+
footnoteNumberMap
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
let pageNumber = 1;
|
|
64
|
+
|
|
65
|
+
if (linesPerPage === null) {
|
|
66
|
+
divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
|
|
67
|
+
const footnoteReplacements = divisionMarkdownNode.prepareFootnotes(context);
|
|
68
|
+
|
|
69
|
+
divisionMarkdownNode.setPageNumber(pageNumber);
|
|
70
|
+
|
|
71
|
+
divisionMarkdownNode.createFootnotes(footnoteReplacements, context);
|
|
72
|
+
|
|
73
|
+
pageNumber++;
|
|
74
|
+
});
|
|
75
|
+
} else {
|
|
76
|
+
const paginatedDivisionMarkdownNodes = [];
|
|
77
|
+
|
|
78
|
+
divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
|
|
79
|
+
const footnoteReplacements = divisionMarkdownNode.prepareFootnotes(context),
|
|
80
|
+
divisionMarkdownNodes = divisionMarkdownNode.paginate(context);
|
|
81
|
+
|
|
82
|
+
divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
|
|
83
|
+
divisionMarkdownNode.setPageNumber(pageNumber);
|
|
84
|
+
|
|
85
|
+
divisionMarkdownNode.createFootnotes(footnoteReplacements, context);
|
|
86
|
+
|
|
87
|
+
pageNumber++;
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
push(paginatedDivisionMarkdownNodes, divisionMarkdownNodes);
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
clear(divisionMarkdownNodes);
|
|
94
|
+
|
|
95
|
+
push(divisionMarkdownNodes, paginatedDivisionMarkdownNodes);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
delete context.footnoteNumberMap;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export default {
|
|
102
|
+
postprocess
|
|
103
|
+
};
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { arrayUtilities } from "necessary";
|
|
4
|
+
|
|
5
|
+
const { forwardsSome, backwardsSome } = arrayUtilities;
|
|
6
|
+
|
|
7
|
+
export function removeNode(removedNode, parentNode) {
|
|
8
|
+
const removedChildNode = removedNode; ///
|
|
9
|
+
|
|
10
|
+
parentNode.removeChildNode(removedChildNode);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function removeNodes(removedNodes, parentNode) {
|
|
14
|
+
const removedChildNodes = removedNodes; ///
|
|
15
|
+
|
|
16
|
+
parentNode.removeChildNodes(removedChildNodes);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function removeTokens(removedNode, tokens) {
|
|
20
|
+
const nonTerminalNode = removedNode, ///
|
|
21
|
+
leadingIndex = leadingIndexFromNonTerminalNodeAndTokens(nonTerminalNode, tokens),
|
|
22
|
+
trailingIndex = trailingIndexFromNonTerminalNodeAndTokens(nonTerminalNode, tokens),
|
|
23
|
+
start = leadingIndex, ///
|
|
24
|
+
end = trailingIndex + 1,
|
|
25
|
+
deleteCount = end - start;
|
|
26
|
+
|
|
27
|
+
tokens.splice(start, deleteCount);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function replaceNode(replacementNode, replacedNode, parentNode) {
|
|
31
|
+
const replacedChildNode = replacedNode, ///
|
|
32
|
+
replacementChildNode = replacementNode; ///
|
|
33
|
+
|
|
34
|
+
parentNode.replaceChildNode(replacedChildNode, replacementChildNode);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function replaceNodes(replacementNodes, replacedNode, parentNode) {
|
|
38
|
+
const replacedChildNode = replacedNode, ///
|
|
39
|
+
replacementChildNodes = replacementNodes; ///
|
|
40
|
+
|
|
41
|
+
parentNode.replaceChildNodes(replacedChildNode, replacementChildNodes);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function replaceTokens(replacementTokens, replacedNode, tokens) {
|
|
45
|
+
const nonTerminalNode = replacedNode, ///
|
|
46
|
+
leadingIndex = leadingIndexFromNonTerminalNodeAndTokens(nonTerminalNode, tokens),
|
|
47
|
+
trailingIndex = trailingIndexFromNonTerminalNodeAndTokens(nonTerminalNode, tokens),
|
|
48
|
+
start = leadingIndex, ///
|
|
49
|
+
end = trailingIndex + 1,
|
|
50
|
+
deleteCount = end - start;
|
|
51
|
+
|
|
52
|
+
tokens.splice(start, deleteCount, ...replacementTokens);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function leadingIndexFromNodeAndTokens(node, tokens) {
|
|
56
|
+
let leadingIndex;
|
|
57
|
+
|
|
58
|
+
const nodeTerminalNode = node.isTerminalNode();
|
|
59
|
+
|
|
60
|
+
if (nodeTerminalNode) {
|
|
61
|
+
const terminalNode = node; ///
|
|
62
|
+
|
|
63
|
+
leadingIndex = leadingIndexFromTerminalNodeAndTokens(terminalNode, tokens);
|
|
64
|
+
} else {
|
|
65
|
+
const nonTerminalNode = node; ///
|
|
66
|
+
|
|
67
|
+
leadingIndex = leadingIndexFromNonTerminalNodeAndTokens(nonTerminalNode, tokens);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return leadingIndex;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function trailingIndexFromNodeAndTokens(node, tokens) {
|
|
74
|
+
let trailingIndex;
|
|
75
|
+
|
|
76
|
+
const nodeTerminalNode = node.isTerminalNode();
|
|
77
|
+
|
|
78
|
+
if (nodeTerminalNode) {
|
|
79
|
+
const terminalNode = node; ///
|
|
80
|
+
|
|
81
|
+
trailingIndex = trailingIndexFromTerminalNodeAndTokens(terminalNode, tokens);
|
|
82
|
+
} else {
|
|
83
|
+
const nonTerminalNode = node; ///
|
|
84
|
+
|
|
85
|
+
trailingIndex = trailingIndexFromNonTerminalNodeAndTokens(nonTerminalNode, tokens);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return trailingIndex;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function leadingIndexFromTerminalNodeAndTokens(terminalNode, tokens) {
|
|
92
|
+
let leadingIndex;
|
|
93
|
+
|
|
94
|
+
const significantToken = terminalNode.getSignificantToken();
|
|
95
|
+
|
|
96
|
+
if (significantToken === null) {
|
|
97
|
+
leadingIndex = -1;
|
|
98
|
+
} else {
|
|
99
|
+
const significantTokenIndex = tokens.indexOf(significantToken);
|
|
100
|
+
|
|
101
|
+
leadingIndex = significantTokenIndex; ///
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return leadingIndex;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function trailingIndexFromTerminalNodeAndTokens(terminalNode, tokens) {
|
|
108
|
+
let trailingIndex;
|
|
109
|
+
|
|
110
|
+
const significantToken = terminalNode.getSignificantToken();
|
|
111
|
+
|
|
112
|
+
if (significantToken === null) {
|
|
113
|
+
trailingIndex = -1;
|
|
114
|
+
} else {
|
|
115
|
+
const significantTokenIndex = tokens.indexOf(significantToken);
|
|
116
|
+
|
|
117
|
+
trailingIndex = significantTokenIndex; ///
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return trailingIndex;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function leadingIndexFromNonTerminalNodeAndTokens(nonTerminalNode, tokens) {
|
|
124
|
+
let leadingIndex;
|
|
125
|
+
|
|
126
|
+
const childNodes = nonTerminalNode.getChildNodes();
|
|
127
|
+
|
|
128
|
+
forwardsSome(childNodes, (childNode) => {
|
|
129
|
+
const node = childNode;
|
|
130
|
+
|
|
131
|
+
leadingIndex = leadingIndexFromNodeAndTokens(node, tokens);
|
|
132
|
+
|
|
133
|
+
if (leadingIndex !== -1) {
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
return leadingIndex;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function trailingIndexFromNonTerminalNodeAndTokens(nonTerminalNode, tokens) {
|
|
142
|
+
let trailingIndex;
|
|
143
|
+
|
|
144
|
+
const childNodes = nonTerminalNode.getChildNodes();
|
|
145
|
+
|
|
146
|
+
backwardsSome(childNodes, (childNode) => {
|
|
147
|
+
const node = childNode;
|
|
148
|
+
|
|
149
|
+
trailingIndex = trailingIndexFromNodeAndTokens(node, tokens);
|
|
150
|
+
|
|
151
|
+
if (trailingIndex !== -1) {
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
return trailingIndex;
|
|
157
|
+
}
|
|
158
|
+
|
package/src/utilities/query.js
CHANGED
|
@@ -5,12 +5,14 @@ import { arrayUtilities } from "necessary";
|
|
|
5
5
|
|
|
6
6
|
const { first, push } = arrayUtilities;
|
|
7
7
|
|
|
8
|
-
const
|
|
8
|
+
const footnoteMarkdownNodeQuery = Query.fromExpression("//footnote"),
|
|
9
|
+
ignoreDirectiveMarkdownNodeQuery = Query.fromExpression("//directives/ignoreDirective"),
|
|
9
10
|
contentsDirectiveMarkdownNodeQuery = Query.fromExpression("//directives/contentsDirective"),
|
|
10
11
|
footnotesDirectiveMarkdownNodeQuery = Query.fromExpression("//directives/footnotesDirective"),
|
|
12
|
+
pageNumberDirectiveMarkdownNodeQuery = Query.fromExpression("//directives/pageNumber"),
|
|
11
13
|
linkMarkdownNodesQuery = Query.fromExpression("//link"),
|
|
12
14
|
headingMarkdownNodesQuery = Query.fromExpression("//primaryHeading|secondaryHeading|tertiaryHeading|quaternaryHeading"),
|
|
13
|
-
|
|
15
|
+
subDivisionMarkdownNodesQuery = Query.fromExpression("//subDivision"),
|
|
14
16
|
embedDirectiveMarkdownNodesQuery = Query.fromExpression("//directives/embedDirective"),
|
|
15
17
|
includeDirectiveMarkdownNodesQuery = Query.fromExpression("//directives/includeDirective"),
|
|
16
18
|
linkReferenceOrFootnotesDirectiveMarkdownNodesQuery = Query.fromExpression("//link|reference|footnotesDirective");
|
|
@@ -44,6 +46,12 @@ export function nodesQuery(expression) {
|
|
|
44
46
|
}
|
|
45
47
|
}
|
|
46
48
|
|
|
49
|
+
export function footnoteMarkdownNodsFromNode(node) {
|
|
50
|
+
const footnoteMarkdownNode = nodeFromNodeAndQuery(node, footnoteMarkdownNodeQuery);
|
|
51
|
+
|
|
52
|
+
return footnoteMarkdownNode;
|
|
53
|
+
}
|
|
54
|
+
|
|
47
55
|
export function ignoreDirectiveMarkdownNodeFromNode(node) {
|
|
48
56
|
const ignoreDirectiveMarkdownNode = nodeFromNodeAndQuery(node, ignoreDirectiveMarkdownNodeQuery);
|
|
49
57
|
|
|
@@ -62,6 +70,12 @@ export function footnotesDirectiveMarkdownNodeFromNode(node) {
|
|
|
62
70
|
return footnotesDirectiveMarkdownNode;
|
|
63
71
|
}
|
|
64
72
|
|
|
73
|
+
export function pageNumberDirectiveMarkdownNodeFromNode(node) {
|
|
74
|
+
const pageNumberDirectiveMarkdownNode = nodeFromNodeAndQuery(node, pageNumberDirectiveMarkdownNodeQuery);
|
|
75
|
+
|
|
76
|
+
return pageNumberDirectiveMarkdownNode;
|
|
77
|
+
}
|
|
78
|
+
|
|
65
79
|
export function linkMarkdownNodesFromNode(node, linkMarkdownNodes = []) {
|
|
66
80
|
nodesFromNodeAndQuery(node, linkMarkdownNodesQuery, linkMarkdownNodes);
|
|
67
81
|
|
|
@@ -74,10 +88,10 @@ export function headingMarkdownNodesFromNode(node, headingMarkdownNodes = []) {
|
|
|
74
88
|
return headingMarkdownNodes;
|
|
75
89
|
}
|
|
76
90
|
|
|
77
|
-
export function
|
|
78
|
-
nodesFromNodeAndQuery(node,
|
|
91
|
+
export function subDivisionMarkdownNodesFromNode(node, subDivisionMarkdownNodes = []) {
|
|
92
|
+
nodesFromNodeAndQuery(node, subDivisionMarkdownNodesQuery, subDivisionMarkdownNodes);
|
|
79
93
|
|
|
80
|
-
return
|
|
94
|
+
return subDivisionMarkdownNodes;
|
|
81
95
|
}
|
|
82
96
|
|
|
83
97
|
export function embedDirectiveMarkdownNodesFromNode(node, embedDirectiveMarkdownNodes = []) {
|
|
@@ -99,12 +113,14 @@ export function linkReferenceOrFootnotesDirectiveMarkdownNodesFromNode(node, lin
|
|
|
99
113
|
}
|
|
100
114
|
|
|
101
115
|
export default {
|
|
116
|
+
footnoteMarkdownNodsFromNode,
|
|
102
117
|
ignoreDirectiveMarkdownNodeFromNode,
|
|
103
118
|
contentsDirectiveMarkdownNodeFromNode,
|
|
104
119
|
footnotesDirectiveMarkdownNodeFromNode,
|
|
120
|
+
pageNumberDirectiveMarkdownNodeFromNode,
|
|
105
121
|
linkMarkdownNodesFromNode,
|
|
106
122
|
headingMarkdownNodesFromNode,
|
|
107
|
-
|
|
123
|
+
subDivisionMarkdownNodesFromNode,
|
|
108
124
|
embedDirectiveMarkdownNodesFromNode,
|
|
109
125
|
includeDirectiveMarkdownNodesFromNode,
|
|
110
126
|
linkReferenceOrFootnotesDirectiveMarkdownNodesFromNode
|