diff options
author | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-08-22 01:53:51 +0000 |
---|---|---|
committer | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-08-22 01:53:51 +0000 |
commit | 1e760c0be3ed35874204114e7454509f740c0fe2 (patch) | |
tree | a75eb2b1eea073830902d1fa49c568c4525c8b57 /ruby_1_8_6/lib/rexml/encodings | |
parent | a2055d63b41a6678dc7aeb17d0bece314e700c5a (diff) |
add tag v1_8_6_71v1_8_5_71
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_8_5_71@13189 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ruby_1_8_6/lib/rexml/encodings')
-rw-r--r-- | ruby_1_8_6/lib/rexml/encodings/CP-1252.rb | 103 | ||||
-rw-r--r-- | ruby_1_8_6/lib/rexml/encodings/EUC-JP.rb | 35 | ||||
-rw-r--r-- | ruby_1_8_6/lib/rexml/encodings/ICONV.rb | 22 | ||||
-rw-r--r-- | ruby_1_8_6/lib/rexml/encodings/ISO-8859-1.rb | 7 | ||||
-rw-r--r-- | ruby_1_8_6/lib/rexml/encodings/ISO-8859-15.rb | 72 | ||||
-rw-r--r-- | ruby_1_8_6/lib/rexml/encodings/SHIFT-JIS.rb | 37 | ||||
-rw-r--r-- | ruby_1_8_6/lib/rexml/encodings/SHIFT_JIS.rb | 1 | ||||
-rw-r--r-- | ruby_1_8_6/lib/rexml/encodings/UNILE.rb | 34 | ||||
-rw-r--r-- | ruby_1_8_6/lib/rexml/encodings/US-ASCII.rb | 30 | ||||
-rw-r--r-- | ruby_1_8_6/lib/rexml/encodings/UTF-16.rb | 35 | ||||
-rw-r--r-- | ruby_1_8_6/lib/rexml/encodings/UTF-8.rb | 18 |
11 files changed, 394 insertions, 0 deletions
diff --git a/ruby_1_8_6/lib/rexml/encodings/CP-1252.rb b/ruby_1_8_6/lib/rexml/encodings/CP-1252.rb new file mode 100644 index 0000000000..29f94d3f8c --- /dev/null +++ b/ruby_1_8_6/lib/rexml/encodings/CP-1252.rb @@ -0,0 +1,103 @@ +# +# This class was contributed by Mikko Tiihonen mikko DOT tiihonen AT hut DOT fi +# +module REXML + module Encoding + register( "CP-1252" ) do |o| + class << o + alias encode encode_cp1252 + alias decode decode_cp1252 + end + end + + # Convert from UTF-8 + def encode_cp1252(content) + array_utf8 = content.unpack('U*') + array_enc = [] + array_utf8.each do |num| + case num + # shortcut first bunch basic characters + when 0..0xFF: array_enc << num + # characters added compared to iso-8859-1 + when 0x20AC: array_enc << 0x80 # 0xe2 0x82 0xac + when 0x201A: array_enc << 0x82 # 0xe2 0x82 0x9a + when 0x0192: array_enc << 0x83 # 0xc6 0x92 + when 0x201E: array_enc << 0x84 # 0xe2 0x82 0x9e + when 0x2026: array_enc << 0x85 # 0xe2 0x80 0xa6 + when 0x2020: array_enc << 0x86 # 0xe2 0x80 0xa0 + when 0x2021: array_enc << 0x87 # 0xe2 0x80 0xa1 + when 0x02C6: array_enc << 0x88 # 0xcb 0x86 + when 0x2030: array_enc << 0x89 # 0xe2 0x80 0xb0 + when 0x0160: array_enc << 0x8A # 0xc5 0xa0 + when 0x2039: array_enc << 0x8B # 0xe2 0x80 0xb9 + when 0x0152: array_enc << 0x8C # 0xc5 0x92 + when 0x017D: array_enc << 0x8E # 0xc5 0xbd + when 0x2018: array_enc << 0x91 # 0xe2 0x80 0x98 + when 0x2019: array_enc << 0x92 # 0xe2 0x80 0x99 + when 0x201C: array_enc << 0x93 # 0xe2 0x80 0x9c + when 0x201D: array_enc << 0x94 # 0xe2 0x80 0x9d + when 0x2022: array_enc << 0x95 # 0xe2 0x80 0xa2 + when 0x2013: array_enc << 0x96 # 0xe2 0x80 0x93 + when 0x2014: array_enc << 0x97 # 0xe2 0x80 0x94 + when 0x02DC: array_enc << 0x98 # 0xcb 0x9c + when 0x2122: array_enc << 0x99 # 0xe2 0x84 0xa2 + when 0x0161: array_enc << 0x9A # 0xc5 0xa1 + when 0x203A: array_enc << 0x9B # 0xe2 0x80 0xba + when 0x0152: array_enc << 0x9C # 0xc5 0x93 + when 0x017E: array_enc << 0x9E # 0xc5 0xbe + when 0x0178: array_enc << 0x9F # 0xc5 0xb8 + else + # all remaining basic characters can be used directly + if num <= 0xFF + array_enc << num + else + # Numeric entity (&#nnnn;); shard by Stefan Scholl + array_enc.concat "&\##{num};".unpack('C*') + end + end + end + array_enc.pack('C*') + end + + # Convert to UTF-8 + def decode_cp1252(str) + array_latin9 = str.unpack('C*') + array_enc = [] + array_latin9.each do |num| + case num + # characters that added compared to iso-8859-1 + when 0x80: array_enc << 0x20AC # 0xe2 0x82 0xac + when 0x82: array_enc << 0x201A # 0xe2 0x82 0x9a + when 0x83: array_enc << 0x0192 # 0xc6 0x92 + when 0x84: array_enc << 0x201E # 0xe2 0x82 0x9e + when 0x85: array_enc << 0x2026 # 0xe2 0x80 0xa6 + when 0x86: array_enc << 0x2020 # 0xe2 0x80 0xa0 + when 0x87: array_enc << 0x2021 # 0xe2 0x80 0xa1 + when 0x88: array_enc << 0x02C6 # 0xcb 0x86 + when 0x89: array_enc << 0x2030 # 0xe2 0x80 0xb0 + when 0x8A: array_enc << 0x0160 # 0xc5 0xa0 + when 0x8B: array_enc << 0x2039 # 0xe2 0x80 0xb9 + when 0x8C: array_enc << 0x0152 # 0xc5 0x92 + when 0x8E: array_enc << 0x017D # 0xc5 0xbd + when 0x91: array_enc << 0x2018 # 0xe2 0x80 0x98 + when 0x92: array_enc << 0x2019 # 0xe2 0x80 0x99 + when 0x93: array_enc << 0x201C # 0xe2 0x80 0x9c + when 0x94: array_enc << 0x201D # 0xe2 0x80 0x9d + when 0x95: array_enc << 0x2022 # 0xe2 0x80 0xa2 + when 0x96: array_enc << 0x2013 # 0xe2 0x80 0x93 + when 0x97: array_enc << 0x2014 # 0xe2 0x80 0x94 + when 0x98: array_enc << 0x02DC # 0xcb 0x9c + when 0x99: array_enc << 0x2122 # 0xe2 0x84 0xa2 + when 0x9A: array_enc << 0x0161 # 0xc5 0xa1 + when 0x9B: array_enc << 0x203A # 0xe2 0x80 0xba + when 0x9C: array_enc << 0x0152 # 0xc5 0x93 + when 0x9E: array_enc << 0x017E # 0xc5 0xbe + when 0x9F: array_enc << 0x0178 # 0xc5 0xb8 + else + array_enc << num + end + end + array_enc.pack('U*') + end + end +end diff --git a/ruby_1_8_6/lib/rexml/encodings/EUC-JP.rb b/ruby_1_8_6/lib/rexml/encodings/EUC-JP.rb new file mode 100644 index 0000000000..db37b6bf0d --- /dev/null +++ b/ruby_1_8_6/lib/rexml/encodings/EUC-JP.rb @@ -0,0 +1,35 @@ +module REXML + module Encoding + begin + require 'uconv' + + def decode_eucjp(str) + Uconv::euctou8(str) + end + + def encode_eucjp content + Uconv::u8toeuc(content) + end + rescue LoadError + require 'nkf' + + EUCTOU8 = '-Ewm0' + U8TOEUC = '-Wem0' + + def decode_eucjp(str) + NKF.nkf(EUCTOU8, str) + end + + def encode_eucjp content + NKF.nkf(U8TOEUC, content) + end + end + + register("EUC-JP") do |obj| + class << obj + alias decode decode_eucjp + alias encode encode_eucjp + end + end + end +end diff --git a/ruby_1_8_6/lib/rexml/encodings/ICONV.rb b/ruby_1_8_6/lib/rexml/encodings/ICONV.rb new file mode 100644 index 0000000000..172fba7cd1 --- /dev/null +++ b/ruby_1_8_6/lib/rexml/encodings/ICONV.rb @@ -0,0 +1,22 @@ +require "iconv" +raise LoadError unless defined? Iconv + +module REXML + module Encoding + def decode_iconv(str) + Iconv.conv(UTF_8, @encoding, str) + end + + def encode_iconv(content) + Iconv.conv(@encoding, UTF_8, content) + end + + register("ICONV") do |obj| + Iconv.conv(UTF_8, obj.encoding, nil) + class << obj + alias decode decode_iconv + alias encode encode_iconv + end + end + end +end diff --git a/ruby_1_8_6/lib/rexml/encodings/ISO-8859-1.rb b/ruby_1_8_6/lib/rexml/encodings/ISO-8859-1.rb new file mode 100644 index 0000000000..2873d13bf0 --- /dev/null +++ b/ruby_1_8_6/lib/rexml/encodings/ISO-8859-1.rb @@ -0,0 +1,7 @@ +require 'rexml/encodings/US-ASCII' + +module REXML + module Encoding + register("ISO-8859-1", &encoding_method("US-ASCII")) + end +end diff --git a/ruby_1_8_6/lib/rexml/encodings/ISO-8859-15.rb b/ruby_1_8_6/lib/rexml/encodings/ISO-8859-15.rb new file mode 100644 index 0000000000..e0c6a51ed2 --- /dev/null +++ b/ruby_1_8_6/lib/rexml/encodings/ISO-8859-15.rb @@ -0,0 +1,72 @@ +# +# This class was contributed by Mikko Tiihonen mikko DOT tiihonen AT hut DOT fi +# +module REXML + module Encoding + register("ISO-8859-15") do |o| + alias encode to_iso_8859_15 + alias decode from_iso_8859_15 + end + + # Convert from UTF-8 + def to_iso_8859_15(content) + array_utf8 = content.unpack('U*') + array_enc = [] + array_utf8.each do |num| + case num + # shortcut first bunch basic characters + when 0..0xA3: array_enc << num + # characters removed compared to iso-8859-1 + when 0xA4: array_enc << '¤' + when 0xA6: array_enc << '¦' + when 0xA8: array_enc << '¨' + when 0xB4: array_enc << '´' + when 0xB8: array_enc << '¸' + when 0xBC: array_enc << '¼' + when 0xBD: array_enc << '½' + when 0xBE: array_enc << '¾' + # characters added compared to iso-8859-1 + when 0x20AC: array_enc << 0xA4 # 0xe2 0x82 0xac + when 0x0160: array_enc << 0xA6 # 0xc5 0xa0 + when 0x0161: array_enc << 0xA8 # 0xc5 0xa1 + when 0x017D: array_enc << 0xB4 # 0xc5 0xbd + when 0x017E: array_enc << 0xB8 # 0xc5 0xbe + when 0x0152: array_enc << 0xBC # 0xc5 0x92 + when 0x0153: array_enc << 0xBD # 0xc5 0x93 + when 0x0178: array_enc << 0xBE # 0xc5 0xb8 + else + # all remaining basic characters can be used directly + if num <= 0xFF + array_enc << num + else + # Numeric entity (&#nnnn;); shard by Stefan Scholl + array_enc.concat "&\##{num};".unpack('C*') + end + end + end + array_enc.pack('C*') + end + + # Convert to UTF-8 + def from_iso_8859_15(str) + array_latin9 = str.unpack('C*') + array_enc = [] + array_latin9.each do |num| + case num + # characters that differ compared to iso-8859-1 + when 0xA4: array_enc << 0x20AC + when 0xA6: array_enc << 0x0160 + when 0xA8: array_enc << 0x0161 + when 0xB4: array_enc << 0x017D + when 0xB8: array_enc << 0x017E + when 0xBC: array_enc << 0x0152 + when 0xBD: array_enc << 0x0153 + when 0xBE: array_enc << 0x0178 + else + array_enc << num + end + end + array_enc.pack('U*') + end + end +end diff --git a/ruby_1_8_6/lib/rexml/encodings/SHIFT-JIS.rb b/ruby_1_8_6/lib/rexml/encodings/SHIFT-JIS.rb new file mode 100644 index 0000000000..93c7877afd --- /dev/null +++ b/ruby_1_8_6/lib/rexml/encodings/SHIFT-JIS.rb @@ -0,0 +1,37 @@ +module REXML + module Encoding + begin + require 'uconv' + + def decode_sjis content + Uconv::sjistou8(content) + end + + def encode_sjis(str) + Uconv::u8tosjis(str) + end + rescue LoadError + require 'nkf' + + SJISTOU8 = '-Swm0' + U8TOSJIS = '-Wsm0' + + def decode_sjis(str) + NKF.nkf(SJISTOU8, str) + end + + def encode_sjis content + NKF.nkf(U8TOSJIS, content) + end + end + + b = proc do |obj| + class << obj + alias decode decode_sjis + alias encode encode_sjis + end + end + register("SHIFT-JIS", &b) + register("SHIFT_JIS", &b) + end +end diff --git a/ruby_1_8_6/lib/rexml/encodings/SHIFT_JIS.rb b/ruby_1_8_6/lib/rexml/encodings/SHIFT_JIS.rb new file mode 100644 index 0000000000..e355704a7c --- /dev/null +++ b/ruby_1_8_6/lib/rexml/encodings/SHIFT_JIS.rb @@ -0,0 +1 @@ +require 'rexml/encodings/SHIFT-JIS' diff --git a/ruby_1_8_6/lib/rexml/encodings/UNILE.rb b/ruby_1_8_6/lib/rexml/encodings/UNILE.rb new file mode 100644 index 0000000000..d054140c40 --- /dev/null +++ b/ruby_1_8_6/lib/rexml/encodings/UNILE.rb @@ -0,0 +1,34 @@ +module REXML + module Encoding + def encode_unile content + array_utf8 = content.unpack("U*") + array_enc = [] + array_utf8.each do |num| + if ((num>>16) > 0) + array_enc << ?? + array_enc << 0 + else + array_enc << (num & 0xFF) + array_enc << (num >> 8) + end + end + array_enc.pack('C*') + end + + def decode_unile(str) + array_enc=str.unpack('C*') + array_utf8 = [] + 0.step(array_enc.size-1, 2){|i| + array_utf8 << (array_enc.at(i) + array_enc.at(i+1)*0x100) + } + array_utf8.pack('U*') + end + + register(UNILE) do |obj| + class << obj + alias decode decode_unile + alias encode encode_unile + end + end + end +end diff --git a/ruby_1_8_6/lib/rexml/encodings/US-ASCII.rb b/ruby_1_8_6/lib/rexml/encodings/US-ASCII.rb new file mode 100644 index 0000000000..fb4c217074 --- /dev/null +++ b/ruby_1_8_6/lib/rexml/encodings/US-ASCII.rb @@ -0,0 +1,30 @@ +module REXML + module Encoding + # Convert from UTF-8 + def encode_ascii content + array_utf8 = content.unpack('U*') + array_enc = [] + array_utf8.each do |num| + if num <= 0x7F + array_enc << num + else + # Numeric entity (&#nnnn;); shard by Stefan Scholl + array_enc.concat "&\##{num};".unpack('C*') + end + end + array_enc.pack('C*') + end + + # Convert to UTF-8 + def decode_ascii(str) + str.unpack('C*').pack('U*') + end + + register("US-ASCII") do |obj| + class << obj + alias decode decode_ascii + alias encode encode_ascii + end + end + end +end diff --git a/ruby_1_8_6/lib/rexml/encodings/UTF-16.rb b/ruby_1_8_6/lib/rexml/encodings/UTF-16.rb new file mode 100644 index 0000000000..007c493d9c --- /dev/null +++ b/ruby_1_8_6/lib/rexml/encodings/UTF-16.rb @@ -0,0 +1,35 @@ +module REXML + module Encoding + def encode_utf16 content + array_utf8 = content.unpack("U*") + array_enc = [] + array_utf8.each do |num| + if ((num>>16) > 0) + array_enc << 0 + array_enc << ?? + else + array_enc << (num >> 8) + array_enc << (num & 0xFF) + end + end + array_enc.pack('C*') + end + + def decode_utf16(str) + str = str[2..-1] if /^\376\377/n =~ str + array_enc=str.unpack('C*') + array_utf8 = [] + 0.step(array_enc.size-1, 2){|i| + array_utf8 << (array_enc.at(i+1) + array_enc.at(i)*0x100) + } + array_utf8.pack('U*') + end + + register(UTF_16) do |obj| + class << obj + alias decode decode_utf16 + alias encode encode_utf16 + end + end + end +end diff --git a/ruby_1_8_6/lib/rexml/encodings/UTF-8.rb b/ruby_1_8_6/lib/rexml/encodings/UTF-8.rb new file mode 100644 index 0000000000..bb08f44100 --- /dev/null +++ b/ruby_1_8_6/lib/rexml/encodings/UTF-8.rb @@ -0,0 +1,18 @@ +module REXML + module Encoding + def encode_utf8 content + content + end + + def decode_utf8(str) + str + end + + register(UTF_8) do |obj| + class << obj + alias decode decode_utf8 + alias encode encode_utf8 + end + end + end +end |