saxon 0.2.2-java → 0.4.0-java
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
|