rubysl-rexml 1.0.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|