highmark-markdown 0.0.206 → 0.0.210

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 (80) hide show
  1. package/example.js +9011 -7223
  2. package/lib/constants.js +13 -1
  3. package/lib/defaultMarkdownStyle.js +14 -0
  4. package/lib/elementMap.js +6 -3
  5. package/lib/example/constants.js +5 -1
  6. package/lib/example/view/div/preview.js +5 -3
  7. package/lib/example/view/div/sizeable/left.js +2 -2
  8. package/lib/example/view/textarea/{bnf.js → css.js} +17 -17
  9. package/lib/example/view/textarea/{lexicalEntries.js → markdownStyle.js} +25 -19
  10. package/lib/example/view/xmp.js +2 -2
  11. package/lib/example/view.js +31 -22
  12. package/lib/example.js +9 -2
  13. package/lib/index.js +25 -1
  14. package/lib/markdown/bnf.js +2 -2
  15. package/lib/markdownStyle/bnf.js +14 -0
  16. package/lib/markdownStyle/entries.js +50 -0
  17. package/lib/markdownStyle/lexer.js +162 -0
  18. package/lib/{example/view/div/sizeable/right.js → markdownStyle/parser.js} +46 -34
  19. package/lib/node/markdown/division.js +14 -7
  20. package/lib/node/markdown/footnotes.js +135 -0
  21. package/lib/nodeMap.js +3 -2
  22. package/lib/ruleNames.js +8 -3
  23. package/lib/style/declaration.js +72 -0
  24. package/lib/style/declarations.js +89 -0
  25. package/lib/style/division.js +83 -0
  26. package/lib/style/ruleSet.js +85 -0
  27. package/lib/style/ruleSets.js +89 -0
  28. package/lib/style/selector.js +131 -0
  29. package/lib/style/selectors.js +134 -0
  30. package/lib/style/selectorsList.js +128 -0
  31. package/lib/styleElement/markdown/default.js +163 -0
  32. package/lib/styleElement/markdown.js +195 -0
  33. package/lib/styleElement.js +100 -0
  34. package/lib/utilities/content.js +29 -4
  35. package/lib/utilities/css.js +51 -0
  36. package/lib/utilities/entries.js +24 -0
  37. package/lib/utilities/footnotes.js +3 -3
  38. package/lib/utilities/query.js +39 -4
  39. package/package.json +1 -1
  40. package/src/constants.js +3 -0
  41. package/src/defaultMarkdownStyle.js +143 -0
  42. package/src/elementMap.js +8 -3
  43. package/src/example/constants.js +1 -0
  44. package/src/example/view/div/preview.js +5 -2
  45. package/src/example/view/div/sizeable/left.js +1 -1
  46. package/src/example/view/textarea/{bnf.js → css.js} +10 -10
  47. package/src/example/view/textarea/markdownStyle.js +41 -0
  48. package/src/example/view/xmp.js +0 -3
  49. package/src/example/view.js +55 -50
  50. package/src/example.js +10 -1
  51. package/src/index.js +6 -0
  52. package/src/markdown/bnf.js +5 -0
  53. package/src/markdownStyle/bnf.js +81 -0
  54. package/src/markdownStyle/entries.js +39 -0
  55. package/src/markdownStyle/lexer.js +43 -0
  56. package/src/markdownStyle/parser.js +15 -0
  57. package/src/node/markdown/division.js +25 -9
  58. package/src/node/markdown/footnotes.js +19 -0
  59. package/src/nodeMap.js +5 -2
  60. package/src/ruleNames.js +4 -2
  61. package/src/style/declaration.js +42 -0
  62. package/src/style/declarations.js +64 -0
  63. package/src/style/division.js +46 -0
  64. package/src/style/ruleSet.js +48 -0
  65. package/src/style/ruleSets.js +57 -0
  66. package/src/style/selector.js +126 -0
  67. package/src/style/selectors.js +121 -0
  68. package/src/style/selectorsList.js +95 -0
  69. package/src/styleElement/markdown/default.js +28 -0
  70. package/src/styleElement/markdown.js +48 -0
  71. package/src/styleElement.js +49 -0
  72. package/src/utilities/content.js +27 -0
  73. package/src/utilities/css.js +41 -0
  74. package/src/utilities/entries.js +23 -0
  75. package/src/utilities/footnotes.js +2 -2
  76. package/src/utilities/query.js +40 -3
  77. package/lib/example/view/textarea/parseTree.js +0 -183
  78. package/src/example/view/div/sizeable/right.js +0 -19
  79. package/src/example/view/textarea/lexicalEntries.js +0 -36
  80. package/src/example/view/textarea/parseTree.js +0 -50
@@ -18,12 +18,21 @@ _export(exports, {
18
18
  footnoteMarkdownNodesFromNode: function() {
19
19
  return footnoteMarkdownNodesFromNode;
20
20
  },
21
+ footnotesMarkdownNodesFromNode: function() {
22
+ return footnotesMarkdownNodesFromNode;
23
+ },
21
24
  headingMarkdownNodesFromNode: function() {
22
25
  return headingMarkdownNodesFromNode;
23
26
  },
24
27
  linkMarkdownNodesFromNode: function() {
25
28
  return linkMarkdownNodesFromNode;
26
29
  },
30
+ nodeQuery: function() {
31
+ return nodeQuery;
32
+ },
33
+ nodesQuery: function() {
34
+ return nodesQuery;
35
+ },
27
36
  referenceMarkdownNodesFromNode: function() {
28
37
  return referenceMarkdownNodesFromNode;
29
38
  }
@@ -31,14 +40,34 @@ _export(exports, {
31
40
  var _occamquery = require("occam-query");
32
41
  var _necessary = require("necessary");
33
42
  var first = _necessary.arrayUtilities.first, push = _necessary.arrayUtilities.push;
34
- var linkMarkdownNodesQuery = _occamquery.Query.fromExpression("//link"), contentMarkdownNodeQuery = _occamquery.Query.fromExpression("//contents"), headingMarkdownNodesQuery = _occamquery.Query.fromExpression("//primaryHeading|secondaryHeading|tertiaryHeading|quaternaryHeading"), footnoteMarkdownNodesQuery = _occamquery.Query.fromExpression("//footnote"), referenceMarkdownNodesQuery = _occamquery.Query.fromExpression("//reference");
43
+ var linkMarkdownNodesQuery = _occamquery.Query.fromExpression("//link"), headingMarkdownNodesQuery = _occamquery.Query.fromExpression("//primaryHeading|secondaryHeading|tertiaryHeading|quaternaryHeading"), contentsMarkdownNodeQuery = _occamquery.Query.fromExpression("//contents"), footnoteMarkdownNodesQuery = _occamquery.Query.fromExpression("//footnote"), footnotesMarkdownNodesQuery = _occamquery.Query.fromExpression("//footnotes"), referenceMarkdownNodesQuery = _occamquery.Query.fromExpression("//reference");
44
+ function nodeQuery(expression) {
45
+ var query = _occamquery.Query.fromExpression(expression);
46
+ return function(node) {
47
+ var nodes = query.execute(node), nodesLength = nodes.length;
48
+ if (nodesLength > 0) {
49
+ var firstNode = first(nodes);
50
+ node = firstNode; ///
51
+ } else {
52
+ node = null;
53
+ }
54
+ return node;
55
+ };
56
+ }
57
+ function nodesQuery(expression) {
58
+ var query = _occamquery.Query.fromExpression(expression);
59
+ return function(node) {
60
+ var nodes = query.execute(node);
61
+ return nodes;
62
+ };
63
+ }
35
64
  function linkMarkdownNodesFromNode(node) {
36
65
  var linkMarkdownNodes = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
37
66
  nodesFromNodeAndQuery(node, linkMarkdownNodesQuery, linkMarkdownNodes);
38
67
  return linkMarkdownNodes;
39
68
  }
40
69
  function contentsMarkdownNodeFromNode(node) {
41
- var contentsMarkdownNode = nodeFromNodeAndQuery(node, contentMarkdownNodeQuery);
70
+ var contentsMarkdownNode = nodeFromNodeAndQuery(node, contentsMarkdownNodeQuery);
42
71
  return contentsMarkdownNode;
43
72
  }
44
73
  function headingMarkdownNodesFromNode(node) {
@@ -56,12 +85,18 @@ function referenceMarkdownNodesFromNode(node) {
56
85
  nodesFromNodeAndQuery(node, referenceMarkdownNodesQuery, referenceMarkdownNodes);
57
86
  return referenceMarkdownNodes;
58
87
  }
88
+ function footnotesMarkdownNodesFromNode(node) {
89
+ var footnotesMarkdownNodes = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
90
+ nodesFromNodeAndQuery(node, footnotesMarkdownNodesQuery, footnotesMarkdownNodes);
91
+ return footnotesMarkdownNodes;
92
+ }
59
93
  var _default = {
60
94
  linkMarkdownNodesFromNode: linkMarkdownNodesFromNode,
61
95
  contentsMarkdownNodeFromNode: contentsMarkdownNodeFromNode,
62
96
  headingMarkdownNodesFromNode: headingMarkdownNodesFromNode,
63
97
  footnoteMarkdownNodesFromNode: footnoteMarkdownNodesFromNode,
64
- referenceMarkdownNodesFromNode: referenceMarkdownNodesFromNode
98
+ referenceMarkdownNodesFromNode: referenceMarkdownNodesFromNode,
99
+ footnotesMarkdownNodesFromNode: footnotesMarkdownNodesFromNode
65
100
  };
66
101
  function nodeFromNodeAndQuery(node, query) {
67
102
  var queryNodes = query.execute(node), queryNodesLength = queryNodes.length;
@@ -79,4 +114,4 @@ function nodesFromNodeAndQuery(node, query, nodes) {
79
114
  return nodes;
80
115
  }
81
116
 
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcXVlcnkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLXF1ZXJ5XCI7XG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBmaXJzdCwgcHVzaCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmNvbnN0IGxpbmtNYXJrZG93bk5vZGVzUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihgLy9saW5rYCksXG4gICAgICBjb250ZW50TWFya2Rvd25Ob2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihgLy9jb250ZW50c2ApLFxuICAgICAgaGVhZGluZ01hcmtkb3duTm9kZXNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGAvL3ByaW1hcnlIZWFkaW5nfHNlY29uZGFyeUhlYWRpbmd8dGVydGlhcnlIZWFkaW5nfHF1YXRlcm5hcnlIZWFkaW5nYCksXG4gICAgICBmb290bm90ZU1hcmtkb3duTm9kZXNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGAvL2Zvb3Rub3RlYCksXG4gICAgICByZWZlcmVuY2VNYXJrZG93bk5vZGVzUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihgLy9yZWZlcmVuY2VgKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmtNYXJrZG93bk5vZGVzRnJvbU5vZGUobm9kZSwgbGlua01hcmtkb3duTm9kZXMgPSBbXSkge1xuICBub2Rlc0Zyb21Ob2RlQW5kUXVlcnkobm9kZSwgbGlua01hcmtkb3duTm9kZXNRdWVyeSwgbGlua01hcmtkb3duTm9kZXMpO1xuXG4gIHJldHVybiBsaW5rTWFya2Rvd25Ob2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRlbnRzTWFya2Rvd25Ob2RlRnJvbU5vZGUobm9kZSkge1xuICBjb25zdCBjb250ZW50c01hcmtkb3duTm9kZSA9IG5vZGVGcm9tTm9kZUFuZFF1ZXJ5KG5vZGUsIGNvbnRlbnRNYXJrZG93bk5vZGVRdWVyeSk7XG5cbiAgcmV0dXJuIGNvbnRlbnRzTWFya2Rvd25Ob2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGVhZGluZ01hcmtkb3duTm9kZXNGcm9tTm9kZShub2RlLCBoZWFkaW5nTWFya2Rvd25Ob2RlcyA9IFtdKSB7XG4gIG5vZGVzRnJvbU5vZGVBbmRRdWVyeShub2RlLCBoZWFkaW5nTWFya2Rvd25Ob2Rlc1F1ZXJ5LCBoZWFkaW5nTWFya2Rvd25Ob2Rlcyk7XG5cbiAgcmV0dXJuIGhlYWRpbmdNYXJrZG93bk5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9vdG5vdGVNYXJrZG93bk5vZGVzRnJvbU5vZGUobm9kZSwgZm9vdG5vdGVNYXJrZG93bk5vZGVzID0gW10pIHtcbiAgbm9kZXNGcm9tTm9kZUFuZFF1ZXJ5KG5vZGUsIGZvb3Rub3RlTWFya2Rvd25Ob2Rlc1F1ZXJ5LCBmb290bm90ZU1hcmtkb3duTm9kZXMpO1xuXG4gIHJldHVybiBmb290bm90ZU1hcmtkb3duTm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VNYXJrZG93bk5vZGVzRnJvbU5vZGUobm9kZSwgcmVmZXJlbmNlTWFya2Rvd25Ob2RlcyA9IFtdKSB7XG4gIG5vZGVzRnJvbU5vZGVBbmRRdWVyeShub2RlLCByZWZlcmVuY2VNYXJrZG93bk5vZGVzUXVlcnksIHJlZmVyZW5jZU1hcmtkb3duTm9kZXMpO1xuXG4gIHJldHVybiByZWZlcmVuY2VNYXJrZG93bk5vZGVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGxpbmtNYXJrZG93bk5vZGVzRnJvbU5vZGUsXG4gIGNvbnRlbnRzTWFya2Rvd25Ob2RlRnJvbU5vZGUsXG4gIGhlYWRpbmdNYXJrZG93bk5vZGVzRnJvbU5vZGUsXG4gIGZvb3Rub3RlTWFya2Rvd25Ob2Rlc0Zyb21Ob2RlLFxuICByZWZlcmVuY2VNYXJrZG93bk5vZGVzRnJvbU5vZGVcbn07XG5cbmZ1bmN0aW9uIG5vZGVGcm9tTm9kZUFuZFF1ZXJ5KG5vZGUsIHF1ZXJ5KSB7XG4gIGNvbnN0IHF1ZXJ5Tm9kZXMgPSBxdWVyeS5leGVjdXRlKG5vZGUpLFxuICAgICAgICBxdWVyeU5vZGVzTGVuZ3RoID0gcXVlcnlOb2Rlcy5sZW5ndGg7XG5cbiAgaWYgKHF1ZXJ5Tm9kZXNMZW5ndGggPT09IDApIHtcbiAgICBub2RlID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBmaXJzdFF1ZXJ5Tm9kZSA9IGZpcnN0KHF1ZXJ5Tm9kZXMpO1xuXG4gICAgbm9kZSA9IGZpcnN0UXVlcnlOb2RlOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gbm9kZXNGcm9tTm9kZUFuZFF1ZXJ5KG5vZGUsIHF1ZXJ5LCBub2Rlcykge1xuICBjb25zdCBxdWVyeU5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKTtcblxuICBwdXNoKG5vZGVzLCBxdWVyeU5vZGVzKTtcblxuICByZXR1cm4gbm9kZXM7XG59XG4iXSwibmFtZXMiOlsiY29udGVudHNNYXJrZG93bk5vZGVGcm9tTm9kZSIsImZvb3Rub3RlTWFya2Rvd25Ob2Rlc0Zyb21Ob2RlIiwiaGVhZGluZ01hcmtkb3duTm9kZXNGcm9tTm9kZSIsImxpbmtNYXJrZG93bk5vZGVzRnJvbU5vZGUiLCJyZWZlcmVuY2VNYXJrZG93bk5vZGVzRnJvbU5vZGUiLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwicHVzaCIsImxpbmtNYXJrZG93bk5vZGVzUXVlcnkiLCJRdWVyeSIsImZyb21FeHByZXNzaW9uIiwiY29udGVudE1hcmtkb3duTm9kZVF1ZXJ5IiwiaGVhZGluZ01hcmtkb3duTm9kZXNRdWVyeSIsImZvb3Rub3RlTWFya2Rvd25Ob2Rlc1F1ZXJ5IiwicmVmZXJlbmNlTWFya2Rvd25Ob2Rlc1F1ZXJ5Iiwibm9kZSIsImxpbmtNYXJrZG93bk5vZGVzIiwibm9kZXNGcm9tTm9kZUFuZFF1ZXJ5IiwiY29udGVudHNNYXJrZG93bk5vZGUiLCJub2RlRnJvbU5vZGVBbmRRdWVyeSIsImhlYWRpbmdNYXJrZG93bk5vZGVzIiwiZm9vdG5vdGVNYXJrZG93bk5vZGVzIiwicmVmZXJlbmNlTWFya2Rvd25Ob2RlcyIsInF1ZXJ5IiwicXVlcnlOb2RlcyIsImV4ZWN1dGUiLCJxdWVyeU5vZGVzTGVuZ3RoIiwibGVuZ3RoIiwiZmlyc3RRdWVyeU5vZGUiLCJub2RlcyJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFtQmdCQSw0QkFBNEI7ZUFBNUJBOztJQXdCaEIsT0FNRTtlQU5GOztJQVpnQkMsNkJBQTZCO2VBQTdCQTs7SUFOQUMsNEJBQTRCO2VBQTVCQTs7SUFaQUMseUJBQXlCO2VBQXpCQTs7SUF3QkFDLDhCQUE4QjtlQUE5QkE7OzswQkFuQ007eUJBQ1M7QUFFL0IsSUFBUUMsUUFBZ0JDLHlCQUFjLENBQTlCRCxPQUFPRSxPQUFTRCx5QkFBYyxDQUF2QkM7QUFFZixJQUFNQyx5QkFBeUJDLGlCQUFLLENBQUNDLGNBQWMsQ0FBRSxXQUMvQ0MsMkJBQTJCRixpQkFBSyxDQUFDQyxjQUFjLENBQUUsZUFDakRFLDRCQUE0QkgsaUJBQUssQ0FBQ0MsY0FBYyxDQUFFLHdFQUNsREcsNkJBQTZCSixpQkFBSyxDQUFDQyxjQUFjLENBQUUsZUFDbkRJLDhCQUE4QkwsaUJBQUssQ0FBQ0MsY0FBYyxDQUFFO0FBRW5ELFNBQVNQLDBCQUEwQlksSUFBSTtRQUFFQyxvQkFBQUEsaUVBQW9CLEVBQUU7SUFDcEVDLHNCQUFzQkYsTUFBTVAsd0JBQXdCUTtJQUVwRCxPQUFPQTtBQUNUO0FBRU8sU0FBU2hCLDZCQUE2QmUsSUFBSTtJQUMvQyxJQUFNRyx1QkFBdUJDLHFCQUFxQkosTUFBTUo7SUFFeEQsT0FBT087QUFDVDtBQUVPLFNBQVNoQiw2QkFBNkJhLElBQUk7UUFBRUssdUJBQUFBLGlFQUF1QixFQUFFO0lBQzFFSCxzQkFBc0JGLE1BQU1ILDJCQUEyQlE7SUFFdkQsT0FBT0E7QUFDVDtBQUVPLFNBQVNuQiw4QkFBOEJjLElBQUk7UUFBRU0sd0JBQUFBLGlFQUF3QixFQUFFO0lBQzVFSixzQkFBc0JGLE1BQU1GLDRCQUE0QlE7SUFFeEQsT0FBT0E7QUFDVDtBQUVPLFNBQVNqQiwrQkFBK0JXLElBQUk7UUFBRU8seUJBQUFBLGlFQUF5QixFQUFFO0lBQzlFTCxzQkFBc0JGLE1BQU1ELDZCQUE2QlE7SUFFekQsT0FBT0E7QUFDVDtJQUVBLFdBQWU7SUFDYm5CLDJCQUFBQTtJQUNBSCw4QkFBQUE7SUFDQUUsOEJBQUFBO0lBQ0FELCtCQUFBQTtJQUNBRyxnQ0FBQUE7QUFDRjtBQUVBLFNBQVNlLHFCQUFxQkosSUFBSSxFQUFFUSxLQUFLO0lBQ3ZDLElBQU1DLGFBQWFELE1BQU1FLE9BQU8sQ0FBQ1YsT0FDM0JXLG1CQUFtQkYsV0FBV0csTUFBTTtJQUUxQyxJQUFJRCxxQkFBcUIsR0FBRztRQUMxQlgsT0FBTztJQUNULE9BQU87UUFDTCxJQUFNYSxpQkFBaUJ2QixNQUFNbUI7UUFFN0JULE9BQU9hLGdCQUFpQixHQUFHO0lBQzdCO0lBRUEsT0FBT2I7QUFDVDtBQUVBLFNBQVNFLHNCQUFzQkYsSUFBSSxFQUFFUSxLQUFLLEVBQUVNLEtBQUs7SUFDL0MsSUFBTUwsYUFBYUQsTUFBTUUsT0FBTyxDQUFDVjtJQUVqQ1IsS0FBS3NCLE9BQU9MO0lBRVosT0FBT0s7QUFDVCJ9
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcXVlcnkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLXF1ZXJ5XCI7XG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBmaXJzdCwgcHVzaCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmNvbnN0IGxpbmtNYXJrZG93bk5vZGVzUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihgLy9saW5rYCksXG4gICAgICBoZWFkaW5nTWFya2Rvd25Ob2Rlc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oYC8vcHJpbWFyeUhlYWRpbmd8c2Vjb25kYXJ5SGVhZGluZ3x0ZXJ0aWFyeUhlYWRpbmd8cXVhdGVybmFyeUhlYWRpbmdgKSxcbiAgICAgIGNvbnRlbnRzTWFya2Rvd25Ob2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihgLy9jb250ZW50c2ApLFxuICAgICAgZm9vdG5vdGVNYXJrZG93bk5vZGVzUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihgLy9mb290bm90ZWApLFxuICAgICAgZm9vdG5vdGVzTWFya2Rvd25Ob2Rlc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oYC8vZm9vdG5vdGVzYCksXG4gICAgICByZWZlcmVuY2VNYXJrZG93bk5vZGVzUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihgLy9yZWZlcmVuY2VgKTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVRdWVyeShleHByZXNzaW9uKSB7XG4gIGNvbnN0IHF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oZXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBjb25zdCBub2RlcyA9IHF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICAgIGlmIChub2Rlc0xlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpcnN0Tm9kZSA9IGZpcnN0KG5vZGVzKTtcblxuICAgICAgbm9kZSA9IGZpcnN0Tm9kZTsgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc1F1ZXJ5KGV4cHJlc3Npb24pIHtcbiAgY29uc3QgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihleHByZXNzaW9uKTtcblxuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIGNvbnN0IG5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKTtcblxuICAgIHJldHVybiBub2RlcztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua01hcmtkb3duTm9kZXNGcm9tTm9kZShub2RlLCBsaW5rTWFya2Rvd25Ob2RlcyA9IFtdKSB7XG4gIG5vZGVzRnJvbU5vZGVBbmRRdWVyeShub2RlLCBsaW5rTWFya2Rvd25Ob2Rlc1F1ZXJ5LCBsaW5rTWFya2Rvd25Ob2Rlcyk7XG5cbiAgcmV0dXJuIGxpbmtNYXJrZG93bk5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGVudHNNYXJrZG93bk5vZGVGcm9tTm9kZShub2RlKSB7XG4gIGNvbnN0IGNvbnRlbnRzTWFya2Rvd25Ob2RlID0gbm9kZUZyb21Ob2RlQW5kUXVlcnkobm9kZSwgY29udGVudHNNYXJrZG93bk5vZGVRdWVyeSk7XG5cbiAgcmV0dXJuIGNvbnRlbnRzTWFya2Rvd25Ob2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGVhZGluZ01hcmtkb3duTm9kZXNGcm9tTm9kZShub2RlLCBoZWFkaW5nTWFya2Rvd25Ob2RlcyA9IFtdKSB7XG4gIG5vZGVzRnJvbU5vZGVBbmRRdWVyeShub2RlLCBoZWFkaW5nTWFya2Rvd25Ob2Rlc1F1ZXJ5LCBoZWFkaW5nTWFya2Rvd25Ob2Rlcyk7XG5cbiAgcmV0dXJuIGhlYWRpbmdNYXJrZG93bk5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9vdG5vdGVNYXJrZG93bk5vZGVzRnJvbU5vZGUobm9kZSwgZm9vdG5vdGVNYXJrZG93bk5vZGVzID0gW10pIHtcbiAgbm9kZXNGcm9tTm9kZUFuZFF1ZXJ5KG5vZGUsIGZvb3Rub3RlTWFya2Rvd25Ob2Rlc1F1ZXJ5LCBmb290bm90ZU1hcmtkb3duTm9kZXMpO1xuXG4gIHJldHVybiBmb290bm90ZU1hcmtkb3duTm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VNYXJrZG93bk5vZGVzRnJvbU5vZGUobm9kZSwgcmVmZXJlbmNlTWFya2Rvd25Ob2RlcyA9IFtdKSB7XG4gIG5vZGVzRnJvbU5vZGVBbmRRdWVyeShub2RlLCByZWZlcmVuY2VNYXJrZG93bk5vZGVzUXVlcnksIHJlZmVyZW5jZU1hcmtkb3duTm9kZXMpO1xuXG4gIHJldHVybiByZWZlcmVuY2VNYXJrZG93bk5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9vdG5vdGVzTWFya2Rvd25Ob2Rlc0Zyb21Ob2RlKG5vZGUsIGZvb3Rub3Rlc01hcmtkb3duTm9kZXMgPSBbXSkge1xuICBub2Rlc0Zyb21Ob2RlQW5kUXVlcnkobm9kZSwgZm9vdG5vdGVzTWFya2Rvd25Ob2Rlc1F1ZXJ5LCBmb290bm90ZXNNYXJrZG93bk5vZGVzKTtcblxuICByZXR1cm4gZm9vdG5vdGVzTWFya2Rvd25Ob2Rlcztcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBsaW5rTWFya2Rvd25Ob2Rlc0Zyb21Ob2RlLFxuICBjb250ZW50c01hcmtkb3duTm9kZUZyb21Ob2RlLFxuICBoZWFkaW5nTWFya2Rvd25Ob2Rlc0Zyb21Ob2RlLFxuICBmb290bm90ZU1hcmtkb3duTm9kZXNGcm9tTm9kZSxcbiAgcmVmZXJlbmNlTWFya2Rvd25Ob2Rlc0Zyb21Ob2RlLFxuICBmb290bm90ZXNNYXJrZG93bk5vZGVzRnJvbU5vZGVcbn07XG5cbmZ1bmN0aW9uIG5vZGVGcm9tTm9kZUFuZFF1ZXJ5KG5vZGUsIHF1ZXJ5KSB7XG4gIGNvbnN0IHF1ZXJ5Tm9kZXMgPSBxdWVyeS5leGVjdXRlKG5vZGUpLFxuICAgICAgICBxdWVyeU5vZGVzTGVuZ3RoID0gcXVlcnlOb2Rlcy5sZW5ndGg7XG5cbiAgaWYgKHF1ZXJ5Tm9kZXNMZW5ndGggPT09IDApIHtcbiAgICBub2RlID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBmaXJzdFF1ZXJ5Tm9kZSA9IGZpcnN0KHF1ZXJ5Tm9kZXMpO1xuXG4gICAgbm9kZSA9IGZpcnN0UXVlcnlOb2RlOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gbm9kZXNGcm9tTm9kZUFuZFF1ZXJ5KG5vZGUsIHF1ZXJ5LCBub2Rlcykge1xuICBjb25zdCBxdWVyeU5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKTtcblxuICBwdXNoKG5vZGVzLCBxdWVyeU5vZGVzKTtcblxuICByZXR1cm4gbm9kZXM7XG59XG4iXSwibmFtZXMiOlsiY29udGVudHNNYXJrZG93bk5vZGVGcm9tTm9kZSIsImZvb3Rub3RlTWFya2Rvd25Ob2Rlc0Zyb21Ob2RlIiwiZm9vdG5vdGVzTWFya2Rvd25Ob2Rlc0Zyb21Ob2RlIiwiaGVhZGluZ01hcmtkb3duTm9kZXNGcm9tTm9kZSIsImxpbmtNYXJrZG93bk5vZGVzRnJvbU5vZGUiLCJub2RlUXVlcnkiLCJub2Rlc1F1ZXJ5IiwicmVmZXJlbmNlTWFya2Rvd25Ob2Rlc0Zyb21Ob2RlIiwiZmlyc3QiLCJhcnJheVV0aWxpdGllcyIsInB1c2giLCJsaW5rTWFya2Rvd25Ob2Rlc1F1ZXJ5IiwiUXVlcnkiLCJmcm9tRXhwcmVzc2lvbiIsImhlYWRpbmdNYXJrZG93bk5vZGVzUXVlcnkiLCJjb250ZW50c01hcmtkb3duTm9kZVF1ZXJ5IiwiZm9vdG5vdGVNYXJrZG93bk5vZGVzUXVlcnkiLCJmb290bm90ZXNNYXJrZG93bk5vZGVzUXVlcnkiLCJyZWZlcmVuY2VNYXJrZG93bk5vZGVzUXVlcnkiLCJleHByZXNzaW9uIiwicXVlcnkiLCJub2RlIiwibm9kZXMiLCJleGVjdXRlIiwibm9kZXNMZW5ndGgiLCJsZW5ndGgiLCJmaXJzdE5vZGUiLCJsaW5rTWFya2Rvd25Ob2RlcyIsIm5vZGVzRnJvbU5vZGVBbmRRdWVyeSIsImNvbnRlbnRzTWFya2Rvd25Ob2RlIiwibm9kZUZyb21Ob2RlQW5kUXVlcnkiLCJoZWFkaW5nTWFya2Rvd25Ob2RlcyIsImZvb3Rub3RlTWFya2Rvd25Ob2RlcyIsInJlZmVyZW5jZU1hcmtkb3duTm9kZXMiLCJmb290bm90ZXNNYXJrZG93bk5vZGVzIiwicXVlcnlOb2RlcyIsInF1ZXJ5Tm9kZXNMZW5ndGgiLCJmaXJzdFF1ZXJ5Tm9kZSJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7IiwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQWlEZ0JBLDRCQUE0QjtlQUE1QkE7O0lBOEJoQixPQU9FO2VBUEY7O0lBbEJnQkMsNkJBQTZCO2VBQTdCQTs7SUFZQUMsOEJBQThCO2VBQTlCQTs7SUFsQkFDLDRCQUE0QjtlQUE1QkE7O0lBWkFDLHlCQUF5QjtlQUF6QkE7O0lBN0JBQyxTQUFTO2VBQVRBOztJQW1CQUMsVUFBVTtlQUFWQTs7SUFrQ0FDLDhCQUE4QjtlQUE5QkE7OzswQkFqRU07eUJBQ1M7QUFFL0IsSUFBUUMsUUFBZ0JDLHlCQUFjLENBQTlCRCxPQUFPRSxPQUFTRCx5QkFBYyxDQUF2QkM7QUFFZixJQUFNQyx5QkFBeUJDLGlCQUFLLENBQUNDLGNBQWMsQ0FBRSxXQUMvQ0MsNEJBQTRCRixpQkFBSyxDQUFDQyxjQUFjLENBQUUsd0VBQ2xERSw0QkFBNEJILGlCQUFLLENBQUNDLGNBQWMsQ0FBRSxlQUNsREcsNkJBQTZCSixpQkFBSyxDQUFDQyxjQUFjLENBQUUsZUFDbkRJLDhCQUE4QkwsaUJBQUssQ0FBQ0MsY0FBYyxDQUFFLGdCQUNwREssOEJBQThCTixpQkFBSyxDQUFDQyxjQUFjLENBQUU7QUFFbkQsU0FBU1IsVUFBVWMsVUFBVTtJQUNsQyxJQUFNQyxRQUFRUixpQkFBSyxDQUFDQyxjQUFjLENBQUNNO0lBRW5DLE9BQU8sU0FBU0UsSUFBSTtRQUNsQixJQUFNQyxRQUFRRixNQUFNRyxPQUFPLENBQUNGLE9BQzFCRyxjQUFjRixNQUFNRyxNQUFNO1FBRTVCLElBQUlELGNBQWMsR0FBRztZQUNuQixJQUFNRSxZQUFZbEIsTUFBTWM7WUFFeEJELE9BQU9LLFdBQVcsR0FBRztRQUN2QixPQUFPO1lBQ0xMLE9BQU87UUFDVDtRQUVBLE9BQU9BO0lBQ1Q7QUFDRjtBQUVPLFNBQVNmLFdBQVdhLFVBQVU7SUFDbkMsSUFBTUMsUUFBUVIsaUJBQUssQ0FBQ0MsY0FBYyxDQUFDTTtJQUVuQyxPQUFPLFNBQVNFLElBQUk7UUFDbEIsSUFBTUMsUUFBUUYsTUFBTUcsT0FBTyxDQUFDRjtRQUU1QixPQUFPQztJQUNUO0FBQ0Y7QUFFTyxTQUFTbEIsMEJBQTBCaUIsSUFBSTtRQUFFTSxvQkFBQUEsaUVBQW9CLEVBQUU7SUFDcEVDLHNCQUFzQlAsTUFBTVYsd0JBQXdCZ0I7SUFFcEQsT0FBT0E7QUFDVDtBQUVPLFNBQVMzQiw2QkFBNkJxQixJQUFJO0lBQy9DLElBQU1RLHVCQUF1QkMscUJBQXFCVCxNQUFNTjtJQUV4RCxPQUFPYztBQUNUO0FBRU8sU0FBUzFCLDZCQUE2QmtCLElBQUk7UUFBRVUsdUJBQUFBLGlFQUF1QixFQUFFO0lBQzFFSCxzQkFBc0JQLE1BQU1QLDJCQUEyQmlCO0lBRXZELE9BQU9BO0FBQ1Q7QUFFTyxTQUFTOUIsOEJBQThCb0IsSUFBSTtRQUFFVyx3QkFBQUEsaUVBQXdCLEVBQUU7SUFDNUVKLHNCQUFzQlAsTUFBTUwsNEJBQTRCZ0I7SUFFeEQsT0FBT0E7QUFDVDtBQUVPLFNBQVN6QiwrQkFBK0JjLElBQUk7UUFBRVkseUJBQUFBLGlFQUF5QixFQUFFO0lBQzlFTCxzQkFBc0JQLE1BQU1ILDZCQUE2QmU7SUFFekQsT0FBT0E7QUFDVDtBQUVPLFNBQVMvQiwrQkFBK0JtQixJQUFJO1FBQUVhLHlCQUFBQSxpRUFBeUIsRUFBRTtJQUM5RU4sc0JBQXNCUCxNQUFNSiw2QkFBNkJpQjtJQUV6RCxPQUFPQTtBQUNUO0lBRUEsV0FBZTtJQUNiOUIsMkJBQUFBO0lBQ0FKLDhCQUFBQTtJQUNBRyw4QkFBQUE7SUFDQUYsK0JBQUFBO0lBQ0FNLGdDQUFBQTtJQUNBTCxnQ0FBQUE7QUFDRjtBQUVBLFNBQVM0QixxQkFBcUJULElBQUksRUFBRUQsS0FBSztJQUN2QyxJQUFNZSxhQUFhZixNQUFNRyxPQUFPLENBQUNGLE9BQzNCZSxtQkFBbUJELFdBQVdWLE1BQU07SUFFMUMsSUFBSVcscUJBQXFCLEdBQUc7UUFDMUJmLE9BQU87SUFDVCxPQUFPO1FBQ0wsSUFBTWdCLGlCQUFpQjdCLE1BQU0yQjtRQUU3QmQsT0FBT2dCLGdCQUFpQixHQUFHO0lBQzdCO0lBRUEsT0FBT2hCO0FBQ1Q7QUFFQSxTQUFTTyxzQkFBc0JQLElBQUksRUFBRUQsS0FBSyxFQUFFRSxLQUFLO0lBQy9DLElBQU1hLGFBQWFmLE1BQU1HLE9BQU8sQ0FBQ0Y7SUFFakNYLEtBQUtZLE9BQU9hO0lBRVosT0FBT2I7QUFDVCJ9
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "highmark-markdown",
3
3
  "author": "James Smith",
4
- "version": "0.0.206",
4
+ "version": "0.0.210",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/highmark-markdown",
7
7
  "description": "Highmark's Markdown.",
package/src/constants.js CHANGED
@@ -1,4 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ export const HEAD = "head";
4
+ export const STYLE = "style";
5
+ export const COLOUR = "color"; ///
3
6
  export const HYPHEN = "-";
4
7
  export const EMPTY_STRING = "";
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+
3
+ const defaultMarkdownStyle = `
4
+ colour: black;
5
+ padding: 12pt;
6
+ min-height: 100%;
7
+ font-family: "Computer Modern Serif";
8
+ background-colour: white;
9
+
10
+ primaryHeading {
11
+ font-size: 32pt;
12
+ margin: 12pt 0 12pt 0;
13
+ }
14
+
15
+ secondaryHeading {
16
+ font-size: 24pt;
17
+ margin: 12pt 0 12pt 0;
18
+ }
19
+
20
+ tertiaryHeading {
21
+ font-size: 16pt;
22
+ margin: 12pt 0 12pt 0;
23
+ }
24
+
25
+ table,
26
+ paragraph,
27
+ orderedList,
28
+ unorderedList,
29
+ blockListing,
30
+ quaternaryHeading {
31
+ font-size: 12pt;
32
+ line-height: 15pt;
33
+ margin: 12pt 0 12pt 0;
34
+ }
35
+
36
+ orderedListItem,
37
+ unorderedListItem {
38
+ margin: 6pt 0 6pt 0;z
39
+ margin-left: 12pt;
40
+ }
41
+
42
+ table,
43
+ paragraph,
44
+ orderedList,
45
+ unorderedList,
46
+ orderedListItem,
47
+ unorderedListItem,
48
+ blockListing,
49
+ primaryHeading,
50
+ secondaryHeading,
51
+ tertiaryHeading,
52
+ quaternaryHeading {
53
+ :first-child {
54
+ margin-top: 0;
55
+ }
56
+
57
+ :last-child {
58
+ margin-bottom: 0;
59
+ }
60
+ }
61
+
62
+ primaryHeading,
63
+ secondaryHeading,
64
+ tertiaryHeading,
65
+ quaternaryHeading {
66
+ font-weight: bold;
67
+ }
68
+
69
+ blockListing,
70
+ inlineListing {
71
+ colour: white;
72
+ background-colour: black;
73
+ font-family: "Computer Modern Typewriter";
74
+ }
75
+
76
+ blockListing {
77
+ padding: 6pt;
78
+ overflow-x: scroll;
79
+ }
80
+
81
+ inlineListing {
82
+ display: inline-block;
83
+ padding: 0 3pt 0 3pt;
84
+ font-size: 12pt;
85
+ line-height: 15pt;
86
+ }
87
+
88
+ table {
89
+ border-collapsed: collapse;
90
+ }
91
+
92
+ tableHead {
93
+ border: 1pt solid black;
94
+ }
95
+
96
+ tableBodyCell,
97
+ tableHeadCell {
98
+ padding: 12pt;
99
+ }
100
+
101
+ strongText {
102
+ font-weight: bold;
103
+ }
104
+
105
+ emphasisedText {
106
+ font-style: italic;
107
+ }
108
+
109
+ stronglyEmphasisedText {
110
+ font-style: italic;
111
+ font-weight: bold;
112
+ }
113
+
114
+ footnotesList {
115
+ border-top: 1pt solid black;
116
+ padding-top: 12pt;
117
+ }
118
+
119
+ footnoteItem {
120
+ font-size: 9pt;
121
+ line-height: 12pt;
122
+ margin-left: 12pt;
123
+
124
+ paragraph {
125
+ margin: 0;
126
+ font-size: 9pt;
127
+ line-height: 12pt;
128
+ }
129
+ }
130
+
131
+ link {
132
+ font-size: 9pt;
133
+ line-height: 12pt;
134
+ margin-left: 3pt;
135
+ vertical-align: super;
136
+ }
137
+
138
+ error {
139
+ text-decoration: underline red;
140
+ }
141
+ `;
142
+
143
+ export default defaultMarkdownStyle;
package/src/elementMap.js CHANGED
@@ -11,8 +11,9 @@ import { LINK_RULE_NAME,
11
11
  IMPORT_RULE_NAME,
12
12
  IMPORTS_RULE_NAME,
13
13
  CONTENTS_RULE_NAME,
14
- FOOTNOTE_RULE_NAME,
15
14
  DIVISION_RULE_NAME,
15
+ FOOTNOTE_RULE_NAME,
16
+ FOOTNOTES_RULE_NAME,
16
17
  REFERENCE_RULE_NAME,
17
18
  PARAGRAPH_RULE_NAME,
18
19
  HYPERLINK_RULE_NAME,
@@ -99,12 +100,16 @@ const elementMap = {
99
100
  tagName: null,
100
101
  className: null
101
102
  },
103
+ [DIVISION_RULE_NAME]: {
104
+ tagName: "div",
105
+ className: null
106
+ },
102
107
  [FOOTNOTE_RULE_NAME]: {
103
108
  tagName: null,
104
109
  className: null
105
110
  },
106
- [DIVISION_RULE_NAME]: {
107
- tagName: "div",
111
+ [FOOTNOTES_RULE_NAME]: {
112
+ tagName: null,
108
113
  className: null
109
114
  },
110
115
  [REFERENCE_RULE_NAME]: {
@@ -2,3 +2,4 @@
2
2
 
3
3
  export const EMPTY_STRING = "";
4
4
  export const DOUBLE_SPACE = " ";
5
+ export const PREVIEW_DIV_SELECTORS_STRING = "div.preview";
@@ -15,9 +15,12 @@ class PreviewDiv extends Element {
15
15
  }
16
16
 
17
17
  clear() {
18
- const html = EMPTY_STRING;
18
+ const parentDOMElement = this.getParentDOMElement(),
19
+ innerHTML = EMPTY_STRING; ///
19
20
 
20
- this.html(html);
21
+ Object.assign(parentDOMElement, {
22
+ innerHTML
23
+ });
21
24
  }
22
25
 
23
26
  update(domElement) {
@@ -12,7 +12,7 @@ class LeftSizeableDiv extends SizeableDiv {
12
12
 
13
13
  export default withStyle(LeftSizeableDiv)`
14
14
 
15
- width: 96rem;
15
+ width: 48rem;
16
16
  min-width: 12rem;
17
17
  flex-direction: column;
18
18
 
@@ -4,30 +4,30 @@ import withStyle from "easy-with-style"; ///
4
4
 
5
5
  import Textarea from "../textarea";
6
6
 
7
- class BNFTextarea extends Textarea {
8
- setBNF(bnf) {
9
- const value = bnf;
7
+ class CSSTreeTextarea extends Textarea {
8
+ setCSS(css) {
9
+ const value = css; ///
10
10
 
11
11
  this.setValue(value);
12
12
  }
13
13
 
14
14
  parentContext() {
15
- const setBNF = this.setBNF.bind(this);
15
+ const setCSS = this.setCSS.bind(this);
16
16
 
17
17
  return ({
18
- setBNF
18
+ setCSS
19
19
  });
20
20
  }
21
21
 
22
22
  static defaultProperties = {
23
23
  readOnly: true,
24
- className: "bnf",
24
+ className: "css",
25
25
  spellCheck: "false"
26
26
  };
27
27
  }
28
28
 
29
- export default withStyle(BNFTextarea)`
29
+ export default withStyle(CSSTreeTextarea)`
30
30
 
31
- height: 16rem;
32
-
33
- `;
31
+ height: 24rem;
32
+
33
+ `;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ import withStyle from "easy-with-style";
4
+
5
+ import Textarea from "../textarea";
6
+
7
+ class MarkdownStyleTextarea extends Textarea {
8
+ getMarkdownStyle() {
9
+ const value = this.getValue(),
10
+ markdownStyle = value; ///
11
+
12
+ return markdownStyle;
13
+ }
14
+
15
+ setMarkdownStyle(markdownStyle) {
16
+ const value = markdownStyle; ///
17
+
18
+ this.setValue(value);
19
+ }
20
+
21
+ parentContext() {
22
+ const getMarkdownStyle = this.getMarkdownStyle.bind(this),
23
+ setMarkdownStyle = this.setMarkdownStyle.bind(this);
24
+
25
+ return ({
26
+ getMarkdownStyle,
27
+ setMarkdownStyle
28
+ });
29
+ }
30
+
31
+ static defaultProperties = {
32
+ className: "markdown-style",
33
+ spellCheck: "false"
34
+ };
35
+ }
36
+
37
+ export default withStyle(MarkdownStyleTextarea)`
38
+
39
+ height: 24rem;
40
+
41
+ `;
@@ -28,12 +28,9 @@ class XMP extends Element {
28
28
 
29
29
  export default withStyle(XMP)`
30
30
 
31
- width: 100%;
32
- height: 100%;
33
31
  border: 1px solid darkgrey;
34
32
  padding: 0.25rem;
35
33
  overflow: scroll;
36
- position: absolute;
37
34
  font-size: 1.2rem;
38
35
  line-height: 1.5rem;
39
36
  font-family: monospace;
@@ -3,22 +3,16 @@
3
3
  import withStyle from "easy-with-style"; ///
4
4
 
5
5
  import { Element } from "easy";
6
- import { RowDiv, RowsDiv, ColumnDiv, ColumnsDiv, VerticalSplitterDiv, HorizontalSplitterDiv } from "easy-layout";
6
+ import { MarkdownLexer, MarkdownParser } from "../index";
7
+ import { RowsDiv, ColumnDiv, ColumnsDiv, VerticalSplitterDiv } from "easy-layout";
7
8
 
8
9
  import XMP from "./view/xmp";
9
10
  import PreviewDiv from "./view/div/preview";
10
11
  import SubHeading from "./view/subHeading";
11
- import BNFTextarea from "./view/textarea/bnf";
12
+ import CSSTextarea from "./view/textarea/css";
12
13
  import LeftSizeableDiv from "./view/div/sizeable/left";
13
- import RightSizeableDiv from "./view/div/sizeable/right";
14
14
  import MarkdownTextarea from "./view/textarea/markdown";
15
- import ParseTreeTextarea from "./view/textarea/parseTree";
16
- import LexicalEntriesTextarea from "./view/textarea/lexicalEntries";
17
-
18
- import { MarkdownLexer, MarkdownParser } from "../index";
19
-
20
- const { bnf } = MarkdownParser,
21
- { entries } = MarkdownLexer;
15
+ import MarkdownStyleTextarea from "./view/textarea/markdownStyle";
22
16
 
23
17
  const markdownLexer = MarkdownLexer.fromNothing(),
24
18
  markdownParser = MarkdownParser.fromNothing();
@@ -28,16 +22,22 @@ class View extends Element {
28
22
  this.update();
29
23
  }
30
24
 
31
- update() {
25
+ updateMarkdownStyle() {
26
+ const { markdownStyleElement } = this.properties,
27
+ markdownStyle = this.getMarkdownStyle(),
28
+ css = markdownStyleElement.update(markdownStyle);
29
+
30
+ this.setCSS(css);
31
+ }
32
+
33
+ updateMarkdown() {
32
34
  const markdown = this.getMarkdown(),
33
- lexer = markdownLexer, ///
34
- parser = markdownParser, ///
35
35
  content = markdown, ///
36
+ lexer = markdownLexer,
37
+ parser = markdownParser,
36
38
  tokens = lexer.tokenise(content),
37
39
  node = parser.parse(tokens);
38
40
 
39
- let parseTree = null;
40
-
41
41
  if (node !== null) {
42
42
  const divisionMarkdownNode = node, ///
43
43
  parentNode = null,
@@ -58,15 +58,16 @@ class View extends Element {
58
58
  this.xmpHTML(html);
59
59
 
60
60
  this.updatePreviewDiv(domElement);
61
-
62
- parseTree = node.asParseTree(tokens);
63
61
  } else {
64
62
  this.clearXMP();
65
63
 
66
64
  this.clearPreviewDiv();
67
65
  }
66
+ }
68
67
 
69
- this.setParseTree(parseTree);
68
+ update() {
69
+ this.updateMarkdown();
70
+ this.updateMarkdownStyle();
70
71
  }
71
72
 
72
73
  childElements() {
@@ -75,37 +76,29 @@ class View extends Element {
75
76
  <ColumnsDiv>
76
77
  <LeftSizeableDiv>
77
78
  <SubHeading>
78
- Lexical entries
79
- </SubHeading>
80
- <LexicalEntriesTextarea onKeyUp={this.keyUpHandler} />
81
- <SubHeading>
82
- BNF
79
+ Markdown
83
80
  </SubHeading>
84
- <BNFTextarea onKeyUp={this.keyUpHandler} />
81
+ <MarkdownTextarea onKeyUp={this.keyUpHandler} />
85
82
  <SubHeading>
86
- Parse tree
83
+ Markdown style
87
84
  </SubHeading>
88
- <ParseTreeTextarea/>
85
+ <MarkdownStyleTextarea onKeyUp={this.keyUpHandler} />
89
86
  </LeftSizeableDiv>
90
87
  <VerticalSplitterDiv/>
91
88
  <ColumnDiv>
92
89
  <RowsDiv>
93
- <RightSizeableDiv>
94
- <XMP/>
95
- </RightSizeableDiv>
96
- <HorizontalSplitterDiv/>
97
- <RowDiv>
98
- <RowsDiv>
99
- <SubHeading>
100
- Preview
101
- </SubHeading>
102
- <PreviewDiv/>
103
- <SubHeading>
104
- Markdown
105
- </SubHeading>
106
- <MarkdownTextarea onKeyUp={this.keyUpHandler} />
107
- </RowsDiv>
108
- </RowDiv>
90
+ <SubHeading>
91
+ HTML
92
+ </SubHeading>
93
+ <XMP/>
94
+ <SubHeading>
95
+ CSS
96
+ </SubHeading>
97
+ <CSSTextarea/>
98
+ <SubHeading>
99
+ Preview
100
+ </SubHeading>
101
+ <PreviewDiv/>
109
102
  </RowsDiv>
110
103
  </ColumnDiv>
111
104
  </ColumnsDiv>
@@ -116,25 +109,37 @@ class View extends Element {
116
109
  initialise() {
117
110
  this.assignContext();
118
111
 
119
- const { initialMarkdown } = this.constructor,
120
- markdown = initialMarkdown, ///
121
- lexicalEntries = entries; ///
122
-
123
- this.setBNF(bnf);
112
+ const { initialMarkdown, initialMarkdownStyle } = this.constructor,
113
+ markdownStyle = initialMarkdownStyle, ///
114
+ markdown = initialMarkdown; ///
124
115
 
125
116
  this.setMarkdown(markdown);
126
117
 
127
- this.setLexicalEntries(lexicalEntries);
118
+ this.setMarkdownStyle(markdownStyle);
128
119
 
129
120
  this.update();
130
121
  }
131
122
 
132
- static initialMarkdown = `1. First item.
133
- 3. Third item.
123
+ static initialMarkdownStyle = `
124
+ min-height: initial;
125
+
126
+ paragraph {
127
+ colour: red;
128
+ }
129
+
130
+ `;
131
+
132
+ static initialMarkdown = `Occam [^occam]
133
+
134
+ [^occam]: Footnote
134
135
  `;
135
136
 
136
137
  static tagName = "div";
137
138
 
139
+ static ignoredProperties = [
140
+ "markdownStyleElement"
141
+ ];
142
+
138
143
  static defaultProperties = {
139
144
  className: "view"
140
145
  };
package/src/example.js CHANGED
@@ -5,17 +5,26 @@ import "juxtapose";
5
5
  import withStyle from "easy-with-style"; ///
6
6
 
7
7
  import { Body } from "easy";
8
+ import { MarkdownStyleElement, DefaultMarkdownStyleElement } from "./index"; ///
8
9
 
9
10
  import View from "./example/view";
10
11
 
12
+ import { PREVIEW_DIV_SELECTORS_STRING } from "./example/constants";
13
+
11
14
  const { renderStyles } = withStyle;
12
15
 
16
+ const selectorSString = PREVIEW_DIV_SELECTORS_STRING;
17
+
18
+ DefaultMarkdownStyleElement.fromSelectorsString(selectorSString);
19
+
20
+ const markdownStyleElement = MarkdownStyleElement.fromSelectorsString(selectorSString);
21
+
13
22
  renderStyles();
14
23
 
15
24
  const body = new Body();
16
25
 
17
26
  body.mount(
18
27
 
19
- <View/>
28
+ <View markdownStyleElement={markdownStyleElement} />
20
29
 
21
30
  );
package/src/index.js CHANGED
@@ -4,7 +4,13 @@ export { default as nodeMap } from "./nodeMap";
4
4
  export { default as ruleNames } from "./ruleNames";
5
5
  export { default as tokenTypes } from "./tokenTypes";
6
6
  export { default as elementMap } from "./elementMap";
7
+ export { default as cssUtilities } from "./utilities/css";
7
8
  export { default as MarkdownNode } from "./node/markdown";
8
9
  export { default as MarkdownLexer } from "./markdown/lexer";
9
10
  export { default as MarkdownParser } from "./markdown/parser";
10
11
  export { default as queryUtilities } from "./utilities/query";
12
+ export { default as MarkdownStyleLexer } from "./markdownStyle/lexer";
13
+ export { default as MarkdownStyleParser } from "./markdownStyle/parser";
14
+ export { default as MarkdownStyleElement } from "./styleElement/markdown";
15
+ export { default as defaultMarkdownStyle } from "./defaultMarkdownStyle";
16
+ export { default as DefaultMarkdownStyleElement } from "./styleElement/markdown/default";
@@ -9,6 +9,8 @@ const bnf = `
9
9
 
10
10
  | contents
11
11
 
12
+ | footnotes
13
+
12
14
  | primaryHeading
13
15
 
14
16
  | secondaryHeading
@@ -86,6 +88,9 @@ const bnf = `
86
88
  contents ::= "@"<NO_WHITESPACE>"contents" [number]? endOfLine ;
87
89
 
88
90
 
91
+ footnotes ::= "@"<NO_WHITESPACE>"footnotes" endOfLine ;
92
+
93
+
89
94
  tableHead ::= tableHeadRow ;
90
95
 
91
96