@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,78 @@
|
|
|
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 { StringBuilder } from "@noldova/context.text";
|
|
10
|
+
import { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
|
|
11
|
+
import { RegexModifierGroupNode } from "../../models/nodes/groups/regex-modifier-group.node.js";
|
|
12
|
+
import { RegexColonNode } from "../../models/nodes/punctuators/regex-colon.node.js";
|
|
13
|
+
import { RegexHyphenNode } from "../../models/nodes/punctuators/regex-hyphen.node.js";
|
|
14
|
+
import { RegexCharacterNode } from "../../models/nodes/regex-character.node.js";
|
|
15
|
+
import { Resources } from "../../resources.js";
|
|
16
|
+
export class RegexModifierGroupParser {
|
|
17
|
+
groupEndParser;
|
|
18
|
+
regexParser;
|
|
19
|
+
constructor(regexParser, groupEndParser) {
|
|
20
|
+
this.regexParser = regexParser;
|
|
21
|
+
this.groupEndParser = groupEndParser;
|
|
22
|
+
}
|
|
23
|
+
parse(startOffset) {
|
|
24
|
+
const prefixStartOffset = this.regexParser.currentNode.span.startOffset;
|
|
25
|
+
const enabledModifiers = this.readModifiers();
|
|
26
|
+
let disabledModifiers = String.empty;
|
|
27
|
+
let hasMinus = false;
|
|
28
|
+
if (this.regexParser.currentNode instanceof RegexHyphenNode) {
|
|
29
|
+
hasMinus = true;
|
|
30
|
+
this.regexParser.advance();
|
|
31
|
+
disabledModifiers = this.readModifiers();
|
|
32
|
+
}
|
|
33
|
+
if (hasMinus && enabledModifiers.length === 0 && disabledModifiers.length === 0)
|
|
34
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1006, this.createSpan(prefixStartOffset, this.regexParser.currentNode.span.startOffset));
|
|
35
|
+
this.validateModifiers(enabledModifiers, disabledModifiers, prefixStartOffset);
|
|
36
|
+
if (Object.isUndefined(this.regexParser.tryConsume(RegexColonNode)))
|
|
37
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1010, this.regexParser.currentNode.span);
|
|
38
|
+
const disjunctionNode = this.regexParser.parseDisjunction(true);
|
|
39
|
+
const endOffset = this.groupEndParser.parse();
|
|
40
|
+
return new RegexModifierGroupNode(enabledModifiers, disabledModifiers, disjunctionNode, this.createSpan(startOffset, endOffset));
|
|
41
|
+
}
|
|
42
|
+
createSpan(startOffset, endOffset) {
|
|
43
|
+
return this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
|
|
44
|
+
}
|
|
45
|
+
readModifiers() {
|
|
46
|
+
const modifiers = new StringBuilder();
|
|
47
|
+
let node = this.regexParser.currentNode;
|
|
48
|
+
while (node instanceof RegexCharacterNode) {
|
|
49
|
+
if (Resources.modifierCharacters.includes(node.value))
|
|
50
|
+
modifiers.append(node.value);
|
|
51
|
+
else
|
|
52
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1007, node.span);
|
|
53
|
+
this.regexParser.advance();
|
|
54
|
+
node = this.regexParser.currentNode;
|
|
55
|
+
}
|
|
56
|
+
return modifiers.toString();
|
|
57
|
+
}
|
|
58
|
+
validateModifiers(enabledModifiers, disabledModifiers, startOffset) {
|
|
59
|
+
const seenEnabled = new Set();
|
|
60
|
+
const seenDisabled = new Set();
|
|
61
|
+
const span = this.createSpan(startOffset, this.regexParser.currentNode.span.startOffset);
|
|
62
|
+
for (const modifier of enabledModifiers) {
|
|
63
|
+
if (seenEnabled.has(modifier))
|
|
64
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1008, span, [modifier]);
|
|
65
|
+
else
|
|
66
|
+
seenEnabled.add(modifier);
|
|
67
|
+
}
|
|
68
|
+
for (const modifier of disabledModifiers) {
|
|
69
|
+
if (seenDisabled.has(modifier))
|
|
70
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1008, span, [modifier]);
|
|
71
|
+
else
|
|
72
|
+
seenDisabled.add(modifier);
|
|
73
|
+
if (seenEnabled.has(modifier))
|
|
74
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1009, span, [modifier]);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=regex-modifier-group.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-modifier-group.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-modifier-group.parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
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 { StringBuilder } from "@noldova/context.text";
|
|
10
|
+
import { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
|
|
11
|
+
import { RegexUnicodeEscapeNode } from "../../models/nodes/escapes/regex-unicode-escape.node.js";
|
|
12
|
+
import { RegexNamedCapturingGroupNode } from "../../models/nodes/groups/regex-named-capturing-group.node.js";
|
|
13
|
+
import { RegexGreaterThanNode } from "../../models/nodes/punctuators/regex-greater-than.node.js";
|
|
14
|
+
import { RegexGroupNameValidator } from "../validators/regex-group-name.validator.js";
|
|
15
|
+
export class RegexNamedCapturingGroupParser {
|
|
16
|
+
groupEndParser;
|
|
17
|
+
groupNameValidator = new RegexGroupNameValidator();
|
|
18
|
+
regexParser;
|
|
19
|
+
constructor(regexParser, groupEndParser) {
|
|
20
|
+
this.regexParser = regexParser;
|
|
21
|
+
this.groupEndParser = groupEndParser;
|
|
22
|
+
}
|
|
23
|
+
parse(startOffset) {
|
|
24
|
+
const groupIndex = this.regexParser.context.claimCapturingGroupIndex();
|
|
25
|
+
const groupNameBuilder = new StringBuilder();
|
|
26
|
+
let isValidName = true;
|
|
27
|
+
this.regexParser.regexLexer.enterGroupName();
|
|
28
|
+
this.regexParser.advance();
|
|
29
|
+
const nameStartOffset = this.regexParser.currentNode.span.startOffset;
|
|
30
|
+
try {
|
|
31
|
+
while (!this.regexParser.isEndOfFile && !(this.regexParser.currentNode instanceof RegexGreaterThanNode)) {
|
|
32
|
+
const node = this.regexParser.currentNode;
|
|
33
|
+
const value = node instanceof RegexUnicodeEscapeNode
|
|
34
|
+
? String.fromCodePoint(node.codePoint)
|
|
35
|
+
: this.regexParser.context.source.getText(node.span);
|
|
36
|
+
const codePoint = value.codePointAt(0);
|
|
37
|
+
if (!this.groupNameValidator.isValidCodePoint(codePoint, groupNameBuilder.length === 0))
|
|
38
|
+
isValidName = false;
|
|
39
|
+
groupNameBuilder.append(value);
|
|
40
|
+
this.regexParser.advance();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
this.regexParser.regexLexer.leaveGroupName();
|
|
45
|
+
}
|
|
46
|
+
const groupName = groupNameBuilder.toString();
|
|
47
|
+
const nameEndOffset = this.regexParser.currentNode.span.startOffset;
|
|
48
|
+
const nameSpan = this.regexParser.regexLexer.reader.createSpan(nameStartOffset, nameEndOffset - nameStartOffset);
|
|
49
|
+
if (!isValidName || groupNameBuilder.length === 0)
|
|
50
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1023, nameSpan);
|
|
51
|
+
else
|
|
52
|
+
this.regexParser.context.registerNamedCapturingGroup(groupName, nameSpan);
|
|
53
|
+
this.regexParser.tryConsume(RegexGreaterThanNode);
|
|
54
|
+
const disjunctionNode = this.regexParser.parseDisjunction(true);
|
|
55
|
+
const endOffset = this.groupEndParser.parse();
|
|
56
|
+
const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
|
|
57
|
+
return new RegexNamedCapturingGroupNode(groupIndex, groupName, disjunctionNode, span);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=regex-named-capturing-group.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-named-capturing-group.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-named-capturing-group.parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 { RegexNonCapturingGroupNode } from "../../models/nodes/groups/regex-non-capturing-group.node.js";
|
|
9
|
+
export class RegexNonCapturingGroupParser {
|
|
10
|
+
groupEndParser;
|
|
11
|
+
regexParser;
|
|
12
|
+
constructor(regexParser, groupEndParser) {
|
|
13
|
+
this.regexParser = regexParser;
|
|
14
|
+
this.groupEndParser = groupEndParser;
|
|
15
|
+
}
|
|
16
|
+
parse(startOffset) {
|
|
17
|
+
this.regexParser.advance();
|
|
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 RegexNonCapturingGroupNode(disjunctionNode, span);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=regex-non-capturing-group.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-non-capturing-group.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-non-capturing-group.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,6DAA6D,CAAC;AAIzG,MAAM,OAAO,4BAA4B;IACtB,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,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,0BAA0B,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
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 { RegexPatternNode } from "../../models/nodes/regex-pattern.node.js";
|
|
9
|
+
export class RegexPatternParser {
|
|
10
|
+
regexParser;
|
|
11
|
+
constructor(regexParser) {
|
|
12
|
+
this.regexParser = regexParser;
|
|
13
|
+
}
|
|
14
|
+
parse() {
|
|
15
|
+
const startOffset = this.regexParser.currentNode.span.startOffset;
|
|
16
|
+
const disjunctionNode = this.regexParser.parseDisjunction(false);
|
|
17
|
+
const endOffset = this.regexParser.currentNode.span.startOffset;
|
|
18
|
+
const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
|
|
19
|
+
const value = this.regexParser.context.source.getText(span);
|
|
20
|
+
return new RegexPatternNode(value, disjunctionNode, span);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=regex-pattern.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-pattern.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-pattern.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAG5E,MAAM,OAAO,kBAAkB;IACZ,WAAW,CAAoB;IAEhD,YAAmB,WAA8B;QAC/C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAEM,KAAK;QACV,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QAClE,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC;QACjG,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE5D,OAAO,IAAI,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;CACF"}
|
|
@@ -0,0 +1,85 @@
|
|
|
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 { RegexOpenBraceNode } from "../../models/nodes/punctuators/regex-open-brace.node.js";
|
|
12
|
+
import { RegexQuestionNode } from "../../models/nodes/punctuators/regex-question.node.js";
|
|
13
|
+
import { RegexQuantifierNode } from "../../models/nodes/regex-quantifier.node.js";
|
|
14
|
+
import { Resources } from "../../resources.js";
|
|
15
|
+
export class RegexQuantifierParser {
|
|
16
|
+
regexParser;
|
|
17
|
+
constructor(regexParser) {
|
|
18
|
+
this.regexParser = regexParser;
|
|
19
|
+
}
|
|
20
|
+
parse() {
|
|
21
|
+
const minimum = this.regexParser.currentNode.getRegexQuantifierMinimum();
|
|
22
|
+
if (!Object.isUndefined(minimum))
|
|
23
|
+
return this.parseSimple(minimum, this.regexParser.currentNode.getRegexQuantifierMaximum());
|
|
24
|
+
return this.regexParser.currentNode instanceof RegexOpenBraceNode
|
|
25
|
+
? this.parseBraced()
|
|
26
|
+
: undefined;
|
|
27
|
+
}
|
|
28
|
+
parseBraced() {
|
|
29
|
+
const reader = this.regexParser.regexLexer.reader;
|
|
30
|
+
const startOffset = this.regexParser.currentNode.span.startOffset;
|
|
31
|
+
let offset = 0;
|
|
32
|
+
let character = reader.peekCodeUnit(offset);
|
|
33
|
+
while (String.isAsciiDigit(character)) {
|
|
34
|
+
offset++;
|
|
35
|
+
character = reader.peekCodeUnit(offset);
|
|
36
|
+
}
|
|
37
|
+
if (offset === 0)
|
|
38
|
+
return undefined;
|
|
39
|
+
const minimumStartOffset = startOffset + Resources.openBrace.length;
|
|
40
|
+
const minimumText = this.regexParser.context.source.getText(minimumStartOffset, reader.currentOffset + offset - minimumStartOffset);
|
|
41
|
+
let maximumText = minimumText;
|
|
42
|
+
const separator = reader.peekCodeUnit(offset);
|
|
43
|
+
if (separator === Resources.comma) {
|
|
44
|
+
offset += Resources.comma.length;
|
|
45
|
+
const maximumStartOffset = offset;
|
|
46
|
+
character = reader.peekCodeUnit(offset);
|
|
47
|
+
while (String.isAsciiDigit(character)) {
|
|
48
|
+
offset++;
|
|
49
|
+
character = reader.peekCodeUnit(offset);
|
|
50
|
+
}
|
|
51
|
+
maximumText = offset === maximumStartOffset
|
|
52
|
+
? String.empty
|
|
53
|
+
: this.regexParser.context.source.getText(reader.currentOffset + maximumStartOffset, offset - maximumStartOffset);
|
|
54
|
+
}
|
|
55
|
+
if (reader.peekCodeUnit(offset) !== Resources.closeBrace)
|
|
56
|
+
return undefined;
|
|
57
|
+
const endOffset = reader.currentOffset + offset + Resources.closeBrace.length;
|
|
58
|
+
while (this.regexParser.currentNode.span.endOffset < endOffset)
|
|
59
|
+
this.regexParser.advance();
|
|
60
|
+
this.regexParser.advance();
|
|
61
|
+
const greedy = !(this.regexParser.currentNode instanceof RegexQuestionNode);
|
|
62
|
+
if (!greedy)
|
|
63
|
+
this.regexParser.advance();
|
|
64
|
+
const finalEndOffset = this.regexParser.currentNode.span.startOffset;
|
|
65
|
+
const span = reader.createSpan(startOffset, finalEndOffset - startOffset);
|
|
66
|
+
const minimum = BigInt(minimumText);
|
|
67
|
+
const maximum = maximumText.length === 0
|
|
68
|
+
? undefined
|
|
69
|
+
: BigInt(maximumText);
|
|
70
|
+
if (!Object.isUndefined(maximum) && minimum > maximum)
|
|
71
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1012, span);
|
|
72
|
+
return new RegexQuantifierNode(this.regexParser.context.source.getText(span), minimum, maximum, greedy, span);
|
|
73
|
+
}
|
|
74
|
+
parseSimple(minimum, maximum) {
|
|
75
|
+
const startOffset = this.regexParser.currentNode.span.startOffset;
|
|
76
|
+
this.regexParser.advance();
|
|
77
|
+
const greedy = !(this.regexParser.currentNode instanceof RegexQuestionNode);
|
|
78
|
+
if (!greedy)
|
|
79
|
+
this.regexParser.advance();
|
|
80
|
+
const endOffset = this.regexParser.currentNode.span.startOffset;
|
|
81
|
+
const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
|
|
82
|
+
return new RegexQuantifierNode(this.regexParser.context.source.getText(span), minimum, maximum, greedy, span);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=regex-quantifier.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-quantifier.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-quantifier.parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
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 { RegexLookaheadAssertionNode } from "../../models/nodes/assertions/regex-lookahead-assertion.node.js";
|
|
11
|
+
import { RegexCloseBraceNode } from "../../models/nodes/punctuators/regex-close-brace.node.js";
|
|
12
|
+
import { RegexCloseBracketNode } from "../../models/nodes/punctuators/regex-close-bracket.node.js";
|
|
13
|
+
import { RegexCloseParenthesisNode } from "../../models/nodes/punctuators/regex-close-parenthesis.node.js";
|
|
14
|
+
import { RegexOpenBraceNode } from "../../models/nodes/punctuators/regex-open-brace.node.js";
|
|
15
|
+
export class RegexTermParser {
|
|
16
|
+
regexParser;
|
|
17
|
+
constructor(regexParser) {
|
|
18
|
+
this.regexParser = regexParser;
|
|
19
|
+
}
|
|
20
|
+
parse() {
|
|
21
|
+
const assertion = this.regexParser.parseAssertion();
|
|
22
|
+
if (!Object.isUndefined(assertion)) {
|
|
23
|
+
if (!this.regexParser.regexLexer.unicodeMode && assertion instanceof RegexLookaheadAssertionNode) {
|
|
24
|
+
const quantifier = this.regexParser.parseQuantifier();
|
|
25
|
+
if (!Object.isUndefined(quantifier))
|
|
26
|
+
return [assertion, quantifier];
|
|
27
|
+
}
|
|
28
|
+
return [assertion];
|
|
29
|
+
}
|
|
30
|
+
const misplacedQuantifier = this.regexParser.parseQuantifier();
|
|
31
|
+
if (!Object.isUndefined(misplacedQuantifier)) {
|
|
32
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1013, misplacedQuantifier.span);
|
|
33
|
+
return [misplacedQuantifier];
|
|
34
|
+
}
|
|
35
|
+
const atom = this.regexParser.currentNode.parseRegexAtom(this.regexParser);
|
|
36
|
+
if (Object.isUndefined(atom)) {
|
|
37
|
+
const unrecognizedTerm = this.regexParser.currentNode;
|
|
38
|
+
if (unrecognizedTerm instanceof RegexCloseParenthesisNode
|
|
39
|
+
|| this.regexParser.regexLexer.unicodeMode && (unrecognizedTerm instanceof RegexCloseBracketNode || unrecognizedTerm instanceof RegexCloseBraceNode))
|
|
40
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1033, unrecognizedTerm.span);
|
|
41
|
+
else if (this.regexParser.regexLexer.unicodeMode && unrecognizedTerm instanceof RegexOpenBraceNode)
|
|
42
|
+
this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1011, unrecognizedTerm.span);
|
|
43
|
+
this.regexParser.advance();
|
|
44
|
+
return [unrecognizedTerm];
|
|
45
|
+
}
|
|
46
|
+
const quantifier = this.regexParser.parseQuantifier();
|
|
47
|
+
return Object.isUndefined(quantifier) ? [atom] : [atom, quantifier];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=regex-term.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-term.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-term.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,uBAAuB,CAAC;AAI/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,wDAAwD,CAAC;AAClG,OAAO,EAAE,2BAA2B,EAAE,MAAM,iEAAiE,CAAC;AAC9G,OAAO,EAAE,mBAAmB,EAAE,MAAM,0DAA0D,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,4DAA4D,CAAC;AACnG,OAAO,EAAE,yBAAyB,EAAE,MAAM,gEAAgE,CAAC;AAC3G,OAAO,EAAE,kBAAkB,EAAE,MAAM,yDAAyD,CAAC;AAG7F,MAAM,OAAO,eAAe;IACT,WAAW,CAAoB;IAEhD,YAAmB,WAA8B;QAC/C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAEM,KAAK;QACV,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,IAAI,SAAS,YAAY,2BAA2B,EAAE,CAAC;gBACjG,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;gBACtD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC;oBACjC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACnC,CAAC;YAED,OAAO,CAAC,SAAS,CAAC,CAAC;QACrB,CAAC;QAED,MAAM,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAwB,CAAC,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC7G,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE3E,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;YACtD,IAAI,gBAAgB,YAAY,yBAAyB;mBACpD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,gBAAgB,YAAY,qBAAqB,IAAI,gBAAgB,YAAY,mBAAmB,CAAC;gBACpJ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;iBACvG,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,IAAI,gBAAgB,YAAY,kBAAkB;gBAChG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAE5G,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;QACtD,OAAO,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACtE,CAAC;CACF"}
|
|
@@ -0,0 +1,56 @@
|
|
|
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 { RegexCapturingGroupSummary } from "../../models/regex-capturing-group-summary.js";
|
|
10
|
+
import { Resources } from "../../resources.js";
|
|
11
|
+
import { RegexGroupNameReader } from "./regex-group-name.reader.js";
|
|
12
|
+
export class RegexCapturingGroupSummaryReader {
|
|
13
|
+
groupNameReader = new RegexGroupNameReader();
|
|
14
|
+
read(reader, unicodeSetsMode) {
|
|
15
|
+
const startPosition = reader.currentOffset;
|
|
16
|
+
const namedCapturingGroupNames = new Set();
|
|
17
|
+
let capturingGroupCount = 0;
|
|
18
|
+
let characterClassDepth = 0;
|
|
19
|
+
while (!reader.isAtEnd) {
|
|
20
|
+
const character = reader.readCodeUnit();
|
|
21
|
+
if (character === Resources.backslash) {
|
|
22
|
+
reader.readCodePoint();
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (character === Resources.openBracket) {
|
|
26
|
+
if (characterClassDepth === 0 || unicodeSetsMode)
|
|
27
|
+
characterClassDepth++;
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (character === Resources.closeBracket && characterClassDepth > 0) {
|
|
31
|
+
characterClassDepth--;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (characterClassDepth > 0 || character !== Resources.openParenthesis)
|
|
35
|
+
continue;
|
|
36
|
+
if (reader.peekCodeUnit() !== Resources.question) {
|
|
37
|
+
capturingGroupCount++;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const prefix = reader.peekCodeUnit(Resources.question.length);
|
|
41
|
+
if (prefix !== Resources.lessThan)
|
|
42
|
+
continue;
|
|
43
|
+
const following = reader.peekCodeUnit(Resources.question.length + Resources.lessThan.length);
|
|
44
|
+
if (following === Resources.equals || following === Resources.exclamation)
|
|
45
|
+
continue;
|
|
46
|
+
capturingGroupCount++;
|
|
47
|
+
reader.advance(Resources.question.length + Resources.lessThan.length);
|
|
48
|
+
const groupName = this.groupNameReader.read(reader);
|
|
49
|
+
if (!Object.isUndefined(groupName))
|
|
50
|
+
namedCapturingGroupNames.add(groupName.value);
|
|
51
|
+
}
|
|
52
|
+
reader.seek(startPosition);
|
|
53
|
+
return new RegexCapturingGroupSummary(capturingGroupCount, namedCapturingGroupNames);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=regex-capturing-group-summary.reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-capturing-group-summary.reader.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/readers/regex-capturing-group-summary.reader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,uBAAuB,CAAC;AAI/B,OAAO,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,MAAM,OAAO,gCAAgC;IAC1B,eAAe,GAAyB,IAAI,oBAAoB,EAAE,CAAC;IAE7E,IAAI,CAAC,MAAoB,EAAE,eAAwB;QACxD,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC3C,MAAM,wBAAwB,GAAgB,IAAI,GAAG,EAAE,CAAC;QACxD,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAE5B,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;YACxC,IAAI,SAAS,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;gBACtC,MAAM,CAAC,aAAa,EAAE,CAAC;gBACvB,SAAS;YACX,CAAC;YAED,IAAI,SAAS,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC;gBACxC,IAAI,mBAAmB,KAAK,CAAC,IAAI,eAAe;oBAC9C,mBAAmB,EAAE,CAAC;gBACxB,SAAS;YACX,CAAC;YAED,IAAI,SAAS,KAAK,SAAS,CAAC,YAAY,IAAI,mBAAmB,GAAG,CAAC,EAAE,CAAC;gBACpE,mBAAmB,EAAE,CAAC;gBACtB,SAAS;YACX,CAAC;YAED,IAAI,mBAAmB,GAAG,CAAC,IAAI,SAAS,KAAK,SAAS,CAAC,eAAe;gBACpE,SAAS;YAEX,IAAI,MAAM,CAAC,YAAY,EAAE,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACjD,mBAAmB,EAAE,CAAC;gBACtB,SAAS;YACX,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9D,IAAI,MAAM,KAAK,SAAS,CAAC,QAAQ;gBAC/B,SAAS;YAEX,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC7F,IAAI,SAAS,KAAK,SAAS,CAAC,MAAM,IAAI,SAAS,KAAK,SAAS,CAAC,WAAW;gBACvE,SAAS;YAEX,mBAAmB,EAAE,CAAC;YACtB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtE,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;gBAChC,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,IAAI,0BAA0B,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAAC;IACvF,CAAC;CACF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
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 { StringBuilder } from "@noldova/context.text";
|
|
10
|
+
import { RegexGroupName } from "../../models/regex-group-name.js";
|
|
11
|
+
import { Resources } from "../../resources.js";
|
|
12
|
+
import { RegexGroupNameValidator } from "../validators/regex-group-name.validator.js";
|
|
13
|
+
import { RegexUnicodeEscapeReader } from "./regex-unicode-escape.reader.js";
|
|
14
|
+
export class RegexGroupNameReader {
|
|
15
|
+
groupNameValidator = new RegexGroupNameValidator();
|
|
16
|
+
unicodeEscapeReader = new RegexUnicodeEscapeReader();
|
|
17
|
+
read(reader) {
|
|
18
|
+
const value = new StringBuilder();
|
|
19
|
+
let isValid = true;
|
|
20
|
+
while (!reader.isAtEnd) {
|
|
21
|
+
if (reader.peekCodeUnit() === Resources.greaterThan) {
|
|
22
|
+
reader.advance();
|
|
23
|
+
return new RegexGroupName(value.toString(), isValid && value.length > 0);
|
|
24
|
+
}
|
|
25
|
+
let codePoint;
|
|
26
|
+
if (reader.peekCodeUnit() === Resources.backslash) {
|
|
27
|
+
const escapeStartOffset = reader.currentOffset;
|
|
28
|
+
const escape = this.unicodeEscapeReader.read(reader, true);
|
|
29
|
+
if (Object.isUndefined(escape)) {
|
|
30
|
+
reader.seek(escapeStartOffset);
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
codePoint = escape.codePoint;
|
|
34
|
+
}
|
|
35
|
+
else
|
|
36
|
+
codePoint = reader.readCodePoint();
|
|
37
|
+
if (!this.groupNameValidator.isValidCodePoint(codePoint, value.length === 0))
|
|
38
|
+
isValid = false;
|
|
39
|
+
value.append(String.fromCodePoint(codePoint));
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=regex-group-name.reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-group-name.reader.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/readers/regex-group-name.reader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,uBAAuB,CAAC;AAG/B,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AACtF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,MAAM,OAAO,oBAAoB;IACd,kBAAkB,GAA4B,IAAI,uBAAuB,EAAE,CAAC;IAC5E,mBAAmB,GAA6B,IAAI,wBAAwB,EAAE,CAAC;IAEzF,IAAI,CAAC,MAAoB;QAC9B,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;QAClC,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,MAAM,CAAC,YAAY,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC;gBACpD,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3E,CAAC;YAED,IAAI,SAAiB,CAAC;YACtB,IAAI,MAAM,CAAC,YAAY,EAAE,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;gBAClD,MAAM,iBAAiB,GAAG,MAAM,CAAC,aAAa,CAAC;gBAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC3D,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC/B,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;oBAC/B,OAAO,SAAS,CAAC;gBACnB,CAAC;gBAED,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAC/B,CAAC;;gBAEC,SAAS,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;YAErC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;gBAC1E,OAAO,GAAG,KAAK,CAAC;YAClB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
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 { UnicodeCodePointService } from "@noldova/context.text";
|
|
10
|
+
import { RegexUnicodeEscapeValue } from "../../models/regex-unicode-escape-value.js";
|
|
11
|
+
import { Resources } from "../../resources.js";
|
|
12
|
+
export class RegexUnicodeEscapeReader {
|
|
13
|
+
static FIXED_DIGIT_COUNT = 4;
|
|
14
|
+
static HEXADECIMAL_RADIX = 16;
|
|
15
|
+
static MAXIMUM_CODE_POINT = 0x10FFFF;
|
|
16
|
+
static MINIMUM_LEAD_SURROGATE = 0xD800;
|
|
17
|
+
static MINIMUM_TRAIL_SURROGATE = 0xDC00;
|
|
18
|
+
static SURROGATE_FACTOR = 0x400;
|
|
19
|
+
static SURROGATE_OFFSET = 0x10000;
|
|
20
|
+
read(reader, unicodeMode) {
|
|
21
|
+
const startOffset = reader.currentOffset;
|
|
22
|
+
const prefix = Resources.unicodeEscapePrefix;
|
|
23
|
+
if (!reader.startsWith(prefix))
|
|
24
|
+
return undefined;
|
|
25
|
+
reader.advance(prefix.length);
|
|
26
|
+
if (unicodeMode && reader.peekCodeUnit() === Resources.openBrace)
|
|
27
|
+
return this.readBraced(reader, startOffset);
|
|
28
|
+
const firstCodePoint = this.readFixedCodePoint(reader);
|
|
29
|
+
if (Object.isUndefined(firstCodePoint))
|
|
30
|
+
return undefined;
|
|
31
|
+
if (!unicodeMode || !UnicodeCodePointService.isLeadingSurrogate(firstCodePoint))
|
|
32
|
+
return this.createValue(reader, startOffset, firstCodePoint);
|
|
33
|
+
const trailStartOffset = reader.currentOffset;
|
|
34
|
+
if (!reader.startsWith(prefix))
|
|
35
|
+
return this.createValue(reader, startOffset, firstCodePoint);
|
|
36
|
+
reader.advance(prefix.length);
|
|
37
|
+
const trailCodePoint = this.readFixedCodePoint(reader);
|
|
38
|
+
if (Object.isUndefined(trailCodePoint) || !UnicodeCodePointService.isTrailingSurrogate(trailCodePoint)) {
|
|
39
|
+
reader.seek(trailStartOffset);
|
|
40
|
+
return this.createValue(reader, startOffset, firstCodePoint);
|
|
41
|
+
}
|
|
42
|
+
const codePoint = (firstCodePoint - RegexUnicodeEscapeReader.MINIMUM_LEAD_SURROGATE) * RegexUnicodeEscapeReader.SURROGATE_FACTOR +
|
|
43
|
+
trailCodePoint - RegexUnicodeEscapeReader.MINIMUM_TRAIL_SURROGATE + RegexUnicodeEscapeReader.SURROGATE_OFFSET;
|
|
44
|
+
return this.createValue(reader, startOffset, codePoint);
|
|
45
|
+
}
|
|
46
|
+
createValue(reader, startOffset, codePoint) {
|
|
47
|
+
const value = reader.source.getText(startOffset, reader.currentOffset - startOffset);
|
|
48
|
+
return new RegexUnicodeEscapeValue(value, codePoint);
|
|
49
|
+
}
|
|
50
|
+
readBraced(reader, startOffset) {
|
|
51
|
+
reader.advance();
|
|
52
|
+
const digits = reader.readWhile(String.isAsciiHexDigit);
|
|
53
|
+
if (digits.length === 0 || reader.peekCodeUnit() !== Resources.closeBrace)
|
|
54
|
+
return undefined;
|
|
55
|
+
const codePoint = Number.parseInt(digits.toString(), RegexUnicodeEscapeReader.HEXADECIMAL_RADIX);
|
|
56
|
+
if (codePoint > RegexUnicodeEscapeReader.MAXIMUM_CODE_POINT)
|
|
57
|
+
return undefined;
|
|
58
|
+
reader.advance();
|
|
59
|
+
return this.createValue(reader, startOffset, codePoint);
|
|
60
|
+
}
|
|
61
|
+
readFixedCodePoint(reader) {
|
|
62
|
+
const digitStartOffset = reader.currentOffset;
|
|
63
|
+
for (let index = 0; index < RegexUnicodeEscapeReader.FIXED_DIGIT_COUNT; index++) {
|
|
64
|
+
if (!String.isAsciiHexDigit(reader.peekCodeUnit()))
|
|
65
|
+
return undefined;
|
|
66
|
+
reader.advance();
|
|
67
|
+
}
|
|
68
|
+
const digits = reader.source.getText(digitStartOffset, reader.currentOffset - digitStartOffset);
|
|
69
|
+
return Number.parseInt(digits, RegexUnicodeEscapeReader.HEXADECIMAL_RADIX);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=regex-unicode-escape.reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-unicode-escape.reader.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/readers/regex-unicode-escape.reader.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 { RegexNamedGroupBranch } from "../models/regex-named-group-branch.js";
|
|
9
|
+
export class RegexNamedGroupRegistry {
|
|
10
|
+
groups = new Map();
|
|
11
|
+
hasConflict(groupName, branches) {
|
|
12
|
+
let current = this.groups.get(groupName);
|
|
13
|
+
if (Object.isUndefined(current))
|
|
14
|
+
return false;
|
|
15
|
+
for (const branch of branches) {
|
|
16
|
+
const alternatives = current.disjunctions.get(branch.disjunctionIndex);
|
|
17
|
+
if (Object.isUndefined(alternatives) || current.isTerminal || current.disjunctions.size > 1)
|
|
18
|
+
return true;
|
|
19
|
+
const next = alternatives.get(branch.alternativeIndex);
|
|
20
|
+
if (Object.isUndefined(next))
|
|
21
|
+
return false;
|
|
22
|
+
current = next;
|
|
23
|
+
}
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
add(groupName, branches) {
|
|
27
|
+
let current = this.groups.get(groupName);
|
|
28
|
+
if (Object.isUndefined(current)) {
|
|
29
|
+
current = new RegexNamedGroupBranch();
|
|
30
|
+
this.groups.set(groupName, current);
|
|
31
|
+
}
|
|
32
|
+
for (const branch of branches) {
|
|
33
|
+
let alternatives = current.disjunctions.get(branch.disjunctionIndex);
|
|
34
|
+
if (Object.isUndefined(alternatives)) {
|
|
35
|
+
alternatives = new Map();
|
|
36
|
+
current.disjunctions.set(branch.disjunctionIndex, alternatives);
|
|
37
|
+
}
|
|
38
|
+
let next = alternatives.get(branch.alternativeIndex);
|
|
39
|
+
if (Object.isUndefined(next)) {
|
|
40
|
+
next = new RegexNamedGroupBranch();
|
|
41
|
+
alternatives.set(branch.alternativeIndex, next);
|
|
42
|
+
}
|
|
43
|
+
current = next;
|
|
44
|
+
}
|
|
45
|
+
current.isTerminal = true;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=regex-named-group-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-named-group-registry.js","sourceRoot":"","sources":["../../../../src/parsers/noldova.context.parsers.regex/src/services/regex-named-group-registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE9E,MAAM,OAAO,uBAAuB;IACjB,MAAM,GAAuC,IAAI,GAAG,EAAE,CAAC;IAEjE,WAAW,CAAC,SAAiB,EAAE,QAA2C;QAC/E,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;YAC7B,OAAO,KAAK,CAAC;QAEf,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAmD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACvH,IAAI,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC;gBACzF,OAAO,IAAI,CAAC;YAEd,MAAM,IAAI,GAAsC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC1F,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;gBAC1B,OAAO,KAAK,CAAC;YAEf,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,GAAG,CAAC,SAAiB,EAAE,QAA2C;QACvE,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,IAAI,YAAY,GAAmD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACrH,IAAI,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;gBACrC,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;gBACzB,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;YAClE,CAAC;YAED,IAAI,IAAI,GAAsC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACxF,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,IAAI,GAAG,IAAI,qBAAqB,EAAE,CAAC;gBACnC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YAClD,CAAC;YAED,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAC5B,CAAC;CACF"}
|