clarity-pattern-parser 11.3.11 → 11.3.13
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/dist/ast/Node.test.d.ts +1 -0
- package/dist/grammar/Grammar.test.d.ts +1 -0
- package/dist/grammar/patterns.test.d.ts +1 -0
- package/dist/index.browser.js +5 -5
- package/dist/index.browser.js.map +1 -1
- package/dist/index.esm.js +5 -5
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/intellisense/AutoComplete.test.d.ts +2 -0
- package/dist/intellisense/css/cssValue.d.ts +3 -0
- package/dist/intellisense/css/divider.d.ts +3 -0
- package/dist/intellisense/css/hex.d.ts +3 -0
- package/dist/intellisense/css/method.d.ts +3 -0
- package/dist/intellisense/css/name.d.ts +3 -0
- package/dist/intellisense/css/number.d.ts +3 -0
- package/dist/intellisense/css/optionalSpaces.d.ts +2 -0
- package/dist/intellisense/css/spaces.d.ts +3 -0
- package/dist/intellisense/css/unit.d.ts +3 -0
- package/dist/intellisense/css/value.d.ts +3 -0
- package/dist/intellisense/css/values.d.ts +3 -0
- package/dist/intellisense/javascript/Javascript.test.d.ts +1 -0
- package/dist/intellisense/javascript/arrayLiteral.d.ts +2 -0
- package/dist/intellisense/javascript/assignment.d.ts +3 -0
- package/dist/intellisense/javascript/deleteStatement.d.ts +2 -0
- package/dist/intellisense/javascript/escapedCharacter.d.ts +3 -0
- package/dist/intellisense/javascript/exponent.d.ts +3 -0
- package/dist/intellisense/javascript/expression.d.ts +3 -0
- package/dist/intellisense/javascript/fraction.d.ts +3 -0
- package/dist/intellisense/javascript/infixOperator.d.ts +3 -0
- package/dist/intellisense/javascript/integer.d.ts +3 -0
- package/dist/intellisense/javascript/invocation.d.ts +2 -0
- package/dist/intellisense/javascript/keywords.d.ts +2 -0
- package/dist/intellisense/javascript/literal.d.ts +3 -0
- package/dist/intellisense/javascript/name.d.ts +2 -0
- package/dist/intellisense/javascript/numberLiteral.d.ts +2 -0
- package/dist/intellisense/javascript/objectAccess.d.ts +2 -0
- package/dist/intellisense/javascript/objectLiteral.d.ts +3 -0
- package/dist/intellisense/javascript/optionalSpaces.d.ts +2 -0
- package/dist/intellisense/javascript/parameters.d.ts +3 -0
- package/dist/intellisense/javascript/prefixOperator.d.ts +3 -0
- package/dist/intellisense/javascript/propertyAccess.d.ts +3 -0
- package/dist/intellisense/javascript/stringLiteral.d.ts +3 -0
- package/dist/patterns/Context.test.d.ts +1 -0
- package/dist/patterns/Cursor.test.d.ts +1 -0
- package/dist/patterns/CursorHistory.test.d.ts +1 -0
- package/dist/patterns/Expression.test.d.ts +1 -0
- package/dist/patterns/FiniteRepeat.test.d.ts +1 -0
- package/dist/patterns/InfiniteRepeat.test.d.ts +1 -0
- package/dist/patterns/Literal.test.d.ts +1 -0
- package/dist/patterns/Not.test.d.ts +1 -0
- package/dist/patterns/Optional.test.d.ts +1 -0
- package/dist/patterns/Options.test.d.ts +1 -0
- package/dist/patterns/PrecedenceTree.test.d.ts +1 -0
- package/dist/patterns/Reference.test.d.ts +1 -0
- package/dist/patterns/Regex.test.d.ts +1 -0
- package/dist/patterns/Repeat.d.ts +2 -2
- package/dist/patterns/Repeat.test.d.ts +1 -0
- package/dist/patterns/Sequence.test.d.ts +1 -0
- package/dist/patterns/TakeUntil.test.d.ts +1 -0
- package/dist/query/query.test.d.ts +1 -0
- package/dist/query/selector.test.d.ts +1 -0
- package/jest.config.js +1 -1
- package/package.json +1 -1
- package/src/intellisense/AutoComplete.test.ts +21 -2
- package/src/intellisense/AutoComplete.ts +1 -1
- package/src/intellisense/css/optionalSpaces.ts +1 -1
- package/src/intellisense/css/value.ts +1 -1
- package/src/patterns/Repeat.ts +4 -4
- package/tsconfig.json +1 -1
- package/dist/Cursor.d.ts +0 -37
- package/dist/CursorHistory.d.ts +0 -27
- package/dist/TextSuggester.d.ts +0 -48
- package/dist/ast/Visitor.d.ts +0 -31
- package/dist/grammar/patterns/andLiteral.d.ts +0 -4
- package/dist/grammar/patterns/inlinePattern.d.ts +0 -1
- package/dist/grammar/patterns/orLiteral.d.ts +0 -2
- package/dist/patterns/And.d.ts +0 -41
- package/dist/patterns/DepthCache.d.ts +0 -6
- package/dist/patterns/ExpressionPattern.d.ts +0 -66
- package/dist/patterns/LookAhead.d.ts +0 -8
- package/dist/patterns/Or.d.ts +0 -36
- package/dist/patterns/Recursive.d.ts +0 -12
- package/dist/patterns/RightAssociatedPattern.d.ts +0 -31
- package/dist/patterns/arePatternsEqual.d.ts +0 -2
- package/dist/patterns/getNextPattern.d.ts +0 -2
- package/dist/types.d.ts +0 -797
- package/src/generator/delete.ts +0 -88
- package/src/generator/generator.test.ts +0 -28
- package/src/generator/generator.ts +0 -106
- package/src/generator/igenerator.ts +0 -6
- package/src/generator/ivisitor.ts +0 -24
- package/src/generator/typescriptVisitor.ts +0 -179
package/src/generator/delete.ts
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { Context } from "../patterns/Context";
|
|
2
|
-
import { Expression } from "../patterns/Expression";
|
|
3
|
-
import { Literal } from "../patterns/Literal";
|
|
4
|
-
import { Reference } from "../patterns/Reference";
|
|
5
|
-
import { Repeat } from "../patterns/Repeat";
|
|
6
|
-
import { Sequence } from "../patterns/Sequence";
|
|
7
|
-
import { Options } from "../patterns/Options";
|
|
8
|
-
import { Optional } from "../patterns/Optional";
|
|
9
|
-
import { TakeUntil } from "../patterns/TakeUntil";
|
|
10
|
-
|
|
11
|
-
new Context("expression",
|
|
12
|
-
new Expression("expression", [
|
|
13
|
-
new Sequence("prefix-expression", [
|
|
14
|
-
new Literal("pre", "pre"),
|
|
15
|
-
new Reference("expression")
|
|
16
|
-
]),
|
|
17
|
-
new Sequence("postfix-expression", [
|
|
18
|
-
new Reference("expression"),
|
|
19
|
-
new Literal("post", "post")
|
|
20
|
-
]),
|
|
21
|
-
new Sequence("infix-expression", [
|
|
22
|
-
new Reference("expression"),
|
|
23
|
-
new Literal(" and ", " and "),
|
|
24
|
-
new Reference("expression")
|
|
25
|
-
]),
|
|
26
|
-
new Expression("item", [
|
|
27
|
-
new Options("names", [
|
|
28
|
-
new Literal("john", "John"),
|
|
29
|
-
new Literal("Jane", "Jane")
|
|
30
|
-
]),
|
|
31
|
-
new Reference("array")
|
|
32
|
-
])
|
|
33
|
-
]), [
|
|
34
|
-
new Literal("john", "John"),
|
|
35
|
-
new Options("names", [
|
|
36
|
-
new Literal("john", "John"),
|
|
37
|
-
new Literal("Jane", "Jane")
|
|
38
|
-
]),
|
|
39
|
-
new Literal("space", "\\s+"),
|
|
40
|
-
new Literal("comma", "\\s*,\\s*"),
|
|
41
|
-
new Expression("item", [
|
|
42
|
-
new Options("names", [
|
|
43
|
-
new Literal("john", "John"),
|
|
44
|
-
new Literal("Jane", "Jane")
|
|
45
|
-
]),
|
|
46
|
-
new Reference("array")
|
|
47
|
-
]),
|
|
48
|
-
new Repeat("items",
|
|
49
|
-
new Expression("item", [
|
|
50
|
-
new Options("names", [
|
|
51
|
-
new Literal("john", "John"),
|
|
52
|
-
new Literal("Jane", "Jane")
|
|
53
|
-
]),
|
|
54
|
-
new Reference("array")
|
|
55
|
-
]), { min: 1, divider: new Literal("comma", "\\s*,\\s*") }),
|
|
56
|
-
new Sequence("array", [
|
|
57
|
-
new Literal("[", "["),
|
|
58
|
-
new Optional("optional-space",
|
|
59
|
-
new Literal("space", "\\s+")),
|
|
60
|
-
new Optional("optional-items",
|
|
61
|
-
new Repeat("items",
|
|
62
|
-
new Expression("item", [
|
|
63
|
-
new Options("names", [
|
|
64
|
-
new Literal("john", "John"),
|
|
65
|
-
new Literal("Jane", "Jane")
|
|
66
|
-
]),
|
|
67
|
-
new Reference("array")
|
|
68
|
-
]), { min: 1, divider: new Literal("comma", "\\s*,\\s*") })),
|
|
69
|
-
new Optional("optional-space",
|
|
70
|
-
new Literal("space", "\\s+")),
|
|
71
|
-
new Literal("]", "]")
|
|
72
|
-
]),
|
|
73
|
-
new Sequence("prefix-expression", [
|
|
74
|
-
new Literal("pre", "pre"),
|
|
75
|
-
new Reference("expression")
|
|
76
|
-
]),
|
|
77
|
-
new Sequence("postfix-expression", [
|
|
78
|
-
new Reference("expression"),
|
|
79
|
-
new Literal("post", "post")
|
|
80
|
-
]),
|
|
81
|
-
new Sequence("infix-expression", [
|
|
82
|
-
new Reference("expression"),
|
|
83
|
-
new Literal(" and ", " and "),
|
|
84
|
-
new Reference("expression")
|
|
85
|
-
]),
|
|
86
|
-
new TakeUntil("take-until",
|
|
87
|
-
new Literal("</script", "</script"))
|
|
88
|
-
])
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { patterns } from "../grammar/patterns";
|
|
2
|
-
import { Generator } from "./generator";
|
|
3
|
-
import { TypescriptVisitor } from "./typescriptVisitor";
|
|
4
|
-
|
|
5
|
-
describe("generator", () => {
|
|
6
|
-
test("Every Pattern", () => {
|
|
7
|
-
const { expression } = patterns`
|
|
8
|
-
john = "John"
|
|
9
|
-
names = john | "Jane"
|
|
10
|
-
space = /\\s+/
|
|
11
|
-
comma = /\\s*,\\s*/
|
|
12
|
-
item = names | array
|
|
13
|
-
items = (item, comma)+
|
|
14
|
-
array = "[" + space? + items? + space? + "]"
|
|
15
|
-
prefix-expression = "pre" + expression
|
|
16
|
-
postfix-expression = expression + "post"
|
|
17
|
-
infix-expression = expression + " and " + expression
|
|
18
|
-
expression = prefix-expression | postfix-expression | infix-expression | item
|
|
19
|
-
take-until = ? -> | "</script"
|
|
20
|
-
`;
|
|
21
|
-
|
|
22
|
-
const visitor = new TypescriptVisitor();
|
|
23
|
-
const result = new Generator(visitor).generate(expression);
|
|
24
|
-
expect(result).toBe(result);
|
|
25
|
-
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { Pattern } from "../patterns/Pattern";
|
|
2
|
-
import { IVisitor } from "./ivisitor";
|
|
3
|
-
|
|
4
|
-
export class Generator {
|
|
5
|
-
private _visitor: IVisitor;
|
|
6
|
-
private _depth = 1;
|
|
7
|
-
private _usedPatterns: Set<string>;
|
|
8
|
-
private _terminalPatterns = [
|
|
9
|
-
"literal",
|
|
10
|
-
"regex",
|
|
11
|
-
"repeat",
|
|
12
|
-
"finite-repeat",
|
|
13
|
-
"infinite-repeat",
|
|
14
|
-
"reference",
|
|
15
|
-
"context",
|
|
16
|
-
"expression"
|
|
17
|
-
];
|
|
18
|
-
|
|
19
|
-
constructor(visitor: IVisitor, depth = 0) {
|
|
20
|
-
this._usedPatterns = new Set();
|
|
21
|
-
this._visitor = visitor;
|
|
22
|
-
this._depth = depth;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
setDepth(depth: number) {
|
|
26
|
-
this._depth = depth;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
generate(pattern: Pattern): string {
|
|
30
|
-
this._visitor.begin(this);
|
|
31
|
-
|
|
32
|
-
const body = this._walkUp(pattern, (pattern: Pattern, args: string[]) => {
|
|
33
|
-
const type = pattern.type;
|
|
34
|
-
this._usedPatterns.add(type);
|
|
35
|
-
|
|
36
|
-
switch (type) {
|
|
37
|
-
case "context": {
|
|
38
|
-
return this._visitor.context(pattern, this._depth);
|
|
39
|
-
}
|
|
40
|
-
case "expression": {
|
|
41
|
-
return this._visitor.expression(pattern, this._depth);
|
|
42
|
-
}
|
|
43
|
-
case "literal": {
|
|
44
|
-
return this._visitor.literal(pattern, this._depth);
|
|
45
|
-
}
|
|
46
|
-
case "not": {
|
|
47
|
-
return this._visitor.not(pattern, args, this._depth);
|
|
48
|
-
}
|
|
49
|
-
case "optional": {
|
|
50
|
-
return this._visitor.optional(pattern, args, this._depth);
|
|
51
|
-
}
|
|
52
|
-
case "options": {
|
|
53
|
-
return this._visitor.options(pattern, args, this._depth);
|
|
54
|
-
}
|
|
55
|
-
case "reference": {
|
|
56
|
-
return this._visitor.reference(pattern, this._depth);
|
|
57
|
-
}
|
|
58
|
-
case "regex": {
|
|
59
|
-
return this._visitor.regex(pattern, this._depth);
|
|
60
|
-
}
|
|
61
|
-
case "infinite-repeat": {
|
|
62
|
-
return this._visitor.infiniteRepeat(pattern, this._depth);
|
|
63
|
-
}
|
|
64
|
-
case "finite-repeat": {
|
|
65
|
-
return this._visitor.finiteRepeat(pattern, this._depth);
|
|
66
|
-
}
|
|
67
|
-
case "right-associated": {
|
|
68
|
-
return this._visitor.rightAssociated(pattern, args, this._depth);
|
|
69
|
-
}
|
|
70
|
-
case "sequence": {
|
|
71
|
-
return this._visitor.sequence(pattern, args, this._depth);
|
|
72
|
-
}
|
|
73
|
-
case "take-until": {
|
|
74
|
-
return this._visitor.takeUntil(pattern, args, this._depth);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
throw Error("Cannot find pattern.");
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const header = this._visitor.header(Array.from(this._usedPatterns));
|
|
82
|
-
const footer = this._visitor.footer();
|
|
83
|
-
|
|
84
|
-
this._visitor.end();
|
|
85
|
-
|
|
86
|
-
return `${header}${body}${footer}`;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
private _walkUp(pattern: Pattern, callback: (pattern: Pattern, args: string[]) => string): string {
|
|
90
|
-
const results: string[] = [];
|
|
91
|
-
|
|
92
|
-
if (this._terminalPatterns.includes(pattern.type)) {
|
|
93
|
-
return callback(pattern, []);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
pattern.children.forEach(p => {
|
|
97
|
-
this._depth++;
|
|
98
|
-
results.push(this._walkUp(p, callback));
|
|
99
|
-
this._depth--;
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
const filteredResults = results.filter(s => s.length > 0);
|
|
103
|
-
|
|
104
|
-
return callback(pattern, filteredResults);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { Pattern } from "../patterns/Pattern";
|
|
2
|
-
import { IGenerator } from "./igenerator";
|
|
3
|
-
|
|
4
|
-
export interface IVisitor {
|
|
5
|
-
begin(generator: IGenerator): void;
|
|
6
|
-
end(): void;
|
|
7
|
-
header(usedPatterns: string[]): string;
|
|
8
|
-
footer(): string;
|
|
9
|
-
|
|
10
|
-
context(pattern: Pattern, depth: number): string;
|
|
11
|
-
expression(pattern: Pattern, depth: number): string;
|
|
12
|
-
literal(pattern: Pattern, depth: number): string;
|
|
13
|
-
not(pattern: Pattern, args: string[], depth: number): string;
|
|
14
|
-
optional(pattern: Pattern, args: string[], depth: number): string;
|
|
15
|
-
options(pattern: Pattern, args: string[], depth: number): string;
|
|
16
|
-
reference(pattern: Pattern, depth: number): string;
|
|
17
|
-
|
|
18
|
-
regex(pattern: Pattern, depth: number): string;
|
|
19
|
-
infiniteRepeat(pattern: Pattern, depth: number): string;
|
|
20
|
-
finiteRepeat(pattern: Pattern, depth: number): string
|
|
21
|
-
rightAssociated(pattern: Pattern, args: string[], depth: number): string;
|
|
22
|
-
sequence(pattern: Pattern, args: string[], depth: number): string;
|
|
23
|
-
takeUntil(pattern: Pattern, args: string[], depth: number): string;
|
|
24
|
-
}
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import { Context } from "../patterns/Context";
|
|
2
|
-
import { Expression } from "../patterns/Expression";
|
|
3
|
-
import { Literal } from "../patterns/Literal";
|
|
4
|
-
import { Pattern } from "../patterns/Pattern";
|
|
5
|
-
import { Regex } from "../patterns/Regex";
|
|
6
|
-
import { Repeat } from "../patterns/Repeat";
|
|
7
|
-
import { IGenerator } from "./igenerator";
|
|
8
|
-
import { IVisitor } from "./ivisitor";
|
|
9
|
-
|
|
10
|
-
const importMap: any = {
|
|
11
|
-
"literal": "Literal",
|
|
12
|
-
"optional": "Optional",
|
|
13
|
-
"options": "Options",
|
|
14
|
-
"reference": "Reference",
|
|
15
|
-
"regex": "Regex",
|
|
16
|
-
"repeat": "Repeat",
|
|
17
|
-
"right-associated": "RightAssociation",
|
|
18
|
-
"sequence": "Sequence",
|
|
19
|
-
"take-until": "TakeUntil",
|
|
20
|
-
"context": "Context",
|
|
21
|
-
"expression": "Expression"
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
export class TypescriptVisitor implements IVisitor {
|
|
25
|
-
private _generator: IGenerator | null = null;
|
|
26
|
-
|
|
27
|
-
get generator() {
|
|
28
|
-
if (this._generator == null) {
|
|
29
|
-
throw new Error("No Generator Found");
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return this._generator;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
begin(generator: IGenerator) {
|
|
36
|
-
this._generator = generator;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
end() { }
|
|
40
|
-
|
|
41
|
-
header( patterns: string[]): string {
|
|
42
|
-
console.log(patterns);
|
|
43
|
-
return `import { ${patterns.map(p => importMap[p]).join(", ")} } from "../index.ts";`;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
footer(): string {
|
|
47
|
-
return "";
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
context(pattern: Pattern, depth: number): string {
|
|
51
|
-
const name = pattern.name;
|
|
52
|
-
const context = pattern as Context;
|
|
53
|
-
const contextPatterns = context.getPatternsWithinContext();
|
|
54
|
-
|
|
55
|
-
this.generator.setDepth(depth);
|
|
56
|
-
|
|
57
|
-
const contextPatternString = this.generator.generate(context.children[0]);
|
|
58
|
-
|
|
59
|
-
const contextPatternsString = this._indent(Object.values(contextPatterns).map(p => {
|
|
60
|
-
this.generator.setDepth(depth + 2);
|
|
61
|
-
return this.generator.generate(p);
|
|
62
|
-
}), depth + 2);
|
|
63
|
-
|
|
64
|
-
return `new Context("${name}",${this._generateTabs(depth + 1)}${contextPatternString}, [${contextPatternsString.join(", ")}${this._generateTabs(depth + 1)}])`;
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
expression(pattern: Pattern, depth: number): string {
|
|
69
|
-
const name = pattern.name;
|
|
70
|
-
const expression = pattern as Expression;
|
|
71
|
-
const patterns = expression.originalPatterns;
|
|
72
|
-
|
|
73
|
-
const patternsString = this._indent(patterns.map(p => {
|
|
74
|
-
this.generator.setDepth(depth + 2);
|
|
75
|
-
return this.generator.generate(p);
|
|
76
|
-
}), depth + 2);
|
|
77
|
-
|
|
78
|
-
return `new Expression("${name}", [${patternsString.join(", ")}${this._generateTabs(depth)}])`;
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
literal(pattern: Pattern): string {
|
|
83
|
-
const name = pattern.name;
|
|
84
|
-
const literal = pattern as Literal;
|
|
85
|
-
return `new Literal("${name}", "${this._escapeString(literal.token)}")`;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
not(pattern: Pattern, args: string[], depth: number): string {
|
|
89
|
-
args = this._indent(args, depth + 1);
|
|
90
|
-
|
|
91
|
-
const name = pattern.name;
|
|
92
|
-
return `new Not("${name}", ${args.join("")})`;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
optional(pattern: Pattern, args: string[], depth: number): string {
|
|
96
|
-
args = this._indent(args, depth + 1);
|
|
97
|
-
const name = pattern.name;
|
|
98
|
-
return `new Optional("${name}", ${args.join("")})`;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
options(pattern: Pattern, args: string[], depth: number): string {
|
|
102
|
-
args = this._indent(args, depth + 1);
|
|
103
|
-
const name = pattern.name;
|
|
104
|
-
return `new Options("${name}", [${args.join(", ")}${this._generateTabs(depth)}])`;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
reference(pattern: Pattern): string {
|
|
108
|
-
const name = pattern.name;
|
|
109
|
-
return `new Reference("${name}")`;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
regex(pattern: Pattern): string {
|
|
113
|
-
const name = pattern.name;
|
|
114
|
-
const regex = pattern as Regex;
|
|
115
|
-
return `new Literal("${name}", "${this._escapeString(regex.regex)}")`;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
infiniteRepeat(pattern: Pattern, depth: number): string {
|
|
119
|
-
const name = pattern.name;
|
|
120
|
-
const repeat = pattern as Repeat;
|
|
121
|
-
this.generator.setDepth(depth);
|
|
122
|
-
const repeatPattern = repeat.pattern;
|
|
123
|
-
const options = repeat.options;
|
|
124
|
-
const repeatPatternString = this.generator.generate(repeatPattern);
|
|
125
|
-
let dividerString = "null";
|
|
126
|
-
|
|
127
|
-
if (options.divider != null) {
|
|
128
|
-
dividerString = this.generator.generate(options.divider);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
return `new Repeat("${name}", ${this._generateTabs(depth + 1)}${repeatPatternString}, {min: ${repeat.min}, divider: ${dividerString}})`;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
finiteRepeat(pattern: Pattern, depth: number): string {
|
|
135
|
-
const name = pattern.name;
|
|
136
|
-
const repeat = pattern as Repeat;
|
|
137
|
-
this.generator.setDepth(depth);
|
|
138
|
-
|
|
139
|
-
const repeatPattern = repeat.pattern;
|
|
140
|
-
const options = repeat.options;
|
|
141
|
-
const repeatPatternString = this.generator.generate(repeatPattern);
|
|
142
|
-
let dividerString = "null";
|
|
143
|
-
|
|
144
|
-
if (options.divider != null) {
|
|
145
|
-
dividerString = this.generator.generate(options.divider);
|
|
146
|
-
}
|
|
147
|
-
return `new Repeat("${name}", ${this._generateTabs(depth + 1)}${repeatPatternString}, {min: ${repeat.min}, max: ${repeat.max} divider: ${dividerString}})`;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
rightAssociated(_: Pattern, args: string[], depth: number) {
|
|
151
|
-
args = this._indent(args, depth + 1);
|
|
152
|
-
return `new RightAssociation(${args.join("")})`;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
sequence(pattern: Pattern, args: string[], depth: number): string {
|
|
156
|
-
args = this._indent(args, depth + 1);
|
|
157
|
-
const name = pattern.name;
|
|
158
|
-
return `new Sequence("${name}", [${args.join(", ")}${this._generateTabs(depth)}])`;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
takeUntil(pattern: Pattern, args: string[], depth: number): string {
|
|
162
|
-
args = this._indent(args, depth + 1);
|
|
163
|
-
const name = pattern.name;
|
|
164
|
-
return `new TakeUntil("${name}", ${args.join("")})`;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
private _escapeString(value: string) {
|
|
168
|
-
return value.replaceAll('"', '\\"');
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
private _generateTabs(depth: number) {
|
|
172
|
-
return "\n" + new Array(depth).fill(" ").join("");
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
private _indent(args: string[], depth: number) {
|
|
176
|
-
return args.map(s => this._generateTabs(depth) + s);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
}
|