highmark-markdown 0.0.383 → 0.0.388
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 +2972 -865
- package/lib/defaultMarkdownStyle.js +2 -2
- package/lib/elementMap.js +4 -4
- package/lib/example/constants.js +6 -2
- package/lib/example/view.js +5 -4
- package/lib/markdown/bnf.js +2 -2
- package/lib/mixins/node.js +6 -1
- package/lib/node/markdown/contentsItem.js +8 -30
- package/lib/node/markdown/contentsLink.js +9 -30
- package/lib/node/markdown/contentsList.js +8 -33
- package/lib/node/markdown/directive/embee.js +8 -8
- package/lib/node/markdown/division.js +90 -103
- package/lib/node/markdown/{footnoteItem.js → footnotesItem.js} +12 -12
- package/lib/node/markdown/footnotesList.js +9 -47
- package/lib/node/markdown/subDivision.js +2 -3
- package/lib/node/markdown.js +25 -1
- package/lib/nodeMap.js +6 -3
- package/lib/replacement/contentsItem.js +145 -0
- package/lib/replacement/contentsLink.js +157 -0
- package/lib/replacement/contentsList.js +212 -0
- package/lib/replacement/footnote.js +122 -0
- package/lib/replacement/footnotesItem.js +140 -0
- package/lib/replacement/footnotesList.js +189 -0
- package/lib/replacement/imported.js +151 -0
- package/lib/replacement/line.js +127 -0
- package/lib/replacement/subDivision/contentsDirective.js +126 -0
- package/lib/replacement/subDivision/footnote.js +126 -0
- package/lib/replacement/subDivision/footnotesDirective.js +126 -0
- package/lib/replacement/subDivision/pageNumberDirective.js +126 -0
- package/lib/replacement/subDivision.js +175 -0
- package/lib/replacement.js +139 -46
- package/lib/ruleNames.js +6 -6
- package/lib/utilities/markdown.js +8 -8
- package/lib/utilities/node.js +1 -72
- package/lib/utilities/replacement.js +104 -0
- package/package.json +1 -1
- package/src/defaultMarkdownStyle.js +20 -1
- package/src/elementMap.js +5 -5
- package/src/example/constants.js +2 -1
- package/src/example/view.js +13 -12
- package/src/markdown/bnf.js +23 -9
- package/src/mixins/node.js +10 -0
- package/src/node/markdown/contentsItem.js +7 -38
- package/src/node/markdown/contentsLink.js +8 -41
- package/src/node/markdown/contentsList.js +7 -39
- package/src/node/markdown/directive/embee.js +9 -9
- package/src/node/markdown/division.js +90 -158
- package/src/node/markdown/{footnoteItem.js → footnotesItem.js} +5 -5
- package/src/node/markdown/footnotesList.js +10 -78
- package/src/node/markdown/subDivision.js +1 -5
- package/src/node/markdown.js +28 -0
- package/src/nodeMap.js +12 -3
- package/src/replacement/contentsItem.js +49 -0
- package/src/replacement/contentsLink.js +29 -0
- package/src/replacement/contentsList.js +111 -0
- package/src/replacement/footnote.js +16 -0
- package/src/replacement/footnotesItem.js +38 -0
- package/src/replacement/footnotesList.js +73 -0
- package/src/replacement/imported.js +13 -0
- package/src/replacement/line.js +14 -0
- package/src/replacement/subDivision/contentsDirective.js +20 -0
- package/src/replacement/subDivision/footnote.js +20 -0
- package/src/replacement/subDivision/footnotesDirective.js +20 -0
- package/src/replacement/subDivision/pageNumberDirective.js +20 -0
- package/src/replacement/subDivision.js +42 -0
- package/src/replacement.js +108 -53
- package/src/ruleNames.js +2 -2
- package/src/utilities/markdown.js +9 -9
- package/src/utilities/node.js +0 -48
- package/src/utilities/replacement.js +66 -0
|
@@ -2,24 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
import { arrayUtilities } from "necessary";
|
|
4
4
|
|
|
5
|
-
import Replacement from "../../replacement";
|
|
6
5
|
import MarkdownNode from "../../node/markdown";
|
|
7
|
-
import
|
|
8
|
-
import
|
|
6
|
+
import FootnoteReplacement from "../../replacement/footnote";
|
|
7
|
+
import ContentsListReplacement from "../../replacement/contentsList";
|
|
8
|
+
import FootnotesListReplacement from "../../replacement/footnotesList";
|
|
9
|
+
import FootnoteSubDivisionReplacement from "../../replacement/subDivision/footnote";
|
|
10
|
+
import ContentsDirectiveSubDivisionReplacement from "../../replacement/subDivision/contentsDirective";
|
|
11
|
+
import FootnotesDirectiveSubDivisionReplacement from "../../replacement/subDivision/footnotesDirective";
|
|
12
|
+
import PageNumberDirectiveSubDivisionReplacement from "../../replacement/subDivision/pageNumberDirective";
|
|
9
13
|
|
|
10
14
|
import { EMPTY_STRING } from "../../constants";
|
|
11
15
|
import { DIVISION_RULE_NAME } from "../../ruleNames";
|
|
12
|
-
import {
|
|
13
|
-
import { footnoteMarkdownNodsFromNode,
|
|
14
|
-
headingMarkdownNodesFromNode,
|
|
15
|
-
subDivisionMarkdownNodesFromNode,
|
|
16
|
+
import { subDivisionMarkdownNodesFromNode,
|
|
16
17
|
embedDirectiveMarkdownNodesFromNode,
|
|
17
18
|
ignoreDirectiveMarkdownNodeFromNode,
|
|
18
|
-
contentsDirectiveMarkdownNodeFromNode,
|
|
19
|
-
footnotesDirectiveMarkdownNodeFromNode,
|
|
20
19
|
pageNumberDirectiveMarkdownNodeFromNode } from "../../utilities/query";
|
|
21
20
|
|
|
22
|
-
const { clear
|
|
21
|
+
const { clear } = arrayUtilities;
|
|
23
22
|
|
|
24
23
|
export default class DivisionMarkdownNode extends MarkdownNode {
|
|
25
24
|
constructor(ruleName, childNodes, precedence, opacity, domElement, divisionClassName) {
|
|
@@ -50,40 +49,12 @@ export default class DivisionMarkdownNode extends MarkdownNode {
|
|
|
50
49
|
return ignored;
|
|
51
50
|
}
|
|
52
51
|
|
|
53
|
-
findParentNode(childNode, node = this) {
|
|
54
|
-
let parentNode = null;
|
|
55
|
-
|
|
56
|
-
const nodeNonTerminalNode = node.isNonTerminalNode();
|
|
57
|
-
|
|
58
|
-
if (nodeNonTerminalNode) {
|
|
59
|
-
const nonTerminalNode = node, ///
|
|
60
|
-
childNodes = nonTerminalNode.getChildNodes(),
|
|
61
|
-
index = childNodes.indexOf(childNode);
|
|
62
|
-
|
|
63
|
-
if (index !== -1) {
|
|
64
|
-
parentNode = node; ///
|
|
65
|
-
} else {
|
|
66
|
-
const nodes = childNodes; ///
|
|
67
|
-
|
|
68
|
-
nodes.some((node) => {
|
|
69
|
-
parentNode = this.findParentNode(childNode, node);
|
|
70
|
-
|
|
71
|
-
if (parentNode !== null) {
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return parentNode;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
52
|
paginate(context) {
|
|
82
53
|
const { linesPerPage } = context,
|
|
83
54
|
childNodes = this.getChildNodes(),
|
|
84
55
|
paginatedChildNodes = [],
|
|
85
56
|
divisionMarkdownNodes = [],
|
|
86
|
-
|
|
57
|
+
pageNumberDirectiveSubDivisionReplacement = this.removeSubDivisionMarkdownNode(PageNumberDirectiveSubDivisionReplacement, context);
|
|
87
58
|
|
|
88
59
|
let totalLines = 0;
|
|
89
60
|
|
|
@@ -96,7 +67,7 @@ export default class DivisionMarkdownNode extends MarkdownNode {
|
|
|
96
67
|
paginatedChildNodes.push(paginatedChildNode);
|
|
97
68
|
|
|
98
69
|
if (totalLines > linesPerPage) {
|
|
99
|
-
const divisionMarkdownNode = DivisionMarkdownNode.
|
|
70
|
+
const divisionMarkdownNode = DivisionMarkdownNode.fromPageNumberDirectiveSubDivisionReplacementPaginatedChildNodesAndDivisionClassName(pageNumberDirectiveSubDivisionReplacement, paginatedChildNodes, this.divisionClassName, context);
|
|
100
71
|
|
|
101
72
|
divisionMarkdownNodes.push(divisionMarkdownNode);
|
|
102
73
|
|
|
@@ -107,7 +78,7 @@ export default class DivisionMarkdownNode extends MarkdownNode {
|
|
|
107
78
|
});
|
|
108
79
|
|
|
109
80
|
if (totalLines > 0) {
|
|
110
|
-
const divisionMarkdownNode = DivisionMarkdownNode.
|
|
81
|
+
const divisionMarkdownNode = DivisionMarkdownNode.fromPageNumberDirectiveSubDivisionReplacementPaginatedChildNodesAndDivisionClassName(pageNumberDirectiveSubDivisionReplacement, paginatedChildNodes, this.divisionClassName, context);
|
|
111
82
|
|
|
112
83
|
divisionMarkdownNodes.push(divisionMarkdownNode);
|
|
113
84
|
}
|
|
@@ -127,67 +98,45 @@ export default class DivisionMarkdownNode extends MarkdownNode {
|
|
|
127
98
|
createContents(divisionMarkdownNodes, context) {
|
|
128
99
|
let contentsCreated = false;
|
|
129
100
|
|
|
130
|
-
const
|
|
131
|
-
contentsDirectiveMarkdownNode = contentsDirectiveMarkdownNodeFromNode(node);
|
|
101
|
+
const contentsDirectiveSubDivisionReplacement = this.findSubDivisionReplacement(ContentsDirectiveSubDivisionReplacement, context);
|
|
132
102
|
|
|
133
|
-
if (
|
|
103
|
+
if (contentsDirectiveSubDivisionReplacement !== null) {
|
|
134
104
|
const divisionMarkdownNode = this, ///
|
|
135
|
-
|
|
136
|
-
headingMarkdownNodesLength = headingMarkdownNodes.length;
|
|
137
|
-
|
|
138
|
-
if (headingMarkdownNodesLength === 0) {
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
105
|
+
contentsListReplacement = ContentsListReplacement.fromDivisionMarkdownNodesAndDivisionMarkdownNode(divisionMarkdownNodes, divisionMarkdownNode, context);
|
|
141
106
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
contentsListMarkdownNodeTokens = contentsListMarkdownNode.getTokens(),
|
|
145
|
-
childNode = contentsDirectiveMarkdownNode, ///
|
|
146
|
-
parentNode = this.findParentNode(childNode),
|
|
147
|
-
replacedNode = contentsDirectiveMarkdownNode, ///
|
|
148
|
-
replacementNode = contentsListMarkdownNode, ///
|
|
149
|
-
replacementTokens = contentsListMarkdownNodeTokens; ///
|
|
107
|
+
if (contentsListReplacement !== null) {
|
|
108
|
+
contentsListReplacement.replaceContentsDirectiveSubdivisionReplacement(contentsDirectiveSubDivisionReplacement, divisionMarkdownNode, context);
|
|
150
109
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
replaceTokens(replacementTokens, replacedNode, tokens);
|
|
154
|
-
|
|
155
|
-
contentsCreated = true;
|
|
110
|
+
contentsCreated = true;
|
|
111
|
+
}
|
|
156
112
|
}
|
|
157
113
|
|
|
158
114
|
return contentsCreated;
|
|
159
115
|
}
|
|
160
116
|
|
|
161
117
|
createFootnotes(footnoteReplacements, context) {
|
|
162
|
-
if (footnoteReplacements
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
const divisionMarkdownNode = this, ///
|
|
167
|
-
footnotesListMarkdownNode = FootnotesListMarkdownNode.fromFootnoteReplacementsAndDivisionMarkdownNode(footnoteReplacements, divisionMarkdownNode, context);
|
|
118
|
+
if (footnoteReplacements !== null) {
|
|
119
|
+
const divisionMarkdownNode = this, ///
|
|
120
|
+
footnotesListReplacement = FootnotesListReplacement.fromFootnoteReplacementsAndDivisionMarkdownNode(footnoteReplacements, divisionMarkdownNode, context);
|
|
168
121
|
|
|
169
|
-
|
|
170
|
-
|
|
122
|
+
if (footnotesListReplacement !== null) {
|
|
123
|
+
footnotesListReplacement.appendToDivisionMarkdownNode(divisionMarkdownNode, context);
|
|
124
|
+
}
|
|
171
125
|
}
|
|
172
|
-
|
|
173
|
-
const node = footnotesListMarkdownNode, ///
|
|
174
|
-
replacement = Replacement.fromNode(node, context);
|
|
175
|
-
|
|
176
|
-
replacement.appendTo(divisionMarkdownNode, context);
|
|
177
126
|
}
|
|
178
127
|
|
|
179
128
|
prepareFootnotes(context) {
|
|
180
|
-
|
|
129
|
+
const footnoteSubDivisionReplacements = this.removeSubDivisionMarkdownNodes(FootnoteSubDivisionReplacement, context);
|
|
181
130
|
|
|
182
|
-
|
|
131
|
+
let footnoteReplacements = footnoteSubDivisionReplacements.map((footnoteSubDivisionReplacement) => {
|
|
132
|
+
const footnoteReplacement = FootnoteReplacement.fromFootnoteSubDivisionReplacement(footnoteSubDivisionReplacement);
|
|
183
133
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
subdivisionReplacements = this.removeSubdivisionMarkdownNodes(footnotesDirectiveMarkdownNodeFromNode, context);
|
|
134
|
+
return footnoteReplacement;
|
|
135
|
+
});
|
|
187
136
|
|
|
188
|
-
const
|
|
137
|
+
const footnotesDirectiveSubDivisionReplacement = this.removeSubDivisionMarkdownNode(FootnotesDirectiveSubDivisionReplacement, context);
|
|
189
138
|
|
|
190
|
-
if (
|
|
139
|
+
if (footnotesDirectiveSubDivisionReplacement === null) {
|
|
191
140
|
footnoteReplacements = null;
|
|
192
141
|
}
|
|
193
142
|
|
|
@@ -199,48 +148,40 @@ export default class DivisionMarkdownNode extends MarkdownNode {
|
|
|
199
148
|
embedDirectiveMarkdownNodes = embedDirectiveMarkdownNodesFromNode(node);
|
|
200
149
|
|
|
201
150
|
embedDirectiveMarkdownNodes.map((embedDirectiveMarkdownNode) => {
|
|
202
|
-
const
|
|
151
|
+
const importedReplacement = embedDirectiveMarkdownNode.import(context);
|
|
203
152
|
|
|
204
|
-
if (
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
tokens = replacement.getTokens();
|
|
153
|
+
if (importedReplacement !== null) {
|
|
154
|
+
const childNode = embedDirectiveMarkdownNode, ///
|
|
155
|
+
parentNode = this.findParentNode(childNode);
|
|
208
156
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
157
|
+
importedReplacement.replaceEmbedDirectiveMarkdownNode(embedDirectiveMarkdownNode, parentNode, context);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
212
161
|
|
|
213
|
-
|
|
162
|
+
findSubDivisionReplacement(SubDivisionReplacement, context) {
|
|
163
|
+
let subDivisionReplacement = null;
|
|
214
164
|
|
|
215
|
-
|
|
216
|
-
parentNode = this.findParentNode(childNode),
|
|
217
|
-
replacedNode = embedDirectiveMarkdownNode; ///
|
|
165
|
+
const subDivisionMarkdownNodes = this.findSubDivisionMarkdownNodes();
|
|
218
166
|
|
|
219
|
-
|
|
167
|
+
subDivisionMarkdownNodes.some((subDivisionMarkdownNode) => {
|
|
168
|
+
subDivisionReplacement = SubDivisionReplacement.fromSubDivisionMarkdownNode(subDivisionMarkdownNode, context);
|
|
220
169
|
|
|
221
|
-
|
|
170
|
+
if (subDivisionReplacement !== null) {
|
|
171
|
+
return true;
|
|
222
172
|
}
|
|
223
173
|
});
|
|
174
|
+
|
|
175
|
+
return subDivisionReplacement;
|
|
224
176
|
}
|
|
225
177
|
|
|
226
|
-
|
|
227
|
-
const
|
|
228
|
-
node = this, ///
|
|
229
|
-
parentNode = this, ///
|
|
230
|
-
subDivisionMarkdownNodes = subDivisionMarkdownNodesFromNode(node),
|
|
178
|
+
findSubDivisionReplacements(SubDivisionReplacement, context) {
|
|
179
|
+
const subDivisionMarkdownNodes = this.findSubDivisionMarkdownNodes(),
|
|
231
180
|
subDivisionReplacements = subDivisionMarkdownNodes.reduce((subDivisionReplacements, subDivisionMarkdownNode) => {
|
|
232
|
-
const
|
|
233
|
-
markdownNode = markdownNodeFromNode(node);
|
|
234
|
-
|
|
235
|
-
if (markdownNode !== null) {
|
|
236
|
-
const removedNode = subDivisionMarkdownNode, ///
|
|
237
|
-
subDivisionReplacement = Replacement.fromNode(subDivisionMarkdownNode, context);
|
|
181
|
+
const subDivisionReplacement = SubDivisionReplacement.fromSubDivisionMarkdownNode(subDivisionMarkdownNode, context);
|
|
238
182
|
|
|
183
|
+
if (subDivisionReplacement !== null) {
|
|
239
184
|
subDivisionReplacements.push(subDivisionReplacement);
|
|
240
|
-
|
|
241
|
-
removeTokens(removedNode, tokens);
|
|
242
|
-
|
|
243
|
-
removeNode(removedNode, parentNode);
|
|
244
185
|
}
|
|
245
186
|
|
|
246
187
|
return subDivisionReplacements;
|
|
@@ -249,11 +190,40 @@ export default class DivisionMarkdownNode extends MarkdownNode {
|
|
|
249
190
|
return subDivisionReplacements;
|
|
250
191
|
}
|
|
251
192
|
|
|
252
|
-
|
|
193
|
+
findSubDivisionMarkdownNodes() {
|
|
194
|
+
const node = this, ///
|
|
195
|
+
subDivisionMarkdownNodes = subDivisionMarkdownNodesFromNode(node);
|
|
196
|
+
|
|
197
|
+
return subDivisionMarkdownNodes;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
removeSubDivisionMarkdownNode(SubDivisionReplacement, context) {
|
|
253
201
|
const divisionMarkdownNode = this, ///
|
|
254
|
-
|
|
202
|
+
subDivisionReplacement = this.findSubDivisionReplacement(SubDivisionReplacement, context);
|
|
203
|
+
|
|
204
|
+
if (subDivisionReplacement !== null) {
|
|
205
|
+
subDivisionReplacement.removeFromDivisionMarkdownNode(divisionMarkdownNode, context);
|
|
206
|
+
}
|
|
255
207
|
|
|
256
|
-
return
|
|
208
|
+
return subDivisionReplacement;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
removeSubDivisionMarkdownNodes(SubDivisionReplacement, context) {
|
|
212
|
+
const divisionMarkdownNode = this, ///
|
|
213
|
+
subDivisionReplacements = this.findSubDivisionReplacements(SubDivisionReplacement, context);
|
|
214
|
+
|
|
215
|
+
subDivisionReplacements.forEach((subDivisionReplacement) => {
|
|
216
|
+
subDivisionReplacement.removeFromDivisionMarkdownNode(divisionMarkdownNode, context);
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
return subDivisionReplacements;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
createFootnotesListMarkdownNode(context) {
|
|
223
|
+
// const divisionMarkdownNode = this, ///
|
|
224
|
+
// footnotesListMarkdownNode = FootnotesListMarkdownNode.fromDivisionMarkdownNode(divisionMarkdownNode, context);
|
|
225
|
+
//
|
|
226
|
+
// return footnotesListMarkdownNode;
|
|
257
227
|
}
|
|
258
228
|
|
|
259
229
|
asHTML(context) {
|
|
@@ -283,7 +253,7 @@ ${childNodesHTML}${indent}${closingTag}
|
|
|
283
253
|
return divisionMarkdownNode;
|
|
284
254
|
}
|
|
285
255
|
|
|
286
|
-
static
|
|
256
|
+
static fromPageNumberDirectiveSubDivisionReplacementPaginatedChildNodesAndDivisionClassName(pageNumberDirectiveSubDivisionReplacement, paginatedChildNodes, divisionClassName, context) {
|
|
287
257
|
const ruleName = DIVISION_RULE_NAME,
|
|
288
258
|
childNodes = [
|
|
289
259
|
...paginatedChildNodes
|
|
@@ -291,50 +261,12 @@ ${childNodesHTML}${indent}${closingTag}
|
|
|
291
261
|
opacity = null,
|
|
292
262
|
divisionMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(DivisionMarkdownNode, ruleName, childNodes, opacity, divisionClassName);
|
|
293
263
|
|
|
294
|
-
|
|
295
|
-
|
|
264
|
+
if (pageNumberDirectiveSubDivisionReplacement !== null) {
|
|
265
|
+
pageNumberDirectiveSubDivisionReplacement = pageNumberDirectiveSubDivisionReplacement.clone(); ///
|
|
296
266
|
|
|
297
|
-
|
|
298
|
-
}
|
|
267
|
+
pageNumberDirectiveSubDivisionReplacement.appendToDivisionMarkdownNode(divisionMarkdownNode, context);
|
|
268
|
+
}
|
|
299
269
|
|
|
300
270
|
return divisionMarkdownNode;
|
|
301
271
|
}
|
|
302
272
|
}
|
|
303
|
-
|
|
304
|
-
function footnoteReplacementsFromSubdivisionReplacements(subdivisionReplacements) {
|
|
305
|
-
const footnoteReplacements = subdivisionReplacements.map((subdivisionReplacement) => {
|
|
306
|
-
const node = subdivisionReplacement.getNode(),
|
|
307
|
-
footnoteMarkdownNode = footnoteMarkdownNodsFromNode(node),
|
|
308
|
-
descendentNode = footnoteMarkdownNode, ///
|
|
309
|
-
footnoteReplacement = subdivisionReplacement.contract(descendentNode);
|
|
310
|
-
|
|
311
|
-
return footnoteReplacement;
|
|
312
|
-
});
|
|
313
|
-
|
|
314
|
-
return footnoteReplacements;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
function headingMarkdownNodesFromDivisionMarkdownNodesAndDivisionMarkdownNode(divisionMarkdownNodes, divisionMarkdownNode, context) {
|
|
318
|
-
const headingMarkdownNodes = [],
|
|
319
|
-
index = divisionMarkdownNodes.indexOf(divisionMarkdownNode),
|
|
320
|
-
start = index + 1;
|
|
321
|
-
|
|
322
|
-
divisionMarkdownNodes = divisionMarkdownNodes.slice(start); ///
|
|
323
|
-
|
|
324
|
-
divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
|
|
325
|
-
const node = divisionMarkdownNode; ///
|
|
326
|
-
|
|
327
|
-
headingMarkdownNodesFromNode(node, headingMarkdownNodes);
|
|
328
|
-
});
|
|
329
|
-
|
|
330
|
-
filter(headingMarkdownNodes, (headingMarkdownNode) => {
|
|
331
|
-
const { contentsDepth } = context,
|
|
332
|
-
depth = headingMarkdownNode.getDepth();
|
|
333
|
-
|
|
334
|
-
if (depth <= contentsDepth) {
|
|
335
|
-
return true;
|
|
336
|
-
}
|
|
337
|
-
});
|
|
338
|
-
|
|
339
|
-
return headingMarkdownNodes;
|
|
340
|
-
}
|
|
@@ -5,11 +5,11 @@ import { arrayUtilities } from "necessary";
|
|
|
5
5
|
import MarkdownNode from "../../node/markdown";
|
|
6
6
|
import AnchorMarkdownNode from "../../node/markdown/anchor";
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { FOOTNOTES_ITEM_RULE_NAME } from "../../ruleNames";
|
|
9
9
|
|
|
10
10
|
const { first, second } = arrayUtilities;
|
|
11
11
|
|
|
12
|
-
export default class
|
|
12
|
+
export default class FootnotesItemMarkdownNode extends MarkdownNode {
|
|
13
13
|
identifier(context) {
|
|
14
14
|
const childNodes = this.getChildNodes(),
|
|
15
15
|
firstChildNode = first(childNodes),
|
|
@@ -24,14 +24,14 @@ export default class FootnoteItemMarkdownNode extends MarkdownNode {
|
|
|
24
24
|
footnoteMarkdownNodeChildNodes = footnoteMarkdownNode.getChildNodes(),
|
|
25
25
|
secondFootnoteMarkdownNodeChildNode = second(footnoteMarkdownNodeChildNodes),
|
|
26
26
|
paragraphMarkdownNode = secondFootnoteMarkdownNodeChildNode, ///
|
|
27
|
-
ruleName =
|
|
27
|
+
ruleName = FOOTNOTES_ITEM_RULE_NAME,
|
|
28
28
|
childNodes = [
|
|
29
29
|
anchorMarkdownNode,
|
|
30
30
|
paragraphMarkdownNode
|
|
31
31
|
],
|
|
32
32
|
opacity = null,
|
|
33
|
-
|
|
33
|
+
footnotesItemMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(FootnotesItemMarkdownNode, ruleName, childNodes, opacity);
|
|
34
34
|
|
|
35
|
-
return
|
|
35
|
+
return footnotesItemMarkdownNode;
|
|
36
36
|
}
|
|
37
37
|
}
|
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { arrayUtilities } from "necessary";
|
|
4
|
-
|
|
5
3
|
import MarkdownNode from "../../node/markdown";
|
|
6
|
-
import FootnoteItemMarkdownNode from "./footnoteItem";
|
|
7
4
|
|
|
8
5
|
import { START_ATTRIBUTE_NAME } from "../../attributeNames";
|
|
9
6
|
import { FOOTNOTES_LIST_RULE_NAME } from "../../ruleNames";
|
|
10
|
-
import { linkMarkdownNodesFromNode } from "../../utilities/query";
|
|
11
|
-
|
|
12
|
-
const { extract } = arrayUtilities;
|
|
13
7
|
|
|
14
8
|
export default class FootnotesListMarkdownNode extends MarkdownNode {
|
|
15
9
|
constructor(ruleName, childNodes, opacity, precedence, domElement, start) {
|
|
@@ -36,86 +30,24 @@ export default class FootnotesListMarkdownNode extends MarkdownNode {
|
|
|
36
30
|
|
|
37
31
|
clone() { return super.clone(this.start); }
|
|
38
32
|
|
|
39
|
-
static
|
|
33
|
+
static fromFootnotesItemReplacementsAndStart(footnotesItemReplacements, start) {
|
|
40
34
|
let footnotesListMarkdownNode = null;
|
|
41
35
|
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
const node = divisionMarkdownNode, ///
|
|
45
|
-
footnoteNumbers = Object.values(footnoteNumberMap),
|
|
46
|
-
linkMarkdownNodes = linkMarkdownNodesFromNode(node),
|
|
47
|
-
footnoteNumbersLength = footnoteNumbers.length,
|
|
48
|
-
footnoteItemReplacements = [];
|
|
49
|
-
|
|
50
|
-
let count = 0;
|
|
51
|
-
|
|
52
|
-
linkMarkdownNodes.forEach((linkMarkdownNode) => {
|
|
53
|
-
const identifier = linkMarkdownNode.identifier(context);
|
|
54
|
-
|
|
55
|
-
let footnoteNumber = footnoteNumberMap[identifier] || null;
|
|
56
|
-
|
|
57
|
-
if (footnoteNumber === null) {
|
|
58
|
-
const footnoteReplacement = footnoteReplacementFromFootnoteReplacementsAndIdentifier(footnoteReplacements, identifier, context);
|
|
59
|
-
|
|
60
|
-
if (footnoteReplacement !== null) {
|
|
61
|
-
const footnoteItemReplacement = footnoteItemReplacementFromFootnoteReplacementAndIdentifier(footnoteReplacement, identifier);
|
|
62
|
-
|
|
63
|
-
footnoteItemReplacements.push(footnoteItemReplacement);
|
|
64
|
-
|
|
65
|
-
count++;
|
|
66
|
-
|
|
67
|
-
footnoteNumber = footnoteNumbersLength + count;
|
|
68
|
-
|
|
69
|
-
footnoteNumberMap[identifier] = footnoteNumber;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
36
|
+
const footnotesItemReplacementsLength = footnotesItemReplacements.length;
|
|
72
37
|
|
|
73
|
-
|
|
74
|
-
const number = footnoteNumber; ///
|
|
75
|
-
|
|
76
|
-
linkMarkdownNode.setNumber(number);
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
const footnoteItemReplacementsLength = footnoteItemReplacements.length;
|
|
81
|
-
|
|
82
|
-
if (footnoteItemReplacementsLength > 0) {
|
|
38
|
+
if (footnotesItemReplacementsLength > 0) {
|
|
83
39
|
const ruleName = FOOTNOTES_LIST_RULE_NAME,
|
|
84
|
-
childNodes =
|
|
85
|
-
|
|
86
|
-
|
|
40
|
+
childNodes = footnotesItemReplacements.map((footnotesItemReplacement) => {
|
|
41
|
+
const footnotesItemReplacementMode = footnotesItemReplacement.getNode(),
|
|
42
|
+
childNode = footnotesItemReplacementMode; ///
|
|
87
43
|
|
|
88
|
-
|
|
44
|
+
return childNode;
|
|
45
|
+
}),
|
|
46
|
+
opacity = null;
|
|
89
47
|
|
|
90
|
-
|
|
91
|
-
footnotesItemReplacement.appendTo(footnotesListMarkdownNode, context);
|
|
92
|
-
});
|
|
48
|
+
footnotesListMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(FootnotesListMarkdownNode, ruleName, childNodes, opacity, start);
|
|
93
49
|
}
|
|
94
50
|
|
|
95
51
|
return footnotesListMarkdownNode;
|
|
96
52
|
}
|
|
97
53
|
}
|
|
98
|
-
|
|
99
|
-
function footnoteReplacementFromFootnoteReplacementsAndIdentifier(footnoteReplacements, identifier, context) {
|
|
100
|
-
const footnoteReplacement = extract(footnoteReplacements, (footnoteReplacement) => {
|
|
101
|
-
const node = footnoteReplacement.getNode(),
|
|
102
|
-
footnoteMarkdownNode = node, ///
|
|
103
|
-
footnoteMarkdownNodeIdentifier = footnoteMarkdownNode.identifier(context);
|
|
104
|
-
|
|
105
|
-
if (footnoteMarkdownNodeIdentifier === identifier) {
|
|
106
|
-
return true;
|
|
107
|
-
}
|
|
108
|
-
}) || null;
|
|
109
|
-
|
|
110
|
-
return footnoteReplacement;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
function footnoteItemReplacementFromFootnoteReplacementAndIdentifier(footnoteReplacement, identifier) {
|
|
114
|
-
const node = footnoteReplacement.getNode(),
|
|
115
|
-
footnoteMarkdownNode = node, ///
|
|
116
|
-
footnoteItemMarkdownNode = FootnoteItemMarkdownNode.fromFootnotesMarkdownNodeAndIdentifier(footnoteMarkdownNode, identifier),
|
|
117
|
-
ascendantNode = footnoteItemMarkdownNode, ///
|
|
118
|
-
footnoteItemReplacement = footnoteReplacement.expand(ascendantNode);
|
|
119
|
-
|
|
120
|
-
return footnoteItemReplacement;
|
|
121
|
-
}
|
|
@@ -52,9 +52,5 @@ export default class SubDivisionMarkdownNode extends MarkdownNode {
|
|
|
52
52
|
return secondMarkdownNode;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) {
|
|
56
|
-
const subDivisionMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(SubDivisionMarkdownNode, ruleName, childNodes, opacity);
|
|
57
|
-
|
|
58
|
-
return subDivisionMarkdownNode;
|
|
59
|
-
}
|
|
55
|
+
static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(SubDivisionMarkdownNode, ruleName, childNodes, opacity); }
|
|
60
56
|
}
|
package/src/node/markdown.js
CHANGED
|
@@ -132,6 +132,34 @@ class MarkdownNode extends NonTerminalNode {
|
|
|
132
132
|
});
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
+
findParentNode(childNode, node = this) {
|
|
136
|
+
let parentNode = null;
|
|
137
|
+
|
|
138
|
+
const nodeNonTerminalNode = node.isNonTerminalNode();
|
|
139
|
+
|
|
140
|
+
if (nodeNonTerminalNode) {
|
|
141
|
+
const nonTerminalNode = node, ///
|
|
142
|
+
childNodes = nonTerminalNode.getChildNodes(),
|
|
143
|
+
index = childNodes.indexOf(childNode);
|
|
144
|
+
|
|
145
|
+
if (index !== -1) {
|
|
146
|
+
parentNode = node; ///
|
|
147
|
+
} else {
|
|
148
|
+
const nodes = childNodes; ///
|
|
149
|
+
|
|
150
|
+
nodes.some((node) => {
|
|
151
|
+
parentNode = this.findParentNode(childNode, node);
|
|
152
|
+
|
|
153
|
+
if (parentNode !== null) {
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return parentNode;
|
|
161
|
+
}
|
|
162
|
+
|
|
135
163
|
lines(context) {
|
|
136
164
|
const childNodes = this.getChildNodes(),
|
|
137
165
|
lines = childNodes.reduce((lines, childNode) => {
|
package/src/nodeMap.js
CHANGED
|
@@ -25,11 +25,14 @@ import StrongTextMarkdownNode from "./node/markdown/strongText";
|
|
|
25
25
|
import SubDivisionMarkdownNode from "./node/markdown/subDivision";
|
|
26
26
|
import OrderedListMarkdownNode from "./node/markdown/orderedList";
|
|
27
27
|
import BlockListingMarkdownNode from "./node/markdown/blockListing";
|
|
28
|
-
import FootnoteItemMarkdownNode from "./node/markdown/footnoteItem";
|
|
29
28
|
import TableHeadRowMarkdownNode from "./node/markdown/tableHeadRow";
|
|
30
29
|
import TableBodyRowMarkdownNode from "./node/markdown/tableBodyRow";
|
|
30
|
+
import ContentsLinkMarkdownNode from "./node/markdown/contentsLink";
|
|
31
|
+
import ContentsItemMarkdownNode from "./node/markdown/contentsItem";
|
|
32
|
+
import ContentsListMarkdownNode from "./node/markdown/contentsList";
|
|
31
33
|
import InlineListingMarkdownNode from "./node/markdown/inlineListing";
|
|
32
34
|
import UnorderedListMarkdownNode from "./node/markdown/unorderedList";
|
|
35
|
+
import FootnotesItemMarkdownNode from "./node/markdown/footnotesItem";
|
|
33
36
|
import FootnotesListMarkdownNode from "./node/markdown/footnotesList";
|
|
34
37
|
import VerticalSpaceMarkdownNode from "./node/markdown/verticalSpace";
|
|
35
38
|
import TableHeadCellMarkdownNode from "./node/markdown/tableHeadCell";
|
|
@@ -77,11 +80,14 @@ import { LINE_RULE_NAME,
|
|
|
77
80
|
SUB_DIVISION_RULE_NAME,
|
|
78
81
|
ORDERED_LIST_RULE_NAME,
|
|
79
82
|
BLOCK_LISTING_RULE_NAME,
|
|
80
|
-
|
|
83
|
+
CONTENTS_LINK_RULE_NAME,
|
|
84
|
+
CONTENTS_ITEM_RULE_NAME,
|
|
85
|
+
CONTENTS_LIST_RULE_NAME,
|
|
81
86
|
TABLE_HEAD_ROW_RULE_NAME,
|
|
82
87
|
TABLE_BODY_ROW_RULE_NAME,
|
|
83
88
|
INLINE_LISTING_RULE_NAME,
|
|
84
89
|
UNORDERED_LIST_RULE_NAME,
|
|
90
|
+
FOOTNOTES_ITEM_RULE_NAME,
|
|
85
91
|
FOOTNOTES_LIST_RULE_NAME,
|
|
86
92
|
VERTICAL_SPACE_RULE_NAME,
|
|
87
93
|
TABLE_HEAD_CELL_RULE_NAME,
|
|
@@ -130,11 +136,14 @@ const nodeMap = {
|
|
|
130
136
|
[SUB_DIVISION_RULE_NAME]: SubDivisionMarkdownNode,
|
|
131
137
|
[ORDERED_LIST_RULE_NAME]: OrderedListMarkdownNode,
|
|
132
138
|
[BLOCK_LISTING_RULE_NAME]: BlockListingMarkdownNode,
|
|
133
|
-
[
|
|
139
|
+
[CONTENTS_LINK_RULE_NAME]: ContentsLinkMarkdownNode,
|
|
140
|
+
[CONTENTS_ITEM_RULE_NAME]: ContentsItemMarkdownNode,
|
|
141
|
+
[CONTENTS_LIST_RULE_NAME]: ContentsListMarkdownNode,
|
|
134
142
|
[TABLE_HEAD_ROW_RULE_NAME]: TableHeadRowMarkdownNode,
|
|
135
143
|
[TABLE_BODY_ROW_RULE_NAME]: TableBodyRowMarkdownNode,
|
|
136
144
|
[INLINE_LISTING_RULE_NAME]: InlineListingMarkdownNode,
|
|
137
145
|
[UNORDERED_LIST_RULE_NAME]: UnorderedListMarkdownNode,
|
|
146
|
+
[FOOTNOTES_ITEM_RULE_NAME]: FootnotesItemMarkdownNode,
|
|
138
147
|
[FOOTNOTES_LIST_RULE_NAME]: FootnotesListMarkdownNode,
|
|
139
148
|
[VERTICAL_SPACE_RULE_NAME]: VerticalSpaceMarkdownNode,
|
|
140
149
|
[TABLE_HEAD_CELL_RULE_NAME]: TableHeadCellMarkdownNode,
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import Replacement from "../replacement";
|
|
4
|
+
import ContentsLinkReplacement from "../replacement/contentsLink";
|
|
5
|
+
import ContentsItemMarkdownNode from "../node/markdown/contentsItem";
|
|
6
|
+
|
|
7
|
+
export default class ContentsItemReplacement extends Replacement {
|
|
8
|
+
static fromNodeAndTokens(node, tokens) { return Replacement.fromNodeAndTokens(ContentsItemReplacement, node, tokens); }
|
|
9
|
+
|
|
10
|
+
static fromNestedHeadingMarkdownNode(nestedHeadingMarkdownNode, context) {
|
|
11
|
+
const replacements = [],
|
|
12
|
+
contentsLinkReplacement = ContentsLinkReplacement.fromNestedHeadingMarkdownNode(nestedHeadingMarkdownNode, context);
|
|
13
|
+
|
|
14
|
+
if (contentsLinkReplacement !== null) {
|
|
15
|
+
const node = nestedHeadingMarkdownNode.getNode(),
|
|
16
|
+
headingMarkdownNode = node; ///
|
|
17
|
+
|
|
18
|
+
headingMarkdownNode.addAnchor(context);
|
|
19
|
+
|
|
20
|
+
const replacement = contentsLinkReplacement;
|
|
21
|
+
|
|
22
|
+
replacements.push(replacement);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const childNestedNodes = nestedHeadingMarkdownNode.getChildNestedNodes(),
|
|
26
|
+
nestedHeadingMarkdownNodes = childNestedNodes, ///
|
|
27
|
+
nestedHeadingMarkdownNodesLength = nestedHeadingMarkdownNodes.length;
|
|
28
|
+
|
|
29
|
+
if (nestedHeadingMarkdownNodesLength > 0) {
|
|
30
|
+
const { ContentsListReplacement } = ContentsItemReplacement,
|
|
31
|
+
contentsListReplacement = ContentsListReplacement.fromNestedHeadingMarkdownNodes(nestedHeadingMarkdownNodes, context),
|
|
32
|
+
replacement = contentsListReplacement; ///
|
|
33
|
+
|
|
34
|
+
replacements.push(replacement);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const contentsItemMarkdownNode = ContentsItemMarkdownNode.fromReplacements(replacements),
|
|
38
|
+
node = contentsItemMarkdownNode, ///
|
|
39
|
+
tokens = [];
|
|
40
|
+
|
|
41
|
+
replacements.forEach((replacement) => {
|
|
42
|
+
replacement.getTokens(tokens);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
const contentsItemReplacement = ContentsItemReplacement.fromNodeAndTokens(node, tokens);
|
|
46
|
+
|
|
47
|
+
return contentsItemReplacement;
|
|
48
|
+
}
|
|
49
|
+
}
|