@noldova/context.parsers.regex 0.0.0-stage → 0.0.2
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/LICENSE +21 -0
- package/api/index.d.ts +1752 -0
- package/api/index.js +78 -0
- package/api/index.js.map +1 -0
- package/extensions/nodes/assertions/regex-end-assertion.node.extensions.js +12 -0
- package/extensions/nodes/assertions/regex-end-assertion.node.extensions.js.map +1 -0
- package/extensions/nodes/assertions/regex-non-word-boundary-assertion.node.extensions.js +12 -0
- package/extensions/nodes/assertions/regex-non-word-boundary-assertion.node.extensions.js.map +1 -0
- package/extensions/nodes/assertions/regex-start-assertion.node.extensions.js +12 -0
- package/extensions/nodes/assertions/regex-start-assertion.node.extensions.js.map +1 -0
- package/extensions/nodes/assertions/regex-word-boundary-assertion.node.extensions.js +12 -0
- package/extensions/nodes/assertions/regex-word-boundary-assertion.node.extensions.js.map +1 -0
- package/extensions/nodes/classes/regex-character-class.node.extensions.js +12 -0
- package/extensions/nodes/classes/regex-character-class.node.extensions.js.map +1 -0
- package/extensions/nodes/classes/regex-class-intersection.node.extensions.js +12 -0
- package/extensions/nodes/classes/regex-class-intersection.node.extensions.js.map +1 -0
- package/extensions/nodes/classes/regex-class-string-disjunction.node.extensions.js +12 -0
- package/extensions/nodes/classes/regex-class-string-disjunction.node.extensions.js.map +1 -0
- package/extensions/nodes/classes/regex-class-subtraction.node.extensions.js +12 -0
- package/extensions/nodes/classes/regex-class-subtraction.node.extensions.js.map +1 -0
- package/extensions/nodes/classes/regex-class-union.node.extensions.js +12 -0
- package/extensions/nodes/classes/regex-class-union.node.extensions.js.map +1 -0
- package/extensions/nodes/escapes/regex-backspace-escape.node.extensions.js +13 -0
- package/extensions/nodes/escapes/regex-backspace-escape.node.extensions.js.map +1 -0
- package/extensions/nodes/escapes/regex-carriage-return-escape.node.extensions.js +13 -0
- package/extensions/nodes/escapes/regex-carriage-return-escape.node.extensions.js.map +1 -0
- package/extensions/nodes/escapes/regex-class-control-escape.node.extensions.js +12 -0
- package/extensions/nodes/escapes/regex-class-control-escape.node.extensions.js.map +1 -0
- package/extensions/nodes/escapes/regex-control-letter-escape.node.extensions.js +12 -0
- package/extensions/nodes/escapes/regex-control-letter-escape.node.extensions.js.map +1 -0
- package/extensions/nodes/escapes/regex-form-feed-escape.node.extensions.js +13 -0
- package/extensions/nodes/escapes/regex-form-feed-escape.node.extensions.js.map +1 -0
- package/extensions/nodes/escapes/regex-hex-escape.node.extensions.js +12 -0
- package/extensions/nodes/escapes/regex-hex-escape.node.extensions.js.map +1 -0
- package/extensions/nodes/escapes/regex-identity-escape.node.extensions.js +12 -0
- package/extensions/nodes/escapes/regex-identity-escape.node.extensions.js.map +1 -0
- package/extensions/nodes/escapes/regex-legacy-octal-escape.node.extensions.js +12 -0
- package/extensions/nodes/escapes/regex-legacy-octal-escape.node.extensions.js.map +1 -0
- package/extensions/nodes/escapes/regex-newline-escape.node.extensions.js +13 -0
- package/extensions/nodes/escapes/regex-newline-escape.node.extensions.js.map +1 -0
- package/extensions/nodes/escapes/regex-null-escape.node.extensions.js +13 -0
- package/extensions/nodes/escapes/regex-null-escape.node.extensions.js.map +1 -0
- package/extensions/nodes/escapes/regex-tab-escape.node.extensions.js +13 -0
- package/extensions/nodes/escapes/regex-tab-escape.node.extensions.js.map +1 -0
- package/extensions/nodes/escapes/regex-unicode-escape.node.extensions.js +12 -0
- package/extensions/nodes/escapes/regex-unicode-escape.node.extensions.js.map +1 -0
- package/extensions/nodes/escapes/regex-unicode-property-escape.node.extensions.js +12 -0
- package/extensions/nodes/escapes/regex-unicode-property-escape.node.extensions.js.map +1 -0
- package/extensions/nodes/escapes/regex-vertical-tab-escape.node.extensions.js +13 -0
- package/extensions/nodes/escapes/regex-vertical-tab-escape.node.extensions.js.map +1 -0
- package/extensions/nodes/node.extensions.js +78 -0
- package/extensions/nodes/node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-ampersand-ampersand.node.extensions.js +21 -0
- package/extensions/nodes/punctuators/regex-ampersand-ampersand.node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-asterisk.node.extensions.js +16 -0
- package/extensions/nodes/punctuators/regex-asterisk.node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-bar.node.extensions.js +12 -0
- package/extensions/nodes/punctuators/regex-bar.node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-close-brace.node.extensions.js +16 -0
- package/extensions/nodes/punctuators/regex-close-brace.node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-close-bracket.node.extensions.js +16 -0
- package/extensions/nodes/punctuators/regex-close-bracket.node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-close-parenthesis.node.extensions.js +12 -0
- package/extensions/nodes/punctuators/regex-close-parenthesis.node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-colon.node.extensions.js +14 -0
- package/extensions/nodes/punctuators/regex-colon.node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-comma.node.extensions.js +14 -0
- package/extensions/nodes/punctuators/regex-comma.node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-equals.node.extensions.js +14 -0
- package/extensions/nodes/punctuators/regex-equals.node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-exclamation.node.extensions.js +14 -0
- package/extensions/nodes/punctuators/regex-exclamation.node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-greater-than.node.extensions.js +14 -0
- package/extensions/nodes/punctuators/regex-greater-than.node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-hyphen-hyphen.node.extensions.js +21 -0
- package/extensions/nodes/punctuators/regex-hyphen-hyphen.node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-hyphen.node.extensions.js +18 -0
- package/extensions/nodes/punctuators/regex-hyphen.node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-less-than.node.extensions.js +14 -0
- package/extensions/nodes/punctuators/regex-less-than.node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-open-brace.node.extensions.js +16 -0
- package/extensions/nodes/punctuators/regex-open-brace.node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-open-bracket.node.extensions.js +12 -0
- package/extensions/nodes/punctuators/regex-open-bracket.node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-open-parenthesis.node.extensions.js +12 -0
- package/extensions/nodes/punctuators/regex-open-parenthesis.node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-plus.node.extensions.js +16 -0
- package/extensions/nodes/punctuators/regex-plus.node.extensions.js.map +1 -0
- package/extensions/nodes/punctuators/regex-question.node.extensions.js +19 -0
- package/extensions/nodes/punctuators/regex-question.node.extensions.js.map +1 -0
- package/extensions/nodes/regex-character.node.extensions.js +12 -0
- package/extensions/nodes/regex-character.node.extensions.js.map +1 -0
- package/models/diagnostics/regex-diagnostic-templates.js +53 -0
- package/models/diagnostics/regex-diagnostic-templates.js.map +1 -0
- package/models/nodes/assertions/regex-end-assertion.node.js +15 -0
- package/models/nodes/assertions/regex-end-assertion.node.js.map +1 -0
- package/models/nodes/assertions/regex-lookahead-assertion.node.js +18 -0
- package/models/nodes/assertions/regex-lookahead-assertion.node.js.map +1 -0
- package/models/nodes/assertions/regex-lookbehind-assertion.node.js +18 -0
- package/models/nodes/assertions/regex-lookbehind-assertion.node.js.map +1 -0
- package/models/nodes/assertions/regex-non-word-boundary-assertion.node.js +15 -0
- package/models/nodes/assertions/regex-non-word-boundary-assertion.node.js.map +1 -0
- package/models/nodes/assertions/regex-start-assertion.node.js +15 -0
- package/models/nodes/assertions/regex-start-assertion.node.js.map +1 -0
- package/models/nodes/assertions/regex-word-boundary-assertion.node.js +15 -0
- package/models/nodes/assertions/regex-word-boundary-assertion.node.js.map +1 -0
- package/models/nodes/classes/regex-character-class.node.js +20 -0
- package/models/nodes/classes/regex-character-class.node.js.map +1 -0
- package/models/nodes/classes/regex-character-range.node.js +18 -0
- package/models/nodes/classes/regex-character-range.node.js.map +1 -0
- package/models/nodes/classes/regex-class-intersection.node.js +17 -0
- package/models/nodes/classes/regex-class-intersection.node.js.map +1 -0
- package/models/nodes/classes/regex-class-string-disjunction.node.js +19 -0
- package/models/nodes/classes/regex-class-string-disjunction.node.js.map +1 -0
- package/models/nodes/classes/regex-class-string.node.js +14 -0
- package/models/nodes/classes/regex-class-string.node.js.map +1 -0
- package/models/nodes/classes/regex-class-subtraction.node.js +17 -0
- package/models/nodes/classes/regex-class-subtraction.node.js.map +1 -0
- package/models/nodes/classes/regex-class-union.node.js +14 -0
- package/models/nodes/classes/regex-class-union.node.js.map +1 -0
- package/models/nodes/escapes/regex-backreference.node.js +16 -0
- package/models/nodes/escapes/regex-backreference.node.js.map +1 -0
- package/models/nodes/escapes/regex-backspace-escape.node.js +15 -0
- package/models/nodes/escapes/regex-backspace-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-carriage-return-escape.node.js +15 -0
- package/models/nodes/escapes/regex-carriage-return-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-class-control-escape.node.js +16 -0
- package/models/nodes/escapes/regex-class-control-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-control-letter-escape.node.js +16 -0
- package/models/nodes/escapes/regex-control-letter-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-decimal-escape.node.js +16 -0
- package/models/nodes/escapes/regex-decimal-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-digit-escape.node.js +15 -0
- package/models/nodes/escapes/regex-digit-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-form-feed-escape.node.js +15 -0
- package/models/nodes/escapes/regex-form-feed-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-hex-escape.node.js +16 -0
- package/models/nodes/escapes/regex-hex-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-identity-escape.node.js +16 -0
- package/models/nodes/escapes/regex-identity-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-legacy-octal-escape.node.js +16 -0
- package/models/nodes/escapes/regex-legacy-octal-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-named-backreference.node.js +16 -0
- package/models/nodes/escapes/regex-named-backreference.node.js.map +1 -0
- package/models/nodes/escapes/regex-newline-escape.node.js +15 -0
- package/models/nodes/escapes/regex-newline-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-non-digit-escape.node.js +15 -0
- package/models/nodes/escapes/regex-non-digit-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-non-whitespace-escape.node.js +15 -0
- package/models/nodes/escapes/regex-non-whitespace-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-non-word-escape.node.js +15 -0
- package/models/nodes/escapes/regex-non-word-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-null-escape.node.js +15 -0
- package/models/nodes/escapes/regex-null-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-tab-escape.node.js +15 -0
- package/models/nodes/escapes/regex-tab-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-unicode-escape.node.js +16 -0
- package/models/nodes/escapes/regex-unicode-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-unicode-property-escape.node.js +22 -0
- package/models/nodes/escapes/regex-unicode-property-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-vertical-tab-escape.node.js +15 -0
- package/models/nodes/escapes/regex-vertical-tab-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-whitespace-escape.node.js +15 -0
- package/models/nodes/escapes/regex-whitespace-escape.node.js.map +1 -0
- package/models/nodes/escapes/regex-word-escape.node.js +15 -0
- package/models/nodes/escapes/regex-word-escape.node.js.map +1 -0
- package/models/nodes/groups/regex-capturing-group.node.js +18 -0
- package/models/nodes/groups/regex-capturing-group.node.js.map +1 -0
- package/models/nodes/groups/regex-modifier-group.node.js +20 -0
- package/models/nodes/groups/regex-modifier-group.node.js.map +1 -0
- package/models/nodes/groups/regex-named-capturing-group.node.js +20 -0
- package/models/nodes/groups/regex-named-capturing-group.node.js.map +1 -0
- package/models/nodes/groups/regex-non-capturing-group.node.js +16 -0
- package/models/nodes/groups/regex-non-capturing-group.node.js.map +1 -0
- package/models/nodes/punctuators/regex-ampersand-ampersand.node.js +15 -0
- package/models/nodes/punctuators/regex-ampersand-ampersand.node.js.map +1 -0
- package/models/nodes/punctuators/regex-asterisk.node.js +15 -0
- package/models/nodes/punctuators/regex-asterisk.node.js.map +1 -0
- package/models/nodes/punctuators/regex-bar.node.js +15 -0
- package/models/nodes/punctuators/regex-bar.node.js.map +1 -0
- package/models/nodes/punctuators/regex-class-string-disjunction-start.node.js +15 -0
- package/models/nodes/punctuators/regex-class-string-disjunction-start.node.js.map +1 -0
- package/models/nodes/punctuators/regex-close-brace.node.js +15 -0
- package/models/nodes/punctuators/regex-close-brace.node.js.map +1 -0
- package/models/nodes/punctuators/regex-close-bracket.node.js +15 -0
- package/models/nodes/punctuators/regex-close-bracket.node.js.map +1 -0
- package/models/nodes/punctuators/regex-close-parenthesis.node.js +15 -0
- package/models/nodes/punctuators/regex-close-parenthesis.node.js.map +1 -0
- package/models/nodes/punctuators/regex-colon.node.js +15 -0
- package/models/nodes/punctuators/regex-colon.node.js.map +1 -0
- package/models/nodes/punctuators/regex-comma.node.js +15 -0
- package/models/nodes/punctuators/regex-comma.node.js.map +1 -0
- package/models/nodes/punctuators/regex-equals.node.js +15 -0
- package/models/nodes/punctuators/regex-equals.node.js.map +1 -0
- package/models/nodes/punctuators/regex-exclamation.node.js +15 -0
- package/models/nodes/punctuators/regex-exclamation.node.js.map +1 -0
- package/models/nodes/punctuators/regex-greater-than.node.js +15 -0
- package/models/nodes/punctuators/regex-greater-than.node.js.map +1 -0
- package/models/nodes/punctuators/regex-hyphen-hyphen.node.js +15 -0
- package/models/nodes/punctuators/regex-hyphen-hyphen.node.js.map +1 -0
- package/models/nodes/punctuators/regex-hyphen.node.js +15 -0
- package/models/nodes/punctuators/regex-hyphen.node.js.map +1 -0
- package/models/nodes/punctuators/regex-less-than.node.js +15 -0
- package/models/nodes/punctuators/regex-less-than.node.js.map +1 -0
- package/models/nodes/punctuators/regex-open-brace.node.js +15 -0
- package/models/nodes/punctuators/regex-open-brace.node.js.map +1 -0
- package/models/nodes/punctuators/regex-open-bracket.node.js +15 -0
- package/models/nodes/punctuators/regex-open-bracket.node.js.map +1 -0
- package/models/nodes/punctuators/regex-open-parenthesis.node.js +15 -0
- package/models/nodes/punctuators/regex-open-parenthesis.node.js.map +1 -0
- package/models/nodes/punctuators/regex-plus.node.js +15 -0
- package/models/nodes/punctuators/regex-plus.node.js.map +1 -0
- package/models/nodes/punctuators/regex-question.node.js +15 -0
- package/models/nodes/punctuators/regex-question.node.js.map +1 -0
- package/models/nodes/regex-alternative.node.js +14 -0
- package/models/nodes/regex-alternative.node.js.map +1 -0
- package/models/nodes/regex-character.node.js +14 -0
- package/models/nodes/regex-character.node.js.map +1 -0
- package/models/nodes/regex-disjunction.node.js +17 -0
- package/models/nodes/regex-disjunction.node.js.map +1 -0
- package/models/nodes/regex-dot.node.js +15 -0
- package/models/nodes/regex-dot.node.js.map +1 -0
- package/models/nodes/regex-flags.node.js +31 -0
- package/models/nodes/regex-flags.node.js.map +1 -0
- package/models/nodes/regex-pattern.node.js +18 -0
- package/models/nodes/regex-pattern.node.js.map +1 -0
- package/models/nodes/regex-quantifier.node.js +20 -0
- package/models/nodes/regex-quantifier.node.js.map +1 -0
- package/models/nodes/regex-unknown.node.js +14 -0
- package/models/nodes/regex-unknown.node.js.map +1 -0
- package/models/nodes/regex.node.js +20 -0
- package/models/nodes/regex.node.js.map +1 -0
- package/models/regex-alternative-branch.js +16 -0
- package/models/regex-alternative-branch.js.map +1 -0
- package/models/regex-capturing-group-summary.js +16 -0
- package/models/regex-capturing-group-summary.js.map +1 -0
- package/models/regex-group-name.js +16 -0
- package/models/regex-group-name.js.map +1 -0
- package/models/regex-named-group-branch.js +12 -0
- package/models/regex-named-group-branch.js.map +1 -0
- package/models/regex-parser-context.js +41 -0
- package/models/regex-parser-context.js.map +1 -0
- package/models/regex-unicode-escape-value.js +16 -0
- package/models/regex-unicode-escape-value.js.map +1 -0
- package/package.json +26 -4
- package/resources.js +112 -0
- package/resources.js.map +1 -0
- package/services/lexers/character.lexer.js +24 -0
- package/services/lexers/character.lexer.js.map +1 -0
- package/services/lexers/code-point-escape.lexer.js +56 -0
- package/services/lexers/code-point-escape.lexer.js.map +1 -0
- package/services/lexers/control-escape.lexer.js +40 -0
- package/services/lexers/control-escape.lexer.js.map +1 -0
- package/services/lexers/escape.lexer.js +130 -0
- package/services/lexers/escape.lexer.js.map +1 -0
- package/services/lexers/named-backreference.lexer.js +48 -0
- package/services/lexers/named-backreference.lexer.js.map +1 -0
- package/services/lexers/numeric-escape.lexer.js +87 -0
- package/services/lexers/numeric-escape.lexer.js.map +1 -0
- package/services/lexers/regex.lexer.js +200 -0
- package/services/lexers/regex.lexer.js.map +1 -0
- package/services/lexers/unicode-property-escape.lexer.js +59 -0
- package/services/lexers/unicode-property-escape.lexer.js.map +1 -0
- package/services/parsers/regex-alternative.parser.js +27 -0
- package/services/parsers/regex-alternative.parser.js.map +1 -0
- package/services/parsers/regex-assertion.parser.js +38 -0
- package/services/parsers/regex-assertion.parser.js.map +1 -0
- package/services/parsers/regex-capturing-group.parser.js +24 -0
- package/services/parsers/regex-capturing-group.parser.js.map +1 -0
- package/services/parsers/regex-character-class.parser.js +107 -0
- package/services/parsers/regex-character-class.parser.js.map +1 -0
- package/services/parsers/regex-class-set-expression.parser.js +114 -0
- package/services/parsers/regex-class-set-expression.parser.js.map +1 -0
- package/services/parsers/regex-class-string-disjunction.parser.js +57 -0
- package/services/parsers/regex-class-string-disjunction.parser.js.map +1 -0
- package/services/parsers/regex-disjunction.parser.js +33 -0
- package/services/parsers/regex-disjunction.parser.js.map +1 -0
- package/services/parsers/regex-group-end.parser.js +25 -0
- package/services/parsers/regex-group-end.parser.js.map +1 -0
- package/services/parsers/regex-group.parser.js +91 -0
- package/services/parsers/regex-group.parser.js.map +1 -0
- package/services/parsers/regex-lookaround.parser.js +35 -0
- package/services/parsers/regex-lookaround.parser.js.map +1 -0
- package/services/parsers/regex-modifier-group.parser.js +78 -0
- package/services/parsers/regex-modifier-group.parser.js.map +1 -0
- package/services/parsers/regex-named-capturing-group.parser.js +60 -0
- package/services/parsers/regex-named-capturing-group.parser.js.map +1 -0
- package/services/parsers/regex-non-capturing-group.parser.js +24 -0
- package/services/parsers/regex-non-capturing-group.parser.js.map +1 -0
- package/services/parsers/regex-pattern.parser.js +23 -0
- package/services/parsers/regex-pattern.parser.js.map +1 -0
- package/services/parsers/regex-quantifier.parser.js +85 -0
- package/services/parsers/regex-quantifier.parser.js.map +1 -0
- package/services/parsers/regex-term.parser.js +50 -0
- package/services/parsers/regex-term.parser.js.map +1 -0
- package/services/readers/regex-capturing-group-summary.reader.js +56 -0
- package/services/readers/regex-capturing-group-summary.reader.js.map +1 -0
- package/services/readers/regex-group-name.reader.js +44 -0
- package/services/readers/regex-group-name.reader.js.map +1 -0
- package/services/readers/regex-unicode-escape.reader.js +72 -0
- package/services/readers/regex-unicode-escape.reader.js.map +1 -0
- package/services/regex-named-group-registry.js +48 -0
- package/services/regex-named-group-registry.js.map +1 -0
- package/services/regex-syntax.parser.js +73 -0
- package/services/regex-syntax.parser.js.map +1 -0
- package/services/regex.parser.js +39 -0
- package/services/regex.parser.js.map +1 -0
- package/services/unicode/regex-unicode-property-catalog.js +118 -0
- package/services/unicode/regex-unicode-property-catalog.js.map +1 -0
- package/services/validators/regex-character-range.validator.js +22 -0
- package/services/validators/regex-character-range.validator.js.map +1 -0
- package/services/validators/regex-class-set-character.validator.js +30 -0
- package/services/validators/regex-class-set-character.validator.js.map +1 -0
- package/services/validators/regex-flag.validator.js +36 -0
- package/services/validators/regex-flag.validator.js.map +1 -0
- package/services/validators/regex-group-name.validator.js +17 -0
- package/services/validators/regex-group-name.validator.js.map +1 -0
- package/services/validators/regex-identity-escape.validator.js +25 -0
- package/services/validators/regex-identity-escape.validator.js.map +1 -0
- package/README.md +0 -3
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) Noldova.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import "@noldova/context.core";
|
|
9
|
+
import { RegexOpenParenthesisNode } from "../../models/nodes/punctuators/regex-open-parenthesis.node.js";
|
|
10
|
+
import { Resources } from "../../resources.js";
|
|
11
|
+
export class RegexAssertionParser {
|
|
12
|
+
regexParser;
|
|
13
|
+
constructor(regexParser) {
|
|
14
|
+
this.regexParser = regexParser;
|
|
15
|
+
}
|
|
16
|
+
parse() {
|
|
17
|
+
const assertionNode = this.regexParser.currentNode;
|
|
18
|
+
if (assertionNode.isSimpleRegexAssertion()) {
|
|
19
|
+
this.regexParser.advance();
|
|
20
|
+
return assertionNode;
|
|
21
|
+
}
|
|
22
|
+
if (!(this.regexParser.currentNode instanceof RegexOpenParenthesisNode))
|
|
23
|
+
return undefined;
|
|
24
|
+
const reader = this.regexParser.regexLexer.reader;
|
|
25
|
+
if (reader.peekCodeUnit() !== Resources.question)
|
|
26
|
+
return undefined;
|
|
27
|
+
const prefixCharacter = reader.peekCodeUnit(Resources.question.length);
|
|
28
|
+
if (prefixCharacter === Resources.equals || prefixCharacter === Resources.exclamation)
|
|
29
|
+
return this.regexParser.parseGroup();
|
|
30
|
+
if (prefixCharacter !== Resources.lessThan)
|
|
31
|
+
return undefined;
|
|
32
|
+
const lookbehindCharacter = reader.peekCodeUnit(Resources.question.length + Resources.lessThan.length);
|
|
33
|
+
return lookbehindCharacter === Resources.equals || lookbehindCharacter === Resources.exclamation
|
|
34
|
+
? this.regexParser.parseGroup()
|
|
35
|
+
: undefined;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=regex-assertion.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-assertion.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-assertion.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,uBAAuB,CAAC;AAI/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,+DAA+D,CAAC;AACzG,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,MAAM,OAAO,oBAAoB;IACd,WAAW,CAAoB;IAEhD,YAAmB,WAA8B;QAC/C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAEM,KAAK;QACV,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;QACnD,IAAI,aAAa,CAAC,sBAAsB,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,YAAY,wBAAwB,CAAC;YACrE,OAAO,SAAS,CAAC;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;QAClD,IAAI,MAAM,CAAC,YAAY,EAAE,KAAK,SAAS,CAAC,QAAQ;YAC9C,OAAO,SAAS,CAAC;QAEnB,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvE,IAAI,eAAe,KAAK,SAAS,CAAC,MAAM,IAAI,eAAe,KAAK,SAAS,CAAC,WAAW;YACnF,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QAEvC,IAAI,eAAe,KAAK,SAAS,CAAC,QAAQ;YACxC,OAAO,SAAS,CAAC;QAEnB,MAAM,mBAAmB,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvG,OAAO,mBAAmB,KAAK,SAAS,CAAC,MAAM,IAAI,mBAAmB,KAAK,SAAS,CAAC,WAAW;YAC9F,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;YAC/B,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) Noldova.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { RegexCapturingGroupNode } from "../../models/nodes/groups/regex-capturing-group.node.js";
|
|
9
|
+
export class RegexCapturingGroupParser {
|
|
10
|
+
groupEndParser;
|
|
11
|
+
regexParser;
|
|
12
|
+
constructor(regexParser, groupEndParser) {
|
|
13
|
+
this.regexParser = regexParser;
|
|
14
|
+
this.groupEndParser = groupEndParser;
|
|
15
|
+
}
|
|
16
|
+
parse(startOffset) {
|
|
17
|
+
const groupIndex = this.regexParser.context.claimCapturingGroupIndex();
|
|
18
|
+
const disjunctionNode = this.regexParser.parseDisjunction(true);
|
|
19
|
+
const endOffset = this.groupEndParser.parse();
|
|
20
|
+
const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
|
|
21
|
+
return new RegexCapturingGroupNode(groupIndex, disjunctionNode, span);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=regex-capturing-group.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-capturing-group.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-capturing-group.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AAIlG,MAAM,OAAO,yBAAyB;IACnB,cAAc,CAAsB;IACpC,WAAW,CAAoB;IAEhD,YAAmB,WAA8B,EAAE,cAAmC;QACpF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,WAAmB;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC;QACvE,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC;QAEjG,OAAO,IAAI,uBAAuB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;CACF"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) Noldova.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
|
|
9
|
+
import { RegexCharacterClassNode } from "../../models/nodes/classes/regex-character-class.node.js";
|
|
10
|
+
import { RegexCharacterRangeNode } from "../../models/nodes/classes/regex-character-range.node.js";
|
|
11
|
+
import { RegexClassUnionNode } from "../../models/nodes/classes/regex-class-union.node.js";
|
|
12
|
+
import { RegexCloseBracketNode } from "../../models/nodes/punctuators/regex-close-bracket.node.js";
|
|
13
|
+
import { RegexHyphenNode } from "../../models/nodes/punctuators/regex-hyphen.node.js";
|
|
14
|
+
import { RegexOpenBracketNode } from "../../models/nodes/punctuators/regex-open-bracket.node.js";
|
|
15
|
+
import { RegexCharacterNode } from "../../models/nodes/regex-character.node.js";
|
|
16
|
+
import { RegexUnknownNode } from "../../models/nodes/regex-unknown.node.js";
|
|
17
|
+
import { Resources } from "../../resources.js";
|
|
18
|
+
import { RegexCharacterRangeValidator } from "../validators/regex-character-range.validator.js";
|
|
19
|
+
export class RegexCharacterClassParser {
|
|
20
|
+
characterRangeValidator = new RegexCharacterRangeValidator();
|
|
21
|
+
regexParser;
|
|
22
|
+
constructor(regexParser) {
|
|
23
|
+
this.regexParser = regexParser;
|
|
24
|
+
}
|
|
25
|
+
parse() {
|
|
26
|
+
if (this.regexParser.context.nestingDepth >= Resources.maximumNestingDepth)
|
|
27
|
+
return this.parseExcessivelyNestedClass();
|
|
28
|
+
this.regexParser.context.nestingDepth++;
|
|
29
|
+
try {
|
|
30
|
+
return this.parseClass();
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
this.regexParser.context.nestingDepth--;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
parseClass() {
|
|
37
|
+
const startOffset = this.regexParser.currentNode.span.startOffset;
|
|
38
|
+
this.regexParser.advance();
|
|
39
|
+
const firstNode = this.regexParser.currentNode;
|
|
40
|
+
const negated = firstNode instanceof RegexCharacterNode && firstNode.value === Resources.caret;
|
|
41
|
+
if (negated)
|
|
42
|
+
this.regexParser.advance();
|
|
43
|
+
const expressionNode = this.regexParser.regexLexer.unicodeSetsMode
|
|
44
|
+
? this.regexParser.parseClassSetExpression()
|
|
45
|
+
: this.parseClassicExpression();
|
|
46
|
+
const mayContainStrings = this.regexParser.regexLexer.unicodeSetsMode && expressionNode.mayContainRegexStrings();
|
|
47
|
+
const endOffset = this.completeClass();
|
|
48
|
+
const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
|
|
49
|
+
if (negated && mayContainStrings)
|
|
50
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1030, span);
|
|
51
|
+
return new RegexCharacterClassNode(expressionNode, negated, mayContainStrings, span);
|
|
52
|
+
}
|
|
53
|
+
parseExcessivelyNestedClass() {
|
|
54
|
+
const startOffset = this.regexParser.currentNode.span.startOffset;
|
|
55
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1037, this.regexParser.currentNode.span, [Resources.maximumNestingDepth]);
|
|
56
|
+
let nestingDepth = 0;
|
|
57
|
+
do {
|
|
58
|
+
if (this.regexParser.currentNode instanceof RegexOpenBracketNode)
|
|
59
|
+
nestingDepth++;
|
|
60
|
+
else if (this.regexParser.currentNode instanceof RegexCloseBracketNode)
|
|
61
|
+
nestingDepth--;
|
|
62
|
+
this.regexParser.advance();
|
|
63
|
+
} while (!this.regexParser.isEndOfFile && nestingDepth > 0);
|
|
64
|
+
const endOffset = this.regexParser.currentNode.span.startOffset;
|
|
65
|
+
const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
|
|
66
|
+
const unknownNode = new RegexUnknownNode(this.regexParser.context.source.getText(span), span);
|
|
67
|
+
return new RegexCharacterClassNode(unknownNode, false, false, span);
|
|
68
|
+
}
|
|
69
|
+
completeClass() {
|
|
70
|
+
if (!(this.regexParser.currentNode instanceof RegexCloseBracketNode)) {
|
|
71
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1004, this.regexParser.currentNode.span);
|
|
72
|
+
return this.regexParser.currentNode.span.startOffset;
|
|
73
|
+
}
|
|
74
|
+
const endOffset = this.regexParser.currentNode.span.endOffset;
|
|
75
|
+
this.regexParser.advance();
|
|
76
|
+
return endOffset;
|
|
77
|
+
}
|
|
78
|
+
parseClassicExpression() {
|
|
79
|
+
const startOffset = this.regexParser.currentNode.span.startOffset;
|
|
80
|
+
const operands = [];
|
|
81
|
+
while (!this.regexParser.isEndOfFile && !(this.regexParser.currentNode instanceof RegexCloseBracketNode)) {
|
|
82
|
+
const startNode = this.consumeClassAtom();
|
|
83
|
+
if (!(this.regexParser.currentNode instanceof RegexHyphenNode)) {
|
|
84
|
+
operands.push(startNode);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const hyphen = this.regexParser.currentNode;
|
|
88
|
+
this.regexParser.advance();
|
|
89
|
+
if (this.regexParser.isEndOfFile || this.regexParser.currentNode instanceof RegexCloseBracketNode) {
|
|
90
|
+
operands.push(startNode, hyphen);
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
const endNode = this.consumeClassAtom();
|
|
94
|
+
const span = this.regexParser.regexLexer.reader.createSpan(startNode.span, endNode.span);
|
|
95
|
+
this.characterRangeValidator.validate(this.regexParser, startNode, endNode, span);
|
|
96
|
+
operands.push(new RegexCharacterRangeNode(startNode, endNode, span));
|
|
97
|
+
}
|
|
98
|
+
const endOffset = this.regexParser.currentNode.span.startOffset;
|
|
99
|
+
return new RegexClassUnionNode(operands, this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset));
|
|
100
|
+
}
|
|
101
|
+
consumeClassAtom() {
|
|
102
|
+
const node = this.regexParser.currentNode;
|
|
103
|
+
this.regexParser.advance();
|
|
104
|
+
return node;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=regex-character-class.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-character-class.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-character-class.parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) Noldova.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import "@noldova/context.core";
|
|
9
|
+
import { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
|
|
10
|
+
import { RegexCharacterRangeNode } from "../../models/nodes/classes/regex-character-range.node.js";
|
|
11
|
+
import { RegexClassUnionNode } from "../../models/nodes/classes/regex-class-union.node.js";
|
|
12
|
+
import { RegexClassStringDisjunctionStartNode } from "../../models/nodes/punctuators/regex-class-string-disjunction-start.node.js";
|
|
13
|
+
import { RegexCloseBracketNode } from "../../models/nodes/punctuators/regex-close-bracket.node.js";
|
|
14
|
+
import { RegexHyphenNode } from "../../models/nodes/punctuators/regex-hyphen.node.js";
|
|
15
|
+
import { RegexOpenBracketNode } from "../../models/nodes/punctuators/regex-open-bracket.node.js";
|
|
16
|
+
import { RegexCharacterRangeValidator } from "../validators/regex-character-range.validator.js";
|
|
17
|
+
import { RegexClassSetCharacterValidator } from "../validators/regex-class-set-character.validator.js";
|
|
18
|
+
export class RegexClassSetExpressionParser {
|
|
19
|
+
characterRangeValidator = new RegexCharacterRangeValidator();
|
|
20
|
+
classSetCharacterValidator = new RegexClassSetCharacterValidator();
|
|
21
|
+
regexParser;
|
|
22
|
+
constructor(regexParser) {
|
|
23
|
+
this.regexParser = regexParser;
|
|
24
|
+
}
|
|
25
|
+
parse() {
|
|
26
|
+
const startOffset = this.regexParser.currentNode.span.startOffset;
|
|
27
|
+
const operands = [];
|
|
28
|
+
if (this.regexParser.isEndOfFile || this.regexParser.currentNode instanceof RegexCloseBracketNode)
|
|
29
|
+
return this.createUnion(operands, startOffset);
|
|
30
|
+
if (this.regexParser.currentNode.isRegexClassSetOperator()) {
|
|
31
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1028, this.regexParser.currentNode.span);
|
|
32
|
+
this.regexParser.advance();
|
|
33
|
+
if (this.regexParser.isEndOfFile || this.regexParser.currentNode instanceof RegexCloseBracketNode)
|
|
34
|
+
return this.createUnion(operands, startOffset);
|
|
35
|
+
}
|
|
36
|
+
operands.push(this.parseOperand());
|
|
37
|
+
if (this.regexParser.currentNode.isRegexClassSetOperator())
|
|
38
|
+
return this.parseOperatorExpression(operands, startOffset, this.regexParser.currentNode);
|
|
39
|
+
while (!this.regexParser.isEndOfFile && !(this.regexParser.currentNode instanceof RegexCloseBracketNode)) {
|
|
40
|
+
if (this.regexParser.currentNode.isRegexClassSetOperator()) {
|
|
41
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1027, this.regexParser.currentNode.span);
|
|
42
|
+
this.regexParser.advance();
|
|
43
|
+
if (this.regexParser.isEndOfFile || this.regexParser.currentNode instanceof RegexCloseBracketNode) {
|
|
44
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1028, this.regexParser.currentNode.span);
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
operands.push(this.parseOperand());
|
|
49
|
+
}
|
|
50
|
+
return this.createUnion(operands, startOffset);
|
|
51
|
+
}
|
|
52
|
+
createSpan(startOffset) {
|
|
53
|
+
const endOffset = this.regexParser.currentNode.span.startOffset;
|
|
54
|
+
return this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
|
|
55
|
+
}
|
|
56
|
+
parseOperand() {
|
|
57
|
+
let operand;
|
|
58
|
+
if (this.regexParser.currentNode instanceof RegexOpenBracketNode)
|
|
59
|
+
operand = this.regexParser.parseCharacterClass();
|
|
60
|
+
else if (this.regexParser.currentNode instanceof RegexClassStringDisjunctionStartNode)
|
|
61
|
+
operand = this.regexParser.parseClassStringDisjunction();
|
|
62
|
+
else {
|
|
63
|
+
operand = this.regexParser.currentNode;
|
|
64
|
+
this.classSetCharacterValidator.validate(this.regexParser, operand);
|
|
65
|
+
this.regexParser.advance();
|
|
66
|
+
}
|
|
67
|
+
if (!(this.regexParser.currentNode instanceof RegexHyphenNode))
|
|
68
|
+
return operand;
|
|
69
|
+
this.regexParser.advance();
|
|
70
|
+
return this.completeRange(operand);
|
|
71
|
+
}
|
|
72
|
+
completeRange(operand) {
|
|
73
|
+
if (this.regexParser.isEndOfFile || this.regexParser.currentNode instanceof RegexCloseBracketNode || this.regexParser.currentNode.isRegexClassSetOperator()) {
|
|
74
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1028, this.regexParser.currentNode.span);
|
|
75
|
+
return operand;
|
|
76
|
+
}
|
|
77
|
+
const endNode = this.regexParser.currentNode;
|
|
78
|
+
this.classSetCharacterValidator.validate(this.regexParser, endNode);
|
|
79
|
+
this.regexParser.advance();
|
|
80
|
+
const span = this.regexParser.regexLexer.reader.createSpan(operand.span, endNode.span);
|
|
81
|
+
this.characterRangeValidator.validate(this.regexParser, operand, endNode, span);
|
|
82
|
+
return new RegexCharacterRangeNode(operand, endNode, span);
|
|
83
|
+
}
|
|
84
|
+
createUnion(operands, startOffset) {
|
|
85
|
+
return new RegexClassUnionNode(operands, this.createSpan(startOffset));
|
|
86
|
+
}
|
|
87
|
+
parseOperatorExpression(operands, startOffset, operatorNode) {
|
|
88
|
+
for (const operand of operands)
|
|
89
|
+
this.validateOperatorOperand(operand);
|
|
90
|
+
while (!this.regexParser.isEndOfFile && !(this.regexParser.currentNode instanceof RegexCloseBracketNode)) {
|
|
91
|
+
const operator = this.regexParser.currentNode;
|
|
92
|
+
const expectedOperator = operator.constructor === operatorNode.constructor;
|
|
93
|
+
if (!expectedOperator)
|
|
94
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1027, operator.span);
|
|
95
|
+
if (operator.isRegexClassSetOperator())
|
|
96
|
+
this.regexParser.advance();
|
|
97
|
+
else
|
|
98
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1028, operator.span);
|
|
99
|
+
if (this.regexParser.isEndOfFile || this.regexParser.currentNode instanceof RegexCloseBracketNode) {
|
|
100
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1028, this.regexParser.currentNode.span);
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
const operand = this.parseOperand();
|
|
104
|
+
this.validateOperatorOperand(operand);
|
|
105
|
+
operands.push(operand);
|
|
106
|
+
}
|
|
107
|
+
return operatorNode.createRegexClassSetExpression(operands, this.createSpan(startOffset));
|
|
108
|
+
}
|
|
109
|
+
validateOperatorOperand(node) {
|
|
110
|
+
if (node instanceof RegexCharacterRangeNode)
|
|
111
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1038, node.span);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=regex-class-set-expression.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-class-set-expression.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-class-set-expression.parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) Noldova.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
|
|
9
|
+
import { RegexClassStringDisjunctionNode } from "../../models/nodes/classes/regex-class-string-disjunction.node.js";
|
|
10
|
+
import { RegexClassStringNode } from "../../models/nodes/classes/regex-class-string.node.js";
|
|
11
|
+
import { RegexBarNode } from "../../models/nodes/punctuators/regex-bar.node.js";
|
|
12
|
+
import { RegexCloseBraceNode } from "../../models/nodes/punctuators/regex-close-brace.node.js";
|
|
13
|
+
import { RegexClassSetCharacterValidator } from "../validators/regex-class-set-character.validator.js";
|
|
14
|
+
export class RegexClassStringDisjunctionParser {
|
|
15
|
+
classSetCharacterValidator = new RegexClassSetCharacterValidator();
|
|
16
|
+
regexParser;
|
|
17
|
+
constructor(regexParser) {
|
|
18
|
+
this.regexParser = regexParser;
|
|
19
|
+
}
|
|
20
|
+
parse() {
|
|
21
|
+
const startOffset = this.regexParser.currentNode.span.startOffset;
|
|
22
|
+
this.regexParser.advance();
|
|
23
|
+
const strings = [];
|
|
24
|
+
do {
|
|
25
|
+
strings.push(this.parseString());
|
|
26
|
+
const separator = this.regexParser.currentNode;
|
|
27
|
+
if (!(separator instanceof RegexBarNode))
|
|
28
|
+
break;
|
|
29
|
+
this.regexParser.advance();
|
|
30
|
+
} while (true);
|
|
31
|
+
const closingBrace = this.regexParser.currentNode;
|
|
32
|
+
let endOffset = closingBrace.span.startOffset;
|
|
33
|
+
if (closingBrace instanceof RegexCloseBraceNode) {
|
|
34
|
+
endOffset = closingBrace.span.endOffset;
|
|
35
|
+
this.regexParser.advance();
|
|
36
|
+
}
|
|
37
|
+
else
|
|
38
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1031, closingBrace.span);
|
|
39
|
+
return new RegexClassStringDisjunctionNode(strings, this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset));
|
|
40
|
+
}
|
|
41
|
+
parseString() {
|
|
42
|
+
const startOffset = this.regexParser.currentNode.span.startOffset;
|
|
43
|
+
const characters = [];
|
|
44
|
+
while (!this.regexParser.isEndOfFile && !(this.regexParser.currentNode instanceof RegexBarNode) && !(this.regexParser.currentNode instanceof RegexCloseBraceNode)) {
|
|
45
|
+
const character = this.regexParser.currentNode;
|
|
46
|
+
if (Object.isUndefined(character.getRegexCharacterValue()))
|
|
47
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1036, character.span);
|
|
48
|
+
else
|
|
49
|
+
this.classSetCharacterValidator.validate(this.regexParser, character);
|
|
50
|
+
characters.push(character);
|
|
51
|
+
this.regexParser.advance();
|
|
52
|
+
}
|
|
53
|
+
const endOffset = this.regexParser.currentNode.span.startOffset;
|
|
54
|
+
return new RegexClassStringNode(characters, this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=regex-class-string-disjunction.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-class-string-disjunction.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-class-string-disjunction.parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) Noldova.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { RegexBarNode } from "../../models/nodes/punctuators/regex-bar.node.js";
|
|
9
|
+
import { RegexDisjunctionNode } from "../../models/nodes/regex-disjunction.node.js";
|
|
10
|
+
export class RegexDisjunctionParser {
|
|
11
|
+
regexParser;
|
|
12
|
+
constructor(regexParser) {
|
|
13
|
+
this.regexParser = regexParser;
|
|
14
|
+
}
|
|
15
|
+
parse(stopsAtCloseParenthesis) {
|
|
16
|
+
const startOffset = this.regexParser.currentNode.span.startOffset;
|
|
17
|
+
const alternatives = [];
|
|
18
|
+
const disjunctionIndex = this.regexParser.context.beginDisjunction();
|
|
19
|
+
let alternativeIndex = 0;
|
|
20
|
+
while (true) {
|
|
21
|
+
this.regexParser.context.enterAlternative(disjunctionIndex, alternativeIndex);
|
|
22
|
+
alternatives.push(this.regexParser.parseAlternative(stopsAtCloseParenthesis));
|
|
23
|
+
this.regexParser.context.leaveAlternative();
|
|
24
|
+
if (!(this.regexParser.currentNode instanceof RegexBarNode))
|
|
25
|
+
break;
|
|
26
|
+
this.regexParser.advance();
|
|
27
|
+
alternativeIndex++;
|
|
28
|
+
}
|
|
29
|
+
const endOffset = this.regexParser.currentNode.span.startOffset;
|
|
30
|
+
return new RegexDisjunctionNode(alternatives, this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=regex-disjunction.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-disjunction.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-disjunction.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AAEhF,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AAGpF,MAAM,OAAO,sBAAsB;IAChB,WAAW,CAAoB;IAEhD,YAAmB,WAA8B;QAC/C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,uBAAgC;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QAClE,MAAM,YAAY,GAA2B,EAAE,CAAC;QAChD,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACrE,IAAI,gBAAgB,GAAG,CAAC,CAAC;QAEzB,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;YAC9E,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC,CAAC;YAC9E,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAE5C,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,YAAY,YAAY,CAAC;gBACzD,MAAM;YAER,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAC3B,gBAAgB,EAAE,CAAC;QACrB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QAChE,OAAO,IAAI,oBAAoB,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC;IACrI,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) Noldova.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
|
|
9
|
+
import { RegexCloseParenthesisNode } from "../../models/nodes/punctuators/regex-close-parenthesis.node.js";
|
|
10
|
+
export class RegexGroupEndParser {
|
|
11
|
+
regexParser;
|
|
12
|
+
constructor(regexParser) {
|
|
13
|
+
this.regexParser = regexParser;
|
|
14
|
+
}
|
|
15
|
+
parse() {
|
|
16
|
+
if (!(this.regexParser.currentNode instanceof RegexCloseParenthesisNode)) {
|
|
17
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1003, this.regexParser.currentNode.span);
|
|
18
|
+
return this.regexParser.currentNode.span.startOffset;
|
|
19
|
+
}
|
|
20
|
+
const endOffset = this.regexParser.currentNode.span.endOffset;
|
|
21
|
+
this.regexParser.advance();
|
|
22
|
+
return endOffset;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=regex-group-end.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-group-end.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-group-end.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,wDAAwD,CAAC;AAClG,OAAO,EAAE,yBAAyB,EAAE,MAAM,gEAAgE,CAAC;AAG3G,MAAM,OAAO,mBAAmB;IACb,WAAW,CAAoB;IAEhD,YAAmB,WAA8B;QAC/C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,YAAY,yBAAyB,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACtH,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QACvD,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;QAC9D,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) Noldova.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
|
|
9
|
+
import { RegexCloseParenthesisNode } from "../../models/nodes/punctuators/regex-close-parenthesis.node.js";
|
|
10
|
+
import { RegexColonNode } from "../../models/nodes/punctuators/regex-colon.node.js";
|
|
11
|
+
import { RegexEqualsNode } from "../../models/nodes/punctuators/regex-equals.node.js";
|
|
12
|
+
import { RegexExclamationNode } from "../../models/nodes/punctuators/regex-exclamation.node.js";
|
|
13
|
+
import { RegexHyphenNode } from "../../models/nodes/punctuators/regex-hyphen.node.js";
|
|
14
|
+
import { RegexLessThanNode } from "../../models/nodes/punctuators/regex-less-than.node.js";
|
|
15
|
+
import { RegexOpenParenthesisNode } from "../../models/nodes/punctuators/regex-open-parenthesis.node.js";
|
|
16
|
+
import { RegexQuestionNode } from "../../models/nodes/punctuators/regex-question.node.js";
|
|
17
|
+
import { RegexCharacterNode } from "../../models/nodes/regex-character.node.js";
|
|
18
|
+
import { RegexUnknownNode } from "../../models/nodes/regex-unknown.node.js";
|
|
19
|
+
import { Resources } from "../../resources.js";
|
|
20
|
+
import { RegexCapturingGroupParser } from "./regex-capturing-group.parser.js";
|
|
21
|
+
import { RegexGroupEndParser } from "./regex-group-end.parser.js";
|
|
22
|
+
import { RegexLookaroundParser } from "./regex-lookaround.parser.js";
|
|
23
|
+
import { RegexModifierGroupParser } from "./regex-modifier-group.parser.js";
|
|
24
|
+
import { RegexNamedCapturingGroupParser } from "./regex-named-capturing-group.parser.js";
|
|
25
|
+
import { RegexNonCapturingGroupParser } from "./regex-non-capturing-group.parser.js";
|
|
26
|
+
export class RegexGroupParser {
|
|
27
|
+
capturingGroupParser;
|
|
28
|
+
lookaroundParser;
|
|
29
|
+
modifierGroupParser;
|
|
30
|
+
namedCapturingGroupParser;
|
|
31
|
+
nonCapturingGroupParser;
|
|
32
|
+
regexParser;
|
|
33
|
+
constructor(regexParser) {
|
|
34
|
+
const groupEndParser = new RegexGroupEndParser(regexParser);
|
|
35
|
+
this.regexParser = regexParser;
|
|
36
|
+
this.capturingGroupParser = new RegexCapturingGroupParser(regexParser, groupEndParser);
|
|
37
|
+
this.lookaroundParser = new RegexLookaroundParser(regexParser, groupEndParser);
|
|
38
|
+
this.modifierGroupParser = new RegexModifierGroupParser(regexParser, groupEndParser);
|
|
39
|
+
this.namedCapturingGroupParser = new RegexNamedCapturingGroupParser(regexParser, groupEndParser);
|
|
40
|
+
this.nonCapturingGroupParser = new RegexNonCapturingGroupParser(regexParser, groupEndParser);
|
|
41
|
+
}
|
|
42
|
+
parse() {
|
|
43
|
+
const startOffset = this.regexParser.currentNode.span.startOffset;
|
|
44
|
+
if (this.regexParser.context.nestingDepth >= Resources.maximumNestingDepth)
|
|
45
|
+
return this.parseExcessivelyNestedGroup(startOffset);
|
|
46
|
+
this.regexParser.context.nestingDepth++;
|
|
47
|
+
this.regexParser.advance();
|
|
48
|
+
try {
|
|
49
|
+
const question = this.regexParser.currentNode;
|
|
50
|
+
if (!(question instanceof RegexQuestionNode))
|
|
51
|
+
return this.capturingGroupParser.parse(startOffset);
|
|
52
|
+
this.regexParser.advance();
|
|
53
|
+
const prefix = this.regexParser.currentNode;
|
|
54
|
+
if (prefix instanceof RegexColonNode)
|
|
55
|
+
return this.nonCapturingGroupParser.parse(startOffset);
|
|
56
|
+
if (prefix instanceof RegexEqualsNode || prefix instanceof RegexExclamationNode)
|
|
57
|
+
return this.lookaroundParser.parseLookahead(startOffset);
|
|
58
|
+
if (prefix instanceof RegexLessThanNode)
|
|
59
|
+
return this.parseLessThanGroup(startOffset);
|
|
60
|
+
if (!(prefix instanceof RegexCharacterNode) && !(prefix instanceof RegexHyphenNode))
|
|
61
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1005, prefix.span);
|
|
62
|
+
return this.modifierGroupParser.parse(startOffset);
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
this.regexParser.context.nestingDepth--;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
parseExcessivelyNestedGroup(startOffset) {
|
|
69
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1037, this.regexParser.currentNode.span, [Resources.maximumNestingDepth]);
|
|
70
|
+
let nestingDepth = 0;
|
|
71
|
+
do {
|
|
72
|
+
if (this.regexParser.currentNode instanceof RegexOpenParenthesisNode)
|
|
73
|
+
nestingDepth++;
|
|
74
|
+
else if (this.regexParser.currentNode instanceof RegexCloseParenthesisNode)
|
|
75
|
+
nestingDepth--;
|
|
76
|
+
this.regexParser.advance();
|
|
77
|
+
} while (!this.regexParser.isEndOfFile && nestingDepth > 0);
|
|
78
|
+
const endOffset = this.regexParser.currentNode.span.startOffset;
|
|
79
|
+
const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
|
|
80
|
+
return new RegexUnknownNode(this.regexParser.context.source.getText(span), span);
|
|
81
|
+
}
|
|
82
|
+
parseLessThanGroup(startOffset) {
|
|
83
|
+
const followingCharacter = this.regexParser.regexLexer.reader.peekCodeUnit();
|
|
84
|
+
if (followingCharacter === Resources.equals || followingCharacter === Resources.exclamation) {
|
|
85
|
+
this.regexParser.advance();
|
|
86
|
+
return this.lookaroundParser.parseLookbehind(startOffset);
|
|
87
|
+
}
|
|
88
|
+
return this.namedCapturingGroupParser.parse(startOffset);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=regex-group.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-group.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-group.parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) Noldova.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { RegexLookaheadAssertionNode } from "../../models/nodes/assertions/regex-lookahead-assertion.node.js";
|
|
9
|
+
import { RegexLookbehindAssertionNode } from "../../models/nodes/assertions/regex-lookbehind-assertion.node.js";
|
|
10
|
+
import { RegexExclamationNode } from "../../models/nodes/punctuators/regex-exclamation.node.js";
|
|
11
|
+
export class RegexLookaroundParser {
|
|
12
|
+
groupEndParser;
|
|
13
|
+
regexParser;
|
|
14
|
+
constructor(regexParser, groupEndParser) {
|
|
15
|
+
this.regexParser = regexParser;
|
|
16
|
+
this.groupEndParser = groupEndParser;
|
|
17
|
+
}
|
|
18
|
+
parseLookahead(startOffset) {
|
|
19
|
+
const negated = this.regexParser.currentNode instanceof RegexExclamationNode;
|
|
20
|
+
this.regexParser.advance();
|
|
21
|
+
const disjunctionNode = this.regexParser.parseDisjunction(true);
|
|
22
|
+
const endOffset = this.groupEndParser.parse();
|
|
23
|
+
const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
|
|
24
|
+
return new RegexLookaheadAssertionNode(disjunctionNode, negated, span);
|
|
25
|
+
}
|
|
26
|
+
parseLookbehind(startOffset) {
|
|
27
|
+
const negated = this.regexParser.currentNode instanceof RegexExclamationNode;
|
|
28
|
+
this.regexParser.advance();
|
|
29
|
+
const disjunctionNode = this.regexParser.parseDisjunction(true);
|
|
30
|
+
const endOffset = this.groupEndParser.parse();
|
|
31
|
+
const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
|
|
32
|
+
return new RegexLookbehindAssertionNode(disjunctionNode, negated, span);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=regex-lookaround.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-lookaround.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-lookaround.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,iEAAiE,CAAC;AAC9G,OAAO,EAAE,4BAA4B,EAAE,MAAM,kEAAkE,CAAC;AAChH,OAAO,EAAE,oBAAoB,EAAE,MAAM,0DAA0D,CAAC;AAIhG,MAAM,OAAO,qBAAqB;IACf,cAAc,CAAsB;IACpC,WAAW,CAAoB;IAEhD,YAAmB,WAA8B,EAAE,cAAmC;QACpF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAEM,cAAc,CAAC,WAAmB;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,YAAY,oBAAoB,CAAC;QAC7E,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC;QAEjG,OAAO,IAAI,2BAA2B,CAAC,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACzE,CAAC;IAEM,eAAe,CAAC,WAAmB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,YAAY,oBAAoB,CAAC;QAC7E,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC;QAEjG,OAAO,IAAI,4BAA4B,CAAC,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1E,CAAC;CACF"}
|