highmark-markdown 0.0.225 → 0.0.228

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 (41) hide show
  1. package/example.js +1003 -565
  2. package/lib/clonedNode.js +142 -0
  3. package/lib/elementMap.js +4 -1
  4. package/lib/example/view/div/preview.js +6 -4
  5. package/lib/example/view/xmp.js +12 -4
  6. package/lib/example/view.js +30 -15
  7. package/lib/markdown/bnf.js +2 -2
  8. package/lib/node/markdown/contentsItem.js +14 -2
  9. package/lib/node/markdown/contentsLink.js +48 -65
  10. package/lib/node/markdown/contentsList.js +30 -6
  11. package/lib/node/markdown/division.js +26 -23
  12. package/lib/node/markdown/ignore.js +120 -0
  13. package/lib/node/markdown/import.js +14 -17
  14. package/lib/node/markdown/link.js +30 -1
  15. package/lib/node/markdown.js +3 -4
  16. package/lib/nodeMap.js +3 -2
  17. package/lib/ruleNames.js +6 -1
  18. package/lib/style/selector.js +76 -30
  19. package/lib/utilities/query.js +10 -2
  20. package/lib/utilities/replace.js +57 -0
  21. package/package.json +5 -5
  22. package/src/clonedNode.js +146 -0
  23. package/src/elementMap.js +5 -0
  24. package/src/example/view/div/preview.js +6 -4
  25. package/src/example/view/xmp.js +14 -4
  26. package/src/example/view.js +41 -29
  27. package/src/markdown/bnf.js +6 -1
  28. package/src/node/markdown/contentsItem.js +11 -0
  29. package/src/node/markdown/contentsLink.js +26 -114
  30. package/src/node/markdown/contentsList.js +37 -6
  31. package/src/node/markdown/division.js +40 -38
  32. package/src/node/markdown/ignore.js +7 -0
  33. package/src/node/markdown/import.js +19 -26
  34. package/src/node/markdown/link.js +2 -0
  35. package/src/node/markdown.js +2 -4
  36. package/src/nodeMap.js +3 -0
  37. package/src/ruleNames.js +2 -0
  38. package/src/style/selector.js +33 -27
  39. package/src/utilities/query.js +8 -0
  40. package/src/utilities/{tokens.js → replace.js} +9 -3
  41. package/lib/utilities/tokens.js +0 -45
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { arrayUtilities } from "necessary";
4
4
 
5
+ import ClonedNode from "../../clonedNode";
5
6
  import MarkdownNode from "../../node/markdown";
6
7
 
7
8
  import { HREF_ATTRIBUTE_NAME } from "../../attributeNames";
@@ -10,12 +11,20 @@ import { CONTENTS_LINK_RULE_NAME } from "../../ruleNames";
10
11
  const { push } = arrayUtilities;
11
12
 
12
13
  export default class ContentsLinkMarkdownNode extends MarkdownNode {
13
- constructor(ruleName, childNodes, opacity, precedence, domElement, identifier) {
14
- super(ruleName, childNodes, opacity, precedence, domElement);
14
+ constructor(ruleName, childNodes, opacity, precedence, domElement, tokens, identifier) {
15
+ super(ruleName, childNodes, opacity, precedence, tokens, domElement);
16
+
17
+ this.tokens = tokens;
15
18
 
16
19
  this.identifier = identifier;
17
20
  }
18
21
 
22
+ getTokens(tokens = []) {
23
+ push(tokens, this.tokens);
24
+
25
+ return tokens;
26
+ }
27
+
19
28
  getIdentifier() {
20
29
  return this.identifier;
21
30
  }
@@ -32,6 +41,16 @@ export default class ContentsLinkMarkdownNode extends MarkdownNode {
32
41
  return attributeValue;
33
42
  }
34
43
 
44
+ clone() {
45
+ const tokens = this.tokens.map((token) => {
46
+ token = token.clone(); ///
47
+
48
+ return token;
49
+ });
50
+
51
+ return super.clone(tokens, this.identifier);
52
+ }
53
+
35
54
  static fromNestedHeadingMarkdownNode(nestedHeadingMarkdownNode, context) {
36
55
  let contentsLinkMarkdownNode = null;
37
56
 
@@ -39,124 +58,17 @@ export default class ContentsLinkMarkdownNode extends MarkdownNode {
39
58
  headingMarkdownNode = node; ///
40
59
 
41
60
  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, ///
61
+ const node = headingMarkdownNode, ///
62
+ clonedNode = ClonedNode.fromNode(node, context),
63
+ childNodes = clonedNode.getChildNodes(),
52
64
  ruleName = CONTENTS_LINK_RULE_NAME,
53
65
  opacity = null,
66
+ tokens = clonedNode.getTokens(),
54
67
  identifier = headingMarkdownNode.identifier(context);
55
68
 
56
- contentsLinkMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsLinkMarkdownNode, ruleName, childNodes, opacity, identifier);
69
+ contentsLinkMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsLinkMarkdownNode, ruleName, childNodes, opacity, tokens, identifier);
57
70
  }
58
71
 
59
72
  return contentsLinkMarkdownNode;
60
73
  }
61
74
  }
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
- }
@@ -3,20 +3,51 @@
3
3
  import MarkdownNode from "../../node/markdown";
4
4
  import ContentsItemMarkdownNode from "../../node/markdown/contentsItem";
5
5
 
6
+ import { nestNodes } from "../../utilities/contents";
6
7
  import { CONTENTS_LIST_RULE_NAME } from "../../ruleNames";
7
8
 
8
9
  export default class ContentsListMarkdownNode extends MarkdownNode {
10
+ getTokens(tokens = []) {
11
+ const childNodes = this.getChildNodes(),
12
+ contentsItemMarkdownNodes = childNodes; ///
13
+
14
+ contentsItemMarkdownNodes.forEach((contentsItemMarkdownNode) => {
15
+ contentsItemMarkdownNode.getTokens(tokens);
16
+ });
17
+
18
+ return tokens;
19
+ }
20
+
21
+ static fromHeadingMarkdownNodes(headingMarkdownNodes, context) {
22
+ const nodes = headingMarkdownNodes, ///
23
+ nestedNode = nestNodes(nodes),
24
+ childNestedNodes = nestedNode.getChildNestedNodes(),
25
+ nestedHeadingMarkdownNodes = childNestedNodes, ///
26
+ ruleName = CONTENTS_LIST_RULE_NAME,
27
+ childNodes = childNodesFromNestedHeadingMarkdownNodes(nestedHeadingMarkdownNodes, context),
28
+ opacity = null,
29
+ contentsListMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsListMarkdownNode, ruleName, childNodes, opacity);
30
+
31
+ return contentsListMarkdownNode;
32
+ }
33
+
9
34
  static fromNestedHeadingMarkdownNodes(nestedHeadingMarkdownNodes, context) {
10
35
  const ruleName = CONTENTS_LIST_RULE_NAME,
11
- childNodes = nestedHeadingMarkdownNodes.map((nestedHeadingMarkdownNode) => {
12
- const contentsItemMarkdownNode = ContentsItemMarkdownNode.fromContentsListMarkdownNodeAndNestedHeadingMarkdownNode(ContentsListMarkdownNode, nestedHeadingMarkdownNode, context),
13
- childNode = contentsItemMarkdownNode; ///
14
-
15
- return childNode;
16
- }),
36
+ childNodes = childNodesFromNestedHeadingMarkdownNodes(nestedHeadingMarkdownNodes, context),
17
37
  opacity = null,
18
38
  contentsListMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsListMarkdownNode, ruleName, childNodes, opacity);
19
39
 
20
40
  return contentsListMarkdownNode;
21
41
  }
22
42
  }
43
+
44
+ function childNodesFromNestedHeadingMarkdownNodes(nestedHeadingMarkdownNodes, context) {
45
+ const childNodes = nestedHeadingMarkdownNodes.map((nestedHeadingMarkdownNode) => {
46
+ const contentsItemMarkdownNode = ContentsItemMarkdownNode.fromContentsListMarkdownNodeAndNestedHeadingMarkdownNode(ContentsListMarkdownNode, nestedHeadingMarkdownNode, context),
47
+ childNode = contentsItemMarkdownNode; ///
48
+
49
+ return childNode;
50
+ });
51
+
52
+ return childNodes;
53
+ }
@@ -6,10 +6,9 @@ import MarkdownNode from "../../node/markdown";
6
6
  import ContentsListMarkdownNode from "../../node/markdown/contentsList";
7
7
  import FootnotesListMarkdownNode from "../../node/markdown/footnotesList";
8
8
 
9
- import { nestNodes } from "../../utilities/contents";
10
- import { replaceTokens } from "../../utilities/tokens";
11
9
  import { renumberLinkMarkdownNodes } from "../../utilities/footnotes";
12
- import { headingMarkdownNodesFromNode, contentsMarkdownNodeFromNode, footnotesMarkdownNodesFromNode } from "../../utilities/query";
10
+ import { replaceNode, replaceTokens } from "../../utilities/replace";
11
+ import { ignoreMarkdownNodeFromNode, headingMarkdownNodesFromNode, contentsMarkdownNodeFromNode, footnotesMarkdownNodesFromNode } from "../../utilities/query";
13
12
 
14
13
  const { filter } = arrayUtilities;
15
14
 
@@ -34,6 +33,14 @@ export default class DivisionMarkdownNode extends MarkdownNode {
34
33
  return className;
35
34
  }
36
35
 
36
+ isIgnored() {
37
+ const node = this,
38
+ ignoreMarkdownNode = ignoreMarkdownNodeFromNode(node),
39
+ ignored = (ignoreMarkdownNode !== null);
40
+
41
+ return ignored;
42
+ }
43
+
37
44
  findParentNode(childNode, node = this) {
38
45
  let parentNode = null;
39
46
 
@@ -63,53 +70,48 @@ export default class DivisionMarkdownNode extends MarkdownNode {
63
70
  }
64
71
 
65
72
  createContents(context) {
73
+ let contentsCreated = false;
74
+
66
75
  const node = this, ///
67
76
  contentsMarkdownNode = contentsMarkdownNodeFromNode(node);
68
77
 
69
- if (contentsMarkdownNode === null) {
70
- return;
71
- }
78
+ if (contentsMarkdownNode !== null) {
79
+ const headingMarkdownNodes = headingMarkdownNodesFromNode(node),
80
+ minimumPosition = contentsMarkdownNode.minimumPosition(context),
81
+ maximumLevel = contentsMarkdownNode.maximumLevel(context);
72
82
 
73
- const headingMarkdownNodes = headingMarkdownNodesFromNode(node),
74
- minimumPosition = contentsMarkdownNode.minimumPosition(context),
75
- maximumLevel = contentsMarkdownNode.maximumLevel(context);
83
+ filter(headingMarkdownNodes, (headingMarkdownNode) => {
84
+ const level = headingMarkdownNode.getLevel(),
85
+ position = headingMarkdownNode.position(context);
76
86
 
77
- filter(headingMarkdownNodes, (headingMarkdownNode) => {
78
- const level = headingMarkdownNode.getLevel(),
79
- position = headingMarkdownNode.position(context);
87
+ if ((level <= maximumLevel) && (position > minimumPosition)) {
88
+ return true;
89
+ }
90
+ });
80
91
 
81
- if ((level <= maximumLevel) && (position > minimumPosition)) {
82
- return true;
83
- }
84
- });
92
+ const headingMarkdownNodesLength = headingMarkdownNodes.length;
85
93
 
86
- const headingMarkdownNodesLength = headingMarkdownNodes.length;
87
-
88
- if (headingMarkdownNodesLength === 0) {
89
- return;
90
- }
91
-
92
- const nodes = headingMarkdownNodes, ///
93
- nestedNode = nestNodes(nodes),
94
- childNestedNodes = nestedNode.getChildNestedNodes(),
95
- replacementTokens = [],
96
- nestedHeadingMarkdownNodes = childNestedNodes; ///
94
+ if (headingMarkdownNodesLength === 0) {
95
+ return;
96
+ }
97
97
 
98
- Object.assign(context, {
99
- replacementTokens
100
- });
98
+ const {tokens} = context,
99
+ contentsListMarkdownNode = ContentsListMarkdownNode.fromHeadingMarkdownNodes(headingMarkdownNodes, context),
100
+ contentsListMarkdownNodeTokens = contentsListMarkdownNode.getTokens(),
101
+ childNode = contentsMarkdownNode, ///
102
+ parentNode = this.findParentNode(childNode),
103
+ replacedNode = contentsMarkdownNode, ///
104
+ replacementNode = contentsListMarkdownNode, ///
105
+ replacementTokens = contentsListMarkdownNodeTokens; ///
101
106
 
102
- const contentsListMarkdownNode = ContentsListMarkdownNode.fromNestedHeadingMarkdownNodes(nestedHeadingMarkdownNodes, context),
103
- childNode = contentsMarkdownNode, ///
104
- parentNode = this.findParentNode(childNode),
105
- replacedChildNode = contentsMarkdownNode, ///
106
- replacementChildNode = contentsListMarkdownNode; ///
107
+ replaceNode(replacementNode, replacedNode, parentNode);
107
108
 
108
- parentNode.replaceChildNode(replacedChildNode, replacementChildNode);
109
+ replaceTokens(replacementTokens, replacedNode, tokens);
109
110
 
110
- replaceTokens(replacedChildNode, replacementTokens, context);
111
+ contentsCreated = true;
112
+ }
111
113
 
112
- delete context.replacementTokens;
114
+ return contentsCreated;
113
115
  }
114
116
 
115
117
  createFootnotes(context) {
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ import MarkdownNode from "../../node/markdown";
4
+
5
+ export default class IgnoreMarkdownNode extends MarkdownNode {
6
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(IgnoreMarkdownNode, ruleName, childNodes, opacity); }
7
+ }
@@ -4,49 +4,42 @@ import { arrayUtilities } from "necessary";
4
4
 
5
5
  import MarkdownNode from "../../node/markdown";
6
6
 
7
- import { replaceTokens } from "../../utilities/tokens";
8
-
9
- const { fourth } = arrayUtilities;
7
+ const { push, fourth } = arrayUtilities;
10
8
 
11
9
  export default class ImportMarkdownNode extends MarkdownNode {
12
- resolveImports(parentNode, context) {
10
+ resolveImports(context) {
13
11
  let html = null;
14
12
 
15
13
  const { importer = null } = context;
16
14
 
17
15
  if (importer !== null) {
18
- const { tokens } = context,
19
- filePath = this.filePath(context);
16
+ const filePath = this.filePath(context);
20
17
 
21
18
  importer(filePath, context);
22
19
 
23
- const { node: importedNode = null,
24
- tokens: importedTokens = null,
25
- className: divisionClassName = null } = context;
26
-
27
- Object.assign(context, {
28
- tokens
29
- });
20
+ const { importedNode = null,
21
+ importedTokens = null,
22
+ importedClassName = null } = context;
30
23
 
31
- delete context.node;
32
- delete context.className;
24
+ delete context.importedNode;
25
+ delete context.importedTokens;
26
+ delete context.importedClassName;
33
27
 
34
28
  if (importedNode !== null) {
35
- const replacedChildNode = this, ///
36
- replacementTokens = importedTokens, ///
37
- replacementChildNode = importedNode; ///
38
-
39
- parentNode.replaceChildNode(replacedChildNode, replacementChildNode);
29
+ const { tokens, divisionMarkdownNodes } = context,
30
+ divisionMarkdownNode = importedNode, ///
31
+ divisionClassName = importedClassName, ///
32
+ ignored = divisionMarkdownNode.isIgnored();
40
33
 
41
- replaceTokens(replacedChildNode, replacementTokens, context);
42
-
43
- parentNode = this; ///
34
+ divisionMarkdownNode.setDivisionClassName(divisionClassName);
44
35
 
45
- const divisionMarkdownNode = importedNode; ///
36
+ if (!ignored) {
37
+ push(tokens, importedTokens);
46
38
 
47
- divisionMarkdownNode.setDivisionClassName(divisionClassName);
39
+ divisionMarkdownNodes.push(divisionMarkdownNode);
40
+ }
48
41
 
49
- divisionMarkdownNode.resolveImports(parentNode, context);
42
+ divisionMarkdownNode.resolveImports(context);
50
43
  }
51
44
  }
52
45
 
@@ -70,6 +70,8 @@ export default class LinkMarkdownNode extends MarkdownNode {
70
70
  this.addDOMElement(domElement);
71
71
  }
72
72
 
73
+ clone() { return super.clone(this.number); }
74
+
73
75
  static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) {
74
76
  const number = null,
75
77
  linkMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(LinkMarkdownNode, ruleName, childNodes, opacity, number);
@@ -94,9 +94,7 @@ class MarkdownNode extends NonTerminalNode {
94
94
  return attributeValue;
95
95
  }
96
96
 
97
- resolveImports(parentNode, context) {
98
- parentNode = this; ///\
99
-
97
+ resolveImports(context) {
100
98
  const childNodes = this.getChildNodes();
101
99
 
102
100
  childNodes.forEach((childNode) => {
@@ -106,7 +104,7 @@ class MarkdownNode extends NonTerminalNode {
106
104
  const nonTerminalNode = childNode, ///
107
105
  markdownNode = nonTerminalNode; ///
108
106
 
109
- markdownNode.resolveImports(parentNode, context);
107
+ markdownNode.resolveImports(context);
110
108
  }
111
109
  });
112
110
  }
package/src/nodeMap.js CHANGED
@@ -8,6 +8,7 @@ import ErrorMarkdownNode from "./node/markdown/error";
8
8
  import AnchorMarkdownNode from "./node/markdown/anchor";
9
9
  import MarkerMarkdownNode from "./node/markdown/marker";
10
10
  import BulletMarkdownNode from "./node/markdown/bullet";
11
+ import IgnoreMarkdownNode from "./node/markdown/ignore";
11
12
  import ImportMarkdownNode from "./node/markdown/import";
12
13
  import ImportsMarkdownNode from "./node/markdown/imports";
13
14
  import ContentsMarkdownNode from "./node/markdown/contents";
@@ -61,6 +62,7 @@ import { LINK_RULE_NAME,
61
62
  ANCHOR_RULE_NAME,
62
63
  MARKER_RULE_NAME,
63
64
  BULLET_RULE_NAME,
65
+ IGNORE_RULE_NAME,
64
66
  IMPORT_RULE_NAME,
65
67
  IMPORTS_RULE_NAME,
66
68
  CONTENTS_RULE_NAME,
@@ -115,6 +117,7 @@ const nodeMap = {
115
117
  [ANCHOR_RULE_NAME]: AnchorMarkdownNode,
116
118
  [MARKER_RULE_NAME]: MarkerMarkdownNode,
117
119
  [BULLET_RULE_NAME]: BulletMarkdownNode,
120
+ [IGNORE_RULE_NAME]: IgnoreMarkdownNode,
118
121
  [IMPORT_RULE_NAME]: ImportMarkdownNode,
119
122
  [IMPORTS_RULE_NAME]: ImportsMarkdownNode,
120
123
  [CONTENTS_RULE_NAME]: ContentsMarkdownNode,
package/src/ruleNames.js CHANGED
@@ -8,6 +8,7 @@ export const ERROR_RULE_NAME = "error";
8
8
  export const ANCHOR_RULE_NAME = "anchor";
9
9
  export const MARKER_RULE_NAME = "marker";
10
10
  export const BULLET_RULE_NAME = "bullet";
11
+ export const IGNORE_RULE_NAME = "ignore";
11
12
  export const IMPORT_RULE_NAME = "import";
12
13
  export const IMPORTS_RULE_NAME = "imports";
13
14
  export const CONTENTS_RULE_NAME = "contents";
@@ -65,6 +66,7 @@ const ruleNames = {
65
66
  ANCHOR_RULE_NAME,
66
67
  MARKER_RULE_NAME,
67
68
  BULLET_RULE_NAME,
69
+ IGNORE_RULE_NAME,
68
70
  IMPORT_RULE_NAME,
69
71
  IMPORTS_RULE_NAME,
70
72
  CONTENTS_RULE_NAME,
@@ -5,6 +5,7 @@ import elementMap from "../elementMap";
5
5
 
6
6
  import { nodeQuery } from "../utilities/query";
7
7
  import { EMPTY_STRING } from "../constants";
8
+ import { DIVISION_RULE_NAME } from "../ruleNames";
8
9
  import { remainingContentFromNodeTokensAndOffset } from "../utilities/content";
9
10
 
10
11
  const { STRONG_TEXT_RULE_NAME,
@@ -62,47 +63,52 @@ function contentFromNodeAndTokens(node, tokens) {
62
63
  const ruleNameTerminalNode = ruleNameTerminalNodeQuery(node);
63
64
 
64
65
  if (ruleNameTerminalNode !== null) {
65
- content = EMPTY_STRING;
66
-
67
66
  const ruleNameTerminalNodeContent = ruleNameTerminalNode.getContent(),
68
- ruleName = ruleNameTerminalNodeContent, ///
69
- ruleNameValuesIncludesRuleName = ruleNameValues.includes(ruleName);
67
+ ruleName = ruleNameTerminalNodeContent; ///
70
68
 
71
- if (ruleNameValuesIncludesRuleName) {
72
- const { tagName, className } = elementMap[ruleName];
69
+ if (ruleName === DIVISION_RULE_NAME) {
70
+ content = null;
71
+ } else {
72
+ content = EMPTY_STRING;
73
73
 
74
- if (tagName !== null) {
75
- content = `${content}${tagName}`;
76
- }
74
+ const ruleNameValuesIncludesRuleName = ruleNameValues.includes(ruleName);
77
75
 
78
- switch (ruleName) {
79
- case ORDERED_LIST_ITEM_RULE_NAME: {
80
- content = `${orderedListTagName} > ${content}`;
76
+ if (ruleNameValuesIncludesRuleName) {
77
+ const { tagName, className } = elementMap[ruleName];
81
78
 
82
- break;
79
+ if (tagName !== null) {
80
+ content = `${content}${tagName}`;
83
81
  }
84
82
 
85
- case UNORDERED_LIST_ITEM_RULE_NAME: {
86
- content = `${unorderedListTagName} > ${content}`;
83
+ switch (ruleName) {
84
+ case ORDERED_LIST_ITEM_RULE_NAME: {
85
+ content = `${orderedListTagName} > ${content}`;
87
86
 
88
- break;
89
- }
87
+ break;
88
+ }
89
+
90
+ case UNORDERED_LIST_ITEM_RULE_NAME: {
91
+ content = `${unorderedListTagName} > ${content}`;
92
+
93
+ break;
94
+ }
90
95
 
91
- case STRONGLY_EMPHASISED_TEXT_RULE_NAME: {
92
- content = `${content} > ${strongTextTagName}`;
96
+ case STRONGLY_EMPHASISED_TEXT_RULE_NAME: {
97
+ content = `${content} > ${strongTextTagName}`;
93
98
 
94
- break;
99
+ break;
100
+ }
95
101
  }
96
- }
97
102
 
98
- if (className !== null) {
99
- content = `${content}.${className}`;
100
- }
103
+ if (className !== null) {
104
+ content = `${content}.${className}`;
105
+ }
101
106
 
102
- const offset = 1,
103
- remainingContent = remainingContentFromNodeTokensAndOffset(node, tokens, offset);
107
+ const offset = 1,
108
+ remainingContent = remainingContentFromNodeTokensAndOffset(node, tokens, offset);
104
109
 
105
- content = `${content}${remainingContent}`;
110
+ content = `${content}${remainingContent}`;
111
+ }
106
112
  }
107
113
  } else {
108
114
  const offset = 0,
@@ -6,6 +6,7 @@ import { arrayUtilities } from "necessary";
6
6
  const { first, push } = arrayUtilities;
7
7
 
8
8
  const linkMarkdownNodesQuery = Query.fromExpression(`//link`),
9
+ ignoreMarkdownNodeQuery = Query.fromExpression(`//ignore`),
9
10
  headingMarkdownNodesQuery = Query.fromExpression(`//primaryHeading|secondaryHeading|tertiaryHeading|quaternaryHeading`),
10
11
  contentsMarkdownNodeQuery = Query.fromExpression(`//contents`),
11
12
  footnoteMarkdownNodesQuery = Query.fromExpression(`//footnote`),
@@ -49,6 +50,12 @@ export function linkMarkdownNodesFromNode(node, linkMarkdownNodes = []) {
49
50
  return linkMarkdownNodes;
50
51
  }
51
52
 
53
+ export function ignoreMarkdownNodeFromNode(node) {
54
+ const ignoreMarkdownNode = nodeFromNodeAndQuery(node, ignoreMarkdownNodeQuery);
55
+
56
+ return ignoreMarkdownNode;
57
+ }
58
+
52
59
  export function contentsMarkdownNodeFromNode(node) {
53
60
  const contentsMarkdownNode = nodeFromNodeAndQuery(node, contentsMarkdownNodeQuery);
54
61
 
@@ -93,6 +100,7 @@ export function linkReferenceOrFootnotesMarkdownNodesFromNode(node, linkReferenc
93
100
 
94
101
  export default {
95
102
  linkMarkdownNodesFromNode,
103
+ ignoreMarkdownNodeFromNode,
96
104
  contentsMarkdownNodeFromNode,
97
105
  footnotesMarkdownNodeFromNode,
98
106
  headingMarkdownNodesFromNode,
@@ -1,8 +1,14 @@
1
1
  "use strict";
2
2
 
3
- export function replaceTokens(replacedChildNode, replacementTokens, context) {
4
- const { tokens } = context,
5
- nonTerminalNode = replacedChildNode, ///
3
+ export function replaceNode(replacementNode, replacedNode, parentNode) {
4
+ const replacedChildNode = replacedNode, ///
5
+ replacementChildNode = replacementNode; ///
6
+
7
+ parentNode.replaceChildNode(replacedChildNode, replacementChildNode);
8
+ }
9
+
10
+ export function replaceTokens(replacementTokens, replacedNode, tokens) {
11
+ const nonTerminalNode = replacedNode, ///
6
12
  lastSignificantToken = nonTerminalNode.getLastSignificantToken(),
7
13
  firstSignificantToken = nonTerminalNode.getFirstSignificantToken(),
8
14
  lastSignificantTokenIndex = tokens.indexOf(lastSignificantToken),