2003-06-09 21:31:01 -04:00
module REXML
module Encoding
@@uconv_available = false
ENCODING_CLAIMS = { }
def Encoding . claim ( encoding_str , match = nil )
if match
ENCODING_CLAIMS [ match ] = encoding_str
else
2003-07-09 18:28:42 -04:00
ENCODING_CLAIMS [ / ^ \ s*<?xml \ s*version=(['"]).*? \ 1 \ s*encoding=(["']) #{ encoding_str } \ 2 /i ] = encoding_str
2003-06-09 21:31:01 -04:00
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 )
2003-07-09 18:28:42 -04:00
enc = UTF_8 unless enc
rv = ENCODING_CLAIMS . find { | k , v | / #{ v } /i =~ enc }
enc = rv [ 1 ] if rv
@encoding = enc
require " rexml/encodings/ #@encoding " unless @encoding == UTF_8
2003-06-09 21:31:01 -04:00
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