Module: GSMTools
- Defined in:
- lib/gsm_tools/base.rb,
lib/gsm_tools/string.rb
Defined Under Namespace
Modules: String
Constant Summary collapse
- NL =
"\n"
- CR =
"\r"
- BS =
'\\'
- NON_GSM_7BIT_MATCHER =
/[^@£\$¥èéùìòÇ\nØø\rÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !"#¤%&'\(\)\*\+,-\.\/0123456789:;<=>\?¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà\^{}\\\[~\]\|€]/
- GSM_7BIT_MAP =
[ 0x00, '@'.ord, 0x01, '£'.ord, 0x02, '$'.ord, 0x03, '¥'.ord, 0x04, 'è'.ord, 0x05, 'é'.ord, 0x06, 'ù'.ord, 0x07, 'ì'.ord, 0x08, 'ò'.ord, 0x09, 'Ç'.ord, 0x0a, 0x000A, 0x0b, 'Ø'.ord, 0x0c, 'ø'.ord, 0x0d, 0x000D, 0x0e, 'Å'.ord, 0x0f, 'å'.ord, 0x10, 'Δ'.ord, 0x11, '_'.ord, 0x12, 'Φ'.ord, 0x13, 'Γ'.ord, 0x14, 'Λ'.ord, 0x15, 'Ω'.ord, 0x16, 'Π'.ord, 0x17, 'Ψ'.ord, 0x18, 'Σ'.ord, 0x19, 'Θ'.ord, 0x1a, 'Ξ'.ord, 0x1b, 0x00A0, 0x1c, 'Æ'.ord, 0x1d, 'æ'.ord, 0x1e, 'ß'.ord, 0x1f, 'É'.ord, 0x20, " ".ord, 0x21, '!'.ord, 0x22, '"'.ord, 0x23, '#'.ord, 0x24, '¤'.ord, 0x25, '%'.ord, 0x26, '&'.ord, 0x27, "'".ord, 0x28, '('.ord, 0x29, ')'.ord, 0x2a, '*'.ord, 0x2b, '+'.ord, 0x2c, ','.ord, 0x2d, '-'.ord, 0x2e, '.'.ord, 0x2f, '/'.ord, 0x30, '0'.ord, 0x31, '1'.ord, 0x32, '2'.ord, 0x33, '3'.ord, 0x34, '4'.ord, 0x35, '5'.ord, 0x36, '6'.ord, 0x37, '7'.ord, 0x38, '8'.ord, 0x39, '9'.ord, 0x3a, ':'.ord, 0x3b, ';'.ord, 0x3c, '<'.ord, 0x3d, '='.ord, 0x3e, '>'.ord, 0x3f, '?'.ord, 0x40, '¡'.ord, 0x41, 'A'.ord, 0x42, 'B'.ord, 0x43, 'C'.ord, 0x44, 'D'.ord, 0x45, 'E'.ord, 0x46, 'F'.ord, 0x47, 'G'.ord, 0x48, 'H'.ord, 0x49, 'I'.ord, 0x4a, 'J'.ord, 0x4b, 'K'.ord, 0x4c, 'L'.ord, 0x4d, 'M'.ord, 0x4e, 'N'.ord, 0x4f, 'O'.ord, 0x50, 'P'.ord, 0x51, 'Q'.ord, 0x52, 'R'.ord, 0x53, 'S'.ord, 0x54, 'T'.ord, 0x55, 'U'.ord, 0x56, 'V'.ord, 0x57, 'W'.ord, 0x58, 'X'.ord, 0x59, 'Y'.ord, 0x5a, 'Z'.ord, 0x5b, 'Ä'.ord, 0x5c, 'Ö'.ord, 0x5d, 'Ñ'.ord, 0x5e, 'Ü'.ord, 0x5f, '§'.ord, 0x60, '¿'.ord, 0x61, 'a'.ord, 0x62, 'b'.ord, 0x63, 'c'.ord, 0x64, 'd'.ord, 0x65, 'e'.ord, 0x66, 'f'.ord, 0x67, 'g'.ord, 0x68, 'h'.ord, 0x69, 'i'.ord, 0x6a, 'j'.ord, 0x6b, 'k'.ord, 0x6c, 'l'.ord, 0x6d, 'm'.ord, 0x6e, 'n'.ord, 0x6f, 'o'.ord, 0x70, 'p'.ord, 0x71, 'q'.ord, 0x72, 'r'.ord, 0x73, 's'.ord, 0x74, 't'.ord, 0x75, 'u'.ord, 0x76, 'v'.ord, 0x77, 'w'.ord, 0x78, 'x'.ord, 0x79, 'y'.ord, 0x7a, 'z'.ord, 0x7b, 'ä'.ord, 0x7c, 'ö'.ord, 0x7d, 'ñ'.ord, 0x7e, 'ü'.ord, 0x7f, 'à'.ord, #[0x1B, 0x0A], 0x000C, # Removed for now, Need to figure out how to Regex match this character [0x1B, 0x14], '^'.ord, [0x1B, 0x28], '{'.ord, [0x1B, 0x29], '}'.ord, [0x1B, 0x2f], 0x005C, [0x1B, 0x3c], '['.ord, [0x1B, 0x3d], '~'.ord, [0x1B, 0x3e], ']'.ord, [0x1B, 0x40], '|'.ord, [0x1B, 0x65], '€'.ord ]
- @@uni_to_gsm =
Hash.new
- @@gsm_to_uni =
Hash.new
Class Method Summary collapse
- .gsm_string_counter(str) ⇒ Object
- .gsm_to_s(gsm) ⇒ Object
- .is_gsm_7bit?(str) ⇒ Boolean
- .to_gsm(str) ⇒ Object
Class Method Details
.gsm_string_counter(str) ⇒ Object
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 |
# File 'lib/gsm_tools/base.rb', line 172 def gsm_string_counter str hash = {} if self.is_gsm_7bit?(str) hash = { :length => 0, :segments => 1, :remaining_length_for_segment => 160 } gsm_str = self.to_gsm(str) hash[:length] = gsm_str.length case gsm_str.length when 0..160 hash[:segments] = 1 hash[:remaining_length_for_segment] = 160 - gsm_str.length when 161..306 hash[:segments] = 2 hash[:remaining_length_for_segment] = 306 - gsm_str.length when 307..459 hash[:segments] = 3 hash[:remaining_length_for_segment] = 459 - gsm_str.length else hash = { :invalid => true } end else hash = { :length => 0, :segments => 1, :remaining_length_for_segment => 70 } hash[:length] = str.length case str.length when 0..70 hash[:segments] = 1 hash[:remaining_length_for_segment] = 70 - str.length when 71..134 hash[:segments] = 2 hash[:remaining_length_for_segment] = 134 - str.length when 135..201 hash[:segments] = 3 hash[:remaining_length_for_segment] = 201 - str.length else hash = { :invalid => true } end end return hash end |
.gsm_to_s(gsm) ⇒ Object
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 |
# File 'lib/gsm_tools/base.rb', line 216 def gsm_to_s gsm last_is_escape = false collect = gsm.unpack('c*').collect do |bin_char| if bin_char == 27 last_is_escape = true next end if last_is_escape last_is_escape = false @@gsm_to_uni[[27, bin_char]] else @@gsm_to_uni[bin_char] end end collect.reject { |x| x.nil? }.flatten.pack('U*') end |
.is_gsm_7bit?(str) ⇒ Boolean
160 161 162 |
# File 'lib/gsm_tools/base.rb', line 160 def is_gsm_7bit? str str.match(NON_GSM_7BIT_MATCHER).nil? end |
.to_gsm(str) ⇒ Object
164 165 166 167 168 169 170 |
# File 'lib/gsm_tools/base.rb', line 164 def to_gsm str if self.is_gsm_7bit?(str) str.unpack('U*').collect { |utf8_char| @@uni_to_gsm[utf8_char] }.flatten.pack('c*') else Iconv.iconv('UCS-2', 'UTF-8', str).first end end |