rubysl-rexml 1.0.0 → 2.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 +4 -4
- data/.travis.yml +3 -2
- data/lib/rexml/attlistdecl.rb +56 -56
- data/lib/rexml/attribute.rb +155 -149
- data/lib/rexml/cdata.rb +48 -48
- data/lib/rexml/child.rb +82 -82
- data/lib/rexml/comment.rb +59 -59
- data/lib/rexml/doctype.rb +22 -24
- data/lib/rexml/document.rb +185 -129
- data/lib/rexml/dtd/attlistdecl.rb +7 -7
- data/lib/rexml/dtd/dtd.rb +41 -41
- data/lib/rexml/dtd/elementdecl.rb +13 -13
- data/lib/rexml/dtd/entitydecl.rb +49 -49
- data/lib/rexml/dtd/notationdecl.rb +32 -32
- data/lib/rexml/element.rb +122 -107
- data/lib/rexml/encoding.rb +37 -58
- data/lib/rexml/entity.rb +144 -144
- data/lib/rexml/formatters/default.rb +6 -4
- data/lib/rexml/formatters/pretty.rb +11 -8
- data/lib/rexml/formatters/transitive.rb +4 -3
- data/lib/rexml/functions.rb +33 -21
- data/lib/rexml/instruction.rb +49 -49
- data/lib/rexml/light/node.rb +190 -191
- data/lib/rexml/namespace.rb +39 -39
- data/lib/rexml/node.rb +38 -38
- data/lib/rexml/output.rb +17 -12
- data/lib/rexml/parent.rb +26 -25
- data/lib/rexml/parseexception.rb +4 -4
- data/lib/rexml/parsers/baseparser.rb +90 -61
- data/lib/rexml/parsers/lightparser.rb +41 -43
- data/lib/rexml/parsers/pullparser.rb +1 -1
- data/lib/rexml/parsers/sax2parser.rb +233 -198
- data/lib/rexml/parsers/streamparser.rb +6 -2
- data/lib/rexml/parsers/treeparser.rb +9 -6
- data/lib/rexml/parsers/ultralightparser.rb +40 -40
- data/lib/rexml/parsers/xpathparser.rb +51 -52
- data/lib/rexml/quickpath.rb +247 -248
- data/lib/rexml/rexml.rb +9 -10
- data/lib/rexml/sax2listener.rb +92 -92
- data/lib/rexml/security.rb +27 -0
- data/lib/rexml/source.rb +95 -50
- data/lib/rexml/streamlistener.rb +90 -90
- data/lib/rexml/syncenumerator.rb +3 -4
- data/lib/rexml/text.rb +157 -76
- data/lib/rexml/validation/relaxng.rb +18 -18
- data/lib/rexml/validation/validation.rb +5 -5
- data/lib/rexml/xmldecl.rb +59 -63
- data/lib/rexml/xmltokens.rb +14 -14
- data/lib/rexml/xpath.rb +67 -53
- data/lib/rexml/xpath_parser.rb +49 -38
- data/lib/rubysl/rexml.rb +1 -0
- data/lib/rubysl/rexml/version.rb +1 -1
- data/rubysl-rexml.gemspec +3 -1
- metadata +19 -28
- data/lib/rexml/encodings/CP-1252.rb +0 -103
- data/lib/rexml/encodings/EUC-JP.rb +0 -35
- data/lib/rexml/encodings/ICONV.rb +0 -22
- data/lib/rexml/encodings/ISO-8859-1.rb +0 -7
- data/lib/rexml/encodings/ISO-8859-15.rb +0 -72
- data/lib/rexml/encodings/SHIFT-JIS.rb +0 -37
- data/lib/rexml/encodings/SHIFT_JIS.rb +0 -1
- data/lib/rexml/encodings/UNILE.rb +0 -34
- data/lib/rexml/encodings/US-ASCII.rb +0 -30
- data/lib/rexml/encodings/UTF-16.rb +0 -35
- data/lib/rexml/encodings/UTF-8.rb +0 -18
data/lib/rexml/cdata.rb
CHANGED
@@ -1,39 +1,39 @@
|
|
1
1
|
require "rexml/text"
|
2
2
|
|
3
3
|
module REXML
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
class CData < Text
|
5
|
+
START = '<![CDATA['
|
6
|
+
STOP = ']]>'
|
7
|
+
ILLEGAL = /(\]\]>)/
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
9
|
+
# Constructor. CData is data between <![CDATA[ ... ]]>
|
10
|
+
#
|
11
|
+
# _Examples_
|
12
|
+
# CData.new( source )
|
13
|
+
# CData.new( "Here is some CDATA" )
|
14
|
+
# CData.new( "Some unprocessed data", respect_whitespace_TF, parent_element )
|
15
|
+
def initialize( first, whitespace=true, parent=nil )
|
16
|
+
super( first, whitespace, parent, false, true, ILLEGAL )
|
17
|
+
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
19
|
+
# Make a copy of this object
|
20
|
+
#
|
21
|
+
# _Examples_
|
22
|
+
# c = CData.new( "Some text" )
|
23
|
+
# d = c.clone
|
24
|
+
# d.to_s # -> "Some text"
|
25
|
+
def clone
|
26
|
+
CData.new self
|
27
|
+
end
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
29
|
+
# Returns the content of this CData object
|
30
|
+
#
|
31
|
+
# _Examples_
|
32
|
+
# c = CData.new( "Some text" )
|
33
|
+
# c.to_s # -> "Some text"
|
34
|
+
def to_s
|
35
|
+
@string
|
36
|
+
end
|
37
37
|
|
38
38
|
def value
|
39
39
|
@string
|
@@ -42,26 +42,26 @@ module REXML
|
|
42
42
|
# == DEPRECATED
|
43
43
|
# See the rexml/formatters package
|
44
44
|
#
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
45
|
+
# Generates XML output of this object
|
46
|
+
#
|
47
|
+
# output::
|
48
|
+
# Where to write the string. Defaults to $stdout
|
49
|
+
# indent::
|
50
50
|
# The amount to indent this node by
|
51
|
-
|
51
|
+
# transitive::
|
52
52
|
# Ignored
|
53
|
-
|
53
|
+
# ie_hack::
|
54
54
|
# Ignored
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
55
|
+
#
|
56
|
+
# _Examples_
|
57
|
+
# c = CData.new( " Some text " )
|
58
|
+
# c.write( $stdout ) #-> <![CDATA[ Some text ]]>
|
59
|
+
def write( output=$stdout, indent=-1, transitive=false, ie_hack=false )
|
60
60
|
Kernel.warn( "#{self.class.name}.write is deprecated" )
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
61
|
+
indent( output, indent )
|
62
|
+
output << START
|
63
|
+
output << @string
|
64
|
+
output << STOP
|
65
|
+
end
|
66
|
+
end
|
67
67
|
end
|
data/lib/rexml/child.rb
CHANGED
@@ -1,96 +1,96 @@
|
|
1
1
|
require "rexml/node"
|
2
2
|
|
3
3
|
module REXML
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
##
|
5
|
+
# A Child object is something contained by a parent, and this class
|
6
|
+
# contains methods to support that. Most user code will not use this
|
7
|
+
# class directly.
|
8
|
+
class Child
|
9
|
+
include Node
|
10
|
+
attr_reader :parent # The Parent of this object
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
12
|
+
# Constructor. Any inheritors of this class should call super to make
|
13
|
+
# sure this method is called.
|
14
|
+
# parent::
|
15
|
+
# if supplied, the parent of this child will be set to the
|
16
|
+
# supplied value, and self will be added to the parent
|
17
|
+
def initialize( parent = nil )
|
18
|
+
@parent = nil
|
19
|
+
# Declare @parent, but don't define it. The next line sets the
|
20
|
+
# parent.
|
21
|
+
parent.add( self ) if parent
|
22
|
+
end
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
24
|
+
# Replaces this object with another object. Basically, calls
|
25
|
+
# Parent.replace_child
|
26
|
+
#
|
27
|
+
# Returns:: self
|
28
|
+
def replace_with( child )
|
29
|
+
@parent.replace_child( self, child )
|
30
|
+
self
|
31
|
+
end
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
33
|
+
# Removes this child from the parent.
|
34
|
+
#
|
35
|
+
# Returns:: self
|
36
|
+
def remove
|
37
|
+
unless @parent.nil?
|
38
|
+
@parent.delete self
|
39
|
+
end
|
40
|
+
self
|
41
|
+
end
|
42
42
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
43
|
+
# Sets the parent of this child to the supplied argument.
|
44
|
+
#
|
45
|
+
# other::
|
46
|
+
# Must be a Parent object. If this object is the same object as the
|
47
|
+
# existing parent of this child, no action is taken. Otherwise, this
|
48
|
+
# child is removed from the current parent (if one exists), and is added
|
49
|
+
# to the new parent.
|
50
|
+
# Returns:: The parent added
|
51
|
+
def parent=( other )
|
52
|
+
return @parent if @parent == other
|
53
|
+
@parent.delete self if defined? @parent and @parent
|
54
|
+
@parent = other
|
55
|
+
end
|
56
56
|
|
57
|
-
|
58
|
-
|
57
|
+
alias :next_sibling :next_sibling_node
|
58
|
+
alias :previous_sibling :previous_sibling_node
|
59
59
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
60
|
+
# Sets the next sibling of this child. This can be used to insert a child
|
61
|
+
# after some other child.
|
62
|
+
# a = Element.new("a")
|
63
|
+
# b = a.add_element("b")
|
64
|
+
# c = Element.new("c")
|
65
|
+
# b.next_sibling = c
|
66
|
+
# # => <a><b/><c/></a>
|
67
|
+
def next_sibling=( other )
|
68
|
+
parent.insert_after self, other
|
69
|
+
end
|
70
70
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
71
|
+
# Sets the previous sibling of this child. This can be used to insert a
|
72
|
+
# child before some other child.
|
73
|
+
# a = Element.new("a")
|
74
|
+
# b = a.add_element("b")
|
75
|
+
# c = Element.new("c")
|
76
|
+
# b.previous_sibling = c
|
77
|
+
# # => <a><b/><c/></a>
|
78
|
+
def previous_sibling=(other)
|
79
|
+
parent.insert_before self, other
|
80
|
+
end
|
81
81
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
82
|
+
# Returns:: the document this child belongs to, or nil if this child
|
83
|
+
# belongs to no document
|
84
|
+
def document
|
85
|
+
return parent.document unless parent.nil?
|
86
|
+
nil
|
87
|
+
end
|
88
88
|
|
89
|
-
|
90
|
-
|
91
|
-
|
89
|
+
# This doesn't yet handle encodings
|
90
|
+
def bytes
|
91
|
+
document.encoding
|
92
92
|
|
93
|
-
|
94
|
-
|
95
|
-
|
93
|
+
to_s
|
94
|
+
end
|
95
|
+
end
|
96
96
|
end
|
data/lib/rexml/comment.rb
CHANGED
@@ -1,80 +1,80 @@
|
|
1
1
|
require "rexml/child"
|
2
2
|
|
3
3
|
module REXML
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
##
|
5
|
+
# Represents an XML comment; that is, text between \<!-- ... -->
|
6
|
+
class Comment < Child
|
7
|
+
include Comparable
|
8
|
+
START = "<!--"
|
9
|
+
STOP = "-->"
|
10
10
|
|
11
|
-
|
11
|
+
# The content text
|
12
12
|
|
13
|
-
|
13
|
+
attr_accessor :string
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
15
|
+
##
|
16
|
+
# Constructor. The first argument can be one of three types:
|
17
|
+
# @param first If String, the contents of this comment are set to the
|
18
|
+
# argument. If Comment, the argument is duplicated. If
|
19
|
+
# Source, the argument is scanned for a comment.
|
20
|
+
# @param second If the first argument is a Source, this argument
|
21
|
+
# should be nil, not supplied, or a Parent to be set as the parent
|
22
|
+
# of this object
|
23
|
+
def initialize( first, second = nil )
|
24
|
+
#puts "IN COMMENT CONSTRUCTOR; SECOND IS #{second.type}"
|
25
|
+
super(second)
|
26
|
+
if first.kind_of? String
|
27
|
+
@string = first
|
28
|
+
elsif first.kind_of? Comment
|
29
|
+
@string = first.string
|
30
|
+
end
|
31
|
+
end
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
def clone
|
34
|
+
Comment.new self
|
35
|
+
end
|
36
36
|
|
37
37
|
# == DEPRECATED
|
38
38
|
# See REXML::Formatters
|
39
39
|
#
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
40
|
+
# output::
|
41
|
+
# Where to write the string
|
42
|
+
# indent::
|
43
|
+
# An integer. If -1, no indenting will be used; otherwise, the
|
44
|
+
# indentation will be this number of spaces, and children will be
|
45
|
+
# indented an additional amount.
|
46
|
+
# transitive::
|
47
|
+
# Ignored by this class. The contents of comments are never modified.
|
48
|
+
# ie_hack::
|
49
|
+
# Needed for conformity to the child API, but not used by this class.
|
50
|
+
def write( output, indent=-1, transitive=false, ie_hack=false )
|
51
51
|
Kernel.warn("Comment.write is deprecated. See REXML::Formatters")
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
52
|
+
indent( output, indent )
|
53
|
+
output << START
|
54
|
+
output << @string
|
55
|
+
output << STOP
|
56
|
+
end
|
57
57
|
|
58
|
-
|
58
|
+
alias :to_s :string
|
59
59
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
60
|
+
##
|
61
|
+
# Compares this Comment to another; the contents of the comment are used
|
62
|
+
# in the comparison.
|
63
|
+
def <=>(other)
|
64
|
+
other.to_s <=> @string
|
65
|
+
end
|
66
66
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
67
|
+
##
|
68
|
+
# Compares this Comment to another; the contents of the comment are used
|
69
|
+
# in the comparison.
|
70
|
+
def ==( other )
|
71
|
+
other.kind_of? Comment and
|
72
|
+
(other <=> self) == 0
|
73
|
+
end
|
74
74
|
|
75
75
|
def node_type
|
76
76
|
:comment
|
77
77
|
end
|
78
|
-
|
78
|
+
end
|
79
79
|
end
|
80
80
|
#vim:ts=2 sw=2 noexpandtab:
|
data/lib/rexml/doctype.rb
CHANGED
@@ -15,11 +15,11 @@ module REXML
|
|
15
15
|
STOP = ">"
|
16
16
|
SYSTEM = "SYSTEM"
|
17
17
|
PUBLIC = "PUBLIC"
|
18
|
-
DEFAULT_ENTITIES = {
|
19
|
-
'gt'=>EntityConst::GT,
|
20
|
-
'lt'=>EntityConst::LT,
|
21
|
-
'quot'=>EntityConst::QUOT,
|
22
|
-
"apos"=>EntityConst::APOS
|
18
|
+
DEFAULT_ENTITIES = {
|
19
|
+
'gt'=>EntityConst::GT,
|
20
|
+
'lt'=>EntityConst::LT,
|
21
|
+
'quot'=>EntityConst::QUOT,
|
22
|
+
"apos"=>EntityConst::APOS
|
23
23
|
}
|
24
24
|
|
25
25
|
# name is the name of the doctype
|
@@ -33,7 +33,7 @@ module REXML
|
|
33
33
|
# dt = DocType.new( doctype_to_clone )
|
34
34
|
# # Incomplete. Shallow clone of doctype
|
35
35
|
#
|
36
|
-
# +Note+ that the constructor:
|
36
|
+
# +Note+ that the constructor:
|
37
37
|
#
|
38
38
|
# Doctype.new( Source.new( "<!DOCTYPE foo 'bar'>" ) )
|
39
39
|
#
|
@@ -115,9 +115,7 @@ module REXML
|
|
115
115
|
output << " #{@long_name.inspect}" if @long_name
|
116
116
|
output << " #{@uri.inspect}" if @uri
|
117
117
|
unless @children.empty?
|
118
|
-
next_indent = indent + 1
|
119
118
|
output << ' ['
|
120
|
-
child = nil # speed
|
121
119
|
@children.each { |child|
|
122
120
|
output << "\n"
|
123
121
|
f.write( child, output )
|
@@ -140,8 +138,8 @@ module REXML
|
|
140
138
|
@entities = DEFAULT_ENTITIES.clone if @entities == DEFAULT_ENTITIES
|
141
139
|
@entities[ child.name ] = child if child.kind_of? Entity
|
142
140
|
end
|
143
|
-
|
144
|
-
# This method retrieves the public identifier identifying the document's
|
141
|
+
|
142
|
+
# This method retrieves the public identifier identifying the document's
|
145
143
|
# DTD.
|
146
144
|
#
|
147
145
|
# Method contributed by Henrik Martensson
|
@@ -153,7 +151,7 @@ module REXML
|
|
153
151
|
strip_quotes(@long_name)
|
154
152
|
end
|
155
153
|
end
|
156
|
-
|
154
|
+
|
157
155
|
# This method retrieves the system identifier identifying the document's DTD
|
158
156
|
#
|
159
157
|
# Method contributed by Henrik Martensson
|
@@ -165,16 +163,16 @@ module REXML
|
|
165
163
|
@uri.kind_of?(String) ? strip_quotes(@uri) : nil
|
166
164
|
end
|
167
165
|
end
|
168
|
-
|
166
|
+
|
169
167
|
# This method returns a list of notations that have been declared in the
|
170
|
-
# _internal_ DTD subset. Notations in the external DTD subset are not
|
168
|
+
# _internal_ DTD subset. Notations in the external DTD subset are not
|
171
169
|
# listed.
|
172
170
|
#
|
173
171
|
# Method contributed by Henrik Martensson
|
174
172
|
def notations
|
175
173
|
children().select {|node| node.kind_of?(REXML::NotationDecl)}
|
176
174
|
end
|
177
|
-
|
175
|
+
|
178
176
|
# Retrieves a named notation. Only notations declared in the internal
|
179
177
|
# DTD subset can be retrieved.
|
180
178
|
#
|
@@ -184,12 +182,12 @@ module REXML
|
|
184
182
|
notation_decl.name == name
|
185
183
|
}
|
186
184
|
end
|
187
|
-
|
185
|
+
|
188
186
|
private
|
189
|
-
|
187
|
+
|
190
188
|
# Method contributed by Henrik Martensson
|
191
189
|
def strip_quotes(quoted_string)
|
192
|
-
quoted_string =~ /^[\'\"].*[
|
190
|
+
quoted_string =~ /^[\'\"].*[\'\"]$/ ?
|
193
191
|
quoted_string[1, quoted_string.length-2] :
|
194
192
|
quoted_string
|
195
193
|
end
|
@@ -218,7 +216,7 @@ module REXML
|
|
218
216
|
output << to_s
|
219
217
|
end
|
220
218
|
end
|
221
|
-
|
219
|
+
|
222
220
|
public
|
223
221
|
class ElementDecl < Declaration
|
224
222
|
def initialize( src )
|
@@ -250,17 +248,17 @@ module REXML
|
|
250
248
|
end
|
251
249
|
|
252
250
|
def to_s
|
253
|
-
"<!NOTATION
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
251
|
+
notation = "<!NOTATION #{@name} #{@middle}"
|
252
|
+
notation << " #{@public.inspect}" if @public
|
253
|
+
notation << " #{@system.inspect}" if @system
|
254
|
+
notation << ">"
|
255
|
+
notation
|
258
256
|
end
|
259
257
|
|
260
258
|
def write( output, indent=-1 )
|
261
259
|
output << to_s
|
262
260
|
end
|
263
|
-
|
261
|
+
|
264
262
|
# This method retrieves the name of the notation.
|
265
263
|
#
|
266
264
|
# Method contributed by Henrik Martensson
|