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.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +7 -5
  3. data/LICENSE +1 -1
  4. data/Rakefile +5 -3
  5. data/lib/regexp_parser/error.rb +2 -0
  6. data/lib/regexp_parser/expression/base.rb +2 -7
  7. data/lib/regexp_parser/expression/classes/alternation.rb +3 -1
  8. data/lib/regexp_parser/expression/classes/anchor.rb +2 -0
  9. data/lib/regexp_parser/expression/classes/backreference.rb +7 -26
  10. data/lib/regexp_parser/expression/classes/character_set/intersection.rb +2 -0
  11. data/lib/regexp_parser/expression/classes/character_set/range.rb +4 -7
  12. data/lib/regexp_parser/expression/classes/character_set.rb +6 -8
  13. data/lib/regexp_parser/expression/classes/character_type.rb +2 -0
  14. data/lib/regexp_parser/expression/classes/conditional.rb +4 -28
  15. data/lib/regexp_parser/expression/classes/escape_sequence.rb +29 -96
  16. data/lib/regexp_parser/expression/classes/free_space.rb +5 -1
  17. data/lib/regexp_parser/expression/classes/group.rb +2 -22
  18. data/lib/regexp_parser/expression/classes/keep.rb +3 -1
  19. data/lib/regexp_parser/expression/classes/literal.rb +2 -0
  20. data/lib/regexp_parser/expression/classes/posix_class.rb +7 -5
  21. data/lib/regexp_parser/expression/classes/root.rb +2 -0
  22. data/lib/regexp_parser/expression/classes/unicode_property.rb +13 -11
  23. data/lib/regexp_parser/expression/methods/construct.rb +4 -4
  24. data/lib/regexp_parser/expression/methods/escape_sequence_char.rb +7 -0
  25. data/lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb +76 -0
  26. data/lib/regexp_parser/expression/methods/human_name.rb +2 -0
  27. data/lib/regexp_parser/expression/methods/match.rb +2 -0
  28. data/lib/regexp_parser/expression/methods/match_length.rb +2 -0
  29. data/lib/regexp_parser/expression/methods/negative.rb +22 -0
  30. data/lib/regexp_parser/expression/methods/options.rb +2 -0
  31. data/lib/regexp_parser/expression/methods/parts.rb +25 -0
  32. data/lib/regexp_parser/expression/methods/printing.rb +28 -0
  33. data/lib/regexp_parser/expression/methods/referenced_expressions.rb +30 -0
  34. data/lib/regexp_parser/expression/methods/strfregexp.rb +2 -0
  35. data/lib/regexp_parser/expression/methods/tests.rb +42 -3
  36. data/lib/regexp_parser/expression/methods/traverse.rb +35 -20
  37. data/lib/regexp_parser/expression/quantifier.rb +33 -18
  38. data/lib/regexp_parser/expression/sequence.rb +7 -9
  39. data/lib/regexp_parser/expression/sequence_operation.rb +6 -9
  40. data/lib/regexp_parser/expression/shared.rb +40 -24
  41. data/lib/regexp_parser/expression/subexpression.rb +22 -18
  42. data/lib/regexp_parser/expression.rb +39 -31
  43. data/lib/regexp_parser/lexer.rb +17 -7
  44. data/lib/regexp_parser/parser.rb +101 -95
  45. data/lib/regexp_parser/scanner/errors/premature_end_error.rb +10 -0
  46. data/lib/regexp_parser/scanner/errors/scanner_error.rb +8 -0
  47. data/lib/regexp_parser/scanner/errors/validation_error.rb +65 -0
  48. data/lib/regexp_parser/scanner/properties/long.csv +61 -0
  49. data/lib/regexp_parser/scanner/properties/short.csv +15 -0
  50. data/lib/regexp_parser/scanner/property.rl +1 -1
  51. data/lib/regexp_parser/scanner/scanner.rl +90 -140
  52. data/lib/regexp_parser/scanner.rb +1336 -1450
  53. data/lib/regexp_parser/syntax/any.rb +2 -0
  54. data/lib/regexp_parser/syntax/base.rb +2 -0
  55. data/lib/regexp_parser/syntax/token/anchor.rb +5 -3
  56. data/lib/regexp_parser/syntax/token/assertion.rb +4 -2
  57. data/lib/regexp_parser/syntax/token/backreference.rb +11 -6
  58. data/lib/regexp_parser/syntax/token/character_set.rb +6 -1
  59. data/lib/regexp_parser/syntax/token/character_type.rb +6 -4
  60. data/lib/regexp_parser/syntax/token/conditional.rb +5 -3
  61. data/lib/regexp_parser/syntax/token/escape.rb +12 -8
  62. data/lib/regexp_parser/syntax/token/group.rb +8 -6
  63. data/lib/regexp_parser/syntax/token/keep.rb +3 -1
  64. data/lib/regexp_parser/syntax/token/meta.rb +11 -2
  65. data/lib/regexp_parser/syntax/token/posix_class.rb +4 -2
  66. data/lib/regexp_parser/syntax/token/quantifier.rb +8 -6
  67. data/lib/regexp_parser/syntax/token/unicode_property.rb +164 -70
  68. data/lib/regexp_parser/syntax/token/virtual.rb +13 -0
  69. data/lib/regexp_parser/syntax/token.rb +18 -16
  70. data/lib/regexp_parser/syntax/version_lookup.rb +4 -2
  71. data/lib/regexp_parser/syntax/versions/1.8.6.rb +2 -0
  72. data/lib/regexp_parser/syntax/versions/1.9.1.rb +2 -0
  73. data/lib/regexp_parser/syntax/versions/1.9.3.rb +2 -0
  74. data/lib/regexp_parser/syntax/versions/2.0.0.rb +2 -0
  75. data/lib/regexp_parser/syntax/versions/2.2.0.rb +2 -0
  76. data/lib/regexp_parser/syntax/versions/2.3.0.rb +2 -0
  77. data/lib/regexp_parser/syntax/versions/2.4.0.rb +2 -0
  78. data/lib/regexp_parser/syntax/versions/2.4.1.rb +2 -0
  79. data/lib/regexp_parser/syntax/versions/2.5.0.rb +2 -0
  80. data/lib/regexp_parser/syntax/versions/2.6.0.rb +2 -0
  81. data/lib/regexp_parser/syntax/versions/2.6.2.rb +2 -0
  82. data/lib/regexp_parser/syntax/versions/2.6.3.rb +2 -0
  83. data/lib/regexp_parser/syntax/versions/3.1.0.rb +2 -0
  84. data/lib/regexp_parser/syntax/versions/3.2.0.rb +2 -0
  85. data/lib/regexp_parser/syntax/versions/3.5.0.rb +4 -0
  86. data/lib/regexp_parser/syntax/versions/4.0.0.rb +4 -0
  87. data/lib/regexp_parser/syntax/versions.rb +3 -1
  88. data/lib/regexp_parser/syntax.rb +3 -1
  89. data/lib/regexp_parser/token.rb +2 -0
  90. data/lib/regexp_parser/version.rb +3 -1
  91. data/lib/regexp_parser.rb +8 -6
  92. data/regexp_parser.gemspec +7 -5
  93. metadata +19 -11
  94. data/CHANGELOG.md +0 -632
  95. data/README.md +0 -503
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Regexp::Syntax
2
4
  # A syntax that always returns true, passing all tokens as implemented. This
3
5
  # is useful during development, testing, and should be useful for some types
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Regexp::Syntax
2
4
  class NotImplementedError < Regexp::Syntax::SyntaxError
3
5
  def initialize(syntax, type, token)
@@ -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,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Regexp::Syntax
2
4
  module Token
3
5
  module Keep
4
- Mark = %i[mark]
6
+ Mark = %i[mark].freeze
5
7
 
6
8
  All = Mark
7
9
  Type = :keep
@@ -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 = %i[dot]
5
- Extended = Basic + %i[alternation]
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