highmark-markdown 0.0.379 → 0.0.382

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 (100) hide show
  1. package/example.js +4764 -3417
  2. package/lib/attributeNames.js +5 -1
  3. package/lib/constants.js +1 -5
  4. package/lib/defaultMarkdownStyle.js +2 -2
  5. package/lib/example/constants.js +15 -7
  6. package/lib/example/customEventTypes.js +5 -1
  7. package/lib/example/view/button/page.js +168 -0
  8. package/lib/example/view/div/html.js +2 -2
  9. package/lib/example/view/div/pageButtons.js +270 -0
  10. package/lib/example/view/div/preview.js +105 -13
  11. package/lib/example/view/textarea/css.js +2 -2
  12. package/lib/example/view/xmp.js +2 -4
  13. package/lib/example/view.js +88 -34
  14. package/lib/example.js +2 -2
  15. package/lib/index.js +15 -11
  16. package/lib/markdown/bnf.js +2 -2
  17. package/lib/mixins/node.js +10 -3
  18. package/lib/node/markdown/anchor.js +5 -2
  19. package/lib/node/markdown/blockLine.js +3 -2
  20. package/lib/node/markdown/contentsLink.js +4 -4
  21. package/lib/node/markdown/directive/contents.js +6 -6
  22. package/lib/node/markdown/directive/embee.js +12 -12
  23. package/lib/node/markdown/directive/footnotes.js +6 -6
  24. package/lib/node/markdown/directive/ignore.js +6 -6
  25. package/lib/node/markdown/directive/include.js +6 -6
  26. package/lib/node/markdown/directive/pageNumber.js +74 -9
  27. package/lib/node/markdown/directive.js +128 -0
  28. package/lib/node/markdown/directives.js +33 -2
  29. package/lib/node/markdown/division.js +128 -28
  30. package/lib/node/markdown/emailLink.js +8 -1
  31. package/lib/node/markdown/endOfLine.js +8 -1
  32. package/lib/node/markdown/footnoteItem.js +3 -3
  33. package/lib/node/markdown/footnotesList.js +95 -27
  34. package/lib/node/markdown/heading/primary.js +2 -1
  35. package/lib/node/markdown/heading/quaternary.js +2 -1
  36. package/lib/node/markdown/heading/secondary.js +2 -1
  37. package/lib/node/markdown/heading/tertiary.js +2 -1
  38. package/lib/node/markdown/heading.js +8 -1
  39. package/lib/node/markdown/line.js +8 -1
  40. package/lib/node/markdown/subDivision.js +17 -10
  41. package/lib/node/markdown.js +15 -1
  42. package/lib/replacement.js +185 -0
  43. package/lib/utilities/childNodes.js +7 -5
  44. package/lib/utilities/content.js +7 -7
  45. package/lib/utilities/markdown.js +87 -0
  46. package/lib/utilities/node.js +163 -0
  47. package/lib/utilities/query.js +25 -9
  48. package/package.json +1 -1
  49. package/src/attributeNames.js +1 -0
  50. package/src/constants.js +0 -1
  51. package/src/defaultMarkdownStyle.js +5 -1
  52. package/src/example/constants.js +4 -2
  53. package/src/example/customEventTypes.js +1 -0
  54. package/src/example/view/button/page.js +48 -0
  55. package/src/example/view/div/html.js +0 -1
  56. package/src/example/view/div/pageButtons.js +98 -0
  57. package/src/example/view/div/preview.js +51 -11
  58. package/src/example/view/textarea/css.js +1 -1
  59. package/src/example/view/xmp.js +1 -5
  60. package/src/example/view.js +117 -51
  61. package/src/example.js +2 -2
  62. package/src/index.js +9 -6
  63. package/src/markdown/bnf.js +21 -23
  64. package/src/mixins/node.js +20 -2
  65. package/src/node/markdown/anchor.js +7 -2
  66. package/src/node/markdown/blockLine.js +3 -3
  67. package/src/node/markdown/contentsLink.js +3 -3
  68. package/src/node/markdown/directive/contents.js +3 -3
  69. package/src/node/markdown/directive/embee.js +8 -8
  70. package/src/node/markdown/directive/footnotes.js +3 -3
  71. package/src/node/markdown/directive/ignore.js +3 -3
  72. package/src/node/markdown/directive/include.js +3 -3
  73. package/src/node/markdown/directive/pageNumber.js +53 -5
  74. package/src/node/markdown/directive.js +13 -0
  75. package/src/node/markdown/directives.js +10 -1
  76. package/src/node/markdown/division.js +144 -26
  77. package/src/node/markdown/emailLink.js +6 -0
  78. package/src/node/markdown/endOfLine.js +6 -0
  79. package/src/node/markdown/footnoteItem.js +1 -1
  80. package/src/node/markdown/footnotesList.js +87 -31
  81. package/src/node/markdown/heading/primary.js +2 -0
  82. package/src/node/markdown/heading/quaternary.js +2 -0
  83. package/src/node/markdown/heading/secondary.js +2 -0
  84. package/src/node/markdown/heading/tertiary.js +2 -0
  85. package/src/node/markdown/heading.js +6 -0
  86. package/src/node/markdown/line.js +12 -1
  87. package/src/node/markdown/subDivision.js +18 -12
  88. package/src/node/markdown.js +19 -0
  89. package/src/replacement.js +158 -0
  90. package/src/utilities/childNodes.js +6 -4
  91. package/src/utilities/content.js +12 -20
  92. package/src/utilities/markdown.js +103 -0
  93. package/src/utilities/node.js +158 -0
  94. package/src/utilities/query.js +22 -6
  95. package/lib/replacementNodeAndTokens.js +0 -149
  96. package/lib/utilities/footnotes.js +0 -20
  97. package/lib/utilities/replace.js +0 -66
  98. package/src/replacementNodeAndTokens.js +0 -152
  99. package/src/utilities/footnotes.js +0 -16
  100. package/src/utilities/replace.js +0 -31
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+
3
+ import { leadingIndexFromNodeAndTokens, trailingIndexFromNodeAndTokens } from "./utilities/node";
4
+
5
+ export default class Replacement {
6
+ constructor(node, tokens) {
7
+ this.node = node;
8
+ this.tokens = tokens;
9
+ }
10
+
11
+ getNode() {
12
+ return this.node;
13
+ }
14
+
15
+ getTokens() {
16
+ return this.tokens;
17
+ }
18
+
19
+ getChildNodes() { return this.node.getChildNodes(); }
20
+
21
+ contract(descendentNode) {
22
+ const node = descendentNode, ///
23
+ tokens = this.tokens, ///
24
+ context = { ///
25
+ tokens
26
+ },
27
+ replacement = Replacement.fromNode(node, context); ///
28
+
29
+ return replacement;
30
+ }
31
+
32
+ expand(ascendantNode) {
33
+ const node = ascendantNode, ///
34
+ tokens = this.tokens, ///
35
+ context = {
36
+ tokens
37
+ },
38
+ replacement = Replacement.fromNode(node, context); ///
39
+
40
+ return replacement;
41
+ }
42
+
43
+ clone() {
44
+ const node = this.node.clone(),
45
+ replacementTokens = replacementTokensFromNodeAndTokens(node, this.tokens);
46
+
47
+ replaceNodeTokens(node, replacementTokens, this.tokens);
48
+
49
+ const tokens = replacementTokens, ///
50
+ replacement = new Replacement(node, tokens);
51
+
52
+ return replacement
53
+ }
54
+
55
+ appendTo(markdownNode, context) {
56
+ 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);
69
+ }
70
+
71
+ static fromNode(node, context) {
72
+ let { tokens } = context;
73
+
74
+ const replacementTokens = replacementTokensFromNodeAndTokens(node, tokens),
75
+ leadingIndex = leadingIndexFromNodeAndTokens(node, tokens),
76
+ offset = leadingIndex; ///
77
+
78
+ node = node.clone(); ///
79
+
80
+ replaceNodeTokens(node, replacementTokens, tokens, offset);
81
+
82
+ tokens = replacementTokens; ///
83
+
84
+ const replacement = new Replacement(node, tokens);
85
+
86
+ return replacement;
87
+ }
88
+
89
+ static fromNodeAndTokens(node, tokens) {
90
+ const replacement = new Replacement(node, tokens);
91
+
92
+ return replacement;
93
+ }
94
+ }
95
+
96
+ function replaceNodeTokens(node, replacementTokens, tokens, offset = 0) {
97
+ const nodeTerminalNode = node.isTerminalNode();
98
+
99
+ if (nodeTerminalNode) {
100
+ const terminalNode = node; ///
101
+
102
+ replaceTerminalNodeTokens(terminalNode, replacementTokens, tokens, offset);
103
+ } else {
104
+ const nonTerminalNode = node; ///
105
+
106
+ replaceNonTerminalNodeTokens(nonTerminalNode, replacementTokens, tokens, offset);
107
+ }
108
+ }
109
+
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) {
119
+ let index,
120
+ significantToken;
121
+
122
+ significantToken = terminalNode.getSignificantToken();
123
+
124
+ if (significantToken !== null) {
125
+ index = tokens.indexOf(significantToken);
126
+
127
+ index -= offset;
128
+
129
+ const replacementToken = replacementTokens[index];
130
+
131
+ significantToken = replacementToken; ///
132
+
133
+ terminalNode.setSignificantToken(significantToken);
134
+ }
135
+ }
136
+
137
+ function replaceNonTerminalNodeTokens(nonTerminalNode, replacementTokens, tokens, offset) {
138
+ const childNodes = nonTerminalNode.getChildNodes();
139
+
140
+ replaceChildNodesTokens(childNodes, replacementTokens, tokens, offset);
141
+ }
142
+
143
+ function replacementTokensFromNodeAndTokens(node, tokens) {
144
+ const leadingIndex = leadingIndexFromNodeAndTokens(node, tokens),
145
+ trailingIndex = trailingIndexFromNodeAndTokens(node, tokens),
146
+ start = leadingIndex, ///
147
+ end = trailingIndex + 1;
148
+
149
+ tokens = tokens.slice(start, end); ///
150
+
151
+ const replacementTokens = tokens.map((token) => { ///
152
+ const replacementToken = token.clone(); ///;
153
+
154
+ return replacementToken;
155
+ });
156
+
157
+ return replacementTokens;
158
+ }
@@ -82,11 +82,13 @@ export function plainTextFromChildNodes(childNodes, context) {
82
82
  plainTexts.push(plainText);
83
83
  }
84
84
 
85
- const childNodes = markdownNode.getChildNodes(),
86
- plainText = plainTextFromChildNodes(childNodes, context);
85
+ {
86
+ const childNodes = markdownNode.getChildNodes(),
87
+ plainText = plainTextFromChildNodes(childNodes, context);
87
88
 
88
- if (plainText !== EMPTY_STRING) {
89
- plainTexts.push(plainText);
89
+ if (plainText !== EMPTY_STRING) {
90
+ plainTexts.push(plainText);
91
+ }
90
92
  }
91
93
  }
92
94
  }
@@ -4,6 +4,7 @@ import { arrayUtilities } from "necessary";
4
4
 
5
5
  import { EMPTY_STRING } from "../constants";
6
6
  import { ESCAPED_TOKEN_TYPE } from "../tokenTypes";
7
+ import { leadingIndexFromNodeAndTokens, trailingIndexFromNodeAndTokens } from "../utilities/node";
7
8
 
8
9
  const { first, last } = arrayUtilities;
9
10
 
@@ -12,13 +13,10 @@ export function contentFromNode(node, context) {
12
13
 
13
14
  let { tokens } = context;
14
15
 
15
- const lastSignificantToken = node.getLastSignificantToken(),
16
- firstSignificantToken = node.getFirstSignificantToken(),
17
- lastSignificantTokenIndex = tokens.indexOf(lastSignificantToken),
18
- firstSignificantTokenIndex = tokens.indexOf(firstSignificantToken);
19
-
20
- const start = firstSignificantTokenIndex, ///
21
- end = lastSignificantTokenIndex + 1;
16
+ const leadingIndex = leadingIndexFromNodeAndTokens(node, tokens),
17
+ trailingIndex = trailingIndexFromNodeAndTokens(node, tokens),
18
+ start = leadingIndex, ///
19
+ end = trailingIndex + 1;
22
20
 
23
21
  tokens = tokens.slice(start, end);
24
22
 
@@ -38,13 +36,11 @@ export function contentFromNodes(nodes, augmentLeft, augmentRight, context) {
38
36
 
39
37
  const lastNode = last(nodes),
40
38
  firstNode = first(nodes),
41
- lastSignificantToken = lastNode.getLastSignificantToken(),
42
- firstSignificantToken = firstNode.getFirstSignificantToken(),
43
- lastSignificantTokenIndex = tokens.indexOf(lastSignificantToken),
44
- firstSignificantTokenIndex = tokens.indexOf(firstSignificantToken);
39
+ leadingIndex = leadingIndexFromNodeAndTokens(firstNode, tokens),
40
+ trailingIndex = trailingIndexFromNodeAndTokens(lastNode, tokens);
45
41
 
46
- let firstTokenIndex = firstSignificantTokenIndex, ///
47
- lastTokenIndex = lastSignificantTokenIndex; ///
42
+ let firstTokenIndex = leadingIndex, ///
43
+ lastTokenIndex = trailingIndex; ///
48
44
 
49
45
  if (augmentLeft) {
50
46
  const previousTokenIndex = firstTokenIndex - 1;
@@ -91,14 +87,10 @@ export function contentFromNodes(nodes, augmentLeft, augmentRight, context) {
91
87
  export function contentFromNodeAndTokens(node, tokens, offset = 0) {
92
88
  let content = EMPTY_STRING;
93
89
 
94
- const firstSignificantToken = node.getFirstSignificantToken(),
95
- lastSignificantToken = node.getLastSignificantToken(),
96
- firstToken = firstSignificantToken, ///
97
- lastToken = lastSignificantToken, ///
98
- firstTokenIndex = tokens.indexOf(firstToken) + offset, ///
99
- lastTokenIndex = tokens.indexOf(lastToken);
90
+ const leadingIndex = leadingIndexFromNodeAndTokens(node, tokens) + offset,
91
+ trailingIndex = trailingIndexFromNodeAndTokens(node, tokens);
100
92
 
101
- for (let index = firstTokenIndex; index <= lastTokenIndex; index++) {
93
+ for (let index = leadingIndex; index <= trailingIndex; index++) {
102
94
  const token = tokens[index],
103
95
  tokenContent = token.getContent();
104
96
 
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+
3
+ import { arrayUtilities } from "necessary";
4
+
5
+ const { clear, first, push } = arrayUtilities;
6
+
7
+ export function postprocess(divisionMarkdownNode, context) {
8
+ const divisionMarkdownNodes = [
9
+ divisionMarkdownNode
10
+ ];
11
+
12
+ resolveIncludes(divisionMarkdownNodes, context);
13
+
14
+ resolveEmbeddings(divisionMarkdownNodes, context);
15
+
16
+ paginateAndFootnotes(divisionMarkdownNodes, context);
17
+
18
+ createContents(divisionMarkdownNodes, context);
19
+
20
+ return divisionMarkdownNodes;
21
+ }
22
+
23
+ function createContents(divisionMarkdownNodes, context) {
24
+ divisionMarkdownNodes.some((divisionMarkdownNode) => {
25
+ const contentsCreated = divisionMarkdownNode.createContents(context);
26
+
27
+ if (contentsCreated) {
28
+ return true;
29
+ }
30
+ });
31
+ }
32
+
33
+ function resolveIncludes(divisionMarkdownNodes, context) {
34
+ const firstDivisionMarkdownNode = first(divisionMarkdownNodes),
35
+ divisionMarkdownNode = firstDivisionMarkdownNode; ///
36
+
37
+ Object.assign(context, {
38
+ divisionMarkdownNodes
39
+ });
40
+
41
+ divisionMarkdownNode.resolveIncludes(context);
42
+
43
+ delete context.divisionMarkdownNodes;
44
+
45
+ return divisionMarkdownNodes;
46
+ }
47
+
48
+ function resolveEmbeddings(divisionMarkdownNodes, context) {
49
+ divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
50
+ divisionMarkdownNode.resolveEmbeddings(context);
51
+ });
52
+ }
53
+
54
+ function paginateAndFootnotes(divisionMarkdownNodes, context) {
55
+ const { linesPerPage = null } = context;
56
+
57
+ const footnoteNumberMap = {};
58
+
59
+ Object.assign(context, {
60
+ footnoteNumberMap
61
+ });
62
+
63
+ let pageNumber = 1;
64
+
65
+ if (linesPerPage === null) {
66
+ divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
67
+ const footnoteReplacements = divisionMarkdownNode.prepareFootnotes(context);
68
+
69
+ divisionMarkdownNode.setPageNumber(pageNumber);
70
+
71
+ divisionMarkdownNode.createFootnotes(footnoteReplacements, context);
72
+
73
+ pageNumber++;
74
+ });
75
+ } else {
76
+ const paginatedDivisionMarkdownNodes = [];
77
+
78
+ divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
79
+ const footnoteReplacements = divisionMarkdownNode.prepareFootnotes(context),
80
+ divisionMarkdownNodes = divisionMarkdownNode.paginate(context);
81
+
82
+ divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
83
+ divisionMarkdownNode.setPageNumber(pageNumber);
84
+
85
+ divisionMarkdownNode.createFootnotes(footnoteReplacements, context);
86
+
87
+ pageNumber++;
88
+ });
89
+
90
+ push(paginatedDivisionMarkdownNodes, divisionMarkdownNodes);
91
+ });
92
+
93
+ clear(divisionMarkdownNodes);
94
+
95
+ push(divisionMarkdownNodes, paginatedDivisionMarkdownNodes);
96
+ }
97
+
98
+ delete context.footnoteNumberMap;
99
+ }
100
+
101
+ export default {
102
+ postprocess
103
+ };
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+
3
+ import { arrayUtilities } from "necessary";
4
+
5
+ const { forwardsSome, backwardsSome } = arrayUtilities;
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
+ export function leadingIndexFromNodeAndTokens(node, tokens) {
56
+ let leadingIndex;
57
+
58
+ const nodeTerminalNode = node.isTerminalNode();
59
+
60
+ if (nodeTerminalNode) {
61
+ const terminalNode = node; ///
62
+
63
+ leadingIndex = leadingIndexFromTerminalNodeAndTokens(terminalNode, tokens);
64
+ } else {
65
+ const nonTerminalNode = node; ///
66
+
67
+ leadingIndex = leadingIndexFromNonTerminalNodeAndTokens(nonTerminalNode, tokens);
68
+ }
69
+
70
+ return leadingIndex;
71
+ }
72
+
73
+ export function trailingIndexFromNodeAndTokens(node, tokens) {
74
+ let trailingIndex;
75
+
76
+ const nodeTerminalNode = node.isTerminalNode();
77
+
78
+ if (nodeTerminalNode) {
79
+ const terminalNode = node; ///
80
+
81
+ trailingIndex = trailingIndexFromTerminalNodeAndTokens(terminalNode, tokens);
82
+ } else {
83
+ const nonTerminalNode = node; ///
84
+
85
+ trailingIndex = trailingIndexFromNonTerminalNodeAndTokens(nonTerminalNode, tokens);
86
+ }
87
+
88
+ return trailingIndex;
89
+ }
90
+
91
+ function leadingIndexFromTerminalNodeAndTokens(terminalNode, tokens) {
92
+ let leadingIndex;
93
+
94
+ const significantToken = terminalNode.getSignificantToken();
95
+
96
+ if (significantToken === null) {
97
+ leadingIndex = -1;
98
+ } else {
99
+ const significantTokenIndex = tokens.indexOf(significantToken);
100
+
101
+ leadingIndex = significantTokenIndex; ///
102
+ }
103
+
104
+ return leadingIndex;
105
+ }
106
+
107
+ function trailingIndexFromTerminalNodeAndTokens(terminalNode, tokens) {
108
+ let trailingIndex;
109
+
110
+ const significantToken = terminalNode.getSignificantToken();
111
+
112
+ if (significantToken === null) {
113
+ trailingIndex = -1;
114
+ } else {
115
+ const significantTokenIndex = tokens.indexOf(significantToken);
116
+
117
+ trailingIndex = significantTokenIndex; ///
118
+ }
119
+
120
+ return trailingIndex;
121
+ }
122
+
123
+ function leadingIndexFromNonTerminalNodeAndTokens(nonTerminalNode, tokens) {
124
+ let leadingIndex;
125
+
126
+ const childNodes = nonTerminalNode.getChildNodes();
127
+
128
+ forwardsSome(childNodes, (childNode) => {
129
+ const node = childNode;
130
+
131
+ leadingIndex = leadingIndexFromNodeAndTokens(node, tokens);
132
+
133
+ if (leadingIndex !== -1) {
134
+ return true;
135
+ }
136
+ });
137
+
138
+ return leadingIndex;
139
+ }
140
+
141
+ function trailingIndexFromNonTerminalNodeAndTokens(nonTerminalNode, tokens) {
142
+ let trailingIndex;
143
+
144
+ const childNodes = nonTerminalNode.getChildNodes();
145
+
146
+ backwardsSome(childNodes, (childNode) => {
147
+ const node = childNode;
148
+
149
+ trailingIndex = trailingIndexFromNodeAndTokens(node, tokens);
150
+
151
+ if (trailingIndex !== -1) {
152
+ return true;
153
+ }
154
+ });
155
+
156
+ return trailingIndex;
157
+ }
158
+
@@ -5,12 +5,14 @@ import { arrayUtilities } from "necessary";
5
5
 
6
6
  const { first, push } = arrayUtilities;
7
7
 
8
- const ignoreDirectiveMarkdownNodeQuery = Query.fromExpression("//directives/ignoreDirective"),
8
+ const footnoteMarkdownNodeQuery = Query.fromExpression("//footnote"),
9
+ ignoreDirectiveMarkdownNodeQuery = Query.fromExpression("//directives/ignoreDirective"),
9
10
  contentsDirectiveMarkdownNodeQuery = Query.fromExpression("//directives/contentsDirective"),
10
11
  footnotesDirectiveMarkdownNodeQuery = Query.fromExpression("//directives/footnotesDirective"),
12
+ pageNumberDirectiveMarkdownNodeQuery = Query.fromExpression("//directives/pageNumber"),
11
13
  linkMarkdownNodesQuery = Query.fromExpression("//link"),
12
14
  headingMarkdownNodesQuery = Query.fromExpression("//primaryHeading|secondaryHeading|tertiaryHeading|quaternaryHeading"),
13
- footnoteMarkdownNodesQuery = Query.fromExpression("//footnote"),
15
+ subDivisionMarkdownNodesQuery = Query.fromExpression("//subDivision"),
14
16
  embedDirectiveMarkdownNodesQuery = Query.fromExpression("//directives/embedDirective"),
15
17
  includeDirectiveMarkdownNodesQuery = Query.fromExpression("//directives/includeDirective"),
16
18
  linkReferenceOrFootnotesDirectiveMarkdownNodesQuery = Query.fromExpression("//link|reference|footnotesDirective");
@@ -44,6 +46,12 @@ export function nodesQuery(expression) {
44
46
  }
45
47
  }
46
48
 
49
+ export function footnoteMarkdownNodsFromNode(node) {
50
+ const footnoteMarkdownNode = nodeFromNodeAndQuery(node, footnoteMarkdownNodeQuery);
51
+
52
+ return footnoteMarkdownNode;
53
+ }
54
+
47
55
  export function ignoreDirectiveMarkdownNodeFromNode(node) {
48
56
  const ignoreDirectiveMarkdownNode = nodeFromNodeAndQuery(node, ignoreDirectiveMarkdownNodeQuery);
49
57
 
@@ -62,6 +70,12 @@ export function footnotesDirectiveMarkdownNodeFromNode(node) {
62
70
  return footnotesDirectiveMarkdownNode;
63
71
  }
64
72
 
73
+ export function pageNumberDirectiveMarkdownNodeFromNode(node) {
74
+ const pageNumberDirectiveMarkdownNode = nodeFromNodeAndQuery(node, pageNumberDirectiveMarkdownNodeQuery);
75
+
76
+ return pageNumberDirectiveMarkdownNode;
77
+ }
78
+
65
79
  export function linkMarkdownNodesFromNode(node, linkMarkdownNodes = []) {
66
80
  nodesFromNodeAndQuery(node, linkMarkdownNodesQuery, linkMarkdownNodes);
67
81
 
@@ -74,10 +88,10 @@ export function headingMarkdownNodesFromNode(node, headingMarkdownNodes = []) {
74
88
  return headingMarkdownNodes;
75
89
  }
76
90
 
77
- export function footnoteMarkdownNodesFromNode(node, footnoteMarkdownNodes = []) {
78
- nodesFromNodeAndQuery(node, footnoteMarkdownNodesQuery, footnoteMarkdownNodes);
91
+ export function subDivisionMarkdownNodesFromNode(node, subDivisionMarkdownNodes = []) {
92
+ nodesFromNodeAndQuery(node, subDivisionMarkdownNodesQuery, subDivisionMarkdownNodes);
79
93
 
80
- return footnoteMarkdownNodes;
94
+ return subDivisionMarkdownNodes;
81
95
  }
82
96
 
83
97
  export function embedDirectiveMarkdownNodesFromNode(node, embedDirectiveMarkdownNodes = []) {
@@ -99,12 +113,14 @@ export function linkReferenceOrFootnotesDirectiveMarkdownNodesFromNode(node, lin
99
113
  }
100
114
 
101
115
  export default {
116
+ footnoteMarkdownNodsFromNode,
102
117
  ignoreDirectiveMarkdownNodeFromNode,
103
118
  contentsDirectiveMarkdownNodeFromNode,
104
119
  footnotesDirectiveMarkdownNodeFromNode,
120
+ pageNumberDirectiveMarkdownNodeFromNode,
105
121
  linkMarkdownNodesFromNode,
106
122
  headingMarkdownNodesFromNode,
107
- footnoteMarkdownNodesFromNode,
123
+ subDivisionMarkdownNodesFromNode,
108
124
  embedDirectiveMarkdownNodesFromNode,
109
125
  includeDirectiveMarkdownNodesFromNode,
110
126
  linkReferenceOrFootnotesDirectiveMarkdownNodesFromNode