Module: Regexp::Syntax
- Defined in:
- lib/regexp_parser/syntax/token.rb,
lib/regexp_parser/syntax.rb,
lib/regexp_parser/syntax/any.rb,
lib/regexp_parser/syntax/base.rb,
lib/regexp_parser/syntax/token.rb,
lib/regexp_parser/syntax/token/keep.rb,
lib/regexp_parser/syntax/token/meta.rb,
lib/regexp_parser/syntax/token/group.rb,
lib/regexp_parser/syntax/token/anchor.rb,
lib/regexp_parser/syntax/token/escape.rb,
lib/regexp_parser/syntax/version_lookup.rb,
lib/regexp_parser/syntax/token/assertion.rb,
lib/regexp_parser/syntax/token/quantifier.rb,
lib/regexp_parser/syntax/token/conditional.rb,
lib/regexp_parser/syntax/token/posix_class.rb,
lib/regexp_parser/syntax/token/backreference.rb,
lib/regexp_parser/syntax/token/character_set.rb,
lib/regexp_parser/syntax/token/character_type.rb,
lib/regexp_parser/syntax/token/unicode_property.rb
Overview
After loading all the tokens the map is full. Extract all tokens and types into the All and Types constants.
Defined Under Namespace
Modules: Token
Classes: Any, Base, InvalidVersionNameError, NotImplementedError, SyntaxError, UnknownSyntaxNameError, V1_8_6, V1_9_1, V1_9_3, V2_0_0, V2_2_0, V2_3_0, V2_4_0, V2_4_1, V2_5_0, V2_6_0, V2_6_2, V2_6_3, V3_1_0, V3_2_0
Constant Summary
collapse
- VERSION_FORMAT =
'\Aruby/\d+\.\d+(\.\d+)?\z'
- VERSION_REGEXP =
/#{VERSION_FORMAT}/
- VERSION_CONST_REGEXP =
/\AV\d+_\d+(?:_\d+)?\z/
Class Method Summary
collapse
Class Method Details
.comparable(name) ⇒ Object
62
63
64
65
|
# File 'lib/regexp_parser/syntax/version_lookup.rb', line 62
def comparable(name)
Gem::Version.new((name.to_s.scan(/\d+/) << 99).join('.'))
end
|
.const_missing(const_name) ⇒ Object
45
46
47
48
49
50
|
# File 'lib/regexp_parser/syntax/version_lookup.rb', line 45
def const_missing(const_name)
if const_name =~ VERSION_CONST_REGEXP
return fallback_version_class(const_name)
end
super
end
|
.fallback_version_class(version) ⇒ Object
52
53
54
55
56
|
# File 'lib/regexp_parser/syntax/version_lookup.rb', line 52
def fallback_version_class(version)
sorted = (specified_versions + [version]).sort_by { |ver| comparable(ver) }
index = sorted.index(version)
index > 0 && const_get(sorted[index - 1])
end
|
.for(name) ⇒ Object
Returns the syntax specification class for the given syntax version name. The special names βanyβ and β*β return Syntax::Any.
22
23
24
|
# File 'lib/regexp_parser/syntax/version_lookup.rb', line 22
def for(name)
(@alias_map ||= {})[name] ||= version_class(name)
end
|
.new(name) ⇒ Object
26
27
28
29
30
|
# File 'lib/regexp_parser/syntax/version_lookup.rb', line 26
def new(name)
warn 'Regexp::Syntax.new is deprecated in favor of Regexp::Syntax.for. '\
'It does not return distinct instances and will be removed in v3.0.0.'
self.for(name)
end
|
.specified_versions ⇒ Object
58
59
60
|
# File 'lib/regexp_parser/syntax/version_lookup.rb', line 58
def specified_versions
constants.select { |const_name| const_name =~ VERSION_CONST_REGEXP }
end
|
.supported?(name) ⇒ Boolean
32
33
34
|
# File 'lib/regexp_parser/syntax/version_lookup.rb', line 32
def supported?(name)
name =~ VERSION_REGEXP && comparable(name) >= comparable('1.8.6')
end
|
.version_class(version) ⇒ Object
36
37
38
39
40
41
42
43
|
# File 'lib/regexp_parser/syntax/version_lookup.rb', line 36
def version_class(version)
return Regexp::Syntax::Any if ['*', 'any'].include?(version.to_s)
version =~ VERSION_REGEXP || raise(InvalidVersionNameError, version)
warn_if_future_version(version)
version_const_name = "V#{version.to_s.scan(/\d+/).join('_')}"
const_get(version_const_name) || raise(UnknownSyntaxNameError, version)
end
|
.warn_if_future_version(const_name) ⇒ Object
67
68
69
70
71
72
|
# File 'lib/regexp_parser/syntax/version_lookup.rb', line 67
def warn_if_future_version(const_name)
return if comparable(const_name) < comparable('4.0.0')
warn('This library has only been tested up to Ruby 3.x, '\
"but you are running with #{const_name}")
end
|