soap4r_es 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. checksums.yaml +7 -0
  2. data/bin/wsdl2ruby.rb +140 -0
  3. data/bin/wsdl2ruby_rails.rb +140 -0
  4. data/bin/xsd2ruby.rb +92 -0
  5. data/lib/soap/attachment.rb +109 -0
  6. data/lib/soap/attrproxy.rb +35 -0
  7. data/lib/soap/baseData.rb +1095 -0
  8. data/lib/soap/element.rb +278 -0
  9. data/lib/soap/encodingstyle/aspDotNetHandler.rb +208 -0
  10. data/lib/soap/encodingstyle/handler.rb +121 -0
  11. data/lib/soap/encodingstyle/literalHandler.rb +196 -0
  12. data/lib/soap/encodingstyle/soapHandler.rb +560 -0
  13. data/lib/soap/filter/filterchain.rb +52 -0
  14. data/lib/soap/filter/handler.rb +32 -0
  15. data/lib/soap/filter/streamhandler.rb +30 -0
  16. data/lib/soap/filter.rb +14 -0
  17. data/lib/soap/generator.rb +299 -0
  18. data/lib/soap/header/handler.rb +64 -0
  19. data/lib/soap/header/handlerset.rb +78 -0
  20. data/lib/soap/header/mappinghandler.rb +48 -0
  21. data/lib/soap/header/simplehandler.rb +45 -0
  22. data/lib/soap/httpconfigloader.rb +140 -0
  23. data/lib/soap/mapping/encodedregistry.rb +541 -0
  24. data/lib/soap/mapping/factory.rb +389 -0
  25. data/lib/soap/mapping/literalregistry.rb +392 -0
  26. data/lib/soap/mapping/mapping.rb +577 -0
  27. data/lib/soap/mapping/registry.rb +297 -0
  28. data/lib/soap/mapping/rubytypeFactory.rb +446 -0
  29. data/lib/soap/mapping/schemadefinition.rb +171 -0
  30. data/lib/soap/mapping/typeMap.rb +107 -0
  31. data/lib/soap/mapping/wsdlencodedregistry.rb +212 -0
  32. data/lib/soap/mapping/wsdlliteralregistry.rb +249 -0
  33. data/lib/soap/mapping.rb +13 -0
  34. data/lib/soap/marshal.rb +60 -0
  35. data/lib/soap/mimemessage.rb +243 -0
  36. data/lib/soap/nestedexception.rb +43 -0
  37. data/lib/soap/netHttpClient.rb +242 -0
  38. data/lib/soap/ns.rb +39 -0
  39. data/lib/soap/parser.rb +253 -0
  40. data/lib/soap/processor.rb +67 -0
  41. data/lib/soap/property.rb +330 -0
  42. data/lib/soap/proxy.rb +15 -0
  43. data/lib/soap/rpc/cgistub.rb +249 -0
  44. data/lib/soap/rpc/driver.rb +222 -0
  45. data/lib/soap/rpc/element.rb +375 -0
  46. data/lib/soap/rpc/httpserver.rb +144 -0
  47. data/lib/soap/rpc/methodDef.rb +69 -0
  48. data/lib/soap/rpc/proxy.rb +573 -0
  49. data/lib/soap/rpc/router.rb +672 -0
  50. data/lib/soap/rpc/rpc.rb +26 -0
  51. data/lib/soap/rpc/soaplet.rb +201 -0
  52. data/lib/soap/rpc/standaloneServer.rb +44 -0
  53. data/lib/soap/soap.rb +163 -0
  54. data/lib/soap/streamHandler.rb +302 -0
  55. data/lib/soap/version.rb +12 -0
  56. data/lib/soap/wsdlDriver.rb +165 -0
  57. data/lib/wsdl/binding.rb +66 -0
  58. data/lib/wsdl/data.rb +65 -0
  59. data/lib/wsdl/definitions.rb +237 -0
  60. data/lib/wsdl/documentation.rb +33 -0
  61. data/lib/wsdl/import.rb +81 -0
  62. data/lib/wsdl/importer.rb +39 -0
  63. data/lib/wsdl/info.rb +51 -0
  64. data/lib/wsdl/message.rb +55 -0
  65. data/lib/wsdl/operation.rb +152 -0
  66. data/lib/wsdl/operationBinding.rb +241 -0
  67. data/lib/wsdl/param.rb +94 -0
  68. data/lib/wsdl/parser.rb +180 -0
  69. data/lib/wsdl/part.rb +53 -0
  70. data/lib/wsdl/port.rb +67 -0
  71. data/lib/wsdl/portType.rb +76 -0
  72. data/lib/wsdl/service.rb +62 -0
  73. data/lib/wsdl/soap/address.rb +41 -0
  74. data/lib/wsdl/soap/binding.rb +50 -0
  75. data/lib/wsdl/soap/body.rb +59 -0
  76. data/lib/wsdl/soap/cgiStubCreator.rb +93 -0
  77. data/lib/wsdl/soap/classDefCreator.rb +529 -0
  78. data/lib/wsdl/soap/classDefCreatorSupport.rb +242 -0
  79. data/lib/wsdl/soap/classNameCreator.rb +57 -0
  80. data/lib/wsdl/soap/clientSkeltonCreator.rb +107 -0
  81. data/lib/wsdl/soap/complexType.rb +174 -0
  82. data/lib/wsdl/soap/data.rb +43 -0
  83. data/lib/wsdl/soap/definitions.rb +201 -0
  84. data/lib/wsdl/soap/driverCreator.rb +121 -0
  85. data/lib/wsdl/soap/element.rb +34 -0
  86. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +74 -0
  87. data/lib/wsdl/soap/fault.rb +57 -0
  88. data/lib/wsdl/soap/header.rb +87 -0
  89. data/lib/wsdl/soap/headerfault.rb +57 -0
  90. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +116 -0
  91. data/lib/wsdl/soap/mappingRegistryCreator.rb +59 -0
  92. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +380 -0
  93. data/lib/wsdl/soap/methodDefCreator.rb +200 -0
  94. data/lib/wsdl/soap/operation.rb +113 -0
  95. data/lib/wsdl/soap/servantSkeltonCreator.rb +92 -0
  96. data/lib/wsdl/soap/servletStubCreator.rb +105 -0
  97. data/lib/wsdl/soap/standaloneServerStubCreator.rb +101 -0
  98. data/lib/wsdl/soap/wsdl2ruby.rb +249 -0
  99. data/lib/wsdl/types.rb +45 -0
  100. data/lib/wsdl/wsdl.rb +25 -0
  101. data/lib/wsdl/xmlSchema/all.rb +25 -0
  102. data/lib/wsdl/xmlSchema/annotation.rb +35 -0
  103. data/lib/wsdl/xmlSchema/any.rb +62 -0
  104. data/lib/wsdl/xmlSchema/anyAttribute.rb +49 -0
  105. data/lib/wsdl/xmlSchema/attribute.rb +105 -0
  106. data/lib/wsdl/xmlSchema/attributeGroup.rb +69 -0
  107. data/lib/wsdl/xmlSchema/choice.rb +59 -0
  108. data/lib/wsdl/xmlSchema/complexContent.rb +98 -0
  109. data/lib/wsdl/xmlSchema/complexExtension.rb +120 -0
  110. data/lib/wsdl/xmlSchema/complexRestriction.rb +105 -0
  111. data/lib/wsdl/xmlSchema/complexType.rb +194 -0
  112. data/lib/wsdl/xmlSchema/content.rb +96 -0
  113. data/lib/wsdl/xmlSchema/data.rb +117 -0
  114. data/lib/wsdl/xmlSchema/element.rb +154 -0
  115. data/lib/wsdl/xmlSchema/enumeration.rb +37 -0
  116. data/lib/wsdl/xmlSchema/fractiondigits.rb +38 -0
  117. data/lib/wsdl/xmlSchema/group.rb +101 -0
  118. data/lib/wsdl/xmlSchema/import.rb +53 -0
  119. data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
  120. data/lib/wsdl/xmlSchema/importer.rb +103 -0
  121. data/lib/wsdl/xmlSchema/include.rb +48 -0
  122. data/lib/wsdl/xmlSchema/length.rb +38 -0
  123. data/lib/wsdl/xmlSchema/list.rb +49 -0
  124. data/lib/wsdl/xmlSchema/maxexclusive.rb +38 -0
  125. data/lib/wsdl/xmlSchema/maxinclusive.rb +38 -0
  126. data/lib/wsdl/xmlSchema/maxlength.rb +38 -0
  127. data/lib/wsdl/xmlSchema/minexclusive.rb +38 -0
  128. data/lib/wsdl/xmlSchema/mininclusive.rb +38 -0
  129. data/lib/wsdl/xmlSchema/minlength.rb +38 -0
  130. data/lib/wsdl/xmlSchema/parser.rb +168 -0
  131. data/lib/wsdl/xmlSchema/pattern.rb +37 -0
  132. data/lib/wsdl/xmlSchema/ref.rb +34 -0
  133. data/lib/wsdl/xmlSchema/schema.rb +179 -0
  134. data/lib/wsdl/xmlSchema/sequence.rb +55 -0
  135. data/lib/wsdl/xmlSchema/simpleContent.rb +70 -0
  136. data/lib/wsdl/xmlSchema/simpleExtension.rb +63 -0
  137. data/lib/wsdl/xmlSchema/simpleRestriction.rb +133 -0
  138. data/lib/wsdl/xmlSchema/simpleType.rb +88 -0
  139. data/lib/wsdl/xmlSchema/totaldigits.rb +38 -0
  140. data/lib/wsdl/xmlSchema/union.rb +36 -0
  141. data/lib/wsdl/xmlSchema/unique.rb +35 -0
  142. data/lib/wsdl/xmlSchema/whitespace.rb +38 -0
  143. data/lib/wsdl/xmlSchema/xsd2ruby.rb +177 -0
  144. data/lib/xsd/charset.rb +190 -0
  145. data/lib/xsd/codegen/classdef.rb +230 -0
  146. data/lib/xsd/codegen/commentdef.rb +35 -0
  147. data/lib/xsd/codegen/gensupport.rb +277 -0
  148. data/lib/xsd/codegen/methoddef.rb +71 -0
  149. data/lib/xsd/codegen/moduledef.rb +209 -0
  150. data/lib/xsd/codegen.rb +13 -0
  151. data/lib/xsd/datatypes.rb +1465 -0
  152. data/lib/xsd/datatypes1999.rb +21 -0
  153. data/lib/xsd/iconvcharset.rb +33 -0
  154. data/lib/xsd/mapping.rb +69 -0
  155. data/lib/xsd/namedelements.rb +133 -0
  156. data/lib/xsd/ns.rb +183 -0
  157. data/lib/xsd/qname.rb +80 -0
  158. data/lib/xsd/xmlparser/libxmlparser.rb +136 -0
  159. data/lib/xsd/xmlparser/nokogiriparser.rb +63 -0
  160. data/lib/xsd/xmlparser/ogaparser.rb +53 -0
  161. data/lib/xsd/xmlparser/oxparser.rb +97 -0
  162. data/lib/xsd/xmlparser/parser.rb +101 -0
  163. data/lib/xsd/xmlparser/rexmlparser.rb +54 -0
  164. data/lib/xsd/xmlparser.rb +81 -0
  165. metadata +240 -0
@@ -0,0 +1,38 @@
1
+ # encoding: UTF-8
2
+ # WSDL4R - XMLSchema whiteSpace definition for WSDL.
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'wsdl/info'
11
+
12
+
13
+ module WSDL
14
+ module XMLSchema
15
+
16
+
17
+ class WhiteSpace < Info
18
+ def initialize
19
+ super
20
+ end
21
+
22
+ def parse_element(element)
23
+ nil
24
+ end
25
+
26
+ def parse_attr(attr, value)
27
+ case attr
28
+ when FixedAttrName
29
+ parent.fixed[:whitespace] = to_boolean(value)
30
+ when ValueAttrName
31
+ parent.whitespace = value.source
32
+ end
33
+ end
34
+ end
35
+
36
+
37
+ end
38
+ end
@@ -0,0 +1,177 @@
1
+ # encoding: UTF-8
2
+ # XSD4R - XSD to ruby mapping library.
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'xsd/codegen/gensupport'
11
+ require 'wsdl/xmlSchema/importer'
12
+ require 'wsdl/soap/classDefCreator'
13
+ require 'wsdl/soap/classDefCreatorSupport'
14
+ require 'wsdl/soap/literalMappingRegistryCreator'
15
+ require 'wsdl/soap/classNameCreator'
16
+ require 'logger'
17
+ require 'logger-application' unless defined?(Logger::Application)
18
+
19
+
20
+ module WSDL
21
+ module XMLSchema
22
+
23
+
24
+ class XSD2Ruby
25
+ include WSDL::SOAP::ClassDefCreatorSupport
26
+
27
+ attr_accessor :location
28
+ attr_reader :opt
29
+ attr_accessor :logger
30
+ attr_accessor :basedir
31
+
32
+ def run
33
+ unless @location
34
+ raise RuntimeError, "XML Schema location not given"
35
+ end
36
+ @xsd = import(@location)
37
+ @name = @opt['classdef'] || create_classname(@xsd)
38
+ create_file
39
+ end
40
+
41
+ private
42
+
43
+ def initialize
44
+ @location = nil
45
+ @opt = {}
46
+ @logger = Logger.new(STDERR)
47
+ @basedir = nil
48
+ @xsd = nil
49
+ @name = nil
50
+ @name_creator = WSDL::SOAP::ClassNameCreator.new
51
+ end
52
+
53
+ def create_file
54
+ @modulepath = @opt['module_path']
55
+ create_classdef if @opt.key?('classdef')
56
+ create_mapping_registry if @opt.key?('mapping_registry')
57
+ create_mapper if @opt.key?('mapper')
58
+ end
59
+
60
+ def create_classdef
61
+ @logger.info { "Creating class definition." }
62
+ @classdef_filename = @name + '.rb'
63
+ check_file(@classdef_filename) or return
64
+ write_file(@classdef_filename) do |f|
65
+ f << WSDL::SOAP::ClassDefCreator.new(@xsd, @name_creator, @modulepath).dump
66
+ end
67
+ end
68
+
69
+ def create_mapping_registry
70
+ @logger.info { "Creating mapping registry definition." }
71
+ @mr_filename = @name + '_mapping_registry.rb'
72
+ check_file(@mr_filename) or return
73
+ write_file(@mr_filename) do |f|
74
+ f << dump_mapping_registry
75
+ end
76
+ end
77
+
78
+ def create_mapper
79
+ @logger.info { "Creating mapper definition." }
80
+ @mapper_filename = @name + '_mapper.rb'
81
+ check_file(@mapper_filename) or return
82
+ write_file(@mapper_filename) do |f|
83
+ f << dump_mapper
84
+ end
85
+ end
86
+
87
+ def dump_mapping_registry
88
+ defined_const = {}
89
+ creator = WSDL::SOAP::LiteralMappingRegistryCreator.new(@xsd, @name_creator, @modulepath, defined_const)
90
+ module_name = XSD::CodeGen::GenSupport.safeconstname(@name + 'MappingRegistry')
91
+ if @modulepath
92
+ module_name = [@modulepath, module_name].join('::')
93
+ end
94
+ m = XSD::CodeGen::ModuleDef.new(module_name)
95
+ m.def_require("xsd/mapping")
96
+ m.def_require("#{@classdef_filename}")
97
+ varname = 'Registry'
98
+ m.def_const(varname, '::SOAP::Mapping::LiteralRegistry.new')
99
+ m.def_code(creator.dump(varname))
100
+ #
101
+ defined_const.each do |ns, tag|
102
+ m.def_const(tag, dq(ns))
103
+ end
104
+ m.dump
105
+ end
106
+
107
+ def dump_mapper
108
+ class_name = XSD::CodeGen::GenSupport.safeconstname(@name + 'Mapper')
109
+ if @modulepath
110
+ class_name = [@modulepath, class_name].join('::')
111
+ end
112
+ mr_name = XSD::CodeGen::GenSupport.safeconstname(@name + 'MappingRegistry')
113
+ c = XSD::CodeGen::ClassDef.new(class_name, 'XSD::Mapping::Mapper')
114
+ c.def_require("#{@mr_filename}")
115
+ c.def_method("initialize") do
116
+ "super(#{mr_name}::Registry)"
117
+ end
118
+ c.dump
119
+ end
120
+
121
+ def write_file(filename)
122
+ if @basedir
123
+ filename = File.join(basedir, filename)
124
+ end
125
+ File.open(filename, "w") do |f|
126
+ f.puts "# encoding: UTF-8"
127
+ yield f
128
+ end
129
+ end
130
+
131
+ def check_file(filename)
132
+ if @basedir
133
+ filename = File.join(basedir, filename)
134
+ end
135
+ if FileTest.exist?(filename)
136
+ if @opt.key?('force')
137
+ @logger.warn {
138
+ "File '#{filename}' exists but overrides it."
139
+ }
140
+ true
141
+ else
142
+ @logger.warn {
143
+ "File '#{filename}' exists. #{$0} did not override it."
144
+ }
145
+ false
146
+ end
147
+ else
148
+ @logger.info { "Creates file '#{filename}'." }
149
+ true
150
+ end
151
+ end
152
+
153
+ def create_classname(xsd)
154
+ name = nil
155
+ if xsd.targetnamespace
156
+ name = xsd.targetnamespace.scan(/[a-zA-Z0-9]+$/)[0]
157
+ end
158
+ if name.nil?
159
+ 'default'
160
+ else
161
+ XSD::CodeGen::GenSupport.safevarname(name)
162
+ end
163
+ end
164
+
165
+ def import(location)
166
+ WSDL::XMLSchema::Importer.import(location)
167
+ end
168
+ end
169
+
170
+
171
+ end
172
+ end
173
+
174
+
175
+ if __FILE__ == $0
176
+ warn("WARNING: #{File.expand_path(__FILE__)} is a library file used by bin/xsd2ruby.rb. Find bin/xsd2ruby.rb from tarball version of soap4r or install soap4r via gem.")
177
+ end
@@ -0,0 +1,190 @@
1
+ # encoding: UTF-8
2
+ # XSD4R - Charset handling library.
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ module XSD
11
+
12
+
13
+ module Charset
14
+ @internal_encoding = (RUBY_VERSION.to_f <= 1.8) ? $KCODE : 'UTF8'
15
+
16
+ class XSDError < StandardError; end
17
+ class CharsetError < XSDError; end
18
+ class UnknownCharsetError < CharsetError; end
19
+ class CharsetConversionError < CharsetError; end
20
+
21
+ public
22
+
23
+ ###
24
+ ## Maps
25
+ #
26
+ EncodingConvertMap = {}
27
+ def Charset.init
28
+ EncodingConvertMap[['UTF8', 'X_ISO_8859_1']] =
29
+ Proc.new { |str| str.unpack('U*').pack('C*') }
30
+ EncodingConvertMap[['X_ISO_8859_1', 'UTF8']] =
31
+ Proc.new { |str| str.unpack('C*').pack('U*') }
32
+ begin
33
+ require 'xsd/iconvcharset'
34
+ @internal_encoding = 'UTF8'
35
+ sjtag = (/(mswin|bccwin|mingw|cygwin|emx)/ =~ RUBY_PLATFORM) ? 'cp932' :
36
+ 'shift_jis'
37
+ EncodingConvertMap[['UTF8', 'EUC' ]] =
38
+ Proc.new { |str| IconvCharset.safe_iconv("euc-jp", "utf-8", str) }
39
+ EncodingConvertMap[['EUC' , 'UTF8']] =
40
+ Proc.new { |str| IconvCharset.safe_iconv("utf-8", "euc-jp", str) }
41
+ EncodingConvertMap[['EUC' , 'SJIS']] =
42
+ Proc.new { |str| IconvCharset.safe_iconv(sjtag, "euc-jp", str) }
43
+ EncodingConvertMap[['UTF8', 'SJIS']] =
44
+ Proc.new { |str| IconvCharset.safe_iconv(sjtag, "utf-8", str) }
45
+ EncodingConvertMap[['SJIS', 'UTF8']] =
46
+ Proc.new { |str| IconvCharset.safe_iconv("utf-8", sjtag, str) }
47
+ EncodingConvertMap[['SJIS', 'EUC' ]] =
48
+ Proc.new { |str| IconvCharset.safe_iconv("euc-jp", sjtag, str) }
49
+ rescue LoadError
50
+ begin
51
+ require 'nkf'
52
+ EncodingConvertMap[['EUC' , 'SJIS']] =
53
+ Proc.new { |str| NKF.nkf('-sXm0', str) }
54
+ EncodingConvertMap[['SJIS', 'EUC' ]] =
55
+ Proc.new { |str| NKF.nkf('-eXm0', str) }
56
+ rescue LoadError
57
+ end
58
+
59
+ begin
60
+ require 'uconv'
61
+ @internal_encoding = 'UTF8'
62
+ EncodingConvertMap[['UTF8', 'EUC' ]] = Uconv.method(:u8toeuc)
63
+ EncodingConvertMap[['UTF8', 'SJIS']] = Uconv.method(:u8tosjis)
64
+ EncodingConvertMap[['EUC' , 'UTF8']] = Uconv.method(:euctou8)
65
+ EncodingConvertMap[['SJIS', 'UTF8']] = Uconv.method(:sjistou8)
66
+ rescue LoadError
67
+ end
68
+ end
69
+ end
70
+ self.init
71
+
72
+ CharsetMap = {
73
+ 'NONE' => 'us-ascii',
74
+ 'EUC' => 'euc-jp',
75
+ 'SJIS' => 'shift_jis',
76
+ 'UTF8' => 'utf-8',
77
+ 'X_ISO_8859_1' => 'iso-8859-1',
78
+ 'X_UNKNOWN' => nil,
79
+ }
80
+
81
+ CharsetStrCache = {}
82
+
83
+
84
+ ###
85
+ ## handlers
86
+ #
87
+ def Charset.encoding
88
+ @internal_encoding
89
+ end
90
+
91
+ def Charset.encoding=(encoding)
92
+ warn("xsd charset is set to #{encoding}") if $DEBUG
93
+ @internal_encoding = encoding
94
+ end
95
+
96
+ def Charset.xml_encoding_label
97
+ charset_label(@internal_encoding)
98
+ end
99
+
100
+ def Charset.encoding_to_xml(str, charset)
101
+ encoding_conv(str, @internal_encoding, charset_str(charset))
102
+ end
103
+
104
+ def Charset.encoding_from_xml(str, charset)
105
+ encoding_conv(str, charset_str(charset), @internal_encoding)
106
+ end
107
+
108
+ def Charset.encoding_conv(str, enc_from, enc_to)
109
+ if enc_from == enc_to or enc_from == 'NONE' or enc_to == 'NONE'
110
+ str
111
+ elsif converter = EncodingConvertMap[[enc_from, enc_to]]
112
+ converter.call(str)
113
+ else
114
+ raise CharsetConversionError.new(
115
+ "Converter not found: #{enc_from} -> #{enc_to}")
116
+ end
117
+ end
118
+
119
+ def Charset.charset_label(encoding)
120
+ CharsetMap[encoding.upcase]
121
+ end
122
+
123
+ def Charset.charset_str(label)
124
+ if CharsetMap.respond_to?(:key)
125
+ CharsetStrCache[label] ||= CharsetMap.key(label.downcase) || 'X_UNKNOWN'
126
+ else
127
+ CharsetStrCache[label] ||= CharsetMap.index(label.downcase) || 'X_UNKNOWN'
128
+ end
129
+ end
130
+
131
+ # us_ascii = '[\x00-\x7F]'
132
+ us_ascii = '[\x9\xa\xd\x20-\x7F]' # XML 1.0 restricted.
133
+ USASCIIRegexp = Regexp.new("\\A#{us_ascii}*\\z", nil, 'n')
134
+
135
+ twobytes_euc = '(?:[\x8E\xA1-\xFE][\xA1-\xFE])'
136
+ threebytes_euc = '(?:\x8F[\xA1-\xFE][\xA1-\xFE])'
137
+ character_euc = "(?:#{us_ascii}|#{twobytes_euc}|#{threebytes_euc})"
138
+ EUCRegexp = Regexp.new("\\A#{character_euc}*\\z", nil, 'n')
139
+
140
+ # onebyte_sjis = '[\x00-\x7F\xA1-\xDF]'
141
+ onebyte_sjis = '[\x9\xa\xd\x20-\x7F\xA1-\xDF]' # XML 1.0 restricted.
142
+ twobytes_sjis = '(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'
143
+ character_sjis = "(?:#{onebyte_sjis}|#{twobytes_sjis})"
144
+ SJISRegexp = Regexp.new("\\A#{character_sjis}*\\z", nil, 'n')
145
+
146
+ # 0xxxxxxx
147
+ # 110yyyyy 10xxxxxx
148
+ twobytes_utf8 = '(?:[\xC0-\xDF][\x80-\xBF])'
149
+ # 1110zzzz 10yyyyyy 10xxxxxx
150
+ threebytes_utf8 = '(?:[\xE0-\xEF][\x80-\xBF][\x80-\xBF])'
151
+ # 11110uuu 10uuuzzz 10yyyyyy 10xxxxxx
152
+ fourbytes_utf8 = '(?:[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF])'
153
+ character_utf8 =
154
+ "(?:#{us_ascii}|#{twobytes_utf8}|#{threebytes_utf8}|#{fourbytes_utf8})"
155
+ UTF8Regexp = Regexp.new("\\A#{character_utf8}*\\z", nil, 'n')
156
+
157
+ def Charset.is_us_ascii(str)
158
+ USASCIIRegexp =~ str
159
+ end
160
+
161
+ def Charset.is_utf8(str)
162
+ UTF8Regexp =~ str
163
+ end
164
+
165
+ def Charset.is_euc(str)
166
+ EUCRegexp =~ str
167
+ end
168
+
169
+ def Charset.is_sjis(str)
170
+ SJISRegexp =~ str
171
+ end
172
+
173
+ def Charset.is_ces(str, code = @internal_encoding)
174
+ case code
175
+ when 'NONE'
176
+ is_us_ascii(str)
177
+ when 'UTF8'
178
+ is_utf8(str)
179
+ when 'EUC'
180
+ is_euc(str)
181
+ when 'SJIS'
182
+ is_sjis(str)
183
+ else
184
+ raise UnknownCharsetError.new("Unknown charset: #{code}")
185
+ end
186
+ end
187
+ end
188
+
189
+
190
+ end
@@ -0,0 +1,230 @@
1
+ # encoding: UTF-8
2
+ # XSD4R - Generating class definition code
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'xsd/codegen/gensupport'
11
+ require 'xsd/codegen/moduledef'
12
+ require 'xsd/codegen/methoddef'
13
+
14
+
15
+ module XSD
16
+ module CodeGen
17
+
18
+
19
+ class ClassDef < ModuleDef
20
+ include GenSupport
21
+
22
+ def initialize(name, baseclass = nil)
23
+ super(name)
24
+ @baseclass = baseclass
25
+ @classvar = []
26
+ @attrdef = []
27
+ @included_files = []
28
+ end
29
+
30
+ def def_classvar(var, value)
31
+ var = var.sub(/\A@@/, "")
32
+ unless safevarname?(var)
33
+ raise ArgumentError.new("#{var} seems to be unsafe")
34
+ end
35
+ @classvar << [var, value]
36
+ end
37
+
38
+ def def_attr(attrname, writable = true, varname = nil)
39
+ unless safevarname?(varname || attrname)
40
+ raise ArgumentError.new("#{varname || attrname} seems to be unsafe")
41
+ end
42
+ @attrdef << [attrname, writable, varname]
43
+ end
44
+
45
+ def include_files_in_class(files)
46
+ @included_files << files
47
+ end
48
+
49
+
50
+
51
+ def dump
52
+ buf = ""
53
+ unless @requirepath.empty?
54
+ buf << dump_requirepath
55
+ end
56
+ buf << dump_emptyline unless buf.empty?
57
+ package = @name.split(/::/)[0..-2]
58
+ buf << dump_package_def(package) unless package.empty?
59
+ buf << dump_comment if @comment
60
+ buf << dump_class_def
61
+ spacer = false
62
+ unless @classvar.empty?
63
+ spacer = true
64
+ buf << dump_classvar
65
+ end
66
+ unless @const.empty?
67
+ buf << dump_emptyline if spacer
68
+ spacer = true
69
+ buf << dump_const
70
+ end
71
+ unless @innermodule.empty?
72
+ buf << dump_emptyline # always add 1 empty line
73
+ spacer = true
74
+ buf << dump_innermodule
75
+ end
76
+ unless @included_files.empty?
77
+ buf << dump_emptyline if spacer
78
+ spacer = true
79
+ buf << dump_include_file
80
+ end
81
+ unless @attrdef.empty?
82
+ buf << dump_emptyline if spacer
83
+ spacer = true
84
+ buf << dump_attributes
85
+ end
86
+ unless @code.empty?
87
+ buf << dump_emptyline if spacer
88
+ spacer = true
89
+ buf << dump_code
90
+ end
91
+ unless @methoddef.empty?
92
+ buf << dump_emptyline if spacer
93
+ spacer = true
94
+ buf << dump_methods
95
+ end
96
+ buf << dump_class_def_end
97
+ buf << dump_package_def_end(package) unless package.empty?
98
+ buf.gsub(/^\s+$/, '')
99
+ end
100
+
101
+ private
102
+
103
+ def dump_class_def
104
+ name = @name.to_s.split(/::/)
105
+ if @baseclass
106
+ format("class #{name.last} < #{@baseclass}")
107
+ else
108
+ format("class #{name.last}")
109
+ end
110
+ end
111
+
112
+ def dump_include_file
113
+ str = ""
114
+ @included_files.each{ |file_to_include|
115
+ str << "\n" unless str.empty?
116
+ str << format("include "+file_to_include)
117
+ }
118
+ str
119
+ end
120
+
121
+ def dump_class_def_end
122
+ str = format("end")
123
+ end
124
+
125
+ def dump_classvar
126
+ dump_static(
127
+ @classvar.collect { |var, value|
128
+ %Q(@@#{var.sub(/^@@/, "")} = #{dump_value(value)})
129
+ }.join("\n")
130
+ )
131
+ end
132
+
133
+ def dump_attributes
134
+ str = ""
135
+ @attrdef.each do |attrname, writable, varname|
136
+ varname ||= attrname
137
+ if attrname == varname
138
+ str << format(dump_accessor(attrname, writable), 2)
139
+ end
140
+ end
141
+ @attrdef.each do |attrname, writable, varname|
142
+ varname ||= attrname
143
+ if attrname != varname
144
+ str << "\n" unless str.empty?
145
+ str << format(dump_attribute(attrname, writable, varname), 2)
146
+ end
147
+ end
148
+ str
149
+ end
150
+
151
+ def dump_accessor(attrname, writable)
152
+ if writable
153
+ "attr_accessor :#{attrname}"
154
+ else
155
+ "attr_reader :#{attrname}"
156
+ end
157
+ end
158
+
159
+ def dump_attribute(attrname, writable, varname)
160
+ str = nil
161
+ mr = MethodDef.new(attrname)
162
+ mr.definition = "@#{varname}"
163
+ str = mr.dump
164
+ if writable
165
+ mw = MethodDef.new(attrname + "=", 'value')
166
+ mw.definition = "@#{varname} = value"
167
+ str << "\n" + mw.dump
168
+ end
169
+ str
170
+ end
171
+ end
172
+
173
+
174
+ end
175
+ end
176
+
177
+
178
+ if __FILE__ == $0
179
+ require 'xsd/codegen/classdef'
180
+ include XSD::CodeGen
181
+ c = ClassDef.new("Foo::Bar::HobbitName", String)
182
+ c.def_require("foo/bar")
183
+ c.comment = <<-EOD
184
+ foo
185
+ bar
186
+ baz
187
+ EOD
188
+ c.def_const("FOO", 1)
189
+ c.def_classvar("@@foo", "var".dump)
190
+ c.def_classvar("baz", "1".dump)
191
+ c.def_attr("Foo", true, "foo")
192
+ c.def_attr("bar")
193
+ c.def_attr("baz", true)
194
+ c.def_attr("Foo2", true, "foo2")
195
+ c.def_attr("foo3", false, "foo3")
196
+ c.def_method("foo") do
197
+ <<-EOD
198
+ foo.bar = 1
199
+ \tbaz.each do |ele|
200
+ \t ele
201
+ end
202
+ EOD
203
+ end
204
+ c.def_method("baz", "qux") do
205
+ <<-EOD
206
+ [1, 2, 3].each do |i|
207
+ p i
208
+ end
209
+ EOD
210
+ end
211
+
212
+ m = MethodDef.new("qux", "quxx", "quxxx") do
213
+ <<-EOD
214
+ p quxx + quxxx
215
+ EOD
216
+ end
217
+ m.comment = "hello world\n123"
218
+ c.add_method(m)
219
+ c.def_code <<-EOD
220
+ Foo.new
221
+ Bar.z
222
+ EOD
223
+ c.def_code <<-EOD
224
+ Foo.new
225
+ Bar.z
226
+ EOD
227
+ c.def_privatemethod("foo", "baz", "*arg", "&block")
228
+
229
+ puts c.dump
230
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: UTF-8
2
+ # XSD4R - Generating comment definition code
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'xsd/codegen/gensupport'
11
+
12
+
13
+ module XSD
14
+ module CodeGen
15
+
16
+
17
+ module CommentDef
18
+ include GenSupport
19
+
20
+ attr_accessor :comment
21
+
22
+ private
23
+
24
+ def dump_comment
25
+ if /\A#/ =~ @comment
26
+ format(@comment)
27
+ else
28
+ format(@comment).gsub(/^/, '# ')
29
+ end
30
+ end
31
+ end
32
+
33
+
34
+ end
35
+ end