saxon-rb 0.5.0-java → 0.7.3-java

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,93 @@
1
+ require_relative '../s9api'
2
+ require_relative './output_properties'
3
+ require 'stringio'
4
+
5
+ module Saxon
6
+ module Serializer
7
+ # A Saxon Serializer to be used directly with XDM Values rather than being
8
+ # called as a Destination for a transformation.
9
+ class Object
10
+ # Create a serializer from the passed in +Processor+. When called with a
11
+ # block, the block will be executed via instance-exec so that output
12
+ # properties can be set, e.g.
13
+ #
14
+ # Serializer::Object.create(processor) {
15
+ # output_property[:indent] = 'yes'
16
+ # }
17
+ #
18
+ # @param processor [Saxon::Processor] the processor to create this
19
+ # +Serializer::Object+ from
20
+ # @yield the passed block bound via instance-exec to the new serializer
21
+ def self.create(processor, &block)
22
+ new(processor.to_java.newSerializer, &block)
23
+ end
24
+
25
+ include OutputProperties
26
+
27
+ attr_reader :s9_serializer
28
+ private :s9_serializer
29
+
30
+ # @api private
31
+ def initialize(s9_serializer, &block)
32
+ @s9_serializer = s9_serializer
33
+ if block_given?
34
+ instance_exec(&block)
35
+ end
36
+ end
37
+
38
+ # @overload serialize(xdm_value, io)
39
+ # Serialize an XdmValue to an IO
40
+ # @param [Saxon::XdmValue] xdm_value The XdmValue to serialize
41
+ # @param [File, IO] io The IO to serialize to
42
+ # @return [nil]
43
+ # @overload serialize(xdm_value, path)
44
+ # Serialize an XdmValue to file <tt>path</tt>
45
+ # @param [Saxon::XdmValue] xdm_value The XdmValue to serialize
46
+ # @param [String, Pathname] path The path of the file to serialize to
47
+ # @return [nil]
48
+ # @overload serialize(xdm_value)
49
+ # Serialize an XdmValue to a String
50
+ # @param [Saxon::XdmValue] xdm_value The XdmValue to serialize
51
+ # @return [String] The serialized XdmValue
52
+ def serialize(xdm_value, io_or_path = nil)
53
+ case io_or_path
54
+ when nil
55
+ serialize_to_string(xdm_value)
56
+ when String, Pathname
57
+ serialize_to_file(xdm_value, io_or_path)
58
+ else
59
+ serialize_to_io(xdm_value, io_or_path)
60
+ end
61
+ end
62
+
63
+ # @return [Saxon::S9API::Serializer] The underlying Saxon Serializer object
64
+ def to_java
65
+ s9_serializer
66
+ end
67
+
68
+ private
69
+
70
+ def serialize_to_io(xdm_value, io)
71
+ s9_serializer.setOutputStream(io.to_outputstream)
72
+ s9_serializer.serializeXdmValue(xdm_value.to_java)
73
+ nil
74
+ end
75
+
76
+ def serialize_to_string(xdm_value)
77
+ str_encoding = output_property.fetch(:encoding, Encoding.default_internal || Encoding.default_external)
78
+ StringIO.open { |io|
79
+ io.binmode
80
+ serialize_to_io(xdm_value, io)
81
+ io.string.force_encoding(str_encoding)
82
+ }
83
+ end
84
+
85
+ def serialize_to_file(xdm_value, path)
86
+ file = Java::JavaIO::File.new(path.to_s)
87
+ s9_serializer.setOutputFile(file)
88
+ s9_serializer.serializeXdmValue(xdm_value.to_java)
89
+ nil
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,83 @@
1
+ module Saxon
2
+ module Serializer
3
+ # Manage access to the serialization properties of this serializer, with
4
+ # hash-like access.
5
+ #
6
+ # Properties can be set explicitly through this API, or via XSLT or XQuery
7
+ # serialization options like +<xsl:output>+.
8
+ #
9
+ # Properties set explicitly here will override properties set through the
10
+ # document by +<xsl:output>+.
11
+ module OutputProperties
12
+ # @return [Saxon::Serializer::OutputProperties] hash-like access to the Output Properties
13
+ def output_property
14
+ @output_property ||= OutputProperties::Accessor.new(s9_serializer)
15
+ end
16
+
17
+ # @api private
18
+ #
19
+ # The private wrapper class that manages getting and setting output
20
+ # properties on a Serializer in an idiomatic Ruby-like way.
21
+ class Accessor
22
+ # @api private
23
+ # Provides mapping between symbols and the underlying Saxon property
24
+ # instances
25
+ def self.output_properties
26
+ @output_properties ||= Hash[
27
+ Saxon::S9API::Serializer::Property.values.map { |property|
28
+ qname = property.getQName
29
+ key = [
30
+ qname.getPrefix,
31
+ qname.getLocalName.tr('-', '_')
32
+ ].reject { |str| str == '' }.join('_').to_sym
33
+ [key, property]
34
+ }
35
+ ]
36
+ end
37
+
38
+ attr_reader :s9_serializer
39
+
40
+ # @api private
41
+ def initialize(s9_serializer)
42
+ @s9_serializer = s9_serializer
43
+ end
44
+
45
+ # @param [Symbol, Saxon::S9API::Serializer::Property] property The property to fetch
46
+ def [](property)
47
+ s9_serializer.getOutputProperty(resolved_property(property))
48
+ end
49
+
50
+ # @param [Symbol, Saxon::S9API::Serializer::Property] property The property to set
51
+ # @param [String] value The string value of the property
52
+ def []=(property, value)
53
+ s9_serializer.setOutputProperty(resolved_property(property), value)
54
+ end
55
+
56
+ # @overload fetch(property)
57
+ # @param [Symbol, Saxon::S9API::Serializer::Property] property The property to fetch
58
+ # @overload fetch(property, default)
59
+ # @param property [Symbol, Saxon::S9API::Serializer::Property] The property to fetch
60
+ # @param default [Object] The value to return if the property is unset
61
+ def fetch(property, default = nil)
62
+ explicit_value = self[property]
63
+ if explicit_value.nil? && !default.nil?
64
+ default
65
+ else
66
+ explicit_value
67
+ end
68
+ end
69
+
70
+ private
71
+
72
+ def resolved_property(property_key)
73
+ case property_key
74
+ when Symbol
75
+ self.class.output_properties.fetch(property_key)
76
+ else
77
+ property_key
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -1,3 +1,9 @@
1
+ require 'saxon/s9api'
2
+
1
3
  module Saxon
2
- VERSION = "0.5.0"
4
+ # Provides the saxon-rb and underlying Saxon library versions
5
+ module Version
6
+ # The version of the saxon-rb gem (not of Saxon itself)
7
+ WRAPPER = "0.7.3"
8
+ end
3
9
  end
@@ -0,0 +1,89 @@
1
+ require 'saxon/s9api'
2
+
3
+ module Saxon
4
+ module Version
5
+ # The version of the underlying Saxon library, which we need to discover at
6
+ # runtime based on what version is on the Classpath
7
+ class Library
8
+ # The loaded version of the Saxon Java library
9
+ #
10
+ # @return [Saxon::Version::Library] the version of the loaded library
11
+ def self.loaded_version
12
+ Saxon::Loader.load!
13
+
14
+ sv = Java::net.sf.saxon.Version
15
+ new(sv.getProductVersion, sv.getStructuredVersionNumber, sv.softwareEdition)
16
+ end
17
+
18
+ include Comparable
19
+
20
+ # @return [String] the version string (e.g. '9.9.1.6', '10.0')
21
+ attr_reader :version
22
+ # @return [String] the version components (e.g. <tt>[9, 9, 1, 6]</tt>, <tt>[10, 0]</tt>)
23
+ attr_reader :components
24
+ # @return [Symbol] the edition (+:he+, +:pe+, or +:ee+)
25
+ attr_reader :edition
26
+
27
+ # @param version [String] the version string
28
+ # @param components [Array<Integer>] the version components separated
29
+ # @param edition [String, Symbol] the name of the Saxon edition (e.g. +:he+, +'HE'+)
30
+ def initialize(version, components, edition)
31
+ @version = version.dup.freeze
32
+ @components = components.dup.freeze
33
+ @edition = edition.downcase.to_sym
34
+ end
35
+
36
+ # Comparison against another instance
37
+ #
38
+ # @param other [Saxon::Version::Library] the other version to compare against
39
+ # @return [Integer] -1 for less, 1 for greater, 0 for equal
40
+ def <=>(other)
41
+ return false unless other.is_a?(self.class)
42
+
43
+ n_components = [self.components.length, other.components.length].max
44
+ (0..(n_components - 1)).reduce(0, &comparator(other))
45
+ end
46
+
47
+ # Pessimistic comparison à la rubygems +~>+: do I satisfy the other
48
+ # version if considered as a pessimistic version constraint
49
+ #
50
+ # @param pessimistic_version [Saxon::Version::Library] the version to
51
+ # compare pessimistically
52
+ # @return [Boolean] do I satisfy the constraint?
53
+ def pessimistic_compare(pessimistic_version)
54
+ pessimistic_components = pessimistic_version.components
55
+ pessimistic_components = pessimistic_components + [0] if pessimistic_components.length == 1
56
+ locked = pessimistic_components[0..-2]
57
+ locked = locked.zip(components[0..locked.length])
58
+ variable = [pessimistic_components[-1], components[locked.length]]
59
+
60
+ locked_ok = locked.all? { |check, mine|
61
+ check == mine
62
+ }
63
+
64
+ return false unless locked_ok
65
+
66
+ check, mine = variable
67
+ mine >= check
68
+ end
69
+
70
+ # @return [String] the version string
71
+ def to_s
72
+ version
73
+ end
74
+
75
+ private
76
+
77
+ def comparator(other)
78
+ ->(cmp, i) {
79
+ return cmp unless cmp == 0
80
+
81
+ mine = self.components[i].nil? ? 0 : self.components[i]
82
+ theirs = other.components[i].nil? ? 0 : other.components[i]
83
+
84
+ mine <=> theirs
85
+ }
86
+ end
87
+ end
88
+ end
89
+ end
@@ -20,6 +20,7 @@ module Saxon
20
20
  # them imlpicitly through the XDM::AtomicValue creation process doesn't really
21
21
  # work. They need to be created explicitly and then handed in to be wrapped.
22
22
  class CannotCreateQNameFromString < StandardError
23
+ # returns an error message
23
24
  def to_s
24
25
  "QName XDM::AtomicValues must be created using an instance of Saxon::QName, not a string like 'prefix:name': Prefix URI binding is undefined at this point"
25
26
  end
@@ -29,17 +30,23 @@ module Saxon
29
30
  # isn't a way to create these outside of parsing an XML document within
30
31
  # Saxon, so attempting to do so raises this error.
31
32
  class NotationCannotBeDirectlyCreated < StandardError
32
- def to_s
33
+ # returns an error message
34
+ def to_s
33
35
  "xs:NOTATION XDM::AtomicValues cannot be directly created outside of XML parsing."
34
36
  end
35
37
  end
36
38
 
37
- # ItemType representing QNames
38
- XS_QNAME = ItemType.get_type('xs:QName')
39
- # ItemType representing NOTATION
40
- XS_NOTATION = ItemType.get_type('xs:NOTATION')
41
-
42
39
  class << self
40
+ # ItemType representing QNames
41
+ def xs_qname
42
+ @xs_qname ||= ItemType.get_type('xs:QName')
43
+ end
44
+
45
+ # ItemType representing NOTATION
46
+ def xs_notation
47
+ @xs_notation ||= ItemType.get_type('xs:NOTATION')
48
+ end
49
+
43
50
  # Convert a single Ruby value into an XDM::AtomicValue
44
51
  #
45
52
  # If no explicit {ItemType} is passed, the correct type is guessed based
@@ -69,8 +76,8 @@ module Saxon
69
76
 
70
77
  item_type = ItemType.get_type(item_type)
71
78
 
72
- return new(Saxon::S9API::XdmAtomicValue.new(value.to_java)) if item_type == XS_QNAME && value_is_qname?(value)
73
- raise NotationCannotBeDirectlyCreated if item_type == XS_NOTATION
79
+ return new(Saxon::S9API::XdmAtomicValue.new(value.to_java)) if item_type == xs_qname && value_is_qname?(value)
80
+ raise NotationCannotBeDirectlyCreated if item_type == xs_notation
74
81
 
75
82
  value_lexical_string = item_type.lexical_string(value)
76
83
  new(new_s9_xdm_atomic_value(value_lexical_string, item_type))
@@ -89,7 +96,7 @@ module Saxon
89
96
  # @return [Saxon::XDM::AtomicValue]
90
97
  def from_lexical_string(value, item_type)
91
98
  item_type = ItemType.get_type(item_type)
92
- raise CannotCreateQNameFromString if item_type == XS_QNAME
99
+ raise CannotCreateQNameFromString if item_type == xs_qname
93
100
  new(new_s9_xdm_atomic_value(value.to_s, item_type))
94
101
  end
95
102
 
@@ -33,9 +33,10 @@ module Saxon
33
33
  @node_name = node_name.nil? ? nil : Saxon::QName.new(node_name)
34
34
  end
35
35
 
36
- # What kind of node this is. Returns one of +:element+, +:text+,
37
- # +:attribute+, +:namespace+, +:comment+, +:processing_instruction+, or
38
- # +:comment+
36
+ # What kind of node this is. Returns one of +:document+, +:element+,
37
+ # +:text+, +:attribute+, +:namespace+, +:comment+,
38
+ # +:processing_instruction+, or +:comment+
39
+ #
39
40
  # @return [Symbol] the kind of node this is
40
41
  def node_kind
41
42
  @node_kind ||= case s9_xdm_node.nodeKind
@@ -84,6 +85,36 @@ module Saxon
84
85
  def axis_iterator(axis)
85
86
  AxisIterator.new(self, axis)
86
87
  end
88
+
89
+ # Use Saxon's naive XDM Node serialisation to serialize the node and its
90
+ # descendants. Saxon uses a new Serializer with default options to
91
+ # serialize the node. In particular, if the Node was produced by an XSLT
92
+ # that used +<xsl:character-map>+ through +<xsl:output>+ to modify the
93
+ # contents, then they *WILL* *NOT* have been applied.
94
+ #
95
+ # +<xsl:output>+ has its effect at serialization time, not at XDM tree
96
+ # creation time, so it won't be applied until you serialize the document.
97
+ #
98
+ # Even then, unless you use a {Serializer} configured with the XSLT's
99
+ # +<xsl:output>+. We make a properly configured serializer available in
100
+ # the result of any XSLT transform (a {Saxon::XSLT::Invocation}), e.g.:
101
+ #
102
+ # result = xslt.apply_templates(input)
103
+ # result.to_s
104
+ # # or
105
+ # result.serialize('/path/to/output.xml')
106
+ #
107
+ # You can also get that {Serializer} directly from {XSLT::Executable},
108
+ # should you want to use the serialization options from a particular XSLT
109
+ # to serialize arbitrary XDM values:
110
+ #
111
+ # serializer = xslt.serializer
112
+ # serializer.serialize(an_xdm_value)
113
+ #
114
+ # @see http://www.saxonica.com/documentation9.9/index.html#!javadoc/net.sf.saxon.s9api/XdmNode@toString
115
+ def to_s
116
+ s9_xdm_node.toString
117
+ end
87
118
  end
88
119
  end
89
120
  end
@@ -40,7 +40,7 @@ module Saxon
40
40
  # static context.
41
41
  #
42
42
  # @param processor [Saxon::Processor] the {Saxon::Processor} to use
43
- # @yield An XPath compiler DSL block
43
+ # @yield An XPath::StaticContext::DSL block
44
44
  # @return [Saxon::XPath::Compiler] the new compiler instance
45
45
  def self.create(processor, &block)
46
46
  static_context = XPath::StaticContext.define(block)
@@ -79,7 +79,7 @@ module Saxon
79
79
  # Compiler's static context. As with {.create}, passing a block gives
80
80
  # access to a DSL for setting up the compiler's static context.
81
81
  #
82
- # @yield An {XPath::StaticContext::DSL} block
82
+ # @yield An XPath::StaticContext::DSL block
83
83
  # @return [Saxon::XPath::Compiler] the new compiler instance
84
84
  def create(&block)
85
85
  new_static_context = static_context.define(block)
@@ -117,7 +117,12 @@ module Saxon
117
117
  DSL.define(block)
118
118
  end
119
119
 
120
- attr_reader :declared_variables, :declared_namespaces, :default_collation
120
+ # @return [String] The default collation URI as a String
121
+ attr_reader :default_collation
122
+ # @return [Hash<Saxon::QName => Saxon::XPath::VariableDeclaration] the declared variables
123
+ attr_reader :declared_variables
124
+ # @return [Hash<String => String>] the declared namespaces, as a prefix => uri hash
125
+ attr_reader :declared_namespaces
121
126
 
122
127
  # @return [Saxon::QName]
123
128
  # @overload resolve_variable_qname(qname)
@@ -143,7 +143,17 @@ module Saxon
143
143
  DSL.define(block)
144
144
  end
145
145
 
146
- attr_reader :default_collation, :static_parameters, :global_parameters, :initial_template_parameters, :initial_template_tunnel_parameters
146
+
147
+ # @return [String] The default collation URI as a String
148
+ attr_reader :default_collation
149
+ # @return [Hash<Saxon::QName => Saxon::XDM::Value>] All the static parameters
150
+ attr_reader :static_parameters
151
+ # @return [Hash<Saxon::QName => Saxon::XDM::Value>] All the global parameters
152
+ attr_reader :global_parameters
153
+ # @return [Hash<Saxon::QName => Saxon::XDM::Value>] All the initial template parameters
154
+ attr_reader :initial_template_parameters
155
+ # @return [Hash<Saxon::QName => Saxon::XDM::Value>] All the initial template parameters with tunnelling = "yes"
156
+ attr_reader :initial_template_tunnel_parameters
147
157
 
148
158
  # @api private
149
159
  # When passed a Proc, create a new EvaluationContext based on this one, with the same DSL available as in {.define}.
@@ -1,8 +1,10 @@
1
1
  require 'forwardable'
2
2
  require_relative 'evaluation_context'
3
+ require_relative 'invocation'
3
4
  require_relative '../serializer'
4
5
  require_relative '../xdm'
5
6
  require_relative '../qname'
7
+ require_relative '../feature_flags'
6
8
 
7
9
  module Saxon
8
10
  module XSLT
@@ -52,6 +54,7 @@ module Saxon
52
54
  # prefix, you must use an explicit {Saxon::QName} to refer to it.
53
55
  class Executable
54
56
  extend Forwardable
57
+ extend Saxon::FeatureFlags::Helpers
55
58
 
56
59
  attr_reader :evaluation_context
57
60
  private :evaluation_context
@@ -96,7 +99,7 @@ module Saxon
96
99
  # to pass to the first template matched. Setting already-defined
97
100
  # parameters will replace their value for this invocation of the XSLT
98
101
  # only, it won't affect the {XSLT::Compiler}'s context.
99
- # @return [Saxon::XSLT::Result] the transformation result
102
+ # @return [Saxon::XSLT::Invocation] the transformation result
100
103
  def apply_templates(source, opts = {})
101
104
  transformation(opts).apply_templates(source)
102
105
  end
@@ -130,7 +133,7 @@ module Saxon
130
133
  # to pass to the first template matched. Setting already-defined
131
134
  # parameters will replace their value for this invocation of the XSLT
132
135
  # only, it won't affect the {XSLT::Compiler}'s context.
133
- # @return [Saxon::XSLT::Result] the transformation result
136
+ # @return [Saxon::XSLT::Invocation] the transformation result
134
137
  def call_template(template_name = nil, opts = {})
135
138
  transformation(opts).call_template(template_name)
136
139
  end
@@ -155,14 +158,23 @@ module Saxon
155
158
  # Additional global parameters to set. Setting already-defined
156
159
  # parameters will replace their value for this invocation of the XSLT
157
160
  # only, it won't affect the {XSLT::Compiler}'s context.
158
- # @return [Saxon::XSLT::Result] the transformation result
161
+ # @return [Saxon::XSLT::Invocation] the transformation result
159
162
  def call_function(function_name, opts = {})
160
163
  args = opts.fetch(:args, [])
161
164
  transformation(opts.reject { |k, v| k == :args }).call_function(function_name, args)
162
165
  end
163
166
 
167
+ # Create a {Serializer::Object} configured using the options that were set
168
+ # by +<xsl:output>+.
169
+ #
170
+ # @return [Saxon::Serializer::Object] the Serializer
171
+ def serializer
172
+ Saxon::Serializer::Object.new(@s9_xslt_executable.load30.newSerializer)
173
+ end
174
+ requires_saxon_version :serializer, '>= 9.9'
175
+
164
176
  # @return [net.sf.saxon.s9api.XsltExecutable] the underlying Saxon
165
- # <tt>XsltExecutable</tt>
177
+ # +XsltExecutable+
166
178
  def to_java
167
179
  @s9_xslt_executable
168
180
  end
@@ -202,6 +214,7 @@ module Saxon
202
214
  # Represents a loaded XSLT transformation ready to be applied against a
203
215
  # context node.
204
216
  class Transformation
217
+ # A list of valid option names for the transform
205
218
  VALID_OPTS = [:raw, :mode, :global_context_item, :global_parameters, :initial_template_parameters, :initial_template_tunnel_parameters]
206
219
 
207
220
  attr_reader :s9_transformer, :opts
@@ -213,6 +226,7 @@ module Saxon
213
226
  @default_initial_template ||= Saxon::QName.clark('{http://www.w3.org/1999/XSL/Transform}initial-template')
214
227
  end
215
228
 
229
+ # @api private
216
230
  def initialize(args)
217
231
  @s9_transformer = args.fetch(:s9_transformer)
218
232
  @destination = args.fetch(:destination, nil)
@@ -225,57 +239,48 @@ module Saxon
225
239
  # Apply templates to Source, using all the context set up when we were
226
240
  # created.
227
241
  def apply_templates(source)
228
- transformation_result(:applyTemplates, source)
242
+ transformation_invocation(:applyTemplates, source.to_java)
229
243
  end
230
244
 
231
245
  # Call the named template, using all the context set up when we were
232
246
  # created.
233
247
  def call_template(template_name)
234
- transformation_result(:callTemplate, resolve_template_name(template_name))
248
+ transformation_invocation(:callTemplate, resolve_template_name(template_name))
235
249
  end
236
250
 
237
251
  # Call the named function, using all the context set up when we were
238
252
  # created.
239
253
  def call_function(function_name, args)
240
254
  function_name = Saxon::QName.resolve(function_name).to_java
241
- args = function_args(args)
242
- call_function_result(function_name, args)
255
+ transformation_invocation(:callFunction, function_name, function_args(args))
243
256
  end
244
257
 
245
258
  private
246
259
 
247
- def transformation_result(invocation_method, invocation_arg)
260
+ def transformation_invocation(invocation_method, *invocation_args)
248
261
  set_opts!
249
- transformer_args = [invocation_method, invocation_arg.to_java, destination].compact
250
- Result.new(result_xdm_value(s9_transformer.send(*transformer_args)), s9_transformer)
262
+ XSLT::Invocation.new(s9_transformer, invocation_lambda(invocation_method, invocation_args), raw?)
251
263
  end
252
264
 
253
- def call_function_result(name, args)
254
- set_opts!
255
- Result.new(result_xdm_value(s9_transformer.callFunction(*[name, args, destination].compact)), s9_transformer)
256
- end
257
-
258
- def result_xdm_value(transformer_return_value)
259
- XDM.Value(
260
- transformer_return_value.nil? ? destination.getXdmNode : transformer_return_value
261
- )
265
+ def invocation_lambda(invocation_method, invocation_args)
266
+ ->(destination) {
267
+ if destination.nil?
268
+ s9_transformer.send(invocation_method, *invocation_args)
269
+ else
270
+ s9_transformer.send(invocation_method, *invocation_args, destination.to_java)
271
+ end
272
+ }
262
273
  end
263
274
 
264
275
  def resolve_template_name(template_name)
265
- return self.class.default_initial_template if template_name.nil?
266
- Saxon::QName.resolve(template_name)
276
+ return self.class.default_initial_template.to_java if template_name.nil?
277
+ Saxon::QName.resolve(template_name).to_java
267
278
  end
268
279
 
269
280
  def function_args(args = [])
270
281
  args.map { |val| Saxon::XDM.Value(val).to_java }.to_java(S9API::XdmValue)
271
282
  end
272
283
 
273
- def destination
274
- @destination ||= begin
275
- Saxon::S9API::XdmDestination.new unless raw?
276
- end
277
- end
278
-
279
284
  def set_opts!
280
285
  opts.each do |opt, value|
281
286
  raise BadOptionError, opt unless VALID_OPTS.include?(opt)
@@ -304,29 +309,11 @@ module Saxon
304
309
  end
305
310
 
306
311
  def initial_template_parameters(parameters)
307
- s9_transformer.setInitialTemplateParameters(XSLT::ParameterHelper.to_java(parameters) , false)
312
+ s9_transformer.setInitialTemplateParameters(XSLT::ParameterHelper.to_java(parameters), false)
308
313
  end
309
314
 
310
315
  def initial_template_tunnel_parameters(parameters)
311
- s9_transformer.setInitialTemplateParameters(XSLT::ParameterHelper.to_java(parameters) , true)
312
- end
313
- end
314
-
315
- # Represents the result of a transformation, providing a simple default
316
- # serializer as well
317
- class Result
318
- attr_reader :xdm_value
319
-
320
- # @api private
321
- def initialize(xdm_value, s9_transformer)
322
- @xdm_value, @s9_transformer = xdm_value, s9_transformer
323
- end
324
-
325
- # Serialize the result to a string using the options specified in
326
- # +<xsl:output/>+ in the XSLT
327
- def to_s
328
- serializer = Serializer.new(@s9_transformer.newSerializer)
329
- serializer.serialize(xdm_value.to_java)
316
+ s9_transformer.setInitialTemplateParameters(XSLT::ParameterHelper.to_java(parameters), true)
330
317
  end
331
318
  end
332
319