highmark-markdown 0.0.2 → 0.0.4
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 +752 -618
- package/lib/example/view/textarea/bnf.js +3 -10
- package/lib/example/view/textarea/lexicalEntries.js +3 -16
- package/lib/example/view/textarea/parseTree.js +3 -3
- package/lib/example/view/{div/previewPane.js → xmp.js} +13 -65
- package/lib/example/view.js +11 -19
- package/lib/mixins/content.js +5 -5
- package/lib/node/markdown/anchor.js +12 -29
- package/lib/node/markdown/blockListing.js +32 -5
- package/lib/node/markdown/blockText.js +9 -2
- package/lib/node/markdown/document.js +26 -5
- package/lib/node/markdown/endOfLine.js +11 -4
- package/lib/node/markdown/error.js +9 -34
- package/lib/node/markdown/footnote.js +4 -4
- package/lib/node/markdown/footnoteItem.js +3 -3
- package/lib/node/markdown/footnotesList.js +10 -10
- package/lib/node/markdown/hyperlink.js +20 -38
- package/lib/node/markdown/image.js +27 -38
- package/lib/node/markdown/inlineListing.js +2 -12
- package/lib/node/markdown/inlineText.js +9 -2
- package/lib/node/markdown/line.js +11 -4
- package/lib/node/markdown/link.js +24 -48
- package/lib/node/markdown/orderedList.js +9 -33
- package/lib/node/markdown/orderedListItem.js +3 -3
- package/lib/node/markdown/reference.js +4 -4
- package/lib/node/markdown/stronglyEmphasisedText.js +12 -3
- package/lib/node/markdown/tableBodyCell.js +8 -1
- package/lib/node/markdown/tableCell.js +31 -8
- package/lib/node/markdown/tableHeadCell.js +8 -1
- package/lib/node/markdown/text.js +3 -3
- package/lib/node/markdown/verticalSpace.js +9 -5
- package/lib/node/markdown.js +109 -14
- package/lib/ruleNameToHTMLMap.js +2 -2
- package/lib/utilities/childNodes.js +53 -4
- package/lib/utilities/link.js +32 -6
- package/lib/utilities/string.js +52 -0
- package/package.json +1 -1
- package/src/example/view/textarea/bnf.js +2 -10
- package/src/example/view/textarea/lexicalEntries.js +2 -18
- package/src/example/view/textarea/parseTree.js +2 -2
- package/src/example/view/xmp.js +28 -0
- package/src/example/view.js +26 -35
- package/src/mixins/content.js +2 -2
- package/src/node/markdown/anchor.js +8 -6
- package/src/node/markdown/blockListing.js +9 -3
- package/src/node/markdown/blockText.js +8 -1
- package/src/node/markdown/document.js +30 -5
- package/src/node/markdown/endOfLine.js +9 -2
- package/src/node/markdown/error.js +12 -11
- package/src/node/markdown/footnote.js +2 -2
- package/src/node/markdown/footnoteItem.js +1 -1
- package/src/node/markdown/footnotesList.js +11 -9
- package/src/node/markdown/hyperlink.js +21 -20
- package/src/node/markdown/image.js +25 -17
- package/src/node/markdown/inlineListing.js +0 -13
- package/src/node/markdown/inlineText.js +8 -1
- package/src/node/markdown/line.js +14 -6
- package/src/node/markdown/link.js +24 -25
- package/src/node/markdown/orderedList.js +7 -11
- package/src/node/markdown/orderedListItem.js +1 -1
- package/src/node/markdown/reference.js +4 -4
- package/src/node/markdown/stronglyEmphasisedText.js +14 -4
- package/src/node/markdown/tableBodyCell.js +9 -0
- package/src/node/markdown/tableCell.js +36 -7
- package/src/node/markdown/tableHeadCell.js +9 -0
- package/src/node/markdown/text.js +1 -1
- package/src/node/markdown/verticalSpace.js +7 -8
- package/src/node/markdown.js +148 -11
- package/src/ruleNameToHTMLMap.js +1 -1
- package/src/utilities/childNodes.js +62 -0
- package/src/utilities/link.js +48 -5
- package/src/utilities/string.js +55 -0
- package/src/example/view/div/previewPane.js +0 -82
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import withStyle from "easy-with-style";
|
|
4
|
+
|
|
5
|
+
import { Element } from "easy";
|
|
6
|
+
|
|
7
|
+
class XMP extends Element {
|
|
8
|
+
parentContext() {
|
|
9
|
+
const xmpHTML = this.html.bind(this); ///
|
|
10
|
+
|
|
11
|
+
return ({
|
|
12
|
+
xmpHTML
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
static tagName = "xmp";
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export default withStyle(XMP)`
|
|
20
|
+
|
|
21
|
+
width: 100%;
|
|
22
|
+
border: 1px solid darkgrey;
|
|
23
|
+
padding: 0.25rem;
|
|
24
|
+
font-size: 1.2rem;
|
|
25
|
+
line-height: 1.5rem;
|
|
26
|
+
font-family: monospace;
|
|
27
|
+
|
|
28
|
+
`;
|
package/src/example/view.js
CHANGED
|
@@ -3,24 +3,24 @@
|
|
|
3
3
|
import withStyle from "easy-with-style"; ///
|
|
4
4
|
|
|
5
5
|
import { Element } from "easy";
|
|
6
|
-
import { parserUtilities } from "occam-parsers";
|
|
7
6
|
import { RowDiv, RowsDiv, ColumnDiv, ColumnsDiv, VerticalSplitterDiv, HorizontalSplitterDiv } from "easy-layout";
|
|
8
7
|
|
|
8
|
+
import XMP from "./view/xmp";
|
|
9
9
|
import SubHeading from "./view/subHeading";
|
|
10
10
|
import BNFTextarea from "./view/textarea/bnf";
|
|
11
|
-
import PreviewPaneDiv from "./view/div/previewPane";
|
|
12
11
|
import LeftSizeableDiv from "./view/div/sizeable/left";
|
|
13
12
|
import RightSizeableDiv from "./view/div/sizeable/right";
|
|
14
13
|
import MarkdownTextarea from "./view/textarea/markdown";
|
|
15
14
|
import ParseTreeTextarea from "./view/textarea/parseTree";
|
|
16
15
|
import LexicalEntriesTextarea from "./view/textarea/lexicalEntries";
|
|
17
16
|
|
|
18
|
-
import {
|
|
17
|
+
import { MarkdownLexer, MarkdownParser } from "../index";
|
|
19
18
|
|
|
20
19
|
const { bnf } = MarkdownParser,
|
|
21
|
-
{ entries } = MarkdownLexer
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
{ entries } = MarkdownLexer;
|
|
21
|
+
|
|
22
|
+
const markdownLexer = MarkdownLexer.fromNothing(),
|
|
23
|
+
markdownParser = MarkdownParser.fromNothing();
|
|
24
24
|
|
|
25
25
|
class View extends Element {
|
|
26
26
|
keyUpHandler = (event, element) => {
|
|
@@ -28,23 +28,23 @@ class View extends Element {
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
update() {
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
lexer = lexerFromLexicalEntries(lexicalEntries),
|
|
37
|
-
parser = parserFromRules(rules),
|
|
38
|
-
content = markdown; ///
|
|
39
|
-
|
|
40
|
-
const tokens = lexer.tokenise(content),
|
|
31
|
+
const markdown = this.getMarkdown(),
|
|
32
|
+
lexer = markdownLexer, ///
|
|
33
|
+
parser = markdownParser, ///
|
|
34
|
+
content = markdown, ///
|
|
35
|
+
tokens = lexer.tokenise(content),
|
|
41
36
|
node = parser.parse(tokens);
|
|
42
37
|
|
|
43
|
-
this.updatePreviewPaneDiv(node, tokens);
|
|
44
|
-
|
|
45
38
|
let parseTree = null;
|
|
46
39
|
|
|
47
40
|
if (node !== null) {
|
|
41
|
+
const context = {
|
|
42
|
+
tokens
|
|
43
|
+
},
|
|
44
|
+
html = node.asHTML(context);
|
|
45
|
+
|
|
46
|
+
this.xmpHTML(html);
|
|
47
|
+
|
|
48
48
|
parseTree = node.asParseTree(tokens);
|
|
49
49
|
}
|
|
50
50
|
|
|
@@ -73,7 +73,7 @@ class View extends Element {
|
|
|
73
73
|
<ColumnDiv>
|
|
74
74
|
<RowsDiv>
|
|
75
75
|
<RightSizeableDiv>
|
|
76
|
-
<
|
|
76
|
+
<XMP/>
|
|
77
77
|
</RightSizeableDiv>
|
|
78
78
|
<HorizontalSplitterDiv/>
|
|
79
79
|
<RowDiv>
|
|
@@ -107,7 +107,13 @@ class View extends Element {
|
|
|
107
107
|
this.update();
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
static initialMarkdown = `
|
|
110
|
+
static initialMarkdown = `A paragraph...
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
Another paragraph!
|
|
114
|
+
|
|
115
|
+
And yet another'
|
|
116
|
+
\`\`\`
|
|
111
117
|
`;
|
|
112
118
|
|
|
113
119
|
static tagName = "div";
|
|
@@ -122,18 +128,3 @@ export default withStyle(View)`
|
|
|
122
128
|
padding: 1rem;
|
|
123
129
|
|
|
124
130
|
`;
|
|
125
|
-
|
|
126
|
-
function lexerFromLexicalEntries(lexicalEntries) {
|
|
127
|
-
const entries = lexicalEntries, ///
|
|
128
|
-
lexer = MarkdownLexer.fromEntries(entries); ///
|
|
129
|
-
|
|
130
|
-
return lexer;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
function parserFromRules(rules) {
|
|
134
|
-
const parser = MarkdownParser.fromRules(rules); ///
|
|
135
|
-
|
|
136
|
-
setNonTerminalNodes(parser, nodeMap);
|
|
137
|
-
|
|
138
|
-
return parser;
|
|
139
|
-
}
|
package/src/mixins/content.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { contentFromMarkdownNodes } from "../utilities/content";
|
|
4
4
|
|
|
5
|
-
function
|
|
5
|
+
function content(context) {
|
|
6
6
|
const markdownNode = this, ///
|
|
7
7
|
markdownNodes = [
|
|
8
8
|
markdownNode
|
|
@@ -13,7 +13,7 @@ function getContent(context) {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
const contentMixins = {
|
|
16
|
-
|
|
16
|
+
content
|
|
17
17
|
};
|
|
18
18
|
|
|
19
19
|
export default contentMixins;
|
|
@@ -16,14 +16,16 @@ export default class AnchorMarkdownNode extends MarkdownNode {
|
|
|
16
16
|
return this.identifier;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
const
|
|
21
|
-
name = ID_ATTRIBUTE_NAME,
|
|
22
|
-
value = this.identifier;
|
|
19
|
+
attributeName() {
|
|
20
|
+
const attributeName = ID_ATTRIBUTE_NAME;
|
|
23
21
|
|
|
24
|
-
|
|
22
|
+
return attributeName;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
attributeValue(context) {
|
|
26
|
+
const attributeValue = this.identifier; ///
|
|
25
27
|
|
|
26
|
-
return
|
|
28
|
+
return attributeValue;
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
static fromIdentifier(identifier) {
|
|
@@ -7,20 +7,26 @@ import MarkdownNode from "../../node/markdown";
|
|
|
7
7
|
const { first, second } = arrayUtilities;
|
|
8
8
|
|
|
9
9
|
export default class BlockListingMarkdownNode extends MarkdownNode {
|
|
10
|
-
|
|
10
|
+
content(context) {
|
|
11
11
|
const childNodes = this.getChildNodes(),
|
|
12
12
|
secondChildNode = second(childNodes),
|
|
13
13
|
blockTextMarkdownNode = secondChildNode, ///
|
|
14
|
-
content = blockTextMarkdownNode;
|
|
14
|
+
content = blockTextMarkdownNode.content(context);
|
|
15
15
|
|
|
16
16
|
return content;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
getClassName() {
|
|
20
|
+
let className = super.getClassName();
|
|
21
|
+
|
|
20
22
|
const childNodes = this.getChildNodes(),
|
|
21
23
|
firstChildNode = first(childNodes),
|
|
22
24
|
blockListingStartMarkdownNode = firstChildNode, ///
|
|
23
|
-
|
|
25
|
+
blockListingStartMarkdownNodeClassName = blockListingStartMarkdownNode.getClassName();
|
|
26
|
+
|
|
27
|
+
if (blockListingStartMarkdownNodeClassName !== null) {
|
|
28
|
+
className = `${className} ${blockListingStartMarkdownNodeClassName}`;
|
|
29
|
+
}
|
|
24
30
|
|
|
25
31
|
return className;
|
|
26
32
|
}
|
|
@@ -5,8 +5,15 @@ import contentMixins from "../../mixins/content";
|
|
|
5
5
|
import MarkdownNode from "../markdown";
|
|
6
6
|
|
|
7
7
|
class BlockTextMarkdownNode extends MarkdownNode {
|
|
8
|
+
asHTML(indent, context) {
|
|
9
|
+
const content = this.content(context),
|
|
10
|
+
html = content; ///
|
|
11
|
+
|
|
12
|
+
return html;
|
|
13
|
+
}
|
|
14
|
+
|
|
8
15
|
createDOMElement(context) {
|
|
9
|
-
const content = this.
|
|
16
|
+
const content = this.content(context),
|
|
10
17
|
domElement = document.createTextNode(content);
|
|
11
18
|
|
|
12
19
|
this.setDOMElement(domElement);
|
|
@@ -3,21 +3,46 @@
|
|
|
3
3
|
import MarkdownNode from "../../node/markdown";
|
|
4
4
|
import FootnotesListMarkdownNode from "../../node/markdown/footnotesList";
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { EMPTY_STRING } from "../../constants";
|
|
7
|
+
import { renumberLinkMarkdownNodes, renumberLinkMarkdownNodesHTML } from "../../utilities/link";
|
|
7
8
|
|
|
8
9
|
export default class DocumentMarkdownNode extends MarkdownNode {
|
|
10
|
+
adjustIndent(indent) {
|
|
11
|
+
indent = EMPTY_STRING;
|
|
12
|
+
|
|
13
|
+
return indent;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
childNodesAsHTML(indent, context) {
|
|
17
|
+
const documentMarkdownNode = this, ///
|
|
18
|
+
footnotesListMarkdownNode = FootnotesListMarkdownNode.fromDocumentMarkdownNode(documentMarkdownNode, context);
|
|
19
|
+
|
|
20
|
+
let childNodesHTML = super.childNodesAsHTML(indent, context);
|
|
21
|
+
|
|
22
|
+
if (footnotesListMarkdownNode !== null) {
|
|
23
|
+
const footnotesListMarkdownNodeHTML = footnotesListMarkdownNode.asHTML(indent, context);
|
|
24
|
+
|
|
25
|
+
childNodesHTML = `${childNodesHTML}${footnotesListMarkdownNodeHTML}`;
|
|
26
|
+
|
|
27
|
+
childNodesHTML = renumberLinkMarkdownNodesHTML(childNodesHTML, documentMarkdownNode, footnotesListMarkdownNode, context);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return childNodesHTML;
|
|
31
|
+
}
|
|
32
|
+
|
|
9
33
|
createChildNodeDOMElements(context) {
|
|
10
34
|
const documentMarkdownNode = this, ///
|
|
11
|
-
footnotesListMarkdownNode = FootnotesListMarkdownNode.fromDocumentMarkdownNode(documentMarkdownNode);
|
|
35
|
+
footnotesListMarkdownNode = FootnotesListMarkdownNode.fromDocumentMarkdownNode(documentMarkdownNode, context);
|
|
12
36
|
|
|
13
37
|
super.createChildNodeDOMElements(context);
|
|
14
38
|
|
|
15
39
|
if (footnotesListMarkdownNode !== null) {
|
|
16
|
-
const
|
|
40
|
+
const footnotesListMarkdownNodeDOMElement = footnotesListMarkdownNode.createDOMElement(context),
|
|
41
|
+
childNodeDOMElement = footnotesListMarkdownNodeDOMElement; ///
|
|
17
42
|
|
|
18
|
-
this.insertDOMElement(
|
|
43
|
+
this.insertDOMElement(childNodeDOMElement);
|
|
19
44
|
|
|
20
|
-
renumberLinkMarkdownNodes(documentMarkdownNode, footnotesListMarkdownNode);
|
|
45
|
+
renumberLinkMarkdownNodes(documentMarkdownNode, footnotesListMarkdownNode, context);
|
|
21
46
|
}
|
|
22
47
|
}
|
|
23
48
|
|
|
@@ -3,8 +3,15 @@
|
|
|
3
3
|
import MarkdownNode from "../../node/markdown";
|
|
4
4
|
|
|
5
5
|
export default class EndOfLineMarkdownNode extends MarkdownNode {
|
|
6
|
+
asHTML(indent, context) {
|
|
7
|
+
const content = this.content(context),
|
|
8
|
+
html = content; ///
|
|
9
|
+
|
|
10
|
+
return html;
|
|
11
|
+
}
|
|
12
|
+
|
|
6
13
|
createDOMElement(context) {
|
|
7
|
-
const content = this.
|
|
14
|
+
const content = this.content(context),
|
|
8
15
|
domElement = document.createTextNode(content);
|
|
9
16
|
|
|
10
17
|
this.setDOMElement(domElement);
|
|
@@ -12,7 +19,7 @@ export default class EndOfLineMarkdownNode extends MarkdownNode {
|
|
|
12
19
|
return domElement;
|
|
13
20
|
}
|
|
14
21
|
|
|
15
|
-
|
|
22
|
+
content(context) {
|
|
16
23
|
const firstSignificantToken = this.getFirstSignificantToken(),
|
|
17
24
|
endOfLineToken = firstSignificantToken, ///
|
|
18
25
|
content = endOfLineToken.getContent();
|
|
@@ -7,23 +7,24 @@ import MarkdownNode from "../../node/markdown";
|
|
|
7
7
|
const { first } = arrayUtilities;
|
|
8
8
|
|
|
9
9
|
export default class ErrorMarkdownNode extends MarkdownNode {
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
textContent = content; ///
|
|
10
|
+
childNodesAsHTML(indent, context) {
|
|
11
|
+
const content = this.content(context),
|
|
12
|
+
childNodesHTML = content; ///
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
textContent
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
return domElement;
|
|
14
|
+
return childNodesHTML;
|
|
20
15
|
}
|
|
21
16
|
|
|
22
17
|
createChildNodeDOMElements(context) {
|
|
23
|
-
|
|
18
|
+
const content = this.content(context),
|
|
19
|
+
domElement = this.getDOMElement(),
|
|
20
|
+
parentDOMElement = domElement, ///
|
|
21
|
+
siblingDOMElement = null,
|
|
22
|
+
childNodeDOMElement = document.createTextNode(content);
|
|
23
|
+
|
|
24
|
+
parentDOMElement.insertBefore(childNodeDOMElement, siblingDOMElement);
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
|
|
27
|
+
content(context) {
|
|
27
28
|
const childNodes = this.getChildNodes(),
|
|
28
29
|
firstChildNode = first(childNodes),
|
|
29
30
|
terminalNode = firstChildNode, ///
|
|
@@ -7,11 +7,11 @@ import MarkdownNode from "../../node/markdown";
|
|
|
7
7
|
const { first } = arrayUtilities;
|
|
8
8
|
|
|
9
9
|
export default class FootnoteMarkdownNode extends MarkdownNode {
|
|
10
|
-
|
|
10
|
+
identifier(context) {
|
|
11
11
|
const childNodes = this.getChildNodes(),
|
|
12
12
|
firstChildNode = first(childNodes),
|
|
13
13
|
referenceMarkdownNode = firstChildNode, ///
|
|
14
|
-
referenceMarkdownNodeIdentifier = referenceMarkdownNode.
|
|
14
|
+
referenceMarkdownNodeIdentifier = referenceMarkdownNode.identifier(context),
|
|
15
15
|
identifier = referenceMarkdownNodeIdentifier; ///
|
|
16
16
|
|
|
17
17
|
return identifier;
|
|
@@ -10,7 +10,7 @@ import { FOOTNOTE_ITEM_RULE_NAME } from "../../ruleNames";
|
|
|
10
10
|
const { first, second } = arrayUtilities;
|
|
11
11
|
|
|
12
12
|
export default class FootnoteItemMarkdownNode extends MarkdownNode {
|
|
13
|
-
|
|
13
|
+
identifier(context) {
|
|
14
14
|
const childNodes = this.getChildNodes(),
|
|
15
15
|
firstChildNode = first(childNodes),
|
|
16
16
|
anchorMarkdownNode = firstChildNode, ///
|
|
@@ -8,11 +8,11 @@ import { FOOTNOTES_LIST_RULE_NAME } from "../../ruleNames";
|
|
|
8
8
|
import { linkMarkdownNodesFromNode, footnoteMarkdownNodesFromNode } from "../../utilities/query";
|
|
9
9
|
|
|
10
10
|
export default class FootnotesListMarkdownNode extends MarkdownNode {
|
|
11
|
-
|
|
11
|
+
identifiers(context) {
|
|
12
12
|
const childNodes = this.getChildNodes(),
|
|
13
13
|
footnoteItemMarkdownNodes = childNodes, ///
|
|
14
14
|
identifiers = footnoteItemMarkdownNodes.map((footnoteItemMarkdownNode) => {
|
|
15
|
-
const identifier = footnoteItemMarkdownNode.
|
|
15
|
+
const identifier = footnoteItemMarkdownNode.identifier(context);
|
|
16
16
|
|
|
17
17
|
return identifier;
|
|
18
18
|
});
|
|
@@ -20,10 +20,10 @@ export default class FootnotesListMarkdownNode extends MarkdownNode {
|
|
|
20
20
|
return identifiers;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
static fromDocumentMarkdownNode(documentMarkdownNode) {
|
|
23
|
+
static fromDocumentMarkdownNode(documentMarkdownNode, context) {
|
|
24
24
|
let footnotesListMarkdownNode = null;
|
|
25
25
|
|
|
26
|
-
const footnoteItemMarkdownNodes = footnoteItemMarkdownNodesFromDocumentMarkdownNode(documentMarkdownNode),
|
|
26
|
+
const footnoteItemMarkdownNodes = footnoteItemMarkdownNodesFromDocumentMarkdownNode(documentMarkdownNode, context),
|
|
27
27
|
footnoteItemMarkdownNodesLength = footnoteItemMarkdownNodes.length;
|
|
28
28
|
|
|
29
29
|
if (footnoteItemMarkdownNodesLength > 0) {
|
|
@@ -38,18 +38,20 @@ export default class FootnotesListMarkdownNode extends MarkdownNode {
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
function footnoteItemMarkdownNodesFromDocumentMarkdownNode(documentMarkdownNode) {
|
|
41
|
+
function footnoteItemMarkdownNodesFromDocumentMarkdownNode(documentMarkdownNode, context) {
|
|
42
42
|
const footnoteItemMarkdownNodes = [],
|
|
43
|
-
|
|
44
|
-
linkMarkdownNodes = linkMarkdownNodesFromNode(
|
|
43
|
+
node = documentMarkdownNode, ///
|
|
44
|
+
linkMarkdownNodes = linkMarkdownNodesFromNode(node),
|
|
45
|
+
footnoteMarkdownNodes = footnoteMarkdownNodesFromNode(node),
|
|
45
46
|
identifiers = footnoteMarkdownNodes.map((footnoteMarkdownNode) => {
|
|
46
|
-
const identifier = footnoteMarkdownNode.
|
|
47
|
+
const identifier = footnoteMarkdownNode.identifier(context);
|
|
47
48
|
|
|
48
49
|
return identifier;
|
|
49
50
|
});
|
|
50
51
|
|
|
51
52
|
linkMarkdownNodes.forEach((linkMarkdownNode) => {
|
|
52
|
-
const
|
|
53
|
+
const linkMarkdownNodeIdentifier = linkMarkdownNode.identifier(context),
|
|
54
|
+
identifier = linkMarkdownNodeIdentifier, ///
|
|
53
55
|
index = identifiers.indexOf(identifier);
|
|
54
56
|
|
|
55
57
|
if (index > -1) {
|
|
@@ -9,38 +9,39 @@ import { HREF_ATTRIBUTE_NAME } from "../../attributeNames";
|
|
|
9
9
|
const { second, secondLast } = arrayUtilities;
|
|
10
10
|
|
|
11
11
|
export default class HyperlinkMarkdownNode extends MarkdownNode {
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
this.setAttribute(name, value);
|
|
20
|
-
|
|
21
|
-
this.setInnerHTML(innerHTML);
|
|
12
|
+
childNodesAsHTML(indent, context) {
|
|
13
|
+
const childNodes = this.getChildNodes(),
|
|
14
|
+
secondChildNode = second(childNodes),
|
|
15
|
+
inlineTextMarkdownNode = secondChildNode, ///
|
|
16
|
+
inlineTextMarkdownNodeHTML = inlineTextMarkdownNode.asHTML(indent, context),
|
|
17
|
+
childNodesHTML = inlineTextMarkdownNodeHTML; ///
|
|
22
18
|
|
|
23
|
-
return
|
|
19
|
+
return childNodesHTML;
|
|
24
20
|
}
|
|
25
21
|
|
|
26
|
-
|
|
22
|
+
createChildNodeDOMElements(context) {
|
|
27
23
|
const childNodes = this.getChildNodes(),
|
|
28
24
|
secondChildNode = second(childNodes),
|
|
29
|
-
inlineTextMarkdownNode = secondChildNode,
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
inlineTextMarkdownNode = secondChildNode, ///
|
|
26
|
+
inlineTextMarkdownNodeDOMElement = inlineTextMarkdownNode.createDOMElement(context);
|
|
27
|
+
|
|
28
|
+
this.insertDOMElement(inlineTextMarkdownNodeDOMElement);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
attributeName() {
|
|
32
|
+
const attributeName = HREF_ATTRIBUTE_NAME;
|
|
32
33
|
|
|
33
|
-
return
|
|
34
|
+
return attributeName;
|
|
34
35
|
}
|
|
35
36
|
|
|
36
|
-
|
|
37
|
+
attributeValue(context) {
|
|
37
38
|
const childNodes = this.getChildNodes(),
|
|
38
39
|
secondLastChildNode = secondLast(childNodes),
|
|
39
40
|
URLMarkdownNode = secondLastChildNode, ///
|
|
40
|
-
URLMarkdownNodeContent = URLMarkdownNode.
|
|
41
|
-
|
|
41
|
+
URLMarkdownNodeContent = URLMarkdownNode.content(context),
|
|
42
|
+
attributeValue = URLMarkdownNodeContent; ///
|
|
42
43
|
|
|
43
|
-
return
|
|
44
|
+
return attributeValue;
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
static fromRuleNameChildNodesAndAmbiguous(ruleName, childNodes, ambiguous) { return MarkdownNode.fromRuleNameChildNodesAndAmbiguous(HyperlinkMarkdownNode, ruleName, childNodes, ambiguous); }
|
|
@@ -9,38 +9,46 @@ import { SRC_ATTRIBUTE_NAME } from "../../attributeNames";
|
|
|
9
9
|
const { second, secondLast } = arrayUtilities;
|
|
10
10
|
|
|
11
11
|
export default class ImageMarkdownNode extends MarkdownNode {
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
src = this.getSrc(context),
|
|
16
|
-
name = SRC_ATTRIBUTE_NAME,
|
|
17
|
-
value = src; ///
|
|
12
|
+
childNodesAsHTML(indent, context) {
|
|
13
|
+
const content = this.content(context),
|
|
14
|
+
childNodesHTML = content; ///
|
|
18
15
|
|
|
19
|
-
|
|
16
|
+
return childNodesHTML;
|
|
17
|
+
}
|
|
20
18
|
|
|
21
|
-
|
|
19
|
+
createChildNodeDOMElements(context) {
|
|
20
|
+
const content = this.content(context),
|
|
21
|
+
domElement = this.getDOMElement(),
|
|
22
|
+
parentDOMElement = domElement, ///
|
|
23
|
+
siblingDOMElement = null,
|
|
24
|
+
childNodeDOMElement = document.createTextNode(content);
|
|
22
25
|
|
|
23
|
-
|
|
26
|
+
parentDOMElement.insertBefore(childNodeDOMElement, siblingDOMElement);
|
|
24
27
|
}
|
|
25
28
|
|
|
26
|
-
|
|
29
|
+
content(context) {
|
|
27
30
|
const childNodes = this.getChildNodes(),
|
|
28
31
|
secondChildNode = second(childNodes),
|
|
29
32
|
inlineTextMarkdownNode = secondChildNode, ///
|
|
30
|
-
|
|
31
|
-
|
|
33
|
+
content = inlineTextMarkdownNode.content(context);
|
|
34
|
+
|
|
35
|
+
return content;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
attributeName() {
|
|
39
|
+
const attributeName = SRC_ATTRIBUTE_NAME;
|
|
32
40
|
|
|
33
|
-
return
|
|
41
|
+
return attributeName;
|
|
34
42
|
}
|
|
35
43
|
|
|
36
|
-
|
|
44
|
+
attributeValue(context) {
|
|
37
45
|
const childNodes = this.getChildNodes(),
|
|
38
46
|
secondLastChildNode = secondLast(childNodes),
|
|
39
47
|
URLMarkdownNode = secondLastChildNode, ///
|
|
40
|
-
URLMarkdownNodeContent = URLMarkdownNode.
|
|
41
|
-
|
|
48
|
+
URLMarkdownNodeContent = URLMarkdownNode.content(context),
|
|
49
|
+
attributeValue = URLMarkdownNodeContent; ///
|
|
42
50
|
|
|
43
|
-
return
|
|
51
|
+
return attributeValue;
|
|
44
52
|
}
|
|
45
53
|
|
|
46
54
|
static fromRuleNameChildNodesAndAmbiguous(ruleName, childNodes, ambiguous) { return MarkdownNode.fromRuleNameChildNodesAndAmbiguous(ImageMarkdownNode, ruleName, childNodes, ambiguous); }
|
|
@@ -1,20 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { arrayUtilities } from "necessary";
|
|
4
|
-
|
|
5
3
|
import MarkdownNode from "../../node/markdown";
|
|
6
4
|
|
|
7
|
-
const { second } = arrayUtilities;
|
|
8
|
-
|
|
9
5
|
export default class InlineListingMarkdownNode extends MarkdownNode {
|
|
10
|
-
getContent() {
|
|
11
|
-
const childNodes = this.getChildNodes(),
|
|
12
|
-
secondChildNode = second(childNodes),
|
|
13
|
-
blockTextMarkdownNode = secondChildNode, ///
|
|
14
|
-
content = blockTextMarkdownNode; ///
|
|
15
|
-
|
|
16
|
-
return content;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
6
|
static fromRuleNameChildNodesAndAmbiguous(ruleName, childNodes, ambiguous) { return MarkdownNode.fromRuleNameChildNodesAndAmbiguous(InlineListingMarkdownNode, ruleName, childNodes, ambiguous); }
|
|
20
7
|
}
|
|
@@ -5,8 +5,15 @@ import contentMixins from "../../mixins/content";
|
|
|
5
5
|
import MarkdownNode from "../markdown";
|
|
6
6
|
|
|
7
7
|
class InlineTextMarkdownNode extends MarkdownNode {
|
|
8
|
+
asHTML(indent, context) {
|
|
9
|
+
const content = this.content(context),
|
|
10
|
+
html = content; ///
|
|
11
|
+
|
|
12
|
+
return html;
|
|
13
|
+
}
|
|
14
|
+
|
|
8
15
|
createDOMElement(context) {
|
|
9
|
-
const content = this.
|
|
16
|
+
const content = this.content(context),
|
|
10
17
|
domElement = document.createTextNode(content);
|
|
11
18
|
|
|
12
19
|
this.setDOMElement(domElement);
|
|
@@ -2,18 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
import MarkdownNode from "../../node/markdown";
|
|
4
4
|
|
|
5
|
-
import { domElementsFromChildNodes } from "../../utilities/childNodes";
|
|
5
|
+
import { htmlFromChildNodes, domElementsFromChildNodes } from "../../utilities/childNodes";
|
|
6
6
|
|
|
7
7
|
export default class LineMarkdownNode extends MarkdownNode {
|
|
8
|
+
childNodesAsHTML(indent, context) {
|
|
9
|
+
const childNodes = this.getChildNodes(),
|
|
10
|
+
childNodesHTML = htmlFromChildNodes(childNodes, context);
|
|
11
|
+
|
|
12
|
+
return childNodesHTML;
|
|
13
|
+
}
|
|
14
|
+
|
|
8
15
|
createChildNodeDOMElements(context) {
|
|
9
|
-
const
|
|
10
|
-
|
|
16
|
+
const childNodes = this.getChildNodes(),
|
|
17
|
+
domElement = this.getDOMElement(),
|
|
11
18
|
domElements = domElementsFromChildNodes(childNodes, context),
|
|
12
19
|
parentDOMElement = domElement, ///
|
|
13
|
-
siblingDOMElement = null
|
|
20
|
+
siblingDOMElement = null,
|
|
21
|
+
childNodeDOMElements = domElements; ///
|
|
14
22
|
|
|
15
|
-
|
|
16
|
-
parentDOMElement.insertBefore(
|
|
23
|
+
childNodeDOMElements.forEach((childNodeDOMElement) => {
|
|
24
|
+
parentDOMElement.insertBefore(childNodeDOMElement, siblingDOMElement);
|
|
17
25
|
});
|
|
18
26
|
}
|
|
19
27
|
|