highmark-markdown 0.0.428 → 0.0.430

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 (96) hide show
  1. package/example.js +3995 -1864
  2. package/lib/constants.js +17 -1
  3. package/lib/defaultMarkdownStyle.js +2 -2
  4. package/lib/elementMap.js +20 -5
  5. package/lib/example/importer.js +5 -5
  6. package/lib/example/indexOptions.js +143 -0
  7. package/lib/example/view/div/sizeable/right.js +2 -2
  8. package/lib/example/view.js +14 -2
  9. package/lib/index/phraseMatcher.js +76 -0
  10. package/lib/markdown/bnf.js +2 -2
  11. package/lib/markdown/lexer.js +11 -11
  12. package/lib/markdown/parser.js +12 -12
  13. package/lib/node/markdown/anchor.js +15 -8
  14. package/lib/node/markdown/comma.js +144 -0
  15. package/lib/node/markdown/contentsLink.js +3 -2
  16. package/lib/node/markdown/contentsList.js +10 -2
  17. package/lib/node/markdown/directive/index.js +120 -0
  18. package/lib/node/markdown/directive.js +10 -2
  19. package/lib/node/markdown/division.js +49 -9
  20. package/lib/node/markdown/{link.js → footnoteLink.js} +14 -13
  21. package/lib/node/markdown/footnotesItem.js +5 -12
  22. package/lib/node/markdown/heading.js +10 -2
  23. package/lib/node/markdown/indexItem.js +120 -0
  24. package/lib/node/markdown/indexLink.js +168 -0
  25. package/lib/node/markdown/indexList.js +138 -0
  26. package/lib/node/markdown/line.js +16 -2
  27. package/lib/node/markdown/subDivision.js +21 -2
  28. package/lib/node/markdown/verticalSpace.js +12 -1
  29. package/lib/node/markdown.js +32 -2
  30. package/lib/nodeMap.js +8 -3
  31. package/lib/prepends.js +26 -0
  32. package/lib/replacement/contentsList.js +3 -2
  33. package/lib/replacement/footnotesList.js +8 -8
  34. package/lib/replacement/indexItem.js +131 -0
  35. package/lib/replacement/indexList.js +166 -0
  36. package/lib/replacement/subDivision/footnotesDirective.js +2 -33
  37. package/lib/replacement/subDivision/indexAnchor.js +124 -0
  38. package/lib/replacement/subDivision/indexDirective.js +126 -0
  39. package/lib/replacement/subDivision/pageNumberDirective.js +2 -33
  40. package/lib/replacement/subDivision.js +15 -1
  41. package/lib/replacement.js +22 -45
  42. package/lib/ruleNames.js +31 -6
  43. package/lib/utilities/footnotes.js +10 -10
  44. package/lib/utilities/index.js +246 -0
  45. package/lib/utilities/object.js +59 -0
  46. package/lib/utilities/processing.js +10 -1
  47. package/lib/utilities/query.js +26 -18
  48. package/lib/utilities/replacement.js +67 -1
  49. package/package.json +3 -3
  50. package/src/constants.js +4 -0
  51. package/src/defaultMarkdownStyle.js +13 -1
  52. package/src/elementMap.js +30 -5
  53. package/src/example/importer.js +21 -5
  54. package/src/example/indexOptions.js +134 -0
  55. package/src/example/view/div/sizeable/right.js +1 -1
  56. package/src/example/view.js +20 -1
  57. package/src/index/phraseMatcher.js +38 -0
  58. package/src/markdown/bnf.js +21 -5
  59. package/src/markdown/lexer.js +10 -10
  60. package/src/markdown/parser.js +12 -12
  61. package/src/node/markdown/anchor.js +11 -6
  62. package/src/node/markdown/comma.js +32 -0
  63. package/src/node/markdown/contentsLink.js +3 -1
  64. package/src/node/markdown/contentsList.js +6 -0
  65. package/src/node/markdown/directive/index.js +7 -0
  66. package/src/node/markdown/directive.js +6 -0
  67. package/src/node/markdown/division.js +60 -9
  68. package/src/node/markdown/{link.js → footnoteLink.js} +7 -5
  69. package/src/node/markdown/footnotesItem.js +4 -11
  70. package/src/node/markdown/heading.js +11 -2
  71. package/src/node/markdown/indexItem.js +7 -0
  72. package/src/node/markdown/indexLink.js +63 -0
  73. package/src/node/markdown/indexList.js +34 -0
  74. package/src/node/markdown/line.js +15 -2
  75. package/src/node/markdown/subDivision.js +25 -2
  76. package/src/node/markdown/verticalSpace.js +15 -0
  77. package/src/node/markdown.js +44 -2
  78. package/src/nodeMap.js +18 -3
  79. package/src/prepends.js +5 -0
  80. package/src/replacement/contentsList.js +3 -1
  81. package/src/replacement/footnotesList.js +9 -7
  82. package/src/replacement/indexItem.js +28 -0
  83. package/src/replacement/indexList.js +45 -0
  84. package/src/replacement/subDivision/footnotesDirective.js +0 -6
  85. package/src/replacement/subDivision/indexAnchor.js +20 -0
  86. package/src/replacement/subDivision/indexDirective.js +20 -0
  87. package/src/replacement/subDivision/pageNumberDirective.js +0 -6
  88. package/src/replacement/subDivision.js +12 -0
  89. package/src/replacement.js +41 -68
  90. package/src/ruleNames.js +12 -2
  91. package/src/utilities/footnotes.js +8 -8
  92. package/src/utilities/index.js +335 -0
  93. package/src/utilities/object.js +50 -0
  94. package/src/utilities/processing.js +12 -0
  95. package/src/utilities/query.js +21 -13
  96. package/src/utilities/replacement.js +81 -0
@@ -11,43 +11,43 @@ export default class MarkdownParser extends CommonParser {
11
11
 
12
12
  static nodeMap = nodeMap;
13
13
 
14
- static fromNothing(Class) {
15
- if (Class === undefined) {
14
+ static fromBNF(Class, bnf) {
15
+ if (bnf === undefined) {
16
+ bnf = Class; ///
17
+
16
18
  Class = MarkdownParser; ///
17
19
  }
18
20
 
19
21
  const { nodeMap } = Class,
20
- markdownParser = CommonParser.fromNothing(Class);
22
+ markdownParser = CommonParser.fromBNF(Class, bnf);
21
23
 
22
24
  setNonTerminalNodes(markdownParser, nodeMap);
23
25
 
24
26
  return markdownParser;
25
27
  }
26
28
 
27
- static fromBNF(Class, bnf) {
28
- if (bnf === undefined) {
29
- bnf = Class; ///
29
+ static fromRules(Class, rules) {
30
+ if (rules === undefined) {
31
+ rules = Class; ///
30
32
 
31
33
  Class = MarkdownParser; ///
32
34
  }
33
35
 
34
36
  const { nodeMap } = Class,
35
- markdownParser = CommonParser.fromBNF(Class, bnf);
37
+ markdownParser = CommonParser.fromRules(Class, rules);
36
38
 
37
39
  setNonTerminalNodes(markdownParser, nodeMap);
38
40
 
39
41
  return markdownParser;
40
42
  }
41
43
 
42
- static fromRules(Class, rules) {
43
- if (rules === undefined) {
44
- rules = Class; ///
45
-
44
+ static fromNothing(Class) {
45
+ if (Class === undefined) {
46
46
  Class = MarkdownParser; ///
47
47
  }
48
48
 
49
49
  const { nodeMap } = Class,
50
- markdownParser = CommonParser.fromRules(Class, rules);
50
+ markdownParser = CommonParser.fromNothing(Class);
51
51
 
52
52
  setNonTerminalNodes(markdownParser, nodeMap);
53
53
 
@@ -9,12 +9,17 @@ import { ANCHOR_RULE_NAME } from "../../ruleNames";
9
9
  import { ID_ATTRIBUTE_NAME } from "../../attributeNames";
10
10
 
11
11
  export default class AnchorMarkdownNode extends MarkdownNode {
12
- constructor(ruleName, childNodes, opacity, precedence, domElement, identifier) {
13
- super(ruleName, childNodes, opacity, precedence, domElement);
12
+ constructor(ruleName, childNodes, opacity, precedence, domElement, prepend, identifier) {
13
+ super(ruleName, childNodes, opacity, precedence, domElement, prepend);
14
14
 
15
+ this.prepend = prepend;
15
16
  this.identifier = identifier;
16
17
  }
17
18
 
19
+ getPrepend() {
20
+ return this.prepend;
21
+ }
22
+
18
23
  getIdentifier() {
19
24
  return this.identifier;
20
25
  }
@@ -26,7 +31,7 @@ export default class AnchorMarkdownNode extends MarkdownNode {
26
31
  }
27
32
 
28
33
  attributeValue(context) {
29
- const attributeValue = this.identifier; ///
34
+ const attributeValue = `${this.prepend}-${this.identifier}`;
30
35
 
31
36
  return attributeValue;
32
37
  }
@@ -46,16 +51,16 @@ export default class AnchorMarkdownNode extends MarkdownNode {
46
51
  this.addDOMElement(domElement);
47
52
  }
48
53
 
49
- clone() { return super.clone(this.identifier); }
54
+ clone() { return super.clone(this.prepend, this.identifier); }
50
55
 
51
- static fromIdentifier(identifier) {
56
+ static fromPrependAndIdentifier(prepend, identifier) {
52
57
  const epsilonNode = EpsilonNode.fromNothing(),
53
58
  ruleName = ANCHOR_RULE_NAME,
54
59
  childNodes = [
55
60
  epsilonNode
56
61
  ],
57
62
  opacity = null,
58
- anchorMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(AnchorMarkdownNode, ruleName, childNodes, opacity, identifier);
63
+ anchorMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(AnchorMarkdownNode, ruleName, childNodes, opacity, prepend, identifier);
59
64
 
60
65
  return anchorMarkdownNode;
61
66
  }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ import MarkdownNode from "../../node/markdown";
4
+
5
+ import { COMMA } from "../../constants";
6
+
7
+ export default class CommaMarkdownNode extends MarkdownNode {
8
+ asHTML(indent, context) {
9
+ const content = this.content(context),
10
+ html = content; ///
11
+
12
+ return html;
13
+ }
14
+
15
+ createDOMElement(context) {
16
+ const content = this.content(context),
17
+ textNode = document.createTextNode(content),
18
+ domElement = textNode; ///
19
+
20
+ this.setDOMElement(domElement);
21
+
22
+ return domElement;
23
+ }
24
+
25
+ content(context) {
26
+ const content = COMMA; ///
27
+
28
+ return content;
29
+ }
30
+
31
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(CommaMarkdownNode, ruleName, childNodes, opacity); }
32
+ }
@@ -2,6 +2,7 @@
2
2
 
3
3
  import MarkdownNode from "../../node/markdown";
4
4
 
5
+ import { CONTENTS_PREPEND } from "../../prepends";
5
6
  import { HREF_ATTRIBUTE_NAME } from "../../attributeNames";
6
7
  import { CONTENTS_LINK_RULE_NAME } from "../../ruleNames";
7
8
 
@@ -23,7 +24,8 @@ export default class ContentsLinkMarkdownNode extends MarkdownNode {
23
24
  }
24
25
 
25
26
  attributeValue(context) {
26
- const attributeValue = `#${this.identifier}`;
27
+ const prepend = CONTENTS_PREPEND,
28
+ attributeValue = `#${prepend}-${this.identifier}`;
27
29
 
28
30
  return attributeValue;
29
31
  }
@@ -5,6 +5,12 @@ import MarkdownNode from "../../node/markdown";
5
5
  import { CONTENTS_LIST_RULE_NAME } from "../../ruleNames";
6
6
 
7
7
  export default class ContentsListMarkdownNode extends MarkdownNode {
8
+ asPlainText(context) {
9
+ const plainText = null;
10
+
11
+ return plainText;
12
+ }
13
+
8
14
  static fromContentsItemReplacements(contentsItemReplacements) {
9
15
  const ruleName = CONTENTS_LIST_RULE_NAME,
10
16
  childNodes = contentsItemReplacements.map((contentsItemReplacement) => {
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ import DirectiveMarkdownNode from "../../../node/markdown/directive";
4
+
5
+ export default class IndexDirectiveMarkdownNode extends DirectiveMarkdownNode {
6
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return DirectiveMarkdownNode.fromRuleNameChildNodesAndOpacity(IndexDirectiveMarkdownNode, ruleName, childNodes, opacity); }
7
+ }
@@ -3,6 +3,12 @@
3
3
  import MarkdownNode from "../../node/markdown";
4
4
 
5
5
  export default class DirectiveMarkdownNode extends MarkdownNode {
6
+ asPlainText(context) {
7
+ const plainText = null;
8
+
9
+ return plainText;
10
+ }
11
+
6
12
  static lines = 0;
7
13
 
8
14
  static fromRuleNameChildNodesAndOpacity(Class, ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(Class, ruleName, childNodes, opacity); }
@@ -4,16 +4,19 @@ import { arrayUtilities } from "necessary";
4
4
 
5
5
  import MarkdownNode from "../../node/markdown";
6
6
  import FootnoteReplacement from "../../replacement/footnote";
7
+ import IndexListReplacement from "../../replacement/indexList";
7
8
  import ContentsListReplacement from "../../replacement/contentsList";
8
9
  import FootnotesListReplacement from "../../replacement/footnotesList";
9
10
  import FootnoteSubDivisionReplacement from "../../replacement/subDivision/footnote";
11
+ import IndexAnchorSubDivisionReplacement from "../../replacement/subDivision/indexAnchor";
12
+ import IndexDirectiveSubDivisionReplacement from "../../replacement/subDivision/indexDirective";
10
13
  import ContentsDirectiveSubDivisionReplacement from "../../replacement/subDivision/contentsDirective";
11
14
  import FootnotesDirectiveSubDivisionReplacement from "../../replacement/subDivision/footnotesDirective";
12
15
  import PageNumberDirectiveSubDivisionReplacement from "../../replacement/subDivision/pageNumberDirective";
13
16
 
14
17
  import { EMPTY_STRING } from "../../constants";
15
18
  import { DIVISION_RULE_NAME } from "../../ruleNames";
16
- import { renumberLinkMarkdownNodes } from "../../utilities/footnotes";
19
+ import { renumberFootnoteLinkMarkdownNodes } from "../../utilities/footnotes";
17
20
  import { subDivisionMarkdownNodesFromNode, ignoreDirectiveMarkdownNodeFromNode, pageNumberDirectiveMarkdownNodeFromNode } from "../../utilities/query";
18
21
 
19
22
  const { clear, filter } = arrayUtilities;
@@ -95,6 +98,25 @@ export default class DivisionMarkdownNode extends MarkdownNode {
95
98
  }
96
99
  }
97
100
 
101
+ getPageNumber() {
102
+ let pageNumber = null;
103
+
104
+ const subDivisionMarkdownNodes = this.findSubDivisionMarkdownNodes();
105
+
106
+ subDivisionMarkdownNodes.some((subDivisionMarkdownNode) => {
107
+ const node = subDivisionMarkdownNode, ///
108
+ pageNumberDirective = pageNumberDirectiveMarkdownNodeFromNode(node);
109
+
110
+ if (pageNumberDirective !== null) {
111
+ pageNumber = pageNumberDirective.getPageNumber();
112
+
113
+ return true;
114
+ }
115
+ });
116
+
117
+ return pageNumber;
118
+ }
119
+
98
120
  setPageNumber(pageNumber) {
99
121
  const subDivisionMarkdownNodes = this.findSubDivisionMarkdownNodes();
100
122
 
@@ -110,6 +132,25 @@ export default class DivisionMarkdownNode extends MarkdownNode {
110
132
  });
111
133
  }
112
134
 
135
+ createIndex(divisionMarkdownNodes, context) {
136
+ let indexCreated = false;
137
+
138
+ const indexDirectiveSubDivisionReplacement = this.findSubDivisionReplacement(IndexDirectiveSubDivisionReplacement, context);
139
+
140
+ if (indexDirectiveSubDivisionReplacement !== null) {
141
+ const divisionMarkdownNode = this, ///
142
+ indexListReplacement = IndexListReplacement.fromDivisionMarkdownNodesAndDivisionMarkdownNode(divisionMarkdownNodes, divisionMarkdownNode, context);
143
+
144
+ if (indexListReplacement !== null) {
145
+ indexListReplacement.replaceIndexDirectiveSubdivisionReplacement(indexDirectiveSubDivisionReplacement, divisionMarkdownNode, context);
146
+
147
+ indexCreated = true;
148
+ }
149
+ }
150
+
151
+ return indexCreated;
152
+ }
153
+
113
154
  createContents(divisionMarkdownNodes, context) {
114
155
  let contentsCreated = false;
115
156
 
@@ -123,6 +164,16 @@ export default class DivisionMarkdownNode extends MarkdownNode {
123
164
  contentsListReplacement.replaceContentsDirectiveSubdivisionReplacement(contentsDirectiveSubDivisionReplacement, divisionMarkdownNode, context);
124
165
 
125
166
  contentsCreated = true;
167
+
168
+ divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
169
+ const pageNumber = divisionMarkdownNode.getPageNumber();
170
+
171
+ if (pageNumber !== null) {
172
+ const indexAnchorSubDivisionReplacement = IndexAnchorSubDivisionReplacement.fromPageNumber(pageNumber, context);
173
+
174
+ indexAnchorSubDivisionReplacement.prependToDivisionMarkdownNode(divisionMarkdownNode, context);
175
+ }
176
+ });
126
177
  }
127
178
  }
128
179
 
@@ -130,20 +181,20 @@ export default class DivisionMarkdownNode extends MarkdownNode {
130
181
  }
131
182
 
132
183
  createFootnotes(footnoteReplacementMap, context) {
133
- const footnotesDirectiveSubDivisionReplacement = this.removeSubDivisionMarkdownNode(FootnotesDirectiveSubDivisionReplacement, context);
184
+ const footnotesDirectiveSubDivisionReplacement = this.findSubDivisionReplacement(FootnotesDirectiveSubDivisionReplacement, context);
134
185
 
135
186
  if (footnotesDirectiveSubDivisionReplacement !== null) {
136
187
  const divisionMarkdownNode = this, ///
137
- footnotesListReplacement = FootnotesListReplacement.fromDivisionMarkdownNodeAndFootnoteReplacementMap(divisionMarkdownNode, footnoteReplacementMap, context);
188
+ footnotesListSubDivisionReplacement = FootnotesListReplacement.fromDivisionMarkdownNodeAndFootnoteReplacementMap(divisionMarkdownNode, footnoteReplacementMap, context);
138
189
 
139
- if (footnotesListReplacement !== null) {
140
- footnotesListReplacement.appendToDivisionMarkdownNode(divisionMarkdownNode, context);
190
+ if (footnotesListSubDivisionReplacement !== null) {
191
+ footnotesListSubDivisionReplacement.replaceFootnotesDirectiveSubDivisionReplacement(footnotesDirectiveSubDivisionReplacement, divisionMarkdownNode, context);
141
192
  }
142
193
 
143
- renumberLinkMarkdownNodes(divisionMarkdownNode, footnoteReplacementMap, callback, context);
194
+ renumberFootnoteLinkMarkdownNodes(divisionMarkdownNode, footnoteReplacementMap, callback, context);
144
195
  }
145
196
 
146
- function callback(linkMarkdownNode) {
197
+ function callback(footnoteLinkMarkdownNode) {
147
198
  ///
148
199
  }
149
200
  }
@@ -248,9 +299,9 @@ export default class DivisionMarkdownNode extends MarkdownNode {
248
299
  });
249
300
 
250
301
  const divisionMarkdownNode = this, ///
251
- footnotesListReplacement = FootnotesListReplacement.fromDivisionMarkdownNodeAndFootnoteReplacementMap(divisionMarkdownNode, footnoteReplacementMap, context);
302
+ footnotesListSubDivisionReplacement = FootnotesListReplacement.fromDivisionMarkdownNodeAndFootnoteReplacementMap(divisionMarkdownNode, footnoteReplacementMap, context);
252
303
 
253
- return footnotesListReplacement;
304
+ return footnotesListSubDivisionReplacement;
254
305
  }
255
306
 
256
307
  asHTML(context) {
@@ -5,11 +5,12 @@ import { arrayUtilities } from "necessary";
5
5
  import MarkdownNode from "../../node/markdown";
6
6
 
7
7
  import { EMPTY_STRING } from "../../constants";
8
+ import { FOOTNOTE_PREPEND } from "../../prepends";
8
9
  import { HREF_ATTRIBUTE_NAME } from "../../attributeNames";
9
10
 
10
11
  const { first, second } = arrayUtilities;
11
12
 
12
- export default class LinkMarkdownNode extends MarkdownNode {
13
+ export default class FootnoteLinkMarkdownNode extends MarkdownNode {
13
14
  constructor(ruleName, childNodes, opacity, precedence, domElement, number) {
14
15
  super(ruleName, childNodes, opacity, precedence, domElement);
15
16
 
@@ -48,8 +49,9 @@ export default class LinkMarkdownNode extends MarkdownNode {
48
49
  }
49
50
 
50
51
  attributeValue(context) {
51
- const identifier = this.identifier(context),
52
- attributeValue = `#${identifier}`; ///
52
+ const prepend = FOOTNOTE_PREPEND,
53
+ identifier = this.identifier(context),
54
+ attributeValue = `#${prepend}-${identifier}`; ///
53
55
 
54
56
  return attributeValue;
55
57
  }
@@ -73,9 +75,9 @@ export default class LinkMarkdownNode extends MarkdownNode {
73
75
 
74
76
  static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) {
75
77
  const number = null,
76
- linkMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(LinkMarkdownNode, ruleName, childNodes, opacity, number);
78
+ footnoteLinkMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(FootnoteLinkMarkdownNode, ruleName, childNodes, opacity, number);
77
79
 
78
- return linkMarkdownNode;
80
+ return footnoteLinkMarkdownNode;
79
81
  }
80
82
  }
81
83
 
@@ -5,22 +5,15 @@ import { arrayUtilities } from "necessary";
5
5
  import MarkdownNode from "../../node/markdown";
6
6
  import AnchorMarkdownNode from "../../node/markdown/anchor";
7
7
 
8
+ import { FOOTNOTE_PREPEND } from "../../prepends";
8
9
  import { FOOTNOTES_ITEM_RULE_NAME } from "../../ruleNames";
9
10
 
10
- const { first, second } = arrayUtilities;
11
+ const { second } = arrayUtilities;
11
12
 
12
13
  export default class FootnotesItemMarkdownNode extends MarkdownNode {
13
- identifier(context) {
14
- const childNodes = this.getChildNodes(),
15
- firstChildNode = first(childNodes),
16
- anchorMarkdownNode = firstChildNode, ///
17
- identifier = anchorMarkdownNode.getIdentifier();
18
-
19
- return identifier;
20
- }
21
-
22
14
  static fromFootnotesMarkdownNodeAndIdentifier(footnoteMarkdownNode, identifier) {
23
- const anchorMarkdownNode = AnchorMarkdownNode.fromIdentifier(identifier),
15
+ const prepend = FOOTNOTE_PREPEND,
16
+ anchorMarkdownNode = AnchorMarkdownNode.fromPrependAndIdentifier(prepend, identifier),
24
17
  footnoteMarkdownNodeChildNodes = footnoteMarkdownNode.getChildNodes(),
25
18
  secondFootnoteMarkdownNodeChildNode = second(footnoteMarkdownNodeChildNodes),
26
19
  paragraphMarkdownNode = secondFootnoteMarkdownNodeChildNode, ///
@@ -5,6 +5,7 @@ import { arrayUtilities } from "necessary";
5
5
  import MarkdownNode from "../../node/markdown";
6
6
  import AnchorMarkdownNode from "../../node/markdown/anchor";
7
7
 
8
+ import { CONTENTS_PREPEND } from "../../prepends";
8
9
  import { plainTextFromChildNodes } from "../../utilities/childNodes";
9
10
  import { replaceSpacesWithHyphens, removedLeadingWhitespace, removeNonAlphabeticAndSpaceCharacters } from "../../utilities/string";
10
11
 
@@ -18,8 +19,9 @@ export default class HeadingMarkdownNode extends MarkdownNode {
18
19
  }
19
20
 
20
21
  addAnchor(context) {
21
- const identifier = this.identifier(context),
22
- anchorMarkdownNode = AnchorMarkdownNode.fromIdentifier(identifier),
22
+ const prepend = CONTENTS_PREPEND,
23
+ identifier = this.identifier(context),
24
+ anchorMarkdownNode = AnchorMarkdownNode.fromPrependAndIdentifier(prepend, identifier),
23
25
  prependedChildNode = anchorMarkdownNode; ///
24
26
 
25
27
  this.prependChildNode(prependedChildNode);
@@ -41,6 +43,13 @@ export default class HeadingMarkdownNode extends MarkdownNode {
41
43
  return lineMarkdownNode;
42
44
  }
43
45
 
46
+ asPlainText(context) {
47
+ const childNodes = this.getChildNodes(),
48
+ plainText = plainTextFromChildNodes(childNodes, context);
49
+
50
+ return plainText;
51
+ }
52
+
44
53
  static fromRuleNameChildNodesAndOpacity(Class, ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(Class, ruleName, childNodes, opacity); }
45
54
  }
46
55
 
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ import MarkdownNode from "../../node/markdown";
4
+
5
+ export default class IndexItemMarkdownNode extends MarkdownNode {
6
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(IndexItemMarkdownNode, ruleName, childNodes, opacity); }
7
+ }
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ import { arrayUtilities } from "necessary";
4
+
5
+ import MarkdownNode from "../../node/markdown";
6
+
7
+ import { INDEX_PREPEND } from "../../prepends";
8
+ import { HREF_ATTRIBUTE_NAME } from "../../attributeNames";
9
+
10
+ const { first } = arrayUtilities;
11
+
12
+ export default class IndexLinkMarkdownNode extends MarkdownNode {
13
+ attributeName(context) {
14
+ const attributeName = HREF_ATTRIBUTE_NAME;
15
+
16
+ return attributeName;
17
+ }
18
+
19
+ attributeValue(context) {
20
+ const content = this.content(context),
21
+ attributeValue = `${INDEX_PREPEND}-${content}`;
22
+
23
+ return attributeValue;
24
+ }
25
+
26
+ asHTML(indent, context) {
27
+ indent = this.adjustIndent(indent);
28
+
29
+ const childNodesHTML = this.childNodesAsHTML(indent, context),
30
+ startingTag = this.startingTag(context),
31
+ closingTag = this.closingTag(context),
32
+ html = `${indent}${startingTag}${childNodesHTML}${closingTag}
33
+ `;
34
+
35
+ return html;
36
+ }
37
+
38
+ childNodesAsHTML(indent, context) {
39
+ const content = this.content(context),
40
+ childNodesHTML = content; ///
41
+
42
+ return childNodesHTML;
43
+ }
44
+
45
+ createChildNodeDOMElements(context) {
46
+ const content = this.content(context),
47
+ textNode = document.createTextNode(content),
48
+ domElement = textNode; ///
49
+
50
+ this.addDOMElement(domElement);
51
+ }
52
+
53
+ content(context) {
54
+ const childNodes = this.getChildNodes(),
55
+ firstChildNode = first(childNodes),
56
+ terminalNode = firstChildNode, ///
57
+ content = terminalNode.getContent();
58
+
59
+ return content;
60
+ }
61
+
62
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(IndexLinkMarkdownNode, ruleName, childNodes, opacity); }
63
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ import MarkdownNode from "../../node/markdown";
4
+
5
+ import { INDEX_LIST_RULE_NAME } from "../../ruleNames";
6
+
7
+ export default class IndexListMarkdownNode extends MarkdownNode {
8
+ asPlainText(context) {
9
+ const plainText = null;
10
+
11
+ return plainText;
12
+ }
13
+
14
+ static fromIndexItemReplacements(indexItemReplacements) {
15
+ let indexListMarkdownNode = null;
16
+
17
+ const indexItemReplacementsLength = indexItemReplacements.length;
18
+
19
+ if (indexItemReplacementsLength > 0) {
20
+ const ruleName = INDEX_LIST_RULE_NAME,
21
+ childNodes = indexItemReplacements.map((indexItemReplacement) => {
22
+ const indexItemReplacementNode = indexItemReplacement.getIndexItemMarkdownNode(),
23
+ childNode = indexItemReplacementNode; ///
24
+
25
+ return childNode;
26
+ }),
27
+ opacity = null;
28
+
29
+ indexListMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(IndexListMarkdownNode, ruleName, childNodes, opacity);
30
+ }
31
+
32
+ return indexListMarkdownNode;
33
+ }
34
+ }
@@ -7,8 +7,7 @@ import { htmlFromChildNodes, plainTextFromChildNodes, domElementsFromChildNodes
7
7
  export default class LineMarkdownNode extends MarkdownNode {
8
8
  lines(context) {
9
9
  const { charactersPerLine } = context,
10
- childNodes = this.getChildNodes(),
11
- plainText = plainTextFromChildNodes(childNodes, context),
10
+ plainText = this.asPlainText(context),
12
11
  plainTextLength = plainText.length,
13
12
  characters = plainTextLength, ///
14
13
  lines = (characters / charactersPerLine) + 1;
@@ -28,6 +27,13 @@ export default class LineMarkdownNode extends MarkdownNode {
28
27
  return html;
29
28
  }
30
29
 
30
+ asPlainText(context) {
31
+ const childNodesPlainText = this.childNodesAsPlainText(context),
32
+ plainText = childNodesPlainText; ///
33
+
34
+ return plainText;
35
+ }
36
+
31
37
  createDOMElement(context) {
32
38
  const tagName = this.tagName(context),
33
39
  className = this.className(context),
@@ -51,6 +57,13 @@ export default class LineMarkdownNode extends MarkdownNode {
51
57
  return html;
52
58
  }
53
59
 
60
+ childNodesAsPlainText(context) {
61
+ const childNodes = this.getChildNodes(),
62
+ plainText = plainTextFromChildNodes(childNodes, context);
63
+
64
+ return plainText;
65
+ }
66
+
54
67
  createChildNodeDOMElements(context) {
55
68
  const domElement = this.getDOMElement(),
56
69
  childNodes = this.getChildNodes(),
@@ -3,9 +3,12 @@
3
3
  import { arrayUtilities } from "necessary";
4
4
 
5
5
  import MarkdownNode from "../../node/markdown";
6
+ import VerticalSpaceMarkdownNode from "../../node/markdown/verticalSpace";
6
7
  import EmbedDirectivesSubDivisionReplacement from "../../replacement/subDivision/embedDirectives";
7
8
  import IncludeDirectivesSubDivisionReplacement from "../../replacement/subDivision/includeDirectives";
8
9
 
10
+ import { SUB_DIVISION_RULE_NAME } from "../../ruleNames";
11
+
9
12
  const { second } = arrayUtilities;
10
13
 
11
14
  export default class SubDivisionMarkdownNode extends MarkdownNode {
@@ -52,9 +55,16 @@ export default class SubDivisionMarkdownNode extends MarkdownNode {
52
55
  return html;
53
56
  }
54
57
 
58
+ asPlainText(context) {
59
+ const secondMarkdownNode = this.getSecondMarkdownNode(),
60
+ plainText = secondMarkdownNode.asPlainText(context);
61
+
62
+ return plainText;
63
+ }
64
+
55
65
  createDOMElement(context) {
56
- const domElement = null,
57
- secondMarkdownNode = this.getSecondMarkdownNode();
66
+ const secondMarkdownNode = this.getSecondMarkdownNode(),
67
+ domElement = null;
58
68
 
59
69
  secondMarkdownNode.createDOMElement(context);
60
70
 
@@ -69,5 +79,18 @@ export default class SubDivisionMarkdownNode extends MarkdownNode {
69
79
  return secondMarkdownNode;
70
80
  }
71
81
 
82
+ static fromAnchorMarkdownNode(anchorMarkdownNode) {
83
+ const ruleName = SUB_DIVISION_RULE_NAME,
84
+ verticalSpaceMarkdownNode = VerticalSpaceMarkdownNode.fromNothing(),
85
+ childNodes = [
86
+ verticalSpaceMarkdownNode,
87
+ anchorMarkdownNode
88
+ ],
89
+ opacity = null,
90
+ subDivisionMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(SubDivisionMarkdownNode, ruleName, childNodes, opacity);
91
+
92
+ return subDivisionMarkdownNode;
93
+ }
94
+
72
95
  static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(SubDivisionMarkdownNode, ruleName, childNodes, opacity); }
73
96
  }
@@ -1,8 +1,11 @@
1
1
  "use strict";
2
2
 
3
+ import { StartOfContentNode } from "occam-parsers";
4
+
3
5
  import MarkdownNode from "../../node/markdown";
4
6
 
5
7
  import { CARRIAGE_RETURN } from "../../constants";
8
+ import { VERTICAL_SPACE_RULE_NAME } from "../../ruleNames";
6
9
 
7
10
  export default class VerticalSpaceMarkdownNode extends MarkdownNode {
8
11
  asHTML(indent, context) {
@@ -21,5 +24,17 @@ export default class VerticalSpaceMarkdownNode extends MarkdownNode {
21
24
  return domElement;
22
25
  }
23
26
 
27
+ static fromNothing() {
28
+ const startOfContentNode = StartOfContentNode.fromNothing(),
29
+ ruleName = VERTICAL_SPACE_RULE_NAME,
30
+ childNodes = [
31
+ startOfContentNode
32
+ ],
33
+ opacity = null,
34
+ verticalSpaceMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(VerticalSpaceMarkdownNode, ruleName, childNodes, opacity);
35
+
36
+ return verticalSpaceMarkdownNode;
37
+ }
38
+
24
39
  static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(VerticalSpaceMarkdownNode, ruleName, childNodes, opacity); }
25
40
  }