highmark-markdown 0.0.225 → 0.0.228
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 +1003 -565
- package/lib/clonedNode.js +142 -0
- package/lib/elementMap.js +4 -1
- package/lib/example/view/div/preview.js +6 -4
- package/lib/example/view/xmp.js +12 -4
- package/lib/example/view.js +30 -15
- package/lib/markdown/bnf.js +2 -2
- package/lib/node/markdown/contentsItem.js +14 -2
- package/lib/node/markdown/contentsLink.js +48 -65
- package/lib/node/markdown/contentsList.js +30 -6
- package/lib/node/markdown/division.js +26 -23
- package/lib/node/markdown/ignore.js +120 -0
- package/lib/node/markdown/import.js +14 -17
- package/lib/node/markdown/link.js +30 -1
- package/lib/node/markdown.js +3 -4
- package/lib/nodeMap.js +3 -2
- package/lib/ruleNames.js +6 -1
- package/lib/style/selector.js +76 -30
- package/lib/utilities/query.js +10 -2
- package/lib/utilities/replace.js +57 -0
- package/package.json +5 -5
- package/src/clonedNode.js +146 -0
- package/src/elementMap.js +5 -0
- package/src/example/view/div/preview.js +6 -4
- package/src/example/view/xmp.js +14 -4
- package/src/example/view.js +41 -29
- package/src/markdown/bnf.js +6 -1
- package/src/node/markdown/contentsItem.js +11 -0
- package/src/node/markdown/contentsLink.js +26 -114
- package/src/node/markdown/contentsList.js +37 -6
- package/src/node/markdown/division.js +40 -38
- package/src/node/markdown/ignore.js +7 -0
- package/src/node/markdown/import.js +19 -26
- package/src/node/markdown/link.js +2 -0
- package/src/node/markdown.js +2 -4
- package/src/nodeMap.js +3 -0
- package/src/ruleNames.js +2 -0
- package/src/style/selector.js +33 -27
- package/src/utilities/query.js +8 -0
- package/src/utilities/{tokens.js → replace.js} +9 -3
- package/lib/utilities/tokens.js +0 -45
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { arrayUtilities } from "necessary";
|
|
4
4
|
|
|
5
|
+
import ClonedNode from "../../clonedNode";
|
|
5
6
|
import MarkdownNode from "../../node/markdown";
|
|
6
7
|
|
|
7
8
|
import { HREF_ATTRIBUTE_NAME } from "../../attributeNames";
|
|
@@ -10,12 +11,20 @@ import { CONTENTS_LINK_RULE_NAME } from "../../ruleNames";
|
|
|
10
11
|
const { push } = arrayUtilities;
|
|
11
12
|
|
|
12
13
|
export default class ContentsLinkMarkdownNode extends MarkdownNode {
|
|
13
|
-
constructor(ruleName, childNodes, opacity, precedence, domElement, identifier) {
|
|
14
|
-
super(ruleName, childNodes, opacity, precedence, domElement);
|
|
14
|
+
constructor(ruleName, childNodes, opacity, precedence, domElement, tokens, identifier) {
|
|
15
|
+
super(ruleName, childNodes, opacity, precedence, tokens, domElement);
|
|
16
|
+
|
|
17
|
+
this.tokens = tokens;
|
|
15
18
|
|
|
16
19
|
this.identifier = identifier;
|
|
17
20
|
}
|
|
18
21
|
|
|
22
|
+
getTokens(tokens = []) {
|
|
23
|
+
push(tokens, this.tokens);
|
|
24
|
+
|
|
25
|
+
return tokens;
|
|
26
|
+
}
|
|
27
|
+
|
|
19
28
|
getIdentifier() {
|
|
20
29
|
return this.identifier;
|
|
21
30
|
}
|
|
@@ -32,6 +41,16 @@ export default class ContentsLinkMarkdownNode extends MarkdownNode {
|
|
|
32
41
|
return attributeValue;
|
|
33
42
|
}
|
|
34
43
|
|
|
44
|
+
clone() {
|
|
45
|
+
const tokens = this.tokens.map((token) => {
|
|
46
|
+
token = token.clone(); ///
|
|
47
|
+
|
|
48
|
+
return token;
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
return super.clone(tokens, this.identifier);
|
|
52
|
+
}
|
|
53
|
+
|
|
35
54
|
static fromNestedHeadingMarkdownNode(nestedHeadingMarkdownNode, context) {
|
|
36
55
|
let contentsLinkMarkdownNode = null;
|
|
37
56
|
|
|
@@ -39,124 +58,17 @@ export default class ContentsLinkMarkdownNode extends MarkdownNode {
|
|
|
39
58
|
headingMarkdownNode = node; ///
|
|
40
59
|
|
|
41
60
|
if (headingMarkdownNode !== null) {
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
headingMarkdownNodeChildNodes = childNodesFromNode(headingMarkdownNode);
|
|
46
|
-
|
|
47
|
-
push(replacementTokens, headingMarkdownNodeTokens);
|
|
48
|
-
|
|
49
|
-
replaceChildNodesTokens(headingMarkdownNodeChildNodes, headingMarkdownNodeTokens, headingMarkdownNodeOffset, context);
|
|
50
|
-
|
|
51
|
-
const childNodes = headingMarkdownNodeChildNodes, ///
|
|
61
|
+
const node = headingMarkdownNode, ///
|
|
62
|
+
clonedNode = ClonedNode.fromNode(node, context),
|
|
63
|
+
childNodes = clonedNode.getChildNodes(),
|
|
52
64
|
ruleName = CONTENTS_LINK_RULE_NAME,
|
|
53
65
|
opacity = null,
|
|
66
|
+
tokens = clonedNode.getTokens(),
|
|
54
67
|
identifier = headingMarkdownNode.identifier(context);
|
|
55
68
|
|
|
56
|
-
contentsLinkMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsLinkMarkdownNode, ruleName, childNodes, opacity, identifier);
|
|
69
|
+
contentsLinkMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsLinkMarkdownNode, ruleName, childNodes, opacity, tokens, identifier);
|
|
57
70
|
}
|
|
58
71
|
|
|
59
72
|
return contentsLinkMarkdownNode;
|
|
60
73
|
}
|
|
61
74
|
}
|
|
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
|
-
}
|
|
@@ -3,20 +3,51 @@
|
|
|
3
3
|
import MarkdownNode from "../../node/markdown";
|
|
4
4
|
import ContentsItemMarkdownNode from "../../node/markdown/contentsItem";
|
|
5
5
|
|
|
6
|
+
import { nestNodes } from "../../utilities/contents";
|
|
6
7
|
import { CONTENTS_LIST_RULE_NAME } from "../../ruleNames";
|
|
7
8
|
|
|
8
9
|
export default class ContentsListMarkdownNode extends MarkdownNode {
|
|
10
|
+
getTokens(tokens = []) {
|
|
11
|
+
const childNodes = this.getChildNodes(),
|
|
12
|
+
contentsItemMarkdownNodes = childNodes; ///
|
|
13
|
+
|
|
14
|
+
contentsItemMarkdownNodes.forEach((contentsItemMarkdownNode) => {
|
|
15
|
+
contentsItemMarkdownNode.getTokens(tokens);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
return tokens;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
static fromHeadingMarkdownNodes(headingMarkdownNodes, context) {
|
|
22
|
+
const nodes = headingMarkdownNodes, ///
|
|
23
|
+
nestedNode = nestNodes(nodes),
|
|
24
|
+
childNestedNodes = nestedNode.getChildNestedNodes(),
|
|
25
|
+
nestedHeadingMarkdownNodes = childNestedNodes, ///
|
|
26
|
+
ruleName = CONTENTS_LIST_RULE_NAME,
|
|
27
|
+
childNodes = childNodesFromNestedHeadingMarkdownNodes(nestedHeadingMarkdownNodes, context),
|
|
28
|
+
opacity = null,
|
|
29
|
+
contentsListMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsListMarkdownNode, ruleName, childNodes, opacity);
|
|
30
|
+
|
|
31
|
+
return contentsListMarkdownNode;
|
|
32
|
+
}
|
|
33
|
+
|
|
9
34
|
static fromNestedHeadingMarkdownNodes(nestedHeadingMarkdownNodes, context) {
|
|
10
35
|
const ruleName = CONTENTS_LIST_RULE_NAME,
|
|
11
|
-
childNodes = nestedHeadingMarkdownNodes
|
|
12
|
-
const contentsItemMarkdownNode = ContentsItemMarkdownNode.fromContentsListMarkdownNodeAndNestedHeadingMarkdownNode(ContentsListMarkdownNode, nestedHeadingMarkdownNode, context),
|
|
13
|
-
childNode = contentsItemMarkdownNode; ///
|
|
14
|
-
|
|
15
|
-
return childNode;
|
|
16
|
-
}),
|
|
36
|
+
childNodes = childNodesFromNestedHeadingMarkdownNodes(nestedHeadingMarkdownNodes, context),
|
|
17
37
|
opacity = null,
|
|
18
38
|
contentsListMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsListMarkdownNode, ruleName, childNodes, opacity);
|
|
19
39
|
|
|
20
40
|
return contentsListMarkdownNode;
|
|
21
41
|
}
|
|
22
42
|
}
|
|
43
|
+
|
|
44
|
+
function childNodesFromNestedHeadingMarkdownNodes(nestedHeadingMarkdownNodes, context) {
|
|
45
|
+
const childNodes = nestedHeadingMarkdownNodes.map((nestedHeadingMarkdownNode) => {
|
|
46
|
+
const contentsItemMarkdownNode = ContentsItemMarkdownNode.fromContentsListMarkdownNodeAndNestedHeadingMarkdownNode(ContentsListMarkdownNode, nestedHeadingMarkdownNode, context),
|
|
47
|
+
childNode = contentsItemMarkdownNode; ///
|
|
48
|
+
|
|
49
|
+
return childNode;
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
return childNodes;
|
|
53
|
+
}
|
|
@@ -6,10 +6,9 @@ import MarkdownNode from "../../node/markdown";
|
|
|
6
6
|
import ContentsListMarkdownNode from "../../node/markdown/contentsList";
|
|
7
7
|
import FootnotesListMarkdownNode from "../../node/markdown/footnotesList";
|
|
8
8
|
|
|
9
|
-
import { nestNodes } from "../../utilities/contents";
|
|
10
|
-
import { replaceTokens } from "../../utilities/tokens";
|
|
11
9
|
import { renumberLinkMarkdownNodes } from "../../utilities/footnotes";
|
|
12
|
-
import {
|
|
10
|
+
import { replaceNode, replaceTokens } from "../../utilities/replace";
|
|
11
|
+
import { ignoreMarkdownNodeFromNode, headingMarkdownNodesFromNode, contentsMarkdownNodeFromNode, footnotesMarkdownNodesFromNode } from "../../utilities/query";
|
|
13
12
|
|
|
14
13
|
const { filter } = arrayUtilities;
|
|
15
14
|
|
|
@@ -34,6 +33,14 @@ export default class DivisionMarkdownNode extends MarkdownNode {
|
|
|
34
33
|
return className;
|
|
35
34
|
}
|
|
36
35
|
|
|
36
|
+
isIgnored() {
|
|
37
|
+
const node = this,
|
|
38
|
+
ignoreMarkdownNode = ignoreMarkdownNodeFromNode(node),
|
|
39
|
+
ignored = (ignoreMarkdownNode !== null);
|
|
40
|
+
|
|
41
|
+
return ignored;
|
|
42
|
+
}
|
|
43
|
+
|
|
37
44
|
findParentNode(childNode, node = this) {
|
|
38
45
|
let parentNode = null;
|
|
39
46
|
|
|
@@ -63,53 +70,48 @@ export default class DivisionMarkdownNode extends MarkdownNode {
|
|
|
63
70
|
}
|
|
64
71
|
|
|
65
72
|
createContents(context) {
|
|
73
|
+
let contentsCreated = false;
|
|
74
|
+
|
|
66
75
|
const node = this, ///
|
|
67
76
|
contentsMarkdownNode = contentsMarkdownNodeFromNode(node);
|
|
68
77
|
|
|
69
|
-
if (contentsMarkdownNode
|
|
70
|
-
|
|
71
|
-
|
|
78
|
+
if (contentsMarkdownNode !== null) {
|
|
79
|
+
const headingMarkdownNodes = headingMarkdownNodesFromNode(node),
|
|
80
|
+
minimumPosition = contentsMarkdownNode.minimumPosition(context),
|
|
81
|
+
maximumLevel = contentsMarkdownNode.maximumLevel(context);
|
|
72
82
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
83
|
+
filter(headingMarkdownNodes, (headingMarkdownNode) => {
|
|
84
|
+
const level = headingMarkdownNode.getLevel(),
|
|
85
|
+
position = headingMarkdownNode.position(context);
|
|
76
86
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
87
|
+
if ((level <= maximumLevel) && (position > minimumPosition)) {
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
});
|
|
80
91
|
|
|
81
|
-
|
|
82
|
-
return true;
|
|
83
|
-
}
|
|
84
|
-
});
|
|
92
|
+
const headingMarkdownNodesLength = headingMarkdownNodes.length;
|
|
85
93
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
const nodes = headingMarkdownNodes, ///
|
|
93
|
-
nestedNode = nestNodes(nodes),
|
|
94
|
-
childNestedNodes = nestedNode.getChildNestedNodes(),
|
|
95
|
-
replacementTokens = [],
|
|
96
|
-
nestedHeadingMarkdownNodes = childNestedNodes; ///
|
|
94
|
+
if (headingMarkdownNodesLength === 0) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
97
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
const {tokens} = context,
|
|
99
|
+
contentsListMarkdownNode = ContentsListMarkdownNode.fromHeadingMarkdownNodes(headingMarkdownNodes, context),
|
|
100
|
+
contentsListMarkdownNodeTokens = contentsListMarkdownNode.getTokens(),
|
|
101
|
+
childNode = contentsMarkdownNode, ///
|
|
102
|
+
parentNode = this.findParentNode(childNode),
|
|
103
|
+
replacedNode = contentsMarkdownNode, ///
|
|
104
|
+
replacementNode = contentsListMarkdownNode, ///
|
|
105
|
+
replacementTokens = contentsListMarkdownNodeTokens; ///
|
|
101
106
|
|
|
102
|
-
|
|
103
|
-
childNode = contentsMarkdownNode, ///
|
|
104
|
-
parentNode = this.findParentNode(childNode),
|
|
105
|
-
replacedChildNode = contentsMarkdownNode, ///
|
|
106
|
-
replacementChildNode = contentsListMarkdownNode; ///
|
|
107
|
+
replaceNode(replacementNode, replacedNode, parentNode);
|
|
107
108
|
|
|
108
|
-
|
|
109
|
+
replaceTokens(replacementTokens, replacedNode, tokens);
|
|
109
110
|
|
|
110
|
-
|
|
111
|
+
contentsCreated = true;
|
|
112
|
+
}
|
|
111
113
|
|
|
112
|
-
|
|
114
|
+
return contentsCreated;
|
|
113
115
|
}
|
|
114
116
|
|
|
115
117
|
createFootnotes(context) {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import MarkdownNode from "../../node/markdown";
|
|
4
|
+
|
|
5
|
+
export default class IgnoreMarkdownNode extends MarkdownNode {
|
|
6
|
+
static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(IgnoreMarkdownNode, ruleName, childNodes, opacity); }
|
|
7
|
+
}
|
|
@@ -4,49 +4,42 @@ import { arrayUtilities } from "necessary";
|
|
|
4
4
|
|
|
5
5
|
import MarkdownNode from "../../node/markdown";
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const { fourth } = arrayUtilities;
|
|
7
|
+
const { push, fourth } = arrayUtilities;
|
|
10
8
|
|
|
11
9
|
export default class ImportMarkdownNode extends MarkdownNode {
|
|
12
|
-
resolveImports(
|
|
10
|
+
resolveImports(context) {
|
|
13
11
|
let html = null;
|
|
14
12
|
|
|
15
13
|
const { importer = null } = context;
|
|
16
14
|
|
|
17
15
|
if (importer !== null) {
|
|
18
|
-
const
|
|
19
|
-
filePath = this.filePath(context);
|
|
16
|
+
const filePath = this.filePath(context);
|
|
20
17
|
|
|
21
18
|
importer(filePath, context);
|
|
22
19
|
|
|
23
|
-
const {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
Object.assign(context, {
|
|
28
|
-
tokens
|
|
29
|
-
});
|
|
20
|
+
const { importedNode = null,
|
|
21
|
+
importedTokens = null,
|
|
22
|
+
importedClassName = null } = context;
|
|
30
23
|
|
|
31
|
-
delete context.
|
|
32
|
-
delete context.
|
|
24
|
+
delete context.importedNode;
|
|
25
|
+
delete context.importedTokens;
|
|
26
|
+
delete context.importedClassName;
|
|
33
27
|
|
|
34
28
|
if (importedNode !== null) {
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
parentNode.replaceChildNode(replacedChildNode, replacementChildNode);
|
|
29
|
+
const { tokens, divisionMarkdownNodes } = context,
|
|
30
|
+
divisionMarkdownNode = importedNode, ///
|
|
31
|
+
divisionClassName = importedClassName, ///
|
|
32
|
+
ignored = divisionMarkdownNode.isIgnored();
|
|
40
33
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
parentNode = this; ///
|
|
34
|
+
divisionMarkdownNode.setDivisionClassName(divisionClassName);
|
|
44
35
|
|
|
45
|
-
|
|
36
|
+
if (!ignored) {
|
|
37
|
+
push(tokens, importedTokens);
|
|
46
38
|
|
|
47
|
-
|
|
39
|
+
divisionMarkdownNodes.push(divisionMarkdownNode);
|
|
40
|
+
}
|
|
48
41
|
|
|
49
|
-
divisionMarkdownNode.resolveImports(
|
|
42
|
+
divisionMarkdownNode.resolveImports(context);
|
|
50
43
|
}
|
|
51
44
|
}
|
|
52
45
|
|
|
@@ -70,6 +70,8 @@ export default class LinkMarkdownNode extends MarkdownNode {
|
|
|
70
70
|
this.addDOMElement(domElement);
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
+
clone() { return super.clone(this.number); }
|
|
74
|
+
|
|
73
75
|
static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) {
|
|
74
76
|
const number = null,
|
|
75
77
|
linkMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(LinkMarkdownNode, ruleName, childNodes, opacity, number);
|
package/src/node/markdown.js
CHANGED
|
@@ -94,9 +94,7 @@ class MarkdownNode extends NonTerminalNode {
|
|
|
94
94
|
return attributeValue;
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
resolveImports(
|
|
98
|
-
parentNode = this; ///\
|
|
99
|
-
|
|
97
|
+
resolveImports(context) {
|
|
100
98
|
const childNodes = this.getChildNodes();
|
|
101
99
|
|
|
102
100
|
childNodes.forEach((childNode) => {
|
|
@@ -106,7 +104,7 @@ class MarkdownNode extends NonTerminalNode {
|
|
|
106
104
|
const nonTerminalNode = childNode, ///
|
|
107
105
|
markdownNode = nonTerminalNode; ///
|
|
108
106
|
|
|
109
|
-
markdownNode.resolveImports(
|
|
107
|
+
markdownNode.resolveImports(context);
|
|
110
108
|
}
|
|
111
109
|
});
|
|
112
110
|
}
|
package/src/nodeMap.js
CHANGED
|
@@ -8,6 +8,7 @@ import ErrorMarkdownNode from "./node/markdown/error";
|
|
|
8
8
|
import AnchorMarkdownNode from "./node/markdown/anchor";
|
|
9
9
|
import MarkerMarkdownNode from "./node/markdown/marker";
|
|
10
10
|
import BulletMarkdownNode from "./node/markdown/bullet";
|
|
11
|
+
import IgnoreMarkdownNode from "./node/markdown/ignore";
|
|
11
12
|
import ImportMarkdownNode from "./node/markdown/import";
|
|
12
13
|
import ImportsMarkdownNode from "./node/markdown/imports";
|
|
13
14
|
import ContentsMarkdownNode from "./node/markdown/contents";
|
|
@@ -61,6 +62,7 @@ import { LINK_RULE_NAME,
|
|
|
61
62
|
ANCHOR_RULE_NAME,
|
|
62
63
|
MARKER_RULE_NAME,
|
|
63
64
|
BULLET_RULE_NAME,
|
|
65
|
+
IGNORE_RULE_NAME,
|
|
64
66
|
IMPORT_RULE_NAME,
|
|
65
67
|
IMPORTS_RULE_NAME,
|
|
66
68
|
CONTENTS_RULE_NAME,
|
|
@@ -115,6 +117,7 @@ const nodeMap = {
|
|
|
115
117
|
[ANCHOR_RULE_NAME]: AnchorMarkdownNode,
|
|
116
118
|
[MARKER_RULE_NAME]: MarkerMarkdownNode,
|
|
117
119
|
[BULLET_RULE_NAME]: BulletMarkdownNode,
|
|
120
|
+
[IGNORE_RULE_NAME]: IgnoreMarkdownNode,
|
|
118
121
|
[IMPORT_RULE_NAME]: ImportMarkdownNode,
|
|
119
122
|
[IMPORTS_RULE_NAME]: ImportsMarkdownNode,
|
|
120
123
|
[CONTENTS_RULE_NAME]: ContentsMarkdownNode,
|
package/src/ruleNames.js
CHANGED
|
@@ -8,6 +8,7 @@ export const ERROR_RULE_NAME = "error";
|
|
|
8
8
|
export const ANCHOR_RULE_NAME = "anchor";
|
|
9
9
|
export const MARKER_RULE_NAME = "marker";
|
|
10
10
|
export const BULLET_RULE_NAME = "bullet";
|
|
11
|
+
export const IGNORE_RULE_NAME = "ignore";
|
|
11
12
|
export const IMPORT_RULE_NAME = "import";
|
|
12
13
|
export const IMPORTS_RULE_NAME = "imports";
|
|
13
14
|
export const CONTENTS_RULE_NAME = "contents";
|
|
@@ -65,6 +66,7 @@ const ruleNames = {
|
|
|
65
66
|
ANCHOR_RULE_NAME,
|
|
66
67
|
MARKER_RULE_NAME,
|
|
67
68
|
BULLET_RULE_NAME,
|
|
69
|
+
IGNORE_RULE_NAME,
|
|
68
70
|
IMPORT_RULE_NAME,
|
|
69
71
|
IMPORTS_RULE_NAME,
|
|
70
72
|
CONTENTS_RULE_NAME,
|
package/src/style/selector.js
CHANGED
|
@@ -5,6 +5,7 @@ import elementMap from "../elementMap";
|
|
|
5
5
|
|
|
6
6
|
import { nodeQuery } from "../utilities/query";
|
|
7
7
|
import { EMPTY_STRING } from "../constants";
|
|
8
|
+
import { DIVISION_RULE_NAME } from "../ruleNames";
|
|
8
9
|
import { remainingContentFromNodeTokensAndOffset } from "../utilities/content";
|
|
9
10
|
|
|
10
11
|
const { STRONG_TEXT_RULE_NAME,
|
|
@@ -62,47 +63,52 @@ function contentFromNodeAndTokens(node, tokens) {
|
|
|
62
63
|
const ruleNameTerminalNode = ruleNameTerminalNodeQuery(node);
|
|
63
64
|
|
|
64
65
|
if (ruleNameTerminalNode !== null) {
|
|
65
|
-
content = EMPTY_STRING;
|
|
66
|
-
|
|
67
66
|
const ruleNameTerminalNodeContent = ruleNameTerminalNode.getContent(),
|
|
68
|
-
ruleName = ruleNameTerminalNodeContent
|
|
69
|
-
ruleNameValuesIncludesRuleName = ruleNameValues.includes(ruleName);
|
|
67
|
+
ruleName = ruleNameTerminalNodeContent; ///
|
|
70
68
|
|
|
71
|
-
if (
|
|
72
|
-
|
|
69
|
+
if (ruleName === DIVISION_RULE_NAME) {
|
|
70
|
+
content = null;
|
|
71
|
+
} else {
|
|
72
|
+
content = EMPTY_STRING;
|
|
73
73
|
|
|
74
|
-
|
|
75
|
-
content = `${content}${tagName}`;
|
|
76
|
-
}
|
|
74
|
+
const ruleNameValuesIncludesRuleName = ruleNameValues.includes(ruleName);
|
|
77
75
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
content = `${orderedListTagName} > ${content}`;
|
|
76
|
+
if (ruleNameValuesIncludesRuleName) {
|
|
77
|
+
const { tagName, className } = elementMap[ruleName];
|
|
81
78
|
|
|
82
|
-
|
|
79
|
+
if (tagName !== null) {
|
|
80
|
+
content = `${content}${tagName}`;
|
|
83
81
|
}
|
|
84
82
|
|
|
85
|
-
|
|
86
|
-
|
|
83
|
+
switch (ruleName) {
|
|
84
|
+
case ORDERED_LIST_ITEM_RULE_NAME: {
|
|
85
|
+
content = `${orderedListTagName} > ${content}`;
|
|
87
86
|
|
|
88
|
-
|
|
89
|
-
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
case UNORDERED_LIST_ITEM_RULE_NAME: {
|
|
91
|
+
content = `${unorderedListTagName} > ${content}`;
|
|
92
|
+
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
90
95
|
|
|
91
|
-
|
|
92
|
-
|
|
96
|
+
case STRONGLY_EMPHASISED_TEXT_RULE_NAME: {
|
|
97
|
+
content = `${content} > ${strongTextTagName}`;
|
|
93
98
|
|
|
94
|
-
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
95
101
|
}
|
|
96
|
-
}
|
|
97
102
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
103
|
+
if (className !== null) {
|
|
104
|
+
content = `${content}.${className}`;
|
|
105
|
+
}
|
|
101
106
|
|
|
102
|
-
|
|
103
|
-
|
|
107
|
+
const offset = 1,
|
|
108
|
+
remainingContent = remainingContentFromNodeTokensAndOffset(node, tokens, offset);
|
|
104
109
|
|
|
105
|
-
|
|
110
|
+
content = `${content}${remainingContent}`;
|
|
111
|
+
}
|
|
106
112
|
}
|
|
107
113
|
} else {
|
|
108
114
|
const offset = 0,
|
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
|
+
ignoreMarkdownNodeQuery = Query.fromExpression(`//ignore`),
|
|
9
10
|
headingMarkdownNodesQuery = Query.fromExpression(`//primaryHeading|secondaryHeading|tertiaryHeading|quaternaryHeading`),
|
|
10
11
|
contentsMarkdownNodeQuery = Query.fromExpression(`//contents`),
|
|
11
12
|
footnoteMarkdownNodesQuery = Query.fromExpression(`//footnote`),
|
|
@@ -49,6 +50,12 @@ export function linkMarkdownNodesFromNode(node, linkMarkdownNodes = []) {
|
|
|
49
50
|
return linkMarkdownNodes;
|
|
50
51
|
}
|
|
51
52
|
|
|
53
|
+
export function ignoreMarkdownNodeFromNode(node) {
|
|
54
|
+
const ignoreMarkdownNode = nodeFromNodeAndQuery(node, ignoreMarkdownNodeQuery);
|
|
55
|
+
|
|
56
|
+
return ignoreMarkdownNode;
|
|
57
|
+
}
|
|
58
|
+
|
|
52
59
|
export function contentsMarkdownNodeFromNode(node) {
|
|
53
60
|
const contentsMarkdownNode = nodeFromNodeAndQuery(node, contentsMarkdownNodeQuery);
|
|
54
61
|
|
|
@@ -93,6 +100,7 @@ export function linkReferenceOrFootnotesMarkdownNodesFromNode(node, linkReferenc
|
|
|
93
100
|
|
|
94
101
|
export default {
|
|
95
102
|
linkMarkdownNodesFromNode,
|
|
103
|
+
ignoreMarkdownNodeFromNode,
|
|
96
104
|
contentsMarkdownNodeFromNode,
|
|
97
105
|
footnotesMarkdownNodeFromNode,
|
|
98
106
|
headingMarkdownNodesFromNode,
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
export function
|
|
4
|
-
const
|
|
5
|
-
|
|
3
|
+
export function replaceNode(replacementNode, replacedNode, parentNode) {
|
|
4
|
+
const replacedChildNode = replacedNode, ///
|
|
5
|
+
replacementChildNode = replacementNode; ///
|
|
6
|
+
|
|
7
|
+
parentNode.replaceChildNode(replacedChildNode, replacementChildNode);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function replaceTokens(replacementTokens, replacedNode, tokens) {
|
|
11
|
+
const nonTerminalNode = replacedNode, ///
|
|
6
12
|
lastSignificantToken = nonTerminalNode.getLastSignificantToken(),
|
|
7
13
|
firstSignificantToken = nonTerminalNode.getFirstSignificantToken(),
|
|
8
14
|
lastSignificantTokenIndex = tokens.indexOf(lastSignificantToken),
|