highmark-markdown 0.0.229 → 0.0.232

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 (37) hide show
  1. package/example.js +672 -393
  2. package/lib/elementMap.js +8 -5
  3. package/lib/example/view.js +5 -4
  4. package/lib/markdown/bnf.js +2 -2
  5. package/lib/mixins/node.js +42 -8
  6. package/lib/node/markdown/contentsLink.js +3 -3
  7. package/lib/node/markdown/{imports.js → directives.js} +17 -10
  8. package/lib/node/markdown/division.js +25 -13
  9. package/lib/node/markdown/emailLink.js +9 -2
  10. package/lib/node/markdown/embee.js +151 -0
  11. package/lib/node/markdown/heading.js +5 -5
  12. package/lib/node/markdown/{import.js → include.js} +16 -16
  13. package/lib/node/markdown.js +17 -4
  14. package/lib/nodeMap.js +5 -4
  15. package/lib/replacementNodeAndTokens.js +149 -0
  16. package/lib/ruleNames.js +15 -10
  17. package/lib/utilities/query.js +11 -2
  18. package/lib/utilities/replace.js +12 -3
  19. package/package.json +1 -1
  20. package/src/elementMap.js +12 -7
  21. package/src/example/view.js +11 -7
  22. package/src/markdown/bnf.js +7 -10
  23. package/src/mixins/node.js +17 -10
  24. package/src/node/markdown/contentsLink.js +4 -4
  25. package/src/node/markdown/{imports.js → directives.js} +8 -2
  26. package/src/node/markdown/division.js +38 -17
  27. package/src/node/markdown/emailLink.js +11 -5
  28. package/src/node/markdown/embee.js +50 -0
  29. package/src/node/markdown/heading.js +4 -4
  30. package/src/node/markdown/{import.js → include.js} +8 -8
  31. package/src/node/markdown.js +17 -2
  32. package/src/nodeMap.js +9 -6
  33. package/src/{clonedNode.js → replacementNodeAndTokens.js} +9 -3
  34. package/src/ruleNames.js +6 -4
  35. package/src/utilities/query.js +8 -0
  36. package/src/utilities/replace.js +12 -2
  37. package/lib/clonedNode.js +0 -142
package/src/elementMap.js CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { LINK_RULE_NAME,
4
4
  LINE_RULE_NAME,
5
+ EMBED_RULE_NAME,
5
6
  IMAGE_RULE_NAME,
6
7
  TABLE_RULE_NAME,
7
8
  ERROR_RULE_NAME,
@@ -9,8 +10,7 @@ import { LINK_RULE_NAME,
9
10
  MARKER_RULE_NAME,
10
11
  BULLET_RULE_NAME,
11
12
  IGNORE_RULE_NAME,
12
- IMPORT_RULE_NAME,
13
- IMPORTS_RULE_NAME,
13
+ INCLUDE_RULE_NAME,
14
14
  CONTENTS_RULE_NAME,
15
15
  DIVISION_RULE_NAME,
16
16
  FOOTNOTE_RULE_NAME,
@@ -26,6 +26,7 @@ import { LINK_RULE_NAME,
26
26
  CLASS_NAME_RULE_NAME,
27
27
  PLAIN_TEXT_RULE_NAME,
28
28
  EMAIL_LINK_RULE_NAME,
29
+ DIRECTIVES_RULE_NAME,
29
30
  END_OF_LINE_RULE_NAME,
30
31
  MARKED_TEXT_RULE_NAME,
31
32
  INLINE_TEXT_RULE_NAME,
@@ -65,6 +66,10 @@ const elementMap = {
65
66
  tagName: "span",
66
67
  className: "line"
67
68
  },
69
+ [EMBED_RULE_NAME]: {
70
+ tagName: null,
71
+ className: null
72
+ },
68
73
  [IMAGE_RULE_NAME]: {
69
74
  tagName: "img",
70
75
  className: null
@@ -93,11 +98,7 @@ const elementMap = {
93
98
  tagName: null,
94
99
  className: null
95
100
  },
96
- [IMPORT_RULE_NAME]: {
97
- tagName: null,
98
- className: null
99
- },
100
- [IMPORTS_RULE_NAME]: {
101
+ [INCLUDE_RULE_NAME]: {
101
102
  tagName: null,
102
103
  className: null
103
104
  },
@@ -161,6 +162,10 @@ const elementMap = {
161
162
  tagName: "a",
162
163
  className: "email-link"
163
164
  },
165
+ [DIRECTIVES_RULE_NAME]: {
166
+ tagName: null,
167
+ className: null
168
+ },
164
169
  [END_OF_LINE_RULE_NAME]: {
165
170
  tagName: null,
166
171
  className: null
@@ -49,9 +49,11 @@ class View extends Element {
49
49
  divisionMarkdownNodes
50
50
  };
51
51
 
52
- divisionMarkdownNode.resolveImports(context);
52
+ divisionMarkdownNode.resolveIncludes(context);
53
53
 
54
54
  divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
55
+ divisionMarkdownNode.resolveEmbeddings(context);
56
+
55
57
  divisionMarkdownNode.createFootnotes(context);
56
58
  });
57
59
 
@@ -143,13 +145,11 @@ class View extends Element {
143
145
  static initialMarkdownStyle = `min-height: initial;
144
146
  `;
145
147
 
146
- static initialMarkdown = `# Primary heading
148
+ static initialMarkdown = `@contents 2
147
149
 
148
- @contents 3
150
+ # Primary heading[^heading]
149
151
 
150
- ## Secondary heading
151
-
152
- @import example.md
152
+ @embed introduction.md
153
153
  `;
154
154
 
155
155
  static tagName = "div";
@@ -170,7 +170,11 @@ export default withStyle(View)`
170
170
  `;
171
171
 
172
172
  function importer(filePath, context) {
173
- const content = `### Tertiary heading
173
+ const content = `## Secondary heading
174
+
175
+ [^heading]: A heading.
176
+
177
+ @footnotes
174
178
  `,
175
179
  tokens = markdownLexer.tokenise(content),
176
180
  node = markdownParser.parse(tokens),
@@ -5,13 +5,7 @@ const bnf = `
5
5
  division ::= ( subDivision | endOfLine | error )+ ;
6
6
 
7
7
 
8
- subDivision.. ::= ( endOfLine | <START_OF_CONTENT> ) ( ignore
9
-
10
- | imports
11
-
12
- | contents
13
-
14
- | footnotes
8
+ subDivision.. ::= ( endOfLine | <START_OF_CONTENT> ) ( directives
15
9
 
16
10
  | primaryHeading
17
11
 
@@ -81,13 +75,16 @@ const bnf = `
81
75
  blockListing ::= blockListingStart blockText blockListingEnd ;
82
76
 
83
77
 
84
- ignore ::= "@"<NO_WHITESPACE>"ignore" ;
78
+ directives ::= ( embed | ignore | include | contents | footnotes )+ ;
85
79
 
86
80
 
87
- imports ::= import+ ;
81
+ embed ::= "@"<NO_WHITESPACE>"embed" [path] endOfLine ;
82
+
83
+
84
+ ignore ::= "@"<NO_WHITESPACE>"ignore" ;
88
85
 
89
86
 
90
- import ::= "@"<NO_WHITESPACE>"import" [path] endOfLine ;
87
+ include ::= "@"<NO_WHITESPACE>"include" [path] endOfLine ;
91
88
 
92
89
 
93
90
  contents ::= "@"<NO_WHITESPACE>"contents" [number]? endOfLine ;
@@ -1,11 +1,5 @@
1
1
  "use strict";
2
2
 
3
- function addChildNode(childNode) {
4
- const childNodes = this.getChildNodes();
5
-
6
- childNodes.push(childNode);
7
- }
8
-
9
3
  function removeChildNode(childNode) {
10
4
  const childNodes = this.getChildNodes(),
11
5
  index = childNodes.indexOf(childNode),
@@ -15,13 +9,25 @@ function removeChildNode(childNode) {
15
9
  childNodes.splice(start, deleteCount);
16
10
  }
17
11
 
18
- function replaceChildNode(replacedChildNode, replacementChildNode) {
12
+ function prependChildNode(childNode) {
13
+ const childNodes = this.getChildNodes();
14
+
15
+ childNodes.unshift(childNode);
16
+ }
17
+
18
+ function appendChildNode(childNode) {
19
+ const childNodes = this.getChildNodes();
20
+
21
+ childNodes.push(childNode);
22
+ }
23
+
24
+ function replaceChildNodes(replacedChildNode, replacementChildNodes) {
19
25
  const childNodes = this.getChildNodes(),
20
26
  index = childNodes.indexOf(replacedChildNode),
21
27
  start = index, ///
22
28
  deleteCount = 1;
23
29
 
24
- childNodes.splice(start, deleteCount, replacementChildNode);
30
+ childNodes.splice(start, deleteCount, ...replacementChildNodes);
25
31
  }
26
32
 
27
33
  function getDescendantNodes(descendantNodes = []) {
@@ -45,9 +51,10 @@ function getDescendantNodes(descendantNodes = []) {
45
51
  }
46
52
 
47
53
  const nodeMixins = {
48
- addChildNode,
49
54
  removeChildNode,
50
- replaceChildNode,
55
+ appendChildNode,
56
+ prependChildNode,
57
+ replaceChildNodes,
51
58
  getDescendantNodes
52
59
  };
53
60
 
@@ -2,8 +2,8 @@
2
2
 
3
3
  import { arrayUtilities } from "necessary";
4
4
 
5
- import ClonedNode from "../../clonedNode";
6
5
  import MarkdownNode from "../../node/markdown";
6
+ import ReplacementNodeAndTokens from "../../replacementNodeAndTokens";
7
7
 
8
8
  import { HREF_ATTRIBUTE_NAME } from "../../attributeNames";
9
9
  import { CONTENTS_LINK_RULE_NAME } from "../../ruleNames";
@@ -59,11 +59,11 @@ export default class ContentsLinkMarkdownNode extends MarkdownNode {
59
59
 
60
60
  if (headingMarkdownNode !== null) {
61
61
  const node = headingMarkdownNode, ///
62
- clonedNode = ClonedNode.fromNode(node, context),
63
- childNodes = clonedNode.getChildNodes(),
62
+ replacementNodeAndTokens = ReplacementNodeAndTokens.fromNode(node, context),
63
+ childNodes = replacementNodeAndTokens.getChildNodes(),
64
64
  ruleName = CONTENTS_LINK_RULE_NAME,
65
65
  opacity = null,
66
- tokens = clonedNode.getTokens(),
66
+ tokens = replacementNodeAndTokens.getTokens(),
67
67
  identifier = headingMarkdownNode.identifier(context);
68
68
 
69
69
  contentsLinkMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsLinkMarkdownNode, ruleName, childNodes, opacity, tokens, identifier);
@@ -2,7 +2,7 @@
2
2
 
3
3
  import MarkdownNode from "../../node/markdown";
4
4
 
5
- export default class ImportsMarkdownNode extends MarkdownNode {
5
+ export default class DirectivesMarkdownNode extends MarkdownNode {
6
6
  asHTML(indent, context) {
7
7
  const childNodesHTML = this.childNodesAsHTML(indent, context),
8
8
  html = childNodesHTML; ///
@@ -10,5 +10,11 @@ export default class ImportsMarkdownNode extends MarkdownNode {
10
10
  return html;
11
11
  }
12
12
 
13
- static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(ImportsMarkdownNode, ruleName, childNodes, opacity); }
13
+ createDOMElement(context) {
14
+ const domElement = null;
15
+
16
+ return domElement;
17
+ }
18
+
19
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(DirectivesMarkdownNode, ruleName, childNodes, opacity); }
14
20
  }
@@ -7,8 +7,12 @@ import ContentsListMarkdownNode from "../../node/markdown/contentsList";
7
7
  import FootnotesListMarkdownNode from "../../node/markdown/footnotesList";
8
8
 
9
9
  import { renumberLinkMarkdownNodes } from "../../utilities/footnotes";
10
- import { replaceNode, replaceTokens } from "../../utilities/replace";
11
- import { ignoreMarkdownNodeFromNode, headingMarkdownNodesFromNode, contentsMarkdownNodeFromNode, footnotesMarkdownNodesFromNode } from "../../utilities/query";
10
+ import { replaceNode, replaceNodes, replaceTokens } from "../../utilities/replace";
11
+ import { embedMarkdownNodesFromNode,
12
+ ignoreMarkdownNodeFromNode,
13
+ headingMarkdownNodesFromNode,
14
+ contentsMarkdownNodeFromNode,
15
+ footnotesMarkdownNodesFromNode } from "../../utilities/query";
12
16
 
13
17
  const { filter } = arrayUtilities;
14
18
 
@@ -105,31 +109,48 @@ export default class DivisionMarkdownNode extends MarkdownNode {
105
109
 
106
110
  createFootnotes(context) {
107
111
  const node = this, ///
108
- footnotesMarkdownNodes = footnotesMarkdownNodesFromNode(node);
112
+ footnotesMarkdownNodes = footnotesMarkdownNodesFromNode(node),
113
+ footnotesMarkdownNodesLength = footnotesMarkdownNodes.length;
109
114
 
110
- footnotesMarkdownNodes.forEach((footnotesMarkdownNode) => {
111
- let childNode,
112
- parentNode;
115
+ if (footnotesMarkdownNodesLength > 0) {
116
+ const divisionMarkdownNode = this, ///
117
+ footnotesListMarkdownNode = FootnotesListMarkdownNode.fromDivisionMarkdownNode(divisionMarkdownNode, context);
118
+
119
+ if (footnotesListMarkdownNode !== null) {
120
+ const childNode = footnotesListMarkdownNode; ///
121
+
122
+ divisionMarkdownNode.appendChildNode(childNode);
123
+
124
+ renumberLinkMarkdownNodes(divisionMarkdownNode, footnotesListMarkdownNode, context)
125
+ }
126
+ }
127
+ }
113
128
 
114
- childNode = footnotesMarkdownNode; ///
129
+ resolveEmbeddings(context) {
130
+ const node = this, ///
131
+ embedMarkdownNodes = embedMarkdownNodesFromNode(node);
115
132
 
116
- parentNode = this.findParentNode(childNode);
133
+ embedMarkdownNodes.map((embedMarkdownNode) => {
134
+ const replacementNodeAndTokens = embedMarkdownNode.replacementNodeAndTokens(context);
117
135
 
118
- const subDivisionMarkdownNode = parentNode; ///
136
+ if (replacementNodeAndTokens !== null) {
137
+ let tokens;
119
138
 
120
- childNode = subDivisionMarkdownNode; ///
139
+ tokens = replacementNodeAndTokens.getTokens();
121
140
 
122
- parentNode = this.findParentNode(childNode);
141
+ const childNodes = replacementNodeAndTokens.getChildNodes(),
142
+ replacementNodes = childNodes, ///
143
+ replacementTokens = tokens; ///
123
144
 
124
- const divisionMarkdownNode = parentNode, ///
125
- footnotesListMarkdownNode = FootnotesListMarkdownNode.fromDivisionMarkdownNode(divisionMarkdownNode, context);
145
+ ({ tokens } = context);
126
146
 
127
- if (footnotesListMarkdownNode !== null) {
128
- childNode = footnotesListMarkdownNode; ///
147
+ const childNode = embedMarkdownNode, ///
148
+ parentNode = this.findParentNode(childNode),
149
+ replacedNode = embedMarkdownNode; ///
129
150
 
130
- divisionMarkdownNode.addChildNode(childNode);
151
+ replaceNodes(replacementNodes, replacedNode, parentNode);
131
152
 
132
- renumberLinkMarkdownNodes(divisionMarkdownNode, footnotesListMarkdownNode, context)
153
+ replaceTokens(replacementTokens, replacedNode, tokens);
133
154
  }
134
155
  });
135
156
  }
@@ -80,11 +80,17 @@ class EmailLinkMarkdownNode extends MarkdownNode {
80
80
  }
81
81
 
82
82
  createChildNodeDOMElements(context) {
83
- const inlineText = this.inlineText(context),
84
- content = (inlineText !== null) ?
85
- inlineText :
86
- this.content(context),
87
- textNode = document.createTextNode(content),
83
+ const inlineText = this.inlineText(context);
84
+
85
+ let content;
86
+
87
+ if (inlineText !== null) {
88
+ content = inlineText; ///
89
+ } else {
90
+ content = this.content(context);
91
+ }
92
+
93
+ const textNode = document.createTextNode(content),
88
94
  domElement = textNode; ///
89
95
 
90
96
  this.addDOMElement(domElement);
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ import { arrayUtilities } from "necessary";
4
+
5
+ import MarkdownNode from "../../node/markdown";
6
+ import ReplacementNodeAndTokens from "../../replacementNodeAndTokens";
7
+
8
+ const { fourth } = arrayUtilities;
9
+
10
+ export default class EmbedMarkdownNode extends MarkdownNode {
11
+ replacementNodeAndTokens(context) {
12
+ let replacementNodeAndTokens = null;
13
+
14
+ const { importer = null } = context;
15
+
16
+ if (importer !== null) {
17
+ const filePath = this.filePath(context);
18
+
19
+ importer(filePath, context);
20
+
21
+ const { importedNode = null,
22
+ importedTokens = null } = context;
23
+
24
+ if (importedNode !== null) {
25
+ delete context.importedNode;
26
+ delete context.importedTokens;
27
+ delete context.importedClassName;
28
+
29
+ const node = importedNode, ///
30
+ tokens = importedTokens; ///
31
+
32
+ replacementNodeAndTokens = ReplacementNodeAndTokens.fromNodeAndTokens(node, tokens);
33
+ }
34
+ }
35
+
36
+ return replacementNodeAndTokens;
37
+ }
38
+
39
+ filePath(context) {
40
+ const childNodes = this.getChildNodes(),
41
+ fourthChildNode = fourth(childNodes),
42
+ pathTerminalNode = fourthChildNode, ///
43
+ pathTerminalNodeContent = pathTerminalNode.getContent(),
44
+ filePath = pathTerminalNodeContent; ///
45
+
46
+ return filePath;
47
+ }
48
+
49
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(EmbedMarkdownNode, ruleName, childNodes, opacity); }
50
+ }
@@ -18,7 +18,7 @@ export default class HeadingMarkdownNode extends MarkdownNode {
18
18
  anchorMarkdownNode = AnchorMarkdownNode.fromIdentifier(identifier),
19
19
  childNode = anchorMarkdownNode; ///
20
20
 
21
- this.addChildNode(childNode);
21
+ this.prependChildNode(childNode);
22
22
  }
23
23
 
24
24
  identifier(context) {
@@ -45,11 +45,11 @@ export default class HeadingMarkdownNode extends MarkdownNode {
45
45
  function identifierFromPlainText(plainText) {
46
46
  plainText = plainText.toLowerCase(); ///
47
47
 
48
- plainText = removedLeadingWhitespace(plainText);
48
+ plainText = removedLeadingWhitespace(plainText); ///
49
49
 
50
- plainText = removeNonAlphabeticAndSpaceCharacters(plainText);
50
+ plainText = removeNonAlphabeticAndSpaceCharacters(plainText); ///
51
51
 
52
- plainText = replaceSpacesWithHyphens(plainText);
52
+ plainText = replaceSpacesWithHyphens(plainText); ///
53
53
 
54
54
  const identifier = plainText; ///
55
55
 
@@ -6,8 +6,8 @@ import MarkdownNode from "../../node/markdown";
6
6
 
7
7
  const { push, fourth } = arrayUtilities;
8
8
 
9
- export default class ImportMarkdownNode extends MarkdownNode {
10
- resolveImports(context) {
9
+ export default class IncludeMarkdownNode extends MarkdownNode {
10
+ resolveIncludes(context) {
11
11
  let html = null;
12
12
 
13
13
  const { importer = null } = context;
@@ -21,11 +21,11 @@ export default class ImportMarkdownNode extends MarkdownNode {
21
21
  importedTokens = null,
22
22
  importedClassName = null } = context;
23
23
 
24
- delete context.importedNode;
25
- delete context.importedTokens;
26
- delete context.importedClassName;
27
-
28
24
  if (importedNode !== null) {
25
+ delete context.importedNode;
26
+ delete context.importedTokens;
27
+ delete context.importedClassName;
28
+
29
29
  const { tokens, divisionMarkdownNodes } = context,
30
30
  divisionMarkdownNode = importedNode, ///
31
31
  divisionClassName = importedClassName, ///
@@ -39,7 +39,7 @@ export default class ImportMarkdownNode extends MarkdownNode {
39
39
  divisionMarkdownNodes.push(divisionMarkdownNode);
40
40
  }
41
41
 
42
- divisionMarkdownNode.resolveImports(context);
42
+ divisionMarkdownNode.resolveIncludes(context);
43
43
  }
44
44
  }
45
45
 
@@ -56,5 +56,5 @@ export default class ImportMarkdownNode extends MarkdownNode {
56
56
  return filePath;
57
57
  }
58
58
 
59
- static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(ImportMarkdownNode, ruleName, childNodes, opacity); }
59
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(IncludeMarkdownNode, ruleName, childNodes, opacity); }
60
60
  }
@@ -94,7 +94,7 @@ class MarkdownNode extends NonTerminalNode {
94
94
  return attributeValue;
95
95
  }
96
96
 
97
- resolveImports(context) {
97
+ resolveIncludes(context) {
98
98
  const childNodes = this.getChildNodes();
99
99
 
100
100
  childNodes.forEach((childNode) => {
@@ -104,7 +104,22 @@ class MarkdownNode extends NonTerminalNode {
104
104
  const nonTerminalNode = childNode, ///
105
105
  markdownNode = nonTerminalNode; ///
106
106
 
107
- markdownNode.resolveImports(context);
107
+ markdownNode.resolveIncludes(context);
108
+ }
109
+ });
110
+ }
111
+
112
+ resolveEmbeddings(context) {
113
+ const childNodes = this.getChildNodes();
114
+
115
+ childNodes.forEach((childNode) => {
116
+ const childNodeNonTerminalNode = childNode.isNonTerminalNode();
117
+
118
+ if (childNodeNonTerminalNode) {
119
+ const nonTerminalNode = childNode, ///
120
+ markdownNode = nonTerminalNode; ///
121
+
122
+ markdownNode.resolveEmbeddings(context);
108
123
  }
109
124
  });
110
125
  }
package/src/nodeMap.js CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  import LinkMarkdownNode from "./node/markdown/link";
4
4
  import LineMarkdownNode from "./node/markdown/line";
5
+ import EmbedMarkdownNode from "./node/markdown/embee";
5
6
  import ImageMarkdownNode from "./node/markdown/image";
6
7
  import TableMarkdownNode from "./node/markdown/table";
7
8
  import ErrorMarkdownNode from "./node/markdown/error";
@@ -9,8 +10,7 @@ import AnchorMarkdownNode from "./node/markdown/anchor";
9
10
  import MarkerMarkdownNode from "./node/markdown/marker";
10
11
  import BulletMarkdownNode from "./node/markdown/bullet";
11
12
  import IgnoreMarkdownNode from "./node/markdown/ignore";
12
- import ImportMarkdownNode from "./node/markdown/import";
13
- import ImportsMarkdownNode from "./node/markdown/imports";
13
+ import IncludeMarkdownNode from "./node/markdown/include";
14
14
  import ContentsMarkdownNode from "./node/markdown/contents";
15
15
  import DivisionMarkdownNode from "./node/markdown/division";
16
16
  import FootnoteMarkdownNode from "./node/markdown/footnote";
@@ -27,6 +27,7 @@ import ClassNameMarkdownNode from "./node/markdown/className";
27
27
  import PlainTextMarkdownNode from "./node/markdown/plainText";
28
28
  import EmailLinkMarkdownNode from "./node/markdown/emailLink";
29
29
  import EndOfLineMarkdownNode from "./node/markdown/endOfLine";
30
+ import DirectivesMarkdownNode from "./node/markdown/directives";
30
31
  import MarkedTextMarkdownNode from "./node/markdown/markedText";
31
32
  import InlineTextMarkdownNode from "./node/markdown/inlineText";
32
33
  import StrongTextMarkdownNode from "./node/markdown/strongText";
@@ -56,6 +57,7 @@ import StronglyEmphasisedTextMarkdownNode from "./node/markdown/stronglyEmphasis
56
57
 
57
58
  import { LINK_RULE_NAME,
58
59
  LINE_RULE_NAME,
60
+ EMBED_RULE_NAME,
59
61
  IMAGE_RULE_NAME,
60
62
  TABLE_RULE_NAME,
61
63
  ERROR_RULE_NAME,
@@ -63,8 +65,7 @@ import { LINK_RULE_NAME,
63
65
  MARKER_RULE_NAME,
64
66
  BULLET_RULE_NAME,
65
67
  IGNORE_RULE_NAME,
66
- IMPORT_RULE_NAME,
67
- IMPORTS_RULE_NAME,
68
+ INCLUDE_RULE_NAME,
68
69
  CONTENTS_RULE_NAME,
69
70
  DIVISION_RULE_NAME,
70
71
  FOOTNOTE_RULE_NAME,
@@ -80,6 +81,7 @@ import { LINK_RULE_NAME,
80
81
  CLASS_NAME_RULE_NAME,
81
82
  PLAIN_TEXT_RULE_NAME,
82
83
  EMAIL_LINK_RULE_NAME,
84
+ DIRECTIVES_RULE_NAME,
83
85
  END_OF_LINE_RULE_NAME,
84
86
  MARKED_TEXT_RULE_NAME,
85
87
  INLINE_TEXT_RULE_NAME,
@@ -111,6 +113,7 @@ import { LINK_RULE_NAME,
111
113
  const nodeMap = {
112
114
  [LINK_RULE_NAME]: LinkMarkdownNode,
113
115
  [LINE_RULE_NAME]: LineMarkdownNode,
116
+ [EMBED_RULE_NAME]: EmbedMarkdownNode,
114
117
  [IMAGE_RULE_NAME]: ImageMarkdownNode,
115
118
  [TABLE_RULE_NAME]: TableMarkdownNode,
116
119
  [ERROR_RULE_NAME]: ErrorMarkdownNode,
@@ -118,8 +121,7 @@ const nodeMap = {
118
121
  [MARKER_RULE_NAME]: MarkerMarkdownNode,
119
122
  [BULLET_RULE_NAME]: BulletMarkdownNode,
120
123
  [IGNORE_RULE_NAME]: IgnoreMarkdownNode,
121
- [IMPORT_RULE_NAME]: ImportMarkdownNode,
122
- [IMPORTS_RULE_NAME]: ImportsMarkdownNode,
124
+ [INCLUDE_RULE_NAME]: IncludeMarkdownNode,
123
125
  [CONTENTS_RULE_NAME]: ContentsMarkdownNode,
124
126
  [DIVISION_RULE_NAME]: DivisionMarkdownNode,
125
127
  [FOOTNOTE_RULE_NAME]: FootnoteMarkdownNode,
@@ -135,6 +137,7 @@ const nodeMap = {
135
137
  [CLASS_NAME_RULE_NAME]: ClassNameMarkdownNode,
136
138
  [PLAIN_TEXT_RULE_NAME]: PlainTextMarkdownNode,
137
139
  [EMAIL_LINK_RULE_NAME]: EmailLinkMarkdownNode,
140
+ [DIRECTIVES_RULE_NAME]: DirectivesMarkdownNode,
138
141
  [END_OF_LINE_RULE_NAME]: EndOfLineMarkdownNode,
139
142
  [MARKED_TEXT_RULE_NAME]: MarkedTextMarkdownNode,
140
143
  [INLINE_TEXT_RULE_NAME]: InlineTextMarkdownNode,
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- export default class ClonedNode {
3
+ export default class ReplacementNodeAndTokens {
4
4
  constructor(node, tokens) {
5
5
  this.node = node;
6
6
  this.tokens = tokens;
@@ -28,9 +28,15 @@ export default class ClonedNode {
28
28
 
29
29
  tokens = replacementTokens; ///
30
30
 
31
- const clonedNode = new ClonedNode(node, tokens);
31
+ const replacementNodeAndTokens = new ReplacementNodeAndTokens(node, tokens);
32
32
 
33
- return clonedNode;
33
+ return replacementNodeAndTokens;
34
+ }
35
+
36
+ static fromNodeAndTokens(node, tokens) {
37
+ const replacementNodeAndTokens = new ReplacementNodeAndTokens(node, tokens);
38
+
39
+ return replacementNodeAndTokens;
34
40
  }
35
41
  }
36
42
 
package/src/ruleNames.js CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  export const LINK_RULE_NAME = "link";
4
4
  export const LINE_RULE_NAME = "line";
5
+ export const EMBED_RULE_NAME = "embed";
5
6
  export const IMAGE_RULE_NAME = "image";
6
7
  export const TABLE_RULE_NAME = "table";
7
8
  export const ERROR_RULE_NAME = "error";
@@ -9,8 +10,7 @@ export const ANCHOR_RULE_NAME = "anchor";
9
10
  export const MARKER_RULE_NAME = "marker";
10
11
  export const BULLET_RULE_NAME = "bullet";
11
12
  export const IGNORE_RULE_NAME = "ignore";
12
- export const IMPORT_RULE_NAME = "import";
13
- export const IMPORTS_RULE_NAME = "imports";
13
+ export const INCLUDE_RULE_NAME = "include";
14
14
  export const CONTENTS_RULE_NAME = "contents";
15
15
  export const DIVISION_RULE_NAME = "division";
16
16
  export const FOOTNOTE_RULE_NAME = "footnote";
@@ -26,6 +26,7 @@ export const BLOCK_TEXT_RULE_NAME = "blockText";
26
26
  export const CLASS_NAME_RULE_NAME = "className";
27
27
  export const PLAIN_TEXT_RULE_NAME = "plainText";
28
28
  export const EMAIL_LINK_RULE_NAME = "emailLink";
29
+ export const DIRECTIVES_RULE_NAME = "directives";
29
30
  export const END_OF_LINE_RULE_NAME = "endOfLine";
30
31
  export const MARKED_TEXT_RULE_NAME = "markedText";
31
32
  export const INLINE_TEXT_RULE_NAME = "inlineText";
@@ -60,6 +61,7 @@ export const STRONGLY_EMPHASISED_TEXT_RULE_NAME = "stronglyEmphasisedText";
60
61
  const ruleNames = {
61
62
  LINK_RULE_NAME,
62
63
  LINE_RULE_NAME,
64
+ EMBED_RULE_NAME,
63
65
  IMAGE_RULE_NAME,
64
66
  TABLE_RULE_NAME,
65
67
  ERROR_RULE_NAME,
@@ -67,8 +69,7 @@ const ruleNames = {
67
69
  MARKER_RULE_NAME,
68
70
  BULLET_RULE_NAME,
69
71
  IGNORE_RULE_NAME,
70
- IMPORT_RULE_NAME,
71
- IMPORTS_RULE_NAME,
72
+ INCLUDE_RULE_NAME,
72
73
  CONTENTS_RULE_NAME,
73
74
  DIVISION_RULE_NAME,
74
75
  FOOTNOTE_RULE_NAME,
@@ -84,6 +85,7 @@ const ruleNames = {
84
85
  CLASS_NAME_RULE_NAME,
85
86
  PLAIN_TEXT_RULE_NAME,
86
87
  EMAIL_LINK_RULE_NAME,
88
+ DIRECTIVES_RULE_NAME,
87
89
  END_OF_LINE_RULE_NAME,
88
90
  MARKED_TEXT_RULE_NAME,
89
91
  INLINE_TEXT_RULE_NAME,
@@ -6,6 +6,7 @@ import { arrayUtilities } from "necessary";
6
6
  const { first, push } = arrayUtilities;
7
7
 
8
8
  const linkMarkdownNodesQuery = Query.fromExpression(`//link`),
9
+ embedMarkdownNodesQuery = Query.fromExpression(`//embed`),
9
10
  ignoreMarkdownNodeQuery = Query.fromExpression(`//ignore`),
10
11
  headingMarkdownNodesQuery = Query.fromExpression(`//primaryHeading|secondaryHeading|tertiaryHeading|quaternaryHeading`),
11
12
  contentsMarkdownNodeQuery = Query.fromExpression(`//contents`),
@@ -50,6 +51,12 @@ export function linkMarkdownNodesFromNode(node, linkMarkdownNodes = []) {
50
51
  return linkMarkdownNodes;
51
52
  }
52
53
 
54
+ export function embedMarkdownNodesFromNode(node, embedMarkdownNodes = []) {
55
+ nodesFromNodeAndQuery(node, embedMarkdownNodesQuery, embedMarkdownNodes);
56
+
57
+ return embedMarkdownNodes;
58
+ }
59
+
53
60
  export function ignoreMarkdownNodeFromNode(node) {
54
61
  const ignoreMarkdownNode = nodeFromNodeAndQuery(node, ignoreMarkdownNodeQuery);
55
62
 
@@ -100,6 +107,7 @@ export function linkReferenceOrFootnotesMarkdownNodesFromNode(node, linkReferenc
100
107
 
101
108
  export default {
102
109
  linkMarkdownNodesFromNode,
110
+ embedMarkdownNodesFromNode,
103
111
  ignoreMarkdownNodeFromNode,
104
112
  contentsMarkdownNodeFromNode,
105
113
  footnotesMarkdownNodeFromNode,