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.
   
 
  
  
    | 
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 | # File 'lib/rss/converter.rb', line 9
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 
  
  
  
  
    | 
29
30
31
32
33
34
35 | # File 'lib/rss/converter.rb', line 29
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 
  
  
  
  
    | 
37
38
39
40
41
42
43
44
45
46
47 | # File 'lib/rss/converter.rb', line 37
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 
  
  
  
  
    | 
67
68
69 | # File 'lib/rss/converter.rb', line 67
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 
  
  
  
  
    | 
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 | # File 'lib/rss/converter.rb', line 49
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 
  
  
  
  
    | 
71
72
73
74
75 | # File 'lib/rss/converter.rb', line 71
def def_same_enc()
  def_convert do |value|
    value
  end
end
 | 
 
    
      
  
  
    #def_to_euc_jp_from_iso_2022_jp  ⇒ Object 
  
  
  
  
    | 
131
132
133
134
135
136 | # File 'lib/rss/converter.rb', line 131
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 
  
  
  
  
    | 
117
118
119
120
121
122 | # File 'lib/rss/converter.rb', line 117
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 
  
  
  
  
    | 
101
102
103 | # File 'lib/rss/converter.rb', line 101
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 
  
  
  
  
    | 
138
139
140
141
142
143 | # File 'lib/rss/converter.rb', line 138
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 
  
  
  
  
    | 
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166 | # File 'lib/rss/converter.rb', line 151
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 
  
  
  
  
    | 
124
125
126
127
128
129 | # File 'lib/rss/converter.rb', line 124
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 
  
  
  
  
    | 
109
110
111 | # File 'lib/rss/converter.rb', line 109
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 
  
  
  
  
    | 
105
106
107 | # File 'lib/rss/converter.rb', line 105
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 
  
  
  
  
    | 
145
146
147
148
149 | # File 'lib/rss/converter.rb', line 145
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 
  
  
  
  
    | 
113
114
115 | # File 'lib/rss/converter.rb', line 113
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 
  
  
  
  
    | 
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99 | # File 'lib/rss/converter.rb', line 77
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"
 |