class JsRegex::Converter::Context
Passed among Converters to globalize basic status data.
The Converters themselves are stateless.
Attributes
added_capturing_groups_after_group[RW]
capturing_group_count[RW]
case_insensitive_root[RW]
fail_fast[RW]
in_atomic_group[RW]
recursions_per_expression[RW]
required_options_hash[RW]
target[RW]
warnings[RW]
Public Class Methods
new(case_insensitive_root: false, fail_fast: false, target: nil)
click to toggle source
# File lib/js_regex/converter/context.rb, line 15 def initialize(case_insensitive_root: false, fail_fast: false, target: nil) self.added_capturing_groups_after_group = Hash.new(0) self.capturing_group_count = 0 self.fail_fast = fail_fast self.recursions_per_expression = {} self.required_options_hash = {} self.warnings = [] self.case_insensitive_root = case_insensitive_root self.target = target end
Public Instance Methods
capture_group()
click to toggle source
group context
# File lib/js_regex/converter/context.rb, line 55 def capture_group self.capturing_group_count = capturing_group_count + 1 end
count_recursion(exp)
click to toggle source
# File lib/js_regex/converter/context.rb, line 76 def count_recursion(exp) recursions_per_expression[recursion_id(exp)] = recursions(exp) + 1 end
enable_u_option()
click to toggle source
these methods allow appending options to the final Conversion
output
# File lib/js_regex/converter/context.rb, line 39 def enable_u_option return false unless es_2015_or_higher? required_options_hash['u'] = true end
end_atomic_group()
click to toggle source
# File lib/js_regex/converter/context.rb, line 63 def end_atomic_group self.in_atomic_group = false end
es_2015_or_higher?()
click to toggle source
target context
# File lib/js_regex/converter/context.rb, line 29 def es_2015_or_higher? target >= Target::ES2015 end
es_2018_or_higher?()
click to toggle source
# File lib/js_regex/converter/context.rb, line 33 def es_2018_or_higher? target >= Target::ES2018 end
increment_local_capturing_group_count()
click to toggle source
# File lib/js_regex/converter/context.rb, line 67 def increment_local_capturing_group_count added_capturing_groups_after_group[original_capturing_group_count] += 1 capture_group end
new_capturing_group_position(old_position)
click to toggle source
takes and returns 1-indexed group positions. new is different from old if capturing groups were added in between.
# File lib/js_regex/converter/context.rb, line 86 def new_capturing_group_position(old_position) increment = 0 added_capturing_groups_after_group.each do |after_n_groups, count| increment += count if after_n_groups < old_position end old_position + increment end
original_capturing_group_count()
click to toggle source
# File lib/js_regex/converter/context.rb, line 94 def original_capturing_group_count capturing_group_count - total_added_capturing_groups end
recursion_id(exp)
click to toggle source
# File lib/js_regex/converter/context.rb, line 80 def recursion_id(exp) [exp.class, exp.starts_at] end
recursions(exp)
click to toggle source
# File lib/js_regex/converter/context.rb, line 72 def recursions(exp) recursions_per_expression[recursion_id(exp)] || 0 end
required_options()
click to toggle source
# File lib/js_regex/converter/context.rb, line 49 def required_options required_options_hash.keys end
start_atomic_group()
click to toggle source
# File lib/js_regex/converter/context.rb, line 59 def start_atomic_group self.in_atomic_group = true end
u?()
click to toggle source
# File lib/js_regex/converter/context.rb, line 45 def u? required_options_hash['u'] end
Private Instance Methods
total_added_capturing_groups()
click to toggle source
# File lib/js_regex/converter/context.rb, line 111 def total_added_capturing_groups added_capturing_groups_after_group.values.inject(0, &:+) end