highmark-markdown 0.0.1

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 (161) hide show
  1. package/.swcrc +11 -0
  2. package/README.md +18 -0
  3. package/bin/main.js +15 -0
  4. package/example.js +43721 -0
  5. package/index.html +48 -0
  6. package/lib/attributeNames.js +30 -0
  7. package/lib/constants.js +22 -0
  8. package/lib/example/constants.js +13 -0
  9. package/lib/example/view/div/previewPane.js +256 -0
  10. package/lib/example/view/div/sizeable/left.js +135 -0
  11. package/lib/example/view/div/sizeable/right.js +135 -0
  12. package/lib/example/view/heading.js +39 -0
  13. package/lib/example/view/subHeading.js +39 -0
  14. package/lib/example/view/textarea/bnf.js +176 -0
  15. package/lib/example/view/textarea/lexicalEntries.js +183 -0
  16. package/lib/example/view/textarea/markdown.js +176 -0
  17. package/lib/example/view/textarea/parseTree.js +183 -0
  18. package/lib/example/view/textarea.js +39 -0
  19. package/lib/example/view.js +262 -0
  20. package/lib/example.js +19 -0
  21. package/lib/index.js +63 -0
  22. package/lib/markdown/bnf.js +14 -0
  23. package/lib/markdown/entries.js +93 -0
  24. package/lib/markdown/lexer.js +157 -0
  25. package/lib/markdown/parser.js +155 -0
  26. package/lib/mixins/content.js +23 -0
  27. package/lib/mixins/element.js +47 -0
  28. package/lib/mixins/node.js +30 -0
  29. package/lib/node/markdown/anchor.js +164 -0
  30. package/lib/node/markdown/blockListing.js +137 -0
  31. package/lib/node/markdown/blockListingEnd.js +120 -0
  32. package/lib/node/markdown/blockListingStart.js +143 -0
  33. package/lib/node/markdown/blockText.js +132 -0
  34. package/lib/node/markdown/className.js +130 -0
  35. package/lib/node/markdown/document.js +158 -0
  36. package/lib/node/markdown/emphasisedText.js +123 -0
  37. package/lib/node/markdown/endOfLine.js +136 -0
  38. package/lib/node/markdown/error.js +169 -0
  39. package/lib/node/markdown/footnote.js +130 -0
  40. package/lib/node/markdown/footnoteItem.js +136 -0
  41. package/lib/node/markdown/footnotesList.js +154 -0
  42. package/lib/node/markdown/hyperlink.js +170 -0
  43. package/lib/node/markdown/image.js +170 -0
  44. package/lib/node/markdown/inlineListing.js +130 -0
  45. package/lib/node/markdown/inlineText.js +132 -0
  46. package/lib/node/markdown/line.js +131 -0
  47. package/lib/node/markdown/lineBreak.js +120 -0
  48. package/lib/node/markdown/link.js +184 -0
  49. package/lib/node/markdown/orderedList.js +162 -0
  50. package/lib/node/markdown/orderedListItem.js +130 -0
  51. package/lib/node/markdown/paragraph.js +120 -0
  52. package/lib/node/markdown/primaryHeading.js +120 -0
  53. package/lib/node/markdown/quaternaryHeading.js +120 -0
  54. package/lib/node/markdown/reference.js +130 -0
  55. package/lib/node/markdown/secondaryHeading.js +120 -0
  56. package/lib/node/markdown/strongText.js +123 -0
  57. package/lib/node/markdown/stronglyEmphasisedText.js +163 -0
  58. package/lib/node/markdown/table.js +120 -0
  59. package/lib/node/markdown/tableBody.js +120 -0
  60. package/lib/node/markdown/tableBodyCell.js +130 -0
  61. package/lib/node/markdown/tableBodyRow.js +120 -0
  62. package/lib/node/markdown/tableCell.js +152 -0
  63. package/lib/node/markdown/tableHead.js +120 -0
  64. package/lib/node/markdown/tableHeadCell.js +130 -0
  65. package/lib/node/markdown/tableHeadRow.js +120 -0
  66. package/lib/node/markdown/tableSeparator.js +120 -0
  67. package/lib/node/markdown/tertiaryHeading.js +120 -0
  68. package/lib/node/markdown/text.js +130 -0
  69. package/lib/node/markdown/unorderedList.js +120 -0
  70. package/lib/node/markdown/unorderedListItem.js +120 -0
  71. package/lib/node/markdown/url.js +122 -0
  72. package/lib/node/markdown/verticalSpace.js +132 -0
  73. package/lib/node/markdown.js +246 -0
  74. package/lib/nodeMap.js +78 -0
  75. package/lib/ruleNameToHTMLMap.js +161 -0
  76. package/lib/ruleNames.js +240 -0
  77. package/lib/tokenTypes.js +150 -0
  78. package/lib/utilities/childNodes.js +67 -0
  79. package/lib/utilities/content.js +52 -0
  80. package/lib/utilities/link.js +37 -0
  81. package/lib/utilities/node.js +32 -0
  82. package/lib/utilities/query.js +55 -0
  83. package/license.txt +48 -0
  84. package/package.json +43 -0
  85. package/src/attributeNames.js +6 -0
  86. package/src/constants.js +4 -0
  87. package/src/example/constants.js +4 -0
  88. package/src/example/view/div/previewPane.js +82 -0
  89. package/src/example/view/div/sizeable/left.js +19 -0
  90. package/src/example/view/div/sizeable/right.js +19 -0
  91. package/src/example/view/heading.js +14 -0
  92. package/src/example/view/subHeading.js +16 -0
  93. package/src/example/view/textarea/bnf.js +41 -0
  94. package/src/example/view/textarea/lexicalEntries.js +52 -0
  95. package/src/example/view/textarea/markdown.js +41 -0
  96. package/src/example/view/textarea/parseTree.js +50 -0
  97. package/src/example/view/textarea.js +17 -0
  98. package/src/example/view.js +139 -0
  99. package/src/example.js +21 -0
  100. package/src/index.js +13 -0
  101. package/src/markdown/bnf.js +143 -0
  102. package/src/markdown/entries.js +84 -0
  103. package/src/markdown/lexer.js +36 -0
  104. package/src/markdown/parser.js +36 -0
  105. package/src/mixins/content.js +19 -0
  106. package/src/mixins/element.js +47 -0
  107. package/src/mixins/node.js +27 -0
  108. package/src/node/markdown/anchor.js +37 -0
  109. package/src/node/markdown/blockListing.js +29 -0
  110. package/src/node/markdown/blockListingEnd.js +7 -0
  111. package/src/node/markdown/blockListingStart.js +28 -0
  112. package/src/node/markdown/blockText.js +22 -0
  113. package/src/node/markdown/className.js +21 -0
  114. package/src/node/markdown/document.js +26 -0
  115. package/src/node/markdown/emphasisedText.js +13 -0
  116. package/src/node/markdown/endOfLine.js +24 -0
  117. package/src/node/markdown/error.js +36 -0
  118. package/src/node/markdown/footnote.js +21 -0
  119. package/src/node/markdown/footnoteItem.js +37 -0
  120. package/src/node/markdown/footnotesList.js +64 -0
  121. package/src/node/markdown/hyperlink.js +47 -0
  122. package/src/node/markdown/image.js +47 -0
  123. package/src/node/markdown/inlineListing.js +20 -0
  124. package/src/node/markdown/inlineText.js +22 -0
  125. package/src/node/markdown/line.js +21 -0
  126. package/src/node/markdown/lineBreak.js +7 -0
  127. package/src/node/markdown/link.js +54 -0
  128. package/src/node/markdown/orderedList.js +33 -0
  129. package/src/node/markdown/orderedListItem.js +21 -0
  130. package/src/node/markdown/paragraph.js +7 -0
  131. package/src/node/markdown/primaryHeading.js +7 -0
  132. package/src/node/markdown/quaternaryHeading.js +7 -0
  133. package/src/node/markdown/reference.js +21 -0
  134. package/src/node/markdown/secondaryHeading.js +7 -0
  135. package/src/node/markdown/strongText.js +13 -0
  136. package/src/node/markdown/stronglyEmphasisedText.js +39 -0
  137. package/src/node/markdown/table.js +7 -0
  138. package/src/node/markdown/tableBody.js +7 -0
  139. package/src/node/markdown/tableBodyCell.js +20 -0
  140. package/src/node/markdown/tableBodyRow.js +7 -0
  141. package/src/node/markdown/tableCell.js +42 -0
  142. package/src/node/markdown/tableHead.js +7 -0
  143. package/src/node/markdown/tableHeadCell.js +20 -0
  144. package/src/node/markdown/tableHeadRow.js +7 -0
  145. package/src/node/markdown/tableSeparator.js +7 -0
  146. package/src/node/markdown/tertiaryHeading.js +7 -0
  147. package/src/node/markdown/text.js +20 -0
  148. package/src/node/markdown/unorderedList.js +7 -0
  149. package/src/node/markdown/unorderedListItem.js +7 -0
  150. package/src/node/markdown/url.js +10 -0
  151. package/src/node/markdown/verticalSpace.js +22 -0
  152. package/src/node/markdown.js +100 -0
  153. package/src/nodeMap.js +140 -0
  154. package/src/ruleNameToHTMLMap.js +227 -0
  155. package/src/ruleNames.js +95 -0
  156. package/src/tokenTypes.js +59 -0
  157. package/src/utilities/childNodes.js +70 -0
  158. package/src/utilities/content.js +77 -0
  159. package/src/utilities/link.js +27 -0
  160. package/src/utilities/node.js +23 -0
  161. package/src/utilities/query.js +42 -0
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+
3
+ import { arrayUtilities } from "necessary";
4
+
5
+ import TextMarkdownNode from "../node/markdown/text";
6
+
7
+ import { contentFromMarkdownNodes } from "./content";
8
+
9
+ const { clear } = arrayUtilities;
10
+
11
+ export function domElementsFromChildNodes(childNodes, context) {
12
+ const domElements = [],
13
+ textMarkdownNodes = [];
14
+
15
+ childNodes.forEach((childNode) => {
16
+ const childNodeNonTerminalNode = childNode.isNonTerminalNode();
17
+
18
+ if (childNodeNonTerminalNode) {
19
+ const childNodeTextMarkdownNode = (childNode instanceof TextMarkdownNode);
20
+
21
+ if (childNodeTextMarkdownNode) {
22
+ const textMarkdownNode = childNode; ///
23
+
24
+ textMarkdownNodes.push(textMarkdownNode);
25
+ } else {
26
+ const textDOMElement = textDOMElementFromTextMarkdownNodes(textMarkdownNodes, context)
27
+
28
+ if (textDOMElement !== null) {
29
+ const domElement = textDOMElement; ///
30
+
31
+ domElements.push(domElement);
32
+ }
33
+
34
+ const domElement = childNode.createDOMElement(context);
35
+
36
+ if (domElement !== null) {
37
+ domElements.push(domElement);
38
+ }
39
+ }
40
+ }
41
+ });
42
+
43
+ const textDOMElement = textDOMElementFromTextMarkdownNodes(textMarkdownNodes, context)
44
+
45
+ if (textDOMElement !== null) {
46
+ const domElement = textDOMElement; ///
47
+
48
+ domElements.push(domElement);
49
+ }
50
+
51
+ return domElements;
52
+ }
53
+
54
+ function textDOMElementFromTextMarkdownNodes(textMarkdownNodes, context) {
55
+ let textDOMElement = null;
56
+
57
+ const textMarkdownNodesLength = textMarkdownNodes.length;
58
+
59
+ if (textMarkdownNodesLength > 0) {
60
+ const markdownNodes = textMarkdownNodes, ///
61
+ content = contentFromMarkdownNodes(markdownNodes, context);
62
+
63
+ textDOMElement = document.createTextNode(content);
64
+
65
+ clear(textMarkdownNodes);
66
+ }
67
+
68
+ return textDOMElement;
69
+ }
70
+
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+
3
+ import { arrayUtilities } from "necessary";
4
+
5
+ import { EMPTY_STRING } from "../constants";
6
+ import { ESCAPED_TOKEN_TYPE } from "../tokenTypes";
7
+
8
+ const { first, last } = arrayUtilities;
9
+
10
+ export function contentFromMarkdownNodes(markdownNodes, context) {
11
+ let content = EMPTY_STRING;
12
+
13
+ let { tokens } = context;
14
+
15
+ const markdownNodesLength = markdownNodes.length,
16
+ firstMarkdownNode = first(markdownNodes),
17
+ lastMarkdownNode = (markdownNodesLength === 1) ?
18
+ firstMarkdownNode : ///
19
+ last(markdownNodes),
20
+ firstSignificantToken = firstMarkdownNode.getFirstSignificantToken(),
21
+ lastSignificantToken = lastMarkdownNode.getLastSignificantToken(),
22
+ firstSignificantTokenIndex = tokens.indexOf(firstSignificantToken),
23
+ lastSignificantTokenIndex = tokens.indexOf(lastSignificantToken);
24
+
25
+ let firstTokenIndex = firstSignificantTokenIndex, ///
26
+ lastTokenIndex = lastSignificantTokenIndex; ///
27
+
28
+ const previousTokenIndex = firstTokenIndex - 1,
29
+ nextTokenIndex = lastTokenIndex + 1;
30
+
31
+ if (previousTokenIndex > -1) {
32
+ const previousToken = tokens[previousTokenIndex],
33
+ previousTokenSignificant = previousToken.isSignificant();
34
+
35
+ if (!previousTokenSignificant) {
36
+ firstTokenIndex--;
37
+ }
38
+ }
39
+
40
+ const tokensLength = tokens.length;
41
+
42
+ if (nextTokenIndex < tokensLength) {
43
+ const nextToken = tokens[nextTokenIndex],
44
+ nextTokenSignificant = nextToken.isSignificant();
45
+
46
+ if (!nextTokenSignificant) {
47
+ lastTokenIndex++;
48
+ }
49
+ }
50
+
51
+ const start = firstTokenIndex, ///
52
+ end = lastTokenIndex + 1;
53
+
54
+ tokens = tokens.slice(start, end);
55
+
56
+ tokens.forEach((token) => {
57
+ const tokenContent = tokenContentFromToken(token);
58
+
59
+ content += tokenContent;
60
+ });
61
+
62
+ return content;
63
+ }
64
+
65
+ function tokenContentFromToken(token) {
66
+ let tokenContent = token.getContent();
67
+
68
+ const type = token.getType();
69
+
70
+ if (type === ESCAPED_TOKEN_TYPE) {
71
+ const start = 1;
72
+
73
+ tokenContent = tokenContent.substring(start);
74
+ }
75
+
76
+ return tokenContent;
77
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ import { linkMarkdownNodesFromNode } from "../utilities/query";
4
+
5
+ export function renumberLinkMarkdownNodes(documentMarkdownNode, footnotesListMarkdownNode) {
6
+ let number = 1;
7
+
8
+ const identifiers = footnotesListMarkdownNode.getIdentifiers(),
9
+ linkMarkdownNodes = linkMarkdownNodesFromNode(documentMarkdownNode);
10
+
11
+ linkMarkdownNodes.forEach((linkMarkdownNode) => {
12
+ const identifier = linkMarkdownNode.getIdentifier(),
13
+ identifiersIncludesIdentifier = identifiers.includes(identifier);
14
+
15
+ if (identifiersIncludesIdentifier) {
16
+ linkMarkdownNode.setNumber(number);
17
+
18
+ number++;
19
+ } else {
20
+ linkMarkdownNode.clear();
21
+ }
22
+ });
23
+ }
24
+
25
+ export default {
26
+ renumberLinkMarkdownNodes
27
+ };
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ import { rulesUtilities } from "occam-parsers";
4
+
5
+ const { rulesFromStartRuleAndRuleMap } = rulesUtilities;
6
+
7
+ export function setNonTerminalNodes(parser, nodeMap) {
8
+ const startRule = parser.getStartRule(),
9
+ ruleMap = parser.getRuleMap(),
10
+ rules = rulesFromStartRuleAndRuleMap(startRule, ruleMap);
11
+
12
+ rules.forEach((rule) => {
13
+ const ruleName = rule.getName(),
14
+ MarkdownNode = nodeMap[ruleName],
15
+ NonTerminalNode = MarkdownNode; ///
16
+
17
+ rule.setNonTerminalNode(NonTerminalNode);
18
+ });
19
+ }
20
+
21
+ export default {
22
+ setNonTerminalNodes
23
+ };
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ import { Query } from "occam-query";
4
+ import { arrayUtilities } from "necessary";
5
+
6
+ const { push } = arrayUtilities;
7
+
8
+ const linkMarkdownNodesQuery = Query.fromExpression(`//link`),
9
+ footnoteMarkdownNodesQuery = Query.fromExpression(`//footnote`),
10
+ referenceMarkdownNodesQuery = Query.fromExpression(`//reference`);
11
+
12
+ export function linkMarkdownNodesFromNode(node, linkMarkdownNodes = []) {
13
+ nodesFromNodeAndQuery(node, linkMarkdownNodesQuery, linkMarkdownNodes);
14
+
15
+ return linkMarkdownNodes;
16
+ }
17
+
18
+ export function footnoteMarkdownNodesFromNode(node, footnoteMarkdownNodes = []) {
19
+ nodesFromNodeAndQuery(node, footnoteMarkdownNodesQuery, footnoteMarkdownNodes);
20
+
21
+ return footnoteMarkdownNodes;
22
+ }
23
+
24
+ export function referenceMarkdownNodesFromNode(node, referenceMarkdownNodes = []) {
25
+ nodesFromNodeAndQuery(node, referenceMarkdownNodesQuery, referenceMarkdownNodes);
26
+
27
+ return referenceMarkdownNodes;
28
+ }
29
+
30
+ export default {
31
+ linkMarkdownNodesFromNode,
32
+ footnoteMarkdownNodesFromNode,
33
+ referenceMarkdownNodesFromNode
34
+ };
35
+
36
+ function nodesFromNodeAndQuery(node, query, nodes) {
37
+ const queryNodes = query.execute(node);
38
+
39
+ push(nodes, queryNodes);
40
+
41
+ return nodes;
42
+ }