| Class | RSS::Converter |
| In: |
lib/rss/converter.rb
|
| Parent: | Object |
# File lib/rss/converter.rb, line 9
9: def initialize(to_enc, from_enc=nil)
10: normalized_to_enc = to_enc.downcase.gsub(/-/, '_')
11: from_enc ||= 'utf-8'
12: normalized_from_enc = from_enc.downcase.gsub(/-/, '_')
13: if normalized_to_enc == normalized_from_enc
14: def_same_enc()
15: else
16: def_diff_enc = "def_to_#{normalized_to_enc}_from_#{normalized_from_enc}"
17: if respond_to?(def_diff_enc)
18: __send__(def_diff_enc)
19: else
20: def_else_enc(to_enc, from_enc)
21: end
22: end
23: end
# File lib/rss/converter.rb, line 29
29: def def_convert(depth=0)
30: instance_eval("def convert(value)\nif value.kind_of?(String)\n\#{yield('value')}\nelse\nvalue\nend\nend\n", *get_file_and_line_from_caller(depth))
31: end
# File lib/rss/converter.rb, line 61
61: def def_else_enc(to_enc, from_enc)
62: def_iconv_convert(to_enc, from_enc, 0)
63: end
# File lib/rss/converter.rb, line 42
42: def def_iconv_convert(to_enc, from_enc, depth=0)
43: begin
44: require "iconv"
45: @iconv = Iconv.new(to_enc, from_enc)
46: def_convert(depth+1) do |value|
47: "begin\n@iconv.iconv(\#{value})\nrescue Iconv::Failure\nraise ConversionError.new(\#{value}, \"\#{to_enc}\", \"\#{from_enc}\")\nend\n"
48: end
49: rescue LoadError, ArgumentError, SystemCallError
50: raise UnknownConversionMethodError.new(to_enc, from_enc)
51: end
52: end
# File lib/rss/converter.rb, line 65
65: def def_same_enc()
66: def_convert do |value|
67: value
68: end
69: end
# File lib/rss/converter.rb, line 126
126: def def_to_euc_jp_from_iso_2022_jp
127: require "nkf"
128: def_convert do |value|
129: "NKF.nkf('-Je', #{value})"
130: end
131: end
# File lib/rss/converter.rb, line 112
112: def def_to_euc_jp_from_shift_jis
113: require "nkf"
114: def_convert do |value|
115: "NKF.nkf('-Se', #{value})"
116: end
117: end
# File lib/rss/converter.rb, line 96
96: def def_to_euc_jp_from_utf_8
97: def_uconv_convert_if_can('u8toeuc', 'EUC-JP', 'UTF-8', '-We')
98: end
# File lib/rss/converter.rb, line 133
133: def def_to_iso_2022_jp_from_euc_jp
134: require "nkf"
135: def_convert do |value|
136: "NKF.nkf('-Ej', #{value})"
137: end
138: end
# File lib/rss/converter.rb, line 146
146: def def_to_iso_8859_1_from_utf_8
147: def_convert do |value|
148: "array_utf8 = \#{value}.unpack('U*')\narray_enc = []\narray_utf8.each do |num|\nif num <= 0xFF\narray_enc << num\nelse\narray_enc.concat \"&\\#\\\#{num};\".unpack('C*')\nend\nend\narray_enc.pack('C*')\n"
149: end
150: end
# File lib/rss/converter.rb, line 119
119: def def_to_shift_jis_from_euc_jp
120: require "nkf"
121: def_convert do |value|
122: "NKF.nkf('-Es', #{value})"
123: end
124: end
# File lib/rss/converter.rb, line 104
104: def def_to_shift_jis_from_utf_8
105: def_uconv_convert_if_can('u8tosjis', 'Shift_JIS', 'UTF-8', '-Ws')
106: end
# File lib/rss/converter.rb, line 100
100: def def_to_utf_8_from_euc_jp
101: def_uconv_convert_if_can('euctou8', 'UTF-8', 'EUC-JP', '-Ew')
102: end
# File lib/rss/converter.rb, line 140
140: def def_to_utf_8_from_iso_8859_1
141: def_convert do |value|
142: "#{value}.unpack('C*').pack('U*')"
143: end
144: end
# File lib/rss/converter.rb, line 108
108: def def_to_utf_8_from_shift_jis
109: def_uconv_convert_if_can('sjistou8', 'UTF-8', 'Shift_JIS', '-Sw')
110: end
# File lib/rss/converter.rb, line 71
71: def def_uconv_convert_if_can(meth, to_enc, from_enc, nkf_arg)
72: begin
73: require "uconv"
74: def_convert(1) do |value|
75: "begin\nUconv.\#{meth}(\#{value})\nrescue Uconv::Error\nraise ConversionError.new(\#{value}, \"\#{to_enc}\", \"\#{from_enc}\")\nend\n"
76: end
77: rescue LoadError
78: require 'nkf'
79: if NKF.const_defined?(:UTF8)
80: def_convert(1) do |value|
81: "NKF.nkf(#{nkf_arg.dump}, #{value})"
82: end
83: else
84: def_iconv_convert(to_enc, from_enc, 1)
85: end
86: end
87: end