highmark-markdown 1.2.97 → 1.2.101

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.
Files changed (69) hide show
  1. package/lib/example/view/div/Downloads.js +38 -0
  2. package/lib/example/view/div/tabButtons/right.js +4 -4
  3. package/lib/example/view/textarea.js +2 -1
  4. package/lib/example/view.js +8 -3
  5. package/lib/map/node/html.js +11 -5
  6. package/lib/map/nonTerminalNode/markdown.js +24 -4
  7. package/lib/markdown/bnf.js +56 -13
  8. package/lib/markdown/entries.js +7 -4
  9. package/lib/markdown/lexer.js +2 -2
  10. package/lib/node/html/text/block.js +2 -2
  11. package/lib/node/html/text/xml.js +34 -0
  12. package/lib/node/html/xmlElement/complex.js +41 -0
  13. package/lib/node/html/xmlElement/simple.js +40 -0
  14. package/lib/node/html/xmlElement.js +120 -0
  15. package/lib/node/html.js +19 -15
  16. package/lib/node/markdown/className.js +2 -2
  17. package/lib/node/markdown/languageName.js +2 -2
  18. package/lib/node/markdown/releaseName.js +2 -2
  19. package/lib/node/markdown/text/xml.js +23 -0
  20. package/lib/node/markdown/xmlAttribute.js +45 -0
  21. package/lib/node/markdown/xmlAttributeName.js +32 -0
  22. package/lib/node/markdown/xmlAttributeValue.js +31 -0
  23. package/lib/node/markdown/xmlElement/complex.js +23 -0
  24. package/lib/node/markdown/xmlElement/simple.js +23 -0
  25. package/lib/node/markdown/xmlElement.js +51 -0
  26. package/lib/node/markdown/xmlTag/complete.js +23 -0
  27. package/lib/node/markdown/xmlTag/end.js +35 -0
  28. package/lib/node/markdown/xmlTag/start.js +23 -0
  29. package/lib/node/markdown/xmlTag.js +57 -0
  30. package/lib/node/markdown/xmlTagName.js +32 -0
  31. package/lib/node/markdown.js +13 -1
  32. package/lib/ruleNames/markdown.js +51 -1
  33. package/lib/utilities/jsx.js +47 -0
  34. package/lib/utilities/stringLiteral.js +16 -0
  35. package/package.json +1 -1
  36. package/src/example/view/div/Downloads.js +36 -0
  37. package/src/example/view/div/tabButtons/right.js +2 -2
  38. package/src/example/view/textarea.js +1 -0
  39. package/src/example/view.js +8 -2
  40. package/src/map/node/html.js +13 -4
  41. package/src/map/nonTerminalNode/markdown.js +34 -4
  42. package/src/markdown/bnf.js +55 -12
  43. package/src/markdown/entries.js +7 -3
  44. package/src/markdown/lexer.js +2 -2
  45. package/src/node/html/text/block.js +1 -1
  46. package/src/node/html/text/xml.js +22 -0
  47. package/src/node/html/xmlElement/complex.js +35 -0
  48. package/src/node/html/xmlElement/simple.js +32 -0
  49. package/src/node/html/xmlElement.js +173 -0
  50. package/src/node/html.js +21 -17
  51. package/src/node/markdown/className.js +3 -3
  52. package/src/node/markdown/languageName.js +3 -3
  53. package/src/node/markdown/releaseName.js +3 -3
  54. package/src/node/markdown/text/xml.js +7 -0
  55. package/src/node/markdown/xmlAttribute.js +43 -0
  56. package/src/node/markdown/xmlAttributeName.js +22 -0
  57. package/src/node/markdown/xmlAttributeValue.js +21 -0
  58. package/src/node/markdown/xmlElement/complex.js +7 -0
  59. package/src/node/markdown/xmlElement/simple.js +7 -0
  60. package/src/node/markdown/xmlElement.js +51 -0
  61. package/src/node/markdown/xmlTag/complete.js +7 -0
  62. package/src/node/markdown/xmlTag/end.js +25 -0
  63. package/src/node/markdown/xmlTag/start.js +7 -0
  64. package/src/node/markdown/xmlTag.js +63 -0
  65. package/src/node/markdown/xmlTagName.js +22 -0
  66. package/src/node/markdown.js +18 -0
  67. package/src/ruleNames/markdown.js +20 -0
  68. package/src/utilities/jsx.js +39 -0
  69. 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
- INCLUDE_DIRECTIVE_MARKDOWN_RULE_NAME } from "../../ruleNames/markdown";
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
- [INCLUDE_DIRECTIVE_MARKDOWN_RULE_NAME]: IncludeDirectiveMarkdownNode
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;
@@ -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
- nonsense. ::= ( [escaped] | [number] | [identifier] | [word] | [special] | [unassigned] )+ ;
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
 
@@ -53,13 +53,16 @@ const entries = [
53
53
  "directive": "@[a-z]+([A-Z][a-z]+)*"
54
54
  },
55
55
  {
56
- "identifier": "[a-z]+(?:-[a-z]+)*"
56
+ "primary-identifier": "^[a-z0-9]+(?:-[a-z0-9]+)*"
57
57
  },
58
58
  {
59
- "word": "^[\\w\\-]+"
59
+ "secondary-identifier": "^[A-Z][a-zA-Z0-9]*"
60
60
  },
61
61
  {
62
- "special": "^\\.\\.\\.|\\.|\\?|\\(|\\)|!\\[|\\[\\^|\\]:|\\[|\\]|\\^|\\/|,|!|;|:|`|'|\""
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
+
@@ -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 = null;
28
+ static DoublyQuotedStringLiteralToken = DoublyQuotedStringLiteralToken;
29
29
 
30
30
  static fromRules(rules) { return CommonLexer.fromRules(MarkdownLexer, rules); }
31
31
 
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import TextHTMLNode from "../../html/text";
3
+ import TextHTMLNode from "../../../node/html/text";
4
4
 
5
5
  export default class BlockTextHTMLNode extends TextHTMLNode {
6
6
  static tagName = null;
@@ -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
- (siblingDOMElement !== null) ?
270
- insertAfter(this.domElement, parentDOMElement, siblingDOMElement) :
271
- insertBeforehand(this.domElement, parentDOMElement);
269
+ if (this.domElement !== null) {
270
+ (siblingDOMElement !== null) ?
271
+ insertAfter(this.domElement, parentDOMElement, siblingDOMElement) :
272
+ insertBeforehand(this.domElement, parentDOMElement);
272
273
 
273
- parentDOMElement = this.domElement; ///
274
+ parentDOMElement = this.domElement; ///
274
275
 
275
- siblingDOMElement = null;
276
+ siblingDOMElement = null;
276
277
 
277
- this.childNodes.forEach((childNode) => {
278
- siblingDOMElement = childNode.mount(parentDOMElement, siblingDOMElement, context);
279
- });
278
+ this.childNodes.forEach((childNode) => {
279
+ siblingDOMElement = childNode.mount(parentDOMElement, siblingDOMElement, context);
280
+ });
280
281
 
281
- siblingDOMElement = this.domElement; ///
282
+ siblingDOMElement = this.domElement; ///
283
+ }
282
284
 
283
285
  return siblingDOMElement;
284
286
  }
285
287
 
286
288
  unmount(parentDOMElement) {
287
- {
288
- const parentDOMElement = this.domElement; ///
289
+ if (this.domElement !== null) {
290
+ {
291
+ const parentDOMElement = this.domElement; ///
289
292
 
290
- this.childNodes.forEach((childNode) => {
291
- childNode.unmount(parentDOMElement);
292
- });
293
- }
293
+ this.childNodes.forEach((childNode) => {
294
+ childNode.unmount(parentDOMElement);
295
+ });
296
+ }
294
297
 
295
- remove(this.domElement, parentDOMElement);
298
+ remove(this.domElement, parentDOMElement);
296
299
 
297
- this.domElement = null;
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 identifierTerminalNode = secondChildNode, ///
9
- content = identifierTerminalNode.getContent(),
10
- className = content; ///
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 identifierTerminalNode = secondChildNode, ///
9
- content = identifierTerminalNode.getContent(),
10
- languageName = content; ///
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 identifierTerminalNode = secondChildNode, ///
9
- content = identifierTerminalNode.getContent(),
10
- releaseName = content; ///
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
+ }