highmark-markdown 0.0.156 → 0.0.157
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 +1504 -1162
- package/index.html +1 -0
- package/lib/constants.js +13 -4
- package/lib/example/constants.js +1 -5
- package/lib/example/view/div/sizeable/left.js +2 -2
- package/lib/example/view.js +3 -13
- package/lib/markdown/bnf.js +2 -2
- package/lib/markdown/entries.js +2 -2
- package/lib/markdown/parser.js +5 -5
- package/lib/mixins/content.js +3 -3
- package/lib/node/markdown/blockText.js +3 -3
- package/lib/node/markdown/contentsItem.js +13 -20
- package/lib/node/markdown/contentsLink.js +214 -0
- package/lib/node/markdown/contentsList.js +32 -12
- package/lib/node/markdown/division.js +25 -67
- package/lib/node/markdown/emailLink.js +2 -3
- package/lib/node/markdown/endOfLine.js +2 -2
- package/lib/node/markdown/error.js +2 -2
- package/lib/node/markdown/footnotesList.js +22 -23
- package/lib/node/markdown/heading.js +25 -1
- package/lib/node/markdown/hyperlink.js +2 -3
- package/lib/node/markdown/inlineListing.js +2 -2
- package/lib/node/markdown/inlineText.js +2 -2
- package/lib/node/markdown/line.js +4 -4
- package/lib/node/markdown/lineBreak.js +16 -2
- package/lib/node/markdown/markedText.js +5 -6
- package/lib/node/markdown.js +8 -1
- package/lib/ruleNameToHTMLMap.js +4 -1
- package/lib/ruleNames.js +6 -1
- package/lib/utilities/childNodes.js +60 -35
- package/lib/utilities/content.js +7 -6
- package/lib/utilities/contents.js +172 -0
- package/lib/utilities/node.js +31 -0
- package/lib/utilities/parser.js +21 -0
- package/lib/utilities/tokens.js +2 -2
- package/package.json +2 -2
- package/src/constants.js +1 -0
- package/src/example/constants.js +0 -1
- package/src/example/view/div/sizeable/left.js +1 -1
- package/src/example/view.js +7 -29
- package/src/markdown/bnf.js +1 -1
- package/src/markdown/entries.js +1 -1
- package/src/markdown/parser.js +1 -1
- package/src/mixins/content.js +2 -2
- package/src/node/markdown/blockText.js +8 -5
- package/src/node/markdown/contentsItem.js +14 -26
- package/src/node/markdown/contentsLink.js +162 -0
- package/src/node/markdown/contentsList.js +53 -15
- package/src/node/markdown/division.js +31 -87
- package/src/node/markdown/emailLink.js +3 -3
- package/src/node/markdown/endOfLine.js +2 -1
- package/src/node/markdown/error.js +2 -1
- package/src/node/markdown/footnotesList.js +33 -34
- package/src/node/markdown/heading.js +33 -0
- package/src/node/markdown/hyperlink.js +3 -3
- package/src/node/markdown/inlineListing.js +2 -1
- package/src/node/markdown/inlineText.js +2 -1
- package/src/node/markdown/line.js +4 -4
- package/src/node/markdown/lineBreak.js +10 -0
- package/src/node/markdown/markedText.js +6 -7
- package/src/node/markdown.js +6 -0
- package/src/ruleNameToHTMLMap.js +5 -0
- package/src/ruleNames.js +2 -0
- package/src/utilities/childNodes.js +81 -41
- package/src/utilities/content.js +7 -5
- package/src/utilities/node.js +29 -0
- package/src/utilities/tokens.js +2 -1
- package/lib/utilities/nodes.js +0 -21
- package/lib/utilities/tree.js +0 -172
- /package/src/utilities/{tree.js → contents.js} +0 -0
- /package/src/utilities/{nodes.js → parser.js} +0 -0
package/src/example/view.js
CHANGED
|
@@ -16,7 +16,7 @@ import ParseTreeTextarea from "./view/textarea/parseTree";
|
|
|
16
16
|
import LexicalEntriesTextarea from "./view/textarea/lexicalEntries";
|
|
17
17
|
|
|
18
18
|
import { MarkdownLexer, MarkdownParser } from "../index";
|
|
19
|
-
import { EMPTY_STRING, DOCUMENT_DIVISION_CLASS_NAME
|
|
19
|
+
import { EMPTY_STRING, DOCUMENT_DIVISION_CLASS_NAME } from "./constants";
|
|
20
20
|
|
|
21
21
|
const { bnf } = MarkdownParser,
|
|
22
22
|
{ entries } = MarkdownLexer;
|
|
@@ -48,8 +48,7 @@ class View extends Element {
|
|
|
48
48
|
const parentNode = null,
|
|
49
49
|
indent = EMPTY_STRING,
|
|
50
50
|
context = {
|
|
51
|
-
tokens
|
|
52
|
-
importer
|
|
51
|
+
tokens
|
|
53
52
|
};
|
|
54
53
|
|
|
55
54
|
divisionMarkdownNode.resolveImports(parentNode, context);
|
|
@@ -135,10 +134,11 @@ class View extends Element {
|
|
|
135
134
|
this.update();
|
|
136
135
|
}
|
|
137
136
|
|
|
138
|
-
static initialMarkdown =
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
137
|
+
static initialMarkdown = `
|
|
138
|
+
# Occam [^occam]
|
|
139
|
+
|
|
140
|
+
[^occam]: An occam footnote.
|
|
141
|
+
|
|
142
142
|
`;
|
|
143
143
|
|
|
144
144
|
static tagName = "div";
|
|
@@ -153,25 +153,3 @@ export default withStyle(View)`
|
|
|
153
153
|
padding: 1rem;
|
|
154
154
|
|
|
155
155
|
`;
|
|
156
|
-
|
|
157
|
-
function importer(path, context) {
|
|
158
|
-
const content = `
|
|
159
|
-
|
|
160
|
-
# Primary heading
|
|
161
|
-
|
|
162
|
-
` ,
|
|
163
|
-
tokens = markdownLexer.tokenise(content),
|
|
164
|
-
node = markdownParser.parse(tokens),
|
|
165
|
-
divisionMarkdownNode = node, ///
|
|
166
|
-
divisionClassName = FRONT_MATTER_DIVISION_CLASS_NAME;
|
|
167
|
-
|
|
168
|
-
divisionMarkdownNode.setDivisionClassName(divisionClassName);
|
|
169
|
-
|
|
170
|
-
const importedNode = node, ///
|
|
171
|
-
importedTokens = tokens; ///
|
|
172
|
-
|
|
173
|
-
Object.assign(context, {
|
|
174
|
-
importedNode,
|
|
175
|
-
importedTokens
|
|
176
|
-
});
|
|
177
|
-
}
|
package/src/markdown/bnf.js
CHANGED
package/src/markdown/entries.js
CHANGED
package/src/markdown/parser.js
CHANGED
|
@@ -5,7 +5,7 @@ import { CommonParser } from "occam-parsers";
|
|
|
5
5
|
import bnf from "./bnf";
|
|
6
6
|
import nodeMap from "../nodeMap";
|
|
7
7
|
|
|
8
|
-
import { setNonTerminalNodes } from "../utilities/
|
|
8
|
+
import { setNonTerminalNodes } from "../utilities/parser";
|
|
9
9
|
|
|
10
10
|
export default class MarkdownParser extends CommonParser {
|
|
11
11
|
static bnf = bnf;
|
package/src/mixins/content.js
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
import { contentFromMarkdownNodes } from "../utilities/content";
|
|
4
4
|
|
|
5
|
-
function content(context,
|
|
5
|
+
function content(context, leftTrimmed = true, rightTrimmed = true) {
|
|
6
6
|
const markdownNode = this, ///
|
|
7
7
|
markdownNodes = [
|
|
8
8
|
markdownNode
|
|
9
9
|
],
|
|
10
|
-
content = contentFromMarkdownNodes(markdownNodes, context,
|
|
10
|
+
content = contentFromMarkdownNodes(markdownNodes, context, leftTrimmed, rightTrimmed);
|
|
11
11
|
|
|
12
12
|
return content;
|
|
13
13
|
}
|
|
@@ -5,17 +5,20 @@ import contentMixins from "../../mixins/content";
|
|
|
5
5
|
|
|
6
6
|
class BlockTextMarkdownNode extends MarkdownNode {
|
|
7
7
|
asHTML(indent, context) {
|
|
8
|
-
const
|
|
9
|
-
|
|
8
|
+
const leftTrimmed = false,
|
|
9
|
+
rightTrimmed = false,
|
|
10
|
+
content = this.content(context, leftTrimmed, rightTrimmed),
|
|
10
11
|
html = content; ///
|
|
11
12
|
|
|
12
13
|
return html;
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
createDOMElement(context) {
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
const leftTrimmed = false,
|
|
18
|
+
rightTrimmed = false,
|
|
19
|
+
content = this.content(context, leftTrimmed, rightTrimmed),
|
|
20
|
+
textNode = document.createTextNode(content),
|
|
21
|
+
domElement = textNode;
|
|
19
22
|
|
|
20
23
|
this.setDOMElement(domElement);
|
|
21
24
|
|
|
@@ -1,28 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { arrayUtilities } from "necessary";
|
|
4
|
-
|
|
5
3
|
import MarkdownNode from "../../node/markdown";
|
|
4
|
+
import ContentsLinkMarkdownNode from "../../node/markdown/contentsLink";
|
|
6
5
|
|
|
7
6
|
import { CONTENTS_ITEM_RULE_NAME } from "../../ruleNames";
|
|
8
7
|
|
|
9
|
-
const { push } = arrayUtilities;
|
|
10
|
-
|
|
11
8
|
export default class ContentsItemMarkdownNode extends MarkdownNode {
|
|
12
|
-
static
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
nestedHeadingMarkdownNodes = childNestedNodes, ///
|
|
16
|
-
contentsListMarkdownNode = ContentsListMarkdownNode.fromNestedHeadingMarkdownNodes(nestedHeadingMarkdownNodes);
|
|
17
|
-
|
|
18
|
-
const ruleName = CONTENTS_ITEM_RULE_NAME,
|
|
9
|
+
static fromContentsListMarkdownNodeAndNestedHeadingMarkdownNode(ContentsListMarkdownNode, nestedHeadingMarkdownNode, context) {
|
|
10
|
+
const contentsLinkMarkdownNode = ContentsLinkMarkdownNode.fromNestedHeadingMarkdownNode(nestedHeadingMarkdownNode, context),
|
|
11
|
+
contentsListMarkdownNode = ContentsListMarkdownNode.fromNestedHeadingMarkdownNode(nestedHeadingMarkdownNode, context),
|
|
19
12
|
childNodes = [];
|
|
20
13
|
|
|
21
|
-
if (
|
|
22
|
-
const
|
|
23
|
-
|
|
14
|
+
if (contentsLinkMarkdownNode !== null) {
|
|
15
|
+
const childNode = contentsLinkMarkdownNode; ///
|
|
16
|
+
|
|
17
|
+
childNodes.push(childNode);
|
|
24
18
|
|
|
25
|
-
|
|
19
|
+
const node = nestedHeadingMarkdownNode.getNode(),
|
|
20
|
+
headingMarkdownNode = node; ///
|
|
21
|
+
|
|
22
|
+
headingMarkdownNode.addAnchor(context);
|
|
26
23
|
}
|
|
27
24
|
|
|
28
25
|
if (contentsListMarkdownNode !== null) {
|
|
@@ -31,19 +28,10 @@ export default class ContentsItemMarkdownNode extends MarkdownNode {
|
|
|
31
28
|
childNodes.push(childNode);
|
|
32
29
|
}
|
|
33
30
|
|
|
34
|
-
const
|
|
31
|
+
const ruleName = CONTENTS_ITEM_RULE_NAME,
|
|
32
|
+
opacity = null,
|
|
35
33
|
contentsItemMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsItemMarkdownNode, ruleName, childNodes, opacity);
|
|
36
34
|
|
|
37
35
|
return contentsItemMarkdownNode;
|
|
38
36
|
}
|
|
39
37
|
}
|
|
40
|
-
|
|
41
|
-
function clone(nodes) {
|
|
42
|
-
nodes = nodes.map((node) => { ///
|
|
43
|
-
node = node.clone(); ///
|
|
44
|
-
|
|
45
|
-
return node;
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
return nodes;
|
|
49
|
-
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { arrayUtilities } from "necessary";
|
|
4
|
+
|
|
5
|
+
import MarkdownNode from "../../node/markdown";
|
|
6
|
+
|
|
7
|
+
import { HREF_ATTRIBUTE_NAME } from "../../attributeNames";
|
|
8
|
+
import { CONTENTS_LINK_RULE_NAME } from "../../ruleNames";
|
|
9
|
+
|
|
10
|
+
const { push } = arrayUtilities;
|
|
11
|
+
|
|
12
|
+
export default class ContentsLinkMarkdownNode extends MarkdownNode {
|
|
13
|
+
constructor(ruleName, childNodes, opacity, precedence, domElement, identifier) {
|
|
14
|
+
super(ruleName, childNodes, opacity, precedence, domElement);
|
|
15
|
+
|
|
16
|
+
this.identifier = identifier;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
getIdentifier() {
|
|
20
|
+
return this.identifier;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
attributeName(context) {
|
|
24
|
+
const attributeName = HREF_ATTRIBUTE_NAME;
|
|
25
|
+
|
|
26
|
+
return attributeName;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
attributeValue(context) {
|
|
30
|
+
const attributeValue = `#${this.identifier}`;
|
|
31
|
+
|
|
32
|
+
return attributeValue;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
static fromNestedHeadingMarkdownNode(nestedHeadingMarkdownNode, context) {
|
|
36
|
+
let contentsLinkMarkdownNode = null;
|
|
37
|
+
|
|
38
|
+
const node = nestedHeadingMarkdownNode.getNode(),
|
|
39
|
+
headingMarkdownNode = node; ///
|
|
40
|
+
|
|
41
|
+
if (headingMarkdownNode !== null) {
|
|
42
|
+
const { replacementTokens } = context,
|
|
43
|
+
headingMarkdownNodeOffset = offsetFromNode(headingMarkdownNode, context), ///
|
|
44
|
+
headingMarkdownNodeTokens = tokensFromNode(headingMarkdownNode, context),
|
|
45
|
+
headingMarkdownNodeChildNodes = childNodesFromNode(headingMarkdownNode);
|
|
46
|
+
|
|
47
|
+
push(replacementTokens, headingMarkdownNodeTokens);
|
|
48
|
+
|
|
49
|
+
replaceChildNodesTokens(headingMarkdownNodeChildNodes, headingMarkdownNodeTokens, headingMarkdownNodeOffset, context);
|
|
50
|
+
|
|
51
|
+
const childNodes = headingMarkdownNodeChildNodes, ///
|
|
52
|
+
ruleName = CONTENTS_LINK_RULE_NAME,
|
|
53
|
+
opacity = null,
|
|
54
|
+
identifier = headingMarkdownNode.identifier(context);
|
|
55
|
+
|
|
56
|
+
contentsLinkMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsLinkMarkdownNode, ruleName, childNodes, opacity, identifier);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return contentsLinkMarkdownNode;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function offsetFromNode(node, context) {
|
|
64
|
+
const { tokens } = context,
|
|
65
|
+
nonTerminalNode = node, ///
|
|
66
|
+
firstSignificantToken = nonTerminalNode.getFirstSignificantToken(),
|
|
67
|
+
firstSignificantTokenIndex = tokens.indexOf(firstSignificantToken),
|
|
68
|
+
offset = firstSignificantTokenIndex; ///
|
|
69
|
+
|
|
70
|
+
return offset;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function tokensFromNode(node, context) {
|
|
74
|
+
let tokens;
|
|
75
|
+
|
|
76
|
+
({ tokens } = context);
|
|
77
|
+
|
|
78
|
+
const nonTerminalNode = node, ///
|
|
79
|
+
lastSignificantToken = nonTerminalNode.getLastSignificantToken(),
|
|
80
|
+
firstSignificantToken = nonTerminalNode.getFirstSignificantToken(),
|
|
81
|
+
lastSignificantTokenIndex = tokens.indexOf(lastSignificantToken),
|
|
82
|
+
firstSignificantTokenIndex = tokens.indexOf(firstSignificantToken),
|
|
83
|
+
start = firstSignificantTokenIndex, ///
|
|
84
|
+
end = lastSignificantTokenIndex + 1;
|
|
85
|
+
|
|
86
|
+
tokens = tokens.slice(start, end);
|
|
87
|
+
|
|
88
|
+
tokens = tokens.map((token) => { ///
|
|
89
|
+
token = token.clone(); ///
|
|
90
|
+
|
|
91
|
+
return token;
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
return tokens;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function childNodesFromNode(node) {
|
|
98
|
+
let childNodes;
|
|
99
|
+
|
|
100
|
+
const nonTerminalNode = node; ///
|
|
101
|
+
|
|
102
|
+
childNodes = nonTerminalNode.getChildNodes();
|
|
103
|
+
|
|
104
|
+
childNodes = childNodes.map((childNode) => { ///
|
|
105
|
+
childNode = childNode.clone(); ///
|
|
106
|
+
|
|
107
|
+
return childNode;
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
return childNodes;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function replaceNodeTokens(node, replacementTokens, offset, context) {
|
|
114
|
+
const nodeTerminalNode = node.isTerminalNode();
|
|
115
|
+
|
|
116
|
+
if (nodeTerminalNode) {
|
|
117
|
+
const terminalNode = node; ///
|
|
118
|
+
|
|
119
|
+
replaceTerminalNodeTokens(terminalNode, replacementTokens, offset, context);
|
|
120
|
+
} else {
|
|
121
|
+
const nonTerminalNode = node; ///
|
|
122
|
+
|
|
123
|
+
replaceNonTerminalNodeTokens(nonTerminalNode, replacementTokens, offset, context);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function replaceChildNodesTokens(childNodes, tokens, offset, context) {
|
|
128
|
+
childNodes.forEach((childNode) => {
|
|
129
|
+
const node = childNode; ///
|
|
130
|
+
|
|
131
|
+
replaceNodeTokens(node, tokens, offset, context);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function replaceTerminalNodeTokens(terminalNode, tokens, offset, context) {
|
|
136
|
+
let index,
|
|
137
|
+
significantToken;
|
|
138
|
+
|
|
139
|
+
const temporaryTokens = tokens; ///
|
|
140
|
+
|
|
141
|
+
({ tokens } = context);
|
|
142
|
+
|
|
143
|
+
significantToken = terminalNode.getSignificantToken();
|
|
144
|
+
|
|
145
|
+
index = tokens.indexOf(significantToken);
|
|
146
|
+
|
|
147
|
+
index -= offset;
|
|
148
|
+
|
|
149
|
+
tokens = temporaryTokens; ///
|
|
150
|
+
|
|
151
|
+
const token = tokens[index];
|
|
152
|
+
|
|
153
|
+
significantToken = token; ///
|
|
154
|
+
|
|
155
|
+
terminalNode.setSignificantToken(significantToken);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function replaceNonTerminalNodeTokens(nonTerminalNode, tokens, offset, context) {
|
|
159
|
+
const childNodes = nonTerminalNode.getChildNodes();
|
|
160
|
+
|
|
161
|
+
replaceChildNodesTokens(childNodes, tokens, offset, context);
|
|
162
|
+
}
|
|
@@ -1,35 +1,73 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { arrayUtilities } from "necessary";
|
|
4
|
+
|
|
3
5
|
import MarkdownNode from "../../node/markdown";
|
|
4
6
|
import ContentsItemMarkdownNode from "../../node/markdown/contentsItem";
|
|
5
7
|
|
|
8
|
+
import { nestNodes } from "../../utilities/contents";
|
|
6
9
|
import { CONTENTS_LIST_RULE_NAME } from "../../ruleNames";
|
|
10
|
+
import { headingMarkdownNodesFromNode, contentsMarkdownNodeFromNode } from "../../utilities/query";
|
|
11
|
+
|
|
12
|
+
const { filter } = arrayUtilities;
|
|
7
13
|
|
|
8
14
|
export default class ContentsListMarkdownNode extends MarkdownNode {
|
|
9
|
-
static
|
|
10
|
-
|
|
15
|
+
static fromDivisionMarkdownNode(divisionMarkdownNode, context) {
|
|
16
|
+
const node = divisionMarkdownNode, ///
|
|
17
|
+
contentsMarkdownNode = contentsMarkdownNodeFromNode(node);
|
|
11
18
|
|
|
12
|
-
|
|
19
|
+
if (contentsMarkdownNode === null) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
13
22
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
childNodes = childNodesFromNestedHeadingMarkdownNodes(nestedHeadingMarkdownNodes, context),
|
|
17
|
-
opacity = null;
|
|
23
|
+
const headingMarkdownNodes = headingMarkdownNodesFromDivisionMarkdownNodeAndContentsMarkdownNode(divisionMarkdownNode, contentsMarkdownNode, context),
|
|
24
|
+
headingMarkdownNodesLength = headingMarkdownNodes.length;
|
|
18
25
|
|
|
19
|
-
|
|
26
|
+
if (headingMarkdownNodesLength === 0) {
|
|
27
|
+
return;
|
|
20
28
|
}
|
|
21
29
|
|
|
22
|
-
|
|
30
|
+
const ruleName = CONTENTS_LIST_RULE_NAME,
|
|
31
|
+
childNodes = childNodesFromHeadingMarkdownNodes(headingMarkdownNodes, context),
|
|
32
|
+
opacity = null,
|
|
33
|
+
contentsListMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsListMarkdownNode, ruleName, childNodes, opacity),
|
|
34
|
+
replacementChildNode = contentsListMarkdownNode, ///
|
|
35
|
+
replacedChildNode = contentsMarkdownNode; ///
|
|
36
|
+
|
|
37
|
+
Object.assign(context, {
|
|
38
|
+
replacedChildNode,
|
|
39
|
+
replacementChildNode
|
|
40
|
+
});
|
|
23
41
|
}
|
|
24
42
|
}
|
|
25
43
|
|
|
26
|
-
function
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
44
|
+
function childNodesFromHeadingMarkdownNodes(headingMarkdownNodes, context) {
|
|
45
|
+
const nodes = headingMarkdownNodes, ///
|
|
46
|
+
nestedNode = nestNodes(nodes),
|
|
47
|
+
childNestedNodes = nestedNode.getChildNestedNodes(),
|
|
48
|
+
childNodes = childNestedNodes.map((childNestedNode) => {
|
|
49
|
+
const nestedHeadingMarkdownNode = childNestedNode, ///
|
|
50
|
+
contentsItemMarkdownNode = ContentsItemMarkdownNode.fromContentsListMarkdownNodeAndNestedHeadingMarkdownNode(ContentsListMarkdownNode, nestedHeadingMarkdownNode, context),
|
|
51
|
+
childNode = contentsItemMarkdownNode; ///
|
|
30
52
|
|
|
31
|
-
|
|
32
|
-
|
|
53
|
+
return childNode;
|
|
54
|
+
});
|
|
33
55
|
|
|
34
56
|
return childNodes;
|
|
35
57
|
}
|
|
58
|
+
|
|
59
|
+
function headingMarkdownNodesFromDivisionMarkdownNodeAndContentsMarkdownNode(divisionMarkdownNode, contentsMarkdownNode, context) {
|
|
60
|
+
const node = divisionMarkdownNode, ///
|
|
61
|
+
maximumLevel = contentsMarkdownNode.maximumLevel(context),
|
|
62
|
+
headingMarkdownNodes = headingMarkdownNodesFromNode(node);
|
|
63
|
+
|
|
64
|
+
filter(headingMarkdownNodes, (headingMarkdownNode) => {
|
|
65
|
+
const level = headingMarkdownNode.getLevel();
|
|
66
|
+
|
|
67
|
+
if (level <= maximumLevel) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
return headingMarkdownNodes;
|
|
73
|
+
}
|
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { arrayUtilities } from "necessary";
|
|
4
|
-
|
|
5
3
|
import MarkdownNode from "../../node/markdown";
|
|
6
4
|
import ContentsListMarkdownNode from "../../node/markdown/contentsList";
|
|
5
|
+
import FootnotesListMarkdownNode from "../../node/markdown/footnotesList";
|
|
7
6
|
|
|
8
|
-
const { filter } = arrayUtilities;
|
|
9
|
-
|
|
10
|
-
import { nestNodes } from "../../utilities/tree";
|
|
11
7
|
import { replaceTokens } from "../../utilities/tokens";
|
|
12
|
-
import {
|
|
13
|
-
// import FootnotesListMarkdownNode from "../../node/markdown/footnotesList";
|
|
14
|
-
|
|
15
|
-
// import { renumberLinkMarkdownNodes, renumberLinkMarkdownNodesHTML, appendFootnotesListMarkdownNodeHTML } from "../../utilities/footnotes";
|
|
8
|
+
import { parentNodeFromNodeAndChildNode } from "../../utilities/node";
|
|
16
9
|
|
|
17
10
|
export default class DivisionMarkdownNode extends MarkdownNode {
|
|
18
11
|
constructor(ruleName, childNodes, precedence, opacity, domElement, divisionClassName) {
|
|
@@ -36,86 +29,51 @@ export default class DivisionMarkdownNode extends MarkdownNode {
|
|
|
36
29
|
}
|
|
37
30
|
|
|
38
31
|
createContents(context) {
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
if (contentsMarkdownNode === null) {
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const maximumLevel = contentsMarkdownNode.maximumLevel(context);
|
|
47
|
-
|
|
48
|
-
const headingMarkdownNodes = headingMarkdownNodesFromNodeAndMaximumLevel(node, maximumLevel, context),
|
|
49
|
-
headingMarkdownNodesLength = headingMarkdownNodes.length;
|
|
50
|
-
|
|
51
|
-
if (headingMarkdownNodesLength === 0) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const nodes = headingMarkdownNodes, ///
|
|
56
|
-
nestedNode = nestNodes(nodes),
|
|
57
|
-
childNestedNodes = nestedNode.getChildNestedNodes(),
|
|
58
|
-
replacementTokens = [];
|
|
32
|
+
const replacementTokens = [],
|
|
33
|
+
divisionMarkdownNode = this;
|
|
59
34
|
|
|
60
35
|
Object.assign(context, {
|
|
61
36
|
replacementTokens
|
|
62
37
|
});
|
|
63
38
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
replacedChildNode = contentsMarkdownNode; ///
|
|
39
|
+
ContentsListMarkdownNode.fromDivisionMarkdownNode(divisionMarkdownNode, context);
|
|
40
|
+
|
|
41
|
+
const { replacementChildNode = null, replacedChildNode = null } = context;
|
|
68
42
|
|
|
69
|
-
|
|
43
|
+
if ((replacementChildNode !== null) && (replacedChildNode !== null)) {
|
|
44
|
+
const node = this, ///
|
|
45
|
+
childNode = replacedChildNode, ///
|
|
46
|
+
parentNode = parentNodeFromNodeAndChildNode(node, childNode);
|
|
70
47
|
|
|
71
|
-
|
|
48
|
+
parentNode.replaceChildNode(replacedChildNode, replacementChildNode);
|
|
49
|
+
|
|
50
|
+
replaceTokens(replacedChildNode, replacementTokens, context);
|
|
51
|
+
}
|
|
72
52
|
|
|
73
53
|
delete context.replacementTokens;
|
|
54
|
+
delete context.replacedChildNode;
|
|
55
|
+
delete context.replacementChildNode;
|
|
74
56
|
}
|
|
75
57
|
|
|
76
58
|
createFootnotes(context) {
|
|
59
|
+
const replacementTokens = [],
|
|
60
|
+
divisionMarkdownNode = this; ///
|
|
77
61
|
|
|
78
|
-
|
|
62
|
+
Object.assign(context, {
|
|
63
|
+
replacementTokens
|
|
64
|
+
});
|
|
79
65
|
|
|
80
|
-
|
|
66
|
+
FootnotesListMarkdownNode.fromDivisionMarkdownNode(divisionMarkdownNode, context);
|
|
81
67
|
|
|
82
|
-
|
|
68
|
+
const { replacementChildNode = null } = context;
|
|
83
69
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
// if (contentsListMarkdownNode !== null) {
|
|
92
|
-
// childNodesHTML = replaceContentsMarkdownNodeHTML(childNodesHTML, divisionMarkdownNode, contentsListMarkdownNode, context);
|
|
93
|
-
// }
|
|
94
|
-
//
|
|
95
|
-
// if (footnotesListMarkdownNode !== null) {
|
|
96
|
-
// childNodesHTML = renumberLinkMarkdownNodesHTML(childNodesHTML, divisionMarkdownNode, footnotesListMarkdownNode, context);
|
|
97
|
-
//
|
|
98
|
-
// childNodesHTML = appendFootnotesListMarkdownNodeHTML(childNodesHTML, footnotesListMarkdownNode, indent, context);
|
|
99
|
-
// }
|
|
100
|
-
//
|
|
101
|
-
// return childNodesHTML;
|
|
102
|
-
// }
|
|
103
|
-
|
|
104
|
-
// createChildNodeDOMElements(context) {
|
|
105
|
-
// const divisionMarkdownNode = this, ///
|
|
106
|
-
// footnotesListMarkdownNode = FootnotesListMarkdownNode.fromDivisionMarkdownNode(divisionMarkdownNode, context);
|
|
107
|
-
//
|
|
108
|
-
// super.createChildNodeDOMElements(context);
|
|
109
|
-
//
|
|
110
|
-
// if (footnotesListMarkdownNode !== null) {
|
|
111
|
-
// const footnotesListMarkdownNodeDOMElement = footnotesListMarkdownNode.createDOMElement(context),
|
|
112
|
-
// childNodeDOMElement = footnotesListMarkdownNodeDOMElement; ///
|
|
113
|
-
//
|
|
114
|
-
// this.insertDOMElement(childNodeDOMElement);
|
|
115
|
-
//
|
|
116
|
-
// renumberLinkMarkdownNodes(divisionMarkdownNode, footnotesListMarkdownNode, context);
|
|
117
|
-
// }
|
|
118
|
-
// }
|
|
70
|
+
if (replacementChildNode !== null) {
|
|
71
|
+
const childNode = replacementChildNode, ///
|
|
72
|
+
parentNode = this; ///
|
|
73
|
+
|
|
74
|
+
parentNode.addChildNode(childNode);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
119
77
|
|
|
120
78
|
clone() {
|
|
121
79
|
debugger
|
|
@@ -128,17 +86,3 @@ export default class DivisionMarkdownNode extends MarkdownNode {
|
|
|
128
86
|
return divisionMarkdownNode;
|
|
129
87
|
}
|
|
130
88
|
}
|
|
131
|
-
|
|
132
|
-
function headingMarkdownNodesFromNodeAndMaximumLevel(node, maximumLevel) {
|
|
133
|
-
const headingMarkdownNodes = headingMarkdownNodesFromNode(node);
|
|
134
|
-
|
|
135
|
-
filter(headingMarkdownNodes, (headingMarkdownNode) => {
|
|
136
|
-
const level = headingMarkdownNode.getLevel();
|
|
137
|
-
|
|
138
|
-
if (level <= maximumLevel) {
|
|
139
|
-
return true;
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
return headingMarkdownNodes;
|
|
144
|
-
}
|
|
@@ -83,9 +83,9 @@ class EmailLinkMarkdownNode extends MarkdownNode {
|
|
|
83
83
|
const inlineText = this.inlineText(context),
|
|
84
84
|
content = (inlineText !== null) ?
|
|
85
85
|
inlineText :
|
|
86
|
-
this.content(context)
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
this.content(context),
|
|
87
|
+
textNode = document.createTextNode(content),
|
|
88
|
+
childNodeDOMElement = textNode; ///
|
|
89
89
|
|
|
90
90
|
this.insertDOMElement(childNodeDOMElement);
|
|
91
91
|
}
|
|
@@ -13,7 +13,8 @@ export default class EndOfLineMarkdownNode extends MarkdownNode {
|
|
|
13
13
|
|
|
14
14
|
createDOMElement(context) {
|
|
15
15
|
const content = EMPTY_STRING, ///
|
|
16
|
-
|
|
16
|
+
textNode = document.createTextNode(content),
|
|
17
|
+
domElement = textNode; ///
|
|
17
18
|
|
|
18
19
|
this.setDOMElement(domElement);
|
|
19
20
|
|
|
@@ -13,7 +13,8 @@ class ErrorMarkdownNode extends MarkdownNode {
|
|
|
13
13
|
|
|
14
14
|
createChildNodeDOMElements(context) {
|
|
15
15
|
const content = this.content(context),
|
|
16
|
-
|
|
16
|
+
textNode = document.createTextNode(content),
|
|
17
|
+
childNodeDOMElement = textNode; ///
|
|
17
18
|
|
|
18
19
|
this.insertDOMElement(childNodeDOMElement);
|
|
19
20
|
}
|