highmark-markdown 0.0.383 → 0.0.388

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 (70) hide show
  1. package/example.js +2972 -865
  2. package/lib/defaultMarkdownStyle.js +2 -2
  3. package/lib/elementMap.js +4 -4
  4. package/lib/example/constants.js +6 -2
  5. package/lib/example/view.js +5 -4
  6. package/lib/markdown/bnf.js +2 -2
  7. package/lib/mixins/node.js +6 -1
  8. package/lib/node/markdown/contentsItem.js +8 -30
  9. package/lib/node/markdown/contentsLink.js +9 -30
  10. package/lib/node/markdown/contentsList.js +8 -33
  11. package/lib/node/markdown/directive/embee.js +8 -8
  12. package/lib/node/markdown/division.js +90 -103
  13. package/lib/node/markdown/{footnoteItem.js → footnotesItem.js} +12 -12
  14. package/lib/node/markdown/footnotesList.js +9 -47
  15. package/lib/node/markdown/subDivision.js +2 -3
  16. package/lib/node/markdown.js +25 -1
  17. package/lib/nodeMap.js +6 -3
  18. package/lib/replacement/contentsItem.js +145 -0
  19. package/lib/replacement/contentsLink.js +157 -0
  20. package/lib/replacement/contentsList.js +212 -0
  21. package/lib/replacement/footnote.js +122 -0
  22. package/lib/replacement/footnotesItem.js +140 -0
  23. package/lib/replacement/footnotesList.js +189 -0
  24. package/lib/replacement/imported.js +151 -0
  25. package/lib/replacement/line.js +127 -0
  26. package/lib/replacement/subDivision/contentsDirective.js +126 -0
  27. package/lib/replacement/subDivision/footnote.js +126 -0
  28. package/lib/replacement/subDivision/footnotesDirective.js +126 -0
  29. package/lib/replacement/subDivision/pageNumberDirective.js +126 -0
  30. package/lib/replacement/subDivision.js +175 -0
  31. package/lib/replacement.js +139 -46
  32. package/lib/ruleNames.js +6 -6
  33. package/lib/utilities/markdown.js +8 -8
  34. package/lib/utilities/node.js +1 -72
  35. package/lib/utilities/replacement.js +104 -0
  36. package/package.json +1 -1
  37. package/src/defaultMarkdownStyle.js +20 -1
  38. package/src/elementMap.js +5 -5
  39. package/src/example/constants.js +2 -1
  40. package/src/example/view.js +13 -12
  41. package/src/markdown/bnf.js +23 -9
  42. package/src/mixins/node.js +10 -0
  43. package/src/node/markdown/contentsItem.js +7 -38
  44. package/src/node/markdown/contentsLink.js +8 -41
  45. package/src/node/markdown/contentsList.js +7 -39
  46. package/src/node/markdown/directive/embee.js +9 -9
  47. package/src/node/markdown/division.js +90 -158
  48. package/src/node/markdown/{footnoteItem.js → footnotesItem.js} +5 -5
  49. package/src/node/markdown/footnotesList.js +10 -78
  50. package/src/node/markdown/subDivision.js +1 -5
  51. package/src/node/markdown.js +28 -0
  52. package/src/nodeMap.js +12 -3
  53. package/src/replacement/contentsItem.js +49 -0
  54. package/src/replacement/contentsLink.js +29 -0
  55. package/src/replacement/contentsList.js +111 -0
  56. package/src/replacement/footnote.js +16 -0
  57. package/src/replacement/footnotesItem.js +38 -0
  58. package/src/replacement/footnotesList.js +73 -0
  59. package/src/replacement/imported.js +13 -0
  60. package/src/replacement/line.js +14 -0
  61. package/src/replacement/subDivision/contentsDirective.js +20 -0
  62. package/src/replacement/subDivision/footnote.js +20 -0
  63. package/src/replacement/subDivision/footnotesDirective.js +20 -0
  64. package/src/replacement/subDivision/pageNumberDirective.js +20 -0
  65. package/src/replacement/subDivision.js +42 -0
  66. package/src/replacement.js +108 -53
  67. package/src/ruleNames.js +2 -2
  68. package/src/utilities/markdown.js +9 -9
  69. package/src/utilities/node.js +0 -48
  70. package/src/utilities/replacement.js +66 -0
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
2
 
3
+ import { arrayUtilities } from "necessary";
4
+
3
5
  import { leadingIndexFromNodeAndTokens, trailingIndexFromNodeAndTokens } from "./utilities/node";
6
+ import { removeNode, appendNode, removeTokens, appendTokens, replaceNode, replaceNodes, replaceTokens } from "./utilities/replacement";
7
+
8
+ const { push } = arrayUtilities;
4
9
 
5
10
  export default class Replacement {
6
11
  constructor(node, tokens) {
@@ -12,110 +17,156 @@ export default class Replacement {
12
17
  return this.node;
13
18
  }
14
19
 
15
- getTokens() {
20
+ getTokens(tokens = []) {
21
+ push(tokens, this.tokens);
22
+
16
23
  return this.tokens;
17
24
  }
18
25
 
19
26
  getChildNodes() { return this.node.getChildNodes(); }
20
27
 
21
- contract(descendentNode) {
28
+ contract(Class, descendentNode) {
29
+ if (descendentNode === undefined) {
30
+ descendentNode = Class; ///
31
+
32
+ Class = Replacement; ///
33
+ }
34
+
22
35
  const node = descendentNode, ///
23
36
  tokens = this.tokens, ///
24
37
  context = { ///
25
38
  tokens
26
39
  },
27
- replacement = Replacement.fromNode(node, context); ///
40
+ replacement = Class.fromNode(node, context); ///
28
41
 
29
42
  return replacement;
30
43
  }
31
44
 
32
- expand(ascendantNode) {
45
+ expand(Class, ascendantNode) {
46
+ if (ascendantNode === undefined) {
47
+ ascendantNode = Class;
48
+
49
+ Class = Replacement; ///
50
+ }
51
+
33
52
  const node = ascendantNode, ///
34
53
  tokens = this.tokens, ///
35
54
  context = {
36
55
  tokens
37
56
  },
38
- replacement = Replacement.fromNode(node, context); ///
57
+ replacement = Class.fromNode(node, context); ///
39
58
 
40
59
  return replacement;
41
60
  }
42
61
 
43
- clone() {
44
- const node = this.node.clone(),
45
- replacementTokens = replacementTokensFromNodeAndTokens(node, this.tokens);
62
+ appendTo(parentNode, context) {
63
+ const { tokens } = context,
64
+ replacementNode = this.node, ///
65
+ replacementTokens = this.tokens; ///
46
66
 
47
- replaceNodeTokens(node, replacementTokens, this.tokens);
67
+ appendNode(replacementNode, parentNode);
48
68
 
49
- const tokens = replacementTokens, ///
50
- replacement = new Replacement(node, tokens);
69
+ appendTokens(replacementTokens, parentNode, tokens);
70
+ }
51
71
 
52
- return replacement
72
+ replace(replacedNode, parentNode, context) {
73
+ const { tokens } = context,
74
+ replacementNode = this.node, ///
75
+ replacementTokens = this.tokens; ///
76
+
77
+ replaceNode(replacementNode, replacedNode, parentNode);
78
+
79
+ replaceTokens(replacementTokens, replacedNode, tokens);
53
80
  }
54
81
 
55
- appendTo(markdownNode, context) {
82
+ replaceEx(replacedNode, parentNode, context) {
56
83
  const { tokens } = context,
57
- node = markdownNode, ///
58
- trailingIndex = trailingIndexFromNodeAndTokens(node, tokens),
59
- replacement = this.clone(), ///
60
- replacementNode = replacement.getNode(),
61
- replacementTokens = replacement.getTokens(),
62
- childNode = replacementNode, ///
63
- start = trailingIndex + 1,
64
- deleteCount = 0;
65
-
66
- markdownNode.appendChildNode(childNode);
67
-
68
- tokens.splice(start, deleteCount, ...replacementTokens);
84
+ replacementChildNodes = this.getChildNodes(), ///
85
+ replacementTokens = this.tokens, ///
86
+ replacementNodes = replacementChildNodes; ///
87
+
88
+ replaceNodes(replacementNodes, replacedNode, parentNode);
89
+
90
+ replaceTokens(replacementTokens, replacedNode, tokens);
69
91
  }
70
92
 
71
- static fromNode(node, context) {
93
+ removeFrom(removedNode, parentNode, context) {
94
+ const { tokens } = context;
95
+
96
+ removeTokens(removedNode, tokens);
97
+
98
+ removeNode(removedNode, parentNode);
99
+ }
100
+
101
+ clone(...remainingArguments) {
102
+ const node = this.node.clone(),
103
+ clonedTokens = clonedTokensFromNodeAndTokens(node, this.tokens);
104
+
105
+ overwriteNodeTokens(node, clonedTokens, this.tokens);
106
+
107
+ const Class = this.constructor,
108
+ tokens = clonedTokens, ///
109
+ replacement = new Class(node, tokens, ...remainingArguments);
110
+
111
+ return replacement
112
+ }
113
+
114
+ static fromNode(Class, node, context, ...remainingArguments) {
115
+ if (context === undefined) {
116
+ context = node; ///
117
+
118
+ node = Class; ///
119
+
120
+ Class = Replacement; ///
121
+ }
122
+
72
123
  let { tokens } = context;
73
124
 
74
- const replacementTokens = replacementTokensFromNodeAndTokens(node, tokens),
125
+ const clonedTokens = clonedTokensFromNodeAndTokens(node, tokens),
75
126
  leadingIndex = leadingIndexFromNodeAndTokens(node, tokens),
76
127
  offset = leadingIndex; ///
77
128
 
78
129
  node = node.clone(); ///
79
130
 
80
- replaceNodeTokens(node, replacementTokens, tokens, offset);
131
+ overwriteNodeTokens(node, clonedTokens, tokens, offset);
81
132
 
82
- tokens = replacementTokens; ///
133
+ tokens = clonedTokens; ///
83
134
 
84
- const replacement = new Replacement(node, tokens);
135
+ const replacement = new Class(node, tokens, ...remainingArguments);
85
136
 
86
137
  return replacement;
87
138
  }
88
139
 
89
- static fromNodeAndTokens(node, tokens) {
90
- const replacement = new Replacement(node, tokens);
140
+ static fromNodeAndTokens(Class, node, tokens, ...remainingArguments) {
141
+ if (tokens === undefined) {
142
+ tokens = node; ///
143
+
144
+ node = Class; ///
145
+
146
+ Class = Replacement; ///
147
+ }
148
+
149
+ const replacement = new Class(node, tokens, ...remainingArguments);
91
150
 
92
151
  return replacement;
93
152
  }
94
153
  }
95
154
 
96
- function replaceNodeTokens(node, replacementTokens, tokens, offset = 0) {
155
+ function overwriteNodeTokens(node, clonedTokens, tokens, offset = 0) {
97
156
  const nodeTerminalNode = node.isTerminalNode();
98
157
 
99
158
  if (nodeTerminalNode) {
100
159
  const terminalNode = node; ///
101
160
 
102
- replaceTerminalNodeTokens(terminalNode, replacementTokens, tokens, offset);
161
+ overwriteTerminalNodeTokens(terminalNode, clonedTokens, tokens, offset);
103
162
  } else {
104
163
  const nonTerminalNode = node; ///
105
164
 
106
- replaceNonTerminalNodeTokens(nonTerminalNode, replacementTokens, tokens, offset);
165
+ overwriteNonTerminalNodeTokens(nonTerminalNode, clonedTokens, tokens, offset);
107
166
  }
108
167
  }
109
168
 
110
- function replaceChildNodesTokens(childNodes, replacementTokens, tokens, offset) {
111
- childNodes.forEach((childNode) => {
112
- const node = childNode; ///
113
-
114
- replaceNodeTokens(node, replacementTokens, tokens, offset);
115
- });
116
- }
117
-
118
- function replaceTerminalNodeTokens(terminalNode, replacementTokens, tokens, offset) {
169
+ function overwriteTerminalNodeTokens(terminalNode, clonedTokens, tokens, offset) {
119
170
  let index,
120
171
  significantToken;
121
172
 
@@ -126,21 +177,25 @@ function replaceTerminalNodeTokens(terminalNode, replacementTokens, tokens, offs
126
177
 
127
178
  index -= offset;
128
179
 
129
- const replacementToken = replacementTokens[index];
180
+ const clonedToken = clonedTokens[index];
130
181
 
131
- significantToken = replacementToken; ///
182
+ significantToken = clonedToken; ///
132
183
 
133
184
  terminalNode.setSignificantToken(significantToken);
134
185
  }
135
186
  }
136
187
 
137
- function replaceNonTerminalNodeTokens(nonTerminalNode, replacementTokens, tokens, offset) {
188
+ function overwriteNonTerminalNodeTokens(nonTerminalNode, clonedTokens, tokens, offset) {
138
189
  const childNodes = nonTerminalNode.getChildNodes();
139
190
 
140
- replaceChildNodesTokens(childNodes, replacementTokens, tokens, offset);
191
+ childNodes.forEach((childNode) => {
192
+ const node = childNode; ///
193
+
194
+ overwriteNodeTokens(node, clonedTokens, tokens, offset);
195
+ });
141
196
  }
142
197
 
143
- function replacementTokensFromNodeAndTokens(node, tokens) {
198
+ function clonedTokensFromNodeAndTokens(node, tokens) {
144
199
  const leadingIndex = leadingIndexFromNodeAndTokens(node, tokens),
145
200
  trailingIndex = trailingIndexFromNodeAndTokens(node, tokens),
146
201
  start = leadingIndex, ///
@@ -148,11 +203,11 @@ function replacementTokensFromNodeAndTokens(node, tokens) {
148
203
 
149
204
  tokens = tokens.slice(start, end); ///
150
205
 
151
- const replacementTokens = tokens.map((token) => { ///
152
- const replacementToken = token.clone(); ///;
206
+ const clonedTokens = tokens.map((token) => { ///
207
+ const clonedToken = token.clone();
153
208
 
154
- return replacementToken;
209
+ return clonedToken;
155
210
  });
156
211
 
157
- return replacementTokens;
212
+ return clonedTokens;
158
213
  }
package/src/ruleNames.js CHANGED
@@ -28,7 +28,7 @@ export const BLOCK_LISTING_RULE_NAME = "blockListing";
28
28
  export const CONTENTS_LINK_RULE_NAME = "contentsLink";
29
29
  export const CONTENTS_ITEM_RULE_NAME = "contentsItem";
30
30
  export const CONTENTS_LIST_RULE_NAME = "contentsList";
31
- export const FOOTNOTE_ITEM_RULE_NAME = "footnoteItem";
31
+ export const FOOTNOTES_ITEM_RULE_NAME = "footnotesItem";
32
32
  export const TABLE_HEAD_ROW_RULE_NAME = "tableHeadRow";
33
33
  export const TABLE_BODY_ROW_RULE_NAME = "tableBodyRow";
34
34
  export const INLINE_LISTING_RULE_NAME = "inlineListing";
@@ -84,7 +84,7 @@ const ruleNames = {
84
84
  CONTENTS_LINK_RULE_NAME,
85
85
  CONTENTS_ITEM_RULE_NAME,
86
86
  CONTENTS_LIST_RULE_NAME,
87
- FOOTNOTE_ITEM_RULE_NAME,
87
+ FOOTNOTES_ITEM_RULE_NAME,
88
88
  TABLE_HEAD_ROW_RULE_NAME,
89
89
  TABLE_BODY_ROW_RULE_NAME,
90
90
  INLINE_LISTING_RULE_NAME,
@@ -2,14 +2,10 @@
2
2
 
3
3
  import { arrayUtilities } from "necessary";
4
4
 
5
- const { clear, first, push } = arrayUtilities;
5
+ const { clear, push } = arrayUtilities;
6
6
 
7
7
  export function postprocess(divisionMarkdownNode, context) {
8
- const divisionMarkdownNodes = [
9
- divisionMarkdownNode
10
- ];
11
-
12
- resolveIncludes(divisionMarkdownNodes, context);
8
+ const divisionMarkdownNodes = resolveIncludes(divisionMarkdownNode, context);
13
9
 
14
10
  resolveEmbeddings(divisionMarkdownNodes, context);
15
11
 
@@ -30,9 +26,13 @@ function createContents(divisionMarkdownNodes, context) {
30
26
  });
31
27
  }
32
28
 
33
- function resolveIncludes(divisionMarkdownNodes, context) {
34
- const firstDivisionMarkdownNode = first(divisionMarkdownNodes),
35
- divisionMarkdownNode = firstDivisionMarkdownNode; ///
29
+ function resolveIncludes(divisionMarkdownNode, context) {
30
+ const divisionMarkdownNodes = [],
31
+ divisionMarkdownNodeIgnored = divisionMarkdownNode.isIgnored();
32
+
33
+ if (!divisionMarkdownNodeIgnored) {
34
+ divisionMarkdownNodes.push(divisionMarkdownNode);
35
+ }
36
36
 
37
37
  Object.assign(context, {
38
38
  divisionMarkdownNodes
@@ -4,54 +4,6 @@ import { arrayUtilities } from "necessary";
4
4
 
5
5
  const { forwardsSome, backwardsSome } = arrayUtilities;
6
6
 
7
- export function removeNode(removedNode, parentNode) {
8
- const removedChildNode = removedNode; ///
9
-
10
- parentNode.removeChildNode(removedChildNode);
11
- }
12
-
13
- export function removeNodes(removedNodes, parentNode) {
14
- const removedChildNodes = removedNodes; ///
15
-
16
- parentNode.removeChildNodes(removedChildNodes);
17
- }
18
-
19
- export function removeTokens(removedNode, tokens) {
20
- const nonTerminalNode = removedNode, ///
21
- leadingIndex = leadingIndexFromNonTerminalNodeAndTokens(nonTerminalNode, tokens),
22
- trailingIndex = trailingIndexFromNonTerminalNodeAndTokens(nonTerminalNode, tokens),
23
- start = leadingIndex, ///
24
- end = trailingIndex + 1,
25
- deleteCount = end - start;
26
-
27
- tokens.splice(start, deleteCount);
28
- }
29
-
30
- export function replaceNode(replacementNode, replacedNode, parentNode) {
31
- const replacedChildNode = replacedNode, ///
32
- replacementChildNode = replacementNode; ///
33
-
34
- parentNode.replaceChildNode(replacedChildNode, replacementChildNode);
35
- }
36
-
37
- export function replaceNodes(replacementNodes, replacedNode, parentNode) {
38
- const replacedChildNode = replacedNode, ///
39
- replacementChildNodes = replacementNodes; ///
40
-
41
- parentNode.replaceChildNodes(replacedChildNode, replacementChildNodes);
42
- }
43
-
44
- export function replaceTokens(replacementTokens, replacedNode, tokens) {
45
- const nonTerminalNode = replacedNode, ///
46
- leadingIndex = leadingIndexFromNonTerminalNodeAndTokens(nonTerminalNode, tokens),
47
- trailingIndex = trailingIndexFromNonTerminalNodeAndTokens(nonTerminalNode, tokens),
48
- start = leadingIndex, ///
49
- end = trailingIndex + 1,
50
- deleteCount = end - start;
51
-
52
- tokens.splice(start, deleteCount, ...replacementTokens);
53
- }
54
-
55
7
  export function leadingIndexFromNodeAndTokens(node, tokens) {
56
8
  let leadingIndex;
57
9
 
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ import { leadingIndexFromNodeAndTokens, trailingIndexFromNodeAndTokens } from "../utilities/node";
4
+
5
+ export function appendNode(replacementNode, parentNode) {
6
+ const childNode = replacementNode; ///
7
+
8
+ parentNode.appendChildNode(childNode);
9
+ }
10
+
11
+ export function removeNode(removedNode, parentNode) {
12
+ const removedChildNode = removedNode; ///
13
+
14
+ parentNode.removeChildNode(removedChildNode);
15
+ }
16
+
17
+ export function removeNodes(removedNodes, parentNode) {
18
+ const removedChildNodes = removedNodes; ///
19
+
20
+ parentNode.removeChildNodes(removedChildNodes);
21
+ }
22
+
23
+ export function replaceNode(replacementNode, replacedNode, parentNode) {
24
+ const replacedChildNode = replacedNode, ///
25
+ replacementChildNode = replacementNode; ///
26
+
27
+ parentNode.replaceChildNode(replacedChildNode, replacementChildNode);
28
+ }
29
+
30
+ export function replaceNodes(replacementNodes, replacedNode, parentNode) {
31
+ const replacedChildNode = replacedNode, ///
32
+ replacementChildNodes = replacementNodes; ///
33
+
34
+ parentNode.replaceChildNodes(replacedChildNode, replacementChildNodes);
35
+ }
36
+
37
+ export function appendTokens(replacementTokens, parentNode, tokens) {
38
+ const node = parentNode, ///
39
+ trailingIndex = trailingIndexFromNodeAndTokens(node, tokens),
40
+ start = trailingIndex + 1,
41
+ deleteCount = 0;
42
+
43
+ tokens.splice(start, deleteCount, ...replacementTokens);
44
+ }
45
+
46
+ export function removeTokens(removedNode, tokens) {
47
+ const node = removedNode, ///
48
+ leadingIndex = leadingIndexFromNodeAndTokens(node, tokens),
49
+ trailingIndex = trailingIndexFromNodeAndTokens(node, tokens),
50
+ start = leadingIndex, ///
51
+ end = trailingIndex + 1,
52
+ deleteCount = end - start;
53
+
54
+ tokens.splice(start, deleteCount);
55
+ }
56
+
57
+ export function replaceTokens(replacementTokens, replacedNode, tokens) {
58
+ const node = replacedNode, ///
59
+ leadingIndex = leadingIndexFromNodeAndTokens(node, tokens),
60
+ trailingIndex = trailingIndexFromNodeAndTokens(node, tokens),
61
+ start = leadingIndex, ///
62
+ end = trailingIndex + 1,
63
+ deleteCount = end - start;
64
+
65
+ tokens.splice(start, deleteCount, ...replacementTokens);
66
+ }