summaryrefslogtreecommitdiff
path: root/lib/xsd
diff options
context:
space:
mode:
authornahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-09-15 14:47:07 +0000
committernahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-09-15 14:47:07 +0000
commit533c24268e485c1de7d7fbe6d947681df5a48382 (patch)
tree4cc1c58ec29d3d4af8ce0e7f31802447be125221 /lib/xsd
parentcaf6ad3a760f4fb0a27bb8e483f3f6ad9de707f0 (diff)
* lib/{soap,wsdl,xsd}, test/{soap,wsdl,xsd}: imported soap4r/1.5.5.
#nnn is a ticket number at http://dev.ctor.org/soap4r * SOAP * allow to configure an envelope namespace of SOAP request. (#124) TemporaryNamespace = 'http://www.w3.org/2003/05/soap-envelope' @client.options["soap.envelope.requestnamespace"] = TemporaryNamespace @client.options["soap.envelope.responsenamespace"] = TemporaryNamespace @client.do_proc(...) * let SOAP request XML indent space configuable. see "soap.envelope.no_indent" option. (#130) * let external CES configuable. ex. client["soap.mapping.external_ces"] = 'SJIS'. $KCODE is used by default. (#133) external CES ::= CES used in Ruby object of client and server internal CES ::= CES used in SOAP/OM * add iso-8859-1 external CES support. (#106) * fixed illegal 'qualified' handling of elements. it caused ASP.NET inteoperability problem. (#144) * added 'soap.envelope.use_numeric_character_reference' (boolean) option to let query XML use numeric character reference in XML, not plain UTF-8 character. !GoogleSearch server seems to not allow plain UTF-8 character since 2005-08-15 update. (#147) * SOAP::Header::SimpleHeader (de)serialization throws an exception on !SimpleHeader.on_(in|out)bound when header is a String. so we could not use a simple single element headerItem. fixed. thanks to emil. (#129) * out parameter of rpc operation did not work. (#132) * follow HTTP redirect only if using http-access2. (#125) (#145) * add a workaround for importing an WSDL whose path begins with drive letter. (#115) * WSDL * SOAP Data which is defined as a simpletype was not mapped correctly to Ruby obj when using wsdl2ruby.rb generated classdef file. (#123) * rpc/literal support. (#118) * re-implemented local element qualify/unqualify control. handles elementFormDefault and form in WSDL. (#119) * Array of an element which has simpleType causes a crash. (#128) * prarmeterOrder may not contain return part so it can be shorter than parts size. Thanks to Hugh. (#139) * Samples * added !BasicAuth client sample. (#117) * added Base64 client/server sample. * added Flickr SOAP interface client sample. (#122) * added !SalesForce client sample. (#135) * updated Thawte CA certificate for !GoogleAdWords sample. * updated a client script with the newer version made by Johan. thanks! * shortened long file names. (#120) * fixed typo in authheader sample. (#129) * updated deprecated method usage. (#138) git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@9171 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/xsd')
-rw-r--r--lib/xsd/charset.rb76
-rw-r--r--lib/xsd/codegen/gensupport.rb17
-rw-r--r--lib/xsd/datatypes.rb23
-rw-r--r--lib/xsd/ns.rb2
-rw-r--r--lib/xsd/qname.rb7
5 files changed, 69 insertions, 56 deletions
diff --git a/lib/xsd/charset.rb b/lib/xsd/charset.rb
index ccd22a7744..15d5500fce 100644
--- a/lib/xsd/charset.rb
+++ b/lib/xsd/charset.rb
@@ -1,5 +1,5 @@
# XSD4R - Charset handling library.
-# Copyright (C) 2001, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
+# Copyright (C) 2001, 2003, 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
# redistribute it and/or modify it under the same terms of Ruby's license;
@@ -10,7 +10,7 @@ module XSD
module Charset
- @encoding = $KCODE
+ @internal_encoding = $KCODE
class XSDError < StandardError; end
class CharsetError < XSDError; end
@@ -24,27 +24,40 @@ public
#
EncodingConvertMap = {}
def Charset.init
+ EncodingConvertMap[['UTF8', 'X_ISO8859_1']] =
+ Proc.new { |str| str.unpack('U*').pack('C*') }
+ EncodingConvertMap[['X_ISO8859_1', 'UTF8']] =
+ Proc.new { |str| str.unpack('C*').pack('U*') }
begin
require 'xsd/iconvcharset'
- @encoding = 'UTF8'
- sjtag = (/(mswin|bccwin|mingw|cygwin|emx)/ =~ RUBY_PLATFORM) ? 'cp932' : 'shift_jis'
- EncodingConvertMap[['UTF8', 'EUC' ]] = Proc.new { |str| IconvCharset.safe_iconv("euc-jp", "utf-8", str) }
- EncodingConvertMap[['EUC' , 'UTF8']] = Proc.new { |str| IconvCharset.safe_iconv("utf-8", "euc-jp", str) }
- EncodingConvertMap[['EUC' , 'SJIS']] = Proc.new { |str| IconvCharset.safe_iconv(sjtag, "euc-jp", str) }
- EncodingConvertMap[['UTF8', 'SJIS']] = Proc.new { |str| IconvCharset.safe_iconv(sjtag, "utf-8", str) }
- EncodingConvertMap[['SJIS', 'UTF8']] = Proc.new { |str| IconvCharset.safe_iconv("utf-8", sjtag, str) }
- EncodingConvertMap[['SJIS', 'EUC' ]] = Proc.new { |str| IconvCharset.safe_iconv("euc-jp", sjtag, str) }
+ @internal_encoding = 'UTF8'
+ sjtag = (/(mswin|bccwin|mingw|cygwin|emx)/ =~ RUBY_PLATFORM) ? 'cp932' :
+ 'shift_jis'
+ EncodingConvertMap[['UTF8', 'EUC' ]] =
+ Proc.new { |str| IconvCharset.safe_iconv("euc-jp", "utf-8", str) }
+ EncodingConvertMap[['EUC' , 'UTF8']] =
+ Proc.new { |str| IconvCharset.safe_iconv("utf-8", "euc-jp", str) }
+ EncodingConvertMap[['EUC' , 'SJIS']] =
+ Proc.new { |str| IconvCharset.safe_iconv(sjtag, "euc-jp", str) }
+ EncodingConvertMap[['UTF8', 'SJIS']] =
+ Proc.new { |str| IconvCharset.safe_iconv(sjtag, "utf-8", str) }
+ EncodingConvertMap[['SJIS', 'UTF8']] =
+ Proc.new { |str| IconvCharset.safe_iconv("utf-8", sjtag, str) }
+ EncodingConvertMap[['SJIS', 'EUC' ]] =
+ Proc.new { |str| IconvCharset.safe_iconv("euc-jp", sjtag, str) }
rescue LoadError
begin
require 'nkf'
- EncodingConvertMap[['EUC' , 'SJIS']] = Proc.new { |str| NKF.nkf('-sXm0', str) }
- EncodingConvertMap[['SJIS', 'EUC' ]] = Proc.new { |str| NKF.nkf('-eXm0', str) }
+ EncodingConvertMap[['EUC' , 'SJIS']] =
+ Proc.new { |str| NKF.nkf('-sXm0', str) }
+ EncodingConvertMap[['SJIS', 'EUC' ]] =
+ Proc.new { |str| NKF.nkf('-eXm0', str) }
rescue LoadError
end
begin
require 'uconv'
- @encoding = 'UTF8'
+ @internal_encoding = 'UTF8'
EncodingConvertMap[['UTF8', 'EUC' ]] = Uconv.method(:u8toeuc)
EncodingConvertMap[['UTF8', 'SJIS']] = Uconv.method(:u8tosjis)
EncodingConvertMap[['EUC' , 'UTF8']] = Uconv.method(:euctou8)
@@ -60,6 +73,8 @@ public
'EUC' => 'euc-jp',
'SJIS' => 'shift_jis',
'UTF8' => 'utf-8',
+ 'X_ISO_8859_1' => 'iso-8859-1',
+ 'X_UNKNOWN' => nil,
}
@@ -67,24 +82,24 @@ public
## handlers
#
def Charset.encoding
- @encoding
+ @internal_encoding
end
def Charset.encoding=(encoding)
warn("xsd charset is set to #{encoding}") if $DEBUG
- @encoding = encoding
+ @internal_encoding = encoding
end
- def Charset.encoding_label
- charset_label(@encoding)
+ def Charset.xml_encoding_label
+ charset_label(@internal_encoding)
end
def Charset.encoding_to_xml(str, charset)
- encoding_conv(str, @encoding, charset_str(charset))
+ encoding_conv(str, @internal_encoding, charset_str(charset))
end
def Charset.encoding_from_xml(str, charset)
- encoding_conv(str, charset_str(charset), @encoding)
+ encoding_conv(str, charset_str(charset), @internal_encoding)
end
def Charset.encoding_conv(str, enc_from, enc_to)
@@ -94,7 +109,7 @@ public
converter.call(str)
else
raise CharsetConversionError.new(
- "Converter not found: #{ enc_from } -> #{ enc_to }")
+ "Converter not found: #{enc_from} -> #{enc_to}")
end
end
@@ -104,26 +119,26 @@ public
def Charset.charset_str(label)
if CharsetMap.respond_to?(:key)
- CharsetMap.key(label.downcase)
+ CharsetMap.key(label.downcase) || 'X_UNKNOWN'
else
- CharsetMap.index(label.downcase)
+ CharsetMap.index(label.downcase) || 'X_UNKNOWN'
end
end
# us_ascii = '[\x00-\x7F]'
us_ascii = '[\x9\xa\xd\x20-\x7F]' # XML 1.0 restricted.
- USASCIIRegexp = Regexp.new("\\A#{ us_ascii }*\\z", nil, "NONE")
+ USASCIIRegexp = Regexp.new("\\A#{us_ascii}*\\z", nil, "NONE")
twobytes_euc = '(?:[\x8E\xA1-\xFE][\xA1-\xFE])'
threebytes_euc = '(?:\x8F[\xA1-\xFE][\xA1-\xFE])'
- character_euc = "(?:#{ us_ascii }|#{ twobytes_euc }|#{ threebytes_euc })"
- EUCRegexp = Regexp.new("\\A#{ character_euc }*\\z", nil, "NONE")
+ character_euc = "(?:#{us_ascii}|#{twobytes_euc}|#{threebytes_euc})"
+ EUCRegexp = Regexp.new("\\A#{character_euc}*\\z", nil, "NONE")
# onebyte_sjis = '[\x00-\x7F\xA1-\xDF]'
onebyte_sjis = '[\x9\xa\xd\x20-\x7F\xA1-\xDF]' # XML 1.0 restricted.
twobytes_sjis = '(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'
- character_sjis = "(?:#{ onebyte_sjis }|#{ twobytes_sjis })"
- SJISRegexp = Regexp.new("\\A#{ character_sjis }*\\z", nil, "NONE")
+ character_sjis = "(?:#{onebyte_sjis}|#{twobytes_sjis})"
+ SJISRegexp = Regexp.new("\\A#{character_sjis}*\\z", nil, "NONE")
# 0xxxxxxx
# 110yyyyy 10xxxxxx
@@ -132,8 +147,9 @@ public
threebytes_utf8 = '(?:[\xE0-\xEF][\x80-\xBF][\x80-\xBF])'
# 11110uuu 10uuuzzz 10yyyyyy 10xxxxxx
fourbytes_utf8 = '(?:[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF])'
- character_utf8 = "(?:#{ us_ascii }|#{ twobytes_utf8 }|#{ threebytes_utf8 }|#{ fourbytes_utf8 })"
- UTF8Regexp = Regexp.new("\\A#{ character_utf8 }*\\z", nil, "NONE")
+ character_utf8 =
+ "(?:#{us_ascii}|#{twobytes_utf8}|#{threebytes_utf8}|#{fourbytes_utf8})"
+ UTF8Regexp = Regexp.new("\\A#{character_utf8}*\\z", nil, "NONE")
def Charset.is_us_ascii(str)
USASCIIRegexp =~ str
@@ -162,7 +178,7 @@ public
when 'SJIS'
is_sjis(str)
else
- raise UnknownCharsetError.new("Unknown charset: #{ code }")
+ raise UnknownCharsetError.new("Unknown charset: #{code}")
end
end
end
diff --git a/lib/xsd/codegen/gensupport.rb b/lib/xsd/codegen/gensupport.rb
index 854534154a..1e85d3668f 100644
--- a/lib/xsd/codegen/gensupport.rb
+++ b/lib/xsd/codegen/gensupport.rb
@@ -1,5 +1,5 @@
# XSD4R - Code generation support
-# Copyright (C) 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
+# Copyright (C) 2004, 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
# redistribute it and/or modify it under the same terms of Ruby's license;
@@ -10,7 +10,8 @@ module XSD
module CodeGen
# from the file 'keywords' in 1.9.
-KEYWORD = %w(
+KEYWORD = {}
+%w(
__LINE__
__FILE__
BEGIN
@@ -51,7 +52,7 @@ until
when
while
yield
-)
+).each { |k| KEYWORD[k] = nil }
module GenSupport
def capitalize(target)
@@ -96,12 +97,12 @@ module GenSupport
module_function :safemethodname?
def safevarname(name)
- safename = name.scan(/[a-zA-Z0-9_]+/).join('_')
- safename = uncapitalize(safename)
+ safename = uncapitalize(name.scan(/[a-zA-Z0-9_]+/).join('_'))
if /^[a-z]/ !~ safename or keyword?(safename)
- safename = "v_#{safename}"
+ "v_#{safename}"
+ else
+ safename
end
- safename
end
module_function :safevarname
@@ -111,7 +112,7 @@ module GenSupport
module_function :safevarname?
def keyword?(word)
- KEYWORD.include?(word)
+ KEYWORD.key?(word)
end
module_function :keyword?
diff --git a/lib/xsd/datatypes.rb b/lib/xsd/datatypes.rb
index d0fc44d69b..bbe6c8578f 100644
--- a/lib/xsd/datatypes.rb
+++ b/lib/xsd/datatypes.rb
@@ -560,23 +560,20 @@ module XSDDateTimeImpl
def screen_data(t)
# convert t to a DateTime as an internal representation.
- if t.is_a?(DateTime)
+ if t.respond_to?(:to_datetime) # 1.9 or later
+ t.to_datetime
+ elsif t.is_a?(DateTime)
t
elsif t.is_a?(Date)
- if t.respond_to?(:to_datetime) # from 1.9
- t.to_datetime
- else
- t = screen_data_str(t)
- t <<= 12 if t.year < 0
- t
- end
+ t = screen_data_str(t)
+ t <<= 12 if t.year < 0
+ t
elsif t.is_a?(Time)
- sec, min, hour, mday, month, year = t.to_a[0..5]
- diffday = t.usec.to_r / 1000000 / SecInDay
+ jd = DateTime.civil_to_jd(t.year, t.mon, t.mday, DateTime::ITALY)
+ fr = DateTime.time_to_day_fraction(t.hour, t.min, [t.sec, 59].min) +
+ t.usec.to_r / 1000000 / SecInDay
of = t.utc_offset.to_r / SecInDay
- data = DateTime.civil(year, month, mday, hour, min, sec, of)
- data += diffday
- data
+ DateTime.new0(DateTime.jd_to_ajd(jd, fr, of), of, DateTime::ITALY)
else
screen_data_str(t)
end
diff --git a/lib/xsd/ns.rb b/lib/xsd/ns.rb
index b63a8a5cdd..53eeae7130 100644
--- a/lib/xsd/ns.rb
+++ b/lib/xsd/ns.rb
@@ -72,7 +72,7 @@ public
if (name.namespace == @default_namespace)
name.name
elsif @ns2tag.key?(name.namespace)
- @ns2tag[name.namespace] + ':' << name.name
+ "#{@ns2tag[name.namespace]}:#{name.name}"
else
raise FormatError.new("namespace: #{name.namespace} not defined yet")
end
diff --git a/lib/xsd/qname.rb b/lib/xsd/qname.rb
index 18b002764b..bb9763a69a 100644
--- a/lib/xsd/qname.rb
+++ b/lib/xsd/qname.rb
@@ -31,9 +31,6 @@ class QName
end
def match(rhs)
- unless self.class === rhs
- return false
- end
if rhs.namespace and (rhs.namespace != @namespace)
return false
end
@@ -44,7 +41,7 @@ class QName
end
def ==(rhs)
- (self.class === rhs && @namespace == rhs.namespace && @name == rhs.name)
+ !rhs.nil? and @namespace == rhs.namespace and @name == rhs.name
end
def ===(rhs)
@@ -73,6 +70,8 @@ class QName
NormalizedNameRegexp =~ str
self.new($1, $2)
end
+
+ EMPTY = QName.new.freeze
end