highmark-markdown 0.0.156 → 0.0.157

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