class JsRegex::Converter::LiteralConverter
Template class implementation.
Constants
- ASTRAL_PLANE_CODEPOINT_PATTERN
- ESCAPES
- HAS_CASE_PATTERN
- LITERAL_REQUIRING_ESCAPE_PATTERN
Public Class Methods
convert_astral_data(data)
click to toggle source
# File lib/js_regex/converter/literal_converter.rb, line 25 def convert_astral_data(data) data.each_char.each_with_object(Node.new) do |char, node| if char.ord > 0xFFFF node << surrogate_substitution_for(char) else node << escape_incompatible_bmp_literals(char) end end end
convert_data(data, context)
click to toggle source
# File lib/js_regex/converter/literal_converter.rb, line 13 def convert_data(data, context) if !context.u? && data =~ ASTRAL_PLANE_CODEPOINT_PATTERN if context.enable_u_option escape_incompatible_bmp_literals(data) else convert_astral_data(data) end 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 39 def escape_incompatible_bmp_literals(data) data.gsub(LITERAL_REQUIRING_ESCAPE_PATTERN, ESCAPES) end
Private Class Methods
surrogate_substitution_for(char)
click to toggle source
# File lib/js_regex/converter/literal_converter.rb, line 45 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 68 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 52 def convert_data result = self.class.convert_data(data, context) 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 64 def handle_locally_case_insensitive_literal(literal) literal =~ HAS_CASE_PATTERN ? case_insensitivize(literal) : literal end