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