1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
module RegexpPropertyValues
class Value
module RubyFallback
def matched_characters
matched_codepoints.map { |cp| cp.chr('utf-8') }
end
def matched_codepoints
# turns out scanning one big string is the least slow way to do this
@@test_str ||= (0..0xD7FF).map { |cp| cp.chr('utf-8') }.join <<
(0xE000..0x10FFFF).map { |cp| cp.chr('utf-8') }.join
@@test_str.scan(regexp).flat_map(&:codepoints)
end
def matched_ranges
require 'range_compressor'
RangeCompressor.compress(matched_codepoints)
end
end
end
end
|