@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,130 @@
|
|
|
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 "@noldova/context.text";
|
|
10
|
+
import { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
|
|
11
|
+
import { RegexNonWordBoundaryAssertionNode } from "../../models/nodes/assertions/regex-non-word-boundary-assertion.node.js";
|
|
12
|
+
import { RegexWordBoundaryAssertionNode } from "../../models/nodes/assertions/regex-word-boundary-assertion.node.js";
|
|
13
|
+
import { RegexBackspaceEscapeNode } from "../../models/nodes/escapes/regex-backspace-escape.node.js";
|
|
14
|
+
import { RegexCarriageReturnEscapeNode } from "../../models/nodes/escapes/regex-carriage-return-escape.node.js";
|
|
15
|
+
import { RegexDigitEscapeNode } from "../../models/nodes/escapes/regex-digit-escape.node.js";
|
|
16
|
+
import { RegexFormFeedEscapeNode } from "../../models/nodes/escapes/regex-form-feed-escape.node.js";
|
|
17
|
+
import { RegexIdentityEscapeNode } from "../../models/nodes/escapes/regex-identity-escape.node.js";
|
|
18
|
+
import { RegexNewlineEscapeNode } from "../../models/nodes/escapes/regex-newline-escape.node.js";
|
|
19
|
+
import { RegexNonDigitEscapeNode } from "../../models/nodes/escapes/regex-non-digit-escape.node.js";
|
|
20
|
+
import { RegexNonWhitespaceEscapeNode } from "../../models/nodes/escapes/regex-non-whitespace-escape.node.js";
|
|
21
|
+
import { RegexNonWordEscapeNode } from "../../models/nodes/escapes/regex-non-word-escape.node.js";
|
|
22
|
+
import { RegexTabEscapeNode } from "../../models/nodes/escapes/regex-tab-escape.node.js";
|
|
23
|
+
import { RegexVerticalTabEscapeNode } from "../../models/nodes/escapes/regex-vertical-tab-escape.node.js";
|
|
24
|
+
import { RegexWhitespaceEscapeNode } from "../../models/nodes/escapes/regex-whitespace-escape.node.js";
|
|
25
|
+
import { RegexWordEscapeNode } from "../../models/nodes/escapes/regex-word-escape.node.js";
|
|
26
|
+
import { RegexClassStringDisjunctionStartNode } from "../../models/nodes/punctuators/regex-class-string-disjunction-start.node.js";
|
|
27
|
+
import { RegexUnknownNode } from "../../models/nodes/regex-unknown.node.js";
|
|
28
|
+
import { Resources } from "../../resources.js";
|
|
29
|
+
import { RegexIdentityEscapeValidator } from "../validators/regex-identity-escape.validator.js";
|
|
30
|
+
import { CodePointEscapeLexer } from "./code-point-escape.lexer.js";
|
|
31
|
+
import { ControlEscapeLexer } from "./control-escape.lexer.js";
|
|
32
|
+
import { NamedBackreferenceLexer } from "./named-backreference.lexer.js";
|
|
33
|
+
import { NumericEscapeLexer } from "./numeric-escape.lexer.js";
|
|
34
|
+
import { UnicodePropertyEscapeLexer } from "./unicode-property-escape.lexer.js";
|
|
35
|
+
export class EscapeLexer {
|
|
36
|
+
codePointEscapeLexer = new CodePointEscapeLexer();
|
|
37
|
+
controlEscapeLexer = new ControlEscapeLexer();
|
|
38
|
+
identityEscapeValidator = new RegexIdentityEscapeValidator();
|
|
39
|
+
namedBackreferenceLexer = new NamedBackreferenceLexer();
|
|
40
|
+
numericEscapeLexer = new NumericEscapeLexer();
|
|
41
|
+
unicodePropertyEscapeLexer = new UnicodePropertyEscapeLexer();
|
|
42
|
+
lex(lexer) {
|
|
43
|
+
const reader = lexer.reader;
|
|
44
|
+
const startOffset = reader.currentOffset;
|
|
45
|
+
reader.advance();
|
|
46
|
+
if (reader.isAtEnd)
|
|
47
|
+
return this.createUnknown(lexer, startOffset);
|
|
48
|
+
const codePoint = lexer.unicodeMode ? reader.readCodePoint() : reader.readCodeUnit().charCodeAt(0);
|
|
49
|
+
const character = String.fromCodePoint(codePoint);
|
|
50
|
+
switch (character) {
|
|
51
|
+
case Resources.digitEscapeCharacter:
|
|
52
|
+
return new RegexDigitEscapeNode(this.createSpan(lexer, startOffset));
|
|
53
|
+
case Resources.nonDigitEscapeCharacter:
|
|
54
|
+
return new RegexNonDigitEscapeNode(this.createSpan(lexer, startOffset));
|
|
55
|
+
case Resources.wordEscapeCharacter:
|
|
56
|
+
return new RegexWordEscapeNode(this.createSpan(lexer, startOffset));
|
|
57
|
+
case Resources.nonWordEscapeCharacter:
|
|
58
|
+
return new RegexNonWordEscapeNode(this.createSpan(lexer, startOffset));
|
|
59
|
+
case Resources.whitespaceEscapeCharacter:
|
|
60
|
+
return new RegexWhitespaceEscapeNode(this.createSpan(lexer, startOffset));
|
|
61
|
+
case Resources.nonWhitespaceEscapeCharacter:
|
|
62
|
+
return new RegexNonWhitespaceEscapeNode(this.createSpan(lexer, startOffset));
|
|
63
|
+
case Resources.formFeedEscapeCharacter:
|
|
64
|
+
return new RegexFormFeedEscapeNode(this.createSpan(lexer, startOffset));
|
|
65
|
+
case Resources.newlineEscapeCharacter:
|
|
66
|
+
return new RegexNewlineEscapeNode(this.createSpan(lexer, startOffset));
|
|
67
|
+
case Resources.carriageReturnEscapeCharacter:
|
|
68
|
+
return new RegexCarriageReturnEscapeNode(this.createSpan(lexer, startOffset));
|
|
69
|
+
case Resources.tabEscapeCharacter:
|
|
70
|
+
return new RegexTabEscapeNode(this.createSpan(lexer, startOffset));
|
|
71
|
+
case Resources.verticalTabEscapeCharacter:
|
|
72
|
+
return new RegexVerticalTabEscapeNode(this.createSpan(lexer, startOffset));
|
|
73
|
+
case Resources.backspaceEscapeCharacter:
|
|
74
|
+
return lexer.isInCharacterClass
|
|
75
|
+
? new RegexBackspaceEscapeNode(this.createSpan(lexer, startOffset))
|
|
76
|
+
: new RegexWordBoundaryAssertionNode(this.createSpan(lexer, startOffset));
|
|
77
|
+
case Resources.nonWordBoundaryEscapeCharacter:
|
|
78
|
+
if (!lexer.isInCharacterClass)
|
|
79
|
+
return new RegexNonWordBoundaryAssertionNode(this.createSpan(lexer, startOffset));
|
|
80
|
+
break;
|
|
81
|
+
case Resources.classControlEscapeCharacter:
|
|
82
|
+
return this.controlEscapeLexer.lex(lexer, startOffset);
|
|
83
|
+
case Resources.digitZero:
|
|
84
|
+
return this.numericEscapeLexer.lex(lexer, startOffset, character);
|
|
85
|
+
case Resources.hexEscapeCharacter:
|
|
86
|
+
return this.codePointEscapeLexer.lexHexadecimal(lexer, startOffset);
|
|
87
|
+
case Resources.unicodeEscapeCharacter:
|
|
88
|
+
return this.codePointEscapeLexer.lexUnicode(lexer, startOffset);
|
|
89
|
+
case Resources.unicodePropertyEscapeCharacter:
|
|
90
|
+
return lexer.unicodeMode
|
|
91
|
+
? this.unicodePropertyEscapeLexer.lex(lexer, startOffset, false)
|
|
92
|
+
: this.createIdentity(lexer, startOffset, codePoint);
|
|
93
|
+
case Resources.negatedUnicodePropertyEscapeCharacter:
|
|
94
|
+
return lexer.unicodeMode
|
|
95
|
+
? this.unicodePropertyEscapeLexer.lex(lexer, startOffset, true)
|
|
96
|
+
: this.createIdentity(lexer, startOffset, codePoint);
|
|
97
|
+
case Resources.namedBackreferenceEscapeCharacter:
|
|
98
|
+
return this.namedBackreferenceLexer.lex(lexer, startOffset, codePoint);
|
|
99
|
+
case Resources.classStringDisjunctionEscapeCharacter:
|
|
100
|
+
return this.lexClassStringDisjunctionStart(lexer, startOffset, codePoint);
|
|
101
|
+
}
|
|
102
|
+
if (String.isAsciiDigit(character))
|
|
103
|
+
return this.numericEscapeLexer.lex(lexer, startOffset, character);
|
|
104
|
+
if (this.identityEscapeValidator.isValid(lexer, character))
|
|
105
|
+
return this.createIdentity(lexer, startOffset, codePoint);
|
|
106
|
+
return this.createUnknown(lexer, startOffset);
|
|
107
|
+
}
|
|
108
|
+
createIdentity(lexer, startOffset, codePoint) {
|
|
109
|
+
const span = this.createSpan(lexer, startOffset);
|
|
110
|
+
return new RegexIdentityEscapeNode(lexer.reader.source.getText(span), codePoint, span);
|
|
111
|
+
}
|
|
112
|
+
createSpan(lexer, startOffset) {
|
|
113
|
+
return lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
|
|
114
|
+
}
|
|
115
|
+
createUnknown(lexer, startOffset) {
|
|
116
|
+
const span = this.createSpan(lexer, startOffset);
|
|
117
|
+
lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1014, span);
|
|
118
|
+
return new RegexUnknownNode(lexer.reader.source.getText(span), span);
|
|
119
|
+
}
|
|
120
|
+
lexClassStringDisjunctionStart(lexer, startOffset, codePoint) {
|
|
121
|
+
if (lexer.isInCharacterClass && lexer.unicodeSetsMode && lexer.reader.peekCodeUnit() === Resources.openBrace) {
|
|
122
|
+
lexer.reader.advance();
|
|
123
|
+
return new RegexClassStringDisjunctionStartNode(this.createSpan(lexer, startOffset));
|
|
124
|
+
}
|
|
125
|
+
return this.identityEscapeValidator.isValid(lexer, Resources.classStringDisjunctionEscapeCharacter)
|
|
126
|
+
? this.createIdentity(lexer, startOffset, codePoint)
|
|
127
|
+
: this.createUnknown(lexer, startOffset);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=escape.lexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escape.lexer.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/lexers/escape.lexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
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 { RegexIdentityEscapeNode } from "../../models/nodes/escapes/regex-identity-escape.node.js";
|
|
11
|
+
import { RegexNamedBackreferenceNode } from "../../models/nodes/escapes/regex-named-backreference.node.js";
|
|
12
|
+
import { RegexUnknownNode } from "../../models/nodes/regex-unknown.node.js";
|
|
13
|
+
import { Resources } from "../../resources.js";
|
|
14
|
+
import { RegexGroupNameReader } from "../readers/regex-group-name.reader.js";
|
|
15
|
+
import { RegexIdentityEscapeValidator } from "../validators/regex-identity-escape.validator.js";
|
|
16
|
+
export class NamedBackreferenceLexer {
|
|
17
|
+
groupNameReader = new RegexGroupNameReader();
|
|
18
|
+
identityEscapeValidator = new RegexIdentityEscapeValidator();
|
|
19
|
+
lex(lexer, startOffset, codePoint) {
|
|
20
|
+
if (lexer.isInCharacterClass || !lexer.hasNamedCapturingGroups || lexer.reader.peekCodeUnit() !== Resources.lessThan)
|
|
21
|
+
return this.createFallback(lexer, startOffset, codePoint);
|
|
22
|
+
lexer.reader.advance();
|
|
23
|
+
const groupName = this.groupNameReader.read(lexer.reader);
|
|
24
|
+
if (Object.isUndefined(groupName))
|
|
25
|
+
return this.createUnknown(lexer, startOffset);
|
|
26
|
+
const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
|
|
27
|
+
if (!groupName.isValid) {
|
|
28
|
+
lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1032, span);
|
|
29
|
+
return new RegexNamedBackreferenceNode(lexer.reader.source.getText(span), groupName.value, span);
|
|
30
|
+
}
|
|
31
|
+
if (!lexer.hasNamedCapturingGroup(groupName.value))
|
|
32
|
+
lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1016, span, [groupName.value]);
|
|
33
|
+
return new RegexNamedBackreferenceNode(lexer.reader.source.getText(span), groupName.value, span);
|
|
34
|
+
}
|
|
35
|
+
createFallback(lexer, startOffset, codePoint) {
|
|
36
|
+
const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
|
|
37
|
+
if (this.identityEscapeValidator.isValid(lexer, Resources.namedBackreferenceEscapeCharacter))
|
|
38
|
+
return new RegexIdentityEscapeNode(lexer.reader.source.getText(span), codePoint, span);
|
|
39
|
+
lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1014, span);
|
|
40
|
+
return new RegexUnknownNode(lexer.reader.source.getText(span), span);
|
|
41
|
+
}
|
|
42
|
+
createUnknown(lexer, startOffset) {
|
|
43
|
+
const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
|
|
44
|
+
lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1015, span);
|
|
45
|
+
return new RegexUnknownNode(lexer.reader.source.getText(span), span);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=named-backreference.lexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"named-backreference.lexer.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/lexers/named-backreference.lexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
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 "@noldova/context.text";
|
|
10
|
+
import { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
|
|
11
|
+
import { RegexBackreferenceNode } from "../../models/nodes/escapes/regex-backreference.node.js";
|
|
12
|
+
import { RegexDecimalEscapeNode } from "../../models/nodes/escapes/regex-decimal-escape.node.js";
|
|
13
|
+
import { RegexIdentityEscapeNode } from "../../models/nodes/escapes/regex-identity-escape.node.js";
|
|
14
|
+
import { RegexLegacyOctalEscapeNode } from "../../models/nodes/escapes/regex-legacy-octal-escape.node.js";
|
|
15
|
+
import { RegexNullEscapeNode } from "../../models/nodes/escapes/regex-null-escape.node.js";
|
|
16
|
+
import { RegexUnknownNode } from "../../models/nodes/regex-unknown.node.js";
|
|
17
|
+
import { Resources } from "../../resources.js";
|
|
18
|
+
export class NumericEscapeLexer {
|
|
19
|
+
static MAXIMUM_FOLLOWING_OCTAL_DIGITS = 2;
|
|
20
|
+
static OCTAL_RADIX = 8;
|
|
21
|
+
lex(lexer, startOffset, firstDigit) {
|
|
22
|
+
return firstDigit === Resources.digitZero
|
|
23
|
+
? this.lexZero(lexer, startOffset)
|
|
24
|
+
: this.lexDecimal(lexer, startOffset, firstDigit);
|
|
25
|
+
}
|
|
26
|
+
createIdentity(lexer, startOffset, character) {
|
|
27
|
+
const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
|
|
28
|
+
return new RegexIdentityEscapeNode(lexer.reader.source.getText(span), character.charCodeAt(0), span);
|
|
29
|
+
}
|
|
30
|
+
lexDecimal(lexer, startOffset, firstDigit) {
|
|
31
|
+
const followingDigits = lexer.reader.peekWhile(String.isAsciiDigit).toString();
|
|
32
|
+
const digits = firstDigit + followingDigits;
|
|
33
|
+
const decimalValue = BigInt(digits);
|
|
34
|
+
const groupCount = lexer.capturingGroupCount;
|
|
35
|
+
if (lexer.isInCharacterClass) {
|
|
36
|
+
if (lexer.unicodeMode) {
|
|
37
|
+
lexer.reader.advance(followingDigits.length);
|
|
38
|
+
const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
|
|
39
|
+
lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1035, span);
|
|
40
|
+
return new RegexDecimalEscapeNode(lexer.reader.source.getText(span), decimalValue, span);
|
|
41
|
+
}
|
|
42
|
+
return String.isAsciiOctalDigit(firstDigit)
|
|
43
|
+
? this.lexLegacyOctal(lexer, startOffset, firstDigit)
|
|
44
|
+
: this.createIdentity(lexer, startOffset, firstDigit);
|
|
45
|
+
}
|
|
46
|
+
if (decimalValue <= BigInt(groupCount)) {
|
|
47
|
+
lexer.reader.advance(followingDigits.length);
|
|
48
|
+
const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
|
|
49
|
+
return new RegexBackreferenceNode(lexer.reader.source.getText(span), Number(decimalValue), span);
|
|
50
|
+
}
|
|
51
|
+
if (lexer.unicodeMode) {
|
|
52
|
+
const diagnosticSpan = lexer.reader.createSpan(startOffset + Resources.backslash.length, digits.length);
|
|
53
|
+
lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1017, diagnosticSpan, [digits, groupCount]);
|
|
54
|
+
lexer.reader.advance(followingDigits.length);
|
|
55
|
+
const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
|
|
56
|
+
return new RegexDecimalEscapeNode(lexer.reader.source.getText(span), decimalValue, span);
|
|
57
|
+
}
|
|
58
|
+
return String.isAsciiOctalDigit(firstDigit)
|
|
59
|
+
? this.lexLegacyOctal(lexer, startOffset, firstDigit)
|
|
60
|
+
: this.createIdentity(lexer, startOffset, firstDigit);
|
|
61
|
+
}
|
|
62
|
+
lexLegacyOctal(lexer, startOffset, firstDigit) {
|
|
63
|
+
const maximumFollowingDigits = firstDigit <= Resources.digitThree
|
|
64
|
+
? NumericEscapeLexer.MAXIMUM_FOLLOWING_OCTAL_DIGITS
|
|
65
|
+
: NumericEscapeLexer.MAXIMUM_FOLLOWING_OCTAL_DIGITS - 1;
|
|
66
|
+
for (let index = 0; index < maximumFollowingDigits; index++) {
|
|
67
|
+
if (!String.isAsciiOctalDigit(lexer.reader.peekCodeUnit()))
|
|
68
|
+
break;
|
|
69
|
+
lexer.reader.advance();
|
|
70
|
+
}
|
|
71
|
+
const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
|
|
72
|
+
const value = lexer.reader.source.getText(span);
|
|
73
|
+
return new RegexLegacyOctalEscapeNode(value, Number.parseInt(value.substring(Resources.backslash.length), NumericEscapeLexer.OCTAL_RADIX), span);
|
|
74
|
+
}
|
|
75
|
+
lexZero(lexer, startOffset) {
|
|
76
|
+
const followingCharacter = lexer.reader.peekCodeUnit();
|
|
77
|
+
if (lexer.unicodeMode && String.isAsciiDigit(followingCharacter)) {
|
|
78
|
+
const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
|
|
79
|
+
lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1014, span);
|
|
80
|
+
return new RegexUnknownNode(lexer.reader.source.getText(span), span);
|
|
81
|
+
}
|
|
82
|
+
if (!lexer.unicodeMode && String.isAsciiOctalDigit(followingCharacter))
|
|
83
|
+
return this.lexLegacyOctal(lexer, startOffset, Resources.digitZero);
|
|
84
|
+
return new RegexNullEscapeNode(lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=numeric-escape.lexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numeric-escape.lexer.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/lexers/numeric-escape.lexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,200 @@
|
|
|
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 { nameof } from "@noldova/context.core";
|
|
9
|
+
import { ArgumentException } from "@noldova/context.exceptions";
|
|
10
|
+
import { EndOfFileNode, Lexer, SourceReader } from "@noldova/context.parsers";
|
|
11
|
+
import { RegexEndAssertionNode } from "../../models/nodes/assertions/regex-end-assertion.node.js";
|
|
12
|
+
import { RegexStartAssertionNode } from "../../models/nodes/assertions/regex-start-assertion.node.js";
|
|
13
|
+
import { RegexAmpersandAmpersandNode } from "../../models/nodes/punctuators/regex-ampersand-ampersand.node.js";
|
|
14
|
+
import { RegexAsteriskNode } from "../../models/nodes/punctuators/regex-asterisk.node.js";
|
|
15
|
+
import { RegexBarNode } from "../../models/nodes/punctuators/regex-bar.node.js";
|
|
16
|
+
import { RegexCloseBraceNode } from "../../models/nodes/punctuators/regex-close-brace.node.js";
|
|
17
|
+
import { RegexCloseBracketNode } from "../../models/nodes/punctuators/regex-close-bracket.node.js";
|
|
18
|
+
import { RegexCloseParenthesisNode } from "../../models/nodes/punctuators/regex-close-parenthesis.node.js";
|
|
19
|
+
import { RegexColonNode } from "../../models/nodes/punctuators/regex-colon.node.js";
|
|
20
|
+
import { RegexCommaNode } from "../../models/nodes/punctuators/regex-comma.node.js";
|
|
21
|
+
import { RegexEqualsNode } from "../../models/nodes/punctuators/regex-equals.node.js";
|
|
22
|
+
import { RegexExclamationNode } from "../../models/nodes/punctuators/regex-exclamation.node.js";
|
|
23
|
+
import { RegexGreaterThanNode } from "../../models/nodes/punctuators/regex-greater-than.node.js";
|
|
24
|
+
import { RegexHyphenHyphenNode } from "../../models/nodes/punctuators/regex-hyphen-hyphen.node.js";
|
|
25
|
+
import { RegexHyphenNode } from "../../models/nodes/punctuators/regex-hyphen.node.js";
|
|
26
|
+
import { RegexLessThanNode } from "../../models/nodes/punctuators/regex-less-than.node.js";
|
|
27
|
+
import { RegexOpenBraceNode } from "../../models/nodes/punctuators/regex-open-brace.node.js";
|
|
28
|
+
import { RegexOpenBracketNode } from "../../models/nodes/punctuators/regex-open-bracket.node.js";
|
|
29
|
+
import { RegexOpenParenthesisNode } from "../../models/nodes/punctuators/regex-open-parenthesis.node.js";
|
|
30
|
+
import { RegexPlusNode } from "../../models/nodes/punctuators/regex-plus.node.js";
|
|
31
|
+
import { RegexQuestionNode } from "../../models/nodes/punctuators/regex-question.node.js";
|
|
32
|
+
import { RegexDotNode } from "../../models/nodes/regex-dot.node.js";
|
|
33
|
+
import { RegexFlagsNode } from "../../models/nodes/regex-flags.node.js";
|
|
34
|
+
import { Resources } from "../../resources.js";
|
|
35
|
+
import { RegexCapturingGroupSummaryReader } from "../readers/regex-capturing-group-summary.reader.js";
|
|
36
|
+
import { CharacterLexer } from "./character.lexer.js";
|
|
37
|
+
import { EscapeLexer } from "./escape.lexer.js";
|
|
38
|
+
export class RegexLexer extends Lexer {
|
|
39
|
+
capturingGroupSummary;
|
|
40
|
+
characterLexer = new CharacterLexer();
|
|
41
|
+
escapeLexer = new EscapeLexer();
|
|
42
|
+
characterClassDepth = 0;
|
|
43
|
+
groupNameDepth = 0;
|
|
44
|
+
flagsNode;
|
|
45
|
+
inputSpan;
|
|
46
|
+
constructor(...constructorArguments) {
|
|
47
|
+
let diagnosticCollector;
|
|
48
|
+
let flagsSpan;
|
|
49
|
+
let reader;
|
|
50
|
+
let resolvedInputSpan;
|
|
51
|
+
if (constructorArguments.length === 4)
|
|
52
|
+
[reader, flagsSpan, resolvedInputSpan, diagnosticCollector] = constructorArguments;
|
|
53
|
+
else {
|
|
54
|
+
const [source, patternSpan, sourceFlagsSpan, sourceInputSpan, sourceDiagnosticCollector] = constructorArguments;
|
|
55
|
+
reader = new SourceReader(source, patternSpan);
|
|
56
|
+
flagsSpan = sourceFlagsSpan;
|
|
57
|
+
resolvedInputSpan = sourceInputSpan;
|
|
58
|
+
diagnosticCollector = sourceDiagnosticCollector;
|
|
59
|
+
if (flagsSpan.startOffset < patternSpan.endOffset)
|
|
60
|
+
throw new ArgumentException(Resources.flagsOutsideInput, nameof(t => t.flagsNode));
|
|
61
|
+
}
|
|
62
|
+
const source = reader.source;
|
|
63
|
+
source.getSpan(flagsSpan);
|
|
64
|
+
source.getSpan(resolvedInputSpan);
|
|
65
|
+
if (reader.currentOffset !== reader.startOffset)
|
|
66
|
+
throw new ArgumentException(Resources.patternReaderMustStartAtRegionStart, nameof(t => t.reader));
|
|
67
|
+
if (reader.startOffset < resolvedInputSpan.startOffset || reader.endOffset > resolvedInputSpan.endOffset)
|
|
68
|
+
throw new ArgumentException(Resources.patternOutsideInput, nameof(t => t.reader));
|
|
69
|
+
if (flagsSpan.startOffset < reader.endOffset || flagsSpan.endOffset > resolvedInputSpan.endOffset)
|
|
70
|
+
throw new ArgumentException(Resources.flagsOutsideInput, nameof(t => t.flagsNode));
|
|
71
|
+
super(reader, diagnosticCollector);
|
|
72
|
+
this.inputSpan = resolvedInputSpan;
|
|
73
|
+
this.flagsNode = new RegexFlagsNode(source.getText(flagsSpan), flagsSpan);
|
|
74
|
+
this.capturingGroupSummary = new RegexCapturingGroupSummaryReader().read(reader, this.unicodeSetsMode);
|
|
75
|
+
}
|
|
76
|
+
get capturingGroupCount() {
|
|
77
|
+
return this.capturingGroupSummary.capturingGroupCount;
|
|
78
|
+
}
|
|
79
|
+
get hasNamedCapturingGroups() {
|
|
80
|
+
return this.capturingGroupSummary.namedCapturingGroupNames.size > 0;
|
|
81
|
+
}
|
|
82
|
+
get isInCharacterClass() {
|
|
83
|
+
return this.characterClassDepth > 0;
|
|
84
|
+
}
|
|
85
|
+
get isInGroupName() {
|
|
86
|
+
return this.groupNameDepth > 0;
|
|
87
|
+
}
|
|
88
|
+
get unicodeMode() {
|
|
89
|
+
return this.flagsNode.unicode || this.flagsNode.unicodeSets;
|
|
90
|
+
}
|
|
91
|
+
get unicodeSetsMode() {
|
|
92
|
+
return this.flagsNode.unicodeSets;
|
|
93
|
+
}
|
|
94
|
+
enterCharacterClass() {
|
|
95
|
+
this.characterClassDepth++;
|
|
96
|
+
}
|
|
97
|
+
leaveCharacterClass() {
|
|
98
|
+
this.characterClassDepth--;
|
|
99
|
+
}
|
|
100
|
+
enterGroupName() {
|
|
101
|
+
this.groupNameDepth++;
|
|
102
|
+
}
|
|
103
|
+
leaveGroupName() {
|
|
104
|
+
this.groupNameDepth--;
|
|
105
|
+
}
|
|
106
|
+
hasNamedCapturingGroup(groupName) {
|
|
107
|
+
return this.capturingGroupSummary.namedCapturingGroupNames.has(groupName);
|
|
108
|
+
}
|
|
109
|
+
lexNode() {
|
|
110
|
+
const reader = this.reader;
|
|
111
|
+
if (reader.isAtEnd)
|
|
112
|
+
return new EndOfFileNode(reader.createSpan(reader.currentOffset, 0));
|
|
113
|
+
const character = reader.peekCodeUnit();
|
|
114
|
+
if (character === Resources.backslash)
|
|
115
|
+
return this.escapeLexer.lex(this);
|
|
116
|
+
if (this.isInCharacterClass) {
|
|
117
|
+
if (character === Resources.closeBracket) {
|
|
118
|
+
const node = this.lexPunctuator(RegexCloseBracketNode);
|
|
119
|
+
this.leaveCharacterClass();
|
|
120
|
+
return node;
|
|
121
|
+
}
|
|
122
|
+
if (!this.unicodeSetsMode)
|
|
123
|
+
return character === Resources.hyphen ? this.lexPunctuator(RegexHyphenNode) : this.characterLexer.lex(this, character);
|
|
124
|
+
if (character === Resources.ampersandAmpersand.charAt(0) && reader.startsWith(Resources.ampersandAmpersand))
|
|
125
|
+
return this.lexPunctuator(RegexAmpersandAmpersandNode, Resources.ampersandAmpersand.length);
|
|
126
|
+
if (character === Resources.hyphen && reader.startsWith(Resources.hyphenHyphen))
|
|
127
|
+
return this.lexPunctuator(RegexHyphenHyphenNode, Resources.hyphenHyphen.length);
|
|
128
|
+
if (character !== Resources.openBracket && character !== Resources.hyphen && character !== Resources.bar && character !== Resources.closeBrace)
|
|
129
|
+
return this.characterLexer.lex(this, character);
|
|
130
|
+
}
|
|
131
|
+
switch (character) {
|
|
132
|
+
case Resources.caret:
|
|
133
|
+
return this.lexStartAssertion();
|
|
134
|
+
case Resources.dollar:
|
|
135
|
+
return this.lexEndAssertion();
|
|
136
|
+
case Resources.dot:
|
|
137
|
+
return this.lexDot();
|
|
138
|
+
case Resources.asterisk:
|
|
139
|
+
return this.lexPunctuator(RegexAsteriskNode);
|
|
140
|
+
case Resources.bar:
|
|
141
|
+
return this.lexPunctuator(RegexBarNode);
|
|
142
|
+
case Resources.closeBrace:
|
|
143
|
+
return this.lexPunctuator(RegexCloseBraceNode);
|
|
144
|
+
case Resources.closeBracket:
|
|
145
|
+
return this.lexPunctuator(RegexCloseBracketNode);
|
|
146
|
+
case Resources.closeParenthesis:
|
|
147
|
+
return this.lexPunctuator(RegexCloseParenthesisNode);
|
|
148
|
+
case Resources.colon:
|
|
149
|
+
return this.lexPunctuator(RegexColonNode);
|
|
150
|
+
case Resources.comma:
|
|
151
|
+
return this.lexPunctuator(RegexCommaNode);
|
|
152
|
+
case Resources.equals:
|
|
153
|
+
return this.lexPunctuator(RegexEqualsNode);
|
|
154
|
+
case Resources.exclamation:
|
|
155
|
+
return this.lexPunctuator(RegexExclamationNode);
|
|
156
|
+
case Resources.greaterThan:
|
|
157
|
+
return this.lexPunctuator(RegexGreaterThanNode);
|
|
158
|
+
case Resources.hyphen:
|
|
159
|
+
return this.lexPunctuator(RegexHyphenNode);
|
|
160
|
+
case Resources.lessThan:
|
|
161
|
+
return this.lexPunctuator(RegexLessThanNode);
|
|
162
|
+
case Resources.openBrace:
|
|
163
|
+
return this.lexPunctuator(RegexOpenBraceNode);
|
|
164
|
+
case Resources.openBracket: {
|
|
165
|
+
const node = this.lexPunctuator(RegexOpenBracketNode);
|
|
166
|
+
this.enterCharacterClass();
|
|
167
|
+
return node;
|
|
168
|
+
}
|
|
169
|
+
case Resources.openParenthesis:
|
|
170
|
+
return this.lexPunctuator(RegexOpenParenthesisNode);
|
|
171
|
+
case Resources.plus:
|
|
172
|
+
return this.lexPunctuator(RegexPlusNode);
|
|
173
|
+
case Resources.question:
|
|
174
|
+
return this.lexPunctuator(RegexQuestionNode);
|
|
175
|
+
default:
|
|
176
|
+
return this.characterLexer.lex(this, character);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
lexDot() {
|
|
180
|
+
const startOffset = this.reader.currentOffset;
|
|
181
|
+
this.reader.advance();
|
|
182
|
+
return new RegexDotNode(this.reader.createSpan(startOffset, Resources.dot.length));
|
|
183
|
+
}
|
|
184
|
+
lexEndAssertion() {
|
|
185
|
+
const startOffset = this.reader.currentOffset;
|
|
186
|
+
this.reader.advance();
|
|
187
|
+
return new RegexEndAssertionNode(this.reader.createSpan(startOffset, Resources.dollar.length));
|
|
188
|
+
}
|
|
189
|
+
lexPunctuator(nodeType, length = 1) {
|
|
190
|
+
const startOffset = this.reader.currentOffset;
|
|
191
|
+
this.reader.advance(length);
|
|
192
|
+
return new nodeType(this.reader.createSpan(startOffset, length));
|
|
193
|
+
}
|
|
194
|
+
lexStartAssertion() {
|
|
195
|
+
const startOffset = this.reader.currentOffset;
|
|
196
|
+
this.reader.advance();
|
|
197
|
+
return new RegexStartAssertionNode(this.reader.createSpan(startOffset, Resources.caret.length));
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=regex.lexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex.lexer.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/lexers/regex.lexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
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 { RegexUnicodePropertyEscapeNode } from "../../models/nodes/escapes/regex-unicode-property-escape.node.js";
|
|
11
|
+
import { RegexUnknownNode } from "../../models/nodes/regex-unknown.node.js";
|
|
12
|
+
import { Resources } from "../../resources.js";
|
|
13
|
+
import { RegexUnicodePropertyCatalog } from "../unicode/regex-unicode-property-catalog.js";
|
|
14
|
+
export class UnicodePropertyEscapeLexer {
|
|
15
|
+
lex(lexer, startOffset, negated) {
|
|
16
|
+
if (lexer.reader.peekCodeUnit() !== Resources.openBrace)
|
|
17
|
+
return this.createUnknown(lexer, startOffset);
|
|
18
|
+
lexer.reader.advance();
|
|
19
|
+
const expressionStartOffset = lexer.reader.currentOffset;
|
|
20
|
+
lexer.reader.readUntil(t => t === Resources.closeBrace);
|
|
21
|
+
if (lexer.reader.peekCodeUnit() !== Resources.closeBrace)
|
|
22
|
+
return this.createUnknown(lexer, startOffset);
|
|
23
|
+
const expression = lexer.reader.source.getText(expressionStartOffset, lexer.reader.currentOffset - expressionStartOffset);
|
|
24
|
+
lexer.reader.advance();
|
|
25
|
+
if (expression.length === 0)
|
|
26
|
+
return this.createUnknown(lexer, startOffset);
|
|
27
|
+
const separatorIndex = expression.indexOf(Resources.equals);
|
|
28
|
+
const propertyName = separatorIndex < 0 ? undefined : expression.substring(0, separatorIndex);
|
|
29
|
+
const propertyValue = separatorIndex < 0 ? expression : expression.substring(separatorIndex + Resources.equals.length);
|
|
30
|
+
const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
|
|
31
|
+
let mayContainStrings = false;
|
|
32
|
+
if (Object.isUndefined(propertyName)) {
|
|
33
|
+
if (!RegexUnicodePropertyCatalog.isValidLoneProperty(propertyValue))
|
|
34
|
+
lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1020, span, [propertyValue]);
|
|
35
|
+
else if (RegexUnicodePropertyCatalog.isStringProperty(propertyValue)) {
|
|
36
|
+
if (!lexer.unicodeSetsMode)
|
|
37
|
+
lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1021, span, [propertyValue]);
|
|
38
|
+
else if (negated)
|
|
39
|
+
lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1022, span);
|
|
40
|
+
else
|
|
41
|
+
mayContainStrings = true;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const canonicalName = RegexUnicodePropertyCatalog.getCanonicalPropertyName(propertyName);
|
|
46
|
+
if (Object.isUndefined(canonicalName))
|
|
47
|
+
lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1019, span, [propertyName]);
|
|
48
|
+
else if (!RegexUnicodePropertyCatalog.isPropertyValue(canonicalName, propertyValue))
|
|
49
|
+
lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1020, span, [propertyValue]);
|
|
50
|
+
}
|
|
51
|
+
return new RegexUnicodePropertyEscapeNode(lexer.reader.source.getText(span), propertyName, propertyValue, negated, mayContainStrings, span);
|
|
52
|
+
}
|
|
53
|
+
createUnknown(lexer, startOffset) {
|
|
54
|
+
const span = lexer.reader.createSpan(startOffset, lexer.reader.currentOffset - startOffset);
|
|
55
|
+
lexer.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1018, span);
|
|
56
|
+
return new RegexUnknownNode(lexer.reader.source.getText(span), span);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=unicode-property-escape.lexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unicode-property-escape.lexer.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/lexers/unicode-property-escape.lexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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 { RegexCloseParenthesisNode } from "../../models/nodes/punctuators/regex-close-parenthesis.node.js";
|
|
10
|
+
import { RegexAlternativeNode } from "../../models/nodes/regex-alternative.node.js";
|
|
11
|
+
export class RegexAlternativeParser {
|
|
12
|
+
regexParser;
|
|
13
|
+
constructor(regexParser) {
|
|
14
|
+
this.regexParser = regexParser;
|
|
15
|
+
}
|
|
16
|
+
parse(stopsAtCloseParenthesis) {
|
|
17
|
+
const startOffset = this.regexParser.currentNode.span.startOffset;
|
|
18
|
+
const terms = [];
|
|
19
|
+
while (!this.regexParser.isEndOfFile &&
|
|
20
|
+
!(this.regexParser.currentNode instanceof RegexBarNode) &&
|
|
21
|
+
(!stopsAtCloseParenthesis || !(this.regexParser.currentNode instanceof RegexCloseParenthesisNode)))
|
|
22
|
+
terms.push(...this.regexParser.parseTerm());
|
|
23
|
+
const endOffset = this.regexParser.currentNode.span.startOffset;
|
|
24
|
+
return new RegexAlternativeNode(terms, this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=regex-alternative.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-alternative.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-alternative.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gEAAgE,CAAC;AAC3G,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,KAAK,GAAW,EAAE,CAAC;QAEzB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW;YAClC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,YAAY,YAAY,CAAC;YACvD,CAAC,CAAC,uBAAuB,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,YAAY,yBAAyB,CAAC,CAAC;YAClG,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC;QAE9C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QAChE,OAAO,IAAI,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC;IAC9H,CAAC;CACF"}
|