highmark-markdown 0.0.231 → 0.0.233
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 +901 -637
- 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 +33 -4
- package/lib/node/markdown/contentsLink.js +3 -3
- package/lib/node/markdown/{imports.js → directives.js} +17 -10
- package/lib/node/markdown/division.js +24 -12
- package/lib/node/markdown/emailLink.js +9 -2
- package/lib/node/markdown/embee.js +151 -0
- package/lib/node/markdown/heading.js +4 -4
- 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 +6 -6
- 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 +3 -3
- 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 +3 -3
- 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
|
@@ -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
|
+
}
|
|
@@ -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,
|
package/src/utilities/replace.js
CHANGED
|
@@ -2,9 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
export function replaceNode(replacementNode, replacedNode, parentNode) {
|
|
4
4
|
const replacedChildNode = replacedNode, ///
|
|
5
|
-
replacementChildNode = replacementNode
|
|
5
|
+
replacementChildNode = replacementNode, ///
|
|
6
|
+
replacementChildNodes = [
|
|
7
|
+
replacementChildNode
|
|
8
|
+
];
|
|
6
9
|
|
|
7
|
-
parentNode.
|
|
10
|
+
parentNode.replaceChildNodes(replacedChildNode, replacementChildNodes);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function replaceNodes(replacementNodes, replacedNode, parentNode) {
|
|
14
|
+
const replacedChildNode = replacedNode, ///
|
|
15
|
+
replacementChildNodes = replacementNodes; ///
|
|
16
|
+
|
|
17
|
+
parentNode.replaceChildNodes(replacedChildNode, replacementChildNodes);
|
|
8
18
|
}
|
|
9
19
|
|
|
10
20
|
export function replaceTokens(replacementTokens, replacedNode, tokens) {
|
package/lib/clonedNode.js
DELETED
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return ClonedNode;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
function _class_call_check(instance, Constructor) {
|
|
12
|
-
if (!(instance instanceof Constructor)) {
|
|
13
|
-
throw new TypeError("Cannot call a class as a function");
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
function _defineProperties(target, props) {
|
|
17
|
-
for(var i = 0; i < props.length; i++){
|
|
18
|
-
var descriptor = props[i];
|
|
19
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
20
|
-
descriptor.configurable = true;
|
|
21
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
22
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
function _create_class(Constructor, protoProps, staticProps) {
|
|
26
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
27
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
28
|
-
return Constructor;
|
|
29
|
-
}
|
|
30
|
-
var ClonedNode = /*#__PURE__*/ function() {
|
|
31
|
-
function ClonedNode(node, tokens) {
|
|
32
|
-
_class_call_check(this, ClonedNode);
|
|
33
|
-
this.node = node;
|
|
34
|
-
this.tokens = tokens;
|
|
35
|
-
}
|
|
36
|
-
_create_class(ClonedNode, [
|
|
37
|
-
{
|
|
38
|
-
key: "getNode",
|
|
39
|
-
value: function getNode() {
|
|
40
|
-
return this.node;
|
|
41
|
-
}
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
key: "getTokens",
|
|
45
|
-
value: function getTokens() {
|
|
46
|
-
return this.tokens;
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
key: "getChildNodes",
|
|
51
|
-
value: function getChildNodes() {
|
|
52
|
-
return this.node.getChildNodes();
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
], [
|
|
56
|
-
{
|
|
57
|
-
key: "fromNode",
|
|
58
|
-
value: function fromNode(node, context) {
|
|
59
|
-
var tokens = context.tokens;
|
|
60
|
-
var offset = offsetFromNodeAndTokens(node, tokens), replacementTokens = replacementTokensFromNodeAndTokens(node, tokens);
|
|
61
|
-
node = node.clone(); ///
|
|
62
|
-
replaceNodeTokens(node, replacementTokens, offset, tokens);
|
|
63
|
-
tokens = replacementTokens; ///
|
|
64
|
-
var clonedNode = new ClonedNode(node, tokens);
|
|
65
|
-
return clonedNode;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
]);
|
|
69
|
-
return ClonedNode;
|
|
70
|
-
}();
|
|
71
|
-
function replaceNodeTokens(node, replacementTokens, offset, tokens) {
|
|
72
|
-
var nodeTerminalNode = node.isTerminalNode();
|
|
73
|
-
if (nodeTerminalNode) {
|
|
74
|
-
var terminalNode = node; ///
|
|
75
|
-
replaceTerminalNodeTokens(terminalNode, replacementTokens, offset, tokens);
|
|
76
|
-
} else {
|
|
77
|
-
var nonTerminalNode = node; ///
|
|
78
|
-
replaceNonTerminalNodeTokens(nonTerminalNode, replacementTokens, offset, tokens);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
function replaceChildNodesTokens(childNodes, replacementTokens, offset, tokens) {
|
|
82
|
-
childNodes.forEach(function(childNode) {
|
|
83
|
-
var node = childNode; ///
|
|
84
|
-
replaceNodeTokens(node, replacementTokens, offset, tokens);
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
function replaceTerminalNodeTokens(terminalNode, replacementTokens, offset, tokens) {
|
|
88
|
-
var index, significantToken;
|
|
89
|
-
significantToken = terminalNode.getSignificantToken();
|
|
90
|
-
if (significantToken !== null) {
|
|
91
|
-
index = tokens.indexOf(significantToken);
|
|
92
|
-
index -= offset;
|
|
93
|
-
var replacementToken = replacementTokens[index];
|
|
94
|
-
significantToken = replacementToken; ///
|
|
95
|
-
terminalNode.setSignificantToken(significantToken);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
function replaceNonTerminalNodeTokens(nonTerminalNode, replacementTokens, offset, tokens) {
|
|
99
|
-
var childNodes = nonTerminalNode.getChildNodes();
|
|
100
|
-
replaceChildNodesTokens(childNodes, replacementTokens, offset, tokens);
|
|
101
|
-
}
|
|
102
|
-
function offsetFromNodeAndTokens(node, tokens) {
|
|
103
|
-
var offset;
|
|
104
|
-
var nodeTerminalNode = node.isTerminalNode();
|
|
105
|
-
if (nodeTerminalNode) {
|
|
106
|
-
var terminalNode = node, significantToken = terminalNode.getSignificantToken();
|
|
107
|
-
if (significantToken === null) {
|
|
108
|
-
offset = -1;
|
|
109
|
-
} else {
|
|
110
|
-
var significantTokenIndex = tokens.indexOf(significantToken);
|
|
111
|
-
offset = significantTokenIndex; ///
|
|
112
|
-
}
|
|
113
|
-
} else {
|
|
114
|
-
var nonTerminalNode = node, firstSignificantToken = nonTerminalNode.getFirstSignificantToken(), firstSignificantTokenIndex = tokens.indexOf(firstSignificantToken);
|
|
115
|
-
offset = firstSignificantTokenIndex; ///
|
|
116
|
-
}
|
|
117
|
-
return offset;
|
|
118
|
-
}
|
|
119
|
-
function replacementTokensFromNodeAndTokens(node, tokens) {
|
|
120
|
-
var nodeTerminalNode = node.isTerminalNode();
|
|
121
|
-
if (nodeTerminalNode) {
|
|
122
|
-
var terminalNode = node, significantToken = terminalNode.getSignificantToken();
|
|
123
|
-
if (significantToken === null) {
|
|
124
|
-
tokens = [];
|
|
125
|
-
} else {
|
|
126
|
-
var token = significantToken; ///
|
|
127
|
-
tokens = [
|
|
128
|
-
token
|
|
129
|
-
];
|
|
130
|
-
}
|
|
131
|
-
} else {
|
|
132
|
-
var nonTerminalNode = node, lastSignificantToken = nonTerminalNode.getLastSignificantToken(), firstSignificantToken = nonTerminalNode.getFirstSignificantToken(), lastSignificantTokenIndex = tokens.indexOf(lastSignificantToken), firstSignificantTokenIndex = tokens.indexOf(firstSignificantToken), start = firstSignificantTokenIndex, end = lastSignificantTokenIndex + 1;
|
|
133
|
-
tokens = tokens.slice(start, end); ///
|
|
134
|
-
}
|
|
135
|
-
var replacementTokens = tokens.map(function(token) {
|
|
136
|
-
var replacementToken = token.clone(); ///;
|
|
137
|
-
return replacementToken;
|
|
138
|
-
});
|
|
139
|
-
return replacementTokens;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jbG9uZWROb2RlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbG9uZWROb2RlIHtcbiAgY29uc3RydWN0b3Iobm9kZSwgdG9rZW5zKSB7XG4gICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgfVxuXG4gIGdldE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxuXG4gIGdldFRva2VucygpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnM7XG4gIH1cblxuICBnZXRDaGlsZE5vZGVzKCkgeyByZXR1cm4gdGhpcy5ub2RlLmdldENoaWxkTm9kZXMoKTsgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZShub2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IHsgdG9rZW5zIH0gPSBjb250ZXh0O1xuXG4gICAgY29uc3Qgb2Zmc2V0ID0gb2Zmc2V0RnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICByZXBsYWNlbWVudFRva2VucyA9IHJlcGxhY2VtZW50VG9rZW5zRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgIG5vZGUgPSBub2RlLmNsb25lKCk7ICAvLy9cblxuICAgIHJlcGxhY2VOb2RlVG9rZW5zKG5vZGUsIHJlcGxhY2VtZW50VG9rZW5zLCBvZmZzZXQsIHRva2Vucyk7XG5cbiAgICB0b2tlbnMgPSByZXBsYWNlbWVudFRva2VuczsgLy8vXG5cbiAgICBjb25zdCBjbG9uZWROb2RlID0gbmV3IENsb25lZE5vZGUobm9kZSwgdG9rZW5zKTtcblxuICAgIHJldHVybiBjbG9uZWROb2RlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VOb2RlVG9rZW5zKG5vZGUsIHJlcGxhY2VtZW50VG9rZW5zLCBvZmZzZXQsIHRva2Vucykge1xuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmVwbGFjZVRlcm1pbmFsTm9kZVRva2Vucyh0ZXJtaW5hbE5vZGUsIHJlcGxhY2VtZW50VG9rZW5zLCBvZmZzZXQsIHRva2Vucyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmVwbGFjZU5vblRlcm1pbmFsTm9kZVRva2Vucyhub25UZXJtaW5hbE5vZGUsIHJlcGxhY2VtZW50VG9rZW5zLCBvZmZzZXQsIHRva2Vucyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZUNoaWxkTm9kZXNUb2tlbnMoY2hpbGROb2RlcywgcmVwbGFjZW1lbnRUb2tlbnMsIG9mZnNldCwgdG9rZW5zKSB7XG4gIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgY29uc3Qgbm9kZSA9IGNoaWxkTm9kZTsgLy8vXG5cbiAgICByZXBsYWNlTm9kZVRva2Vucyhub2RlLCByZXBsYWNlbWVudFRva2Vucywgb2Zmc2V0LCB0b2tlbnMpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVRlcm1pbmFsTm9kZVRva2Vucyh0ZXJtaW5hbE5vZGUsIHJlcGxhY2VtZW50VG9rZW5zLCBvZmZzZXQsIHRva2Vucykge1xuICBsZXQgaW5kZXgsXG4gICAgICBzaWduaWZpY2FudFRva2VuO1xuXG4gIHNpZ25pZmljYW50VG9rZW4gPSB0ZXJtaW5hbE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbigpO1xuXG4gIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgaW5kZXggPSB0b2tlbnMuaW5kZXhPZihzaWduaWZpY2FudFRva2VuKTtcblxuICAgIGluZGV4IC09IG9mZnNldDtcblxuICAgIGNvbnN0IHJlcGxhY2VtZW50VG9rZW4gPSByZXBsYWNlbWVudFRva2Vuc1tpbmRleF07XG5cbiAgICBzaWduaWZpY2FudFRva2VuID0gcmVwbGFjZW1lbnRUb2tlbjsgIC8vL1xuXG4gICAgdGVybWluYWxOb2RlLnNldFNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZU5vblRlcm1pbmFsTm9kZVRva2Vucyhub25UZXJtaW5hbE5vZGUsIHJlcGxhY2VtZW50VG9rZW5zLCBvZmZzZXQsIHRva2Vucykge1xuICBjb25zdCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICByZXBsYWNlQ2hpbGROb2Rlc1Rva2VucyhjaGlsZE5vZGVzLCByZXBsYWNlbWVudFRva2Vucywgb2Zmc2V0LCB0b2tlbnMpO1xufVxuXG5mdW5jdGlvbiBvZmZzZXRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgbGV0IG9mZnNldDtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSB0ZXJtaW5hbE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbigpO1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gPT09IG51bGwpIHtcbiAgICAgIG9mZnNldCA9IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzaWduaWZpY2FudFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihzaWduaWZpY2FudFRva2VuKTtcblxuICAgICAgb2Zmc2V0ID0gc2lnbmlmaWNhbnRUb2tlbkluZGV4OyAvLy9cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vblRlcm1pbmFsTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGZpcnN0U2lnbmlmaWNhbnRUb2tlbik7XG5cbiAgICBvZmZzZXQgPSBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleDsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldDtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZW1lbnRUb2tlbnNGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKTtcblxuICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gdGVybWluYWxOb2RlLmdldFNpZ25pZmljYW50VG9rZW4oKTtcblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuID09PSBudWxsKSB7XG4gICAgICB0b2tlbnMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdG9rZW4gPSBzaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgICAgdG9rZW5zID0gW1xuICAgICAgICB0b2tlblxuICAgICAgXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuID0gbm9uVGVybWluYWxOb2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbm9uVGVybWluYWxOb2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihsYXN0U2lnbmlmaWNhbnRUb2tlbiksXG4gICAgICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihmaXJzdFNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICAgIHN0YXJ0ID0gZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgsIC8vL1xuICAgICAgICAgIGVuZCA9IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggKyAxO1xuXG4gICAgdG9rZW5zID0gdG9rZW5zLnNsaWNlKHN0YXJ0LCBlbmQpOyAgLy8vXG4gIH1cblxuICBjb25zdCByZXBsYWNlbWVudFRva2VucyA9IHRva2Vucy5tYXAoKHRva2VuKSA9PiB7ICAvLy9cbiAgICBjb25zdCByZXBsYWNlbWVudFRva2VuID0gdG9rZW4uY2xvbmUoKTsgIC8vLztcblxuICAgIHJldHVybiByZXBsYWNlbWVudFRva2VuO1xuICB9KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRUb2tlbnM7XG59XG4iXSwibmFtZXMiOlsiQ2xvbmVkTm9kZSIsIm5vZGUiLCJ0b2tlbnMiLCJnZXROb2RlIiwiZ2V0VG9rZW5zIiwiZ2V0Q2hpbGROb2RlcyIsImZyb21Ob2RlIiwiY29udGV4dCIsIm9mZnNldCIsIm9mZnNldEZyb21Ob2RlQW5kVG9rZW5zIiwicmVwbGFjZW1lbnRUb2tlbnMiLCJyZXBsYWNlbWVudFRva2Vuc0Zyb21Ob2RlQW5kVG9rZW5zIiwiY2xvbmUiLCJyZXBsYWNlTm9kZVRva2VucyIsImNsb25lZE5vZGUiLCJub2RlVGVybWluYWxOb2RlIiwiaXNUZXJtaW5hbE5vZGUiLCJ0ZXJtaW5hbE5vZGUiLCJyZXBsYWNlVGVybWluYWxOb2RlVG9rZW5zIiwibm9uVGVybWluYWxOb2RlIiwicmVwbGFjZU5vblRlcm1pbmFsTm9kZVRva2VucyIsInJlcGxhY2VDaGlsZE5vZGVzVG9rZW5zIiwiY2hpbGROb2RlcyIsImZvckVhY2giLCJjaGlsZE5vZGUiLCJpbmRleCIsInNpZ25pZmljYW50VG9rZW4iLCJnZXRTaWduaWZpY2FudFRva2VuIiwiaW5kZXhPZiIsInJlcGxhY2VtZW50VG9rZW4iLCJzZXRTaWduaWZpY2FudFRva2VuIiwic2lnbmlmaWNhbnRUb2tlbkluZGV4IiwiZmlyc3RTaWduaWZpY2FudFRva2VuIiwiZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuIiwiZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgiLCJ0b2tlbiIsImxhc3RTaWduaWZpY2FudFRva2VuIiwiZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4iLCJsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4Iiwic3RhcnQiLCJlbmQiLCJzbGljZSIsIm1hcCJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQUVxQkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixJQUFBLEFBQU1BLDJCQUFELEFBQUw7YUFBTUEsV0FDUEMsSUFBSSxFQUFFQyxNQUFNO2dDQURMRjtRQUVqQixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLE1BQU0sR0FBR0E7O2tCQUhHRjs7WUFNbkJHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0YsSUFBSTtZQUNsQjs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0YsTUFBTTtZQUNwQjs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFBa0IsT0FBTyxJQUFJLENBQUNKLElBQUksQ0FBQ0ksYUFBYTtZQUFJOzs7O1lBRTdDQyxLQUFBQTttQkFBUCxTQUFPQSxTQUFTTCxJQUFJLEVBQUVNLE9BQU87Z0JBQzNCLElBQUksQUFBRUwsU0FBV0ssUUFBWEw7Z0JBRU4sSUFBTU0sU0FBU0Msd0JBQXdCUixNQUFNQyxTQUN2Q1Esb0JBQW9CQyxt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
|