vcdom 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/lib/vcdom/attr.rb +70 -0
  2. data/lib/vcdom/attr_node_map.rb +30 -0
  3. data/lib/vcdom/attr_ns.rb +38 -0
  4. data/lib/vcdom/character_data.rb +22 -0
  5. data/lib/vcdom/child.rb +53 -0
  6. data/lib/vcdom/document.rb +126 -0
  7. data/lib/vcdom/element.rb +332 -0
  8. data/lib/vcdom/element_ns.rb +44 -0
  9. data/lib/vcdom/node.rb +278 -0
  10. data/lib/vcdom/node_list.rb +32 -0
  11. data/lib/vcdom/parent.rb +126 -0
  12. data/lib/vcdom/text.rb +23 -0
  13. data/lib/vcdom/xml_parser.rb +368 -0
  14. data/lib/vcdom/xml_serializer.rb +55 -0
  15. metadata +48 -81
  16. data/History.txt +0 -4
  17. data/Manifest.txt +0 -34
  18. data/PostInstall.txt +0 -7
  19. data/README.rdoc +0 -51
  20. data/Rakefile +0 -26
  21. data/lib/vcdom/minidom/attr.rb +0 -139
  22. data/lib/vcdom/minidom/attr_ns.rb +0 -47
  23. data/lib/vcdom/minidom/cdata_section.rb +0 -34
  24. data/lib/vcdom/minidom/character_data.rb +0 -263
  25. data/lib/vcdom/minidom/comment.rb +0 -34
  26. data/lib/vcdom/minidom/document.rb +0 -245
  27. data/lib/vcdom/minidom/dom_exception.rb +0 -51
  28. data/lib/vcdom/minidom/dom_implementation.rb +0 -214
  29. data/lib/vcdom/minidom/element.rb +0 -512
  30. data/lib/vcdom/minidom/element_ns.rb +0 -42
  31. data/lib/vcdom/minidom/mini_parser.rb +0 -9
  32. data/lib/vcdom/minidom/mini_serializer.rb +0 -118
  33. data/lib/vcdom/minidom/minidom_standard_error.rb +0 -9
  34. data/lib/vcdom/minidom/mod_child_node.rb +0 -51
  35. data/lib/vcdom/minidom/mod_elements_getter.rb +0 -49
  36. data/lib/vcdom/minidom/mod_namespaceuri_manageable.rb +0 -152
  37. data/lib/vcdom/minidom/mod_parent_node.rb +0 -307
  38. data/lib/vcdom/minidom/named_node_map_attr.rb +0 -277
  39. data/lib/vcdom/minidom/node.rb +0 -178
  40. data/lib/vcdom/minidom/node_list.rb +0 -41
  41. data/lib/vcdom/minidom/text.rb +0 -77
  42. data/lib/vcdom/minidom/xml_reg_exp.rb +0 -39
  43. data/lib/vcdom/minidom.rb +0 -9
  44. data/lib/vcdom.rb +0 -6
  45. data/script/console +0 -10
  46. data/script/destroy +0 -14
  47. data/script/generate +0 -14
  48. data/test/test_helper.rb +0 -3
  49. data/test/test_vcdom.rb +0 -11
data/Rakefile DELETED
@@ -1,26 +0,0 @@
1
- require 'rubygems'
2
- gem 'hoe', '>= 2.1.0'
3
- require 'hoe'
4
- require 'fileutils'
5
- require './lib/vcdom'
6
-
7
- Hoe.plugin :newgem
8
- # Hoe.plugin :website
9
- # Hoe.plugin :cucumberfeatures
10
-
11
- # Generate all the Rake tasks
12
- # Run 'rake -T' to see list of generated tasks (from gem root directory)
13
- $hoe = Hoe.spec 'vcdom' do
14
- self.developer 'Y. NOBUOKA', 'nobuoka@r-definition.com'
15
- self.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
16
- self.rubyforge_name = 'vcdom' # TODO this is default value
17
- # self.extra_deps = [['activesupport','>= 2.0.2']]
18
-
19
- end
20
-
21
- require 'newgem/tasks'
22
- Dir['tasks/**/*.rake'].each { |t| load t }
23
-
24
- # TODO - want other tests/tasks run by default? Add them to the list
25
- # remove_task :default
26
- # task :default => [:spec, :features]
@@ -1,139 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require "vcdom/minidom/node"
4
- require "vcdom/minidom/mod_parent_node"
5
-
6
- module VCDOM
7
- module MiniDOM
8
- class Attr < Node
9
-
10
- module OwnerElementManageable
11
- protected
12
- def owner_element=( element )
13
- @owner_element = element
14
- end
15
- end
16
-
17
- include ModParentNode
18
- include OwnerElementManageable
19
-
20
- def node_type
21
- return Node::ATTRIBUTE_NODE
22
- end
23
-
24
- # ===== Attributes =====
25
-
26
- # name of type DOMString, readonly
27
- # Returns the name of this attribute.
28
- # If Node.localName is different from null, this attribute is a qualified name.
29
- def name
30
- return @name
31
- end
32
- alias :node_name :name
33
-
34
- # value of type DOMString
35
- # On retrieval, the value of the attribute is returned as a string.
36
- # Character and general entity references are replaced with their values.
37
- # See also the method getAttribute on the Element interface.
38
- # On setting, this creates a Text node with the unparsed contents of the string,
39
- # i.e. any characters that an XML processor would recognize as markup are instead
40
- # treated as literal text.
41
- # See also the method Element.setAttribute().
42
- # Some specialized implementations, such as some [SVG 1.1] implementations,
43
- # may do normalization automatically, even after mutation; in such case, the
44
- # value on retrieval may differ from the value on setting.
45
- #
46
- # Exceptions on setting
47
- # DOMException
48
- # NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
49
- def value
50
- return self.text_content
51
- end
52
- def value=( value )
53
- if self.is_readonly then
54
- raise DOMException.new( DOMException::NO_MODIFICATION_ALLOWED_ERR,
55
- 'This node is readonly.' )
56
- end
57
- if ! value.instance_of? String then
58
- raise TypeError.new( "The argument must be String object." )
59
- end
60
- self.text_content = value
61
- end
62
-
63
- # nodeValue of type DOMString
64
- # The value of this node, depending on its type; see the table above.
65
- # When it is defined to be null, setting it has no effect, including if the node is read-only.
66
- #
67
- # Interface nodeValue
68
- # ------------------------------------------------------------------------------------------------
69
- # Attr same as Attr.value
70
- #
71
- # Exceptions on setting
72
- # DOMException
73
- # NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly and
74
- # if it is not defined to be null.
75
- # Exceptions on retrieval
76
- # DOMException
77
- # DOMSTRING_SIZE_ERR: Raised when it would return more characters than
78
- # fit in a DOMString variable on the implementation platform.
79
- #
80
- # Attr, PI, CharacterData ( = CDATASection, Comment, Text ) でオーバーロード
81
- alias :node_value :value
82
- alias :node_value= :value=
83
-
84
- # ownerElement of type Element, readonly, introduced in DOM Level 2
85
- # The Element node this attribute is attached to or null if this attribute is not in use.
86
- def owner_element; return @owner_element end
87
-
88
- # specified of type boolean, readonly
89
- # True if this attribute was explicitly given a value in the instance document,
90
- # false otherwise.
91
- # #=> この属性 (specified ではなく Attr ノード) が, 文書中で明示的に値を与えられている場合は
92
- # true, さもなければ false である.
93
- # If the application changed the value of this attribute node (even if it ends
94
- # up having the same value as the default value) then it is set to true.
95
- # #=> もし, アプリケーションがこの Attr ノードの値を変化させた場合 (たとえ結果的にデフォルト値と同じ
96
- # 値であったとしても), true になる.
97
- # The implementation may handle attributes with default values from other schemas
98
- # similarly but applications should use Document.normalizeDocument() to guarantee
99
- # this information is up-to-date.
100
- # #=> ...
101
- def specified
102
- return true
103
- end
104
-
105
- # ===== コンストラクタ =====
106
- # Exceptions
107
- # DOMException
108
- # INVALID_CHARACTER_ERR: Raised if the specified name is not an XML name according to
109
- # the XML version in use specified in the Document.xmlVersion attribute.
110
- def initialize( owner_document, name )
111
- if XMLRegExp::NAME !~ name then
112
- # the specified qualified name is not an XML name
113
- raise DOMException.new( DOMException::INVALID_CHARACTER_ERR,
114
- 'The specified name "' + name + '" is not an XML name.' )
115
- end
116
- super( owner_document )
117
- init_mod_parent_node()
118
- @name = name
119
- end
120
-
121
- protected
122
- def name=( name )
123
- @name = name
124
- end
125
- def check_hierarchy( new_child )
126
- # Text, EntityReference
127
- super( new_child, true )
128
- case new_child.node_type
129
- when Node::TEXT_NODE, Node::ENTITY_REFERENCE_NODE then
130
- return true
131
- else
132
- raise DOMException.new( DOMException::HIERARCHY_REQUEST_ERR,
133
- 'This node is of a type that does not allow children of the type of the newChild node.' )
134
- end
135
- end
136
-
137
- end
138
- end
139
- end
@@ -1,47 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require "vcdom/minidom/node"
4
- require "vcdom/minidom/mod_parent_node"
5
- require "vcdom/minidom/mod_namespaceuri_manageable"
6
-
7
- module VCDOM
8
- module MiniDOM
9
- class AttrNS < Attr
10
-
11
- include ModNamespaceURIManageable
12
-
13
- # DOMException
14
- # INVALID_CHARACTER_ERR: Raised if the specified qualifiedName is not an XML name according
15
- # to the XML version in use specified in the Document.xmlVersion attribute.
16
- # NAMESPACE_ERR: Raised if the qualifiedName is a malformed qualified name,
17
- # if the qualifiedName has a prefix and the namespaceURI is null,
18
- # if the qualifiedName has a prefix that is "xml" and the namespaceURI is different
19
- # from "http://www.w3.org/XML/1998/namespace", if the qualifiedName or its prefix is
20
- # "xmlns" and the namespaceURI is different from "http://www.w3.org/2000/xmlns/",
21
- # or if the namespaceURI is "http://www.w3.org/2000/xmlns/" and
22
- # neither the qualifiedName nor its prefix is "xmlns".
23
- # #=> QName が奇形の場合, QName が接頭辞を持ちながら名前空間 URI が null の場合,
24
- # QName の接頭辞が "xml" なのに名前空間 URI が
25
- # "http://www.w3.org/XML/1998/namespace" ではない場合, QName の接頭辞が
26
- # "xmlns" にもかかわらず名前空間 URI が "http://www.w3.org/2000/xmlns/"
27
- # ではないとき, そして名前空間 URI が "http://www.w3.org/2000/xmlns/" なのに,
28
- # QName または接頭辞が "xmlns" ではないとき例外発生.
29
- # NOT_SUPPORTED_ERR: Always thrown if the current document does not support the "XML" feature,
30
- # since namespaces were defined by XML.
31
- def initialize( owner_document, namespace_uri, qualified_name )
32
- begin
33
- super( owner_document, qualified_name )
34
- rescue DOMException => err
35
- if err.code == DOMException::INVALID_CHARACTER_ERR then
36
- raise DOMException.new( DOMException::INVALID_CHARACTER_ERR,
37
- 'The specified qualified name "' + qualified_name + '" is not an XML name.' )
38
- else
39
- raise err
40
- end
41
- end
42
- init_mod_namespaceuri_manageable( namespace_uri, qualified_name )
43
- end
44
-
45
- end
46
- end
47
- end
@@ -1,34 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require "vcdom/minidom/node"
4
- require "vcdom/minidom/character_data"
5
- require "vcdom/minidom/mod_child_node"
6
- require "vcdom/minidom/dom_exception"
7
-
8
- module VCDOM
9
- module MiniDOM
10
- class CDATASection < CharacterData
11
-
12
- # nodeType of type unsigned short, readonly
13
- # A code representing the type of the underlying object, as defined above.
14
- def node_type
15
- return Node::CDATA_SECTION_NODE
16
- end
17
-
18
- # nodeName of type DOMString, readonly
19
- # The name of this node, depending on its type; see the table above.
20
- #
21
- # Interface nodeName
22
- # ------------------------------------------------------------
23
- # CDATASection "#cdata-section"
24
- def node_name
25
- return "#cdata-section"
26
- end
27
-
28
- def initialize( owner_document, value )
29
- super( owner_document, value )
30
- end
31
-
32
- end
33
- end
34
- end
@@ -1,263 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require "vcdom/minidom/node"
4
- require "vcdom/minidom/mod_child_node"
5
- require "vcdom/minidom/dom_exception"
6
-
7
- module VCDOM
8
- module MiniDOM
9
- class CharacterData < Node
10
-
11
- include ModChildNode
12
-
13
- # data of type DOMString
14
- #
15
- # The character data of the node that implements this interface.
16
- # The DOM implementation may not put arbitrary limits on the amount of
17
- # data that may be stored in a CharacterData node.
18
- # However, implementation limits may mean that the entirety of a node's
19
- # data may not fit into a single DOMString.
20
- # In such cases, the user may call substringData to retrieve the data in
21
- # appropriately sized pieces.
22
- #
23
- # Exceptions on setting
24
- # DOMException NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
25
- # Exceptions on retrieval
26
- # DOMException DOMSTRING_SIZE_ERR: Raised when it would return more characters than fit in a DOMString variable on the implementation platform.
27
- def data
28
- return @data
29
- end
30
- def data=( value )
31
- if self.is_readonly then
32
- raise DOMException.new( DOMException::NO_MODIFICATION_ALLOWED_ERR,
33
- 'This node is readonly.' )
34
- end
35
- @data = value
36
- end
37
-
38
- # nodeValue of type DOMString
39
- # The value of this node, depending on its type; see the table above.
40
- # When it is defined to be null, setting it has no effect, including if the node is read-only.
41
- #
42
- # Interface nodeValue
43
- # ------------------------------------------------------------------------------------------------
44
- # Text same as CharacterData.data, the content of the text node
45
- #
46
- # Exceptions on setting
47
- # DOMException
48
- # NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly and
49
- # if it is not defined to be null.
50
- # Exceptions on retrieval
51
- # DOMException
52
- # DOMSTRING_SIZE_ERR: Raised when it would return more characters than
53
- # fit in a DOMString variable on the implementation platform.
54
- #
55
- # Attr, PI, CharacterData ( = CDATASection, Comment, Text ) でオーバーロード
56
- alias :node_value :data
57
- alias :node_value= :data=
58
-
59
-
60
- # ===== Attributes =====
61
-
62
- # length of type unsigned long, readonly
63
- #
64
- # The number of 16-bit units that are available through data and the substringData method below.
65
- # This may have the value zero, i.e., CharacterData nodes may be empty.
66
- def length
67
- count = 0
68
- while /\A.{#{count}}/mu =~ @data do
69
- count += 1
70
- end
71
- count -= 1
72
- return count
73
- end
74
-
75
- # ===== Methods =====
76
-
77
- # appendData
78
- #
79
- # Append the string to the end of the character data of the node.
80
- # Upon success, data provides access to the concatenation of data and the DOMString specified.
81
- #
82
- # Parameters
83
- # arg of type DOMString
84
- # The DOMString to append.
85
- # Exceptions
86
- # DOMException
87
- # NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
88
- # No Return Value
89
- def append_data( arg )
90
- if self.is_readonly then
91
- raise DOMException.new( DOMException::NO_MODIFICATION_ALLOWED_ERR,
92
- 'This node is readonly.' )
93
- end
94
- @data = @data + arg
95
- return nil
96
- end
97
-
98
- # deleteData
99
- # Remove a range of 16-bit units from the node. Upon success, data and length
100
- # reflect the change.
101
- #
102
- # Parameters
103
- # offset of type unsigned long
104
- # The offset from which to start removing.
105
- # count of type unsigned long
106
- # The number of 16-bit units to delete. If the sum of offset and count
107
- # exceeds length then all 16-bit units from offset to the end of the data
108
- # are deleted.
109
- # Exceptions
110
- # DOMException
111
- # INDEX_SIZE_ERR: Raised if the specified offset is negative or greater
112
- # than the number of 16-bit units in data, or if the specified
113
- # count is negative.
114
- # NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
115
- # No Return Value
116
- def delete_data( offset, count )
117
- if self.is_readonly then
118
- raise DOMException.new( DOMException::NO_MODIFICATION_ALLOWED_ERR,
119
- 'This node is readonly.' )
120
- end
121
- begin
122
- substrs = split( offset, count )
123
- rescue DOMException => err
124
- raise DOMException.new( err )
125
- end
126
- @data = substrs[0] + substrs[2]
127
- return nil
128
- end
129
-
130
- # insertData
131
- #
132
- # Insert a string at the specified 16-bit unit offset.
133
- #
134
- # Parameters
135
- # offset of type unsigned long
136
- # The character offset at which to insert.
137
- # arg of type DOMString
138
- # The DOMString to insert.
139
- # Exceptions
140
- # DOMException
141
- # INDEX_SIZE_ERR: Raised if the specified offset is negative or greater
142
- # than the number of 16-bit units in data.
143
- # NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
144
- # No Return Value
145
- def insert_data( offset, arg )
146
- if self.is_readonly then
147
- raise DOMException.new( DOMException::NO_MODIFICATION_ALLOWED_ERR,
148
- 'This node is readonly.' )
149
- end
150
- begin
151
- substrs = split( offset )
152
- rescue DOMException => err
153
- raise DOMException.new( err )
154
- end
155
- @data = substrs[0] + arg + substrs[1]
156
- return nil
157
- end
158
-
159
- # replaceData
160
- #
161
- # Replace the characters starting at the specified 16-bit unit offset with
162
- # the specified string.
163
- #
164
- # Parameters
165
- # offset of type unsigned long
166
- # The offset from which to start replacing.
167
- # count of type unsigned long
168
- # The number of 16-bit units to replace. If the sum of offset and count
169
- # exceeds length, then all 16-bit units to the end of the data are replaced;
170
- # (i.e., the effect is the same as a remove method call with the same range,
171
- # followed by an append method invocation).
172
- # arg of type DOMString
173
- # The DOMString with which the range must be replaced.
174
- # Exceptions
175
- # DOMException
176
- # INDEX_SIZE_ERR: Raised if the specified offset is negative or greater
177
- # than the number of 16-bit units in data, or if the specified count
178
- # is negative.
179
- # NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
180
- # No Return Value
181
- def replace_data( offset, count, arg )
182
- if self.is_readonly then
183
- raise DOMException.new( DOMException::NO_MODIFICATION_ALLOWED_ERR,
184
- 'This node is readonly.' )
185
- end
186
- begin
187
- substrs = split( offset, count )
188
- rescue DOMException => err
189
- raise DOMException.new( err )
190
- end
191
- @data = substrs[0] + arg + substrs[2]
192
- return nil
193
- end
194
-
195
- # substringData
196
- #
197
- # Extracts a range of data from the node.
198
- #
199
- # Parameters
200
- # offset of type unsigned long
201
- # Start offset of substring to extract.
202
- # count of type unsigned long
203
- # The number of 16-bit units to extract.
204
- # Return Value
205
- # DOMString
206
- # The specified substring. If the sum of offset and count exceeds the length,
207
- # then all 16-bit units to the end of the data are returned.
208
- # Exceptions
209
- # DOMException
210
- # INDEX_SIZE_ERR: Raised if the specified offset is negative or greater than
211
- # the number of 16-bit units in data, or if the specified count is
212
- # negative.
213
- # DOMSTRING_SIZE_ERR: Raised if the specified range of text does not fit
214
- # into a DOMString.
215
- def substring_data( offset, count )
216
- begin
217
- substrs = split( offset, count )
218
- rescue DOMException => err
219
- raise DOMException.new( err )
220
- end
221
- return substrs[1]
222
- end
223
-
224
-
225
- def initialize( owner_document, value )
226
- super( owner_document )
227
- init_mod_child_node()
228
- @data = value
229
- end
230
-
231
- private
232
- def split( offset, count = nil )
233
- if offset < 0 then
234
- raise DOMException.new( DOMException::INDEX_SIZE_ERR,
235
- 'The specified offset is negative.' )
236
- end
237
- if /\A(.{#{offset}})(.*)\Z/mu =~ @data then
238
- substr1 = ( $1 or '' )
239
- substr2 = ( $2 or '' )
240
- else
241
- raise DOMException.new( DOMException::INDEX_SIZE_ERR,
242
- 'The specified offset is greater than the number of Character data.' )
243
- end
244
- if count.nil? then
245
- return [substr1, substr2]
246
- else
247
- if count < 0 then
248
- raise DOMException.new( DOMException::INDEX_SIZE_ERR,
249
- 'The specified count is negative.' )
250
- end
251
- if /\A(.{#{count}})(.*)\Z/mu =~ substr2 then
252
- substr2 = ( $1 or '' )
253
- substr3 = ( $2 or '' )
254
- else
255
- substr3 = ''
256
- end
257
- return [substr1, substr2, substr3]
258
- end
259
- end
260
-
261
- end
262
- end
263
- end
@@ -1,34 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require "vcdom/minidom/node"
4
- require "vcdom/minidom/character_data"
5
- require "vcdom/minidom/mod_child_node"
6
- require "vcdom/minidom/dom_exception"
7
-
8
- module VCDOM
9
- module MiniDOM
10
- class Comment < CharacterData
11
-
12
- # nodeType of type unsigned short, readonly
13
- # A code representing the type of the underlying object, as defined above.
14
- def node_type
15
- return Node::COMMENT_NODE
16
- end
17
-
18
- # nodeName of type DOMString, readonly
19
- # The name of this node, depending on its type; see the table above.
20
- #
21
- # Interface nodeName
22
- # ------------------------------------------------------------
23
- # Comment "#comment"
24
- def node_name
25
- return "#comment"
26
- end
27
-
28
- def initialize( owner_document, value )
29
- super( owner_document, value )
30
- end
31
-
32
- end
33
- end
34
- end