clarity-pattern-parser 3.0.7 → 3.0.9
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/Cursor.js +105 -0
- package/dist/Cursor.js.map +1 -0
- package/dist/CursorHistory.js +104 -0
- package/dist/CursorHistory.js.map +1 -0
- package/dist/Permutor.js +52 -0
- package/dist/Permutor.js.map +1 -0
- package/dist/TextSuggester.js +223 -0
- package/dist/TextSuggester.js.map +1 -0
- package/dist/ast/CompositeNode.js +17 -0
- package/dist/ast/CompositeNode.js.map +1 -0
- package/dist/ast/Node.js +16 -0
- package/dist/ast/Node.js.map +1 -0
- package/dist/ast/ValueNode.js +14 -0
- package/dist/ast/ValueNode.js.map +1 -0
- package/dist/ast/Visitor.d.ts +2 -2
- package/dist/ast/Visitor.js +209 -0
- package/dist/ast/Visitor.js.map +1 -0
- package/dist/index.browser.js +38 -32
- package/dist/index.browser.js.map +1 -1
- package/dist/index.esm.js +38 -32
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +38 -32
- package/dist/index.js.map +1 -1
- package/dist/patterns/ParseError.js +9 -0
- package/dist/patterns/ParseError.js.map +1 -0
- package/dist/patterns/Pattern.js +127 -0
- package/dist/patterns/Pattern.js.map +1 -0
- package/dist/patterns/RecursivePattern.js +65 -0
- package/dist/patterns/RecursivePattern.js.map +1 -0
- package/dist/patterns/composite/AndComposite.js +117 -0
- package/dist/patterns/composite/AndComposite.js.map +1 -0
- package/dist/patterns/composite/CompositePattern.js +7 -0
- package/dist/patterns/composite/CompositePattern.js.map +1 -0
- package/dist/patterns/composite/OptionalComposite.js +29 -0
- package/dist/patterns/composite/OptionalComposite.js.map +1 -0
- package/dist/patterns/composite/OrComposite.js +69 -0
- package/dist/patterns/composite/OrComposite.js.map +1 -0
- package/dist/patterns/composite/RepeatComposite.js +83 -0
- package/dist/patterns/composite/RepeatComposite.js.map +1 -0
- package/dist/patterns/value/AndValue.js +118 -0
- package/dist/patterns/value/AndValue.js.map +1 -0
- package/dist/patterns/value/AnyOfThese.js +59 -0
- package/dist/patterns/value/AnyOfThese.js.map +1 -0
- package/dist/patterns/value/Literal.js +63 -0
- package/dist/patterns/value/Literal.js.map +1 -0
- package/dist/patterns/value/NotValue.js +70 -0
- package/dist/patterns/value/NotValue.js.map +1 -0
- package/dist/patterns/value/OptionalValue.js +32 -0
- package/dist/patterns/value/OptionalValue.js.map +1 -0
- package/dist/patterns/value/OrValue.js +73 -0
- package/dist/patterns/value/OrValue.js.map +1 -0
- package/dist/patterns/value/RegexValue.js +69 -0
- package/dist/patterns/value/RegexValue.js.map +1 -0
- package/dist/patterns/value/RepeatValue.js +84 -0
- package/dist/patterns/value/RepeatValue.js.map +1 -0
- package/dist/patterns/value/ValuePattern.js +7 -0
- package/dist/patterns/value/ValuePattern.js.map +1 -0
- package/package.json +1 -1
- package/src/TextSuggester.ts +15 -7
- package/src/ast/Visitor.ts +40 -40
- package/src/tests/TextSuggester.test.ts +15 -0
- package/src/tests/javascriptPatterns/json.ts +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AndValue.js","sourceRoot":"","sources":["../../../src/patterns/value/AndValue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import ValuePattern from "./ValuePattern";
|
|
2
|
+
import ParseError from "../ParseError";
|
|
3
|
+
import ValueNode from "../../ast/ValueNode";
|
|
4
|
+
export default class AnyOfThese extends ValuePattern {
|
|
5
|
+
constructor(name, characters) {
|
|
6
|
+
super("any-of-these", name);
|
|
7
|
+
this.node = null;
|
|
8
|
+
this.mark = 0;
|
|
9
|
+
this.characters = characters;
|
|
10
|
+
this._assertArguments();
|
|
11
|
+
}
|
|
12
|
+
_assertArguments() {
|
|
13
|
+
if (typeof this.characters !== "string") {
|
|
14
|
+
throw new Error("Invalid Arguments: The characters argument needs to be a string of characters.");
|
|
15
|
+
}
|
|
16
|
+
if (this.characters.length < 1) {
|
|
17
|
+
throw new Error("Invalid Arguments: The characters argument needs to be at least one character long.");
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
parse(cursor) {
|
|
21
|
+
this._reset(cursor);
|
|
22
|
+
this._tryPattern();
|
|
23
|
+
return this.node;
|
|
24
|
+
}
|
|
25
|
+
_reset(cursor) {
|
|
26
|
+
this.cursor = cursor;
|
|
27
|
+
this.mark = this.cursor.mark();
|
|
28
|
+
this.node = null;
|
|
29
|
+
}
|
|
30
|
+
_tryPattern() {
|
|
31
|
+
if (this._isMatch()) {
|
|
32
|
+
const value = this.cursor.getChar();
|
|
33
|
+
const index = this.cursor.getIndex();
|
|
34
|
+
this.node = new ValueNode("any-of-these", this.name, value, index, index);
|
|
35
|
+
this.cursor.addMatch(this, this.node);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this._processError();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
_isMatch() {
|
|
42
|
+
return this.characters.indexOf(this.cursor.getChar()) > -1;
|
|
43
|
+
}
|
|
44
|
+
_processError() {
|
|
45
|
+
const message = `ParseError: Expected one of these characters, '${this.characters}' but found '${this.cursor.getChar()}' while parsing for '${this.name}'.`;
|
|
46
|
+
const parseError = new ParseError(message, this.cursor.getIndex(), this);
|
|
47
|
+
this.cursor.throwError(parseError);
|
|
48
|
+
}
|
|
49
|
+
clone(name) {
|
|
50
|
+
if (typeof name !== "string") {
|
|
51
|
+
name = this.name;
|
|
52
|
+
}
|
|
53
|
+
return new AnyOfThese(name, this.characters);
|
|
54
|
+
}
|
|
55
|
+
getTokens() {
|
|
56
|
+
return this.characters.split("");
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=AnyOfThese.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnyOfThese.js","sourceRoot":"","sources":["../../../src/patterns/value/AnyOfThese.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,UAAU,MAAM,eAAe,CAAC;AACvC,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAI5C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,YAAY;IAMlD,YAAY,IAAY,EAAE,UAAkB;QAC1C,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QALvB,SAAI,GAAqB,IAAI,CAAC;QAE9B,SAAI,GAAW,CAAC,CAAC;QAItB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEO,gBAAgB;QACtB,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE;YACvC,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;SACH;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;SACH;IACH,CAAC;IAED,KAAK,CAAC,MAAc;QAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAEO,MAAM,CAAC,MAAc;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAErC,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAE1E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SACvC;aAAM;YACL,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB;IACH,CAAC;IAEO,QAAQ;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;IAEO,aAAa;QACnB,MAAM,OAAO,GAAG,kDACd,IAAI,CAAC,UACP,gBAAgB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,wBAAwB,IAAI,CAAC,IAAI,IAAI,CAAC;QAE3E,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;QACzE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,IAAa;QACjB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC5B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;SAClB;QACD,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import ParseError from "../ParseError";
|
|
2
|
+
import ValueNode from "../../ast/ValueNode";
|
|
3
|
+
import ValuePattern from "./ValuePattern";
|
|
4
|
+
export default class Literal extends ValuePattern {
|
|
5
|
+
constructor(name, literal) {
|
|
6
|
+
super("literal", name);
|
|
7
|
+
this.node = null;
|
|
8
|
+
this.mark = 0;
|
|
9
|
+
this.substring = "";
|
|
10
|
+
this.literal = literal;
|
|
11
|
+
this._assertArguments();
|
|
12
|
+
}
|
|
13
|
+
_assertArguments() {
|
|
14
|
+
if (typeof this.literal !== "string") {
|
|
15
|
+
throw new Error("Invalid Arguments: The literal argument needs to be a string of characters.");
|
|
16
|
+
}
|
|
17
|
+
if (this.literal.length < 1) {
|
|
18
|
+
throw new Error("Invalid Arguments: The literalString argument needs to be at least one character long.");
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
parse(cursor) {
|
|
22
|
+
this._reset(cursor);
|
|
23
|
+
this._tryPattern();
|
|
24
|
+
return this.node;
|
|
25
|
+
}
|
|
26
|
+
_reset(cursor) {
|
|
27
|
+
this.cursor = cursor;
|
|
28
|
+
this.mark = this.cursor.mark();
|
|
29
|
+
this.substring = this.cursor.text.substring(this.mark, this.mark + this.literal.length);
|
|
30
|
+
this.node = null;
|
|
31
|
+
}
|
|
32
|
+
_tryPattern() {
|
|
33
|
+
if (this.substring === this.literal) {
|
|
34
|
+
this._processMatch();
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
this._processError();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
_processError() {
|
|
41
|
+
const message = `ParseError: Expected '${this.literal}' but found '${this.substring}'.`;
|
|
42
|
+
const parseError = new ParseError(message, this.cursor.getIndex(), this);
|
|
43
|
+
this.cursor.throwError(parseError);
|
|
44
|
+
}
|
|
45
|
+
_processMatch() {
|
|
46
|
+
this.node = new ValueNode("literal", this.name, this.substring, this.mark, this.mark + this.literal.length - 1);
|
|
47
|
+
this.cursor.index = this.node.endIndex;
|
|
48
|
+
this.cursor.addMatch(this, this.node);
|
|
49
|
+
}
|
|
50
|
+
clone(name) {
|
|
51
|
+
if (typeof name !== "string") {
|
|
52
|
+
name = this.name;
|
|
53
|
+
}
|
|
54
|
+
return new Literal(name, this.literal);
|
|
55
|
+
}
|
|
56
|
+
getTokenValue() {
|
|
57
|
+
return this.literal;
|
|
58
|
+
}
|
|
59
|
+
getTokens() {
|
|
60
|
+
return [this.getTokenValue()];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=Literal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Literal.js","sourceRoot":"","sources":["../../../src/patterns/value/Literal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import ValuePattern from "./ValuePattern";
|
|
2
|
+
import ValueNode from "../../ast/ValueNode";
|
|
3
|
+
import ParseError from "../ParseError";
|
|
4
|
+
import Pattern from "../Pattern";
|
|
5
|
+
export default class NotValue extends ValuePattern {
|
|
6
|
+
constructor(name, pattern) {
|
|
7
|
+
super("not-value", name, [pattern]);
|
|
8
|
+
this.match = "";
|
|
9
|
+
this.node = null;
|
|
10
|
+
this.mark = 0;
|
|
11
|
+
this._assertArguments();
|
|
12
|
+
}
|
|
13
|
+
_assertArguments() {
|
|
14
|
+
if (!(this.children[0] instanceof Pattern)) {
|
|
15
|
+
throw new Error("Invalid Arguments: Expected the pattern to be a ValuePattern.");
|
|
16
|
+
}
|
|
17
|
+
if (typeof this.name !== "string") {
|
|
18
|
+
throw new Error("Invalid Arguments: Expected name to be a string.");
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
_reset(cursor) {
|
|
22
|
+
this.match = "";
|
|
23
|
+
this.node = null;
|
|
24
|
+
this.cursor = cursor;
|
|
25
|
+
this.mark = this.cursor.mark();
|
|
26
|
+
}
|
|
27
|
+
parse(cursor) {
|
|
28
|
+
this._reset(cursor);
|
|
29
|
+
this._tryPattern();
|
|
30
|
+
return this.node;
|
|
31
|
+
}
|
|
32
|
+
_tryPattern() {
|
|
33
|
+
while (true) {
|
|
34
|
+
const mark = this.cursor.mark();
|
|
35
|
+
this.children[0].parse(this.cursor);
|
|
36
|
+
if (this.cursor.hasUnresolvedError()) {
|
|
37
|
+
this.cursor.resolveError();
|
|
38
|
+
this.cursor.moveToMark(mark);
|
|
39
|
+
this.match += this.cursor.getChar();
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
this.cursor.moveToMark(mark);
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
this._processMatch();
|
|
48
|
+
}
|
|
49
|
+
_processMatch() {
|
|
50
|
+
if (this.match.length === 0) {
|
|
51
|
+
const parseError = new ParseError(`Didn't find any characters that didn't match the ${this.children[0].name} pattern.`, this.mark, this);
|
|
52
|
+
this.cursor.throwError(parseError);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
this.node = new ValueNode("not-value", this.name, this.match, this.mark, this.mark);
|
|
56
|
+
this.cursor.index = this.node.endIndex;
|
|
57
|
+
this.cursor.addMatch(this, this.node);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
clone(name) {
|
|
61
|
+
if (typeof name !== "string") {
|
|
62
|
+
name = this.name;
|
|
63
|
+
}
|
|
64
|
+
return new NotValue(name, this.children[0]);
|
|
65
|
+
}
|
|
66
|
+
getTokens() {
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=NotValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotValue.js","sourceRoot":"","sources":["../../../src/patterns/value/NotValue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import ValuePattern from "./ValuePattern";
|
|
2
|
+
export default class OptionalValue extends ValuePattern {
|
|
3
|
+
constructor(pattern) {
|
|
4
|
+
super("optional-value", "optional-value", [pattern]);
|
|
5
|
+
this._assertArguments();
|
|
6
|
+
}
|
|
7
|
+
_assertArguments() {
|
|
8
|
+
if (!(this.children[0] instanceof ValuePattern)) {
|
|
9
|
+
throw new Error("Invalid Arguments: Expected a ValuePattern.");
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
parse(cursor) {
|
|
13
|
+
const mark = cursor.mark();
|
|
14
|
+
const node = this.children[0].parse(cursor);
|
|
15
|
+
if (cursor.hasUnresolvedError() || node == null) {
|
|
16
|
+
cursor.resolveError();
|
|
17
|
+
cursor.moveToMark(mark);
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
cursor.addMatch(this, node);
|
|
22
|
+
return node;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
clone() {
|
|
26
|
+
return new OptionalValue(this.children[0]);
|
|
27
|
+
}
|
|
28
|
+
getTokens() {
|
|
29
|
+
return this._children[0].getTokens();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=OptionalValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OptionalValue.js","sourceRoot":"","sources":["../../../src/patterns/value/OptionalValue.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAI1C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,YAAY;IACrD,YAAY,OAAqB;QAC/B,KAAK,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,YAAY,CAAC,EAAE;YAC/C,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;SAChE;IACH,CAAC;IAED,KAAK,CAAC,MAAc;QAClB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAE3B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,MAAM,CAAC,kBAAkB,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE;YAC/C,MAAM,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC;SACb;aAAM;YACL,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED,KAAK;QACH,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAiB,CAAC,CAAC;IAC7D,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import ValuePattern from "./ValuePattern";
|
|
2
|
+
import ValueNode from "../../ast/ValueNode";
|
|
3
|
+
import OptionalValue from "./OptionalValue";
|
|
4
|
+
export default class OrValue extends ValuePattern {
|
|
5
|
+
constructor(name, patterns) {
|
|
6
|
+
super("or-value", name, patterns);
|
|
7
|
+
this.index = 0;
|
|
8
|
+
this.errors = [];
|
|
9
|
+
this.node = null;
|
|
10
|
+
this.mark = 0;
|
|
11
|
+
this.parseError = null;
|
|
12
|
+
this._assertArguments();
|
|
13
|
+
}
|
|
14
|
+
_assertArguments() {
|
|
15
|
+
if (this._children.length < 2) {
|
|
16
|
+
throw new Error("Invalid Argument: OrValue needs to have more than one value pattern.");
|
|
17
|
+
}
|
|
18
|
+
const hasOptionalChildren = this._children.some((pattern) => pattern instanceof OptionalValue);
|
|
19
|
+
if (hasOptionalChildren) {
|
|
20
|
+
throw new Error("OrValues cannot have optional values.");
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
_reset(cursor) {
|
|
24
|
+
this.index = 0;
|
|
25
|
+
this.errors = [];
|
|
26
|
+
this.node = null;
|
|
27
|
+
this.cursor = cursor;
|
|
28
|
+
this.mark = cursor.mark();
|
|
29
|
+
}
|
|
30
|
+
parse(cursor) {
|
|
31
|
+
this._reset(cursor);
|
|
32
|
+
this._tryPattern();
|
|
33
|
+
return this.node;
|
|
34
|
+
}
|
|
35
|
+
_tryPattern() {
|
|
36
|
+
while (true) {
|
|
37
|
+
const pattern = this._children[this.index];
|
|
38
|
+
const node = pattern.parse(this.cursor);
|
|
39
|
+
if (this.cursor.hasUnresolvedError()) {
|
|
40
|
+
if (this.index + 1 < this._children.length) {
|
|
41
|
+
this.cursor.resolveError();
|
|
42
|
+
this.index++;
|
|
43
|
+
this.cursor.moveToMark(this.mark);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
this.node = null;
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.node = new ValueNode("or-value", this.name, node.value, node.startIndex, node.endIndex);
|
|
52
|
+
this.cursor.index = this.node.endIndex;
|
|
53
|
+
this.cursor.addMatch(this, this.node);
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
clone(name) {
|
|
59
|
+
if (typeof name !== "string") {
|
|
60
|
+
name = this.name;
|
|
61
|
+
}
|
|
62
|
+
return new OrValue(name, this._children);
|
|
63
|
+
}
|
|
64
|
+
getTokens() {
|
|
65
|
+
const tokens = this._children.map((c) => c.getTokens());
|
|
66
|
+
const hasPrimitiveTokens = tokens.every((t) => t.every((value) => typeof value === "string"));
|
|
67
|
+
if (hasPrimitiveTokens && tokens.length > 0) {
|
|
68
|
+
return tokens.reduce((acc, t) => acc.concat(t), []);
|
|
69
|
+
}
|
|
70
|
+
return this._children[0].getTokens();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=OrValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrValue.js","sourceRoot":"","sources":["../../../src/patterns/value/OrValue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import ParseError from "../ParseError";
|
|
2
|
+
import ValueNode from "../../ast/ValueNode";
|
|
3
|
+
import ValuePattern from "./ValuePattern";
|
|
4
|
+
export default class RegexValue extends ValuePattern {
|
|
5
|
+
constructor(name, regex) {
|
|
6
|
+
super("regex-value", name);
|
|
7
|
+
this.node = null;
|
|
8
|
+
this.substring = "";
|
|
9
|
+
this.regexString = regex;
|
|
10
|
+
this.regex = new RegExp(`^${regex}`, "g");
|
|
11
|
+
this._assertArguments();
|
|
12
|
+
}
|
|
13
|
+
_assertArguments() {
|
|
14
|
+
if (typeof this.regexString !== "string") {
|
|
15
|
+
throw new Error("Invalid Arguments: The regex argument needs to be a string of regex.");
|
|
16
|
+
}
|
|
17
|
+
if (this.regexString.length < 1) {
|
|
18
|
+
throw new Error("Invalid Arguments: The regex string argument needs to be at least one character long.");
|
|
19
|
+
}
|
|
20
|
+
if (this.regexString.charAt(0) === "^") {
|
|
21
|
+
throw new Error("Invalid Arguments: The regex string cannot start with a '^' because it is expected to be in the middle of a string.");
|
|
22
|
+
}
|
|
23
|
+
if (this.regexString.charAt(this.regexString.length - 1) === "$") {
|
|
24
|
+
throw new Error("Invalid Arguments: The regex string cannot end with a '$' because it is expected to be in the middle of a string.");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
parse(cursor) {
|
|
28
|
+
this._reset(cursor);
|
|
29
|
+
this._tryPattern();
|
|
30
|
+
return this.node;
|
|
31
|
+
}
|
|
32
|
+
_reset(cursor) {
|
|
33
|
+
this.cursor = cursor;
|
|
34
|
+
this.regex.lastIndex = 0;
|
|
35
|
+
this.substring = this.cursor.text.substr(this.cursor.getIndex());
|
|
36
|
+
this.node = null;
|
|
37
|
+
}
|
|
38
|
+
_tryPattern() {
|
|
39
|
+
const result = this.regex.exec(this.substring);
|
|
40
|
+
if (result != null && result.index === 0) {
|
|
41
|
+
const currentIndex = this.cursor.getIndex();
|
|
42
|
+
const newIndex = currentIndex + result[0].length - 1;
|
|
43
|
+
this.node = new ValueNode("regex-value", this.name, result[0], currentIndex, newIndex);
|
|
44
|
+
this.cursor.index = newIndex;
|
|
45
|
+
this.cursor.addMatch(this, this.node);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this._processError();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
_processError() {
|
|
52
|
+
const message = `ParseError: Expected regex pattern of '${this.regexString}' but found '${this.substring}'.`;
|
|
53
|
+
const parseError = new ParseError(message, this.cursor.getIndex(), this);
|
|
54
|
+
this.cursor.throwError(parseError);
|
|
55
|
+
}
|
|
56
|
+
clone(name) {
|
|
57
|
+
if (typeof name !== "string") {
|
|
58
|
+
name = this.name;
|
|
59
|
+
}
|
|
60
|
+
return new RegexValue(name, this.regexString);
|
|
61
|
+
}
|
|
62
|
+
getTokenValue() {
|
|
63
|
+
return this.name;
|
|
64
|
+
}
|
|
65
|
+
getTokens() {
|
|
66
|
+
return [this.name];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=RegexValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RegexValue.js","sourceRoot":"","sources":["../../../src/patterns/value/RegexValue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import ValuePattern from "./ValuePattern";
|
|
2
|
+
import ValueNode from "../../ast/ValueNode";
|
|
3
|
+
import ParseError from "../ParseError";
|
|
4
|
+
import OptionalValue from "./OptionalValue";
|
|
5
|
+
export default class RepeatValue extends ValuePattern {
|
|
6
|
+
constructor(name, pattern, divider) {
|
|
7
|
+
super("repeat-value", name, divider != null ? [pattern, divider] : [pattern]);
|
|
8
|
+
this.nodes = [];
|
|
9
|
+
this.mark = 0;
|
|
10
|
+
this.node = null;
|
|
11
|
+
this._pattern = this.children[0];
|
|
12
|
+
this._divider = this.children[1];
|
|
13
|
+
this._assertArguments();
|
|
14
|
+
}
|
|
15
|
+
_assertArguments() {
|
|
16
|
+
if (this._pattern instanceof OptionalValue) {
|
|
17
|
+
throw new Error("Invalid Arguments: The pattern cannot be a optional pattern.");
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
_reset(cursor) {
|
|
21
|
+
this.nodes = [];
|
|
22
|
+
this.cursor = cursor;
|
|
23
|
+
this.mark = this.cursor.mark();
|
|
24
|
+
}
|
|
25
|
+
parse(cursor) {
|
|
26
|
+
this._reset(cursor);
|
|
27
|
+
this._tryPattern();
|
|
28
|
+
return this.node;
|
|
29
|
+
}
|
|
30
|
+
_tryPattern() {
|
|
31
|
+
while (true) {
|
|
32
|
+
const node = this._pattern.parse(this.cursor);
|
|
33
|
+
if (this.cursor.hasUnresolvedError()) {
|
|
34
|
+
this._processMatch();
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this.nodes.push(node);
|
|
39
|
+
if (node.endIndex === this.cursor.lastIndex()) {
|
|
40
|
+
this._processMatch();
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
this.cursor.next();
|
|
44
|
+
if (this._divider != null) {
|
|
45
|
+
const mark = this.cursor.mark();
|
|
46
|
+
const node = this._divider.parse(this.cursor);
|
|
47
|
+
if (this.cursor.hasUnresolvedError()) {
|
|
48
|
+
this.cursor.moveToMark(mark);
|
|
49
|
+
this._processMatch();
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
this.nodes.push(node);
|
|
54
|
+
this.cursor.next();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
_processMatch() {
|
|
61
|
+
this.cursor.resolveError();
|
|
62
|
+
if (this.nodes.length === 0) {
|
|
63
|
+
const parseError = new ParseError(`Did not find a repeating match of ${this.name}.`, this.mark, this);
|
|
64
|
+
this.cursor.throwError(parseError);
|
|
65
|
+
this.node = null;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
const value = this.nodes.map((node) => node.value).join("");
|
|
69
|
+
this.node = new ValueNode("repeat-value", this.name, value, this.nodes[0].startIndex, this.nodes[this.nodes.length - 1].endIndex);
|
|
70
|
+
this.cursor.index = this.node.endIndex;
|
|
71
|
+
this.cursor.addMatch(this, this.node);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
clone(name) {
|
|
75
|
+
if (typeof name !== "string") {
|
|
76
|
+
name = this.name;
|
|
77
|
+
}
|
|
78
|
+
return new RepeatValue(name, this._pattern, this._divider);
|
|
79
|
+
}
|
|
80
|
+
getTokens() {
|
|
81
|
+
return this._pattern.getTokens();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=RepeatValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RepeatValue.js","sourceRoot":"","sources":["../../../src/patterns/value/RepeatValue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValuePattern.js","sourceRoot":"","sources":["../../../src/patterns/value/ValuePattern.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AAEjC,MAAM,CAAC,OAAO,OAAgB,YAAa,SAAQ,OAAO;IACxD,YAAY,IAAY,EAAE,IAAY,EAAE,WAA2B,EAAE;QACnE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9B,CAAC;CAEF"}
|
package/package.json
CHANGED
package/src/TextSuggester.ts
CHANGED
|
@@ -182,14 +182,9 @@ export default class TextSuggester {
|
|
|
182
182
|
|
|
183
183
|
if (this.patternMatch?.astNode == null) {
|
|
184
184
|
let options = this.rootPattern?.getTokens();
|
|
185
|
-
const parts = this.text.split(" ").filter((part: any) => {
|
|
186
|
-
return part.length > 0;
|
|
187
|
-
});
|
|
188
185
|
|
|
189
186
|
options = options?.filter((option: any) => {
|
|
190
|
-
return
|
|
191
|
-
return option.indexOf(part) > -1;
|
|
192
|
-
});
|
|
187
|
+
return option.indexOf(this.text) > -1;
|
|
193
188
|
});
|
|
194
189
|
|
|
195
190
|
if (options?.length === 0) {
|
|
@@ -197,11 +192,24 @@ export default class TextSuggester {
|
|
|
197
192
|
return;
|
|
198
193
|
}
|
|
199
194
|
|
|
195
|
+
const values = options?.map((option) => {
|
|
196
|
+
const parts = option.split(this.text);
|
|
197
|
+
return parts[1];
|
|
198
|
+
});
|
|
199
|
+
|
|
200
200
|
this.tokens = {
|
|
201
201
|
startIndex: 0,
|
|
202
|
-
values:
|
|
202
|
+
values: values || [],
|
|
203
203
|
};
|
|
204
204
|
|
|
205
|
+
this.matchedText = this.text;
|
|
206
|
+
this.match = {
|
|
207
|
+
text: this.text,
|
|
208
|
+
startIndex: 0,
|
|
209
|
+
endIndex: this.text.length - 1,
|
|
210
|
+
};
|
|
211
|
+
this.error = null;
|
|
212
|
+
|
|
205
213
|
return;
|
|
206
214
|
}
|
|
207
215
|
|