highmark-markdown 1.0.183 → 1.0.185

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 (266) hide show
  1. package/example.js +10243 -6411
  2. package/lib/constants.js +9 -1
  3. package/lib/defaultMarkdownStyle.js +2 -2
  4. package/lib/example/importer.js +3 -3
  5. package/lib/example/indexOptions.js +1 -98
  6. package/lib/example/view/div/container/markdown.js +2 -2
  7. package/lib/example/view/div/container/markdownStyle.js +2 -2
  8. package/lib/example/view/div/container.js +2 -2
  9. package/lib/example/view/div/pageButtons.js +7 -4
  10. package/lib/example/view/div/preview.js +1 -5
  11. package/lib/example/view/div/sizeable/left.js +2 -2
  12. package/lib/example/view/div/tabButtons/right.js +5 -5
  13. package/lib/example/view/textarea/markdown.js +2 -2
  14. package/lib/example/view/textarea/markdownStyle.js +2 -2
  15. package/lib/example/view/textarea/parseTree/html.js +2 -2
  16. package/lib/example/view/textarea/plainText.js +1 -5
  17. package/lib/example/view/xmp.js +1 -5
  18. package/lib/example/view.js +51 -48
  19. package/lib/index/list.js +4 -4
  20. package/lib/index.js +2 -2
  21. package/lib/map/node/html.js +13 -7
  22. package/lib/map/node/markdown.js +5 -24
  23. package/lib/markdown/bnf.js +2 -2
  24. package/lib/node/html/anchor.js +49 -64
  25. package/lib/node/html/blockLine.js +23 -4
  26. package/lib/node/{markdown/paragraph.js → html/directive/contents.js} +20 -14
  27. package/lib/node/{markdown/strongText.js → html/directive/footnotes.js} +20 -14
  28. package/lib/node/{markdown/emphasisedText.js → html/directive/index.js} +20 -14
  29. package/lib/node/{markdown/inlineText.js → html/directive/pageNumber.js} +20 -14
  30. package/lib/node/html/division.js +118 -7
  31. package/lib/node/html/footnote.js +4 -10
  32. package/lib/node/html/heading/index.js +71 -10
  33. package/lib/node/html/heading/primary.js +8 -7
  34. package/lib/node/html/heading/quaternary.js +8 -7
  35. package/lib/node/html/heading/secondary.js +8 -7
  36. package/lib/node/html/heading/tertiary.js +8 -7
  37. package/lib/node/html/heading.js +165 -0
  38. package/lib/node/html/image.js +7 -6
  39. package/lib/node/html/item/contents.js +22 -8
  40. package/lib/node/html/item/footnote.js +144 -0
  41. package/lib/node/html/item/index.js +27 -43
  42. package/lib/node/html/line.js +55 -2
  43. package/lib/node/html/link/contents.js +34 -14
  44. package/lib/node/html/link/email.js +32 -8
  45. package/lib/node/html/link/footnote.js +95 -5
  46. package/lib/node/html/link/hyper.js +32 -8
  47. package/lib/node/html/link/index.js +66 -35
  48. package/lib/node/html/list/contents.js +22 -8
  49. package/lib/node/html/list/footnotes.js +39 -12
  50. package/lib/node/html/list/index.js +22 -8
  51. package/lib/node/html/pageNumber.js +70 -23
  52. package/lib/node/html/{item/footnotes.js → reference.js} +14 -14
  53. package/lib/node/{markdown/heading/primary.js → html/text/comma.js} +38 -28
  54. package/lib/node/html/text/index.js +146 -0
  55. package/lib/node/html/text/stronglyEmphasised.js +15 -8
  56. package/lib/node/html/text.js +43 -5
  57. package/lib/node/html/topmost.js +67 -1
  58. package/lib/node/html.js +77 -4
  59. package/lib/node/markdown/directive/{embee.js → embed.js} +1 -1
  60. package/lib/node/markdown/division.js +13 -22
  61. package/lib/node/markdown/link/footnote.js +5 -102
  62. package/lib/node/markdown/subDivision.js +2 -2
  63. package/lib/node/markdown/text/block.js +1 -1
  64. package/lib/node/markdown/text.js +25 -29
  65. package/lib/ruleNames.js +87 -81
  66. package/lib/style/selector.js +4 -4
  67. package/lib/{node/markdown/heading/tertiary.js → transform/html/directive/contents.js} +23 -28
  68. package/lib/{node/markdown/stronglyEmphasisedText.js → transform/html/directive/footnotes.js} +15 -14
  69. package/lib/{node/markdown/line.js → transform/html/directive/index.js} +19 -18
  70. package/lib/transform/html/directive/pageNumber.js +108 -0
  71. package/lib/transform/html/division.js +130 -0
  72. package/lib/transform/html/footnote.js +159 -0
  73. package/lib/transform/html/heading/index.js +109 -0
  74. package/lib/transform/html/index.js +159 -0
  75. package/lib/transform/{indexAnchor.js → html/indexAnchor.js} +20 -20
  76. package/lib/transform/html/item/contents.js +130 -0
  77. package/lib/transform/html/item/footnote.js +117 -0
  78. package/lib/transform/html/item/index.js +117 -0
  79. package/lib/transform/html/line.js +123 -0
  80. package/lib/transform/html/link/contents.js +130 -0
  81. package/lib/transform/html/link/footnote.js +158 -0
  82. package/lib/transform/html/link/nestedFootnote.js +108 -0
  83. package/lib/transform/html/list/contents.js +180 -0
  84. package/lib/transform/html/list/footnotes.js +117 -0
  85. package/lib/transform/html/list/index.js +118 -0
  86. package/lib/transform/html/pageNumber.js +117 -0
  87. package/lib/transform/html.js +168 -0
  88. package/lib/transform/markdown/directive/embed.js +14 -9
  89. package/lib/transform/markdown/directive/ignore.js +12 -38
  90. package/lib/transform/markdown/directive/include.js +11 -6
  91. package/lib/transform/markdown/subDivision.js +18 -50
  92. package/lib/transform/markdown.js +148 -0
  93. package/lib/utilities/contents.js +16 -16
  94. package/lib/utilities/division.js +247 -0
  95. package/lib/utilities/footnotes.js +8 -8
  96. package/lib/utilities/html.js +37 -79
  97. package/lib/utilities/index.js +23 -16
  98. package/lib/utilities/markdown.js +2 -10
  99. package/lib/utilities/string.js +16 -10
  100. package/lib/utilities/whitespace.js +33 -0
  101. package/package.json +6 -6
  102. package/src/constants.js +2 -0
  103. package/src/defaultMarkdownStyle.js +6 -9
  104. package/src/example/importer.js +11 -5
  105. package/src/example/indexOptions.js +0 -97
  106. package/src/example/view/div/container/markdown.js +1 -1
  107. package/src/example/view/div/container/markdownStyle.js +1 -1
  108. package/src/example/view/div/container.js +1 -1
  109. package/src/example/view/div/pageButtons.js +8 -2
  110. package/src/example/view/div/preview.js +0 -6
  111. package/src/example/view/div/sizeable/left.js +1 -1
  112. package/src/example/view/div/tabButtons/right.js +3 -3
  113. package/src/example/view/textarea/markdown.js +1 -0
  114. package/src/example/view/textarea/markdownStyle.js +1 -0
  115. package/src/example/view/textarea/parseTree/html.js +1 -1
  116. package/src/example/view/textarea/plainText.js +0 -6
  117. package/src/example/view/xmp.js +0 -6
  118. package/src/example/view.js +75 -74
  119. package/src/index/list.js +3 -3
  120. package/src/index.js +1 -1
  121. package/src/map/node/html.js +29 -11
  122. package/src/map/node/markdown.js +8 -65
  123. package/src/markdown/bnf.js +112 -149
  124. package/src/node/html/anchor.js +34 -43
  125. package/src/node/html/blockLine.js +33 -4
  126. package/src/node/html/directive/contents.js +9 -0
  127. package/src/node/html/directive/footnotes.js +9 -0
  128. package/src/node/html/directive/index.js +9 -0
  129. package/src/node/html/directive/pageNumber.js +9 -0
  130. package/src/node/html/division.js +154 -4
  131. package/src/node/html/footnote.js +1 -7
  132. package/src/node/html/heading/index.js +78 -2
  133. package/src/node/html/heading/primary.js +6 -4
  134. package/src/node/html/heading/quaternary.js +6 -4
  135. package/src/node/html/heading/secondary.js +6 -4
  136. package/src/node/html/heading/tertiary.js +6 -4
  137. package/src/node/html/heading.js +59 -0
  138. package/src/node/html/image.js +8 -5
  139. package/src/node/html/item/contents.js +25 -2
  140. package/src/node/html/item/footnote.js +39 -0
  141. package/src/node/html/item/index.js +35 -16
  142. package/src/node/html/line.js +41 -2
  143. package/src/node/html/link/contents.js +32 -5
  144. package/src/node/html/link/email.js +51 -17
  145. package/src/node/html/link/footnote.js +98 -2
  146. package/src/node/html/link/hyper.js +51 -17
  147. package/src/node/html/link/index.js +63 -30
  148. package/src/node/html/list/contents.js +25 -2
  149. package/src/node/html/list/footnotes.js +34 -2
  150. package/src/node/html/list/index.js +25 -2
  151. package/src/node/html/pageNumber.js +60 -16
  152. package/src/node/html/reference.js +13 -0
  153. package/src/node/html/text/comma.js +29 -0
  154. package/src/node/html/text/index.js +43 -0
  155. package/src/node/html/text/stronglyEmphasised.js +22 -11
  156. package/src/node/html/text.js +3 -3
  157. package/src/node/html/topmost.js +93 -1
  158. package/src/node/html.js +34 -6
  159. package/src/node/markdown/division.js +11 -227
  160. package/src/node/markdown/link/footnote.js +6 -82
  161. package/src/node/markdown/subDivision.js +1 -1
  162. package/src/node/markdown/text/block.js +1 -1
  163. package/src/node/markdown/text.js +38 -39
  164. package/src/ruleNames.js +11 -8
  165. package/src/style/selector.js +3 -4
  166. package/src/transform/html/directive/contents.js +19 -0
  167. package/src/transform/html/directive/footnotes.js +12 -0
  168. package/src/transform/html/directive/index.js +19 -0
  169. package/src/transform/html/directive/pageNumber.js +12 -0
  170. package/src/transform/html/division.js +33 -0
  171. package/src/transform/html/footnote.js +66 -0
  172. package/src/transform/html/heading/index.js +14 -0
  173. package/src/transform/html/index.js +77 -0
  174. package/src/transform/html/indexAnchor.js +24 -0
  175. package/src/transform/html/item/contents.js +48 -0
  176. package/src/transform/html/item/footnote.js +21 -0
  177. package/src/transform/html/item/index.js +21 -0
  178. package/src/transform/html/line.js +27 -0
  179. package/src/transform/html/link/contents.js +40 -0
  180. package/src/transform/html/link/footnote.js +58 -0
  181. package/src/transform/html/link/nestedFootnote.js +12 -0
  182. package/src/transform/html/list/contents.js +86 -0
  183. package/src/transform/html/list/footnotes.js +20 -0
  184. package/src/transform/html/list/index.js +27 -0
  185. package/src/transform/html/pageNumber.js +20 -0
  186. package/src/transform/html.js +78 -0
  187. package/src/transform/markdown/directive/embed.js +6 -7
  188. package/src/transform/markdown/directive/ignore.js +3 -9
  189. package/src/transform/markdown/directive/include.js +3 -3
  190. package/src/transform/markdown/subDivision.js +5 -17
  191. package/src/transform/markdown.js +9 -0
  192. package/src/utilities/contents.js +12 -12
  193. package/src/utilities/division.js +256 -0
  194. package/src/utilities/footnotes.js +5 -5
  195. package/src/utilities/html.js +39 -86
  196. package/src/utilities/index.js +26 -16
  197. package/src/utilities/markdown.js +0 -8
  198. package/src/utilities/string.js +5 -3
  199. package/src/utilities/whitespace.js +21 -0
  200. package/lib/node/markdown/anchor.js +0 -171
  201. package/lib/node/markdown/contentsItem.js +0 -112
  202. package/lib/node/markdown/directive/pageNumber.js +0 -163
  203. package/lib/node/markdown/heading/quaternary.js +0 -121
  204. package/lib/node/markdown/heading/secondary.js +0 -121
  205. package/lib/node/markdown/heading.js +0 -140
  206. package/lib/node/markdown/item/footnotes.js +0 -120
  207. package/lib/node/markdown/link/contents.js +0 -156
  208. package/lib/node/markdown/link/index.js +0 -117
  209. package/lib/node/markdown/list/contents.js +0 -112
  210. package/lib/node/markdown/list/footnotes.js +0 -165
  211. package/lib/node/markdown/list/index.js +0 -112
  212. package/lib/transform/contentsDirective.js +0 -112
  213. package/lib/transform/contentsItem.js +0 -134
  214. package/lib/transform/contentsLink.js +0 -115
  215. package/lib/transform/contentsList.js +0 -193
  216. package/lib/transform/footnote.js +0 -181
  217. package/lib/transform/footnoteIdentifier.js +0 -120
  218. package/lib/transform/footnotesDirective.js +0 -112
  219. package/lib/transform/footnotesItem.js +0 -123
  220. package/lib/transform/footnotesList.js +0 -172
  221. package/lib/transform/index.js +0 -166
  222. package/lib/transform/indexDirective.js +0 -112
  223. package/lib/transform/indexHeading.js +0 -104
  224. package/lib/transform/indexItem.js +0 -113
  225. package/lib/transform/indexList.js +0 -121
  226. package/lib/transform/line.js +0 -111
  227. package/lib/transform/pageNumberDirective.js +0 -112
  228. package/src/node/html/item/footnotes.js +0 -13
  229. package/src/node/markdown/anchor.js +0 -45
  230. package/src/node/markdown/contentsItem.js +0 -21
  231. package/src/node/markdown/directive/pageNumber.js +0 -34
  232. package/src/node/markdown/emphasisedText.js +0 -7
  233. package/src/node/markdown/heading/primary.js +0 -9
  234. package/src/node/markdown/heading/quaternary.js +0 -9
  235. package/src/node/markdown/heading/secondary.js +0 -9
  236. package/src/node/markdown/heading/tertiary.js +0 -9
  237. package/src/node/markdown/heading.js +0 -47
  238. package/src/node/markdown/inlineText.js +0 -7
  239. package/src/node/markdown/item/footnotes.js +0 -39
  240. package/src/node/markdown/line.js +0 -17
  241. package/src/node/markdown/link/contents.js +0 -31
  242. package/src/node/markdown/link/index.js +0 -18
  243. package/src/node/markdown/list/contents.js +0 -21
  244. package/src/node/markdown/list/footnotes.js +0 -45
  245. package/src/node/markdown/list/index.js +0 -21
  246. package/src/node/markdown/paragraph.js +0 -7
  247. package/src/node/markdown/strongText.js +0 -7
  248. package/src/node/markdown/stronglyEmphasisedText.js +0 -7
  249. package/src/transform/contentsDirective.js +0 -18
  250. package/src/transform/contentsItem.js +0 -55
  251. package/src/transform/contentsLink.js +0 -28
  252. package/src/transform/contentsList.js +0 -110
  253. package/src/transform/footnote.js +0 -51
  254. package/src/transform/footnoteIdentifier.js +0 -27
  255. package/src/transform/footnotesDirective.js +0 -18
  256. package/src/transform/footnotesItem.js +0 -25
  257. package/src/transform/footnotesList.js +0 -77
  258. package/src/transform/index.js +0 -90
  259. package/src/transform/indexAnchor.js +0 -27
  260. package/src/transform/indexDirective.js +0 -18
  261. package/src/transform/indexHeading.js +0 -18
  262. package/src/transform/indexItem.js +0 -29
  263. package/src/transform/indexList.js +0 -33
  264. package/src/transform/line.js +0 -19
  265. package/src/transform/pageNumberDirective.js +0 -18
  266. /package/src/node/markdown/directive/{embee.js → embed.js} +0 -0
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ export default class HTMLTransform {
4
+ constructor(htmlNode) {
5
+ this.htmlNode = htmlNode;
6
+ }
7
+
8
+ getHTMLNode() {
9
+ return this.htmlNode;
10
+ }
11
+
12
+ appendTo(parentHTMLNode) {
13
+ const childNode = this.htmlNode, ///
14
+ parentNode = parentHTMLNode; ///
15
+
16
+ parentNode.appendChildNode(childNode);
17
+ }
18
+
19
+ prependTo(parentHTMLNode) {
20
+ const childNode = this.htmlNode, ///
21
+ parentNode = parentHTMLNode; ///
22
+
23
+ parentNode.prependChildNode(childNode);
24
+ }
25
+
26
+ addAfter(exitingHTMLNode) {
27
+ const childNode = exitingHTMLNode, ///
28
+ parentNode = childNode.getParentNode(),
29
+ index = parentNode.indexOfChildNode(childNode),
30
+ startIndex = index + 1,
31
+ addedChildNode = this.htmlNode; ///
32
+
33
+ parentNode.addChildNode(addedChildNode, startIndex);
34
+ }
35
+
36
+ replace(replacedHTMLNode) {
37
+ const parentNode = replacedHTMLNode.getParentNode(),
38
+ replacedChildNode = replacedHTMLNode, ///
39
+ replacementChildNode = this.htmlNode, ///
40
+ replacementChildNodes = [
41
+ replacementChildNode
42
+ ];
43
+
44
+ parentNode.replaceChildNode(replacedChildNode, replacementChildNodes);
45
+ }
46
+
47
+ remove() {
48
+ const childNode = this.htmlNode, ///
49
+ parentNode = childNode.getParentNode();
50
+
51
+ parentNode.removeChildNode(childNode);
52
+ }
53
+
54
+ expand(Class, ascendantNode) {
55
+ if (ascendantNode === undefined) {
56
+ ascendantNode = Class; ///
57
+
58
+ Class = HTMLTransform; ///
59
+ }
60
+
61
+ const htmlNode = ascendantNode, ///
62
+ transform = new Class(htmlNode);
63
+
64
+ return transform;
65
+ }
66
+
67
+ static fromHTMLNode(Class, htmlNode, ...remainingArguments) {
68
+ if (htmlNode === undefined) {
69
+ htmlNode = Class; ///
70
+
71
+ Class = HTMLTransform; ///
72
+ }
73
+
74
+ const htmlTransform = new Class(htmlNode, ...remainingArguments);
75
+
76
+ return htmlTransform;
77
+ }
78
+ }
@@ -1,18 +1,17 @@
1
1
  "use strict";
2
2
 
3
- import { Transform } from "occam-dom";
3
+ import MarkdownTransform from "../../../transform/markdown";
4
4
 
5
- export default class EmbedDirectiveMarkdownTransform extends Transform {
6
- addAfterSubDivisionMarkdownNode(subDivisionMarkdownNode, divisionMarkdownNode, context) {
7
- const existingNode = subDivisionMarkdownNode, ///
8
- parentNode = divisionMarkdownNode; ///
5
+ export default class EmbedDirectiveMarkdownTransform extends MarkdownTransform {
6
+ addAfterSubDivisionMarkdownNode(subDivisionMarkdownNode, context) {
7
+ const existingNode = subDivisionMarkdownNode; ///
9
8
 
10
- super.addAfter(existingNode, parentNode, context);
9
+ super.addAfter(existingNode, context);
11
10
  }
12
11
 
13
12
  static fromSubDivisionMarkdownNodeAndTokens(subDivisionMarkdownNode, tokens) {
14
13
  const node = subDivisionMarkdownNode, ///
15
- embedDirectiveMarkdownTransform = Transform.fromNodeAndTokens(EmbedDirectiveMarkdownTransform, node, tokens);
14
+ embedDirectiveMarkdownTransform = MarkdownTransform.fromNodeAndTokens(EmbedDirectiveMarkdownTransform, node, tokens);
16
15
 
17
16
  return embedDirectiveMarkdownTransform;
18
17
  }
@@ -1,18 +1,12 @@
1
1
  "use strict";
2
2
 
3
- import { Transform } from "occam-dom";
4
-
5
- export default class IgnoreDirectiveMarkdownTransform extends Transform {
6
- removeFromTopmostMarkdownNode(topmostMarkdownNode, context) {
7
- const parentNode = topmostMarkdownNode; ///
8
-
9
- super.removeFrom(parentNode, context);
10
- }
3
+ import MarkdownTransform from "../../../transform/markdown";
11
4
 
5
+ export default class IgnoreDirectiveMarkdownTransform extends MarkdownTransform {
12
6
  static fromDivisionMarkdownNode(divisionMarkdownNode) {
13
7
  const node = divisionMarkdownNode, ///
14
8
  tokens = null,
15
- ignoredDirectiveMarkdownTransform = Transform.fromNodeAndTokens(IgnoreDirectiveMarkdownTransform, node, tokens);
9
+ ignoredDirectiveMarkdownTransform = MarkdownTransform.fromNodeAndTokens(IgnoreDirectiveMarkdownTransform, node, tokens);
16
10
 
17
11
  return ignoredDirectiveMarkdownTransform;
18
12
  }
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
 
3
- import { Transform } from "occam-dom";
3
+ import MarkdownTransform from "../../../transform/markdown";
4
4
 
5
- export default class IncludeDirectiveMarkdownTransform extends Transform {
5
+ export default class IncludeDirectiveMarkdownTransform extends MarkdownTransform {
6
6
  getDivisionMarkdownNode() {
7
7
  const node = this.getNode(),
8
8
  divisionMarkdownNode = node; ///
@@ -22,7 +22,7 @@ export default class IncludeDirectiveMarkdownTransform extends Transform {
22
22
 
23
23
  static fromDivisionMarkdownNodeAndTokens(divisionMarkdownNode, tokens) {
24
24
  const node = divisionMarkdownNode, ///
25
- includeDirectiveMarkdownTransform = Transform.fromNodeAndTokens(IncludeDirectiveMarkdownTransform, node, tokens);
25
+ includeDirectiveMarkdownTransform = MarkdownTransform.fromNodeAndTokens(IncludeDirectiveMarkdownTransform, node, tokens);
26
26
 
27
27
  return includeDirectiveMarkdownTransform;
28
28
  }
@@ -1,25 +1,13 @@
1
1
  "use strict";
2
2
 
3
- import { Transform } from "occam-dom";
4
-
5
- export default class SubDivisionMarkdownTransform extends Transform {
6
- constructor(node, tokens, subDivisionMarkdownNode) {
7
- super(node, tokens);
8
-
9
- this.subDivisionMarkdownNode = subDivisionMarkdownNode;
10
- }
11
-
12
- removeFromDivisionMarkdownNode(divisionMarkdownNode, context) {
13
- const parentNode = divisionMarkdownNode; ///
14
-
15
- super.removeFrom(parentNode, context);
16
- }
3
+ import MarkdownTransform from "../../transform/markdown";
17
4
 
5
+ export default class SubdivisionMarkdownTransform extends MarkdownTransform {
18
6
  static fromSubDivisionMarkdownNode(subDivisionMarkdownNode) {
19
- const node = subDivisionMarkdownNode, ///
7
+ const node = subDivisionMarkdownNode, ///
20
8
  tokens = null,
21
- subDivisionMarkdownTransform = Transform.fromNodeAndTokens(SubDivisionMarkdownTransform, node, tokens);
9
+ embedDirectiveMarkdownTransform = MarkdownTransform.fromNodeAndTokens(SubdivisionMarkdownTransform, node, tokens);
22
10
 
23
- return subDivisionMarkdownTransform;
11
+ return embedDirectiveMarkdownTransform;
24
12
  }
25
13
  }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ import { Transform } from "occam-dom";
4
+
5
+ export default class MarkdownTransform extends Transform {
6
+ static fromNode(Class, node, ...remainingArguments) { return Transform.fromNode(Class, node, ...remainingArguments); }
7
+
8
+ static fromNodeAndTokens(Class, node, tokens, ...remainingArguments) { return Transform.fromNodeAndTokens(Class, node, tokens, ...remainingArguments); }
9
+ }
@@ -4,11 +4,11 @@ import { arrayUtilities } from "necessary";
4
4
 
5
5
  const { first, last } = arrayUtilities;
6
6
 
7
- export function nestNodes(nodes) {
7
+ export function nestHTMLNodes(htmlNodes) {
8
8
  const nestedNodesStack = NestedNodeStack.fromNothing();
9
9
 
10
- nodes.forEach((node) => {
11
- const depth = node.getDepth();
10
+ htmlNodes.forEach((htmlNode) => {
11
+ const depth = htmlNode.depth();
12
12
 
13
13
  let nestedNodesStackDepth = nestedNodesStack.getDepth()
14
14
 
@@ -20,7 +20,7 @@ export function nestNodes(nodes) {
20
20
  nestedNodesStackDepth = nestedNodesStack.decrement();
21
21
  }
22
22
 
23
- const nestedNode = NestedNode.fromNode(node);
23
+ const nestedNode = NestedNode.fromHTMLNode(htmlNode);
24
24
 
25
25
  nestedNodesStack.addNestedNode(nestedNode);
26
26
  });
@@ -31,13 +31,13 @@ export function nestNodes(nodes) {
31
31
  }
32
32
 
33
33
  class NestedNode {
34
- constructor(node, childNestedNodes) {
35
- this.node = node;
34
+ constructor(htmlNode, childNestedNodes) {
35
+ this.htmlNode = htmlNode;
36
36
  this.childNestedNodes = childNestedNodes;
37
37
  }
38
38
 
39
- getNode() {
40
- return this.node;
39
+ getHTMLNode() {
40
+ return this.htmlNode;
41
41
  }
42
42
 
43
43
  getChildNestedNodes() {
@@ -50,17 +50,17 @@ class NestedNode {
50
50
  this.childNestedNodes.push(childNestedNode);
51
51
  }
52
52
 
53
- static fromNode(node) {
53
+ static fromHTMLNode(htmlNode) {
54
54
  const childNestedNodes = [],
55
- nestedNode = new NestedNode(node, childNestedNodes);
55
+ nestedNode = new NestedNode(htmlNode, childNestedNodes);
56
56
 
57
57
  return nestedNode;
58
58
  }
59
59
 
60
60
  static fromNothing() {
61
- const node = null,
61
+ const htmlNode = null,
62
62
  childNestedNodes = [],
63
- nestedNode = new NestedNode(node, childNestedNodes);
63
+ nestedNode = new NestedNode(htmlNode, childNestedNodes);
64
64
 
65
65
  return nestedNode;
66
66
  }
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+
3
+ import { arrayUtilities } from "necessary";
4
+
5
+ import HTMLTransform from "../transform/html";
6
+ import FootnoteHTMLNode from "../node/html/footnote";
7
+ import LineHTMLTransform from "../transform/html/line";
8
+ import FootnoteHTMLTransform from "../transform/html/footnote";
9
+ import FootnoteItemHTMLTransform from "../transform/html/item/footnote";
10
+ import FootnoteLinkHTMLTransform from "../transform/html/link/footnote";
11
+ import NestedFootnoteLinkHTMLTransform from "../transform/html/link/nestedFootnote";
12
+ import FootnotesDirectiveHTMLTransform from "../transform/html/directive/footnotes";
13
+ import PageNumberDirectiveHTMLTransform from "../transform/html/directive/pageNumber";
14
+
15
+ import { DEFAULT_MAXIMUM_PAGE_LINES } from "../constants";
16
+ import { htmlNodesFromNode,
17
+ footnoteHTMLNodesFromNode,
18
+ footnoteLinkHTMLNodesFromNode,
19
+ footnotesDirectiveHTMLNodeFromNode,
20
+ nestedFootnoteLinkHTMLNodesFromNode,
21
+ pageNumberDirectiveHTMLNodeFromNode } from "../utilities/html";
22
+
23
+ const { backwardsForEach } = arrayUtilities;
24
+
25
+ export function groupHTMLNodes(htmlNodes) {
26
+ const groupedHTMLNodesArray = [];
27
+
28
+ let groupedHTMLNodes = [];
29
+
30
+ htmlNodes.forEach((htmlNode) => {
31
+ const htmlNodeFootnoteHTMLNode = (htmlNode instanceof FootnoteHTMLNode);
32
+
33
+ if (!htmlNodeFootnoteHTMLNode) {
34
+ const groupedHTMLNodeLength = groupedHTMLNodes.length;
35
+
36
+ if (groupedHTMLNodeLength > 0) {
37
+ groupedHTMLNodesArray.push(groupedHTMLNodes);
38
+
39
+ groupedHTMLNodes = [];
40
+ }
41
+ }
42
+
43
+ const groupedHTMLNode = htmlNode; ///
44
+
45
+ groupedHTMLNodes.push(groupedHTMLNode);
46
+ });
47
+
48
+ const groupedHTMLNodeLength = groupedHTMLNodes.length;
49
+
50
+ if (groupedHTMLNodeLength) {
51
+ groupedHTMLNodesArray.push(groupedHTMLNodes);
52
+ }
53
+
54
+ return groupedHTMLNodesArray;
55
+ }
56
+
57
+ export function removeHTMLNodes(node) {
58
+ const htmlNodes = htmlNodesFromNode(node);
59
+
60
+ htmlNodes.forEach((htmlNode) => {
61
+ const htmlTransform = HTMLTransform.fromHTMLNode(htmlNode);
62
+
63
+ htmlTransform.remove();
64
+ });
65
+
66
+ return htmlNodes;
67
+ }
68
+
69
+ export function addFootnoteHTMLNodes(footnoteHTMLTransforms, node, context) {
70
+ const footnoteLinkHTMLNodes = footnoteLinkHTMLNodesFromNode(node),
71
+ footnoteLinkHTMLTransforms = footnoteLinkHTMLTransformsFromFootnoteLinkHTMLNodes(footnoteLinkHTMLNodes);
72
+
73
+ backwardsForEach(footnoteLinkHTMLTransforms, (footnoteLinkHTMLTransform) => {
74
+ const identifier = footnoteLinkHTMLTransform.identifier(context),
75
+ footnoteHTMLTransform = footnoteHTMLTransforms.find((footnoteHTMLTransform) => {
76
+ const identifierMatches = footnoteHTMLTransform.matchIdentifier(identifier, context);
77
+
78
+ if (identifierMatches) {
79
+ return true;
80
+ }
81
+ }) || null;
82
+
83
+ if (footnoteHTMLTransform !== null) {
84
+ footnoteHTMLTransform.addAfterFootnoteLinkHTMLTransform(footnoteLinkHTMLTransform);
85
+ }
86
+ });
87
+ }
88
+
89
+ export function removeFootnoteHTMLNodes(node) {
90
+ const footnoteHTMLNodes = footnoteHTMLNodesFromNode(node),
91
+ footnoteHTMLTransforms = footnoteHTMLTransformsFromFootnoteHTMLNodes(footnoteHTMLNodes);
92
+
93
+ footnoteHTMLTransforms.forEach((footnoteHTMLTransform) => {
94
+ footnoteHTMLTransform.remove();
95
+ });
96
+
97
+ return footnoteHTMLTransforms;
98
+ }
99
+
100
+ export function paginateGroupedHTMLNodes(groupedHTMLNodesArray, context) {
101
+ const paginatedHTMLNodesArray = [];
102
+
103
+ const { maximumPageLines = DEFAULT_MAXIMUM_PAGE_LINES } = context;
104
+
105
+ let pageLines = 0,
106
+ paginatedHTMLNodes = [];
107
+
108
+ groupedHTMLNodesArray.forEach((groupedHTMLNodes) => {
109
+ const groupLines = groupedHTMLNodes.reduce((groupLines, groupedHTMLNode) => {
110
+ const lines = groupedHTMLNode.lines(context);
111
+
112
+ groupLines += lines;
113
+
114
+ return groupLines;
115
+ }, 0);
116
+
117
+ const paginatedHTMLNodesLength = paginatedHTMLNodes.length;
118
+
119
+ if (paginatedHTMLNodesLength > 0) {
120
+ if (pageLines + groupLines > maximumPageLines) {
121
+ paginatedHTMLNodesArray.push(paginatedHTMLNodes);
122
+
123
+ pageLines = 0;
124
+
125
+ paginatedHTMLNodes = [];
126
+ }
127
+ }
128
+
129
+ paginatedHTMLNodes.push(...groupedHTMLNodes);
130
+
131
+ pageLines += groupLines;
132
+ });
133
+
134
+ const paginatedHTMLNodesLength = paginatedHTMLNodes.length;
135
+
136
+ if (paginatedHTMLNodesLength) {
137
+ paginatedHTMLNodesArray.push(paginatedHTMLNodes);
138
+ }
139
+
140
+ return paginatedHTMLNodesArray;
141
+ }
142
+
143
+ export function numberFootnoteLinkHTMLNodes(footnoteHTMLTransforms, identifierMap, node, context) {
144
+ const footnoteLinkHTMLNodes = footnoteLinkHTMLNodesFromNode(node),
145
+ identifiers = Object.keys(identifierMap),
146
+ identifiersLength = identifiers.length,
147
+ start = identifiersLength + 1;
148
+
149
+ footnoteHTMLTransforms.forEach((footnoteHTMLTransform, index) => {
150
+ const identifier = footnoteHTMLTransform.identifier(context),
151
+ number = start + index;
152
+
153
+ identifierMap[identifier] = number;
154
+ });
155
+
156
+ footnoteLinkHTMLNodes.forEach((footnoteLinkHTMLNode) => {
157
+ const identifier = footnoteLinkHTMLNode.identifier(context),
158
+ number = identifierMap[identifier];
159
+
160
+ footnoteLinkHTMLNode.setNumber(number);
161
+ })
162
+
163
+ return start;
164
+ }
165
+
166
+ export function removeFootnotesDirectiveHTMLNode(node) {
167
+ const footnotesDirectiveHTMLNode = footnotesDirectiveHTMLNodeFromNode(node);
168
+
169
+ if (footnotesDirectiveHTMLNode !== null) {
170
+ const footnotesDirectiveHTMLTransform = FootnotesDirectiveHTMLTransform.fromFootnotesDirectiveHTMLNode(footnotesDirectiveHTMLNode);
171
+
172
+ footnotesDirectiveHTMLTransform.remove();
173
+ }
174
+
175
+ return footnotesDirectiveHTMLNode;
176
+ }
177
+
178
+ export function removePageNumberDirectiveHTMLNode(node) {
179
+ let pageNumberDirectiveHTNLTransform = null;
180
+
181
+ const pageNumberDirectiveHTMLNode = pageNumberDirectiveHTMLNodeFromNode(node);
182
+
183
+ if (pageNumberDirectiveHTMLNode !== null) {
184
+ pageNumberDirectiveHTNLTransform = PageNumberDirectiveHTMLTransform.fromPageNumberDirectiveHTMLNode(pageNumberDirectiveHTMLNode);
185
+
186
+ pageNumberDirectiveHTNLTransform.remove();
187
+ }
188
+
189
+ return pageNumberDirectiveHTNLTransform;
190
+ }
191
+
192
+ export function removeNestedFootnoteLinkHTMLNodes(node) {
193
+ const nestedFootnoteLinkHTMLNodes = nestedFootnoteLinkHTMLNodesFromNode(node),
194
+ nestedFootnoteLinkHTMLTransforms = nestedFootnoteLinkHTMLTransformsFromNestedFootnoteLinkHTMLNodes(nestedFootnoteLinkHTMLNodes);
195
+
196
+ nestedFootnoteLinkHTMLTransforms.forEach((nestedFootnoteLinkHTMLTransform) => {
197
+ nestedFootnoteLinkHTMLTransform.remove();
198
+ });
199
+ }
200
+
201
+ export function lineHTMLTransformsFromFootnoteHTMLTransforms(footnoteHTMLTransforms) {
202
+ const lineHTMLTransforms = footnoteHTMLTransforms.map((footnoteHTMLTransform) => {
203
+ const lineHTMLTransform = LineHTMLTransform.fromFootnoteHTMLTransform(footnoteHTMLTransform);
204
+
205
+ return lineHTMLTransform;
206
+ });
207
+
208
+ return lineHTMLTransforms;
209
+ }
210
+
211
+ export function footnoteItemHTMLTransformsFromLineHTMLTransforms(lineHTMLTransforms, identifierMap, start) {
212
+ const numbers = Object.values(identifierMap),
213
+ identifiers = Object.keys(identifierMap),
214
+ footnoteItemHTMLTransforms = lineHTMLTransforms.map((lineHTMLTransform, index) => {
215
+ const number = start + index;
216
+
217
+ index = numbers.indexOf(number);
218
+
219
+ const identifier = identifiers[index],
220
+ footnoteItemHTMLTransform = FootnoteItemHTMLTransform.fromLineTMLTransformAndIdentifier(lineHTMLTransform, identifier);
221
+
222
+ return footnoteItemHTMLTransform;
223
+ });
224
+
225
+ return footnoteItemHTMLTransforms;
226
+ }
227
+
228
+ function footnoteHTMLTransformsFromFootnoteHTMLNodes(footnoteHTMLNodes) {
229
+ const footnoteHTMLTransforms = footnoteHTMLNodes.map((footnoteHTMLNode) => {
230
+ const footnoteHTMLTransform = FootnoteHTMLTransform.fromFootnoteHTMLNode(footnoteHTMLNode);
231
+
232
+ return footnoteHTMLTransform;
233
+ });
234
+
235
+ return footnoteHTMLTransforms;
236
+ }
237
+
238
+ function footnoteLinkHTMLTransformsFromFootnoteLinkHTMLNodes(footnoteLinkHTMLNodes) {
239
+ const footnoteLinkHTMLTransforms = footnoteLinkHTMLNodes.map((footnoteLinkHTMLNode) => {
240
+ const footnoteLinkHTMLTransform = FootnoteLinkHTMLTransform.fromFootnoteLinkHTMLNode(footnoteLinkHTMLNode);
241
+
242
+ return footnoteLinkHTMLTransform;
243
+ });
244
+
245
+ return footnoteLinkHTMLTransforms;
246
+ }
247
+
248
+ function nestedFootnoteLinkHTMLTransformsFromNestedFootnoteLinkHTMLNodes(nestedFootnoteLinkHTMLNodes) {
249
+ const nestedFootnoteLinkHTMLTransforms = nestedFootnoteLinkHTMLNodes.map((nestedFootnoteLinkHTMLNode) => {
250
+ const nestedFootnoteLinkHTMLTransform = NestedFootnoteLinkHTMLTransform.fromNestedFootnoteLinkHTMLNode(nestedFootnoteLinkHTMLNode);
251
+
252
+ return nestedFootnoteLinkHTMLTransform;
253
+ });
254
+
255
+ return nestedFootnoteLinkHTMLTransforms;
256
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import FootnotesListMarkdownNode from "../node/markdown/list/footnotes";
3
+ import FootnotesListHTMLNode from "../node/html/list/footnotes";
4
4
 
5
5
  export function renumberFootnoteLinkMarkdownNodes(divisionMarkdownNode, footnoteReplacementMap, context) {
6
6
  const node = divisionMarkdownNode, ///
@@ -17,14 +17,14 @@ export function renumberFootnoteLinkMarkdownNodes(divisionMarkdownNode, footnote
17
17
  });
18
18
  }
19
19
 
20
- export function footnotesListMarkdownNodeFromFootnotesListDOMElement(footnotesListDOMElement) {
20
+ export function footnotesListHTMLNodeFromFootnotesListDOMElement(footnotesListDOMElement) {
21
21
  const domElement = footnotesListDOMElement, ///
22
- footnotesListMarkdownNode = FootnotesListMarkdownNode.fromDOMElement(domElement);
22
+ footnotesListHTMLNode = FootnotesListHTMLNode.fromDOMElement(domElement);
23
23
 
24
- return footnotesListMarkdownNode;
24
+ return footnotesListHTMLNode;
25
25
  }
26
26
 
27
27
  export default {
28
28
  renumberFootnoteLinkMarkdownNodes,
29
- footnotesListMarkdownNodeFromFootnotesListDOMElement
29
+ footnotesListHTMLNodeFromFootnotesListDOMElement
30
30
  };