Module: CharacterSet::Writer
- Defined in:
- lib/character_set/writer.rb
Class Method Summary collapse
- .surrogate_pair(astral_codepoint) ⇒ Object
- .surrogate_pairs(astral_ranges) ⇒ Object
- .write(codepoint_ranges, opts = {}, &block) ⇒ Object
- .write_surrogate_alternation(bmp_ranges, astral_ranges) ⇒ Object
Class Method Details
.surrogate_pair(astral_codepoint) ⇒ Object
30 31 32 33 34 35 |
# File 'lib/character_set/writer.rb', line 30 def surrogate_pair(astral_codepoint) base = astral_codepoint - 0x10000 high = ((base / 1024).floor + 0xD800).to_s(16) low = (base % 1024 + 0xDC00).to_s(16) "\\u#{high}\\u#{low}" end |
.surrogate_pairs(astral_ranges) ⇒ Object
26 27 28 |
# File 'lib/character_set/writer.rb', line 26 def surrogate_pairs(astral_ranges) astral_ranges.flat_map { |range| range.map { |cp| surrogate_pair(cp) } } end |
.write(codepoint_ranges, opts = {}, &block) ⇒ Object
5 6 7 8 9 10 11 12 13 14 |
# File 'lib/character_set/writer.rb', line 5 def write(codepoint_ranges, opts = {}, &block) content = codepoint_ranges.map do |range| if range.size > 2 && opts[:abbreviate] != false range.minmax.map { |cp| Character.new(cp).escape(opts, &block) }.join('-') else range.map { |cp| Character.new(cp).escape(opts, &block) }.join end end.join opts[:in_brackets] ? "[#{content}]" : content end |
.write_surrogate_alternation(bmp_ranges, astral_ranges) ⇒ Object
16 17 18 19 20 21 22 23 24 |
# File 'lib/character_set/writer.rb', line 16 def write_surrogate_alternation(bmp_ranges, astral_ranges) bmp_set = write(bmp_ranges, format: :js, in_brackets: true) if astral_ranges.empty? bmp_set else surrogate_pairs = surrogate_pairs(astral_ranges) "(?:#{((bmp_ranges.any? ? [bmp_set] : []) + surrogate_pairs) * '|'})" end end |