mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
95b7ffce0f
checked in without Sean's concent. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4051 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
62 lines
1.6 KiB
Ruby
62 lines
1.6 KiB
Ruby
module REXML
|
|
module Encoding
|
|
@@uconv_available = false
|
|
|
|
ENCODING_CLAIMS = { }
|
|
|
|
def Encoding.claim( encoding_str, match=nil )
|
|
if match
|
|
ENCODING_CLAIMS[ match ] = encoding_str
|
|
else
|
|
ENCODING_CLAIMS[ /^\s*<?xml\s*version=(['"]).*?\1\s*encoding=(["'])#{encoding_str}\2/i ] = encoding_str
|
|
end
|
|
end
|
|
|
|
# Native, default format is UTF-8, so it is declared here rather than in
|
|
# an encodings/ definition.
|
|
UTF_8 = 'UTF-8'
|
|
claim( UTF_8 )
|
|
|
|
# ID ---> Encoding name
|
|
attr_reader :encoding
|
|
def encoding=( enc )
|
|
enc = UTF_8 unless enc
|
|
@encoding = enc.upcase
|
|
require "rexml/encodings/#@encoding" unless @encoding == UTF_8
|
|
end
|
|
|
|
def check_encoding str
|
|
rv = ENCODING_CLAIMS.find{|k,v| str =~ k }
|
|
# Raise an exception if there is a declared encoding and we don't
|
|
# recognize it
|
|
unless rv
|
|
if str =~ /^\s*<?xml\s*version=(['"]).*?\1\s*encoding=(["'])(.*?)\2/
|
|
raise "A matching encoding handler was not found for encoding '#{$3}', or the encoding handler failed to load due to a missing support library (such as uconv)."
|
|
else
|
|
return UTF_8
|
|
end
|
|
end
|
|
return rv[1]
|
|
end
|
|
|
|
def to_utf_8(str)
|
|
return str
|
|
end
|
|
|
|
def from_utf_8 content
|
|
return content
|
|
end
|
|
end
|
|
|
|
module Encodingses
|
|
encodings = []
|
|
$:.each do |incl_dir|
|
|
if Dir[ File.join(incl_dir, 'rexml', 'encodings') ].size > 0
|
|
encodings |= Dir[ File.join(incl_dir, 'rexml', 'encodings', '*_decl.rb') ]
|
|
end
|
|
encodings.collect!{ |f| File.basename(f) }
|
|
encodings.uniq!
|
|
end
|
|
encodings.each { |enc| require "rexml/encodings/#{enc}" }
|
|
end
|
|
end
|