highmark-markdown 0.0.206 → 0.0.209
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.
- package/example.js +9414 -7797
- package/lib/constants.js +13 -1
- package/lib/defaultMarkdownStyle.js +14 -0
- package/lib/example/constants.js +5 -1
- package/lib/example/view/div/preview.js +5 -3
- package/lib/example/view/div/sizeable/left.js +2 -2
- package/lib/example/view/textarea/{bnf.js → css.js} +17 -17
- package/lib/example/view/textarea/{lexicalEntries.js → markdownStyle.js} +25 -19
- package/lib/example/view/xmp.js +2 -2
- package/lib/example/view.js +30 -21
- package/lib/example.js +9 -2
- package/lib/index.js +25 -1
- package/lib/markdownStyle/bnf.js +14 -0
- package/lib/markdownStyle/entries.js +50 -0
- package/lib/markdownStyle/lexer.js +162 -0
- package/lib/{example/view/div/sizeable/right.js → markdownStyle/parser.js} +46 -34
- package/lib/style/declaration.js +72 -0
- package/lib/style/declarations.js +89 -0
- package/lib/style/division.js +83 -0
- package/lib/style/ruleSet.js +85 -0
- package/lib/style/ruleSets.js +89 -0
- package/lib/style/selector.js +131 -0
- package/lib/style/selectors.js +134 -0
- package/lib/style/selectorsList.js +128 -0
- package/lib/styleElement/markdown/default.js +163 -0
- package/lib/styleElement/markdown.js +195 -0
- package/lib/styleElement.js +100 -0
- package/lib/utilities/content.js +29 -4
- package/lib/utilities/css.js +51 -0
- package/lib/utilities/entries.js +24 -0
- package/lib/utilities/query.js +27 -1
- package/package.json +1 -1
- package/src/constants.js +3 -0
- package/src/defaultMarkdownStyle.js +143 -0
- package/src/example/constants.js +1 -0
- package/src/example/view/div/preview.js +5 -2
- package/src/example/view/div/sizeable/left.js +1 -1
- package/src/example/view/textarea/{bnf.js → css.js} +10 -10
- package/src/example/view/textarea/markdownStyle.js +41 -0
- package/src/example/view/xmp.js +0 -3
- package/src/example/view.js +52 -48
- package/src/example.js +10 -1
- package/src/index.js +6 -0
- package/src/markdownStyle/bnf.js +81 -0
- package/src/markdownStyle/entries.js +39 -0
- package/src/markdownStyle/lexer.js +43 -0
- package/src/markdownStyle/parser.js +15 -0
- package/src/style/declaration.js +42 -0
- package/src/style/declarations.js +64 -0
- package/src/style/division.js +46 -0
- package/src/style/ruleSet.js +48 -0
- package/src/style/ruleSets.js +57 -0
- package/src/style/selector.js +126 -0
- package/src/style/selectors.js +121 -0
- package/src/style/selectorsList.js +95 -0
- package/src/styleElement/markdown/default.js +28 -0
- package/src/styleElement/markdown.js +48 -0
- package/src/styleElement.js +49 -0
- package/src/utilities/content.js +27 -0
- package/src/utilities/css.js +41 -0
- package/src/utilities/entries.js +23 -0
- package/src/utilities/query.js +29 -0
- package/lib/example/view/textarea/parseTree.js +0 -183
- package/src/example/view/div/sizeable/right.js +0 -19
- package/src/example/view/textarea/lexicalEntries.js +0 -36
- package/src/example/view/textarea/parseTree.js +0 -50
package/lib/utilities/query.js
CHANGED
|
@@ -24,6 +24,12 @@ _export(exports, {
|
|
|
24
24
|
linkMarkdownNodesFromNode: function() {
|
|
25
25
|
return linkMarkdownNodesFromNode;
|
|
26
26
|
},
|
|
27
|
+
nodeQuery: function() {
|
|
28
|
+
return nodeQuery;
|
|
29
|
+
},
|
|
30
|
+
nodesQuery: function() {
|
|
31
|
+
return nodesQuery;
|
|
32
|
+
},
|
|
27
33
|
referenceMarkdownNodesFromNode: function() {
|
|
28
34
|
return referenceMarkdownNodesFromNode;
|
|
29
35
|
}
|
|
@@ -32,6 +38,26 @@ var _occamquery = require("occam-query");
|
|
|
32
38
|
var _necessary = require("necessary");
|
|
33
39
|
var first = _necessary.arrayUtilities.first, push = _necessary.arrayUtilities.push;
|
|
34
40
|
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");
|
|
41
|
+
function nodeQuery(expression) {
|
|
42
|
+
var query = _occamquery.Query.fromExpression(expression);
|
|
43
|
+
return function(node) {
|
|
44
|
+
var nodes = query.execute(node), nodesLength = nodes.length;
|
|
45
|
+
if (nodesLength > 0) {
|
|
46
|
+
var firstNode = first(nodes);
|
|
47
|
+
node = firstNode; ///
|
|
48
|
+
} else {
|
|
49
|
+
node = null;
|
|
50
|
+
}
|
|
51
|
+
return node;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function nodesQuery(expression) {
|
|
55
|
+
var query = _occamquery.Query.fromExpression(expression);
|
|
56
|
+
return function(node) {
|
|
57
|
+
var nodes = query.execute(node);
|
|
58
|
+
return nodes;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
35
61
|
function linkMarkdownNodesFromNode(node) {
|
|
36
62
|
var linkMarkdownNodes = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
|
|
37
63
|
nodesFromNodeAndQuery(node, linkMarkdownNodesQuery, linkMarkdownNodes);
|
|
@@ -79,4 +105,4 @@ function nodesFromNodeAndQuery(node, query, nodes) {
|
|
|
79
105
|
return nodes;
|
|
80
106
|
}
|
|
81
107
|
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcXVlcnkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLXF1ZXJ5XCI7XG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBmaXJzdCwgcHVzaCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmNvbnN0IGxpbmtNYXJrZG93bk5vZGVzUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihgLy9saW5rYCksXG4gICAgICBjb250ZW50TWFya2Rvd25Ob2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihgLy9jb250ZW50c2ApLFxuICAgICAgaGVhZGluZ01hcmtkb3duTm9kZXNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGAvL3ByaW1hcnlIZWFkaW5nfHNlY29uZGFyeUhlYWRpbmd8dGVydGlhcnlIZWFkaW5nfHF1YXRlcm5hcnlIZWFkaW5nYCksXG4gICAgICBmb290bm90ZU1hcmtkb3duTm9kZXNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGAvL2Zvb3Rub3RlYCksXG4gICAgICByZWZlcmVuY2VNYXJrZG93bk5vZGVzUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihgLy9yZWZlcmVuY2VgKTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVRdWVyeShleHByZXNzaW9uKSB7XG4gIGNvbnN0IHF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oZXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBjb25zdCBub2RlcyA9IHF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICAgIGlmIChub2Rlc0xlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpcnN0Tm9kZSA9IGZpcnN0KG5vZGVzKTtcblxuICAgICAgbm9kZSA9IGZpcnN0Tm9kZTsgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc1F1ZXJ5KGV4cHJlc3Npb24pIHtcbiAgY29uc3QgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihleHByZXNzaW9uKTtcblxuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIGNvbnN0IG5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKTtcblxuICAgIHJldHVybiBub2RlcztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua01hcmtkb3duTm9kZXNGcm9tTm9kZShub2RlLCBsaW5rTWFya2Rvd25Ob2RlcyA9IFtdKSB7XG4gIG5vZGVzRnJvbU5vZGVBbmRRdWVyeShub2RlLCBsaW5rTWFya2Rvd25Ob2Rlc1F1ZXJ5LCBsaW5rTWFya2Rvd25Ob2Rlcyk7XG5cbiAgcmV0dXJuIGxpbmtNYXJrZG93bk5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGVudHNNYXJrZG93bk5vZGVGcm9tTm9kZShub2RlKSB7XG4gIGNvbnN0IGNvbnRlbnRzTWFya2Rvd25Ob2RlID0gbm9kZUZyb21Ob2RlQW5kUXVlcnkobm9kZSwgY29udGVudE1hcmtkb3duTm9kZVF1ZXJ5KTtcblxuICByZXR1cm4gY29udGVudHNNYXJrZG93bk5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoZWFkaW5nTWFya2Rvd25Ob2Rlc0Zyb21Ob2RlKG5vZGUsIGhlYWRpbmdNYXJrZG93bk5vZGVzID0gW10pIHtcbiAgbm9kZXNGcm9tTm9kZUFuZFF1ZXJ5KG5vZGUsIGhlYWRpbmdNYXJrZG93bk5vZGVzUXVlcnksIGhlYWRpbmdNYXJrZG93bk5vZGVzKTtcblxuICByZXR1cm4gaGVhZGluZ01hcmtkb3duTm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb290bm90ZU1hcmtkb3duTm9kZXNGcm9tTm9kZShub2RlLCBmb290bm90ZU1hcmtkb3duTm9kZXMgPSBbXSkge1xuICBub2Rlc0Zyb21Ob2RlQW5kUXVlcnkobm9kZSwgZm9vdG5vdGVNYXJrZG93bk5vZGVzUXVlcnksIGZvb3Rub3RlTWFya2Rvd25Ob2Rlcyk7XG5cbiAgcmV0dXJuIGZvb3Rub3RlTWFya2Rvd25Ob2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZU1hcmtkb3duTm9kZXNGcm9tTm9kZShub2RlLCByZWZlcmVuY2VNYXJrZG93bk5vZGVzID0gW10pIHtcbiAgbm9kZXNGcm9tTm9kZUFuZFF1ZXJ5KG5vZGUsIHJlZmVyZW5jZU1hcmtkb3duTm9kZXNRdWVyeSwgcmVmZXJlbmNlTWFya2Rvd25Ob2Rlcyk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZU1hcmtkb3duTm9kZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbGlua01hcmtkb3duTm9kZXNGcm9tTm9kZSxcbiAgY29udGVudHNNYXJrZG93bk5vZGVGcm9tTm9kZSxcbiAgaGVhZGluZ01hcmtkb3duTm9kZXNGcm9tTm9kZSxcbiAgZm9vdG5vdGVNYXJrZG93bk5vZGVzRnJvbU5vZGUsXG4gIHJlZmVyZW5jZU1hcmtkb3duTm9kZXNGcm9tTm9kZVxufTtcblxuZnVuY3Rpb24gbm9kZUZyb21Ob2RlQW5kUXVlcnkobm9kZSwgcXVlcnkpIHtcbiAgY29uc3QgcXVlcnlOb2RlcyA9IHF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgIHF1ZXJ5Tm9kZXNMZW5ndGggPSBxdWVyeU5vZGVzLmxlbmd0aDtcblxuICBpZiAocXVlcnlOb2Rlc0xlbmd0aCA9PT0gMCkge1xuICAgIG5vZGUgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGZpcnN0UXVlcnlOb2RlID0gZmlyc3QocXVlcnlOb2Rlcyk7XG5cbiAgICBub2RlID0gZmlyc3RRdWVyeU5vZGU7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBub2Rlc0Zyb21Ob2RlQW5kUXVlcnkobm9kZSwgcXVlcnksIG5vZGVzKSB7XG4gIGNvbnN0IHF1ZXJ5Tm9kZXMgPSBxdWVyeS5leGVjdXRlKG5vZGUpO1xuXG4gIHB1c2gobm9kZXMsIHF1ZXJ5Tm9kZXMpO1xuXG4gIHJldHVybiBub2Rlcztcbn1cbiJdLCJuYW1lcyI6WyJjb250ZW50c01hcmtkb3duTm9kZUZyb21Ob2RlIiwiZm9vdG5vdGVNYXJrZG93bk5vZGVzRnJvbU5vZGUiLCJoZWFkaW5nTWFya2Rvd25Ob2Rlc0Zyb21Ob2RlIiwibGlua01hcmtkb3duTm9kZXNGcm9tTm9kZSIsIm5vZGVRdWVyeSIsIm5vZGVzUXVlcnkiLCJyZWZlcmVuY2VNYXJrZG93bk5vZGVzRnJvbU5vZGUiLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwicHVzaCIsImxpbmtNYXJrZG93bk5vZGVzUXVlcnkiLCJRdWVyeSIsImZyb21FeHByZXNzaW9uIiwiY29udGVudE1hcmtkb3duTm9kZVF1ZXJ5IiwiaGVhZGluZ01hcmtkb3duTm9kZXNRdWVyeSIsImZvb3Rub3RlTWFya2Rvd25Ob2Rlc1F1ZXJ5IiwicmVmZXJlbmNlTWFya2Rvd25Ob2Rlc1F1ZXJ5IiwiZXhwcmVzc2lvbiIsInF1ZXJ5Iiwibm9kZSIsIm5vZGVzIiwiZXhlY3V0ZSIsIm5vZGVzTGVuZ3RoIiwibGVuZ3RoIiwiZmlyc3ROb2RlIiwibGlua01hcmtkb3duTm9kZXMiLCJub2Rlc0Zyb21Ob2RlQW5kUXVlcnkiLCJjb250ZW50c01hcmtkb3duTm9kZSIsIm5vZGVGcm9tTm9kZUFuZFF1ZXJ5IiwiaGVhZGluZ01hcmtkb3duTm9kZXMiLCJmb290bm90ZU1hcmtkb3duTm9kZXMiLCJyZWZlcmVuY2VNYXJrZG93bk5vZGVzIiwicXVlcnlOb2RlcyIsInF1ZXJ5Tm9kZXNMZW5ndGgiLCJmaXJzdFF1ZXJ5Tm9kZSJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
package/package.json
CHANGED
package/src/constants.js
CHANGED
|
@@ -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/example/constants.js
CHANGED
|
@@ -15,9 +15,12 @@ class PreviewDiv extends Element {
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
clear() {
|
|
18
|
-
const
|
|
18
|
+
const parentDOMElement = this.getParentDOMElement(),
|
|
19
|
+
innerHTML = EMPTY_STRING; ///
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
Object.assign(parentDOMElement, {
|
|
22
|
+
innerHTML
|
|
23
|
+
});
|
|
21
24
|
}
|
|
22
25
|
|
|
23
26
|
update(domElement) {
|
|
@@ -4,30 +4,30 @@ import withStyle from "easy-with-style"; ///
|
|
|
4
4
|
|
|
5
5
|
import Textarea from "../textarea";
|
|
6
6
|
|
|
7
|
-
class
|
|
8
|
-
|
|
9
|
-
const value =
|
|
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
|
|
15
|
+
const setCSS = this.setCSS.bind(this);
|
|
16
16
|
|
|
17
17
|
return ({
|
|
18
|
-
|
|
18
|
+
setCSS
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
static defaultProperties = {
|
|
23
23
|
readOnly: true,
|
|
24
|
-
className: "
|
|
24
|
+
className: "css",
|
|
25
25
|
spellCheck: "false"
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
export default withStyle(
|
|
29
|
+
export default withStyle(CSSTreeTextarea)`
|
|
30
30
|
|
|
31
|
-
height:
|
|
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
|
+
`;
|
package/src/example/view/xmp.js
CHANGED
|
@@ -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;
|
package/src/example/view.js
CHANGED
|
@@ -3,22 +3,16 @@
|
|
|
3
3
|
import withStyle from "easy-with-style"; ///
|
|
4
4
|
|
|
5
5
|
import { Element } from "easy";
|
|
6
|
-
import {
|
|
6
|
+
import { MarkdownLexer, MarkdownParser } from "../index";
|
|
7
|
+
import { RowDiv, 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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
79
|
-
</SubHeading>
|
|
80
|
-
<LexicalEntriesTextarea onKeyUp={this.keyUpHandler} />
|
|
81
|
-
<SubHeading>
|
|
82
|
-
BNF
|
|
79
|
+
Markdown
|
|
83
80
|
</SubHeading>
|
|
84
|
-
<
|
|
81
|
+
<MarkdownTextarea onKeyUp={this.keyUpHandler} />
|
|
85
82
|
<SubHeading>
|
|
86
|
-
|
|
83
|
+
Markdown style
|
|
87
84
|
</SubHeading>
|
|
88
|
-
<
|
|
85
|
+
<MarkdownStyleTextarea onKeyUp={this.keyUpHandler} />
|
|
89
86
|
</LeftSizeableDiv>
|
|
90
87
|
<VerticalSplitterDiv/>
|
|
91
88
|
<ColumnDiv>
|
|
92
89
|
<RowsDiv>
|
|
93
|
-
<
|
|
94
|
-
|
|
95
|
-
</
|
|
96
|
-
<
|
|
97
|
-
<
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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,36 @@ class View extends Element {
|
|
|
116
109
|
initialise() {
|
|
117
110
|
this.assignContext();
|
|
118
111
|
|
|
119
|
-
const { initialMarkdown } = this.constructor,
|
|
120
|
-
|
|
121
|
-
|
|
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.
|
|
118
|
+
this.setMarkdownStyle(markdownStyle);
|
|
128
119
|
|
|
129
120
|
this.update();
|
|
130
121
|
}
|
|
131
122
|
|
|
123
|
+
static initialMarkdownStyle = `
|
|
124
|
+
min-height: initial;
|
|
125
|
+
|
|
126
|
+
paragraph {
|
|
127
|
+
colour: red;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
`;
|
|
131
|
+
|
|
132
132
|
static initialMarkdown = `1. First item.
|
|
133
133
|
3. Third item.
|
|
134
134
|
`;
|
|
135
135
|
|
|
136
136
|
static tagName = "div";
|
|
137
137
|
|
|
138
|
+
static ignoredProperties = [
|
|
139
|
+
"markdownStyleElement"
|
|
140
|
+
];
|
|
141
|
+
|
|
138
142
|
static defaultProperties = {
|
|
139
143
|
className: "view"
|
|
140
144
|
};
|
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";
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const bnf = `
|
|
4
|
+
|
|
5
|
+
style ::= ( ruleSet | declaration | nonsense | error )+ ;
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
ruleSet.. ::= selectorsList "{" ( ruleSet | declaration | nonsense )* "}" ;
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
declaration ::= name ":" values ";" ;
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
nonsense. ::= [string-literal] | [escaped] | [rule-name] | [number] | [colour] | [unit] | [name] | [special] | [unassigned] ;
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
error. ::= . ;
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
selectorsList ::= selectors ( "," selectors )* ;
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
selectors ::= selector+ ;
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
selector ::= [rule-name] class* pseudoClass*
|
|
27
|
+
|
|
28
|
+
| class+ pseudoClass*
|
|
29
|
+
|
|
30
|
+
| pseudoClass+
|
|
31
|
+
|
|
32
|
+
;
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
values ::= value+ ;
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class ::= <NO_WHITESPACE>"."<NO_WHITESPACE>identifier ;
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
pseudoClass ::= <NO_WHITESPACE>":"<NO_WHITESPACE>identifier ;
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
name. ::= identifier ;
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
value. ::= identifier ( <NO_WHITESPACE>"(" arguments ")" )?
|
|
48
|
+
|
|
49
|
+
| [number]<NO_WHITESPACE>[unit]
|
|
50
|
+
|
|
51
|
+
| [string-literal]
|
|
52
|
+
|
|
53
|
+
| [number]
|
|
54
|
+
|
|
55
|
+
| [colour]
|
|
56
|
+
|
|
57
|
+
;
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
arguments ::= argument ( "," argument )* ;
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
argument ::= identifier
|
|
64
|
+
|
|
65
|
+
| [number]<NO_WHITESPACE>[unit]
|
|
66
|
+
|
|
67
|
+
| [string-literal]
|
|
68
|
+
|
|
69
|
+
| [number]
|
|
70
|
+
|
|
71
|
+
| [colour]
|
|
72
|
+
|
|
73
|
+
;
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
identifier ::= ( [rule-name] | [name] ) ( <NO_WHITESPACE>"-"<NO_WHITESPACE>( [rule-name] | [name] ) )* ;
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
`;
|
|
80
|
+
|
|
81
|
+
export default bnf;
|