Module: Charwidth::ClassMethods

Included in:
Charwidth
Defined in:
lib/charwidth.rb

Constant Summary collapse

HALFWIDTH_TO_FULLWIDTH =
{
  ascii: [
    Characters::ASCII_PUNCTUATION_AND_SYMBOLS,
    Characters::FULLWIDTH_ASCII_VARIANTS,
  ],
  white_parenthesis: [
    Characters::WHITE_PARENTHESIS,
    Characters::FULLWIDTH_BRACKETS,
  ],
  cjk_punctuation: [
    Characters::HALFWIDTH_CJK_PUCTUATION,
    Characters::CJK_SYMBOLS_AND_PUNCTUATION,
  ],
  katakana: [
    Characters::HALFWIDTH_KATAKANA_VARIANTS,
    Characters::KATAKANA,
  ],
  hangul: [
    Characters::HALFWIDTH_HANGUL_VARIANTS,
    Characters::HANGUL,
  ],
  latin_1_punctuation_and_symbols: [
    Characters::LATIN_1_PUNCTUATION_AND_SYMBOLS,
    Characters::FULLWIDTH_SYMBOL_VARIANTS,
  ],
  mathematical_symbols: [
    Characters::HALFWIDTH_SYMBOL_VARIANTS,
    Characters::MATHEMATICAL_SYMBOLS,
  ],
  space: [
    Characters::SPACE,
    Characters::IDEOGRAPHIC_SPACE,
  ],
}.transform_values(&:freeze).freeze

Instance Method Summary collapse

Instance Method Details

#normalize(string, options = {}) ⇒ Object

Normalize Unicode fullwidth / halfwidth (zenkaku / hankaku) characters options:

only: [:ascii, :white_parenthesis, :cjk_punctuation, :katakana, :space],
except: [:ascii, :white_parenthesis, :cjk_punctuation, :katakana, :space]



49
50
51
# File 'lib/charwidth.rb', line 49

def normalize(string, options = {})
  normalize!(string.dup, options)
end

#normalize!(string, options = {}) ⇒ Object

Normalize Unicode fullwidth / halfwidth (zenkaku / hankaku) characters (destructive)



54
55
56
57
# File 'lib/charwidth.rb', line 54

def normalize!(string, options = {})
  unify_voiced_katakana!(string)
  normalize_charwidth!(string, options)
end

#to_full_width(string) ⇒ Object



59
60
61
# File 'lib/charwidth.rb', line 59

def to_full_width(string)
  to_full_width!(string.dup)
end

#to_full_width!(src) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/charwidth.rb', line 63

def to_full_width!(src)
  unify_voiced_katakana!(src)

  before = ""
  after = ""
  HALFWIDTH_TO_FULLWIDTH.each_value do |half, full|
    before << half
    after << full
  end

  escape_for_tr!(before)
  escape_for_tr!(after)
  src.tr!(before, after) || src
end