class JsRegex::Converter::Context
Passed among Converters to globalize basic status data.
The Converters themselves are stateless.
Attributes
Public Class Methods
Source
# File lib/js_regex/converter/context.rb, line 16 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
Source
# File lib/js_regex/converter/context.rb, line 56 def capture_group self.capturing_group_count = capturing_group_count + 1 end
group context
Source
# File lib/js_regex/converter/context.rb, line 77 def count_recursion(exp) recursions_per_expression[recursion_id(exp)] = recursions(exp) + 1 end
Source
# File lib/js_regex/converter/context.rb, line 40 def enable_u_option return false unless es_2015_or_higher? required_options_hash['u'] = true end
these methods allow appending options to the final Conversion
output
Source
# File lib/js_regex/converter/context.rb, line 64 def end_atomic_group self.in_atomic_group = false end
Source
# File lib/js_regex/converter/context.rb, line 89 def end_subexp_recursion self.in_subexp_recursion = false end
Source
# File lib/js_regex/converter/context.rb, line 30 def es_2015_or_higher? target >= Target::ES2015 end
target context
Source
# File lib/js_regex/converter/context.rb, line 34 def es_2018_or_higher? target >= Target::ES2018 end
Source
# File lib/js_regex/converter/context.rb, line 68 def increment_local_capturing_group_count added_capturing_groups_after_group[original_capturing_group_count] += 1 capture_group end
Source
# File lib/js_regex/converter/context.rb, line 95 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
takes and returns 1-indexed group positions. new is different from old if capturing groups were added in between.
Source
# File lib/js_regex/converter/context.rb, line 103 def original_capturing_group_count capturing_group_count - total_added_capturing_groups end
Source
# File lib/js_regex/converter/context.rb, line 81 def recursion_id(exp) [exp.class, exp.starts_at] end
Source
# File lib/js_regex/converter/context.rb, line 73 def recursions(exp) recursions_per_expression[recursion_id(exp)] || 0 end
Source
# File lib/js_regex/converter/context.rb, line 50 def required_options required_options_hash.keys end
Source
# File lib/js_regex/converter/context.rb, line 60 def start_atomic_group self.in_atomic_group = true end
Source
# File lib/js_regex/converter/context.rb, line 85 def start_subexp_recursion self.in_subexp_recursion = true end
Source
# File lib/js_regex/converter/context.rb, line 46 def u? required_options_hash['u'] end
Private Instance Methods
Source
# File lib/js_regex/converter/context.rb, line 121 def total_added_capturing_groups added_capturing_groups_after_group.values.inject(0, &:+) end