Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

Changeset 678

Show
Ignore:
Timestamp:
01/12/03 11:16:08 (6 years ago)
Author:
nahi
Message:

Remove xmlInstanceEncoding attribute. It's not thread safe.
Charset.codeConv raises when no converter found. It only returned the source

string without warning.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/soap/charset.rb

    r605 r678  
    2121 
    2222module Charset 
    23   @xmlInstanceEncoding = $KCODE 
    2423  @dataModelEncoding = $KCODE 
     24 
     25  class CharsetError < SOAP::Error; end 
     26  class UnknownCharsetError < CharsetError; end 
     27  class CharsetConversionError < CharsetError; end 
    2528 
    2629public 
     
    4750      EncodingConvertMap[ [ 'SJIS', 'UTF8' ] ] = Uconv.method( :sjistou8 ) 
    4851 
    49       @xmlInstanceEncoding = 'UTF8' 
    5052      @dataModelEncoding = 'UTF8' 
    5153    rescue LoadError 
     
    7173  end 
    7274 
    73   def Charset.setXMLInstanceEncoding( streamEncoding ) 
    74     @xmlInstanceEncoding = streamEncoding 
     75  def Charset.getEncodingLabel 
     76    getCharsetLabel( @dataModelEncoding ) 
    7577  end 
    7678 
    77   def Charset.getXMLInstanceEncoding 
    78     @xmlInstanceEncoding 
     79  def Charset.encodingToXML( str, charset ) 
     80    codeConv( str, @dataModelEncoding, getCharsetStr( charset )) 
    7981  end 
    8082 
    81   def Charset.encodingToXML( str ) 
    82     codeConv( str, getEncoding, getXMLInstanceEncoding ) 
    83   end 
    84  
    85   def Charset.encodingFromXML( str ) 
    86     codeConv( str, getXMLInstanceEncoding, getEncoding ) 
     83  def Charset.encodingFromXML( str, charset ) 
     84    codeConv( str, getCharsetStr( charset ), @dataModelEncoding ) 
    8785  end 
    8886 
    8987  def Charset.codeConv( str, encFrom, encTo ) 
    90     return str if encFrom == encTo 
    91     if encFrom == 'NONE' or encTo == 'NONE' 
    92       return str 
     88    if encFrom == encTo or encFrom == 'NONE' or encTo == 'NONE' 
     89      str 
     90    elsif converter = EncodingConvertMap[[ encFrom, encTo ]] 
     91      converter.call( str ) 
     92    else 
     93      raise CharsetConversionError.new( 
     94        "Converter not found: #{ encFrom } -> #{ encTo }" ) 
     95      # In 1.4.7 or earlier, it only ignored encoding mismatch. 
     96      # str 
    9397    end 
    94     if converter = EncodingConvertMap[ [ encFrom, encTo ] ] 
    95       return converter.call( str ) 
    96     end 
    97     str 
    98   end 
    99  
    100   def Charset.getXMLInstanceEncodingLabel 
    101     getCharsetLabel( getXMLInstanceEncoding ) 
    10298  end 
    10399 
     
    107103 
    108104  def Charset.getCharsetStr( label ) 
    109     if label 
    110       CharsetMap.index( label.downcase ) || 'NONE' 
    111     else 
    112       'NONE' 
    113     end 
     105    CharsetMap.index( label.downcase ) 
    114106  end 
    115107 
     
    163155      isSJIS( str ) 
    164156    else 
    165       raise RuntimeError.new( "Unknown encoding: #{ code }" ) 
     157      raise UnknownCharsetError.new( "Unknown charset: #{ code }" ) 
    166158    end 
    167159  end