module Symbolify

Constants

BIDI_CONTROL_NAMES
CONTROL_C0_SYMBOLS
CONTROL_C1_NAMES
CONTROL_DELETE_SYMBOL
INTERESTING_BYTES_ENCODINGS
INTERESTING_BYTES_VALUES
MAC_KEY_SYMBOLS
NO_UTF8_CONVERTER
REPLACEMENT_CHAR
SPECIALS

no official aliases at the time of adding

TAG_NAMES
VARIATION_SELECTOR_NAMES
VERSION

Public Class Methods

ascii(char, char_info = AsciiCharacteristics.new(char)) click to toggle source
# File lib/symbolify.rb, line 585
def self.ascii(char, char_info = AsciiCharacteristics.new(char))
  char = char[0]

  if char_info.delete?
    char = CONTROL_DELETE_SYMBOL
  elsif char_info.c0?
    char = CONTROL_C0_SYMBOLS[char.ord]
  elsif char_info.blank?
    char = "]" + char + "["
  end

  char
end
binary(char, _ = nil) click to toggle source
# File lib/symbolify.rb, line 599
def self.binary(char, _ = nil)
  dump(char[0])
end
byte(char, char_info= ByteCharacteristics.new(char)) click to toggle source
# File lib/symbolify.rb, line 551
def self.byte(char, char_info= ByteCharacteristics.new(char))
  return "n/a" if !char_info.assigned?

  ord = char.ord
  encoding = char_info.encoding
  char = char[0]
  no_converter = !!(NO_UTF8_CONVERTER =~ encoding.name)
  treat_char_unconverted = false

  if char_info.delete?
    char = CONTROL_DELETE_SYMBOL
  elsif char_info.c0?
    if ord >= 0x11 && ord <= 0x14 && encoding.name =~ /^mac/
      char = MAC_KEY_SYMBOLS[ord]
    else
    char = CONTROL_C0_SYMBOLS[ord]
    end
  elsif char_info.c1?
    char = CONTROL_C1_NAMES[ord]
  elsif no_converter
    treat_char_unconverted = true
  elsif char_info.blank?
    char = "]".encode(encoding) + char + "[".encode(encoding)
  elsif INTERESTING_BYTES_ENCODINGS[ord] =~ encoding.name
    char = INTERESTING_BYTES_VALUES[ord]
  end

  if no_converter && treat_char_unconverted
    dump(char)
  else
    char.encode("UTF-8")
  end
end
dump(char) click to toggle source
# File lib/symbolify.rb, line 603
def self.dump(char)
  char[0].dump
end
symbolify(char, char_info = Characteristics.create(char)) click to toggle source
# File lib/symbolify.rb, line 492
def self.symbolify(char, char_info = Characteristics.create(char))
  if !char_info.valid?
    REPLACEMENT_CHAR
  else
    case char_info
    when UnicodeCharacteristics
      Symbolify.unicode(char, char_info)
    when ByteCharacteristics
      Symbolify.byte(char, char_info)
    when AsciiCharacteristics
      Symbolify.ascii(char, char_info)
    else
      Symbolify.binary(char)
    end
  end
end
unicode(char, char_info = UnicodeCharacteristics.new(char)) click to toggle source
# File lib/symbolify.rb, line 509
def self.unicode(char, char_info = UnicodeCharacteristics.new(char))
  if !char_info.assigned?
    if char_info.noncharacter?
      return "n/c"
    elsif char_info.ignorable?
      return "n/a*"
    else
      return "n/a"
    end
  end

  char = char.dup.encode("UTF-8")
  ord = char.ord
  char = char[0]

  if char_info.delete?
    char = CONTROL_DELETE_SYMBOL
  elsif char_info.c0?
    char = CONTROL_C0_SYMBOLS[ord]
  elsif char_info.c1?
    char = CONTROL_C1_NAMES[ord]
  elsif char_info.bidi_control?
    char = BIDI_CONTROL_NAMES[ord]
  elsif char_info.variation_selector?
    char = VARIATION_SELECTOR_NAMES[ord]
  elsif char_info.tag?
    char = TAG_NAMES[ord]
  elsif char_info.category == "Mn"
    char = "◌" + char
  elsif char_info.category == "Me"
    char = " " + char
  elsif char_info.separator?
    char = "⏎"
  elsif char_info.blank?
    char = "]" + char + "["
  elsif SPECIALS.key?(ord)
    char = SPECIALS[ord]
  end

  char
end