regexp_parser 2.7.0 → 2.12.0
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.
- checksums.yaml +4 -4
- data/Gemfile +7 -5
- data/LICENSE +1 -1
- data/Rakefile +5 -3
- data/lib/regexp_parser/error.rb +2 -0
- data/lib/regexp_parser/expression/base.rb +2 -7
- data/lib/regexp_parser/expression/classes/alternation.rb +3 -1
- data/lib/regexp_parser/expression/classes/anchor.rb +2 -0
- data/lib/regexp_parser/expression/classes/backreference.rb +7 -26
- data/lib/regexp_parser/expression/classes/character_set/intersection.rb +2 -0
- data/lib/regexp_parser/expression/classes/character_set/range.rb +4 -7
- data/lib/regexp_parser/expression/classes/character_set.rb +6 -8
- data/lib/regexp_parser/expression/classes/character_type.rb +2 -0
- data/lib/regexp_parser/expression/classes/conditional.rb +4 -28
- data/lib/regexp_parser/expression/classes/escape_sequence.rb +29 -96
- data/lib/regexp_parser/expression/classes/free_space.rb +5 -1
- data/lib/regexp_parser/expression/classes/group.rb +2 -22
- data/lib/regexp_parser/expression/classes/keep.rb +3 -1
- data/lib/regexp_parser/expression/classes/literal.rb +2 -0
- data/lib/regexp_parser/expression/classes/posix_class.rb +7 -5
- data/lib/regexp_parser/expression/classes/root.rb +2 -0
- data/lib/regexp_parser/expression/classes/unicode_property.rb +13 -11
- data/lib/regexp_parser/expression/methods/construct.rb +4 -4
- data/lib/regexp_parser/expression/methods/escape_sequence_char.rb +7 -0
- data/lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb +76 -0
- data/lib/regexp_parser/expression/methods/human_name.rb +2 -0
- data/lib/regexp_parser/expression/methods/match.rb +2 -0
- data/lib/regexp_parser/expression/methods/match_length.rb +2 -0
- data/lib/regexp_parser/expression/methods/negative.rb +22 -0
- data/lib/regexp_parser/expression/methods/options.rb +2 -0
- data/lib/regexp_parser/expression/methods/parts.rb +25 -0
- data/lib/regexp_parser/expression/methods/printing.rb +28 -0
- data/lib/regexp_parser/expression/methods/referenced_expressions.rb +30 -0
- data/lib/regexp_parser/expression/methods/strfregexp.rb +2 -0
- data/lib/regexp_parser/expression/methods/tests.rb +42 -3
- data/lib/regexp_parser/expression/methods/traverse.rb +35 -20
- data/lib/regexp_parser/expression/quantifier.rb +33 -18
- data/lib/regexp_parser/expression/sequence.rb +7 -9
- data/lib/regexp_parser/expression/sequence_operation.rb +6 -9
- data/lib/regexp_parser/expression/shared.rb +40 -24
- data/lib/regexp_parser/expression/subexpression.rb +22 -18
- data/lib/regexp_parser/expression.rb +39 -31
- data/lib/regexp_parser/lexer.rb +17 -7
- data/lib/regexp_parser/parser.rb +101 -95
- data/lib/regexp_parser/scanner/errors/premature_end_error.rb +10 -0
- data/lib/regexp_parser/scanner/errors/scanner_error.rb +8 -0
- data/lib/regexp_parser/scanner/errors/validation_error.rb +65 -0
- data/lib/regexp_parser/scanner/properties/long.csv +61 -0
- data/lib/regexp_parser/scanner/properties/short.csv +15 -0
- data/lib/regexp_parser/scanner/property.rl +1 -1
- data/lib/regexp_parser/scanner/scanner.rl +90 -140
- data/lib/regexp_parser/scanner.rb +1336 -1450
- data/lib/regexp_parser/syntax/any.rb +2 -0
- data/lib/regexp_parser/syntax/base.rb +2 -0
- data/lib/regexp_parser/syntax/token/anchor.rb +5 -3
- data/lib/regexp_parser/syntax/token/assertion.rb +4 -2
- data/lib/regexp_parser/syntax/token/backreference.rb +11 -6
- data/lib/regexp_parser/syntax/token/character_set.rb +6 -1
- data/lib/regexp_parser/syntax/token/character_type.rb +6 -4
- data/lib/regexp_parser/syntax/token/conditional.rb +5 -3
- data/lib/regexp_parser/syntax/token/escape.rb +12 -8
- data/lib/regexp_parser/syntax/token/group.rb +8 -6
- data/lib/regexp_parser/syntax/token/keep.rb +3 -1
- data/lib/regexp_parser/syntax/token/meta.rb +11 -2
- data/lib/regexp_parser/syntax/token/posix_class.rb +4 -2
- data/lib/regexp_parser/syntax/token/quantifier.rb +8 -6
- data/lib/regexp_parser/syntax/token/unicode_property.rb +164 -70
- data/lib/regexp_parser/syntax/token/virtual.rb +13 -0
- data/lib/regexp_parser/syntax/token.rb +18 -16
- data/lib/regexp_parser/syntax/version_lookup.rb +4 -2
- data/lib/regexp_parser/syntax/versions/1.8.6.rb +2 -0
- data/lib/regexp_parser/syntax/versions/1.9.1.rb +2 -0
- data/lib/regexp_parser/syntax/versions/1.9.3.rb +2 -0
- data/lib/regexp_parser/syntax/versions/2.0.0.rb +2 -0
- data/lib/regexp_parser/syntax/versions/2.2.0.rb +2 -0
- data/lib/regexp_parser/syntax/versions/2.3.0.rb +2 -0
- data/lib/regexp_parser/syntax/versions/2.4.0.rb +2 -0
- data/lib/regexp_parser/syntax/versions/2.4.1.rb +2 -0
- data/lib/regexp_parser/syntax/versions/2.5.0.rb +2 -0
- data/lib/regexp_parser/syntax/versions/2.6.0.rb +2 -0
- data/lib/regexp_parser/syntax/versions/2.6.2.rb +2 -0
- data/lib/regexp_parser/syntax/versions/2.6.3.rb +2 -0
- data/lib/regexp_parser/syntax/versions/3.1.0.rb +2 -0
- data/lib/regexp_parser/syntax/versions/3.2.0.rb +2 -0
- data/lib/regexp_parser/syntax/versions/3.5.0.rb +4 -0
- data/lib/regexp_parser/syntax/versions/4.0.0.rb +4 -0
- data/lib/regexp_parser/syntax/versions.rb +3 -1
- data/lib/regexp_parser/syntax.rb +3 -1
- data/lib/regexp_parser/token.rb +2 -0
- data/lib/regexp_parser/version.rb +3 -1
- data/lib/regexp_parser.rb +8 -6
- data/regexp_parser.gemspec +7 -5
- metadata +19 -11
- data/CHANGELOG.md +0 -632
- data/README.md +0 -503
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Regexp::Syntax
|
|
2
4
|
module Token
|
|
3
5
|
module Anchor
|
|
4
|
-
Basic = %i[bol eol]
|
|
6
|
+
Basic = %i[bol eol].freeze
|
|
5
7
|
Extended = Basic + %i[word_boundary nonword_boundary]
|
|
6
|
-
String = %i[bos eos eos_ob_eol]
|
|
7
|
-
MatchStart = %i[match_start]
|
|
8
|
+
String = %i[bos eos eos_ob_eol].freeze
|
|
9
|
+
MatchStart = %i[match_start].freeze
|
|
8
10
|
|
|
9
11
|
All = Extended + String + MatchStart
|
|
10
12
|
Type = :anchor
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Regexp::Syntax
|
|
2
4
|
module Token
|
|
3
5
|
module Assertion
|
|
4
|
-
Lookahead = %i[lookahead nlookahead]
|
|
5
|
-
Lookbehind = %i[lookbehind nlookbehind]
|
|
6
|
+
Lookahead = %i[lookahead nlookahead].freeze
|
|
7
|
+
Lookbehind = %i[lookbehind nlookbehind].freeze
|
|
6
8
|
|
|
7
9
|
All = Lookahead + Lookbehind
|
|
8
10
|
Type = :assertion
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Regexp::Syntax
|
|
2
4
|
module Token
|
|
3
5
|
module Backreference
|
|
4
|
-
Plain = %i[number]
|
|
5
|
-
NumberRef = %i[number_ref number_rel_ref]
|
|
6
|
+
Plain = %i[number].freeze
|
|
7
|
+
NumberRef = %i[number_ref number_rel_ref].freeze
|
|
6
8
|
Number = Plain + NumberRef
|
|
7
|
-
Name = %i[name_ref]
|
|
9
|
+
Name = %i[name_ref].freeze
|
|
8
10
|
|
|
9
|
-
RecursionLevel = %i[name_recursion_ref number_recursion_ref]
|
|
11
|
+
RecursionLevel = %i[name_recursion_ref number_recursion_ref].freeze
|
|
10
12
|
|
|
11
13
|
V1_8_6 = Plain
|
|
12
14
|
|
|
@@ -18,13 +20,16 @@ module Regexp::Syntax
|
|
|
18
20
|
|
|
19
21
|
# Type is the same as Backreference so keeping it here, for now.
|
|
20
22
|
module SubexpressionCall
|
|
21
|
-
Name = %i[name_call]
|
|
22
|
-
Number = %i[number_call number_rel_call]
|
|
23
|
+
Name = %i[name_call].freeze
|
|
24
|
+
Number = %i[number_call number_rel_call].freeze
|
|
23
25
|
|
|
24
26
|
All = Name + Number
|
|
25
27
|
end
|
|
26
28
|
|
|
27
29
|
Map[Backreference::Type] = Backreference::All +
|
|
28
30
|
SubexpressionCall::All
|
|
31
|
+
|
|
32
|
+
# alias for symmetry between token symbol and Expression class name
|
|
33
|
+
Backref = Backreference
|
|
29
34
|
end
|
|
30
35
|
end
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Regexp::Syntax
|
|
2
4
|
module Token
|
|
3
5
|
module CharacterSet
|
|
4
|
-
Basic = %i[open close negate range]
|
|
6
|
+
Basic = %i[open close negate range].freeze
|
|
5
7
|
Extended = Basic + %i[intersection]
|
|
6
8
|
|
|
7
9
|
All = Extended
|
|
@@ -9,5 +11,8 @@ module Regexp::Syntax
|
|
|
9
11
|
end
|
|
10
12
|
|
|
11
13
|
Map[CharacterSet::Type] = CharacterSet::All
|
|
14
|
+
|
|
15
|
+
# alias for symmetry between token symbol and Token module name
|
|
16
|
+
Set = CharacterSet
|
|
12
17
|
end
|
|
13
18
|
end
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Regexp::Syntax
|
|
2
4
|
module Token
|
|
3
5
|
module CharacterType
|
|
4
|
-
Basic = []
|
|
5
|
-
Extended = %i[digit nondigit space nonspace word nonword]
|
|
6
|
-
Hex = %i[hex nonhex]
|
|
6
|
+
Basic = [].freeze
|
|
7
|
+
Extended = %i[digit nondigit space nonspace word nonword].freeze
|
|
8
|
+
Hex = %i[hex nonhex].freeze
|
|
7
9
|
|
|
8
|
-
Clustered = %i[linebreak xgrapheme]
|
|
10
|
+
Clustered = %i[linebreak xgrapheme].freeze
|
|
9
11
|
|
|
10
12
|
All = Basic + Extended + Hex + Clustered
|
|
11
13
|
Type = :type
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Regexp::Syntax
|
|
2
4
|
module Token
|
|
3
5
|
module Conditional
|
|
4
|
-
Delimiters = %i[open close]
|
|
6
|
+
Delimiters = %i[open close].freeze
|
|
5
7
|
|
|
6
|
-
Condition = %i[condition_open condition condition_close]
|
|
7
|
-
Separator = %i[separator]
|
|
8
|
+
Condition = %i[condition_open condition condition_close].freeze
|
|
9
|
+
Separator = %i[separator].freeze
|
|
8
10
|
|
|
9
11
|
All = Conditional::Delimiters + Conditional::Condition + Conditional::Separator
|
|
10
12
|
|
|
@@ -1,31 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Regexp::Syntax
|
|
2
4
|
module Token
|
|
3
|
-
# TODO: unify naming with RE::EscapeSequence, one way or the other, in v3.0.0
|
|
4
5
|
module Escape
|
|
5
|
-
Basic = %i[backslash literal]
|
|
6
|
+
Basic = %i[backslash literal].freeze
|
|
6
7
|
|
|
7
|
-
Control = %i[control meta_sequence]
|
|
8
|
+
Control = %i[control meta_sequence].freeze
|
|
8
9
|
|
|
9
10
|
ASCII = %i[bell backspace escape form_feed newline carriage
|
|
10
|
-
tab vertical_tab]
|
|
11
|
+
tab vertical_tab].freeze
|
|
11
12
|
|
|
12
|
-
Unicode = %i[codepoint codepoint_list]
|
|
13
|
+
Unicode = %i[codepoint codepoint_list].freeze
|
|
13
14
|
|
|
14
15
|
Meta = %i[dot alternation
|
|
15
16
|
zero_or_one zero_or_more one_or_more
|
|
16
17
|
bol eol
|
|
17
18
|
group_open group_close
|
|
18
19
|
interval_open interval_close
|
|
19
|
-
set_open set_close]
|
|
20
|
+
set_open set_close].freeze
|
|
20
21
|
|
|
21
|
-
Hex = %i[hex]
|
|
22
|
+
Hex = %i[hex utf8_hex].freeze
|
|
22
23
|
|
|
23
|
-
Octal = %i[octal]
|
|
24
|
+
Octal = %i[octal].freeze
|
|
24
25
|
|
|
25
26
|
All = Basic + Control + ASCII + Unicode + Meta + Hex + Octal
|
|
26
27
|
Type = :escape
|
|
27
28
|
end
|
|
28
29
|
|
|
29
30
|
Map[Escape::Type] = Escape::All
|
|
31
|
+
|
|
32
|
+
# alias for symmetry between Token::* and Expression::*
|
|
33
|
+
EscapeSequence = Escape
|
|
30
34
|
end
|
|
31
35
|
end
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Regexp::Syntax
|
|
2
4
|
module Token
|
|
3
5
|
module Group
|
|
4
|
-
Basic = %i[capture close]
|
|
6
|
+
Basic = %i[capture close].freeze
|
|
5
7
|
Extended = Basic + %i[options options_switch]
|
|
6
8
|
|
|
7
|
-
Named = %i[named]
|
|
8
|
-
Atomic = %i[atomic]
|
|
9
|
-
Passive = %i[passive]
|
|
10
|
-
Comment = %i[comment]
|
|
9
|
+
Named = %i[named].freeze
|
|
10
|
+
Atomic = %i[atomic].freeze
|
|
11
|
+
Passive = %i[passive].freeze
|
|
12
|
+
Comment = %i[comment].freeze
|
|
11
13
|
|
|
12
14
|
V1_8_6 = Group::Extended + Group::Named + Group::Atomic +
|
|
13
15
|
Group::Passive + Group::Comment
|
|
14
16
|
|
|
15
|
-
V2_4_1 = %i[absence]
|
|
17
|
+
V2_4_1 = %i[absence].freeze
|
|
16
18
|
|
|
17
19
|
All = V1_8_6 + V2_4_1
|
|
18
20
|
Type = :group
|
|
@@ -1,13 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Regexp::Syntax
|
|
2
4
|
module Token
|
|
3
5
|
module Meta
|
|
4
|
-
Basic
|
|
5
|
-
|
|
6
|
+
Basic = %i[dot].freeze
|
|
7
|
+
Alternation = %i[alternation].freeze
|
|
8
|
+
Extended = Basic + Alternation
|
|
6
9
|
|
|
7
10
|
All = Extended
|
|
8
11
|
Type = :meta
|
|
9
12
|
end
|
|
10
13
|
|
|
11
14
|
Map[Meta::Type] = Meta::All
|
|
15
|
+
|
|
16
|
+
# alias for symmetry between Token::* and Expression::*
|
|
17
|
+
module Alternation
|
|
18
|
+
All = Meta::Alternation
|
|
19
|
+
Type = Meta::Type
|
|
20
|
+
end
|
|
12
21
|
end
|
|
13
22
|
end
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Regexp::Syntax
|
|
2
4
|
module Token
|
|
3
5
|
module PosixClass
|
|
4
6
|
Standard = %i[alnum alpha blank cntrl digit graph
|
|
5
|
-
lower print punct space upper xdigit]
|
|
7
|
+
lower print punct space upper xdigit].freeze
|
|
6
8
|
|
|
7
|
-
Extensions = %i[ascii word]
|
|
9
|
+
Extensions = %i[ascii word].freeze
|
|
8
10
|
|
|
9
11
|
All = Standard + Extensions
|
|
10
12
|
Type = :posixclass
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Regexp::Syntax
|
|
2
4
|
module Token
|
|
3
5
|
module Quantifier
|
|
@@ -5,23 +7,23 @@ module Regexp::Syntax
|
|
|
5
7
|
zero_or_one
|
|
6
8
|
zero_or_more
|
|
7
9
|
one_or_more
|
|
8
|
-
]
|
|
10
|
+
].freeze
|
|
9
11
|
|
|
10
12
|
Reluctant = %i[
|
|
11
13
|
zero_or_one_reluctant
|
|
12
14
|
zero_or_more_reluctant
|
|
13
15
|
one_or_more_reluctant
|
|
14
|
-
]
|
|
16
|
+
].freeze
|
|
15
17
|
|
|
16
18
|
Possessive = %i[
|
|
17
19
|
zero_or_one_possessive
|
|
18
20
|
zero_or_more_possessive
|
|
19
21
|
one_or_more_possessive
|
|
20
|
-
]
|
|
22
|
+
].freeze
|
|
21
23
|
|
|
22
|
-
Interval = %i[interval]
|
|
23
|
-
IntervalReluctant = %i[interval_reluctant]
|
|
24
|
-
IntervalPossessive = %i[interval_possessive]
|
|
24
|
+
Interval = %i[interval].freeze
|
|
25
|
+
IntervalReluctant = %i[interval_reluctant].freeze
|
|
26
|
+
IntervalPossessive = %i[interval_possessive].freeze
|
|
25
27
|
|
|
26
28
|
IntervalAll = Interval + IntervalReluctant + IntervalPossessive
|
|
27
29
|
|