highmark-markdown 1.2.97 → 1.2.102
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/lib/example/view/div/Downloads.js +38 -0
- package/lib/example/view/div/tabButtons/right.js +4 -4
- package/lib/example/view/textarea.js +2 -1
- package/lib/example/view.js +8 -3
- package/lib/map/node/html.js +11 -5
- package/lib/map/nonTerminalNode/markdown.js +24 -4
- package/lib/markdown/bnf.js +56 -13
- package/lib/markdown/entries.js +7 -4
- package/lib/markdown/lexer.js +2 -2
- package/lib/node/html/text/block.js +2 -2
- package/lib/node/html/text/xml.js +34 -0
- package/lib/node/html/xmlElement/complex.js +41 -0
- package/lib/node/html/xmlElement/simple.js +40 -0
- package/lib/node/html/xmlElement.js +120 -0
- package/lib/node/html.js +19 -15
- package/lib/node/markdown/className.js +2 -2
- package/lib/node/markdown/languageName.js +2 -2
- package/lib/node/markdown/releaseName.js +2 -2
- package/lib/node/markdown/text/xml.js +23 -0
- package/lib/node/markdown/xmlAttribute.js +45 -0
- package/lib/node/markdown/xmlAttributeName.js +32 -0
- package/lib/node/markdown/xmlAttributeValue.js +31 -0
- package/lib/node/markdown/xmlElement/complex.js +23 -0
- package/lib/node/markdown/xmlElement/simple.js +23 -0
- package/lib/node/markdown/xmlElement.js +51 -0
- package/lib/node/markdown/xmlTag/complete.js +23 -0
- package/lib/node/markdown/xmlTag/end.js +35 -0
- package/lib/node/markdown/xmlTag/start.js +23 -0
- package/lib/node/markdown/xmlTag.js +57 -0
- package/lib/node/markdown/xmlTagName.js +32 -0
- package/lib/node/markdown.js +13 -1
- package/lib/ruleNames/markdown.js +51 -1
- package/lib/utilities/jsx.js +47 -0
- package/lib/utilities/stringLiteral.js +16 -0
- package/package.json +1 -1
- package/src/example/view/div/Downloads.js +36 -0
- package/src/example/view/div/tabButtons/right.js +2 -2
- package/src/example/view/textarea.js +1 -0
- package/src/example/view.js +8 -2
- package/src/map/node/html.js +13 -4
- package/src/map/nonTerminalNode/markdown.js +34 -4
- package/src/markdown/bnf.js +55 -12
- package/src/markdown/entries.js +7 -3
- package/src/markdown/lexer.js +2 -2
- package/src/node/html/text/block.js +1 -1
- package/src/node/html/text/xml.js +22 -0
- package/src/node/html/xmlElement/complex.js +35 -0
- package/src/node/html/xmlElement/simple.js +32 -0
- package/src/node/html/xmlElement.js +173 -0
- package/src/node/html.js +21 -17
- package/src/node/markdown/className.js +3 -3
- package/src/node/markdown/languageName.js +3 -3
- package/src/node/markdown/releaseName.js +3 -3
- package/src/node/markdown/text/xml.js +7 -0
- package/src/node/markdown/xmlAttribute.js +43 -0
- package/src/node/markdown/xmlAttributeName.js +22 -0
- package/src/node/markdown/xmlAttributeValue.js +21 -0
- package/src/node/markdown/xmlElement/complex.js +7 -0
- package/src/node/markdown/xmlElement/simple.js +7 -0
- package/src/node/markdown/xmlElement.js +51 -0
- package/src/node/markdown/xmlTag/complete.js +7 -0
- package/src/node/markdown/xmlTag/end.js +25 -0
- package/src/node/markdown/xmlTag/start.js +7 -0
- package/src/node/markdown/xmlTag.js +63 -0
- package/src/node/markdown/xmlTagName.js +22 -0
- package/src/node/markdown.js +18 -0
- package/src/ruleNames/markdown.js +20 -0
- package/src/utilities/jsx.js +39 -0
- package/src/utilities/stringLiteral.js +7 -0
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import PathMarkdownNode from "../../node/markdown/path";
|
|
4
4
|
import ImageMarkdownNode from "../../node/markdown/image";
|
|
5
5
|
import ErrorMarkdownNode from "../../node/markdown/error";
|
|
6
|
+
import XMLTextMarkdownNode from "../../node/markdown/text/xml";
|
|
6
7
|
import DocumentMarkdownNode from "../../node/markdown/document";
|
|
7
8
|
import DivisionMarkdownNode from "../../node/markdown/division";
|
|
8
9
|
import FootnoteMarkdownNode from "../../node/markdown/footnote";
|
|
@@ -10,20 +11,29 @@ import BlockEndMarkdownNode from "../../node/markdown/blockEnd";
|
|
|
10
11
|
import ContainerMarkdownNode from "../../node/markdown/container";
|
|
11
12
|
import ReferenceMarkdownNode from "../../node/markdown/reference";
|
|
12
13
|
import HyperlinkMarkdownNode from "../../node/markdown/hyperlink";
|
|
13
|
-
import EmailLinkMarkdownNode from "../../node/markdown/link/email";
|
|
14
14
|
import ClassNameMarkdownNode from "../../node/markdown/className";
|
|
15
|
+
import EmailLinkMarkdownNode from "../../node/markdown/link/email";
|
|
15
16
|
import PlainTextMarkdownNode from "../../node/markdown/text/plain";
|
|
16
17
|
import BlockTextMarkdownNode from "../../node/markdown/text/block";
|
|
18
|
+
import EndXMLTagMarkdownNode from "../../node/markdown/xmlTag/end";
|
|
19
|
+
import XMLTagNameMarkdownNode from "../../node/markdown/xmlTagName"
|
|
17
20
|
import BlockStartMarkdownNode from "../../node/markdown/blockStart";
|
|
18
21
|
import SubDivisionMarkdownNode from "../../node/markdown/subDivision";
|
|
19
|
-
import OrderedItemMarkdownNode from "../../node/markdown/item/ordered";
|
|
20
22
|
import ReleaseNameMarkdownNode from "../../node/markdown/releaseName";
|
|
23
|
+
import StartXMLTagMarkdownNode from "../../node/markdown/xmlTag/start";
|
|
24
|
+
import OrderedItemMarkdownNode from "../../node/markdown/item/ordered";
|
|
25
|
+
import XMLAttributeMarkdownNode from "../../node/markdown/xmlAttribute"
|
|
21
26
|
import LanguageNameMarkdownNode from "../../node/markdown/languageName";
|
|
22
27
|
import BlockListingMarkdownNode from "../../node/markdown/listng/block";
|
|
23
28
|
import FootnoteLinkMarkdownNode from "../../node/markdown/link/footnote";
|
|
24
29
|
import InlineListingMarkdownNode from "../../node/markdown/listng/inline";
|
|
25
30
|
import EmbedDirectiveMarkdownNode from "../../node/markdown/directive/embed";
|
|
31
|
+
import CompleteXMLTagMarkdownNode from "../../node/markdown/xmlTag/complete";
|
|
32
|
+
import XMLAttributeNameMarkdownNode from "../../node/markdown/xmlAttributeName"
|
|
26
33
|
import IncludeDirectiveMarkdownNode from "../../node/markdown/directive/include";
|
|
34
|
+
import SimpleXMLElementMarkdownNode from "../../node/markdown/xmlElement/simple";
|
|
35
|
+
import XMLAttributeValueMarkdownNode from "../../node/markdown/xmlAttributeValue"
|
|
36
|
+
import ComplexXMLElementMarkdownNode from "../../node/markdown/xmlElement/complex";
|
|
27
37
|
|
|
28
38
|
import { PATH_MARKDOWN_RULE_NAME,
|
|
29
39
|
IMAGE_MARKDOWN_RULE_NAME,
|
|
@@ -31,6 +41,7 @@ import { PATH_MARKDOWN_RULE_NAME,
|
|
|
31
41
|
DOCUMENT_MARKDOWN_RULE_NAME,
|
|
32
42
|
DIVISION_MARKDOWN_RULE_NAME,
|
|
33
43
|
FOOTNOTE_MARKDOWN_RULE_NAME,
|
|
44
|
+
XML_TEXT_MARKDOWN_RULE_NAME,
|
|
34
45
|
BLOCK_END_MARKDOWN_RULE_NAME,
|
|
35
46
|
CONTAINER_MARKDOWN_RULE_NAME,
|
|
36
47
|
REFERENCE_MARKDOWN_RULE_NAME,
|
|
@@ -39,16 +50,25 @@ import { PATH_MARKDOWN_RULE_NAME,
|
|
|
39
50
|
CLASS_NAME_MARKDOWN_RULE_NAME,
|
|
40
51
|
PLAIN_TEXT_MARKDOWN_RULE_NAME,
|
|
41
52
|
BLOCK_TEXT_MARKDOWN_RULE_NAME,
|
|
53
|
+
END_XML_TAG_MARKDOWN_RULE_NAME,
|
|
42
54
|
BLOCK_START_MARKDOWN_RULE_NAME,
|
|
43
55
|
ORDERED_ITEM_MARKDOWN_RULE_NAME,
|
|
44
56
|
SUB_DIVISION_MARKDOWN_RULE_NAME,
|
|
45
57
|
RELEASE_NAME_MARKDOWN_RULE_NAME,
|
|
58
|
+
XML_TAG_NAME_MARKDOWN_RULE_NAME,
|
|
46
59
|
LANGUAGE_NAME_MARKDOWN_RULE_NAME,
|
|
47
60
|
BLOCK_LISTING_MARKDOWN_RULE_NAME,
|
|
48
61
|
FOOTNOTE_LINK_MARKDOWN_RULE_NAME,
|
|
62
|
+
START_XML_TAG_MARKDOWN_RULE_NAME,
|
|
63
|
+
XML_ATTRIBUTE_MARKDOWN_RULE_NAME,
|
|
49
64
|
INLINE_LISTING_MARKDOWN_RULE_NAME,
|
|
50
65
|
EMBED_DIRECTIVE_MARKDOWN_RULE_NAME,
|
|
51
|
-
|
|
66
|
+
COMPLETE_XML_TAG_MARKDOWN_RULE_NAME,
|
|
67
|
+
INCLUDE_DIRECTIVE_MARKDOWN_RULE_NAME,
|
|
68
|
+
SIMPLE_XML_ELEMENT_MARKDOWN_RULE_NAME,
|
|
69
|
+
XML_ATTRIBUTE_NAME_MARKDOWN_RULE_NAME,
|
|
70
|
+
XML_ATTRIBUTE_VALUE_MARKDOWN_RULE_NAME,
|
|
71
|
+
COMPLEX_XML_ELEMENT_MARKDOWN_RULE_NAME } from "../../ruleNames/markdown";
|
|
52
72
|
|
|
53
73
|
const markdownNonTerminalNodeMap = {
|
|
54
74
|
[PATH_MARKDOWN_RULE_NAME]: PathMarkdownNode,
|
|
@@ -57,6 +77,7 @@ const markdownNonTerminalNodeMap = {
|
|
|
57
77
|
[DOCUMENT_MARKDOWN_RULE_NAME]: DocumentMarkdownNode, ///
|
|
58
78
|
[DIVISION_MARKDOWN_RULE_NAME]: DivisionMarkdownNode,
|
|
59
79
|
[FOOTNOTE_MARKDOWN_RULE_NAME]: FootnoteMarkdownNode,
|
|
80
|
+
[XML_TEXT_MARKDOWN_RULE_NAME]: XMLTextMarkdownNode,
|
|
60
81
|
[BLOCK_END_MARKDOWN_RULE_NAME]: BlockEndMarkdownNode,
|
|
61
82
|
[CONTAINER_MARKDOWN_RULE_NAME]: ContainerMarkdownNode,
|
|
62
83
|
[REFERENCE_MARKDOWN_RULE_NAME]: ReferenceMarkdownNode,
|
|
@@ -65,16 +86,25 @@ const markdownNonTerminalNodeMap = {
|
|
|
65
86
|
[CLASS_NAME_MARKDOWN_RULE_NAME]: ClassNameMarkdownNode,
|
|
66
87
|
[PLAIN_TEXT_MARKDOWN_RULE_NAME]: PlainTextMarkdownNode,
|
|
67
88
|
[BLOCK_TEXT_MARKDOWN_RULE_NAME]: BlockTextMarkdownNode,
|
|
89
|
+
[END_XML_TAG_MARKDOWN_RULE_NAME]: EndXMLTagMarkdownNode,
|
|
68
90
|
[BLOCK_START_MARKDOWN_RULE_NAME]: BlockStartMarkdownNode,
|
|
91
|
+
[XML_TAG_NAME_MARKDOWN_RULE_NAME]: XMLTagNameMarkdownNode,
|
|
69
92
|
[ORDERED_ITEM_MARKDOWN_RULE_NAME]: OrderedItemMarkdownNode,
|
|
70
93
|
[SUB_DIVISION_MARKDOWN_RULE_NAME]: SubDivisionMarkdownNode,
|
|
71
94
|
[RELEASE_NAME_MARKDOWN_RULE_NAME]: ReleaseNameMarkdownNode,
|
|
95
|
+
[START_XML_TAG_MARKDOWN_RULE_NAME]: StartXMLTagMarkdownNode,
|
|
96
|
+
[XML_ATTRIBUTE_MARKDOWN_RULE_NAME]: XMLAttributeMarkdownNode,
|
|
72
97
|
[LANGUAGE_NAME_MARKDOWN_RULE_NAME]: LanguageNameMarkdownNode,
|
|
73
98
|
[BLOCK_LISTING_MARKDOWN_RULE_NAME]: BlockListingMarkdownNode,
|
|
74
99
|
[FOOTNOTE_LINK_MARKDOWN_RULE_NAME]: FootnoteLinkMarkdownNode,
|
|
75
100
|
[INLINE_LISTING_MARKDOWN_RULE_NAME]: InlineListingMarkdownNode,
|
|
76
101
|
[EMBED_DIRECTIVE_MARKDOWN_RULE_NAME]: EmbedDirectiveMarkdownNode,
|
|
77
|
-
[
|
|
102
|
+
[COMPLETE_XML_TAG_MARKDOWN_RULE_NAME]: CompleteXMLTagMarkdownNode,
|
|
103
|
+
[INCLUDE_DIRECTIVE_MARKDOWN_RULE_NAME]: IncludeDirectiveMarkdownNode,
|
|
104
|
+
[SIMPLE_XML_ELEMENT_MARKDOWN_RULE_NAME]: SimpleXMLElementMarkdownNode,
|
|
105
|
+
[XML_ATTRIBUTE_NAME_MARKDOWN_RULE_NAME]: XMLAttributeNameMarkdownNode,
|
|
106
|
+
[XML_ATTRIBUTE_VALUE_MARKDOWN_RULE_NAME]: XMLAttributeValueMarkdownNode,
|
|
107
|
+
[COMPLEX_XML_ELEMENT_MARKDOWN_RULE_NAME]: ComplexXMLElementMarkdownNode
|
|
78
108
|
};
|
|
79
109
|
|
|
80
110
|
export default markdownNonTerminalNodeMap;
|
package/src/markdown/bnf.js
CHANGED
|
@@ -29,6 +29,8 @@ const bnf = `
|
|
|
29
29
|
| unorderedList
|
|
30
30
|
|
|
31
31
|
| blockListing
|
|
32
|
+
|
|
33
|
+
| xmlElement
|
|
32
34
|
|
|
33
35
|
| paragraph
|
|
34
36
|
|
|
@@ -103,6 +105,13 @@ const bnf = `
|
|
|
103
105
|
blockListing ::= blockStart blockLine* blockEnd ;
|
|
104
106
|
|
|
105
107
|
|
|
108
|
+
xmlElement ::= simpleXMLElement
|
|
109
|
+
|
|
110
|
+
| complexXMLElement
|
|
111
|
+
|
|
112
|
+
;
|
|
113
|
+
|
|
114
|
+
|
|
106
115
|
paragraph ::= line ( endOfLine line )* ;
|
|
107
116
|
|
|
108
117
|
|
|
@@ -127,7 +136,34 @@ const bnf = `
|
|
|
127
136
|
pageNumberDirective ::= "@pageNumber" ;
|
|
128
137
|
|
|
129
138
|
|
|
130
|
-
|
|
139
|
+
simpleXMLElement ::= completeXMLTag ;
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
complexXMLElement ::= startXMLTag ( xmlElement | xmlText )* endXMLTag ;
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
completeXMLTag ::= "<"<NO_WHITESPACE>xmlTagName xmlAttribute* "/>" endOfLine* ;
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
startXMLTag ::= "<"<NO_WHITESPACE>xmlTagName xmlAttribute* ">" endOfLine* ;
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
endXMLTag ::= "</"<NO_WHITESPACE>xmlTagName ">" endOfLine* ;
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
xmlText ::= ( [escaped] | [number] | [special] | [string-literal] | [primary-identifier] | [secondary-identifier] | [unassigned] )+ endOfLine* ;
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
xmlAttribute ::= xmlAttributeName<NO_WHITESPACE>"="<NO_WHITESPACE>xmlAttributeValue ;
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
xmlTagName ::= ( [primary-identifier] | [secondary-identifier] ) ;
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
xmlAttributeName ::= [primary-identifier] ( <NO_WHITESPACE>[secondary-identifier] )* ;
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
xmlAttributeValue ::= [string-literal] ;
|
|
131
167
|
|
|
132
168
|
|
|
133
169
|
tableHead ::= tableHeadRow ;
|
|
@@ -225,31 +261,33 @@ const bnf = `
|
|
|
225
261
|
blockEnd ::= [backticks] ;
|
|
226
262
|
|
|
227
263
|
|
|
228
|
-
className ::= <NO_WHITESPACE>[identifier] ;
|
|
264
|
+
className ::= <NO_WHITESPACE>[primary-identifier] ;
|
|
229
265
|
|
|
230
266
|
|
|
231
|
-
languageName ::= <NO_WHITESPACE>[identifier] ;
|
|
267
|
+
languageName ::= <NO_WHITESPACE>[primary-identifier] ;
|
|
232
268
|
|
|
233
269
|
|
|
234
|
-
releaseName ::= <NO_WHITESPACE>[identifier] ;
|
|
270
|
+
releaseName ::= <NO_WHITESPACE>[primary-identifier] ;
|
|
235
271
|
|
|
236
272
|
|
|
237
273
|
blockText ::= [escaped]
|
|
238
274
|
|
|
239
275
|
| [number]
|
|
240
276
|
|
|
241
|
-
| [identifier]
|
|
242
|
-
|
|
243
277
|
| [email-address]
|
|
244
278
|
|
|
245
279
|
| [url]
|
|
246
280
|
|
|
247
281
|
| [path]
|
|
248
282
|
|
|
249
|
-
| [word]
|
|
250
|
-
|
|
251
283
|
| [special]
|
|
252
284
|
|
|
285
|
+
| [string-literal]
|
|
286
|
+
|
|
287
|
+
| [primary-identifier]
|
|
288
|
+
|
|
289
|
+
| [secondary-identifier]
|
|
290
|
+
|
|
253
291
|
| [unassigned]
|
|
254
292
|
|
|
255
293
|
| [dashes]
|
|
@@ -263,18 +301,20 @@ const bnf = `
|
|
|
263
301
|
|
|
264
302
|
| [number]
|
|
265
303
|
|
|
266
|
-
| [identifier]
|
|
267
|
-
|
|
268
304
|
| [email-address]
|
|
269
305
|
|
|
270
306
|
| [url]
|
|
271
307
|
|
|
272
308
|
| [path]
|
|
273
309
|
|
|
274
|
-
| [word]
|
|
275
|
-
|
|
276
310
|
| [special]
|
|
277
311
|
|
|
312
|
+
| [string-literal]
|
|
313
|
+
|
|
314
|
+
| [primary-identifier]
|
|
315
|
+
|
|
316
|
+
| [secondary-identifier]
|
|
317
|
+
|
|
278
318
|
| [unassigned]
|
|
279
319
|
|
|
280
320
|
;
|
|
@@ -298,6 +338,9 @@ const bnf = `
|
|
|
298
338
|
path ::= [path] ;
|
|
299
339
|
|
|
300
340
|
|
|
341
|
+
nonsense. ::= ( [escaped] | [number] | [special] | [string-literal] | [primary-identifier] | [secondary-identifier] | [unassigned] )+ ;
|
|
342
|
+
|
|
343
|
+
|
|
301
344
|
endOfLine ::= <END_OF_LINE> ;
|
|
302
345
|
|
|
303
346
|
|
package/src/markdown/entries.js
CHANGED
|
@@ -53,13 +53,16 @@ const entries = [
|
|
|
53
53
|
"directive": "@[a-z]+([A-Z][a-z]+)*"
|
|
54
54
|
},
|
|
55
55
|
{
|
|
56
|
-
"identifier": "[a-
|
|
56
|
+
"primary-identifier": "^[a-z0-9]+(?:-[a-z0-9]+)*"
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
|
-
"
|
|
59
|
+
"secondary-identifier": "^[A-Z][a-zA-Z0-9]*"
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
|
-
"
|
|
62
|
+
"xml-delimiter": "^(?:<\\/|\\/>|<|>|\\/)"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"special": "^(?:\\.\\.\\.|\\.|\\?|\\(|\\)|!\\[|\\[\\^|\\]:|\\[|\\]|\\^|,|!|;|:|`|'|\"|=)"
|
|
63
66
|
},
|
|
64
67
|
{
|
|
65
68
|
"unassigned": "^[^\\s]+"
|
|
@@ -67,3 +70,4 @@ const entries = [
|
|
|
67
70
|
];
|
|
68
71
|
|
|
69
72
|
export default entries;
|
|
73
|
+
|
package/src/markdown/lexer.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { CommonLexer, WhitespaceToken, EndOfLineSignificantToken } from "occam-lexers";
|
|
3
|
+
import { CommonLexer, WhitespaceToken, DoublyQuotedStringLiteralToken, EndOfLineSignificantToken } from "occam-lexers";
|
|
4
4
|
|
|
5
5
|
import entries from "./entries";
|
|
6
6
|
|
|
@@ -25,7 +25,7 @@ export default class MarkdownLexer extends CommonLexer {
|
|
|
25
25
|
|
|
26
26
|
static SinglyQuotedStringLiteralToken = null;
|
|
27
27
|
|
|
28
|
-
static DoublyQuotedStringLiteralToken =
|
|
28
|
+
static DoublyQuotedStringLiteralToken = DoublyQuotedStringLiteralToken;
|
|
29
29
|
|
|
30
30
|
static fromRules(rules) { return CommonLexer.fromRules(MarkdownLexer, rules); }
|
|
31
31
|
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import TextHTMLNode from "../../../node/html/text";
|
|
4
|
+
|
|
5
|
+
export default class XMLTextHTMLNode extends TextHTMLNode {
|
|
6
|
+
static tagName = null;
|
|
7
|
+
|
|
8
|
+
static className = null;
|
|
9
|
+
|
|
10
|
+
text(context) {
|
|
11
|
+
let text = super.text(context);
|
|
12
|
+
|
|
13
|
+
text = `${text}
|
|
14
|
+
`;
|
|
15
|
+
|
|
16
|
+
return text;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
static fromNothing() { return TextHTMLNode.fromNothing(XMLTextHTMLNode); }
|
|
20
|
+
|
|
21
|
+
static fromOuterNode(outerNode) { return TextHTMLNode.fromOuterNode(XMLTextHTMLNode, outerNode); }
|
|
22
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import XMLElementHTMLNode from "../../../node/html/xmlElement";
|
|
4
|
+
|
|
5
|
+
import { EMPTY_STRING } from "../../../constants";
|
|
6
|
+
|
|
7
|
+
export default class ComplexXMLElementHTMLNode extends XMLElementHTMLNode {
|
|
8
|
+
asHTML(indent, context) {
|
|
9
|
+
let html;
|
|
10
|
+
|
|
11
|
+
const jsx = this.isJSX(context);
|
|
12
|
+
|
|
13
|
+
if (jsx) {
|
|
14
|
+
html = EMPTY_STRING;
|
|
15
|
+
} else {
|
|
16
|
+
indent = this.adjustIndent(indent);
|
|
17
|
+
|
|
18
|
+
const childNodesHTML = this.childNodesAsHTML(indent, context),
|
|
19
|
+
startingTag = this.startingTag(context),
|
|
20
|
+
closingTag = this.closingTag(context);
|
|
21
|
+
|
|
22
|
+
html = (indent === null) ?
|
|
23
|
+
`${startingTag}${childNodesHTML}${closingTag}` :
|
|
24
|
+
`${indent}${startingTag}
|
|
25
|
+
${childNodesHTML}${indent}${closingTag}
|
|
26
|
+
`;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return html;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
static fromNothing() { return XMLElementHTMLNode.fromNothing(ComplexXMLElementHTMLNode); }
|
|
33
|
+
|
|
34
|
+
static fromOuterNode(outerNode) { return XMLElementHTMLNode.fromOuterNode(ComplexXMLElementHTMLNode, outerNode); }
|
|
35
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import XmLElementHTMLNode from "../../../node/html/xmlElement";
|
|
4
|
+
|
|
5
|
+
import { EMPTY_STRING } from "../../../constants";
|
|
6
|
+
|
|
7
|
+
export default class SimpleXMLElementHTMLNode extends XmLElementHTMLNode {
|
|
8
|
+
asHTML(indent, context) {
|
|
9
|
+
let html;
|
|
10
|
+
|
|
11
|
+
const jsx = this.isJSX(context);
|
|
12
|
+
|
|
13
|
+
if (jsx) {
|
|
14
|
+
html = EMPTY_STRING
|
|
15
|
+
} else {
|
|
16
|
+
indent = this.adjustIndent(indent);
|
|
17
|
+
|
|
18
|
+
const selfClosingTag = this.selfClosingTag(context);
|
|
19
|
+
|
|
20
|
+
html = (indent === null) ?
|
|
21
|
+
`${selfClosingTag}` :
|
|
22
|
+
`${indent}${selfClosingTag}
|
|
23
|
+
`;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return html;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
static fromNothing() { return XmLElementHTMLNode.fromNothing(SimpleXMLElementHTMLNode); }
|
|
30
|
+
|
|
31
|
+
static fromOuterNode(outerNode) { return XmLElementHTMLNode.fromOuterNode(SimpleXMLElementHTMLNode, outerNode); }
|
|
32
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import HTMLNode from "../../node/html";
|
|
4
|
+
|
|
5
|
+
import { EMPTY_STRING } from "../../constants";
|
|
6
|
+
import { mountElement, unmountElement } from "../../utilities/jsx";
|
|
7
|
+
|
|
8
|
+
const jsxNameRegularExpression = /^[A-Z]/;
|
|
9
|
+
|
|
10
|
+
export default class XMLElementHTMLNode extends HTMLNode {
|
|
11
|
+
isJSX(context) {
|
|
12
|
+
const tagName = this.tagName(context),
|
|
13
|
+
tagNameJSXName = jsxNameRegularExpression.test(tagName),
|
|
14
|
+
jsx = tagNameJSXName; ///
|
|
15
|
+
|
|
16
|
+
return jsx;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
tagName(context) {
|
|
20
|
+
const markdownNode = this.getMarkdownNode(),
|
|
21
|
+
tagName = markdownNode.tagName(context);
|
|
22
|
+
|
|
23
|
+
return tagName;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
properties(context) {
|
|
27
|
+
const markdownNode = this.getMarkdownNode(),
|
|
28
|
+
properties = markdownNode.properties(context);
|
|
29
|
+
|
|
30
|
+
return properties;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
attributeNames(context) {
|
|
34
|
+
const markdownNode = this.getMarkdownNode(),
|
|
35
|
+
attributeNames = markdownNode.attributeNames(context);
|
|
36
|
+
|
|
37
|
+
return attributeNames;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
attributeValues(context) {
|
|
41
|
+
const markdownNode = this.getMarkdownNode(),
|
|
42
|
+
attributeValues = markdownNode.attributeValues(context);
|
|
43
|
+
|
|
44
|
+
return attributeValues;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
startingTag(context) {
|
|
48
|
+
let startingTag = EMPTY_STRING;
|
|
49
|
+
|
|
50
|
+
const tagName = this.tagName(context);
|
|
51
|
+
|
|
52
|
+
startingTag = `${startingTag}<${tagName}`;
|
|
53
|
+
|
|
54
|
+
const attributeNames = this.attributeNames(context),
|
|
55
|
+
attributeValues = this.attributeValues(context);
|
|
56
|
+
|
|
57
|
+
attributeNames.forEach((attributeName, index) => {
|
|
58
|
+
const attributeValue = attributeValues[index];
|
|
59
|
+
|
|
60
|
+
startingTag = `${startingTag} ${attributeName}="${attributeValue}"`;
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
startingTag = `${startingTag}/>`;
|
|
64
|
+
|
|
65
|
+
return startingTag;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
closingTag(context) {
|
|
69
|
+
const tagName = this.tagName(context),
|
|
70
|
+
closingTag = `</${tagName}>`;
|
|
71
|
+
|
|
72
|
+
return closingTag;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
selfClosingTag(context) {
|
|
76
|
+
let selfClosingTag = EMPTY_STRING;
|
|
77
|
+
|
|
78
|
+
const tagName = this.tagName(context);
|
|
79
|
+
|
|
80
|
+
selfClosingTag = `${selfClosingTag}<${tagName}`;
|
|
81
|
+
|
|
82
|
+
const attributeNames = this.attributeNames(context),
|
|
83
|
+
attributeValues = this.attributeValues(context);
|
|
84
|
+
|
|
85
|
+
attributeNames.forEach((attributeName, index) => {
|
|
86
|
+
const attributeValue = attributeValues[index];
|
|
87
|
+
|
|
88
|
+
selfClosingTag = `${selfClosingTag} ${attributeName}="${attributeValue}"`;
|
|
89
|
+
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
selfClosingTag = `${selfClosingTag}/>`;
|
|
93
|
+
|
|
94
|
+
return selfClosingTag;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
createDOMElement(context) {
|
|
98
|
+
let domElement = null;
|
|
99
|
+
|
|
100
|
+
const jsx = this.isJSX(context);
|
|
101
|
+
|
|
102
|
+
if (jsx) {
|
|
103
|
+
const jsxDOMElement = this.createJSXDomElement(context);
|
|
104
|
+
|
|
105
|
+
domElement = jsxDOMElement; ///
|
|
106
|
+
} else {
|
|
107
|
+
const tagName = this.tagName(context);
|
|
108
|
+
|
|
109
|
+
domElement = document.createElement(tagName);
|
|
110
|
+
|
|
111
|
+
const attributeNames = this.attributeNames(context),
|
|
112
|
+
attributeValues = this.attributeValues(context);
|
|
113
|
+
|
|
114
|
+
attributeNames.forEach((attributeName, index) => {
|
|
115
|
+
const attributeValue = attributeValues[index];
|
|
116
|
+
|
|
117
|
+
domElement.setAttribute(attributeName, attributeValue);
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return domElement;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
createJSXDomElement(context) {
|
|
125
|
+
let jsxDOMElement = null;
|
|
126
|
+
|
|
127
|
+
const { JSXElements = [] } = context,
|
|
128
|
+
tagName = this.tagName(context),
|
|
129
|
+
JSXElement = JSXElements.find((JSXElement) => {
|
|
130
|
+
const { defaultProperties = {} } = JSXElement,
|
|
131
|
+
{ name } = defaultProperties,
|
|
132
|
+
nameTagName = (name === tagName);
|
|
133
|
+
|
|
134
|
+
if (nameTagName) {
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
}) || null;
|
|
138
|
+
|
|
139
|
+
if (JSXElement !== null) {
|
|
140
|
+
const properties = this.properties(context),
|
|
141
|
+
jsxElement =
|
|
142
|
+
|
|
143
|
+
<JSXElement {...properties} />
|
|
144
|
+
|
|
145
|
+
,
|
|
146
|
+
domElement = jsxElement.getDOMElement();
|
|
147
|
+
|
|
148
|
+
jsxDOMElement = domElement; ///
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return jsxDOMElement;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
mount(parentDOMElement, siblingDOMElement, context) {
|
|
155
|
+
super.mount(parentDOMElement, siblingDOMElement, context);
|
|
156
|
+
|
|
157
|
+
if (this.domElement !== null) {
|
|
158
|
+
mountElement(this.domElement);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
unmount(parentDOMElement) {
|
|
163
|
+
if (this.domElement !== null) {
|
|
164
|
+
unmountElement(this.domElement);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
super.unmount(parentDOMElement);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
static fromNothing(Class) { return HTMLNode.fromNothing(Class); }
|
|
171
|
+
|
|
172
|
+
static fromOuterNode(Class, outerNode) { return HTMLNode.fromOuterNode(Class, outerNode); }
|
|
173
|
+
}
|
package/src/node/html.js
CHANGED
|
@@ -266,35 +266,39 @@ class HTMLNode extends Node {
|
|
|
266
266
|
mount(parentDOMElement, siblingDOMElement, context) {
|
|
267
267
|
this.domElement = this.createDOMElement(context);
|
|
268
268
|
|
|
269
|
-
(
|
|
270
|
-
|
|
271
|
-
|
|
269
|
+
if (this.domElement !== null) {
|
|
270
|
+
(siblingDOMElement !== null) ?
|
|
271
|
+
insertAfter(this.domElement, parentDOMElement, siblingDOMElement) :
|
|
272
|
+
insertBeforehand(this.domElement, parentDOMElement);
|
|
272
273
|
|
|
273
|
-
|
|
274
|
+
parentDOMElement = this.domElement; ///
|
|
274
275
|
|
|
275
|
-
|
|
276
|
+
siblingDOMElement = null;
|
|
276
277
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
278
|
+
this.childNodes.forEach((childNode) => {
|
|
279
|
+
siblingDOMElement = childNode.mount(parentDOMElement, siblingDOMElement, context);
|
|
280
|
+
});
|
|
280
281
|
|
|
281
|
-
|
|
282
|
+
siblingDOMElement = this.domElement; ///
|
|
283
|
+
}
|
|
282
284
|
|
|
283
285
|
return siblingDOMElement;
|
|
284
286
|
}
|
|
285
287
|
|
|
286
288
|
unmount(parentDOMElement) {
|
|
287
|
-
{
|
|
288
|
-
|
|
289
|
+
if (this.domElement !== null) {
|
|
290
|
+
{
|
|
291
|
+
const parentDOMElement = this.domElement; ///
|
|
289
292
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
293
|
+
this.childNodes.forEach((childNode) => {
|
|
294
|
+
childNode.unmount(parentDOMElement);
|
|
295
|
+
});
|
|
296
|
+
}
|
|
294
297
|
|
|
295
|
-
|
|
298
|
+
remove(this.domElement, parentDOMElement);
|
|
296
299
|
|
|
297
|
-
|
|
300
|
+
this.domElement = null;
|
|
301
|
+
}
|
|
298
302
|
}
|
|
299
303
|
|
|
300
304
|
asHTML(indent, context) {
|
|
@@ -5,9 +5,9 @@ import MarkdownNode from "../../node/markdown";
|
|
|
5
5
|
export default class ClassNameMarkdownNode extends MarkdownNode {
|
|
6
6
|
className(context) {
|
|
7
7
|
const className = this.fromSecondChildNode((secondChildNode) => {
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
className =
|
|
8
|
+
const terminalNode = secondChildNode, ///
|
|
9
|
+
terminalNodeContent = terminalNode.getContent(),
|
|
10
|
+
className = terminalNodeContent; ///
|
|
11
11
|
|
|
12
12
|
return className;
|
|
13
13
|
});
|
|
@@ -5,9 +5,9 @@ import MarkdownNode from "../../node/markdown";
|
|
|
5
5
|
export default class LanguageNameMarkdownNode extends MarkdownNode {
|
|
6
6
|
languageName(context) {
|
|
7
7
|
const languageName = this.fromSecondChildNode((secondChildNode) => {
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
languageName =
|
|
8
|
+
const terminalNode = secondChildNode, ///
|
|
9
|
+
terminalNodeContent = terminalNode.getContent(),
|
|
10
|
+
languageName = terminalNodeContent; ///
|
|
11
11
|
|
|
12
12
|
return languageName;
|
|
13
13
|
});
|
|
@@ -5,9 +5,9 @@ import MarkdownNode from "../../node/markdown";
|
|
|
5
5
|
export default class ReleaseNameMarkdownNode extends MarkdownNode {
|
|
6
6
|
releaseName(context) {
|
|
7
7
|
const releaseName = this.fromSecondChildNode((secondChildNode) => {
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
releaseName =
|
|
8
|
+
const terminalNode = secondChildNode, ///
|
|
9
|
+
terminalNodeContent = terminalNode.getContent(),
|
|
10
|
+
releaseName = terminalNodeContent; ///
|
|
11
11
|
|
|
12
12
|
return releaseName;
|
|
13
13
|
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import TextMarkdownNode from "../../../node/markdown/text";
|
|
4
|
+
|
|
5
|
+
export default class XMLTextMarkdownNode extends TextMarkdownNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return TextMarkdownNode.fromRuleNameChildNodesOpacityAndPrecedence(XMLTextMarkdownNode, ruleName, childNodes, opacity, precedence); }
|
|
7
|
+
}
|