highmark-markdown 0.0.229 → 0.0.232
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 +672 -393
- package/lib/elementMap.js +8 -5
- package/lib/example/view.js +5 -4
- package/lib/markdown/bnf.js +2 -2
- package/lib/mixins/node.js +42 -8
- package/lib/node/markdown/contentsLink.js +3 -3
- package/lib/node/markdown/{imports.js → directives.js} +17 -10
- package/lib/node/markdown/division.js +25 -13
- package/lib/node/markdown/emailLink.js +9 -2
- package/lib/node/markdown/embee.js +151 -0
- package/lib/node/markdown/heading.js +5 -5
- package/lib/node/markdown/{import.js → include.js} +16 -16
- package/lib/node/markdown.js +17 -4
- package/lib/nodeMap.js +5 -4
- package/lib/replacementNodeAndTokens.js +149 -0
- package/lib/ruleNames.js +15 -10
- package/lib/utilities/query.js +11 -2
- package/lib/utilities/replace.js +12 -3
- package/package.json +1 -1
- package/src/elementMap.js +12 -7
- package/src/example/view.js +11 -7
- package/src/markdown/bnf.js +7 -10
- package/src/mixins/node.js +17 -10
- package/src/node/markdown/contentsLink.js +4 -4
- package/src/node/markdown/{imports.js → directives.js} +8 -2
- package/src/node/markdown/division.js +38 -17
- package/src/node/markdown/emailLink.js +11 -5
- package/src/node/markdown/embee.js +50 -0
- package/src/node/markdown/heading.js +4 -4
- package/src/node/markdown/{import.js → include.js} +8 -8
- package/src/node/markdown.js +17 -2
- package/src/nodeMap.js +9 -6
- package/src/{clonedNode.js → replacementNodeAndTokens.js} +9 -3
- package/src/ruleNames.js +6 -4
- package/src/utilities/query.js +8 -0
- package/src/utilities/replace.js +12 -2
- package/lib/clonedNode.js +0 -142
package/src/elementMap.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { LINK_RULE_NAME,
|
|
4
4
|
LINE_RULE_NAME,
|
|
5
|
+
EMBED_RULE_NAME,
|
|
5
6
|
IMAGE_RULE_NAME,
|
|
6
7
|
TABLE_RULE_NAME,
|
|
7
8
|
ERROR_RULE_NAME,
|
|
@@ -9,8 +10,7 @@ import { LINK_RULE_NAME,
|
|
|
9
10
|
MARKER_RULE_NAME,
|
|
10
11
|
BULLET_RULE_NAME,
|
|
11
12
|
IGNORE_RULE_NAME,
|
|
12
|
-
|
|
13
|
-
IMPORTS_RULE_NAME,
|
|
13
|
+
INCLUDE_RULE_NAME,
|
|
14
14
|
CONTENTS_RULE_NAME,
|
|
15
15
|
DIVISION_RULE_NAME,
|
|
16
16
|
FOOTNOTE_RULE_NAME,
|
|
@@ -26,6 +26,7 @@ import { LINK_RULE_NAME,
|
|
|
26
26
|
CLASS_NAME_RULE_NAME,
|
|
27
27
|
PLAIN_TEXT_RULE_NAME,
|
|
28
28
|
EMAIL_LINK_RULE_NAME,
|
|
29
|
+
DIRECTIVES_RULE_NAME,
|
|
29
30
|
END_OF_LINE_RULE_NAME,
|
|
30
31
|
MARKED_TEXT_RULE_NAME,
|
|
31
32
|
INLINE_TEXT_RULE_NAME,
|
|
@@ -65,6 +66,10 @@ const elementMap = {
|
|
|
65
66
|
tagName: "span",
|
|
66
67
|
className: "line"
|
|
67
68
|
},
|
|
69
|
+
[EMBED_RULE_NAME]: {
|
|
70
|
+
tagName: null,
|
|
71
|
+
className: null
|
|
72
|
+
},
|
|
68
73
|
[IMAGE_RULE_NAME]: {
|
|
69
74
|
tagName: "img",
|
|
70
75
|
className: null
|
|
@@ -93,11 +98,7 @@ const elementMap = {
|
|
|
93
98
|
tagName: null,
|
|
94
99
|
className: null
|
|
95
100
|
},
|
|
96
|
-
[
|
|
97
|
-
tagName: null,
|
|
98
|
-
className: null
|
|
99
|
-
},
|
|
100
|
-
[IMPORTS_RULE_NAME]: {
|
|
101
|
+
[INCLUDE_RULE_NAME]: {
|
|
101
102
|
tagName: null,
|
|
102
103
|
className: null
|
|
103
104
|
},
|
|
@@ -161,6 +162,10 @@ const elementMap = {
|
|
|
161
162
|
tagName: "a",
|
|
162
163
|
className: "email-link"
|
|
163
164
|
},
|
|
165
|
+
[DIRECTIVES_RULE_NAME]: {
|
|
166
|
+
tagName: null,
|
|
167
|
+
className: null
|
|
168
|
+
},
|
|
164
169
|
[END_OF_LINE_RULE_NAME]: {
|
|
165
170
|
tagName: null,
|
|
166
171
|
className: null
|
package/src/example/view.js
CHANGED
|
@@ -49,9 +49,11 @@ class View extends Element {
|
|
|
49
49
|
divisionMarkdownNodes
|
|
50
50
|
};
|
|
51
51
|
|
|
52
|
-
divisionMarkdownNode.
|
|
52
|
+
divisionMarkdownNode.resolveIncludes(context);
|
|
53
53
|
|
|
54
54
|
divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
|
|
55
|
+
divisionMarkdownNode.resolveEmbeddings(context);
|
|
56
|
+
|
|
55
57
|
divisionMarkdownNode.createFootnotes(context);
|
|
56
58
|
});
|
|
57
59
|
|
|
@@ -143,13 +145,11 @@ class View extends Element {
|
|
|
143
145
|
static initialMarkdownStyle = `min-height: initial;
|
|
144
146
|
`;
|
|
145
147
|
|
|
146
|
-
static initialMarkdown =
|
|
148
|
+
static initialMarkdown = `@contents 2
|
|
147
149
|
|
|
148
|
-
|
|
150
|
+
# Primary heading[^heading]
|
|
149
151
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
@import example.md
|
|
152
|
+
@embed introduction.md
|
|
153
153
|
`;
|
|
154
154
|
|
|
155
155
|
static tagName = "div";
|
|
@@ -170,7 +170,11 @@ export default withStyle(View)`
|
|
|
170
170
|
`;
|
|
171
171
|
|
|
172
172
|
function importer(filePath, context) {
|
|
173
|
-
const content =
|
|
173
|
+
const content = `## Secondary heading
|
|
174
|
+
|
|
175
|
+
[^heading]: A heading.
|
|
176
|
+
|
|
177
|
+
@footnotes
|
|
174
178
|
`,
|
|
175
179
|
tokens = markdownLexer.tokenise(content),
|
|
176
180
|
node = markdownParser.parse(tokens),
|
package/src/markdown/bnf.js
CHANGED
|
@@ -5,13 +5,7 @@ const bnf = `
|
|
|
5
5
|
division ::= ( subDivision | endOfLine | error )+ ;
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
subDivision.. ::= ( endOfLine | <START_OF_CONTENT> ) (
|
|
9
|
-
|
|
10
|
-
| imports
|
|
11
|
-
|
|
12
|
-
| contents
|
|
13
|
-
|
|
14
|
-
| footnotes
|
|
8
|
+
subDivision.. ::= ( endOfLine | <START_OF_CONTENT> ) ( directives
|
|
15
9
|
|
|
16
10
|
| primaryHeading
|
|
17
11
|
|
|
@@ -81,13 +75,16 @@ const bnf = `
|
|
|
81
75
|
blockListing ::= blockListingStart blockText blockListingEnd ;
|
|
82
76
|
|
|
83
77
|
|
|
84
|
-
|
|
78
|
+
directives ::= ( embed | ignore | include | contents | footnotes )+ ;
|
|
85
79
|
|
|
86
80
|
|
|
87
|
-
|
|
81
|
+
embed ::= "@"<NO_WHITESPACE>"embed" [path] endOfLine ;
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
ignore ::= "@"<NO_WHITESPACE>"ignore" ;
|
|
88
85
|
|
|
89
86
|
|
|
90
|
-
|
|
87
|
+
include ::= "@"<NO_WHITESPACE>"include" [path] endOfLine ;
|
|
91
88
|
|
|
92
89
|
|
|
93
90
|
contents ::= "@"<NO_WHITESPACE>"contents" [number]? endOfLine ;
|
package/src/mixins/node.js
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function addChildNode(childNode) {
|
|
4
|
-
const childNodes = this.getChildNodes();
|
|
5
|
-
|
|
6
|
-
childNodes.push(childNode);
|
|
7
|
-
}
|
|
8
|
-
|
|
9
3
|
function removeChildNode(childNode) {
|
|
10
4
|
const childNodes = this.getChildNodes(),
|
|
11
5
|
index = childNodes.indexOf(childNode),
|
|
@@ -15,13 +9,25 @@ function removeChildNode(childNode) {
|
|
|
15
9
|
childNodes.splice(start, deleteCount);
|
|
16
10
|
}
|
|
17
11
|
|
|
18
|
-
function
|
|
12
|
+
function prependChildNode(childNode) {
|
|
13
|
+
const childNodes = this.getChildNodes();
|
|
14
|
+
|
|
15
|
+
childNodes.unshift(childNode);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function appendChildNode(childNode) {
|
|
19
|
+
const childNodes = this.getChildNodes();
|
|
20
|
+
|
|
21
|
+
childNodes.push(childNode);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function replaceChildNodes(replacedChildNode, replacementChildNodes) {
|
|
19
25
|
const childNodes = this.getChildNodes(),
|
|
20
26
|
index = childNodes.indexOf(replacedChildNode),
|
|
21
27
|
start = index, ///
|
|
22
28
|
deleteCount = 1;
|
|
23
29
|
|
|
24
|
-
childNodes.splice(start, deleteCount,
|
|
30
|
+
childNodes.splice(start, deleteCount, ...replacementChildNodes);
|
|
25
31
|
}
|
|
26
32
|
|
|
27
33
|
function getDescendantNodes(descendantNodes = []) {
|
|
@@ -45,9 +51,10 @@ function getDescendantNodes(descendantNodes = []) {
|
|
|
45
51
|
}
|
|
46
52
|
|
|
47
53
|
const nodeMixins = {
|
|
48
|
-
addChildNode,
|
|
49
54
|
removeChildNode,
|
|
50
|
-
|
|
55
|
+
appendChildNode,
|
|
56
|
+
prependChildNode,
|
|
57
|
+
replaceChildNodes,
|
|
51
58
|
getDescendantNodes
|
|
52
59
|
};
|
|
53
60
|
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import { arrayUtilities } from "necessary";
|
|
4
4
|
|
|
5
|
-
import ClonedNode from "../../clonedNode";
|
|
6
5
|
import MarkdownNode from "../../node/markdown";
|
|
6
|
+
import ReplacementNodeAndTokens from "../../replacementNodeAndTokens";
|
|
7
7
|
|
|
8
8
|
import { HREF_ATTRIBUTE_NAME } from "../../attributeNames";
|
|
9
9
|
import { CONTENTS_LINK_RULE_NAME } from "../../ruleNames";
|
|
@@ -59,11 +59,11 @@ export default class ContentsLinkMarkdownNode extends MarkdownNode {
|
|
|
59
59
|
|
|
60
60
|
if (headingMarkdownNode !== null) {
|
|
61
61
|
const node = headingMarkdownNode, ///
|
|
62
|
-
|
|
63
|
-
childNodes =
|
|
62
|
+
replacementNodeAndTokens = ReplacementNodeAndTokens.fromNode(node, context),
|
|
63
|
+
childNodes = replacementNodeAndTokens.getChildNodes(),
|
|
64
64
|
ruleName = CONTENTS_LINK_RULE_NAME,
|
|
65
65
|
opacity = null,
|
|
66
|
-
tokens =
|
|
66
|
+
tokens = replacementNodeAndTokens.getTokens(),
|
|
67
67
|
identifier = headingMarkdownNode.identifier(context);
|
|
68
68
|
|
|
69
69
|
contentsLinkMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsLinkMarkdownNode, ruleName, childNodes, opacity, tokens, identifier);
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import MarkdownNode from "../../node/markdown";
|
|
4
4
|
|
|
5
|
-
export default class
|
|
5
|
+
export default class DirectivesMarkdownNode extends MarkdownNode {
|
|
6
6
|
asHTML(indent, context) {
|
|
7
7
|
const childNodesHTML = this.childNodesAsHTML(indent, context),
|
|
8
8
|
html = childNodesHTML; ///
|
|
@@ -10,5 +10,11 @@ export default class ImportsMarkdownNode extends MarkdownNode {
|
|
|
10
10
|
return html;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
createDOMElement(context) {
|
|
14
|
+
const domElement = null;
|
|
15
|
+
|
|
16
|
+
return domElement;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(DirectivesMarkdownNode, ruleName, childNodes, opacity); }
|
|
14
20
|
}
|
|
@@ -7,8 +7,12 @@ import ContentsListMarkdownNode from "../../node/markdown/contentsList";
|
|
|
7
7
|
import FootnotesListMarkdownNode from "../../node/markdown/footnotesList";
|
|
8
8
|
|
|
9
9
|
import { renumberLinkMarkdownNodes } from "../../utilities/footnotes";
|
|
10
|
-
import { replaceNode, replaceTokens } from "../../utilities/replace";
|
|
11
|
-
import {
|
|
10
|
+
import { replaceNode, replaceNodes, replaceTokens } from "../../utilities/replace";
|
|
11
|
+
import { embedMarkdownNodesFromNode,
|
|
12
|
+
ignoreMarkdownNodeFromNode,
|
|
13
|
+
headingMarkdownNodesFromNode,
|
|
14
|
+
contentsMarkdownNodeFromNode,
|
|
15
|
+
footnotesMarkdownNodesFromNode } from "../../utilities/query";
|
|
12
16
|
|
|
13
17
|
const { filter } = arrayUtilities;
|
|
14
18
|
|
|
@@ -105,31 +109,48 @@ export default class DivisionMarkdownNode extends MarkdownNode {
|
|
|
105
109
|
|
|
106
110
|
createFootnotes(context) {
|
|
107
111
|
const node = this, ///
|
|
108
|
-
footnotesMarkdownNodes = footnotesMarkdownNodesFromNode(node)
|
|
112
|
+
footnotesMarkdownNodes = footnotesMarkdownNodesFromNode(node),
|
|
113
|
+
footnotesMarkdownNodesLength = footnotesMarkdownNodes.length;
|
|
109
114
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
115
|
+
if (footnotesMarkdownNodesLength > 0) {
|
|
116
|
+
const divisionMarkdownNode = this, ///
|
|
117
|
+
footnotesListMarkdownNode = FootnotesListMarkdownNode.fromDivisionMarkdownNode(divisionMarkdownNode, context);
|
|
118
|
+
|
|
119
|
+
if (footnotesListMarkdownNode !== null) {
|
|
120
|
+
const childNode = footnotesListMarkdownNode; ///
|
|
121
|
+
|
|
122
|
+
divisionMarkdownNode.appendChildNode(childNode);
|
|
123
|
+
|
|
124
|
+
renumberLinkMarkdownNodes(divisionMarkdownNode, footnotesListMarkdownNode, context)
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
113
128
|
|
|
114
|
-
|
|
129
|
+
resolveEmbeddings(context) {
|
|
130
|
+
const node = this, ///
|
|
131
|
+
embedMarkdownNodes = embedMarkdownNodesFromNode(node);
|
|
115
132
|
|
|
116
|
-
|
|
133
|
+
embedMarkdownNodes.map((embedMarkdownNode) => {
|
|
134
|
+
const replacementNodeAndTokens = embedMarkdownNode.replacementNodeAndTokens(context);
|
|
117
135
|
|
|
118
|
-
|
|
136
|
+
if (replacementNodeAndTokens !== null) {
|
|
137
|
+
let tokens;
|
|
119
138
|
|
|
120
|
-
|
|
139
|
+
tokens = replacementNodeAndTokens.getTokens();
|
|
121
140
|
|
|
122
|
-
|
|
141
|
+
const childNodes = replacementNodeAndTokens.getChildNodes(),
|
|
142
|
+
replacementNodes = childNodes, ///
|
|
143
|
+
replacementTokens = tokens; ///
|
|
123
144
|
|
|
124
|
-
|
|
125
|
-
footnotesListMarkdownNode = FootnotesListMarkdownNode.fromDivisionMarkdownNode(divisionMarkdownNode, context);
|
|
145
|
+
({ tokens } = context);
|
|
126
146
|
|
|
127
|
-
|
|
128
|
-
|
|
147
|
+
const childNode = embedMarkdownNode, ///
|
|
148
|
+
parentNode = this.findParentNode(childNode),
|
|
149
|
+
replacedNode = embedMarkdownNode; ///
|
|
129
150
|
|
|
130
|
-
|
|
151
|
+
replaceNodes(replacementNodes, replacedNode, parentNode);
|
|
131
152
|
|
|
132
|
-
|
|
153
|
+
replaceTokens(replacementTokens, replacedNode, tokens);
|
|
133
154
|
}
|
|
134
155
|
});
|
|
135
156
|
}
|
|
@@ -80,11 +80,17 @@ class EmailLinkMarkdownNode extends MarkdownNode {
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
createChildNodeDOMElements(context) {
|
|
83
|
-
const inlineText = this.inlineText(context)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
83
|
+
const inlineText = this.inlineText(context);
|
|
84
|
+
|
|
85
|
+
let content;
|
|
86
|
+
|
|
87
|
+
if (inlineText !== null) {
|
|
88
|
+
content = inlineText; ///
|
|
89
|
+
} else {
|
|
90
|
+
content = this.content(context);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const textNode = document.createTextNode(content),
|
|
88
94
|
domElement = textNode; ///
|
|
89
95
|
|
|
90
96
|
this.addDOMElement(domElement);
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { arrayUtilities } from "necessary";
|
|
4
|
+
|
|
5
|
+
import MarkdownNode from "../../node/markdown";
|
|
6
|
+
import ReplacementNodeAndTokens from "../../replacementNodeAndTokens";
|
|
7
|
+
|
|
8
|
+
const { fourth } = arrayUtilities;
|
|
9
|
+
|
|
10
|
+
export default class EmbedMarkdownNode extends MarkdownNode {
|
|
11
|
+
replacementNodeAndTokens(context) {
|
|
12
|
+
let replacementNodeAndTokens = null;
|
|
13
|
+
|
|
14
|
+
const { importer = null } = context;
|
|
15
|
+
|
|
16
|
+
if (importer !== null) {
|
|
17
|
+
const filePath = this.filePath(context);
|
|
18
|
+
|
|
19
|
+
importer(filePath, context);
|
|
20
|
+
|
|
21
|
+
const { importedNode = null,
|
|
22
|
+
importedTokens = null } = context;
|
|
23
|
+
|
|
24
|
+
if (importedNode !== null) {
|
|
25
|
+
delete context.importedNode;
|
|
26
|
+
delete context.importedTokens;
|
|
27
|
+
delete context.importedClassName;
|
|
28
|
+
|
|
29
|
+
const node = importedNode, ///
|
|
30
|
+
tokens = importedTokens; ///
|
|
31
|
+
|
|
32
|
+
replacementNodeAndTokens = ReplacementNodeAndTokens.fromNodeAndTokens(node, tokens);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return replacementNodeAndTokens;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
filePath(context) {
|
|
40
|
+
const childNodes = this.getChildNodes(),
|
|
41
|
+
fourthChildNode = fourth(childNodes),
|
|
42
|
+
pathTerminalNode = fourthChildNode, ///
|
|
43
|
+
pathTerminalNodeContent = pathTerminalNode.getContent(),
|
|
44
|
+
filePath = pathTerminalNodeContent; ///
|
|
45
|
+
|
|
46
|
+
return filePath;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(EmbedMarkdownNode, ruleName, childNodes, opacity); }
|
|
50
|
+
}
|
|
@@ -18,7 +18,7 @@ export default class HeadingMarkdownNode extends MarkdownNode {
|
|
|
18
18
|
anchorMarkdownNode = AnchorMarkdownNode.fromIdentifier(identifier),
|
|
19
19
|
childNode = anchorMarkdownNode; ///
|
|
20
20
|
|
|
21
|
-
this.
|
|
21
|
+
this.prependChildNode(childNode);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
identifier(context) {
|
|
@@ -45,11 +45,11 @@ export default class HeadingMarkdownNode extends MarkdownNode {
|
|
|
45
45
|
function identifierFromPlainText(plainText) {
|
|
46
46
|
plainText = plainText.toLowerCase(); ///
|
|
47
47
|
|
|
48
|
-
plainText = removedLeadingWhitespace(plainText);
|
|
48
|
+
plainText = removedLeadingWhitespace(plainText); ///
|
|
49
49
|
|
|
50
|
-
plainText = removeNonAlphabeticAndSpaceCharacters(plainText);
|
|
50
|
+
plainText = removeNonAlphabeticAndSpaceCharacters(plainText); ///
|
|
51
51
|
|
|
52
|
-
plainText = replaceSpacesWithHyphens(plainText);
|
|
52
|
+
plainText = replaceSpacesWithHyphens(plainText); ///
|
|
53
53
|
|
|
54
54
|
const identifier = plainText; ///
|
|
55
55
|
|
|
@@ -6,8 +6,8 @@ import MarkdownNode from "../../node/markdown";
|
|
|
6
6
|
|
|
7
7
|
const { push, fourth } = arrayUtilities;
|
|
8
8
|
|
|
9
|
-
export default class
|
|
10
|
-
|
|
9
|
+
export default class IncludeMarkdownNode extends MarkdownNode {
|
|
10
|
+
resolveIncludes(context) {
|
|
11
11
|
let html = null;
|
|
12
12
|
|
|
13
13
|
const { importer = null } = context;
|
|
@@ -21,11 +21,11 @@ export default class ImportMarkdownNode extends MarkdownNode {
|
|
|
21
21
|
importedTokens = null,
|
|
22
22
|
importedClassName = null } = context;
|
|
23
23
|
|
|
24
|
-
delete context.importedNode;
|
|
25
|
-
delete context.importedTokens;
|
|
26
|
-
delete context.importedClassName;
|
|
27
|
-
|
|
28
24
|
if (importedNode !== null) {
|
|
25
|
+
delete context.importedNode;
|
|
26
|
+
delete context.importedTokens;
|
|
27
|
+
delete context.importedClassName;
|
|
28
|
+
|
|
29
29
|
const { tokens, divisionMarkdownNodes } = context,
|
|
30
30
|
divisionMarkdownNode = importedNode, ///
|
|
31
31
|
divisionClassName = importedClassName, ///
|
|
@@ -39,7 +39,7 @@ export default class ImportMarkdownNode extends MarkdownNode {
|
|
|
39
39
|
divisionMarkdownNodes.push(divisionMarkdownNode);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
divisionMarkdownNode.
|
|
42
|
+
divisionMarkdownNode.resolveIncludes(context);
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
|
|
@@ -56,5 +56,5 @@ export default class ImportMarkdownNode extends MarkdownNode {
|
|
|
56
56
|
return filePath;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(
|
|
59
|
+
static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(IncludeMarkdownNode, ruleName, childNodes, opacity); }
|
|
60
60
|
}
|
package/src/node/markdown.js
CHANGED
|
@@ -94,7 +94,7 @@ class MarkdownNode extends NonTerminalNode {
|
|
|
94
94
|
return attributeValue;
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
|
|
97
|
+
resolveIncludes(context) {
|
|
98
98
|
const childNodes = this.getChildNodes();
|
|
99
99
|
|
|
100
100
|
childNodes.forEach((childNode) => {
|
|
@@ -104,7 +104,22 @@ class MarkdownNode extends NonTerminalNode {
|
|
|
104
104
|
const nonTerminalNode = childNode, ///
|
|
105
105
|
markdownNode = nonTerminalNode; ///
|
|
106
106
|
|
|
107
|
-
markdownNode.
|
|
107
|
+
markdownNode.resolveIncludes(context);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
resolveEmbeddings(context) {
|
|
113
|
+
const childNodes = this.getChildNodes();
|
|
114
|
+
|
|
115
|
+
childNodes.forEach((childNode) => {
|
|
116
|
+
const childNodeNonTerminalNode = childNode.isNonTerminalNode();
|
|
117
|
+
|
|
118
|
+
if (childNodeNonTerminalNode) {
|
|
119
|
+
const nonTerminalNode = childNode, ///
|
|
120
|
+
markdownNode = nonTerminalNode; ///
|
|
121
|
+
|
|
122
|
+
markdownNode.resolveEmbeddings(context);
|
|
108
123
|
}
|
|
109
124
|
});
|
|
110
125
|
}
|
package/src/nodeMap.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import LinkMarkdownNode from "./node/markdown/link";
|
|
4
4
|
import LineMarkdownNode from "./node/markdown/line";
|
|
5
|
+
import EmbedMarkdownNode from "./node/markdown/embee";
|
|
5
6
|
import ImageMarkdownNode from "./node/markdown/image";
|
|
6
7
|
import TableMarkdownNode from "./node/markdown/table";
|
|
7
8
|
import ErrorMarkdownNode from "./node/markdown/error";
|
|
@@ -9,8 +10,7 @@ import AnchorMarkdownNode from "./node/markdown/anchor";
|
|
|
9
10
|
import MarkerMarkdownNode from "./node/markdown/marker";
|
|
10
11
|
import BulletMarkdownNode from "./node/markdown/bullet";
|
|
11
12
|
import IgnoreMarkdownNode from "./node/markdown/ignore";
|
|
12
|
-
import
|
|
13
|
-
import ImportsMarkdownNode from "./node/markdown/imports";
|
|
13
|
+
import IncludeMarkdownNode from "./node/markdown/include";
|
|
14
14
|
import ContentsMarkdownNode from "./node/markdown/contents";
|
|
15
15
|
import DivisionMarkdownNode from "./node/markdown/division";
|
|
16
16
|
import FootnoteMarkdownNode from "./node/markdown/footnote";
|
|
@@ -27,6 +27,7 @@ import ClassNameMarkdownNode from "./node/markdown/className";
|
|
|
27
27
|
import PlainTextMarkdownNode from "./node/markdown/plainText";
|
|
28
28
|
import EmailLinkMarkdownNode from "./node/markdown/emailLink";
|
|
29
29
|
import EndOfLineMarkdownNode from "./node/markdown/endOfLine";
|
|
30
|
+
import DirectivesMarkdownNode from "./node/markdown/directives";
|
|
30
31
|
import MarkedTextMarkdownNode from "./node/markdown/markedText";
|
|
31
32
|
import InlineTextMarkdownNode from "./node/markdown/inlineText";
|
|
32
33
|
import StrongTextMarkdownNode from "./node/markdown/strongText";
|
|
@@ -56,6 +57,7 @@ import StronglyEmphasisedTextMarkdownNode from "./node/markdown/stronglyEmphasis
|
|
|
56
57
|
|
|
57
58
|
import { LINK_RULE_NAME,
|
|
58
59
|
LINE_RULE_NAME,
|
|
60
|
+
EMBED_RULE_NAME,
|
|
59
61
|
IMAGE_RULE_NAME,
|
|
60
62
|
TABLE_RULE_NAME,
|
|
61
63
|
ERROR_RULE_NAME,
|
|
@@ -63,8 +65,7 @@ import { LINK_RULE_NAME,
|
|
|
63
65
|
MARKER_RULE_NAME,
|
|
64
66
|
BULLET_RULE_NAME,
|
|
65
67
|
IGNORE_RULE_NAME,
|
|
66
|
-
|
|
67
|
-
IMPORTS_RULE_NAME,
|
|
68
|
+
INCLUDE_RULE_NAME,
|
|
68
69
|
CONTENTS_RULE_NAME,
|
|
69
70
|
DIVISION_RULE_NAME,
|
|
70
71
|
FOOTNOTE_RULE_NAME,
|
|
@@ -80,6 +81,7 @@ import { LINK_RULE_NAME,
|
|
|
80
81
|
CLASS_NAME_RULE_NAME,
|
|
81
82
|
PLAIN_TEXT_RULE_NAME,
|
|
82
83
|
EMAIL_LINK_RULE_NAME,
|
|
84
|
+
DIRECTIVES_RULE_NAME,
|
|
83
85
|
END_OF_LINE_RULE_NAME,
|
|
84
86
|
MARKED_TEXT_RULE_NAME,
|
|
85
87
|
INLINE_TEXT_RULE_NAME,
|
|
@@ -111,6 +113,7 @@ import { LINK_RULE_NAME,
|
|
|
111
113
|
const nodeMap = {
|
|
112
114
|
[LINK_RULE_NAME]: LinkMarkdownNode,
|
|
113
115
|
[LINE_RULE_NAME]: LineMarkdownNode,
|
|
116
|
+
[EMBED_RULE_NAME]: EmbedMarkdownNode,
|
|
114
117
|
[IMAGE_RULE_NAME]: ImageMarkdownNode,
|
|
115
118
|
[TABLE_RULE_NAME]: TableMarkdownNode,
|
|
116
119
|
[ERROR_RULE_NAME]: ErrorMarkdownNode,
|
|
@@ -118,8 +121,7 @@ const nodeMap = {
|
|
|
118
121
|
[MARKER_RULE_NAME]: MarkerMarkdownNode,
|
|
119
122
|
[BULLET_RULE_NAME]: BulletMarkdownNode,
|
|
120
123
|
[IGNORE_RULE_NAME]: IgnoreMarkdownNode,
|
|
121
|
-
[
|
|
122
|
-
[IMPORTS_RULE_NAME]: ImportsMarkdownNode,
|
|
124
|
+
[INCLUDE_RULE_NAME]: IncludeMarkdownNode,
|
|
123
125
|
[CONTENTS_RULE_NAME]: ContentsMarkdownNode,
|
|
124
126
|
[DIVISION_RULE_NAME]: DivisionMarkdownNode,
|
|
125
127
|
[FOOTNOTE_RULE_NAME]: FootnoteMarkdownNode,
|
|
@@ -135,6 +137,7 @@ const nodeMap = {
|
|
|
135
137
|
[CLASS_NAME_RULE_NAME]: ClassNameMarkdownNode,
|
|
136
138
|
[PLAIN_TEXT_RULE_NAME]: PlainTextMarkdownNode,
|
|
137
139
|
[EMAIL_LINK_RULE_NAME]: EmailLinkMarkdownNode,
|
|
140
|
+
[DIRECTIVES_RULE_NAME]: DirectivesMarkdownNode,
|
|
138
141
|
[END_OF_LINE_RULE_NAME]: EndOfLineMarkdownNode,
|
|
139
142
|
[MARKED_TEXT_RULE_NAME]: MarkedTextMarkdownNode,
|
|
140
143
|
[INLINE_TEXT_RULE_NAME]: InlineTextMarkdownNode,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
export default class
|
|
3
|
+
export default class ReplacementNodeAndTokens {
|
|
4
4
|
constructor(node, tokens) {
|
|
5
5
|
this.node = node;
|
|
6
6
|
this.tokens = tokens;
|
|
@@ -28,9 +28,15 @@ export default class ClonedNode {
|
|
|
28
28
|
|
|
29
29
|
tokens = replacementTokens; ///
|
|
30
30
|
|
|
31
|
-
const
|
|
31
|
+
const replacementNodeAndTokens = new ReplacementNodeAndTokens(node, tokens);
|
|
32
32
|
|
|
33
|
-
return
|
|
33
|
+
return replacementNodeAndTokens;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
static fromNodeAndTokens(node, tokens) {
|
|
37
|
+
const replacementNodeAndTokens = new ReplacementNodeAndTokens(node, tokens);
|
|
38
|
+
|
|
39
|
+
return replacementNodeAndTokens;
|
|
34
40
|
}
|
|
35
41
|
}
|
|
36
42
|
|
package/src/ruleNames.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
export const LINK_RULE_NAME = "link";
|
|
4
4
|
export const LINE_RULE_NAME = "line";
|
|
5
|
+
export const EMBED_RULE_NAME = "embed";
|
|
5
6
|
export const IMAGE_RULE_NAME = "image";
|
|
6
7
|
export const TABLE_RULE_NAME = "table";
|
|
7
8
|
export const ERROR_RULE_NAME = "error";
|
|
@@ -9,8 +10,7 @@ export const ANCHOR_RULE_NAME = "anchor";
|
|
|
9
10
|
export const MARKER_RULE_NAME = "marker";
|
|
10
11
|
export const BULLET_RULE_NAME = "bullet";
|
|
11
12
|
export const IGNORE_RULE_NAME = "ignore";
|
|
12
|
-
export const
|
|
13
|
-
export const IMPORTS_RULE_NAME = "imports";
|
|
13
|
+
export const INCLUDE_RULE_NAME = "include";
|
|
14
14
|
export const CONTENTS_RULE_NAME = "contents";
|
|
15
15
|
export const DIVISION_RULE_NAME = "division";
|
|
16
16
|
export const FOOTNOTE_RULE_NAME = "footnote";
|
|
@@ -26,6 +26,7 @@ export const BLOCK_TEXT_RULE_NAME = "blockText";
|
|
|
26
26
|
export const CLASS_NAME_RULE_NAME = "className";
|
|
27
27
|
export const PLAIN_TEXT_RULE_NAME = "plainText";
|
|
28
28
|
export const EMAIL_LINK_RULE_NAME = "emailLink";
|
|
29
|
+
export const DIRECTIVES_RULE_NAME = "directives";
|
|
29
30
|
export const END_OF_LINE_RULE_NAME = "endOfLine";
|
|
30
31
|
export const MARKED_TEXT_RULE_NAME = "markedText";
|
|
31
32
|
export const INLINE_TEXT_RULE_NAME = "inlineText";
|
|
@@ -60,6 +61,7 @@ export const STRONGLY_EMPHASISED_TEXT_RULE_NAME = "stronglyEmphasisedText";
|
|
|
60
61
|
const ruleNames = {
|
|
61
62
|
LINK_RULE_NAME,
|
|
62
63
|
LINE_RULE_NAME,
|
|
64
|
+
EMBED_RULE_NAME,
|
|
63
65
|
IMAGE_RULE_NAME,
|
|
64
66
|
TABLE_RULE_NAME,
|
|
65
67
|
ERROR_RULE_NAME,
|
|
@@ -67,8 +69,7 @@ const ruleNames = {
|
|
|
67
69
|
MARKER_RULE_NAME,
|
|
68
70
|
BULLET_RULE_NAME,
|
|
69
71
|
IGNORE_RULE_NAME,
|
|
70
|
-
|
|
71
|
-
IMPORTS_RULE_NAME,
|
|
72
|
+
INCLUDE_RULE_NAME,
|
|
72
73
|
CONTENTS_RULE_NAME,
|
|
73
74
|
DIVISION_RULE_NAME,
|
|
74
75
|
FOOTNOTE_RULE_NAME,
|
|
@@ -84,6 +85,7 @@ const ruleNames = {
|
|
|
84
85
|
CLASS_NAME_RULE_NAME,
|
|
85
86
|
PLAIN_TEXT_RULE_NAME,
|
|
86
87
|
EMAIL_LINK_RULE_NAME,
|
|
88
|
+
DIRECTIVES_RULE_NAME,
|
|
87
89
|
END_OF_LINE_RULE_NAME,
|
|
88
90
|
MARKED_TEXT_RULE_NAME,
|
|
89
91
|
INLINE_TEXT_RULE_NAME,
|
package/src/utilities/query.js
CHANGED
|
@@ -6,6 +6,7 @@ import { arrayUtilities } from "necessary";
|
|
|
6
6
|
const { first, push } = arrayUtilities;
|
|
7
7
|
|
|
8
8
|
const linkMarkdownNodesQuery = Query.fromExpression(`//link`),
|
|
9
|
+
embedMarkdownNodesQuery = Query.fromExpression(`//embed`),
|
|
9
10
|
ignoreMarkdownNodeQuery = Query.fromExpression(`//ignore`),
|
|
10
11
|
headingMarkdownNodesQuery = Query.fromExpression(`//primaryHeading|secondaryHeading|tertiaryHeading|quaternaryHeading`),
|
|
11
12
|
contentsMarkdownNodeQuery = Query.fromExpression(`//contents`),
|
|
@@ -50,6 +51,12 @@ export function linkMarkdownNodesFromNode(node, linkMarkdownNodes = []) {
|
|
|
50
51
|
return linkMarkdownNodes;
|
|
51
52
|
}
|
|
52
53
|
|
|
54
|
+
export function embedMarkdownNodesFromNode(node, embedMarkdownNodes = []) {
|
|
55
|
+
nodesFromNodeAndQuery(node, embedMarkdownNodesQuery, embedMarkdownNodes);
|
|
56
|
+
|
|
57
|
+
return embedMarkdownNodes;
|
|
58
|
+
}
|
|
59
|
+
|
|
53
60
|
export function ignoreMarkdownNodeFromNode(node) {
|
|
54
61
|
const ignoreMarkdownNode = nodeFromNodeAndQuery(node, ignoreMarkdownNodeQuery);
|
|
55
62
|
|
|
@@ -100,6 +107,7 @@ export function linkReferenceOrFootnotesMarkdownNodesFromNode(node, linkReferenc
|
|
|
100
107
|
|
|
101
108
|
export default {
|
|
102
109
|
linkMarkdownNodesFromNode,
|
|
110
|
+
embedMarkdownNodesFromNode,
|
|
103
111
|
ignoreMarkdownNodeFromNode,
|
|
104
112
|
contentsMarkdownNodeFromNode,
|
|
105
113
|
footnotesMarkdownNodeFromNode,
|