Class: RSS::Converter
- Inherits:
-
Object
show all
- Includes:
- Utils
- Defined in:
- lib/rss/converter.rb
Instance Method Summary
collapse
Methods included from Utils
element_initialize_arguments?, get_file_and_line_from_caller, html_escape, new_with_value_if_need, to_class_name
Constructor Details
#initialize(to_enc, from_enc = nil) ⇒ Converter
Returns a new instance of Converter.
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/rss/converter.rb', line 10
def initialize(to_enc, from_enc=nil)
if "".respond_to?(:encode)
@to_encoding = to_enc
return
end
normalized_to_enc = to_enc.downcase.gsub(/-/, '_')
from_enc ||= 'utf-8'
normalized_from_enc = from_enc.downcase.gsub(/-/, '_')
if normalized_to_enc == normalized_from_enc
def_same_enc()
else
def_diff_enc = "def_to_#{normalized_to_enc}_from_#{normalized_from_enc}"
if respond_to?(def_diff_enc)
__send__(def_diff_enc)
else
def_else_enc(to_enc, from_enc)
end
end
end
|
Instance Method Details
#convert(value) ⇒ Object
30
31
32
33
34
35
36
|
# File 'lib/rss/converter.rb', line 30
def convert(value)
if value.is_a?(String) and value.respond_to?(:encode)
value.encode(@to_encoding)
else
value
end
end
|
#def_convert(depth = 0) ⇒ Object
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/rss/converter.rb', line 38
def def_convert(depth=0)
instance_eval(" def convert(value)\n if value.kind_of?(String)\n \#{yield('value')}\n else\n value\n end\n end\n EOC\nend\n", *get_file_and_line_from_caller(depth))
|
#def_else_enc(to_enc, from_enc) ⇒ Object
68
69
70
|
# File 'lib/rss/converter.rb', line 68
def def_else_enc(to_enc, from_enc)
def_iconv_convert(to_enc, from_enc, 0)
end
|
#def_iconv_convert(to_enc, from_enc, depth = 0) ⇒ Object
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
# File 'lib/rss/converter.rb', line 50
def def_iconv_convert(to_enc, from_enc, depth=0)
begin
require "iconv"
@iconv = Iconv.new(to_enc, from_enc)
def_convert(depth+1) do |value|
" begin\n @iconv.iconv(\#{value})\n rescue Iconv::Failure\n raise ConversionError.new(\#{value}, \"\#{to_enc}\", \"\#{from_enc}\")\n end\n EOC\n end\n rescue LoadError, ArgumentError, SystemCallError\n raise UnknownConversionMethodError.new(to_enc, from_enc)\n end\nend\n"
|
#def_same_enc ⇒ Object
72
73
74
75
76
|
# File 'lib/rss/converter.rb', line 72
def def_same_enc()
def_convert do |value|
value
end
end
|
#def_to_euc_jp_from_iso_2022_jp ⇒ Object
132
133
134
135
136
137
|
# File 'lib/rss/converter.rb', line 132
def def_to_euc_jp_from_iso_2022_jp
require "nkf"
def_convert do |value|
"NKF.nkf('-Je', #{value})"
end
end
|
#def_to_euc_jp_from_shift_jis ⇒ Object
118
119
120
121
122
123
|
# File 'lib/rss/converter.rb', line 118
def def_to_euc_jp_from_shift_jis
require "nkf"
def_convert do |value|
"NKF.nkf('-Se', #{value})"
end
end
|
#def_to_euc_jp_from_utf_8 ⇒ Object
102
103
104
|
# File 'lib/rss/converter.rb', line 102
def def_to_euc_jp_from_utf_8
def_uconv_convert_if_can('u8toeuc', 'EUC-JP', 'UTF-8', '-We')
end
|
#def_to_iso_2022_jp_from_euc_jp ⇒ Object
139
140
141
142
143
144
|
# File 'lib/rss/converter.rb', line 139
def def_to_iso_2022_jp_from_euc_jp
require "nkf"
def_convert do |value|
"NKF.nkf('-Ej', #{value})"
end
end
|
#def_to_iso_8859_1_from_utf_8 ⇒ Object
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
|
# File 'lib/rss/converter.rb', line 152
def def_to_iso_8859_1_from_utf_8
def_convert do |value|
" array_utf8 = \#{value}.unpack('U*')\n array_enc = []\n array_utf8.each do |num|\n if num <= 0xFF\n array_enc << num\n else\n array_enc.concat \"&\\#\\\#{num};\".unpack('C*')\n end\n end\n array_enc.pack('C*')\n EOC\n end\nend\n"
|
#def_to_shift_jis_from_euc_jp ⇒ Object
125
126
127
128
129
130
|
# File 'lib/rss/converter.rb', line 125
def def_to_shift_jis_from_euc_jp
require "nkf"
def_convert do |value|
"NKF.nkf('-Es', #{value})"
end
end
|
#def_to_shift_jis_from_utf_8 ⇒ Object
110
111
112
|
# File 'lib/rss/converter.rb', line 110
def def_to_shift_jis_from_utf_8
def_uconv_convert_if_can('u8tosjis', 'Shift_JIS', 'UTF-8', '-Ws')
end
|
#def_to_utf_8_from_euc_jp ⇒ Object
106
107
108
|
# File 'lib/rss/converter.rb', line 106
def def_to_utf_8_from_euc_jp
def_uconv_convert_if_can('euctou8', 'UTF-8', 'EUC-JP', '-Ew')
end
|
#def_to_utf_8_from_iso_8859_1 ⇒ Object
146
147
148
149
150
|
# File 'lib/rss/converter.rb', line 146
def def_to_utf_8_from_iso_8859_1
def_convert do |value|
"#{value}.unpack('C*').pack('U*')"
end
end
|
#def_to_utf_8_from_shift_jis ⇒ Object
114
115
116
|
# File 'lib/rss/converter.rb', line 114
def def_to_utf_8_from_shift_jis
def_uconv_convert_if_can('sjistou8', 'UTF-8', 'Shift_JIS', '-Sw')
end
|
#def_uconv_convert_if_can(meth, to_enc, from_enc, nkf_arg) ⇒ Object
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/rss/converter.rb', line 78
def def_uconv_convert_if_can(meth, to_enc, from_enc, nkf_arg)
begin
require "uconv"
def_convert(1) do |value|
" begin\n Uconv.\#{meth}(\#{value})\n rescue Uconv::Error\n raise ConversionError.new(\#{value}, \"\#{to_enc}\", \"\#{from_enc}\")\n end\n EOC\n end\n rescue LoadError\n require 'nkf'\n if NKF.const_defined?(:UTF8)\n def_convert(1) do |value|\n \"NKF.nkf(\#{nkf_arg.dump}, \#{value})\"\n end\n else\n def_iconv_convert(to_enc, from_enc, 1)\n end\n end\nend\n"
|