highmark-markdown 0.0.428 → 0.0.431
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 +5 -5
- 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/markdown/parser.js
CHANGED
|
@@ -11,43 +11,43 @@ export default class MarkdownParser extends CommonParser {
|
|
|
11
11
|
|
|
12
12
|
static nodeMap = nodeMap;
|
|
13
13
|
|
|
14
|
-
static
|
|
15
|
-
if (
|
|
14
|
+
static fromBNF(Class, bnf) {
|
|
15
|
+
if (bnf === undefined) {
|
|
16
|
+
bnf = Class; ///
|
|
17
|
+
|
|
16
18
|
Class = MarkdownParser; ///
|
|
17
19
|
}
|
|
18
20
|
|
|
19
21
|
const { nodeMap } = Class,
|
|
20
|
-
markdownParser = CommonParser.
|
|
22
|
+
markdownParser = CommonParser.fromBNF(Class, bnf);
|
|
21
23
|
|
|
22
24
|
setNonTerminalNodes(markdownParser, nodeMap);
|
|
23
25
|
|
|
24
26
|
return markdownParser;
|
|
25
27
|
}
|
|
26
28
|
|
|
27
|
-
static
|
|
28
|
-
if (
|
|
29
|
-
|
|
29
|
+
static fromRules(Class, rules) {
|
|
30
|
+
if (rules === undefined) {
|
|
31
|
+
rules = Class; ///
|
|
30
32
|
|
|
31
33
|
Class = MarkdownParser; ///
|
|
32
34
|
}
|
|
33
35
|
|
|
34
36
|
const { nodeMap } = Class,
|
|
35
|
-
markdownParser = CommonParser.
|
|
37
|
+
markdownParser = CommonParser.fromRules(Class, rules);
|
|
36
38
|
|
|
37
39
|
setNonTerminalNodes(markdownParser, nodeMap);
|
|
38
40
|
|
|
39
41
|
return markdownParser;
|
|
40
42
|
}
|
|
41
43
|
|
|
42
|
-
static
|
|
43
|
-
if (
|
|
44
|
-
rules = Class; ///
|
|
45
|
-
|
|
44
|
+
static fromNothing(Class) {
|
|
45
|
+
if (Class === undefined) {
|
|
46
46
|
Class = MarkdownParser; ///
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
const { nodeMap } = Class,
|
|
50
|
-
markdownParser = CommonParser.
|
|
50
|
+
markdownParser = CommonParser.fromNothing(Class);
|
|
51
51
|
|
|
52
52
|
setNonTerminalNodes(markdownParser, nodeMap);
|
|
53
53
|
|
|
@@ -9,12 +9,17 @@ import { ANCHOR_RULE_NAME } from "../../ruleNames";
|
|
|
9
9
|
import { ID_ATTRIBUTE_NAME } from "../../attributeNames";
|
|
10
10
|
|
|
11
11
|
export default class AnchorMarkdownNode extends MarkdownNode {
|
|
12
|
-
constructor(ruleName, childNodes, opacity, precedence, domElement, identifier) {
|
|
13
|
-
super(ruleName, childNodes, opacity, precedence, domElement);
|
|
12
|
+
constructor(ruleName, childNodes, opacity, precedence, domElement, prepend, identifier) {
|
|
13
|
+
super(ruleName, childNodes, opacity, precedence, domElement, prepend);
|
|
14
14
|
|
|
15
|
+
this.prepend = prepend;
|
|
15
16
|
this.identifier = identifier;
|
|
16
17
|
}
|
|
17
18
|
|
|
19
|
+
getPrepend() {
|
|
20
|
+
return this.prepend;
|
|
21
|
+
}
|
|
22
|
+
|
|
18
23
|
getIdentifier() {
|
|
19
24
|
return this.identifier;
|
|
20
25
|
}
|
|
@@ -26,7 +31,7 @@ export default class AnchorMarkdownNode extends MarkdownNode {
|
|
|
26
31
|
}
|
|
27
32
|
|
|
28
33
|
attributeValue(context) {
|
|
29
|
-
const attributeValue = this.identifier
|
|
34
|
+
const attributeValue = `${this.prepend}-${this.identifier}`;
|
|
30
35
|
|
|
31
36
|
return attributeValue;
|
|
32
37
|
}
|
|
@@ -46,16 +51,16 @@ export default class AnchorMarkdownNode extends MarkdownNode {
|
|
|
46
51
|
this.addDOMElement(domElement);
|
|
47
52
|
}
|
|
48
53
|
|
|
49
|
-
clone() { return super.clone(this.identifier); }
|
|
54
|
+
clone() { return super.clone(this.prepend, this.identifier); }
|
|
50
55
|
|
|
51
|
-
static
|
|
56
|
+
static fromPrependAndIdentifier(prepend, identifier) {
|
|
52
57
|
const epsilonNode = EpsilonNode.fromNothing(),
|
|
53
58
|
ruleName = ANCHOR_RULE_NAME,
|
|
54
59
|
childNodes = [
|
|
55
60
|
epsilonNode
|
|
56
61
|
],
|
|
57
62
|
opacity = null,
|
|
58
|
-
anchorMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(AnchorMarkdownNode, ruleName, childNodes, opacity, identifier);
|
|
63
|
+
anchorMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(AnchorMarkdownNode, ruleName, childNodes, opacity, prepend, identifier);
|
|
59
64
|
|
|
60
65
|
return anchorMarkdownNode;
|
|
61
66
|
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import MarkdownNode from "../../node/markdown";
|
|
4
|
+
|
|
5
|
+
import { COMMA } from "../../constants";
|
|
6
|
+
|
|
7
|
+
export default class CommaMarkdownNode extends MarkdownNode {
|
|
8
|
+
asHTML(indent, context) {
|
|
9
|
+
const content = this.content(context),
|
|
10
|
+
html = content; ///
|
|
11
|
+
|
|
12
|
+
return html;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
createDOMElement(context) {
|
|
16
|
+
const content = this.content(context),
|
|
17
|
+
textNode = document.createTextNode(content),
|
|
18
|
+
domElement = textNode; ///
|
|
19
|
+
|
|
20
|
+
this.setDOMElement(domElement);
|
|
21
|
+
|
|
22
|
+
return domElement;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
content(context) {
|
|
26
|
+
const content = COMMA; ///
|
|
27
|
+
|
|
28
|
+
return content;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(CommaMarkdownNode, ruleName, childNodes, opacity); }
|
|
32
|
+
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import MarkdownNode from "../../node/markdown";
|
|
4
4
|
|
|
5
|
+
import { CONTENTS_PREPEND } from "../../prepends";
|
|
5
6
|
import { HREF_ATTRIBUTE_NAME } from "../../attributeNames";
|
|
6
7
|
import { CONTENTS_LINK_RULE_NAME } from "../../ruleNames";
|
|
7
8
|
|
|
@@ -23,7 +24,8 @@ export default class ContentsLinkMarkdownNode extends MarkdownNode {
|
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
attributeValue(context) {
|
|
26
|
-
const
|
|
27
|
+
const prepend = CONTENTS_PREPEND,
|
|
28
|
+
attributeValue = `#${prepend}-${this.identifier}`;
|
|
27
29
|
|
|
28
30
|
return attributeValue;
|
|
29
31
|
}
|
|
@@ -5,6 +5,12 @@ import MarkdownNode from "../../node/markdown";
|
|
|
5
5
|
import { CONTENTS_LIST_RULE_NAME } from "../../ruleNames";
|
|
6
6
|
|
|
7
7
|
export default class ContentsListMarkdownNode extends MarkdownNode {
|
|
8
|
+
asPlainText(context) {
|
|
9
|
+
const plainText = null;
|
|
10
|
+
|
|
11
|
+
return plainText;
|
|
12
|
+
}
|
|
13
|
+
|
|
8
14
|
static fromContentsItemReplacements(contentsItemReplacements) {
|
|
9
15
|
const ruleName = CONTENTS_LIST_RULE_NAME,
|
|
10
16
|
childNodes = contentsItemReplacements.map((contentsItemReplacement) => {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import DirectiveMarkdownNode from "../../../node/markdown/directive";
|
|
4
|
+
|
|
5
|
+
export default class IndexDirectiveMarkdownNode extends DirectiveMarkdownNode {
|
|
6
|
+
static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return DirectiveMarkdownNode.fromRuleNameChildNodesAndOpacity(IndexDirectiveMarkdownNode, ruleName, childNodes, opacity); }
|
|
7
|
+
}
|
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
import MarkdownNode from "../../node/markdown";
|
|
4
4
|
|
|
5
5
|
export default class DirectiveMarkdownNode extends MarkdownNode {
|
|
6
|
+
asPlainText(context) {
|
|
7
|
+
const plainText = null;
|
|
8
|
+
|
|
9
|
+
return plainText;
|
|
10
|
+
}
|
|
11
|
+
|
|
6
12
|
static lines = 0;
|
|
7
13
|
|
|
8
14
|
static fromRuleNameChildNodesAndOpacity(Class, ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(Class, ruleName, childNodes, opacity); }
|
|
@@ -4,16 +4,19 @@ import { arrayUtilities } from "necessary";
|
|
|
4
4
|
|
|
5
5
|
import MarkdownNode from "../../node/markdown";
|
|
6
6
|
import FootnoteReplacement from "../../replacement/footnote";
|
|
7
|
+
import IndexListReplacement from "../../replacement/indexList";
|
|
7
8
|
import ContentsListReplacement from "../../replacement/contentsList";
|
|
8
9
|
import FootnotesListReplacement from "../../replacement/footnotesList";
|
|
9
10
|
import FootnoteSubDivisionReplacement from "../../replacement/subDivision/footnote";
|
|
11
|
+
import IndexAnchorSubDivisionReplacement from "../../replacement/subDivision/indexAnchor";
|
|
12
|
+
import IndexDirectiveSubDivisionReplacement from "../../replacement/subDivision/indexDirective";
|
|
10
13
|
import ContentsDirectiveSubDivisionReplacement from "../../replacement/subDivision/contentsDirective";
|
|
11
14
|
import FootnotesDirectiveSubDivisionReplacement from "../../replacement/subDivision/footnotesDirective";
|
|
12
15
|
import PageNumberDirectiveSubDivisionReplacement from "../../replacement/subDivision/pageNumberDirective";
|
|
13
16
|
|
|
14
17
|
import { EMPTY_STRING } from "../../constants";
|
|
15
18
|
import { DIVISION_RULE_NAME } from "../../ruleNames";
|
|
16
|
-
import {
|
|
19
|
+
import { renumberFootnoteLinkMarkdownNodes } from "../../utilities/footnotes";
|
|
17
20
|
import { subDivisionMarkdownNodesFromNode, ignoreDirectiveMarkdownNodeFromNode, pageNumberDirectiveMarkdownNodeFromNode } from "../../utilities/query";
|
|
18
21
|
|
|
19
22
|
const { clear, filter } = arrayUtilities;
|
|
@@ -95,6 +98,25 @@ export default class DivisionMarkdownNode extends MarkdownNode {
|
|
|
95
98
|
}
|
|
96
99
|
}
|
|
97
100
|
|
|
101
|
+
getPageNumber() {
|
|
102
|
+
let pageNumber = null;
|
|
103
|
+
|
|
104
|
+
const subDivisionMarkdownNodes = this.findSubDivisionMarkdownNodes();
|
|
105
|
+
|
|
106
|
+
subDivisionMarkdownNodes.some((subDivisionMarkdownNode) => {
|
|
107
|
+
const node = subDivisionMarkdownNode, ///
|
|
108
|
+
pageNumberDirective = pageNumberDirectiveMarkdownNodeFromNode(node);
|
|
109
|
+
|
|
110
|
+
if (pageNumberDirective !== null) {
|
|
111
|
+
pageNumber = pageNumberDirective.getPageNumber();
|
|
112
|
+
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
return pageNumber;
|
|
118
|
+
}
|
|
119
|
+
|
|
98
120
|
setPageNumber(pageNumber) {
|
|
99
121
|
const subDivisionMarkdownNodes = this.findSubDivisionMarkdownNodes();
|
|
100
122
|
|
|
@@ -110,6 +132,25 @@ export default class DivisionMarkdownNode extends MarkdownNode {
|
|
|
110
132
|
});
|
|
111
133
|
}
|
|
112
134
|
|
|
135
|
+
createIndex(divisionMarkdownNodes, context) {
|
|
136
|
+
let indexCreated = false;
|
|
137
|
+
|
|
138
|
+
const indexDirectiveSubDivisionReplacement = this.findSubDivisionReplacement(IndexDirectiveSubDivisionReplacement, context);
|
|
139
|
+
|
|
140
|
+
if (indexDirectiveSubDivisionReplacement !== null) {
|
|
141
|
+
const divisionMarkdownNode = this, ///
|
|
142
|
+
indexListReplacement = IndexListReplacement.fromDivisionMarkdownNodesAndDivisionMarkdownNode(divisionMarkdownNodes, divisionMarkdownNode, context);
|
|
143
|
+
|
|
144
|
+
if (indexListReplacement !== null) {
|
|
145
|
+
indexListReplacement.replaceIndexDirectiveSubdivisionReplacement(indexDirectiveSubDivisionReplacement, divisionMarkdownNode, context);
|
|
146
|
+
|
|
147
|
+
indexCreated = true;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return indexCreated;
|
|
152
|
+
}
|
|
153
|
+
|
|
113
154
|
createContents(divisionMarkdownNodes, context) {
|
|
114
155
|
let contentsCreated = false;
|
|
115
156
|
|
|
@@ -123,6 +164,16 @@ export default class DivisionMarkdownNode extends MarkdownNode {
|
|
|
123
164
|
contentsListReplacement.replaceContentsDirectiveSubdivisionReplacement(contentsDirectiveSubDivisionReplacement, divisionMarkdownNode, context);
|
|
124
165
|
|
|
125
166
|
contentsCreated = true;
|
|
167
|
+
|
|
168
|
+
divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
|
|
169
|
+
const pageNumber = divisionMarkdownNode.getPageNumber();
|
|
170
|
+
|
|
171
|
+
if (pageNumber !== null) {
|
|
172
|
+
const indexAnchorSubDivisionReplacement = IndexAnchorSubDivisionReplacement.fromPageNumber(pageNumber, context);
|
|
173
|
+
|
|
174
|
+
indexAnchorSubDivisionReplacement.prependToDivisionMarkdownNode(divisionMarkdownNode, context);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
126
177
|
}
|
|
127
178
|
}
|
|
128
179
|
|
|
@@ -130,20 +181,20 @@ export default class DivisionMarkdownNode extends MarkdownNode {
|
|
|
130
181
|
}
|
|
131
182
|
|
|
132
183
|
createFootnotes(footnoteReplacementMap, context) {
|
|
133
|
-
const footnotesDirectiveSubDivisionReplacement = this.
|
|
184
|
+
const footnotesDirectiveSubDivisionReplacement = this.findSubDivisionReplacement(FootnotesDirectiveSubDivisionReplacement, context);
|
|
134
185
|
|
|
135
186
|
if (footnotesDirectiveSubDivisionReplacement !== null) {
|
|
136
187
|
const divisionMarkdownNode = this, ///
|
|
137
|
-
|
|
188
|
+
footnotesListSubDivisionReplacement = FootnotesListReplacement.fromDivisionMarkdownNodeAndFootnoteReplacementMap(divisionMarkdownNode, footnoteReplacementMap, context);
|
|
138
189
|
|
|
139
|
-
if (
|
|
140
|
-
|
|
190
|
+
if (footnotesListSubDivisionReplacement !== null) {
|
|
191
|
+
footnotesListSubDivisionReplacement.replaceFootnotesDirectiveSubDivisionReplacement(footnotesDirectiveSubDivisionReplacement, divisionMarkdownNode, context);
|
|
141
192
|
}
|
|
142
193
|
|
|
143
|
-
|
|
194
|
+
renumberFootnoteLinkMarkdownNodes(divisionMarkdownNode, footnoteReplacementMap, callback, context);
|
|
144
195
|
}
|
|
145
196
|
|
|
146
|
-
function callback(
|
|
197
|
+
function callback(footnoteLinkMarkdownNode) {
|
|
147
198
|
///
|
|
148
199
|
}
|
|
149
200
|
}
|
|
@@ -248,9 +299,9 @@ export default class DivisionMarkdownNode extends MarkdownNode {
|
|
|
248
299
|
});
|
|
249
300
|
|
|
250
301
|
const divisionMarkdownNode = this, ///
|
|
251
|
-
|
|
302
|
+
footnotesListSubDivisionReplacement = FootnotesListReplacement.fromDivisionMarkdownNodeAndFootnoteReplacementMap(divisionMarkdownNode, footnoteReplacementMap, context);
|
|
252
303
|
|
|
253
|
-
return
|
|
304
|
+
return footnotesListSubDivisionReplacement;
|
|
254
305
|
}
|
|
255
306
|
|
|
256
307
|
asHTML(context) {
|
|
@@ -5,11 +5,12 @@ import { arrayUtilities } from "necessary";
|
|
|
5
5
|
import MarkdownNode from "../../node/markdown";
|
|
6
6
|
|
|
7
7
|
import { EMPTY_STRING } from "../../constants";
|
|
8
|
+
import { FOOTNOTE_PREPEND } from "../../prepends";
|
|
8
9
|
import { HREF_ATTRIBUTE_NAME } from "../../attributeNames";
|
|
9
10
|
|
|
10
11
|
const { first, second } = arrayUtilities;
|
|
11
12
|
|
|
12
|
-
export default class
|
|
13
|
+
export default class FootnoteLinkMarkdownNode extends MarkdownNode {
|
|
13
14
|
constructor(ruleName, childNodes, opacity, precedence, domElement, number) {
|
|
14
15
|
super(ruleName, childNodes, opacity, precedence, domElement);
|
|
15
16
|
|
|
@@ -48,8 +49,9 @@ export default class LinkMarkdownNode extends MarkdownNode {
|
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
attributeValue(context) {
|
|
51
|
-
const
|
|
52
|
-
|
|
52
|
+
const prepend = FOOTNOTE_PREPEND,
|
|
53
|
+
identifier = this.identifier(context),
|
|
54
|
+
attributeValue = `#${prepend}-${identifier}`; ///
|
|
53
55
|
|
|
54
56
|
return attributeValue;
|
|
55
57
|
}
|
|
@@ -73,9 +75,9 @@ export default class LinkMarkdownNode extends MarkdownNode {
|
|
|
73
75
|
|
|
74
76
|
static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) {
|
|
75
77
|
const number = null,
|
|
76
|
-
|
|
78
|
+
footnoteLinkMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(FootnoteLinkMarkdownNode, ruleName, childNodes, opacity, number);
|
|
77
79
|
|
|
78
|
-
return
|
|
80
|
+
return footnoteLinkMarkdownNode;
|
|
79
81
|
}
|
|
80
82
|
}
|
|
81
83
|
|
|
@@ -5,22 +5,15 @@ import { arrayUtilities } from "necessary";
|
|
|
5
5
|
import MarkdownNode from "../../node/markdown";
|
|
6
6
|
import AnchorMarkdownNode from "../../node/markdown/anchor";
|
|
7
7
|
|
|
8
|
+
import { FOOTNOTE_PREPEND } from "../../prepends";
|
|
8
9
|
import { FOOTNOTES_ITEM_RULE_NAME } from "../../ruleNames";
|
|
9
10
|
|
|
10
|
-
const {
|
|
11
|
+
const { second } = arrayUtilities;
|
|
11
12
|
|
|
12
13
|
export default class FootnotesItemMarkdownNode extends MarkdownNode {
|
|
13
|
-
identifier(context) {
|
|
14
|
-
const childNodes = this.getChildNodes(),
|
|
15
|
-
firstChildNode = first(childNodes),
|
|
16
|
-
anchorMarkdownNode = firstChildNode, ///
|
|
17
|
-
identifier = anchorMarkdownNode.getIdentifier();
|
|
18
|
-
|
|
19
|
-
return identifier;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
14
|
static fromFootnotesMarkdownNodeAndIdentifier(footnoteMarkdownNode, identifier) {
|
|
23
|
-
const
|
|
15
|
+
const prepend = FOOTNOTE_PREPEND,
|
|
16
|
+
anchorMarkdownNode = AnchorMarkdownNode.fromPrependAndIdentifier(prepend, identifier),
|
|
24
17
|
footnoteMarkdownNodeChildNodes = footnoteMarkdownNode.getChildNodes(),
|
|
25
18
|
secondFootnoteMarkdownNodeChildNode = second(footnoteMarkdownNodeChildNodes),
|
|
26
19
|
paragraphMarkdownNode = secondFootnoteMarkdownNodeChildNode, ///
|
|
@@ -5,6 +5,7 @@ import { arrayUtilities } from "necessary";
|
|
|
5
5
|
import MarkdownNode from "../../node/markdown";
|
|
6
6
|
import AnchorMarkdownNode from "../../node/markdown/anchor";
|
|
7
7
|
|
|
8
|
+
import { CONTENTS_PREPEND } from "../../prepends";
|
|
8
9
|
import { plainTextFromChildNodes } from "../../utilities/childNodes";
|
|
9
10
|
import { replaceSpacesWithHyphens, removedLeadingWhitespace, removeNonAlphabeticAndSpaceCharacters } from "../../utilities/string";
|
|
10
11
|
|
|
@@ -18,8 +19,9 @@ export default class HeadingMarkdownNode extends MarkdownNode {
|
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
addAnchor(context) {
|
|
21
|
-
const
|
|
22
|
-
|
|
22
|
+
const prepend = CONTENTS_PREPEND,
|
|
23
|
+
identifier = this.identifier(context),
|
|
24
|
+
anchorMarkdownNode = AnchorMarkdownNode.fromPrependAndIdentifier(prepend, identifier),
|
|
23
25
|
prependedChildNode = anchorMarkdownNode; ///
|
|
24
26
|
|
|
25
27
|
this.prependChildNode(prependedChildNode);
|
|
@@ -41,6 +43,13 @@ export default class HeadingMarkdownNode extends MarkdownNode {
|
|
|
41
43
|
return lineMarkdownNode;
|
|
42
44
|
}
|
|
43
45
|
|
|
46
|
+
asPlainText(context) {
|
|
47
|
+
const childNodes = this.getChildNodes(),
|
|
48
|
+
plainText = plainTextFromChildNodes(childNodes, context);
|
|
49
|
+
|
|
50
|
+
return plainText;
|
|
51
|
+
}
|
|
52
|
+
|
|
44
53
|
static fromRuleNameChildNodesAndOpacity(Class, ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(Class, ruleName, childNodes, opacity); }
|
|
45
54
|
}
|
|
46
55
|
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import MarkdownNode from "../../node/markdown";
|
|
4
|
+
|
|
5
|
+
export default class IndexItemMarkdownNode extends MarkdownNode {
|
|
6
|
+
static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(IndexItemMarkdownNode, ruleName, childNodes, opacity); }
|
|
7
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { arrayUtilities } from "necessary";
|
|
4
|
+
|
|
5
|
+
import MarkdownNode from "../../node/markdown";
|
|
6
|
+
|
|
7
|
+
import { INDEX_PREPEND } from "../../prepends";
|
|
8
|
+
import { HREF_ATTRIBUTE_NAME } from "../../attributeNames";
|
|
9
|
+
|
|
10
|
+
const { first } = arrayUtilities;
|
|
11
|
+
|
|
12
|
+
export default class IndexLinkMarkdownNode extends MarkdownNode {
|
|
13
|
+
attributeName(context) {
|
|
14
|
+
const attributeName = HREF_ATTRIBUTE_NAME;
|
|
15
|
+
|
|
16
|
+
return attributeName;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
attributeValue(context) {
|
|
20
|
+
const content = this.content(context),
|
|
21
|
+
attributeValue = `${INDEX_PREPEND}-${content}`;
|
|
22
|
+
|
|
23
|
+
return attributeValue;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
asHTML(indent, context) {
|
|
27
|
+
indent = this.adjustIndent(indent);
|
|
28
|
+
|
|
29
|
+
const childNodesHTML = this.childNodesAsHTML(indent, context),
|
|
30
|
+
startingTag = this.startingTag(context),
|
|
31
|
+
closingTag = this.closingTag(context),
|
|
32
|
+
html = `${indent}${startingTag}${childNodesHTML}${closingTag}
|
|
33
|
+
`;
|
|
34
|
+
|
|
35
|
+
return html;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
childNodesAsHTML(indent, context) {
|
|
39
|
+
const content = this.content(context),
|
|
40
|
+
childNodesHTML = content; ///
|
|
41
|
+
|
|
42
|
+
return childNodesHTML;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
createChildNodeDOMElements(context) {
|
|
46
|
+
const content = this.content(context),
|
|
47
|
+
textNode = document.createTextNode(content),
|
|
48
|
+
domElement = textNode; ///
|
|
49
|
+
|
|
50
|
+
this.addDOMElement(domElement);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
content(context) {
|
|
54
|
+
const childNodes = this.getChildNodes(),
|
|
55
|
+
firstChildNode = first(childNodes),
|
|
56
|
+
terminalNode = firstChildNode, ///
|
|
57
|
+
content = terminalNode.getContent();
|
|
58
|
+
|
|
59
|
+
return content;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(IndexLinkMarkdownNode, ruleName, childNodes, opacity); }
|
|
63
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import MarkdownNode from "../../node/markdown";
|
|
4
|
+
|
|
5
|
+
import { INDEX_LIST_RULE_NAME } from "../../ruleNames";
|
|
6
|
+
|
|
7
|
+
export default class IndexListMarkdownNode extends MarkdownNode {
|
|
8
|
+
asPlainText(context) {
|
|
9
|
+
const plainText = null;
|
|
10
|
+
|
|
11
|
+
return plainText;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
static fromIndexItemReplacements(indexItemReplacements) {
|
|
15
|
+
let indexListMarkdownNode = null;
|
|
16
|
+
|
|
17
|
+
const indexItemReplacementsLength = indexItemReplacements.length;
|
|
18
|
+
|
|
19
|
+
if (indexItemReplacementsLength > 0) {
|
|
20
|
+
const ruleName = INDEX_LIST_RULE_NAME,
|
|
21
|
+
childNodes = indexItemReplacements.map((indexItemReplacement) => {
|
|
22
|
+
const indexItemReplacementNode = indexItemReplacement.getIndexItemMarkdownNode(),
|
|
23
|
+
childNode = indexItemReplacementNode; ///
|
|
24
|
+
|
|
25
|
+
return childNode;
|
|
26
|
+
}),
|
|
27
|
+
opacity = null;
|
|
28
|
+
|
|
29
|
+
indexListMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(IndexListMarkdownNode, ruleName, childNodes, opacity);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return indexListMarkdownNode;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -7,8 +7,7 @@ import { htmlFromChildNodes, plainTextFromChildNodes, domElementsFromChildNodes
|
|
|
7
7
|
export default class LineMarkdownNode extends MarkdownNode {
|
|
8
8
|
lines(context) {
|
|
9
9
|
const { charactersPerLine } = context,
|
|
10
|
-
|
|
11
|
-
plainText = plainTextFromChildNodes(childNodes, context),
|
|
10
|
+
plainText = this.asPlainText(context),
|
|
12
11
|
plainTextLength = plainText.length,
|
|
13
12
|
characters = plainTextLength, ///
|
|
14
13
|
lines = (characters / charactersPerLine) + 1;
|
|
@@ -28,6 +27,13 @@ export default class LineMarkdownNode extends MarkdownNode {
|
|
|
28
27
|
return html;
|
|
29
28
|
}
|
|
30
29
|
|
|
30
|
+
asPlainText(context) {
|
|
31
|
+
const childNodesPlainText = this.childNodesAsPlainText(context),
|
|
32
|
+
plainText = childNodesPlainText; ///
|
|
33
|
+
|
|
34
|
+
return plainText;
|
|
35
|
+
}
|
|
36
|
+
|
|
31
37
|
createDOMElement(context) {
|
|
32
38
|
const tagName = this.tagName(context),
|
|
33
39
|
className = this.className(context),
|
|
@@ -51,6 +57,13 @@ export default class LineMarkdownNode extends MarkdownNode {
|
|
|
51
57
|
return html;
|
|
52
58
|
}
|
|
53
59
|
|
|
60
|
+
childNodesAsPlainText(context) {
|
|
61
|
+
const childNodes = this.getChildNodes(),
|
|
62
|
+
plainText = plainTextFromChildNodes(childNodes, context);
|
|
63
|
+
|
|
64
|
+
return plainText;
|
|
65
|
+
}
|
|
66
|
+
|
|
54
67
|
createChildNodeDOMElements(context) {
|
|
55
68
|
const domElement = this.getDOMElement(),
|
|
56
69
|
childNodes = this.getChildNodes(),
|
|
@@ -3,9 +3,12 @@
|
|
|
3
3
|
import { arrayUtilities } from "necessary";
|
|
4
4
|
|
|
5
5
|
import MarkdownNode from "../../node/markdown";
|
|
6
|
+
import VerticalSpaceMarkdownNode from "../../node/markdown/verticalSpace";
|
|
6
7
|
import EmbedDirectivesSubDivisionReplacement from "../../replacement/subDivision/embedDirectives";
|
|
7
8
|
import IncludeDirectivesSubDivisionReplacement from "../../replacement/subDivision/includeDirectives";
|
|
8
9
|
|
|
10
|
+
import { SUB_DIVISION_RULE_NAME } from "../../ruleNames";
|
|
11
|
+
|
|
9
12
|
const { second } = arrayUtilities;
|
|
10
13
|
|
|
11
14
|
export default class SubDivisionMarkdownNode extends MarkdownNode {
|
|
@@ -52,9 +55,16 @@ export default class SubDivisionMarkdownNode extends MarkdownNode {
|
|
|
52
55
|
return html;
|
|
53
56
|
}
|
|
54
57
|
|
|
58
|
+
asPlainText(context) {
|
|
59
|
+
const secondMarkdownNode = this.getSecondMarkdownNode(),
|
|
60
|
+
plainText = secondMarkdownNode.asPlainText(context);
|
|
61
|
+
|
|
62
|
+
return plainText;
|
|
63
|
+
}
|
|
64
|
+
|
|
55
65
|
createDOMElement(context) {
|
|
56
|
-
const
|
|
57
|
-
|
|
66
|
+
const secondMarkdownNode = this.getSecondMarkdownNode(),
|
|
67
|
+
domElement = null;
|
|
58
68
|
|
|
59
69
|
secondMarkdownNode.createDOMElement(context);
|
|
60
70
|
|
|
@@ -69,5 +79,18 @@ export default class SubDivisionMarkdownNode extends MarkdownNode {
|
|
|
69
79
|
return secondMarkdownNode;
|
|
70
80
|
}
|
|
71
81
|
|
|
82
|
+
static fromAnchorMarkdownNode(anchorMarkdownNode) {
|
|
83
|
+
const ruleName = SUB_DIVISION_RULE_NAME,
|
|
84
|
+
verticalSpaceMarkdownNode = VerticalSpaceMarkdownNode.fromNothing(),
|
|
85
|
+
childNodes = [
|
|
86
|
+
verticalSpaceMarkdownNode,
|
|
87
|
+
anchorMarkdownNode
|
|
88
|
+
],
|
|
89
|
+
opacity = null,
|
|
90
|
+
subDivisionMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(SubDivisionMarkdownNode, ruleName, childNodes, opacity);
|
|
91
|
+
|
|
92
|
+
return subDivisionMarkdownNode;
|
|
93
|
+
}
|
|
94
|
+
|
|
72
95
|
static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(SubDivisionMarkdownNode, ruleName, childNodes, opacity); }
|
|
73
96
|
}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { StartOfContentNode } from "occam-parsers";
|
|
4
|
+
|
|
3
5
|
import MarkdownNode from "../../node/markdown";
|
|
4
6
|
|
|
5
7
|
import { CARRIAGE_RETURN } from "../../constants";
|
|
8
|
+
import { VERTICAL_SPACE_RULE_NAME } from "../../ruleNames";
|
|
6
9
|
|
|
7
10
|
export default class VerticalSpaceMarkdownNode extends MarkdownNode {
|
|
8
11
|
asHTML(indent, context) {
|
|
@@ -21,5 +24,17 @@ export default class VerticalSpaceMarkdownNode extends MarkdownNode {
|
|
|
21
24
|
return domElement;
|
|
22
25
|
}
|
|
23
26
|
|
|
27
|
+
static fromNothing() {
|
|
28
|
+
const startOfContentNode = StartOfContentNode.fromNothing(),
|
|
29
|
+
ruleName = VERTICAL_SPACE_RULE_NAME,
|
|
30
|
+
childNodes = [
|
|
31
|
+
startOfContentNode
|
|
32
|
+
],
|
|
33
|
+
opacity = null,
|
|
34
|
+
verticalSpaceMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(VerticalSpaceMarkdownNode, ruleName, childNodes, opacity);
|
|
35
|
+
|
|
36
|
+
return verticalSpaceMarkdownNode;
|
|
37
|
+
}
|
|
38
|
+
|
|
24
39
|
static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(VerticalSpaceMarkdownNode, ruleName, childNodes, opacity); }
|
|
25
40
|
}
|