class JsRegex::Converter::LiteralConverter
Template class implementation.
Constants
- ASTRAL_PLANE_CODEPOINT_PATTERN
- HAS_CASE_PATTERN
Public Class Methods
convert_astral_data(data)
click to toggle source
# File lib/js_regex/converter/literal_converter.rb, line 20 def convert_astral_data(data) data.each_char.each_with_object(Node.new) do |char, node| if char =~ ASTRAL_PLANE_CODEPOINT_PATTERN node << surrogate_substitution_for(char) else node << escape_incompatible_bmp_literals(char) end end end
convert_data(data)
click to toggle source
# File lib/js_regex/converter/literal_converter.rb, line 12 def convert_data(data) if data =~ ASTRAL_PLANE_CODEPOINT_PATTERN convert_astral_data(data) else escape_incompatible_bmp_literals(data) end end
escape_incompatible_bmp_literals(data)
click to toggle source
# File lib/js_regex/converter/literal_converter.rb, line 30 def escape_incompatible_bmp_literals(data) data.gsub('/', '\\/').gsub(/[\f\n\r\t]/) { |lit| Regexp.escape(lit) } end
Private Class Methods
surrogate_substitution_for(char)
click to toggle source
# File lib/js_regex/converter/literal_converter.rb, line 36 def surrogate_substitution_for(char) CharacterSet::Writer.write_surrogate_ranges([], [char.codepoints]) end
Private Instance Methods
case_insensitivize(literal)
click to toggle source
# File lib/js_regex/converter/literal_converter.rb, line 59 def case_insensitivize(literal) literal.each_char.each_with_object(Node.new) do |chr, node| node << (chr =~ HAS_CASE_PATTERN ? "[#{chr}#{chr.swapcase}]" : chr) end end
convert_data()
click to toggle source
# File lib/js_regex/converter/literal_converter.rb, line 43 def convert_data result = self.class.convert_data(data) if context.case_insensitive_root && !expression.case_insensitive? warn_of_unsupported_feature('nested case-sensitive literal') elsif !context.case_insensitive_root && expression.case_insensitive? return handle_locally_case_insensitive_literal(result) end result end
handle_locally_case_insensitive_literal(literal)
click to toggle source
# File lib/js_regex/converter/literal_converter.rb, line 55 def handle_locally_case_insensitive_literal(literal) literal =~ HAS_CASE_PATTERN ? case_insensitivize(literal) : literal end