highmark-markdown 0.0.428 → 0.0.430
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 +3995 -1864
- package/lib/constants.js +17 -1
- package/lib/defaultMarkdownStyle.js +2 -2
- package/lib/elementMap.js +20 -5
- package/lib/example/importer.js +5 -5
- package/lib/example/indexOptions.js +143 -0
- package/lib/example/view/div/sizeable/right.js +2 -2
- package/lib/example/view.js +14 -2
- package/lib/index/phraseMatcher.js +76 -0
- package/lib/markdown/bnf.js +2 -2
- package/lib/markdown/lexer.js +11 -11
- package/lib/markdown/parser.js +12 -12
- package/lib/node/markdown/anchor.js +15 -8
- package/lib/node/markdown/comma.js +144 -0
- package/lib/node/markdown/contentsLink.js +3 -2
- package/lib/node/markdown/contentsList.js +10 -2
- package/lib/node/markdown/directive/index.js +120 -0
- package/lib/node/markdown/directive.js +10 -2
- package/lib/node/markdown/division.js +49 -9
- package/lib/node/markdown/{link.js → footnoteLink.js} +14 -13
- package/lib/node/markdown/footnotesItem.js +5 -12
- package/lib/node/markdown/heading.js +10 -2
- package/lib/node/markdown/indexItem.js +120 -0
- package/lib/node/markdown/indexLink.js +168 -0
- package/lib/node/markdown/indexList.js +138 -0
- package/lib/node/markdown/line.js +16 -2
- package/lib/node/markdown/subDivision.js +21 -2
- package/lib/node/markdown/verticalSpace.js +12 -1
- package/lib/node/markdown.js +32 -2
- package/lib/nodeMap.js +8 -3
- package/lib/prepends.js +26 -0
- package/lib/replacement/contentsList.js +3 -2
- package/lib/replacement/footnotesList.js +8 -8
- package/lib/replacement/indexItem.js +131 -0
- package/lib/replacement/indexList.js +166 -0
- package/lib/replacement/subDivision/footnotesDirective.js +2 -33
- package/lib/replacement/subDivision/indexAnchor.js +124 -0
- package/lib/replacement/subDivision/indexDirective.js +126 -0
- package/lib/replacement/subDivision/pageNumberDirective.js +2 -33
- package/lib/replacement/subDivision.js +15 -1
- package/lib/replacement.js +22 -45
- package/lib/ruleNames.js +31 -6
- package/lib/utilities/footnotes.js +10 -10
- package/lib/utilities/index.js +246 -0
- package/lib/utilities/object.js +59 -0
- package/lib/utilities/processing.js +10 -1
- package/lib/utilities/query.js +26 -18
- package/lib/utilities/replacement.js +67 -1
- package/package.json +3 -3
- package/src/constants.js +4 -0
- package/src/defaultMarkdownStyle.js +13 -1
- package/src/elementMap.js +30 -5
- package/src/example/importer.js +21 -5
- package/src/example/indexOptions.js +134 -0
- package/src/example/view/div/sizeable/right.js +1 -1
- package/src/example/view.js +20 -1
- package/src/index/phraseMatcher.js +38 -0
- package/src/markdown/bnf.js +21 -5
- package/src/markdown/lexer.js +10 -10
- package/src/markdown/parser.js +12 -12
- package/src/node/markdown/anchor.js +11 -6
- package/src/node/markdown/comma.js +32 -0
- package/src/node/markdown/contentsLink.js +3 -1
- package/src/node/markdown/contentsList.js +6 -0
- package/src/node/markdown/directive/index.js +7 -0
- package/src/node/markdown/directive.js +6 -0
- package/src/node/markdown/division.js +60 -9
- package/src/node/markdown/{link.js → footnoteLink.js} +7 -5
- package/src/node/markdown/footnotesItem.js +4 -11
- package/src/node/markdown/heading.js +11 -2
- package/src/node/markdown/indexItem.js +7 -0
- package/src/node/markdown/indexLink.js +63 -0
- package/src/node/markdown/indexList.js +34 -0
- package/src/node/markdown/line.js +15 -2
- package/src/node/markdown/subDivision.js +25 -2
- package/src/node/markdown/verticalSpace.js +15 -0
- package/src/node/markdown.js +44 -2
- package/src/nodeMap.js +18 -3
- package/src/prepends.js +5 -0
- package/src/replacement/contentsList.js +3 -1
- package/src/replacement/footnotesList.js +9 -7
- package/src/replacement/indexItem.js +28 -0
- package/src/replacement/indexList.js +45 -0
- package/src/replacement/subDivision/footnotesDirective.js +0 -6
- package/src/replacement/subDivision/indexAnchor.js +20 -0
- package/src/replacement/subDivision/indexDirective.js +20 -0
- package/src/replacement/subDivision/pageNumberDirective.js +0 -6
- package/src/replacement/subDivision.js +12 -0
- package/src/replacement.js +41 -68
- package/src/ruleNames.js +12 -2
- package/src/utilities/footnotes.js +8 -8
- package/src/utilities/index.js +335 -0
- package/src/utilities/object.js +50 -0
- package/src/utilities/processing.js +12 -0
- package/src/utilities/query.js +21 -13
- package/src/utilities/replacement.js +81 -0
package/src/node/markdown.js
CHANGED
|
@@ -126,10 +126,10 @@ class MarkdownNode extends NonTerminalNode {
|
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
asHTML(indent, context) {
|
|
129
|
-
const tagName = this.tagName(context);
|
|
130
|
-
|
|
131
129
|
let html = null;
|
|
132
130
|
|
|
131
|
+
const tagName = this.tagName(context);
|
|
132
|
+
|
|
133
133
|
if (tagName !== null) {
|
|
134
134
|
indent = this.adjustIndent(indent);
|
|
135
135
|
|
|
@@ -157,6 +157,25 @@ ${childNodesHTML}${indent}${closingTag}
|
|
|
157
157
|
return html;
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
+
asPlainText(context) {
|
|
161
|
+
let plainText = null;
|
|
162
|
+
|
|
163
|
+
const tagName = this.tagName(context);
|
|
164
|
+
|
|
165
|
+
if (tagName !== null) {
|
|
166
|
+
const childNodesPlainText = this.childNodesAsPlainText(context);
|
|
167
|
+
|
|
168
|
+
if (childNodesPlainText !== null) {
|
|
169
|
+
plainText = (plainText === null) ?
|
|
170
|
+
childNodesPlainText :
|
|
171
|
+
`${plainText}
|
|
172
|
+
${childNodesPlainText};`;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return plainText;
|
|
177
|
+
}
|
|
178
|
+
|
|
160
179
|
childNodesAsHTML(indent, context) {
|
|
161
180
|
const childNodes = this.getChildNodes(),
|
|
162
181
|
childNodesHTML = childNodes.reduce((childNodesHTML, childNode) => {
|
|
@@ -209,6 +228,29 @@ ${childNodesHTML}${indent}${closingTag}
|
|
|
209
228
|
return domElement;
|
|
210
229
|
}
|
|
211
230
|
|
|
231
|
+
childNodesAsPlainText(context) {
|
|
232
|
+
const childNodes = this.getChildNodes(),
|
|
233
|
+
childNodesPlainText = childNodes.reduce((childNodesPlainText, childNode) => {
|
|
234
|
+
const childNodeMarkdownNode = (childNode instanceof MarkdownNode);
|
|
235
|
+
|
|
236
|
+
if (childNodeMarkdownNode) {
|
|
237
|
+
const markdownNode = childNode, ///
|
|
238
|
+
markdownNodePlainText = markdownNode.asPlainText(context);
|
|
239
|
+
|
|
240
|
+
if (markdownNodePlainText !== null) {
|
|
241
|
+
childNodesPlainText = (childNodesPlainText === null) ?
|
|
242
|
+
markdownNodePlainText : ///
|
|
243
|
+
`${childNodesPlainText}
|
|
244
|
+
${markdownNodePlainText}`;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
return childNodesPlainText;
|
|
249
|
+
}, null);
|
|
250
|
+
|
|
251
|
+
return childNodesPlainText;
|
|
252
|
+
}
|
|
253
|
+
|
|
212
254
|
createChildNodeDOMElements(context) {
|
|
213
255
|
const childNodes = this.getChildNodes();
|
|
214
256
|
|
package/src/nodeMap.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import LineMarkdownNode from "./node/markdown/line";
|
|
4
|
-
import
|
|
4
|
+
import CommaMarkdownNode from "./node/markdown/comma";
|
|
5
5
|
import ImageMarkdownNode from "./node/markdown/image";
|
|
6
6
|
import TableMarkdownNode from "./node/markdown/table";
|
|
7
7
|
import ErrorMarkdownNode from "./node/markdown/error";
|
|
@@ -11,6 +11,9 @@ import FootnoteMarkdownNode from "./node/markdown/footnote";
|
|
|
11
11
|
import ReferenceMarkdownNode from "./node/markdown/reference";
|
|
12
12
|
import ParagraphMarkdownNode from "./node/markdown/paragraph";
|
|
13
13
|
import HyperlinkMarkdownNode from "./node/markdown/hyperlink";
|
|
14
|
+
import IndexListMarkdownNode from "./node/markdown/indexList";
|
|
15
|
+
import IndexItemMarkdownNode from "./node/markdown/indexItem";
|
|
16
|
+
import IndexLinkMarkdownNode from "./node/markdown/indexLink";
|
|
14
17
|
import TableCellMarkdownNode from "./node/markdown/tableCell";
|
|
15
18
|
import TableHeadMarkdownNode from "./node/markdown/tableHead";
|
|
16
19
|
import TableBodyMarkdownNode from "./node/markdown/tableBody";
|
|
@@ -30,6 +33,7 @@ import TableBodyRowMarkdownNode from "./node/markdown/tableBodyRow";
|
|
|
30
33
|
import ContentsLinkMarkdownNode from "./node/markdown/contentsLink";
|
|
31
34
|
import ContentsItemMarkdownNode from "./node/markdown/contentsItem";
|
|
32
35
|
import ContentsListMarkdownNode from "./node/markdown/contentsList";
|
|
36
|
+
import FootnoteLinkMarkdownNode from "./node/markdown/footnoteLink";
|
|
33
37
|
import InlineListingMarkdownNode from "./node/markdown/inlineListing";
|
|
34
38
|
import UnorderedListMarkdownNode from "./node/markdown/unorderedList";
|
|
35
39
|
import FootnotesItemMarkdownNode from "./node/markdown/footnotesItem";
|
|
@@ -40,6 +44,7 @@ import TableBodyCellMarkdownNode from "./node/markdown/tableBodyCell";
|
|
|
40
44
|
import EmphasisedTextMarkdownNode from "./node/markdown/emphasisedText";
|
|
41
45
|
import PrimaryHeadingMarkdownNode from "./node/markdown/heading/primary";
|
|
42
46
|
import EmptyTableCellMarkdownNode from "./node/markdown/emptyTableCell";
|
|
47
|
+
import IndexDirectiveMarkdownNode from "./node/markdown/directive/index";
|
|
43
48
|
import EmbedDirectiveMarkdownNode from "./node/markdown/directive/embee";
|
|
44
49
|
import TertiaryHeadingMarkdownNode from "./node/markdown/heading/tertiary";
|
|
45
50
|
import OrderedListItemMarkdownNode from "./node/markdown/listItem/ordered";
|
|
@@ -56,7 +61,7 @@ import PageNumberDirectiveMarkdownNode from "./node/markdown/directive/pageNumbe
|
|
|
56
61
|
import StronglyEmphasisedTextMarkdownNode from "./node/markdown/stronglyEmphasisedText";
|
|
57
62
|
|
|
58
63
|
import { LINE_RULE_NAME,
|
|
59
|
-
|
|
64
|
+
COMMA_RULE_NAME,
|
|
60
65
|
IMAGE_RULE_NAME,
|
|
61
66
|
TABLE_RULE_NAME,
|
|
62
67
|
ERROR_RULE_NAME,
|
|
@@ -66,6 +71,9 @@ import { LINE_RULE_NAME,
|
|
|
66
71
|
REFERENCE_RULE_NAME,
|
|
67
72
|
PARAGRAPH_RULE_NAME,
|
|
68
73
|
HYPERLINK_RULE_NAME,
|
|
74
|
+
INDEX_LIST_RULE_NAME,
|
|
75
|
+
INDEX_ITEM_RULE_NAME,
|
|
76
|
+
INDEX_LINK_RULE_NAME,
|
|
69
77
|
TABLE_CELL_RULE_NAME,
|
|
70
78
|
TABLE_HEAD_RULE_NAME,
|
|
71
79
|
TABLE_BODY_RULE_NAME,
|
|
@@ -79,6 +87,7 @@ import { LINE_RULE_NAME,
|
|
|
79
87
|
STRONG_TEXT_RULE_NAME,
|
|
80
88
|
SUB_DIVISION_RULE_NAME,
|
|
81
89
|
ORDERED_LIST_RULE_NAME,
|
|
90
|
+
FOOTNOTE_LINK_RULE_NAME,
|
|
82
91
|
BLOCK_LISTING_RULE_NAME,
|
|
83
92
|
CONTENTS_LINK_RULE_NAME,
|
|
84
93
|
CONTENTS_ITEM_RULE_NAME,
|
|
@@ -94,6 +103,7 @@ import { LINE_RULE_NAME,
|
|
|
94
103
|
TABLE_BODY_CELL_RULE_NAME,
|
|
95
104
|
EMPHASISED_TEXT_RULE_NAME,
|
|
96
105
|
PRIMARY_HEADING_RULE_NAME,
|
|
106
|
+
INDEX_DIRECTIVE_RULE_NAME,
|
|
97
107
|
EMBED_DIRECTIVE_RULE_NAME,
|
|
98
108
|
EMPTY_TABLE_CELL_RULE_NAME,
|
|
99
109
|
TERTIARY_HEADING_RULE_NAME,
|
|
@@ -112,7 +122,7 @@ import { LINE_RULE_NAME,
|
|
|
112
122
|
|
|
113
123
|
const nodeMap = {
|
|
114
124
|
[LINE_RULE_NAME]: LineMarkdownNode,
|
|
115
|
-
[
|
|
125
|
+
[COMMA_RULE_NAME]: CommaMarkdownNode,
|
|
116
126
|
[IMAGE_RULE_NAME]: ImageMarkdownNode,
|
|
117
127
|
[TABLE_RULE_NAME]: TableMarkdownNode,
|
|
118
128
|
[ERROR_RULE_NAME]: ErrorMarkdownNode,
|
|
@@ -122,6 +132,9 @@ const nodeMap = {
|
|
|
122
132
|
[REFERENCE_RULE_NAME]: ReferenceMarkdownNode,
|
|
123
133
|
[PARAGRAPH_RULE_NAME]: ParagraphMarkdownNode,
|
|
124
134
|
[HYPERLINK_RULE_NAME]: HyperlinkMarkdownNode,
|
|
135
|
+
[INDEX_LIST_RULE_NAME]: IndexListMarkdownNode,
|
|
136
|
+
[INDEX_ITEM_RULE_NAME]: IndexItemMarkdownNode,
|
|
137
|
+
[INDEX_LINK_RULE_NAME]: IndexLinkMarkdownNode,
|
|
125
138
|
[TABLE_CELL_RULE_NAME]: TableCellMarkdownNode,
|
|
126
139
|
[TABLE_HEAD_RULE_NAME]: TableHeadMarkdownNode,
|
|
127
140
|
[TABLE_BODY_RULE_NAME]: TableBodyMarkdownNode,
|
|
@@ -139,6 +152,7 @@ const nodeMap = {
|
|
|
139
152
|
[CONTENTS_LINK_RULE_NAME]: ContentsLinkMarkdownNode,
|
|
140
153
|
[CONTENTS_ITEM_RULE_NAME]: ContentsItemMarkdownNode,
|
|
141
154
|
[CONTENTS_LIST_RULE_NAME]: ContentsListMarkdownNode,
|
|
155
|
+
[FOOTNOTE_LINK_RULE_NAME]: FootnoteLinkMarkdownNode,
|
|
142
156
|
[TABLE_HEAD_ROW_RULE_NAME]: TableHeadRowMarkdownNode,
|
|
143
157
|
[TABLE_BODY_ROW_RULE_NAME]: TableBodyRowMarkdownNode,
|
|
144
158
|
[INLINE_LISTING_RULE_NAME]: InlineListingMarkdownNode,
|
|
@@ -150,6 +164,7 @@ const nodeMap = {
|
|
|
150
164
|
[TABLE_BODY_CELL_RULE_NAME]: TableBodyCellMarkdownNode,
|
|
151
165
|
[EMPHASISED_TEXT_RULE_NAME]: EmphasisedTextMarkdownNode,
|
|
152
166
|
[PRIMARY_HEADING_RULE_NAME]: PrimaryHeadingMarkdownNode,
|
|
167
|
+
[INDEX_DIRECTIVE_RULE_NAME]: IndexDirectiveMarkdownNode,
|
|
153
168
|
[EMBED_DIRECTIVE_RULE_NAME]: EmbedDirectiveMarkdownNode,
|
|
154
169
|
[EMPTY_TABLE_CELL_RULE_NAME]: EmptyTableCellMarkdownNode,
|
|
155
170
|
[TERTIARY_HEADING_RULE_NAME]: TertiaryHeadingMarkdownNode,
|
package/src/prepends.js
ADDED
|
@@ -11,7 +11,7 @@ import { headingMarkdownNodesFromNode } from "../utilities/query";
|
|
|
11
11
|
|
|
12
12
|
const { filter } = arrayUtilities;
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
class ContentsListReplacement extends Replacement {
|
|
15
15
|
replaceContentsDirectiveSubdivisionReplacement(contentsDirectiveSubDivisionReplacement, divisionMarkdownNode, context) {
|
|
16
16
|
const subDivisionMarkdownNode = contentsDirectiveSubDivisionReplacement.getSubDivisionMarkdownNode(),
|
|
17
17
|
replacedNode = subDivisionMarkdownNode, ///
|
|
@@ -63,6 +63,8 @@ Object.assign(ContentsItemReplacement, { ///
|
|
|
63
63
|
ContentsListReplacement
|
|
64
64
|
});
|
|
65
65
|
|
|
66
|
+
export default ContentsListReplacement;
|
|
67
|
+
|
|
66
68
|
function nestedHeadingMarkdownNodesFromHeadingMarkdownNodes(headingMarkdownNodes) {
|
|
67
69
|
const nodes = headingMarkdownNodes, ///
|
|
68
70
|
nestedNode = nestNodes(nodes),
|
|
@@ -4,13 +4,15 @@ import Replacement from "../replacement";
|
|
|
4
4
|
import FootnotesItemReplacement from "../replacement/footnotesItem";
|
|
5
5
|
import FootnotesListMarkdownNode from "../node/markdown/footnotesList";
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { footnoteLinkMarkdownNodesFromNode } from "../utilities/query";
|
|
8
8
|
|
|
9
9
|
export default class FootnotesListReplacement extends Replacement {
|
|
10
|
-
|
|
11
|
-
const
|
|
10
|
+
replaceFootnotesDirectiveSubDivisionReplacement(footnotesDirectiveSubDivisionReplacement, divisionMarkdownNode, context) {
|
|
11
|
+
const subDivisionMarkdownNode = footnotesDirectiveSubDivisionReplacement.getSubDivisionMarkdownNode(),
|
|
12
|
+
replacedNode = subDivisionMarkdownNode, ///
|
|
13
|
+
parentNode = divisionMarkdownNode; ///
|
|
12
14
|
|
|
13
|
-
super.
|
|
15
|
+
super.replace(replacedNode, parentNode, context)
|
|
14
16
|
}
|
|
15
17
|
|
|
16
18
|
static fromDivisionMarkdownNodeAndFootnoteReplacementMap(divisionMarkdownNode, footnoteReplacementMap, context) {
|
|
@@ -18,13 +20,13 @@ export default class FootnotesListReplacement extends Replacement {
|
|
|
18
20
|
|
|
19
21
|
const node = divisionMarkdownNode, ///
|
|
20
22
|
start = startFromFootnoteReplacementMap(footnoteReplacementMap),
|
|
21
|
-
|
|
23
|
+
footnoteLinkMarkdownNodes = footnoteLinkMarkdownNodesFromNode(node),
|
|
22
24
|
footnotesItemReplacements = [];
|
|
23
25
|
|
|
24
26
|
let number = start;
|
|
25
27
|
|
|
26
|
-
|
|
27
|
-
const identifier =
|
|
28
|
+
footnoteLinkMarkdownNodes.forEach((footnoteLinkMarkdownNode) => {
|
|
29
|
+
const identifier = footnoteLinkMarkdownNode.identifier(context),
|
|
28
30
|
footnoteReplacement = footnoteReplacementMap[identifier] || null;
|
|
29
31
|
|
|
30
32
|
if (footnoteReplacement !== null) {
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import Replacement from "../replacement";
|
|
4
|
+
|
|
5
|
+
import { COMMA } from "../constants";
|
|
6
|
+
import { INDEX_ITEM_RULE_NAME } from "../ruleNames";
|
|
7
|
+
|
|
8
|
+
export default class IndexItemReplacement extends Replacement {
|
|
9
|
+
getIndexItemMarkdownNode() {
|
|
10
|
+
const node = this.getNode(),
|
|
11
|
+
indexItemMarkdownNode = node; ///
|
|
12
|
+
|
|
13
|
+
return indexItemMarkdownNode;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
static fromEntryAndPageNumbers(entry, pageNumbers, context) {
|
|
17
|
+
const { tokensFromContent, nodeFromTokensAndStartRuleName } = context,
|
|
18
|
+
entryContent = entry, ///
|
|
19
|
+
pageNumbersContent = pageNumbers.join(COMMA),
|
|
20
|
+
content = `${entryContent} ${pageNumbersContent}`,
|
|
21
|
+
startRuleName = INDEX_ITEM_RULE_NAME,
|
|
22
|
+
tokens = tokensFromContent(content),
|
|
23
|
+
node = nodeFromTokensAndStartRuleName(tokens, startRuleName),
|
|
24
|
+
indexItemReplacement = Replacement.fromNodeAndTokens(IndexItemReplacement, node, tokens);
|
|
25
|
+
|
|
26
|
+
return indexItemReplacement;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import Replacement from "../replacement";
|
|
4
|
+
|
|
5
|
+
import IndexItemReplacement from "../replacement/indexItem";
|
|
6
|
+
import IndexListMarkdownNode from "../node/markdown/indexList";
|
|
7
|
+
|
|
8
|
+
import { indexMapFromDivisionMarkdownNodes } from "../utilities/index";
|
|
9
|
+
|
|
10
|
+
export default class IndexListReplacement extends Replacement {
|
|
11
|
+
replaceIndexDirectiveSubdivisionReplacement(indexDirectiveSubDivisionReplacement, divisionMarkdownNode, context) {
|
|
12
|
+
const subDivisionMarkdownNode = indexDirectiveSubDivisionReplacement.getSubDivisionMarkdownNode(),
|
|
13
|
+
replacedNode = subDivisionMarkdownNode, ///
|
|
14
|
+
parentNode = divisionMarkdownNode; ///
|
|
15
|
+
|
|
16
|
+
super.replace(replacedNode, parentNode, context)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
static fromDivisionMarkdownNodesAndDivisionMarkdownNode(divisionMarkdownNodes, divisionMarkdownNode, context) {
|
|
20
|
+
let indexListReplacement = null;
|
|
21
|
+
|
|
22
|
+
const indexMap = indexMapFromDivisionMarkdownNodes(divisionMarkdownNodes, context),
|
|
23
|
+
entries = Object.keys(indexMap), ///
|
|
24
|
+
indexItemReplacements = entries.map((entry) => {
|
|
25
|
+
const pageNumbers = indexMap[entry],
|
|
26
|
+
indexItemReplacement = IndexItemReplacement.fromEntryAndPageNumbers(entry, pageNumbers, context);
|
|
27
|
+
|
|
28
|
+
return indexItemReplacement;
|
|
29
|
+
}),
|
|
30
|
+
indexListMarkdownNode = IndexListMarkdownNode.fromIndexItemReplacements(indexItemReplacements);
|
|
31
|
+
|
|
32
|
+
if (indexListMarkdownNode !== null) {
|
|
33
|
+
const node = indexListMarkdownNode, ///
|
|
34
|
+
tokens = [];
|
|
35
|
+
|
|
36
|
+
indexItemReplacements.forEach((indexItemReplacement) => {
|
|
37
|
+
indexItemReplacement.getTokens(tokens);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
indexListReplacement = Replacement.fromNodeAndTokens(IndexListReplacement, node, tokens);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return indexListReplacement;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -5,12 +5,6 @@ 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
|
-
|
|
14
8
|
static fromSubDivisionMarkdownNode(subDivisionMarkdownNode, context) {
|
|
15
9
|
let footnotesDirectiveSubDivisionReplacement = null;
|
|
16
10
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import SubDivisionReplacement from "../../replacement/subDivision";
|
|
4
|
+
|
|
5
|
+
import AnchorMarkdownNode from "../../node/markdown/anchor";
|
|
6
|
+
import SubDivisionMarkdownNode from "../../node/markdown/subDivision";
|
|
7
|
+
|
|
8
|
+
import { INDEX_PREPEND } from "../../prepends";
|
|
9
|
+
|
|
10
|
+
export default class IndexAnchorSubDivisionReplacement extends SubDivisionReplacement {
|
|
11
|
+
static fromPageNumber(pageNumber, context) {
|
|
12
|
+
const prepend = INDEX_PREPEND,
|
|
13
|
+
identifier = pageNumber, ///
|
|
14
|
+
anchorMarkdownNode = AnchorMarkdownNode.fromPrependAndIdentifier(prepend, identifier),
|
|
15
|
+
subDivisionMarkdownNode = SubDivisionMarkdownNode.fromAnchorMarkdownNode(anchorMarkdownNode),
|
|
16
|
+
indexAnchorSubdivisionReplacement = SubDivisionReplacement.fromSubDivisionMarkdownNode(IndexAnchorSubDivisionReplacement, subDivisionMarkdownNode, context);
|
|
17
|
+
|
|
18
|
+
return indexAnchorSubdivisionReplacement;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import SubDivisionReplacement from "../../replacement/subDivision";
|
|
4
|
+
|
|
5
|
+
import { indexDirectiveMarkdownNodeFromNode } from "../../utilities/query";
|
|
6
|
+
|
|
7
|
+
export default class IndexDirectiveSubDivisionReplacement extends SubDivisionReplacement {
|
|
8
|
+
static fromSubDivisionMarkdownNode(subDivisionMarkdownNode, context) {
|
|
9
|
+
let indexDirectiveSubDivisionReplacement = null;
|
|
10
|
+
|
|
11
|
+
const node = subDivisionMarkdownNode, ///
|
|
12
|
+
indexDirectiveMarkdownNode = indexDirectiveMarkdownNodeFromNode(node);
|
|
13
|
+
|
|
14
|
+
if (indexDirectiveMarkdownNode !== null) {
|
|
15
|
+
indexDirectiveSubDivisionReplacement = SubDivisionReplacement.fromSubDivisionMarkdownNode(IndexDirectiveSubDivisionReplacement, subDivisionMarkdownNode, context);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return indexDirectiveSubDivisionReplacement;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -5,12 +5,6 @@ import SubDivisionReplacement from "../../replacement/subDivision";
|
|
|
5
5
|
import { pageNumberDirectiveMarkdownNodeFromNode } from "../../utilities/query";
|
|
6
6
|
|
|
7
7
|
export default class PageNumberDirectiveSubDivisionReplacement extends SubDivisionReplacement {
|
|
8
|
-
appendToDivisionMarkdownNode(divisionMarkdownNode, context) {
|
|
9
|
-
const parentNode = divisionMarkdownNode; ///
|
|
10
|
-
|
|
11
|
-
super.appendTo(parentNode, context);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
8
|
static fromSubDivisionMarkdownNode(subDivisionMarkdownNode, context) {
|
|
15
9
|
let pageNumberDirectiveSubDivisionReplacement = null;
|
|
16
10
|
|
|
@@ -13,6 +13,18 @@ export default class SubDivisionReplacement extends Replacement {
|
|
|
13
13
|
return this.subDivisionMarkdownNode;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
appendToDivisionMarkdownNode(divisionMarkdownNode, context) {
|
|
17
|
+
const parentNode = divisionMarkdownNode; ///
|
|
18
|
+
|
|
19
|
+
super.appendTo(parentNode, context);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
prependToDivisionMarkdownNode(divisionMarkdownNode, context) {
|
|
23
|
+
const parentNode = divisionMarkdownNode; ///
|
|
24
|
+
|
|
25
|
+
super.prependTo(parentNode, context);
|
|
26
|
+
}
|
|
27
|
+
|
|
16
28
|
removeFromDivisionMarkdownNode(divisionMarkdownNode, context) {
|
|
17
29
|
const removedNode = this.subDivisionMarkdownNode, ///
|
|
18
30
|
parentNode = divisionMarkdownNode;
|
package/src/replacement.js
CHANGED
|
@@ -2,7 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
import { arrayUtilities } from "necessary";
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { appendNode,
|
|
6
|
+
prependNode,
|
|
7
|
+
removeNode,
|
|
8
|
+
replaceNode,
|
|
9
|
+
replaceNodes,
|
|
10
|
+
addNodesAfter,
|
|
11
|
+
appendTokens,
|
|
12
|
+
prependTokens,
|
|
13
|
+
removeTokens,
|
|
14
|
+
replaceTokens,
|
|
15
|
+
addTokensAfter,
|
|
16
|
+
overwriteClonedNodeTokens,
|
|
17
|
+
clonedTokensFromNodeAndTokens, } from "./utilities/replacement";
|
|
6
18
|
|
|
7
19
|
const { push } = arrayUtilities;
|
|
8
20
|
|
|
@@ -68,6 +80,16 @@ export default class Replacement {
|
|
|
68
80
|
appendTokens(appendedTokens, parentNode, tokens);
|
|
69
81
|
}
|
|
70
82
|
|
|
83
|
+
prependTo(parentNode, context) {
|
|
84
|
+
const { tokens } = context,
|
|
85
|
+
prependedNode = this.node, ///
|
|
86
|
+
prependedTokens = this.tokens; ///
|
|
87
|
+
|
|
88
|
+
prependNode(prependedNode, parentNode);
|
|
89
|
+
|
|
90
|
+
prependTokens(prependedTokens, parentNode, tokens);
|
|
91
|
+
}
|
|
92
|
+
|
|
71
93
|
addAfter(existingNode, parentNode, context) {
|
|
72
94
|
const { tokens } = context,
|
|
73
95
|
addedNodes = this.getChildNodes(), ///
|
|
@@ -108,12 +130,13 @@ export default class Replacement {
|
|
|
108
130
|
}
|
|
109
131
|
|
|
110
132
|
clone(...remainingArguments) {
|
|
111
|
-
const
|
|
112
|
-
clonedTokens = clonedTokensFromNodeAndTokens(node, this.tokens);
|
|
133
|
+
const clonedNode = this.node.clone(),
|
|
134
|
+
clonedTokens = clonedTokensFromNodeAndTokens(this.node, this.tokens);
|
|
113
135
|
|
|
114
|
-
|
|
136
|
+
overwriteClonedNodeTokens(clonedNode, clonedTokens, this.tokens);
|
|
115
137
|
|
|
116
138
|
const Class = this.constructor, ///
|
|
139
|
+
node = clonedNode, ///
|
|
117
140
|
tokens = clonedTokens, ///
|
|
118
141
|
replacement = new Class(node, tokens, ...remainingArguments);
|
|
119
142
|
|
|
@@ -133,13 +156,22 @@ export default class Replacement {
|
|
|
133
156
|
|
|
134
157
|
let { tokens } = context;
|
|
135
158
|
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
offset = firstSignificantTokenIndex; ///
|
|
159
|
+
const firstSignificantTokenIndex = node.getFirstSignificantTokenIndex(tokens),
|
|
160
|
+
clonedNode = node.clone();
|
|
139
161
|
|
|
140
|
-
|
|
162
|
+
let clonedTokens;
|
|
163
|
+
|
|
164
|
+
if (firstSignificantTokenIndex === null) {
|
|
165
|
+
clonedTokens = [];
|
|
166
|
+
} else {
|
|
167
|
+
const offset = firstSignificantTokenIndex; ///
|
|
168
|
+
|
|
169
|
+
clonedTokens = clonedTokensFromNodeAndTokens(node, tokens);
|
|
170
|
+
|
|
171
|
+
overwriteClonedNodeTokens(clonedNode, clonedTokens, tokens, offset);
|
|
172
|
+
}
|
|
141
173
|
|
|
142
|
-
|
|
174
|
+
node = clonedNode; ///
|
|
143
175
|
|
|
144
176
|
tokens = clonedTokens; ///
|
|
145
177
|
|
|
@@ -163,62 +195,3 @@ export default class Replacement {
|
|
|
163
195
|
}
|
|
164
196
|
}
|
|
165
197
|
|
|
166
|
-
function overwriteNodeTokens(node, clonedTokens, tokens, offset = 0) {
|
|
167
|
-
const nodeTerminalNode = node.isTerminalNode();
|
|
168
|
-
|
|
169
|
-
if (nodeTerminalNode) {
|
|
170
|
-
const terminalNode = node; ///
|
|
171
|
-
|
|
172
|
-
overwriteTerminalNodeTokens(terminalNode, clonedTokens, tokens, offset);
|
|
173
|
-
} else {
|
|
174
|
-
const nonTerminalNode = node; ///
|
|
175
|
-
|
|
176
|
-
overwriteNonTerminalNodeTokens(nonTerminalNode, clonedTokens, tokens, offset);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
function overwriteTerminalNodeTokens(terminalNode, clonedTokens, tokens, offset) {
|
|
181
|
-
let index,
|
|
182
|
-
significantToken;
|
|
183
|
-
|
|
184
|
-
significantToken = terminalNode.getSignificantToken();
|
|
185
|
-
|
|
186
|
-
if (significantToken !== null) {
|
|
187
|
-
index = tokens.indexOf(significantToken);
|
|
188
|
-
|
|
189
|
-
index -= offset;
|
|
190
|
-
|
|
191
|
-
const clonedToken = clonedTokens[index];
|
|
192
|
-
|
|
193
|
-
significantToken = clonedToken; ///
|
|
194
|
-
|
|
195
|
-
terminalNode.setSignificantToken(significantToken);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
function overwriteNonTerminalNodeTokens(nonTerminalNode, clonedTokens, tokens, offset) {
|
|
200
|
-
const childNodes = nonTerminalNode.getChildNodes();
|
|
201
|
-
|
|
202
|
-
childNodes.forEach((childNode) => {
|
|
203
|
-
const node = childNode; ///
|
|
204
|
-
|
|
205
|
-
overwriteNodeTokens(node, clonedTokens, tokens, offset);
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
function clonedTokensFromNodeAndTokens(node, tokens) {
|
|
210
|
-
const firstSignificantTokenIndex = node.getFirstSignificantTokenIndex(tokens),
|
|
211
|
-
lastSignificantTokenIndex = node.getLastSignificantTokenIndex(tokens),
|
|
212
|
-
start = firstSignificantTokenIndex, ///
|
|
213
|
-
end = lastSignificantTokenIndex + 1;
|
|
214
|
-
|
|
215
|
-
tokens = tokens.slice(start, end); ///
|
|
216
|
-
|
|
217
|
-
const clonedTokens = tokens.map((token) => { ///
|
|
218
|
-
const clonedToken = token.clone();
|
|
219
|
-
|
|
220
|
-
return clonedToken;
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
return clonedTokens;
|
|
224
|
-
}
|
package/src/ruleNames.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
export const LINE_RULE_NAME = "line";
|
|
4
|
-
export const
|
|
4
|
+
export const COMMA_RULE_NAME = "comma";
|
|
5
5
|
export const IMAGE_RULE_NAME = "image";
|
|
6
6
|
export const TABLE_RULE_NAME = "table";
|
|
7
7
|
export const ERROR_RULE_NAME = "error";
|
|
@@ -11,6 +11,9 @@ export const FOOTNOTE_RULE_NAME = "footnote";
|
|
|
11
11
|
export const REFERENCE_RULE_NAME = "reference";
|
|
12
12
|
export const PARAGRAPH_RULE_NAME = "paragraph";
|
|
13
13
|
export const HYPERLINK_RULE_NAME = "hyperlink";
|
|
14
|
+
export const INDEX_LIST_RULE_NAME = "indexList";
|
|
15
|
+
export const INDEX_ITEM_RULE_NAME = "indexItem";
|
|
16
|
+
export const INDEX_LINK_RULE_NAME = "indexLink";
|
|
14
17
|
export const TABLE_CELL_RULE_NAME = "tableCell";
|
|
15
18
|
export const TABLE_HEAD_RULE_NAME = "tableHead";
|
|
16
19
|
export const TABLE_BODY_RULE_NAME = "tableBody";
|
|
@@ -28,6 +31,7 @@ export const BLOCK_LISTING_RULE_NAME = "blockListing";
|
|
|
28
31
|
export const CONTENTS_LINK_RULE_NAME = "contentsLink";
|
|
29
32
|
export const CONTENTS_ITEM_RULE_NAME = "contentsItem";
|
|
30
33
|
export const CONTENTS_LIST_RULE_NAME = "contentsList";
|
|
34
|
+
export const FOOTNOTE_LINK_RULE_NAME = "footnoteLink";
|
|
31
35
|
export const FOOTNOTES_ITEM_RULE_NAME = "footnotesItem";
|
|
32
36
|
export const TABLE_HEAD_ROW_RULE_NAME = "tableHeadRow";
|
|
33
37
|
export const TABLE_BODY_ROW_RULE_NAME = "tableBodyRow";
|
|
@@ -39,6 +43,7 @@ export const TABLE_HEAD_CELL_RULE_NAME = "tableHeadCell";
|
|
|
39
43
|
export const TABLE_BODY_CELL_RULE_NAME = "tableBodyCell";
|
|
40
44
|
export const EMPHASISED_TEXT_RULE_NAME = "emphasisedText";
|
|
41
45
|
export const PRIMARY_HEADING_RULE_NAME = "primaryHeading";
|
|
46
|
+
export const INDEX_DIRECTIVE_RULE_NAME = "indexDirective";
|
|
42
47
|
export const EMBED_DIRECTIVE_RULE_NAME = "embedDirective";
|
|
43
48
|
export const EMPTY_TABLE_CELL_RULE_NAME = "emptyTableCell";
|
|
44
49
|
export const TERTIARY_HEADING_RULE_NAME = "tertiaryHeading";
|
|
@@ -57,7 +62,7 @@ export const STRONGLY_EMPHASISED_TEXT_RULE_NAME = "stronglyEmphasisedText";
|
|
|
57
62
|
|
|
58
63
|
const ruleNames = {
|
|
59
64
|
LINE_RULE_NAME,
|
|
60
|
-
|
|
65
|
+
COMMA_RULE_NAME,
|
|
61
66
|
IMAGE_RULE_NAME,
|
|
62
67
|
TABLE_RULE_NAME,
|
|
63
68
|
ERROR_RULE_NAME,
|
|
@@ -67,6 +72,9 @@ const ruleNames = {
|
|
|
67
72
|
REFERENCE_RULE_NAME,
|
|
68
73
|
PARAGRAPH_RULE_NAME,
|
|
69
74
|
HYPERLINK_RULE_NAME,
|
|
75
|
+
INDEX_LIST_RULE_NAME,
|
|
76
|
+
INDEX_ITEM_RULE_NAME,
|
|
77
|
+
INDEX_LINK_RULE_NAME,
|
|
70
78
|
TABLE_CELL_RULE_NAME,
|
|
71
79
|
TABLE_HEAD_RULE_NAME,
|
|
72
80
|
TABLE_BODY_RULE_NAME,
|
|
@@ -84,6 +92,7 @@ const ruleNames = {
|
|
|
84
92
|
CONTENTS_LINK_RULE_NAME,
|
|
85
93
|
CONTENTS_ITEM_RULE_NAME,
|
|
86
94
|
CONTENTS_LIST_RULE_NAME,
|
|
95
|
+
FOOTNOTE_LINK_RULE_NAME,
|
|
87
96
|
FOOTNOTES_ITEM_RULE_NAME,
|
|
88
97
|
TABLE_HEAD_ROW_RULE_NAME,
|
|
89
98
|
TABLE_BODY_ROW_RULE_NAME,
|
|
@@ -95,6 +104,7 @@ const ruleNames = {
|
|
|
95
104
|
TABLE_BODY_CELL_RULE_NAME,
|
|
96
105
|
EMPHASISED_TEXT_RULE_NAME,
|
|
97
106
|
PRIMARY_HEADING_RULE_NAME,
|
|
107
|
+
INDEX_DIRECTIVE_RULE_NAME,
|
|
98
108
|
EMBED_DIRECTIVE_RULE_NAME,
|
|
99
109
|
EMPTY_TABLE_CELL_RULE_NAME,
|
|
100
110
|
TERTIARY_HEADING_RULE_NAME,
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { footnoteLinkMarkdownNodesFromNode } from "../utilities/query";
|
|
4
4
|
|
|
5
|
-
export function
|
|
5
|
+
export function renumberFootnoteLinkMarkdownNodes(divisionMarkdownNode, footnoteReplacementMap, callback, context) {
|
|
6
6
|
const node = divisionMarkdownNode, ///
|
|
7
|
-
|
|
7
|
+
footnoteLinkMarkdownNodes = footnoteLinkMarkdownNodesFromNode(node);
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
const identifier =
|
|
9
|
+
footnoteLinkMarkdownNodes.forEach((footnoteLinkMarkdownNode) => {
|
|
10
|
+
const identifier = footnoteLinkMarkdownNode.identifier(context),
|
|
11
11
|
footnoteReplacement = footnoteReplacementMap[identifier] || null;
|
|
12
12
|
|
|
13
13
|
if (footnoteReplacement !== null) {
|
|
14
14
|
const number = footnoteReplacement.getNumber();
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
footnoteLinkMarkdownNode.setNumber(number);
|
|
17
17
|
|
|
18
|
-
callback(
|
|
18
|
+
callback(footnoteLinkMarkdownNode);
|
|
19
19
|
}
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
export default {
|
|
24
|
-
|
|
24
|
+
renumberFootnoteLinkMarkdownNodes
|
|
25
25
|
};
|