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.
- checksums.yaml +7 -0
- data/bin/wsdl2ruby.rb +140 -0
- data/bin/wsdl2ruby_rails.rb +140 -0
- data/bin/xsd2ruby.rb +92 -0
- data/lib/soap/attachment.rb +109 -0
- data/lib/soap/attrproxy.rb +35 -0
- data/lib/soap/baseData.rb +1095 -0
- data/lib/soap/element.rb +278 -0
- data/lib/soap/encodingstyle/aspDotNetHandler.rb +208 -0
- data/lib/soap/encodingstyle/handler.rb +121 -0
- data/lib/soap/encodingstyle/literalHandler.rb +196 -0
- data/lib/soap/encodingstyle/soapHandler.rb +560 -0
- data/lib/soap/filter/filterchain.rb +52 -0
- data/lib/soap/filter/handler.rb +32 -0
- data/lib/soap/filter/streamhandler.rb +30 -0
- data/lib/soap/filter.rb +14 -0
- data/lib/soap/generator.rb +299 -0
- data/lib/soap/header/handler.rb +64 -0
- data/lib/soap/header/handlerset.rb +78 -0
- data/lib/soap/header/mappinghandler.rb +48 -0
- data/lib/soap/header/simplehandler.rb +45 -0
- data/lib/soap/httpconfigloader.rb +140 -0
- data/lib/soap/mapping/encodedregistry.rb +541 -0
- data/lib/soap/mapping/factory.rb +389 -0
- data/lib/soap/mapping/literalregistry.rb +392 -0
- data/lib/soap/mapping/mapping.rb +577 -0
- data/lib/soap/mapping/registry.rb +297 -0
- data/lib/soap/mapping/rubytypeFactory.rb +446 -0
- data/lib/soap/mapping/schemadefinition.rb +171 -0
- data/lib/soap/mapping/typeMap.rb +107 -0
- data/lib/soap/mapping/wsdlencodedregistry.rb +212 -0
- data/lib/soap/mapping/wsdlliteralregistry.rb +249 -0
- data/lib/soap/mapping.rb +13 -0
- data/lib/soap/marshal.rb +60 -0
- data/lib/soap/mimemessage.rb +243 -0
- data/lib/soap/nestedexception.rb +43 -0
- data/lib/soap/netHttpClient.rb +242 -0
- data/lib/soap/ns.rb +39 -0
- data/lib/soap/parser.rb +253 -0
- data/lib/soap/processor.rb +67 -0
- data/lib/soap/property.rb +330 -0
- data/lib/soap/proxy.rb +15 -0
- data/lib/soap/rpc/cgistub.rb +249 -0
- data/lib/soap/rpc/driver.rb +222 -0
- data/lib/soap/rpc/element.rb +375 -0
- data/lib/soap/rpc/httpserver.rb +144 -0
- data/lib/soap/rpc/methodDef.rb +69 -0
- data/lib/soap/rpc/proxy.rb +573 -0
- data/lib/soap/rpc/router.rb +672 -0
- data/lib/soap/rpc/rpc.rb +26 -0
- data/lib/soap/rpc/soaplet.rb +201 -0
- data/lib/soap/rpc/standaloneServer.rb +44 -0
- data/lib/soap/soap.rb +163 -0
- data/lib/soap/streamHandler.rb +302 -0
- data/lib/soap/version.rb +12 -0
- data/lib/soap/wsdlDriver.rb +165 -0
- data/lib/wsdl/binding.rb +66 -0
- data/lib/wsdl/data.rb +65 -0
- data/lib/wsdl/definitions.rb +237 -0
- data/lib/wsdl/documentation.rb +33 -0
- data/lib/wsdl/import.rb +81 -0
- data/lib/wsdl/importer.rb +39 -0
- data/lib/wsdl/info.rb +51 -0
- data/lib/wsdl/message.rb +55 -0
- data/lib/wsdl/operation.rb +152 -0
- data/lib/wsdl/operationBinding.rb +241 -0
- data/lib/wsdl/param.rb +94 -0
- data/lib/wsdl/parser.rb +180 -0
- data/lib/wsdl/part.rb +53 -0
- data/lib/wsdl/port.rb +67 -0
- data/lib/wsdl/portType.rb +76 -0
- data/lib/wsdl/service.rb +62 -0
- data/lib/wsdl/soap/address.rb +41 -0
- data/lib/wsdl/soap/binding.rb +50 -0
- data/lib/wsdl/soap/body.rb +59 -0
- data/lib/wsdl/soap/cgiStubCreator.rb +93 -0
- data/lib/wsdl/soap/classDefCreator.rb +529 -0
- data/lib/wsdl/soap/classDefCreatorSupport.rb +242 -0
- data/lib/wsdl/soap/classNameCreator.rb +57 -0
- data/lib/wsdl/soap/clientSkeltonCreator.rb +107 -0
- data/lib/wsdl/soap/complexType.rb +174 -0
- data/lib/wsdl/soap/data.rb +43 -0
- data/lib/wsdl/soap/definitions.rb +201 -0
- data/lib/wsdl/soap/driverCreator.rb +121 -0
- data/lib/wsdl/soap/element.rb +34 -0
- data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +74 -0
- data/lib/wsdl/soap/fault.rb +57 -0
- data/lib/wsdl/soap/header.rb +87 -0
- data/lib/wsdl/soap/headerfault.rb +57 -0
- data/lib/wsdl/soap/literalMappingRegistryCreator.rb +116 -0
- data/lib/wsdl/soap/mappingRegistryCreator.rb +59 -0
- data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +380 -0
- data/lib/wsdl/soap/methodDefCreator.rb +200 -0
- data/lib/wsdl/soap/operation.rb +113 -0
- data/lib/wsdl/soap/servantSkeltonCreator.rb +92 -0
- data/lib/wsdl/soap/servletStubCreator.rb +105 -0
- data/lib/wsdl/soap/standaloneServerStubCreator.rb +101 -0
- data/lib/wsdl/soap/wsdl2ruby.rb +249 -0
- data/lib/wsdl/types.rb +45 -0
- data/lib/wsdl/wsdl.rb +25 -0
- data/lib/wsdl/xmlSchema/all.rb +25 -0
- data/lib/wsdl/xmlSchema/annotation.rb +35 -0
- data/lib/wsdl/xmlSchema/any.rb +62 -0
- data/lib/wsdl/xmlSchema/anyAttribute.rb +49 -0
- data/lib/wsdl/xmlSchema/attribute.rb +105 -0
- data/lib/wsdl/xmlSchema/attributeGroup.rb +69 -0
- data/lib/wsdl/xmlSchema/choice.rb +59 -0
- data/lib/wsdl/xmlSchema/complexContent.rb +98 -0
- data/lib/wsdl/xmlSchema/complexExtension.rb +120 -0
- data/lib/wsdl/xmlSchema/complexRestriction.rb +105 -0
- data/lib/wsdl/xmlSchema/complexType.rb +194 -0
- data/lib/wsdl/xmlSchema/content.rb +96 -0
- data/lib/wsdl/xmlSchema/data.rb +117 -0
- data/lib/wsdl/xmlSchema/element.rb +154 -0
- data/lib/wsdl/xmlSchema/enumeration.rb +37 -0
- data/lib/wsdl/xmlSchema/fractiondigits.rb +38 -0
- data/lib/wsdl/xmlSchema/group.rb +101 -0
- data/lib/wsdl/xmlSchema/import.rb +53 -0
- data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
- data/lib/wsdl/xmlSchema/importer.rb +103 -0
- data/lib/wsdl/xmlSchema/include.rb +48 -0
- data/lib/wsdl/xmlSchema/length.rb +38 -0
- data/lib/wsdl/xmlSchema/list.rb +49 -0
- data/lib/wsdl/xmlSchema/maxexclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/maxinclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/maxlength.rb +38 -0
- data/lib/wsdl/xmlSchema/minexclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/mininclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/minlength.rb +38 -0
- data/lib/wsdl/xmlSchema/parser.rb +168 -0
- data/lib/wsdl/xmlSchema/pattern.rb +37 -0
- data/lib/wsdl/xmlSchema/ref.rb +34 -0
- data/lib/wsdl/xmlSchema/schema.rb +179 -0
- data/lib/wsdl/xmlSchema/sequence.rb +55 -0
- data/lib/wsdl/xmlSchema/simpleContent.rb +70 -0
- data/lib/wsdl/xmlSchema/simpleExtension.rb +63 -0
- data/lib/wsdl/xmlSchema/simpleRestriction.rb +133 -0
- data/lib/wsdl/xmlSchema/simpleType.rb +88 -0
- data/lib/wsdl/xmlSchema/totaldigits.rb +38 -0
- data/lib/wsdl/xmlSchema/union.rb +36 -0
- data/lib/wsdl/xmlSchema/unique.rb +35 -0
- data/lib/wsdl/xmlSchema/whitespace.rb +38 -0
- data/lib/wsdl/xmlSchema/xsd2ruby.rb +177 -0
- data/lib/xsd/charset.rb +190 -0
- data/lib/xsd/codegen/classdef.rb +230 -0
- data/lib/xsd/codegen/commentdef.rb +35 -0
- data/lib/xsd/codegen/gensupport.rb +277 -0
- data/lib/xsd/codegen/methoddef.rb +71 -0
- data/lib/xsd/codegen/moduledef.rb +209 -0
- data/lib/xsd/codegen.rb +13 -0
- data/lib/xsd/datatypes.rb +1465 -0
- data/lib/xsd/datatypes1999.rb +21 -0
- data/lib/xsd/iconvcharset.rb +33 -0
- data/lib/xsd/mapping.rb +69 -0
- data/lib/xsd/namedelements.rb +133 -0
- data/lib/xsd/ns.rb +183 -0
- data/lib/xsd/qname.rb +80 -0
- data/lib/xsd/xmlparser/libxmlparser.rb +136 -0
- data/lib/xsd/xmlparser/nokogiriparser.rb +63 -0
- data/lib/xsd/xmlparser/ogaparser.rb +53 -0
- data/lib/xsd/xmlparser/oxparser.rb +97 -0
- data/lib/xsd/xmlparser/parser.rb +101 -0
- data/lib/xsd/xmlparser/rexmlparser.rb +54 -0
- data/lib/xsd/xmlparser.rb +81 -0
- 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
|
data/lib/xsd/charset.rb
ADDED
|
@@ -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
|