Module: JapanShippingCSV::Encoding

Defined in:
lib/japan_shipping_csv/encoding.rb

Defined Under Namespace

Modules: CodePoints

Constant Summary collapse

HALFWIDTH =

Eg. HALFWIDTH + ROMAJI + NUMBERS can be represented by: valid_encodings = Encoding::HALFWIDTH | Encoding::ROMAJI | Encoding::NUMBERS and to figure out whether a flag is set: romaji_allowed? = valid_encodings & Encoding::ROMAJI 0 = false, 1 = true (which is not true in ruby)

1
FULLWIDTH =

Hankaku

2
ROMAJI =

Zenkaku

4
NUMBERS =
8
KATAKANA =
16
HYPHEN =
32

Class Method Summary collapse

Class Method Details

.is_hyphen(value) ⇒ Object



126
127
128
129
130
131
132
133
134
135
# File 'lib/japan_shipping_csv/encoding.rb', line 126

def is_hyphen(value)
  return false if value.empty?

  value.split("").each do |c|
    if c != '-' && c != '' && c != '' && c != ''
      return false
    end
  end
  true
end

.is_katakana(value) ⇒ Object



115
116
117
118
119
120
121
122
123
124
# File 'lib/japan_shipping_csv/encoding.rb', line 115

def is_katakana(value)
  return false if value.empty?

  value.split("").each do |c|
    is_hankaku_katakana = c >= CodePoints::HANKAKU_KATAKANA_FIRST && c <= CodePoints::HANKAKU_KATAKANA_LAST && c != CodePoints::HANKAKU_PUNCTUATION_ONBIKI
    is_zenkaku_katakana = c >= CodePoints::ZENKAKU_KATAKANA_FIRST && c <= CodePoints::ZENKAKU_KATAKANA_LAST
    return false if !is_hankaku_katakana && !is_zenkaku_katakana
  end
  true
end

.is_number(value) ⇒ Object



104
105
106
107
108
109
110
111
112
113
# File 'lib/japan_shipping_csv/encoding.rb', line 104

def is_number(value)
  return false if value.empty?

  value.split("").each do |c|
    is_hankaku_number = c >= CodePoints::HANKAKU_NUMBER_FIRST && c <= CodePoints::HANKAKU_NUMBER_LAST
    is_zenkaku_number = c >= CodePoints::ZENKAKU_NUMBER_FIRST && c <= CodePoints::ZENKAKU_NUMBER_LAST
    return false if !is_hankaku_number && !is_zenkaku_number
  end
  true
end

.is_romaji(value) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/japan_shipping_csv/encoding.rb', line 90

def is_romaji(value)
  return false if value.empty?

  value.split("").each do |c|
    # return !(::kana::isHankakuLetter(u) || ::kana::isZenkakuLetter(u));
    is_hankaku_upper = c >= CodePoints::HANKAKU_LETTER_UPPER_FIRST && c <= CodePoints::HANKAKU_LETTER_UPPER_LAST
    is_hankaku_lower = c >= CodePoints::HANKAKU_LETTER_LOWER_FIRST && c <= CodePoints::HANKAKU_LETTER_LOWER_LAST
    is_zenkaku_upper = c >= CodePoints::ZENKAKU_LETTER_UPPER_FIRST && c <= CodePoints::ZENKAKU_LETTER_UPPER_LAST
    is_zenkaku_lower = c >= CodePoints::ZENKAKU_LETTER_LOWER_FIRST && c <= CodePoints::ZENKAKU_LETTER_LOWER_LAST
    return false if !is_hankaku_upper && !is_hankaku_lower && !is_zenkaku_upper && !is_zenkaku_lower
  end
  true
end

.is_valid_string(value, encoding_flags) ⇒ Object



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/japan_shipping_csv/encoding.rb', line 137

def is_valid_string(value, encoding_flags)
  value.split("").each do |c|
    # if is_half_width(c) && !(encoding_flags & Encoding::HALFWIDTH)
    #   return false
    # end
    # if is_full_width(c) && !(encoding_flags & Encoding::FULLWIDTH)
    #   return false
    # end
    if is_romaji(c) && !(encoding_flags & Encoding::ROMAJI)
      return false
    end
    if is_number(c) && !(encoding_flags & Encoding::NUMBERS)
      return false
    end
    if is_katakana(c) && !(encoding_flags & Encoding::KATAKANA)
      return false
    end
    if is_hyphen(c) && !(encoding_flags & Encoding::HYPHEN)
      return false
    end
  end
  return true
end

.reencode(value, encoding_flags) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/japan_shipping_csv/encoding.rb', line 73

def reencode(value, encoding_flags)
  return value if value.nil?

  result = value
  # if half-width not allowed
  half_width_allowed = (encoding_flags & Encoding::HALFWIDTH) == Encoding::HALFWIDTH
  if half_width_allowed
    result = NKF.nkf('-X -w', value).tr('0-9a-zA-Z -', '0-9a-zA-Z -')
  end
  # if full-width not allowed
  fullwidth_allowed = (encoding_flags & Encoding::FULLWIDTH) == Encoding::FULLWIDTH
  if fullwidth_allowed
    result = NKF.nkf('-X -w', value).tr('0-9a-zA-Z -', '0-9a-zA-Z -').tr('', '')
  end
  result
end