saxon 0.2.2-java → 0.4.0-java
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 +4 -4
- data/saxon.gemspec +10 -18
- metadata +17 -166
- data/.gitignore +0 -13
- data/.rspec +0 -3
- data/.ruby-version +0 -1
- data/.travis.yml +0 -20
- data/CODE_OF_CONDUCT.md +0 -74
- data/Gemfile +0 -6
- data/README.md +0 -43
- data/Rakefile +0 -12
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/lib/net/sf/saxon/Saxon-HE/9.9.1-2/Saxon-HE-9.9.1-2.jar +0 -0
- data/lib/saxon.rb +0 -6
- data/lib/saxon/axis_iterator.rb +0 -32
- data/lib/saxon/configuration.rb +0 -116
- data/lib/saxon/document_builder.rb +0 -28
- data/lib/saxon/item_type.rb +0 -200
- data/lib/saxon/jaxp.rb +0 -8
- data/lib/saxon/loader.rb +0 -103
- data/lib/saxon/occurrence_indicator.rb +0 -33
- data/lib/saxon/parse_options.rb +0 -127
- data/lib/saxon/processor.rb +0 -102
- data/lib/saxon/qname.rb +0 -145
- data/lib/saxon/s9api.rb +0 -16
- data/lib/saxon/serializer.rb +0 -143
- data/lib/saxon/source.rb +0 -187
- data/lib/saxon/version.rb +0 -3
- data/lib/saxon/xdm_atomic_value.rb +0 -48
- data/lib/saxon/xdm_node.rb +0 -65
- data/lib/saxon/xdm_value.rb +0 -129
- data/lib/saxon/xpath.rb +0 -8
- data/lib/saxon/xpath/compiler.rb +0 -69
- data/lib/saxon/xpath/executable.rb +0 -59
- data/lib/saxon/xpath/static_context.rb +0 -161
- data/lib/saxon/xpath/variable_declaration.rb +0 -68
- data/lib/saxon/xslt.rb +0 -8
- data/lib/saxon/xslt/compiler.rb +0 -70
- data/lib/saxon/xslt/evaluation_context.rb +0 -174
- data/lib/saxon/xslt/executable.rb +0 -156
- data/lib/saxon_jars.rb +0 -10
@@ -1,33 +0,0 @@
|
|
1
|
-
require_relative 's9api'
|
2
|
-
|
3
|
-
module Saxon
|
4
|
-
# Provides simple access to Saxon's OccurrenceIndicator constants,
|
5
|
-
# for use in declaring variable types
|
6
|
-
module OccurrenceIndicator
|
7
|
-
class << self
|
8
|
-
def one
|
9
|
-
@one ||= Saxon::S9API::OccurrenceIndicator::ONE
|
10
|
-
end
|
11
|
-
|
12
|
-
def one_or_more
|
13
|
-
@one_or_more ||= Saxon::S9API::OccurrenceIndicator::ONE_OR_MORE
|
14
|
-
end
|
15
|
-
|
16
|
-
def zero
|
17
|
-
@zero ||= Saxon::S9API::OccurrenceIndicator::ZERO
|
18
|
-
end
|
19
|
-
|
20
|
-
def zero_or_more
|
21
|
-
@zero_or_more ||= Saxon::S9API::OccurrenceIndicator::ZERO_OR_MORE
|
22
|
-
end
|
23
|
-
|
24
|
-
def zero_or_one
|
25
|
-
@zero_or_one ||= Saxon::S9API::OccurrenceIndicator::ZERO_OR_ONE
|
26
|
-
end
|
27
|
-
|
28
|
-
def indicator_names
|
29
|
-
@indicator_names ||= (public_methods(false) - Object.public_methods - [:indicator_names])
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
data/lib/saxon/parse_options.rb
DELETED
@@ -1,127 +0,0 @@
|
|
1
|
-
require 'saxon/s9api'
|
2
|
-
|
3
|
-
module Saxon
|
4
|
-
# Wraps the <tt>net.sf.saxon.lib.ParseOptions</tt> class, which holds default
|
5
|
-
# options to be passed to the parser
|
6
|
-
class ParseOptions
|
7
|
-
attr_reader :parse_options
|
8
|
-
private :parse_options
|
9
|
-
|
10
|
-
# @api private
|
11
|
-
# @param parse_options [net.sf.saxon.lib.ParseOptions, nil] The Saxon
|
12
|
-
# ParseOptions instance to wrap
|
13
|
-
def initialize(parse_options = nil)
|
14
|
-
@parse_options = parse_options || Saxon::S9API::ParseOptions.new
|
15
|
-
end
|
16
|
-
|
17
|
-
# Provide hash-like access to SAX parser properties
|
18
|
-
# @return [Saxon::ParseOptions::ParserProperties] the properties object
|
19
|
-
def properties
|
20
|
-
@properties ||= ParserProperties.new(parse_options)
|
21
|
-
end
|
22
|
-
|
23
|
-
# Provide hash-like access to SAX parser features
|
24
|
-
# @return [Saxon::ParseOptions::ParserFeatures] the features object
|
25
|
-
def features
|
26
|
-
@features ||= ParserFeatures.new(parse_options)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
# Provides idiomatic access to parser properties
|
31
|
-
class ParserProperties
|
32
|
-
include Enumerable
|
33
|
-
|
34
|
-
attr_reader :parse_options
|
35
|
-
private :parse_options
|
36
|
-
|
37
|
-
# @api private
|
38
|
-
# @param [Saxon::ParseOptions] parse_options The ParseOptions object this
|
39
|
-
# belongs to
|
40
|
-
def initialize(parse_options)
|
41
|
-
@parse_options ||= parse_options
|
42
|
-
end
|
43
|
-
|
44
|
-
# @return [Hash] the currently-set properties as a (frozen) hash
|
45
|
-
def to_h
|
46
|
-
(parse_options.getParserProperties || {}).freeze
|
47
|
-
end
|
48
|
-
|
49
|
-
# Fetch the current value of a Parser Property
|
50
|
-
#
|
51
|
-
# @param [String, URI] uri The Parser Property URI to fetch
|
52
|
-
# @return [Object] The current value of the property
|
53
|
-
def [](uri)
|
54
|
-
return nil if parse_options.getParserProperties.nil?
|
55
|
-
parse_options.getParserProperty(uri)
|
56
|
-
end
|
57
|
-
|
58
|
-
# Set the value of a Parser Property
|
59
|
-
#
|
60
|
-
# @param [String, URI] uri The Parser Property URI to set
|
61
|
-
# @param [Object] value The value to set the property to
|
62
|
-
# @return [Object] The new value of the property
|
63
|
-
def []=(uri, value)
|
64
|
-
parse_options.addParserProperties(uri, value)
|
65
|
-
self[uri]
|
66
|
-
end
|
67
|
-
|
68
|
-
# Iterate across each currently-set property, in the same way as a hash
|
69
|
-
#
|
70
|
-
# @yield [uri, value]
|
71
|
-
# @yieldparam uri [String] The URI of the property as a String
|
72
|
-
# @yieldparam value [Object] The value of the property
|
73
|
-
def each(&block)
|
74
|
-
to_h.each(&block)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
# Provides idiomatic access to parser properties
|
79
|
-
class ParserFeatures
|
80
|
-
include Enumerable
|
81
|
-
|
82
|
-
attr_reader :parse_options
|
83
|
-
private :parse_options
|
84
|
-
|
85
|
-
# @api private
|
86
|
-
# @param [Saxon::ParseOptions] parse_options The ParseOptions object this
|
87
|
-
# belongs to
|
88
|
-
def initialize(parse_options)
|
89
|
-
@parse_options ||= parse_options
|
90
|
-
end
|
91
|
-
|
92
|
-
# @return [Hash] the currently-set features as a (frozen) hash
|
93
|
-
def to_h
|
94
|
-
(parse_options.getParserFeatures || {}).freeze
|
95
|
-
end
|
96
|
-
|
97
|
-
# Fetch the current value of a Parser Feature
|
98
|
-
#
|
99
|
-
# @param [String, URI] uri The Parser Feature URI to fetch
|
100
|
-
# @return [Boolean, nil] The current value of the feature, or nil if it's
|
101
|
-
# unset
|
102
|
-
def [](uri)
|
103
|
-
pf = parse_options.getParserFeatures
|
104
|
-
return nil if pf.nil? || !pf.include?(uri)
|
105
|
-
parse_options.getParserFeature(uri)
|
106
|
-
end
|
107
|
-
|
108
|
-
# Set the value of a Parser Feature
|
109
|
-
#
|
110
|
-
# @param [String, URI] uri The Parser Property URI to set
|
111
|
-
# @param [Boolean] value The value to set the property to
|
112
|
-
# @return [Boolean] The new value of the property
|
113
|
-
def []=(uri, value)
|
114
|
-
parse_options.addParserFeature(uri, value)
|
115
|
-
self[uri]
|
116
|
-
end
|
117
|
-
|
118
|
-
# Iterate across each currently-set feature, in the same way as a hash
|
119
|
-
#
|
120
|
-
# @yield [uri, value]
|
121
|
-
# @yieldparam uri [String] The URI of the feature as a String
|
122
|
-
# @yieldparam value [Boolean] Whether the feature is on or off
|
123
|
-
def each(&block)
|
124
|
-
to_h.each(&block)
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
data/lib/saxon/processor.rb
DELETED
@@ -1,102 +0,0 @@
|
|
1
|
-
require 'saxon/s9api'
|
2
|
-
require 'saxon/source'
|
3
|
-
require 'saxon/configuration'
|
4
|
-
require 'saxon/document_builder'
|
5
|
-
require 'saxon/xpath'
|
6
|
-
require 'saxon/xslt'
|
7
|
-
|
8
|
-
module Saxon
|
9
|
-
# Saxon::Processor wraps the S9API::Processor object. This is the object
|
10
|
-
# responsible for creating an XSLT compiler or an XML Document object.
|
11
|
-
#
|
12
|
-
# The Processor is threadsafe, and can be shared between threads. But, most
|
13
|
-
# importantly XSLT or XML objects created by a Processor can only be used
|
14
|
-
# with other XSLT or XML objects created by the same Processor instance.
|
15
|
-
class Processor
|
16
|
-
# Provides a processor with default configuration. Essentially a singleton
|
17
|
-
# instance
|
18
|
-
# @return [Saxon::Processor]
|
19
|
-
def self.default
|
20
|
-
@processor ||= create(Saxon::Configuration.default)
|
21
|
-
end
|
22
|
-
|
23
|
-
# @param config [File, String, IO, Saxon::Configuration] an open File, or string,
|
24
|
-
# containing a Saxon configuration file; an existing Saxon::Configuration
|
25
|
-
# object
|
26
|
-
# @return [Saxon::Processor]
|
27
|
-
def self.create(config = nil)
|
28
|
-
Saxon::Loader.load!
|
29
|
-
case config
|
30
|
-
when nil
|
31
|
-
licensed_or_config_source = false
|
32
|
-
when Saxon::Configuration
|
33
|
-
licensed_or_config_source = config.to_java
|
34
|
-
else
|
35
|
-
licensed_or_config_source = Saxon::Source.create(config).to_java
|
36
|
-
end
|
37
|
-
s9_processor = S9API::Processor.new(licensed_or_config_source)
|
38
|
-
new(s9_processor)
|
39
|
-
end
|
40
|
-
|
41
|
-
# @api private
|
42
|
-
# @param [net.sf.saxon.s9api.Processor] s9_processor The Saxon Processor
|
43
|
-
# instance to wrap
|
44
|
-
def initialize(s9_processor)
|
45
|
-
@s9_processor = s9_processor
|
46
|
-
end
|
47
|
-
|
48
|
-
# Generate a new DocumentBuilder that uses this Processor.
|
49
|
-
# Sharing DocumentBuilders across threads is not recommended/
|
50
|
-
#
|
51
|
-
# @return [Saxon::DocumentBuilder] A new Saxon::DocumentBuilder
|
52
|
-
def document_builder
|
53
|
-
Saxon::DocumentBuilder.new(@s9_processor.newDocumentBuilder)
|
54
|
-
end
|
55
|
-
|
56
|
-
# Declare custom collations for use by XSLT, XPath, and XQuery processors
|
57
|
-
#
|
58
|
-
# @param collations [Hash<String => java.text.Collator>] collations to
|
59
|
-
# declare, as a hash of URI => Collator
|
60
|
-
def declare_collations(collations)
|
61
|
-
collations.each do |uri, collation|
|
62
|
-
@s9_processor.declareCollation(uri, collation)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
# Generate a new <tt>XPath::Compiler</tt> that uses this
|
66
|
-
# <tt>Processor</tt>. Sharing <tt>XPath::Compiler</tt>s across threads is
|
67
|
-
# fine as long as the static context is not changed.
|
68
|
-
#
|
69
|
-
# @yield An XPath compiler DSL block, see {Saxon::XPath::Compiler.create}
|
70
|
-
# @return [Saxon::XPath::Compiler] a new XPath compiler
|
71
|
-
def xpath_compiler(&block)
|
72
|
-
Saxon::XPath::Compiler.create(self, &block)
|
73
|
-
end
|
74
|
-
|
75
|
-
# Generate a new <tt>XSLT::Compiler</tt> that uses this
|
76
|
-
# <tt>Processor</tt>. Sharing <tt>XSLT::Compiler</tt>s across threads is
|
77
|
-
# fine as long as the static context is not changed.
|
78
|
-
#
|
79
|
-
# @yield An XPath compiler DSL block, see {Saxon::XSLT::Compiler.create}
|
80
|
-
# @return [Saxon::XSLT::Compiler] a new XSLT compiler
|
81
|
-
def xslt_compiler(&block)
|
82
|
-
Saxon::XSLT::Compiler.create(self, &block)
|
83
|
-
end
|
84
|
-
|
85
|
-
# @return [net.sf.saxon.s9api.Processor] The underlying Saxon processor
|
86
|
-
def to_java
|
87
|
-
@s9_processor
|
88
|
-
end
|
89
|
-
|
90
|
-
# compare equal if the underlying java processor is the same instance for
|
91
|
-
# self and other
|
92
|
-
# @param other object to compare against
|
93
|
-
def ==(other)
|
94
|
-
other.to_java === to_java
|
95
|
-
end
|
96
|
-
|
97
|
-
# @return [Saxon::Configuration] This processor's configuration instance
|
98
|
-
def config
|
99
|
-
@config ||= Saxon::Configuration.create(self)
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
data/lib/saxon/qname.rb
DELETED
@@ -1,145 +0,0 @@
|
|
1
|
-
require 'saxon/s9api'
|
2
|
-
|
3
|
-
module Saxon
|
4
|
-
# Represents QNames
|
5
|
-
class QName
|
6
|
-
def self.clark(clark_string)
|
7
|
-
s9_qname = Saxon::S9API::QName.fromClarkName(clark_string)
|
8
|
-
new(s9_qname)
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.eqname(eqname_string)
|
12
|
-
s9_qname = Saxon::S9API::QName.fromEQName(eqname_string)
|
13
|
-
new(s9_qname)
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.create(opts = {})
|
17
|
-
prefix = opts[:prefix]
|
18
|
-
uri = opts[:uri]
|
19
|
-
begin
|
20
|
-
local_name = opts.fetch(:local_name)
|
21
|
-
rescue KeyError
|
22
|
-
raise ArgumentError, "The :local_name option must be passed"
|
23
|
-
end
|
24
|
-
|
25
|
-
s9_qname = Saxon::S9API::QName.new(*[prefix, uri, local_name].compact)
|
26
|
-
new(s9_qname)
|
27
|
-
end
|
28
|
-
|
29
|
-
# Resolve a QName string into a {Saxon::QName}.
|
30
|
-
#
|
31
|
-
# If the arg is a {Saxon::QName} already, it just gets returned. If
|
32
|
-
# it's an instance of the underlying Saxon Java QName, it'll be wrapped
|
33
|
-
# into a {Saxon::QName}
|
34
|
-
#
|
35
|
-
# If the arg is a string, it's resolved by using {resolve_variable_name}
|
36
|
-
#
|
37
|
-
# @param qname_or_string [String, Symbol, Saxon::QName] the qname to resolve
|
38
|
-
# @param namespaces [Hash<String => String>] the set of namespaces as a hash of <tt>"prefix" => "namespace-uri"</tt>
|
39
|
-
# @return [Saxon::QName]
|
40
|
-
def self.resolve(qname_or_string, namespaces = {})
|
41
|
-
case qname_or_string
|
42
|
-
when String, Symbol
|
43
|
-
resolve_qname_string(qname_or_string, namespaces)
|
44
|
-
when self
|
45
|
-
qname_or_string
|
46
|
-
when Saxon::S9API::QName
|
47
|
-
new(qname_or_string)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
# Resolve a QName string of the form <tt>"prefix:local-name"</tt> into a
|
52
|
-
# {Saxon::QName} by looking up the namespace URI in a hash of
|
53
|
-
# <tt>"prefix" => "namespace-uri"</tt>
|
54
|
-
#
|
55
|
-
# @param qname_string [String, Symbol] the QName as a <tt>"prefix:local-name"</tt> string
|
56
|
-
# @param namespaces [Hash<String => String>] the set of namespaces as a hash of <tt>"prefix" => "namespace-uri"</tt>
|
57
|
-
# @return [Saxon::QName]
|
58
|
-
def self.resolve_qname_string(qname_string, namespaces = {})
|
59
|
-
local_name, prefix = qname_string.to_s.split(':').reverse
|
60
|
-
uri = nil
|
61
|
-
|
62
|
-
if prefix
|
63
|
-
uri = namespaces[prefix]
|
64
|
-
raise self::PrefixedStringWithoutNSURIError.new(qname_string, prefix) if uri.nil?
|
65
|
-
end
|
66
|
-
|
67
|
-
create(prefix: prefix, uri: uri, local_name: local_name)
|
68
|
-
end
|
69
|
-
|
70
|
-
attr_reader :s9_qname
|
71
|
-
private :s9_qname
|
72
|
-
|
73
|
-
# @api private
|
74
|
-
def initialize(s9_qname)
|
75
|
-
@s9_qname = s9_qname
|
76
|
-
end
|
77
|
-
|
78
|
-
# @return [String] The local name part of the QName
|
79
|
-
def local_name
|
80
|
-
@s9_qname.getLocalName
|
81
|
-
end
|
82
|
-
|
83
|
-
# @return [String] The prefix part of the QName ('' if unset)
|
84
|
-
def prefix
|
85
|
-
@s9_qname.getPrefix
|
86
|
-
end
|
87
|
-
|
88
|
-
# @return [String] The namespace URI part of the QName ('' if unset)
|
89
|
-
def uri
|
90
|
-
@s9_qname.getNamespaceURI
|
91
|
-
end
|
92
|
-
|
93
|
-
# Return a Clark notation representation of the QName:
|
94
|
-
#
|
95
|
-
# "{http://ns.url}local-name"
|
96
|
-
#
|
97
|
-
# Note that the prefix is lost in Clark notation.
|
98
|
-
# @return [String] The QName represented using Clark notation.
|
99
|
-
def clark
|
100
|
-
@s9_qname.getClarkName
|
101
|
-
end
|
102
|
-
|
103
|
-
# Return a Extended QName notation representation of the QName:
|
104
|
-
#
|
105
|
-
# "Q{http://ns.url}local-name"
|
106
|
-
#
|
107
|
-
# Note that the prefix is lost in EQName notation.
|
108
|
-
# @return [String] The QName represented using EQName notation.
|
109
|
-
def eqname
|
110
|
-
@s9_qname.getEQName
|
111
|
-
end
|
112
|
-
|
113
|
-
def ==(other)
|
114
|
-
return false unless other.is_a?(QName)
|
115
|
-
s9_qname.equals(other.to_java)
|
116
|
-
end
|
117
|
-
alias_method :eql?, :==
|
118
|
-
|
119
|
-
def hash
|
120
|
-
@hash ||= (local_name + uri).hash
|
121
|
-
end
|
122
|
-
|
123
|
-
def to_java
|
124
|
-
s9_qname
|
125
|
-
end
|
126
|
-
|
127
|
-
def to_s
|
128
|
-
s9_qname.to_s
|
129
|
-
end
|
130
|
-
|
131
|
-
def inspect
|
132
|
-
"<Saxon::QName @prefix=#{prefix} @uri=#{uri} @local_name=#{local_name}>"
|
133
|
-
end
|
134
|
-
|
135
|
-
class PrefixedStringWithoutNSURIError < RuntimeError
|
136
|
-
def initialize(qname_string, prefix)
|
137
|
-
@qname_string, @prefix = qname_string, prefix
|
138
|
-
end
|
139
|
-
|
140
|
-
def to_s
|
141
|
-
"Namespace prefix ‘#{@prefix}’ for QName ‘#{@qname_string}’ is not bound to a URI"
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|
145
|
-
end
|
data/lib/saxon/s9api.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'saxon/loader'
|
2
|
-
|
3
|
-
module Saxon
|
4
|
-
module S9API
|
5
|
-
def self.const_missing(name)
|
6
|
-
Saxon::Loader.load!
|
7
|
-
begin
|
8
|
-
const_get(name)
|
9
|
-
rescue NameError
|
10
|
-
msg = "uninitialized constant Saxon::S9API::#{name}"
|
11
|
-
e = NameError.new(msg, name)
|
12
|
-
raise e
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
data/lib/saxon/serializer.rb
DELETED
@@ -1,143 +0,0 @@
|
|
1
|
-
require 'saxon/s9api'
|
2
|
-
require 'stringio'
|
3
|
-
|
4
|
-
module Saxon
|
5
|
-
# Serialize XDM objects.
|
6
|
-
class Serializer
|
7
|
-
# Manage access to the serialization properties of this serializer, with
|
8
|
-
# hash-like access.
|
9
|
-
#
|
10
|
-
# Properties can be set explicitly through this API, or via XSLT or XQuery
|
11
|
-
# serialization options like `<xsl:output>`.
|
12
|
-
#
|
13
|
-
# Properties set explicitly here will override properties set through the
|
14
|
-
# document like `<xsl:output>`.
|
15
|
-
class OutputProperties
|
16
|
-
# @api private
|
17
|
-
# Provides mapping between symbols and the underlying Saxon property
|
18
|
-
# instances
|
19
|
-
def self.output_properties
|
20
|
-
@output_properties ||= Hash[
|
21
|
-
Saxon::S9API::Serializer::Property.values.map { |property|
|
22
|
-
qname = property.getQName
|
23
|
-
key = [
|
24
|
-
qname.getPrefix,
|
25
|
-
qname.getLocalName.tr('-', '_')
|
26
|
-
].reject { |str| str == '' }.join('_').to_sym
|
27
|
-
[key, property]
|
28
|
-
}
|
29
|
-
]
|
30
|
-
end
|
31
|
-
|
32
|
-
attr_reader :s9_serializer
|
33
|
-
|
34
|
-
# @api private
|
35
|
-
def initialize(s9_serializer)
|
36
|
-
@s9_serializer = s9_serializer
|
37
|
-
end
|
38
|
-
|
39
|
-
# @param [Symbol, Saxon::S9API::Serializer::Property] property The property to fetch
|
40
|
-
def [](property)
|
41
|
-
s9_serializer.getOutputProperty(resolved_property(property))
|
42
|
-
end
|
43
|
-
|
44
|
-
# @param [Symbol, Saxon::S9API::Serializer::Property] property The property to set
|
45
|
-
# @param [String] value The string value of the property
|
46
|
-
def []=(property, value)
|
47
|
-
s9_serializer.setOutputProperty(resolved_property(property), value)
|
48
|
-
end
|
49
|
-
|
50
|
-
# @overload fetch(property)
|
51
|
-
# @param [Symbol, Saxon::S9API::Serializer::Property] property The property to fetch
|
52
|
-
# @overload fetch(property, default)
|
53
|
-
# @param property [Symbol, Saxon::S9API::Serializer::Property] The property to fetch
|
54
|
-
# @param default [Object] The value to return if the property is unset
|
55
|
-
def fetch(property, default = nil)
|
56
|
-
explicit_value = self[property]
|
57
|
-
if explicit_value.nil? && !default.nil?
|
58
|
-
default
|
59
|
-
else
|
60
|
-
explicit_value
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
private
|
65
|
-
def resolved_property(property_key)
|
66
|
-
case property_key
|
67
|
-
when Symbol
|
68
|
-
self.class.output_properties.fetch(property_key)
|
69
|
-
else
|
70
|
-
property_key
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
attr_reader :s9_serializer
|
76
|
-
private :s9_serializer
|
77
|
-
|
78
|
-
# @api private
|
79
|
-
def initialize(s9_serializer)
|
80
|
-
@s9_serializer = s9_serializer
|
81
|
-
end
|
82
|
-
|
83
|
-
# @return [Saxon::Serializer::OutputProperties] hash-like access to the Output Properties
|
84
|
-
def output_property
|
85
|
-
@output_property ||= OutputProperties.new(s9_serializer)
|
86
|
-
end
|
87
|
-
|
88
|
-
# @overload serialize(xdm_value, io)
|
89
|
-
# Serialize an XdmValue to an IO
|
90
|
-
# @param [Saxon::XdmValue] xdm_value The XdmValue to serialize
|
91
|
-
# @param [File, IO] io The IO to serialize to
|
92
|
-
# @return [nil]
|
93
|
-
# @overload serialize(xdm_value, path)
|
94
|
-
# Serialize an XdmValue to file <tt>path</tt>
|
95
|
-
# @param [Saxon::XdmValue] xdm_value The XdmValue to serialize
|
96
|
-
# @param [String, Pathname] path The path of the file to serialize to
|
97
|
-
# @return [nil]
|
98
|
-
# @overload serialize(xdm_value)
|
99
|
-
# Serialize an XdmValue to a String
|
100
|
-
# @param [Saxon::XdmValue] xdm_value The XdmValue to serialize
|
101
|
-
# @return [String] The serialized XdmValue
|
102
|
-
def serialize(xdm_value, io_or_path = nil)
|
103
|
-
case io_or_path
|
104
|
-
when nil
|
105
|
-
serialize_to_string(xdm_value)
|
106
|
-
when String, Pathname
|
107
|
-
serialize_to_file(xdm_value, io_or_path)
|
108
|
-
else
|
109
|
-
serialize_to_io(xdm_value, io_or_path)
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
# @return [Saxon::S9API::Serializer] The underlying Saxon Serializer object
|
114
|
-
def to_java
|
115
|
-
s9_serializer
|
116
|
-
end
|
117
|
-
|
118
|
-
private
|
119
|
-
|
120
|
-
def serialize_to_io(xdm_value, io)
|
121
|
-
s9_serializer.setOutputStream(io.to_outputstream)
|
122
|
-
s9_serializer.serializeXdmValue(xdm_value.to_java)
|
123
|
-
nil
|
124
|
-
end
|
125
|
-
|
126
|
-
def serialize_to_string(xdm_value)
|
127
|
-
str_encoding = output_property.fetch(:encoding, Encoding.default_internal || Encoding.default_external)
|
128
|
-
StringIO.open { |io|
|
129
|
-
io.binmode
|
130
|
-
serialize_to_io(xdm_value, io)
|
131
|
-
io.string.force_encoding(str_encoding)
|
132
|
-
}
|
133
|
-
end
|
134
|
-
|
135
|
-
def serialize_to_file(xdm_value, path)
|
136
|
-
file = Java::JavaIO::File.new(path)
|
137
|
-
s9_serializer.setOutputFile(file)
|
138
|
-
s9_serializer.serializeXdmValue(xdm_value.to_java)
|
139
|
-
nil
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|