clarity-pattern-parser 3.0.15 → 4.0.0
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/README.md +0 -191
- package/dist/ast/Node.d.ts +4 -5
- package/dist/index.browser.js +476 -731
- package/dist/index.browser.js.map +1 -1
- package/dist/index.d.ts +10 -18
- package/dist/index.esm.js +469 -716
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +476 -731
- package/dist/index.js.map +1 -1
- package/dist/patterns/And.d.ts +24 -0
- package/dist/patterns/Literal.d.ts +19 -0
- package/dist/patterns/LookAhead.d.ts +8 -0
- package/dist/patterns/Not.d.ts +11 -0
- package/dist/patterns/Or.d.ts +22 -0
- package/dist/patterns/Pattern.d.ts +6 -7
- package/dist/patterns/{RecursivePattern.d.ts → Recursive.d.ts} +4 -4
- package/dist/patterns/Reference.d.ts +14 -0
- package/dist/patterns/Regex.d.ts +21 -0
- package/dist/patterns/Repeat.d.ts +20 -0
- package/package.json +1 -1
- package/src/CursorHistory.ts +1 -1
- package/src/ast/Node.ts +20 -17
- package/src/ast/Visitor.ts +14 -18
- package/src/index.ts +17 -33
- package/src/patterns/And.ts +178 -0
- package/src/patterns/Literal.ts +91 -0
- package/src/patterns/LookAhead.ts +32 -0
- package/src/patterns/Not.ts +50 -0
- package/src/patterns/Or.ts +132 -0
- package/src/patterns/Pattern.ts +31 -47
- package/src/patterns/Recursive.ts +92 -0
- package/src/patterns/Reference.ts +127 -0
- package/src/patterns/Regex.ts +123 -0
- package/src/patterns/Repeat.ts +155 -0
- package/src/tests/{AndValue.test.ts → And.test.ts} +31 -41
- package/src/tests/CursorHistory.test.ts +6 -6
- package/src/tests/Cusor.test.ts +7 -10
- package/src/tests/Literal.test.ts +3 -5
- package/src/tests/LookAhead.test.ts +44 -0
- package/src/tests/Not.test.ts +51 -0
- package/src/tests/Or.test.ts +113 -0
- package/src/tests/Pattern.test.ts +41 -141
- package/src/tests/{RecursivePattern.test.ts → Recursive.test.ts} +10 -8
- package/src/tests/Reference.test.ts +16 -0
- package/src/tests/{RepeatValue.test.ts → Repeat.test.ts} +10 -42
- package/src/tests/TextSuggester.test.ts +20 -28
- package/src/tests/{NodeVisitor.test.ts → Visitor.test.ts} +42 -21
- package/src/tests/cssPatterns/cssValue.ts +2 -2
- package/src/tests/cssPatterns/divider.ts +2 -2
- package/src/tests/cssPatterns/hex.ts +2 -2
- package/src/tests/cssPatterns/method.ts +7 -9
- package/src/tests/cssPatterns/name.ts +2 -2
- package/src/tests/cssPatterns/number.ts +2 -2
- package/src/tests/cssPatterns/optionalSpaces.ts +1 -2
- package/src/tests/cssPatterns/spaces.ts +2 -2
- package/src/tests/cssPatterns/unit.ts +3 -3
- package/src/tests/cssPatterns/value.ts +2 -2
- package/src/tests/cssPatterns/values.ts +2 -2
- package/src/tests/htmlPatterns/element.ts +18 -33
- package/src/tests/javascriptPatterns/boolean.ts +2 -3
- package/src/tests/javascriptPatterns/json.ts +14 -24
- package/src/tests/javascriptPatterns/name.ts +3 -20
- package/src/tests/javascriptPatterns/number.ts +2 -2
- package/src/tests/javascriptPatterns/objectLiteral.ts +9 -16
- package/src/tests/javascriptPatterns/string.ts +26 -24
- package/src/tests/javascriptPatterns/unit.ts +3 -6
- package/src/tests/javascriptPatterns/whitespace.ts +8 -12
- package/src/tests/naturalLanguage/filter.ts +16 -33
- package/src/tests/patterns/sentence.ts +8 -8
- package/dist/Cursor.js +0 -105
- package/dist/Cursor.js.map +0 -1
- package/dist/CursorHistory.js +0 -104
- package/dist/CursorHistory.js.map +0 -1
- package/dist/Permutor.d.ts +0 -13
- package/dist/Permutor.js +0 -52
- package/dist/Permutor.js.map +0 -1
- package/dist/TextSuggester.js +0 -244
- package/dist/TextSuggester.js.map +0 -1
- package/dist/ast/CompositeNode.d.ts +0 -6
- package/dist/ast/CompositeNode.js +0 -17
- package/dist/ast/CompositeNode.js.map +0 -1
- package/dist/ast/Node.js +0 -16
- package/dist/ast/Node.js.map +0 -1
- package/dist/ast/NodeVisitor.d.ts +0 -31
- package/dist/ast/ValueNode.d.ts +0 -6
- package/dist/ast/ValueNode.js +0 -14
- package/dist/ast/ValueNode.js.map +0 -1
- package/dist/ast/Visitor.js +0 -209
- package/dist/ast/Visitor.js.map +0 -1
- package/dist/patterns/ParseError.js +0 -9
- package/dist/patterns/ParseError.js.map +0 -1
- package/dist/patterns/Pattern.js +0 -127
- package/dist/patterns/Pattern.js.map +0 -1
- package/dist/patterns/RecursivePattern.js +0 -65
- package/dist/patterns/RecursivePattern.js.map +0 -1
- package/dist/patterns/composite/AndComposite.d.ts +0 -22
- package/dist/patterns/composite/AndComposite.js +0 -117
- package/dist/patterns/composite/AndComposite.js.map +0 -1
- package/dist/patterns/composite/CompositePattern.d.ts +0 -4
- package/dist/patterns/composite/CompositePattern.js +0 -7
- package/dist/patterns/composite/CompositePattern.js.map +0 -1
- package/dist/patterns/composite/OptionalComposite.d.ts +0 -10
- package/dist/patterns/composite/OptionalComposite.js +0 -29
- package/dist/patterns/composite/OptionalComposite.js.map +0 -1
- package/dist/patterns/composite/OrComposite.d.ts +0 -16
- package/dist/patterns/composite/OrComposite.js +0 -69
- package/dist/patterns/composite/OrComposite.js.map +0 -1
- package/dist/patterns/composite/RepeatComposite.d.ts +0 -21
- package/dist/patterns/composite/RepeatComposite.js +0 -88
- package/dist/patterns/composite/RepeatComposite.js.map +0 -1
- package/dist/patterns/value/AndValue.d.ts +0 -21
- package/dist/patterns/value/AndValue.js +0 -118
- package/dist/patterns/value/AndValue.js.map +0 -1
- package/dist/patterns/value/AnyOfThese.d.ts +0 -18
- package/dist/patterns/value/AnyOfThese.js +0 -59
- package/dist/patterns/value/AnyOfThese.js.map +0 -1
- package/dist/patterns/value/Literal.d.ts +0 -20
- package/dist/patterns/value/Literal.js +0 -63
- package/dist/patterns/value/Literal.js.map +0 -1
- package/dist/patterns/value/NotValue.d.ts +0 -17
- package/dist/patterns/value/NotValue.js +0 -70
- package/dist/patterns/value/NotValue.js.map +0 -1
- package/dist/patterns/value/OptionalValue.d.ts +0 -9
- package/dist/patterns/value/OptionalValue.js +0 -32
- package/dist/patterns/value/OptionalValue.js.map +0 -1
- package/dist/patterns/value/OrValue.d.ts +0 -19
- package/dist/patterns/value/OrValue.js +0 -73
- package/dist/patterns/value/OrValue.js.map +0 -1
- package/dist/patterns/value/RegexValue.d.ts +0 -19
- package/dist/patterns/value/RegexValue.js +0 -69
- package/dist/patterns/value/RegexValue.js.map +0 -1
- package/dist/patterns/value/RepeatValue.d.ts +0 -19
- package/dist/patterns/value/RepeatValue.js +0 -89
- package/dist/patterns/value/RepeatValue.js.map +0 -1
- package/dist/patterns/value/ValuePattern.d.ts +0 -5
- package/dist/patterns/value/ValuePattern.js +0 -7
- package/dist/patterns/value/ValuePattern.js.map +0 -1
- package/src/Permutor.ts +0 -64
- package/src/ast/CompositeNode.ts +0 -26
- package/src/ast/ValueNode.ts +0 -28
- package/src/patterns/RecursivePattern.ts +0 -86
- package/src/patterns/composite/AndComposite.ts +0 -159
- package/src/patterns/composite/CompositePattern.ts +0 -7
- package/src/patterns/composite/OptionalComposite.ts +0 -37
- package/src/patterns/composite/OrComposite.ts +0 -96
- package/src/patterns/composite/RepeatComposite.ts +0 -130
- package/src/patterns/value/AndValue.ts +0 -153
- package/src/patterns/value/AnyOfThese.ts +0 -81
- package/src/patterns/value/Literal.ts +0 -92
- package/src/patterns/value/NotValue.ts +0 -95
- package/src/patterns/value/OptionalValue.ts +0 -39
- package/src/patterns/value/OrValue.ts +0 -103
- package/src/patterns/value/RegexValue.ts +0 -103
- package/src/patterns/value/RepeatValue.ts +0 -131
- package/src/patterns/value/ValuePattern.ts +0 -8
- package/src/tests/AndComposite.test.ts +0 -102
- package/src/tests/AnyOfThese.test.ts +0 -74
- package/src/tests/CompositeNode.test.ts +0 -33
- package/src/tests/NotValue.test.ts +0 -69
- package/src/tests/OptionalValue.test.ts +0 -50
- package/src/tests/OrComposite.test.ts +0 -75
- package/src/tests/OrValue.test.ts +0 -171
- package/src/tests/Permutor.test.ts +0 -30
- package/src/tests/RegexValue.test.ts +0 -22
- package/src/tests/RepeatComposite.test.ts +0 -58
- package/src/tests/ValueNode.test.ts +0 -24
- package/src/tests/javascriptPatterns/varStatement.ts +0 -0
- package/src/tests/readmeDemo.test.ts +0 -124
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
/** @jest-environment node */
|
|
2
|
-
import
|
|
3
|
-
import Visitor from "../ast/Visitor";
|
|
4
|
-
import ValueNode from "../ast/ValueNode";
|
|
2
|
+
import { Visitor, Node } from "../index";
|
|
5
3
|
import cssValue from "./cssPatterns/cssValue";
|
|
6
4
|
|
|
7
5
|
function createContext(amount: number = 10) {
|
|
8
|
-
const grandParent = new
|
|
9
|
-
const parent = new
|
|
10
|
-
const children:
|
|
6
|
+
const grandParent = new Node("grand-parent", "grand-parent", 0, 0);
|
|
7
|
+
const parent = new Node("parent", "parent", 0, 0);
|
|
8
|
+
const children: Node[] = [];
|
|
11
9
|
|
|
12
10
|
for (let x = 0; x < amount; x++) {
|
|
13
|
-
const child = new
|
|
11
|
+
const child = new Node("child", "child", 0, 0, [], x.toString());
|
|
14
12
|
children.push(child);
|
|
15
13
|
}
|
|
16
14
|
|
|
@@ -35,7 +33,9 @@ describe("Visitor", () => {
|
|
|
35
33
|
});
|
|
36
34
|
|
|
37
35
|
test("remove", () => {
|
|
38
|
-
const node = cssValue.exec(
|
|
36
|
+
const node = cssValue.exec(
|
|
37
|
+
"linear-gradient(to left, #333, #333 50%, #eee 75%, #333 75%), linear-gradient(to bottom, #555, #555 50%, #eee 75%, #555 75%)"
|
|
38
|
+
);
|
|
39
39
|
|
|
40
40
|
if (node != null) {
|
|
41
41
|
const visitor = new Visitor(node);
|
|
@@ -59,15 +59,19 @@ describe("Visitor", () => {
|
|
|
59
59
|
const stringResult = visitor
|
|
60
60
|
.select((n) => n.name === "child")
|
|
61
61
|
.wrap((node) => {
|
|
62
|
-
const wrapper = new
|
|
62
|
+
const wrapper = new Node("wrapper", "wrapper", 0, 0);
|
|
63
63
|
wrapper.children.push(node);
|
|
64
64
|
return wrapper;
|
|
65
65
|
});
|
|
66
66
|
|
|
67
|
-
let wrappers = Visitor.select(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
let wrappers = Visitor.select(
|
|
68
|
+
node,
|
|
69
|
+
(n) => n.type === "wrapper"
|
|
70
|
+
).selectedNodes;
|
|
71
|
+
let children = Visitor.select(
|
|
72
|
+
node,
|
|
73
|
+
(n) => n.type === "child"
|
|
74
|
+
).selectedNodes;
|
|
71
75
|
|
|
72
76
|
expect(wrappers.length).toBe(10);
|
|
73
77
|
expect(children.length).toBe(10);
|
|
@@ -90,13 +94,21 @@ describe("Visitor", () => {
|
|
|
90
94
|
visitor
|
|
91
95
|
.select((n) => n.type === "child")
|
|
92
96
|
.prepend((n) => {
|
|
93
|
-
const sibling = new
|
|
97
|
+
const sibling = new Node(
|
|
98
|
+
"sibling",
|
|
99
|
+
"sibling",
|
|
100
|
+
0,
|
|
101
|
+
0,
|
|
102
|
+
[],
|
|
103
|
+
n.value || ""
|
|
104
|
+
);
|
|
94
105
|
|
|
95
106
|
return sibling;
|
|
96
107
|
});
|
|
97
108
|
|
|
98
|
-
const siblings = visitor.select(
|
|
99
|
-
.
|
|
109
|
+
const siblings = visitor.select(
|
|
110
|
+
(n) => n.type === "sibling"
|
|
111
|
+
).selectedNodes;
|
|
100
112
|
const parent = visitor.select((n) => n.type === "parent")
|
|
101
113
|
.selectedNodes[0];
|
|
102
114
|
|
|
@@ -174,13 +186,21 @@ describe("Visitor", () => {
|
|
|
174
186
|
visitor
|
|
175
187
|
.select((n) => n.type === "child")
|
|
176
188
|
.append((n) => {
|
|
177
|
-
const sibling = new
|
|
189
|
+
const sibling = new Node(
|
|
190
|
+
"sibling",
|
|
191
|
+
"sibling",
|
|
192
|
+
0,
|
|
193
|
+
0,
|
|
194
|
+
[],
|
|
195
|
+
n.value || ""
|
|
196
|
+
);
|
|
178
197
|
|
|
179
198
|
return sibling;
|
|
180
199
|
});
|
|
181
200
|
|
|
182
|
-
const siblings = visitor.select(
|
|
183
|
-
.
|
|
201
|
+
const siblings = visitor.select(
|
|
202
|
+
(n) => n.type === "sibling"
|
|
203
|
+
).selectedNodes;
|
|
184
204
|
const parent = visitor.select((n) => n.type === "parent")
|
|
185
205
|
.selectedNodes[0];
|
|
186
206
|
|
|
@@ -288,8 +308,9 @@ describe("Visitor", () => {
|
|
|
288
308
|
|
|
289
309
|
if (node != null) {
|
|
290
310
|
const visitor = new Visitor(node);
|
|
291
|
-
const selected = visitor
|
|
292
|
-
.
|
|
311
|
+
const selected = visitor
|
|
312
|
+
.selectNode(node)
|
|
313
|
+
.deselectNode(node).selectedNodes;
|
|
293
314
|
|
|
294
315
|
expect(selected.length).toBe(0);
|
|
295
316
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Repeat } from "../../index";
|
|
2
2
|
import divider from "./divider";
|
|
3
3
|
import values from "./values";
|
|
4
4
|
|
|
5
|
-
const cssValue = new
|
|
5
|
+
const cssValue = new Repeat("css-value", values, divider);
|
|
6
6
|
|
|
7
7
|
export default cssValue;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Literal,
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
OptionalComposite
|
|
3
|
+
And,
|
|
4
|
+
Repeat,
|
|
5
|
+
Recursive,
|
|
7
6
|
} from "../../index";
|
|
8
7
|
|
|
9
8
|
import name from "./name";
|
|
@@ -12,15 +11,14 @@ import divider from "./divider";
|
|
|
12
11
|
|
|
13
12
|
const openParen = new Literal("open-paren", "(");
|
|
14
13
|
const closeParen = new Literal("close-paren", ")");
|
|
15
|
-
const values = new
|
|
16
|
-
const args = new
|
|
17
|
-
const optionalArgs = new OptionalComposite(args);
|
|
14
|
+
const values = new Recursive("values");
|
|
15
|
+
const args = new Repeat("arguments", values, divider, true);
|
|
18
16
|
|
|
19
|
-
const method = new
|
|
17
|
+
const method = new And("method", [
|
|
20
18
|
name.clone("[Method Name]"),
|
|
21
19
|
openParen,
|
|
22
20
|
optionalSpaces,
|
|
23
|
-
|
|
21
|
+
args,
|
|
24
22
|
optionalSpaces,
|
|
25
23
|
closeParen
|
|
26
24
|
]);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { And, Regex } from "../../index";
|
|
2
2
|
|
|
3
3
|
import number from "./number";
|
|
4
4
|
|
|
5
|
-
const unitType = new
|
|
6
|
-
const unit = new
|
|
5
|
+
const unitType = new Regex("[unit]", "[a-zA-Z%]+");
|
|
6
|
+
const unit = new And("unit", [number, unitType]);
|
|
7
7
|
|
|
8
8
|
export default unit;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Or } from "../../index";
|
|
2
2
|
import unit from "./unit";
|
|
3
3
|
import hex from "./hex";
|
|
4
4
|
import number from "./number";
|
|
5
5
|
import method from "./method";
|
|
6
6
|
import name from "./name"
|
|
7
7
|
|
|
8
|
-
const value = new
|
|
8
|
+
const value = new Or("value", [hex, method, unit, number, name]);
|
|
9
9
|
|
|
10
10
|
export default value;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Repeat } from "../../index";
|
|
2
2
|
import value from "./value";
|
|
3
3
|
import spaces from "./spaces";
|
|
4
4
|
|
|
5
|
-
const values = new
|
|
5
|
+
const values = new Repeat("values", value, spaces);
|
|
6
6
|
|
|
7
7
|
export default values;
|
|
@@ -1,64 +1,49 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Literal,
|
|
3
|
-
OptionalValue,
|
|
4
|
-
AndValue,
|
|
5
|
-
OrValue,
|
|
6
|
-
AndComposite,
|
|
7
|
-
OrComposite,
|
|
8
|
-
RegexValue,
|
|
9
|
-
NotValue,
|
|
10
|
-
RepeatComposite,
|
|
11
|
-
RecursivePattern,
|
|
12
|
-
OptionalComposite
|
|
13
|
-
} from "../../index";
|
|
1
|
+
import { Literal, And, Or, Regex, Repeat, Recursive } from "../../index";
|
|
14
2
|
|
|
15
|
-
const attributeName = new
|
|
16
|
-
"attribute-name",
|
|
17
|
-
"[a-zA-Z_:]+[a-zA-Z0-9_]*"
|
|
18
|
-
);
|
|
3
|
+
const attributeName = new Regex("attribute-name", "[a-zA-Z_:]+[a-zA-Z0-9_]*");
|
|
19
4
|
|
|
20
5
|
const doubleQuote = new Literal("double-quote", '"');
|
|
21
6
|
const greaterThan = new Literal("greater-than", ">");
|
|
22
7
|
const lessThan = new Literal("less-than", "<");
|
|
23
8
|
const forwardSlash = new Literal("forward-slash", "/");
|
|
24
9
|
const equal = new Literal("equal", "=");
|
|
25
|
-
const spaces = new
|
|
26
|
-
const optionalSpaces =
|
|
27
|
-
|
|
28
|
-
const value = new RegexValue("value", '[^"]+');
|
|
10
|
+
const spaces = new Regex(" ", "\\s+", true);
|
|
11
|
+
const optionalSpaces = spaces.clone("optional-spaces", true);
|
|
12
|
+
const value = new Regex("value", '[^"]+');
|
|
29
13
|
|
|
30
|
-
export const attribute = new
|
|
14
|
+
export const attribute = new And("attribute", [
|
|
31
15
|
attributeName,
|
|
32
16
|
equal,
|
|
33
17
|
doubleQuote,
|
|
34
18
|
value,
|
|
35
|
-
doubleQuote
|
|
19
|
+
doubleQuote,
|
|
36
20
|
]);
|
|
37
|
-
const
|
|
38
|
-
const optionalAttributes = new OptionalComposite(attributes);
|
|
21
|
+
const optionalAttributes = new Repeat("attributes", attribute, spaces, true);
|
|
39
22
|
|
|
40
|
-
const elementName = new
|
|
41
|
-
const text = new
|
|
42
|
-
const recursiveElement = new
|
|
23
|
+
const elementName = new Regex("element-name", "[a-zA-Z]+[a-zA-Z-]*");
|
|
24
|
+
const text = new Regex("text", "[^<>]+");
|
|
25
|
+
const recursiveElement = new Recursive("element");
|
|
43
26
|
|
|
44
|
-
const elementContent = new
|
|
27
|
+
const elementContent = new Repeat(
|
|
45
28
|
"children",
|
|
46
|
-
new
|
|
29
|
+
new Or("content", [text, recursiveElement]),
|
|
30
|
+
undefined,
|
|
31
|
+
true
|
|
47
32
|
);
|
|
48
33
|
|
|
49
|
-
const element = new
|
|
34
|
+
const element = new And("element", [
|
|
50
35
|
lessThan,
|
|
51
36
|
elementName.clone("open-element-name"),
|
|
52
37
|
optionalSpaces,
|
|
53
38
|
optionalAttributes,
|
|
54
39
|
optionalSpaces,
|
|
55
40
|
greaterThan,
|
|
56
|
-
|
|
41
|
+
elementContent,
|
|
57
42
|
lessThan,
|
|
58
43
|
forwardSlash,
|
|
59
44
|
elementName.clone("close-element-name"),
|
|
60
45
|
optionalSpaces,
|
|
61
|
-
greaterThan
|
|
46
|
+
greaterThan,
|
|
62
47
|
]);
|
|
63
48
|
|
|
64
49
|
export default element;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import Literal from "../../
|
|
2
|
-
import OrValue from "../../patterns/value/OrValue";
|
|
1
|
+
import {Literal, Or} from "../../index";
|
|
3
2
|
|
|
4
3
|
const trueLiteral = new Literal("true", "true");
|
|
5
4
|
const falseLiteral = new Literal("false", "false");
|
|
6
|
-
const boolean = new
|
|
5
|
+
const boolean = new Or("boolean", [
|
|
7
6
|
trueLiteral,
|
|
8
7
|
falseLiteral
|
|
9
8
|
]);
|
|
@@ -1,14 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
Literal,
|
|
4
|
-
AndComposite,
|
|
5
|
-
RepeatValue,
|
|
6
|
-
OptionalValue,
|
|
7
|
-
RepeatComposite,
|
|
8
|
-
OptionalComposite,
|
|
9
|
-
OrComposite,
|
|
10
|
-
AndValue,
|
|
11
|
-
} from "../../index";
|
|
1
|
+
import { Literal, And, Repeat, Or, Recursive } from "../../index";
|
|
12
2
|
|
|
13
3
|
import string from "./string";
|
|
14
4
|
import number from "./number";
|
|
@@ -20,25 +10,25 @@ const openSquareBracket = new Literal("open-square-bracket", "[");
|
|
|
20
10
|
const closeSquareBracket = new Literal("close-square-bracket", "]");
|
|
21
11
|
const colon = new Literal(":", ":");
|
|
22
12
|
const space = new Literal("space", " ");
|
|
23
|
-
const spaces = new
|
|
24
|
-
const optionalSpaces =
|
|
13
|
+
const spaces = new Repeat("spaces", space);
|
|
14
|
+
const optionalSpaces = spaces.clone("optional-spaces", true);
|
|
25
15
|
const nullLiteral = new Literal("null", "null");
|
|
26
16
|
const comma = new Literal(",", ",");
|
|
27
17
|
|
|
28
|
-
const divider = new
|
|
18
|
+
const divider = new And("divider", [
|
|
29
19
|
optionalSpaces,
|
|
30
20
|
comma,
|
|
31
21
|
optionalSpaces,
|
|
32
22
|
]);
|
|
33
23
|
|
|
34
|
-
const arrayValues = new
|
|
24
|
+
const arrayValues = new Repeat(
|
|
35
25
|
"values",
|
|
36
|
-
new
|
|
26
|
+
new Recursive("literals"),
|
|
37
27
|
divider
|
|
38
28
|
);
|
|
39
|
-
const optionalArrayValues =
|
|
29
|
+
const optionalArrayValues = arrayValues.clone("optional-values", true);
|
|
40
30
|
|
|
41
|
-
const arrayLiteral = new
|
|
31
|
+
const arrayLiteral = new And("array-literal", [
|
|
42
32
|
openSquareBracket,
|
|
43
33
|
optionalSpaces,
|
|
44
34
|
optionalArrayValues,
|
|
@@ -46,18 +36,18 @@ const arrayLiteral = new AndComposite("array-literal", [
|
|
|
46
36
|
closeSquareBracket,
|
|
47
37
|
]);
|
|
48
38
|
|
|
49
|
-
const keyValue = new
|
|
39
|
+
const keyValue = new And("key-value", [
|
|
50
40
|
string,
|
|
51
41
|
optionalSpaces,
|
|
52
42
|
colon,
|
|
53
43
|
optionalSpaces,
|
|
54
|
-
new
|
|
44
|
+
new Recursive("literals"),
|
|
55
45
|
]);
|
|
56
46
|
|
|
57
|
-
const keyValues = new
|
|
58
|
-
const optionalKeyValues =
|
|
47
|
+
const keyValues = new Repeat("key-values", keyValue, divider);
|
|
48
|
+
const optionalKeyValues = keyValues.clone("optional-key-values", true);
|
|
59
49
|
|
|
60
|
-
const objectLiteral = new
|
|
50
|
+
const objectLiteral = new And("object-literal", [
|
|
61
51
|
openCurlyBracket,
|
|
62
52
|
optionalSpaces,
|
|
63
53
|
optionalKeyValues,
|
|
@@ -65,7 +55,7 @@ const objectLiteral = new AndComposite("object-literal", [
|
|
|
65
55
|
closeCurlyBracket,
|
|
66
56
|
]);
|
|
67
57
|
|
|
68
|
-
const json = new
|
|
58
|
+
const json = new Or("literals", [
|
|
69
59
|
number,
|
|
70
60
|
string,
|
|
71
61
|
boolean,
|
|
@@ -1,22 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Regex } from "../../index";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
// const digit = new AnyOfThese("digit", "0987654321");
|
|
5
|
-
// const underbar = new Literal("underbar", "_");
|
|
6
|
-
// const character = new OrValue("character", [
|
|
7
|
-
// letter,
|
|
8
|
-
// digit,
|
|
9
|
-
// underbar
|
|
10
|
-
// ]);
|
|
3
|
+
const name = new Regex("name", "[a-zA-Z]+[a-zA-Z0-9_]*");
|
|
11
4
|
|
|
12
|
-
|
|
13
|
-
// const optionalCharacter = new OptionalValue(characterSequence);
|
|
14
|
-
|
|
15
|
-
// const name = new AndValue("name", [
|
|
16
|
-
// letter,
|
|
17
|
-
// optionalCharacter
|
|
18
|
-
// ]);
|
|
19
|
-
|
|
20
|
-
const name = new RegexValue("name", "[a-zA-Z]+[a-zA-Z0-9_]*");
|
|
21
|
-
|
|
22
|
-
export default name;
|
|
5
|
+
export default name;
|
|
@@ -1,29 +1,22 @@
|
|
|
1
|
-
import Literal from "../../
|
|
2
|
-
import AndComposite from "../../patterns/composite/AndComposite";
|
|
3
|
-
import RepeatComposite from "../../patterns/composite/RepeatComposite";
|
|
4
|
-
import OptionalComposite from "../../patterns/composite/OptionalComposite";
|
|
5
|
-
import OrValue from "../../patterns/value/OrValue";
|
|
6
|
-
import OptionalValue from "../../patterns/value/OptionalValue";
|
|
7
|
-
import RecursivePattern from "../../patterns/RecursivePattern";
|
|
1
|
+
import {Literal, And, Repeat, Or, Recursive} from "../../index";
|
|
8
2
|
import name from "./name";
|
|
9
3
|
import string from "./string";
|
|
10
4
|
import whitespace from "./whitespace";
|
|
11
|
-
import AndValue from "../../patterns/value/AndValue";
|
|
12
5
|
|
|
13
|
-
const expression = new
|
|
14
|
-
const optionalWhitespace =
|
|
6
|
+
const expression = new Recursive("expression");
|
|
7
|
+
const optionalWhitespace = whitespace.clone("optional-whitespaces", true);
|
|
15
8
|
const comma = new Literal(",", ",");
|
|
16
9
|
const colon = new Literal(":", ":");
|
|
17
10
|
|
|
18
|
-
const separator = new
|
|
11
|
+
const separator = new And("separator", [
|
|
19
12
|
optionalWhitespace,
|
|
20
13
|
comma,
|
|
21
14
|
optionalWhitespace,
|
|
22
15
|
]);
|
|
23
16
|
|
|
24
|
-
const property = new
|
|
17
|
+
const property = new Or("property", [name, string]);
|
|
25
18
|
|
|
26
|
-
const keyValue = new
|
|
19
|
+
const keyValue = new And("key-value", [
|
|
27
20
|
property,
|
|
28
21
|
optionalWhitespace,
|
|
29
22
|
colon,
|
|
@@ -31,12 +24,12 @@ const keyValue = new AndComposite("key-value", [
|
|
|
31
24
|
expression,
|
|
32
25
|
]);
|
|
33
26
|
|
|
34
|
-
const keyValues = new
|
|
35
|
-
const optionalKeyValues =
|
|
27
|
+
const keyValues = new Repeat("key-values", keyValue, separator);
|
|
28
|
+
const optionalKeyValues = keyValues.clone("optional-key-values", true);
|
|
36
29
|
const openBracket = new Literal("{", "}");
|
|
37
30
|
const closeBracket = new Literal("}", "}");
|
|
38
31
|
|
|
39
|
-
const objectLiteral = new
|
|
32
|
+
const objectLiteral = new And("object-literal", [
|
|
40
33
|
openBracket,
|
|
41
34
|
optionalWhitespace,
|
|
42
35
|
optionalKeyValues,
|
|
@@ -1,30 +1,26 @@
|
|
|
1
|
-
import Literal from "../../
|
|
2
|
-
import NotValue from "../../patterns/value/NotValue";
|
|
3
|
-
import OrValue from "../../patterns/value/OrValue";
|
|
4
|
-
import RepeatValue from "../../patterns/value/RepeatValue";
|
|
5
|
-
import AndValue from "../../patterns/value/AndValue";
|
|
1
|
+
import { Literal, Not, Or, Repeat, And, Regex } from "../../index";
|
|
6
2
|
|
|
7
3
|
const singleQuote = new Literal("single-quote", "'");
|
|
8
4
|
const doubleQuote = new Literal("double-quote", '"');
|
|
9
5
|
const backslash = new Literal("double-quote", "\\");
|
|
10
6
|
|
|
11
|
-
const singleQuoteOrBackslash = new
|
|
7
|
+
const singleQuoteOrBackslash = new Or("single-quote-or-backslash", [
|
|
12
8
|
singleQuote,
|
|
13
|
-
backslash
|
|
9
|
+
backslash,
|
|
14
10
|
]);
|
|
15
11
|
|
|
16
|
-
const doubleQuoteOrBackslash = new
|
|
12
|
+
const doubleQuoteOrBackslash = new Or("single-quote-or-backslash", [
|
|
17
13
|
doubleQuote,
|
|
18
|
-
backslash
|
|
14
|
+
backslash,
|
|
19
15
|
]);
|
|
20
16
|
|
|
21
|
-
const unescapedSingleCharacter = new
|
|
17
|
+
const unescapedSingleCharacter = new Regex(
|
|
22
18
|
"unescaped-single-character",
|
|
23
|
-
|
|
19
|
+
"[^'\\\\]"
|
|
24
20
|
);
|
|
25
|
-
const unescapedDoubleCharacter = new
|
|
21
|
+
const unescapedDoubleCharacter = new Regex(
|
|
26
22
|
"unescaped-double-character",
|
|
27
|
-
|
|
23
|
+
`[^"\\\\]`
|
|
28
24
|
);
|
|
29
25
|
const escapedSingleQuote = new Literal("escaped-single-quote", "\\'");
|
|
30
26
|
const escapedDoubleQuote = new Literal("escaped-double-quote", '\\"');
|
|
@@ -36,7 +32,7 @@ const escapedNewLine = new Literal("escaped-new-line", "\\n");
|
|
|
36
32
|
const escapedCarriageReturn = new Literal("escaped-carriage-return", "\\r");
|
|
37
33
|
const escapedTab = new Literal("escaped-tab", "\\t");
|
|
38
34
|
|
|
39
|
-
const singleQuoteCharacter = new
|
|
35
|
+
const singleQuoteCharacter = new Or("character", [
|
|
40
36
|
escapedSingleQuote,
|
|
41
37
|
escapedDoubleQuote,
|
|
42
38
|
escapedBackslash,
|
|
@@ -46,10 +42,10 @@ const singleQuoteCharacter = new OrValue("character", [
|
|
|
46
42
|
escapedNewLine,
|
|
47
43
|
escapedCarriageReturn,
|
|
48
44
|
escapedTab,
|
|
49
|
-
unescapedSingleCharacter
|
|
45
|
+
unescapedSingleCharacter,
|
|
50
46
|
]);
|
|
51
47
|
|
|
52
|
-
const doubleQuoteCharacter = new
|
|
48
|
+
const doubleQuoteCharacter = new Or("character", [
|
|
53
49
|
escapedSingleQuote,
|
|
54
50
|
escapedDoubleQuote,
|
|
55
51
|
escapedBackslash,
|
|
@@ -59,24 +55,30 @@ const doubleQuoteCharacter = new OrValue("character", [
|
|
|
59
55
|
escapedNewLine,
|
|
60
56
|
escapedCarriageReturn,
|
|
61
57
|
escapedTab,
|
|
62
|
-
unescapedDoubleCharacter
|
|
58
|
+
unescapedDoubleCharacter,
|
|
63
59
|
]);
|
|
64
60
|
|
|
65
|
-
const singleCharacterSequence = new
|
|
66
|
-
|
|
61
|
+
const singleCharacterSequence = new Repeat(
|
|
62
|
+
"string-content",
|
|
63
|
+
singleQuoteCharacter
|
|
64
|
+
);
|
|
65
|
+
const doubleCharacterSequence = new Repeat(
|
|
66
|
+
"string-content",
|
|
67
|
+
doubleQuoteCharacter
|
|
68
|
+
);
|
|
67
69
|
|
|
68
|
-
const singleQuoteString = new
|
|
70
|
+
const singleQuoteString = new And("single-quote-string", [
|
|
69
71
|
singleQuote,
|
|
70
72
|
singleCharacterSequence,
|
|
71
|
-
singleQuote
|
|
73
|
+
singleQuote,
|
|
72
74
|
]);
|
|
73
75
|
|
|
74
|
-
const doubleQuoteString = new
|
|
76
|
+
const doubleQuoteString = new And("double-quote-string", [
|
|
75
77
|
doubleQuote,
|
|
76
78
|
doubleCharacterSequence,
|
|
77
|
-
doubleQuote
|
|
79
|
+
doubleQuote,
|
|
78
80
|
]);
|
|
79
81
|
|
|
80
|
-
const string = new
|
|
82
|
+
const string = new Or("string", [singleQuoteString, doubleQuoteString]);
|
|
81
83
|
|
|
82
84
|
export default string;
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
AndComposite,
|
|
3
|
-
RegexValue
|
|
4
|
-
} from "../../index";
|
|
1
|
+
import { And, Regex } from "../../index";
|
|
5
2
|
|
|
6
3
|
import number from "./number";
|
|
7
4
|
|
|
8
|
-
const unitType = new
|
|
9
|
-
const unit = new
|
|
5
|
+
const unitType = new Regex("unit-type", "[a-zA-Z]+|%");
|
|
6
|
+
const unit = new And("unit", [number, unitType]);
|
|
10
7
|
|
|
11
8
|
export default unit;
|