nokogiri 1.4.7-x86-mingw32 → 1.5.0-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of nokogiri might be problematic. Click here for more details.
- data/CHANGELOG.ja.rdoc +59 -1
- data/CHANGELOG.rdoc +51 -2
- data/Manifest.txt +66 -66
- data/README.ja.rdoc +4 -0
- data/README.rdoc +31 -3
- data/Rakefile +111 -135
- data/bin/nokogiri +1 -2
- data/ext/nokogiri/extconf.rb +9 -3
- data/ext/nokogiri/nokogiri.c +21 -3
- data/ext/nokogiri/nokogiri.h +0 -2
- data/ext/nokogiri/xml_node.c +0 -6
- data/ext/nokogiri/xml_relax_ng.c +0 -7
- data/ext/nokogiri/xml_sax_parser.c +9 -4
- data/ext/nokogiri/xslt_stylesheet.c +5 -1
- data/lib/nokogiri.rb +19 -25
- data/lib/nokogiri/1.8/nokogiri.so +0 -0
- data/lib/nokogiri/1.9/nokogiri.so +0 -0
- data/lib/nokogiri/css.rb +0 -1
- data/lib/nokogiri/html.rb +1 -0
- data/lib/nokogiri/html/document.rb +9 -2
- data/lib/nokogiri/html/element_description_defaults.rb +671 -0
- data/lib/nokogiri/version.rb +76 -31
- data/lib/nokogiri/xml/attribute_decl.rb +1 -1
- data/lib/nokogiri/xml/builder.rb +7 -0
- data/lib/nokogiri/xml/document.rb +17 -1
- data/lib/nokogiri/xml/document_fragment.rb +14 -0
- data/lib/nokogiri/xml/dtd.rb +1 -1
- data/lib/nokogiri/xml/element_decl.rb +1 -1
- data/lib/nokogiri/xml/entity_decl.rb +1 -1
- data/lib/nokogiri/xml/node.rb +39 -15
- data/lib/nokogiri/xml/node/save_options.rb +14 -5
- data/lib/nokogiri/xml/node_set.rb +7 -0
- data/lib/nokogiri/xml/reader.rb +2 -2
- data/lib/nokogiri/xml/sax/document.rb +2 -2
- data/lib/nokogiri/xslt/stylesheet.rb +1 -1
- data/nokogiri_help_responses.md +40 -0
- data/tasks/cross_compile.rb +134 -155
- data/tasks/nokogiri.org.rb +18 -0
- data/tasks/test.rb +2 -2
- data/test/files/metacharset.html +10 -0
- data/test/files/noencoding.html +47 -0
- data/test/helper.rb +2 -1
- data/test/html/sax/test_parser.rb +22 -5
- data/test/html/test_document.rb +21 -2
- data/test/html/test_document_encoding.rb +9 -1
- data/test/html/test_document_fragment.rb +5 -3
- data/test/html/test_element_description.rb +4 -2
- data/test/test_memory_leak.rb +4 -39
- data/test/test_nokogiri.rb +14 -20
- data/test/test_reader.rb +12 -8
- data/test/xml/node/test_save_options.rb +10 -2
- data/test/xml/sax/test_parser.rb +14 -7
- data/test/xml/test_attribute_decl.rb +7 -3
- data/test/xml/test_builder.rb +17 -0
- data/test/xml/test_document.rb +31 -4
- data/test/xml/test_dtd.rb +13 -3
- data/test/xml/test_element_content.rb +1 -1
- data/test/xml/test_element_decl.rb +1 -1
- data/test/xml/test_entity_decl.rb +12 -10
- data/test/xml/test_namespace.rb +7 -5
- data/test/xml/test_node.rb +21 -10
- data/test/xml/test_node_reparenting.rb +16 -3
- data/test/xml/test_node_set.rb +34 -0
- data/test/xslt/test_custom_functions.rb +2 -2
- data/test/xslt/test_exception_handling.rb +37 -0
- metadata +110 -88
- data/lib/nokogiri/ffi/encoding_handler.rb +0 -42
- data/lib/nokogiri/ffi/html/document.rb +0 -28
- data/lib/nokogiri/ffi/html/element_description.rb +0 -81
- data/lib/nokogiri/ffi/html/entity_lookup.rb +0 -16
- data/lib/nokogiri/ffi/html/sax/parser_context.rb +0 -38
- data/lib/nokogiri/ffi/io_callbacks.rb +0 -42
- data/lib/nokogiri/ffi/libxml.rb +0 -420
- data/lib/nokogiri/ffi/structs/common_node.rb +0 -38
- data/lib/nokogiri/ffi/structs/html_elem_desc.rb +0 -24
- data/lib/nokogiri/ffi/structs/html_entity_desc.rb +0 -13
- data/lib/nokogiri/ffi/structs/xml_alloc.rb +0 -16
- data/lib/nokogiri/ffi/structs/xml_attr.rb +0 -20
- data/lib/nokogiri/ffi/structs/xml_attribute.rb +0 -27
- data/lib/nokogiri/ffi/structs/xml_buffer.rb +0 -16
- data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +0 -11
- data/lib/nokogiri/ffi/structs/xml_document.rb +0 -117
- data/lib/nokogiri/ffi/structs/xml_dtd.rb +0 -28
- data/lib/nokogiri/ffi/structs/xml_element.rb +0 -26
- data/lib/nokogiri/ffi/structs/xml_element_content.rb +0 -17
- data/lib/nokogiri/ffi/structs/xml_entity.rb +0 -32
- data/lib/nokogiri/ffi/structs/xml_enumeration.rb +0 -12
- data/lib/nokogiri/ffi/structs/xml_node.rb +0 -28
- data/lib/nokogiri/ffi/structs/xml_node_set.rb +0 -53
- data/lib/nokogiri/ffi/structs/xml_notation.rb +0 -11
- data/lib/nokogiri/ffi/structs/xml_ns.rb +0 -15
- data/lib/nokogiri/ffi/structs/xml_parser_context.rb +0 -20
- data/lib/nokogiri/ffi/structs/xml_parser_input.rb +0 -19
- data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +0 -14
- data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +0 -51
- data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +0 -124
- data/lib/nokogiri/ffi/structs/xml_schema.rb +0 -13
- data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +0 -31
- data/lib/nokogiri/ffi/structs/xml_text_reader.rb +0 -12
- data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +0 -38
- data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +0 -35
- data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +0 -20
- data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +0 -13
- data/lib/nokogiri/ffi/weak_bucket.rb +0 -40
- data/lib/nokogiri/ffi/xml/attr.rb +0 -41
- data/lib/nokogiri/ffi/xml/attribute_decl.rb +0 -27
- data/lib/nokogiri/ffi/xml/cdata.rb +0 -19
- data/lib/nokogiri/ffi/xml/comment.rb +0 -18
- data/lib/nokogiri/ffi/xml/document.rb +0 -174
- data/lib/nokogiri/ffi/xml/document_fragment.rb +0 -21
- data/lib/nokogiri/ffi/xml/dtd.rb +0 -67
- data/lib/nokogiri/ffi/xml/element_content.rb +0 -43
- data/lib/nokogiri/ffi/xml/element_decl.rb +0 -19
- data/lib/nokogiri/ffi/xml/entity_decl.rb +0 -36
- data/lib/nokogiri/ffi/xml/entity_reference.rb +0 -19
- data/lib/nokogiri/ffi/xml/namespace.rb +0 -44
- data/lib/nokogiri/ffi/xml/node.rb +0 -559
- data/lib/nokogiri/ffi/xml/node_set.rb +0 -150
- data/lib/nokogiri/ffi/xml/processing_instruction.rb +0 -20
- data/lib/nokogiri/ffi/xml/reader.rb +0 -236
- data/lib/nokogiri/ffi/xml/relax_ng.rb +0 -85
- data/lib/nokogiri/ffi/xml/sax/parser.rb +0 -143
- data/lib/nokogiri/ffi/xml/sax/parser_context.rb +0 -79
- data/lib/nokogiri/ffi/xml/sax/push_parser.rb +0 -51
- data/lib/nokogiri/ffi/xml/schema.rb +0 -109
- data/lib/nokogiri/ffi/xml/syntax_error.rb +0 -98
- data/lib/nokogiri/ffi/xml/text.rb +0 -18
- data/lib/nokogiri/ffi/xml/xpath.rb +0 -9
- data/lib/nokogiri/ffi/xml/xpath_context.rb +0 -153
- data/lib/nokogiri/ffi/xslt/stylesheet.rb +0 -77
- data/lib/nokogiri/version_warning.rb +0 -14
- data/test/ffi/test_document.rb +0 -35
@@ -1,38 +0,0 @@
|
|
1
|
-
module Nokogiri
|
2
|
-
module LibXML # :nodoc:
|
3
|
-
module CommonNode # :nodoc:
|
4
|
-
def document
|
5
|
-
p = self[:doc]
|
6
|
-
p.null? ? nil : LibXML::XmlDocumentCast.new(p)
|
7
|
-
end
|
8
|
-
|
9
|
-
def ruby_node_pointer
|
10
|
-
self[:_private]
|
11
|
-
end
|
12
|
-
|
13
|
-
def ruby_node_pointer=(value)
|
14
|
-
self[:_private] = value
|
15
|
-
end
|
16
|
-
|
17
|
-
def ruby_node
|
18
|
-
Nokogiri::WeakBucket.get_object(self)
|
19
|
-
end
|
20
|
-
|
21
|
-
def ruby_node= object
|
22
|
-
Nokogiri::WeakBucket.set_object(self, object)
|
23
|
-
end
|
24
|
-
|
25
|
-
def keep_reference_from_document! # equivalent to NOKOGIRI_ROOT_NODE
|
26
|
-
doc = self.document
|
27
|
-
raise "no document to add reference to" unless doc
|
28
|
-
LibXML.xmlXPathNodeSetAdd(doc.unlinked_nodes, self)
|
29
|
-
end
|
30
|
-
|
31
|
-
def keep_reference_from!(document) # equivalent to NOKOGIRI_ROOT_NSDEF
|
32
|
-
raise "no document to add reference to" unless document
|
33
|
-
LibXML.xmlXPathNodeSetAdd(document.unlinked_nodes, self)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module Nokogiri
|
2
|
-
module LibXML # :nodoc:
|
3
|
-
class HtmlElemDesc < FFI::Struct # :nodoc:
|
4
|
-
|
5
|
-
layout(
|
6
|
-
:name, :string,
|
7
|
-
:startTag, :char,
|
8
|
-
:endTag, :char,
|
9
|
-
:saveEndTag, :char,
|
10
|
-
:empty, :char,
|
11
|
-
:depr, :char,
|
12
|
-
:dtd, :char,
|
13
|
-
:isinline, :char,
|
14
|
-
:desc, :string,
|
15
|
-
:subelts, :pointer,
|
16
|
-
:defaultsubelt, :string,
|
17
|
-
:attrs_opt, :pointer,
|
18
|
-
:attrs_depr, :pointer,
|
19
|
-
:attrs_req, :pointer
|
20
|
-
)
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module Nokogiri
|
2
|
-
module LibXML # :nodoc:
|
3
|
-
#
|
4
|
-
# this class only exists to create a xmlFree() finalizer
|
5
|
-
#
|
6
|
-
class XmlAlloc < FFI::ManagedStruct # :nodoc:
|
7
|
-
|
8
|
-
layout :dummy, :int, 0 # to avoid @layout warnings
|
9
|
-
|
10
|
-
def self.release ptr
|
11
|
-
LibXML.xmlFree(ptr)
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module Nokogiri
|
2
|
-
module LibXML # :nodoc:
|
3
|
-
class XmlAttr < FFI::Struct # :nodoc:
|
4
|
-
|
5
|
-
layout(
|
6
|
-
:_private, :pointer,
|
7
|
-
:type, :int,
|
8
|
-
:name, :string,
|
9
|
-
:children, :pointer,
|
10
|
-
:last, :pointer,
|
11
|
-
:parent, :pointer,
|
12
|
-
:next, :pointer,
|
13
|
-
:prev, :pointer,
|
14
|
-
:doc, :pointer,
|
15
|
-
:ns, :pointer
|
16
|
-
)
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module Nokogiri
|
2
|
-
module LibXML # :nodoc:
|
3
|
-
class XmlAttribute < FFI::Struct # :nodoc:
|
4
|
-
include CommonNode
|
5
|
-
|
6
|
-
layout(
|
7
|
-
:_private, :long,
|
8
|
-
:type, :int,
|
9
|
-
:name, :string,
|
10
|
-
:children, :pointer,
|
11
|
-
:last, :pointer,
|
12
|
-
:parent, :pointer,
|
13
|
-
:next, :pointer,
|
14
|
-
:prev, :pointer,
|
15
|
-
:doc, :pointer,
|
16
|
-
|
17
|
-
:nexth, :pointer,
|
18
|
-
:atype, :int,
|
19
|
-
:def, :int,
|
20
|
-
:default_value, :string,
|
21
|
-
:tree, :pointer,
|
22
|
-
:prefix, :string,
|
23
|
-
:elem, :string
|
24
|
-
)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,117 +0,0 @@
|
|
1
|
-
module Nokogiri
|
2
|
-
module LibXML # :nodoc:
|
3
|
-
|
4
|
-
module XmlDocumentMixin # :nodoc:
|
5
|
-
def self.included(base)
|
6
|
-
base.class_eval do
|
7
|
-
|
8
|
-
layout(
|
9
|
-
:_private, :pointer,
|
10
|
-
:type, :int,
|
11
|
-
:name, :string,
|
12
|
-
:children, :pointer,
|
13
|
-
:last, :pointer,
|
14
|
-
:parent, :pointer,
|
15
|
-
:next, :pointer,
|
16
|
-
:prev, :pointer,
|
17
|
-
:doc, :pointer,
|
18
|
-
|
19
|
-
:compression, :int,
|
20
|
-
:standalone, :int,
|
21
|
-
:intSubset, :pointer,
|
22
|
-
:extSubset, :pointer,
|
23
|
-
:oldNs, :pointer,
|
24
|
-
:version, :string,
|
25
|
-
:encoding, :pointer,
|
26
|
-
:ids, :pointer,
|
27
|
-
:refs, :pointer,
|
28
|
-
:URL, :string
|
29
|
-
)
|
30
|
-
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def document
|
35
|
-
p = self[:doc]
|
36
|
-
p.null? ? nil : LibXML::XmlDocumentCast.new(p)
|
37
|
-
end
|
38
|
-
|
39
|
-
def ruby_node_pointer
|
40
|
-
tuple = self[:_private]
|
41
|
-
tuple.null? ? 0 : tuple.get_long(0)
|
42
|
-
end
|
43
|
-
|
44
|
-
def ruby_node_pointer=(value)
|
45
|
-
self[:_private].put_long(0, value)
|
46
|
-
end
|
47
|
-
|
48
|
-
def ruby_doc
|
49
|
-
Nokogiri::WeakBucket.get_object(self)
|
50
|
-
end
|
51
|
-
|
52
|
-
def ruby_doc=(object)
|
53
|
-
Nokogiri::WeakBucket.set_object(self, object)
|
54
|
-
end
|
55
|
-
|
56
|
-
def unlinked_nodes
|
57
|
-
LibXML::XmlNodeSetCast.new(self[:_private].get_pointer(LibXML.pointer_offset(1)))
|
58
|
-
end
|
59
|
-
|
60
|
-
def alloc_tuple
|
61
|
-
self[:_private] = LibXML.calloc(LibXML::POINTER_SIZE, 2)
|
62
|
-
self[:_private].put_pointer(LibXML.pointer_offset(1), LibXML.xmlXPathNodeSetCreate(nil))
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
#
|
67
|
-
# use at the point of creation, so we can be sure the document will be GCed properly
|
68
|
-
#
|
69
|
-
class XmlDocument < FFI::ManagedStruct # :nodoc:
|
70
|
-
include XmlDocumentMixin
|
71
|
-
|
72
|
-
def initialize(ptr)
|
73
|
-
super(ptr)
|
74
|
-
self.alloc_tuple
|
75
|
-
end
|
76
|
-
|
77
|
-
def self.release ptr
|
78
|
-
doc = LibXML::XmlDocumentCast.new(ptr)
|
79
|
-
func = LibXML.xmlDeregisterNodeDefault(nil)
|
80
|
-
begin
|
81
|
-
ns = LibXML::XmlNodeSetCast.new(doc[:_private].get_pointer(LibXML.pointer_offset(1)))
|
82
|
-
|
83
|
-
ns[:nodeNr].times do |j|
|
84
|
-
node_cstruct = LibXML::XmlNode.new(ns[:nodeTab].get_pointer(LibXML.pointer_offset(j)))
|
85
|
-
case node_cstruct[:type]
|
86
|
-
when Nokogiri::XML::Node::ATTRIBUTE_NODE
|
87
|
-
LibXML.xmlFreePropList(node_cstruct)
|
88
|
-
when Nokogiri::XML::Node::NAMESPACE_DECL
|
89
|
-
LibXML.xmlFree(node_cstruct)
|
90
|
-
else
|
91
|
-
LibXML.xmlAddChild(doc, node_cstruct) if node_cstruct[:parent].null?
|
92
|
-
end
|
93
|
-
end
|
94
|
-
LibXML::XmlNodeSet.release(ns.pointer)
|
95
|
-
|
96
|
-
LibXML.free(doc[:_private])
|
97
|
-
rescue
|
98
|
-
puts "Nokogiri::LibXML::XmlDocument.release: exception: '#{$!}'"
|
99
|
-
ensure
|
100
|
-
LibXML.xmlFreeDoc(ptr)
|
101
|
-
LibXML.xmlDeregisterNodeDefault(func)
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
#
|
107
|
-
# use when we don't want to cause the doc to be GCed
|
108
|
-
#
|
109
|
-
class XmlDocumentCast < FFI::Struct # :nodoc:
|
110
|
-
include XmlDocumentMixin
|
111
|
-
end
|
112
|
-
|
113
|
-
HtmlDocument = XmlDocument # implemented identically in libxml2.6
|
114
|
-
HtmlDocumentCast = XmlDocumentCast # implemented identically in libxml2.6
|
115
|
-
end
|
116
|
-
|
117
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module Nokogiri
|
2
|
-
module LibXML # :nodoc:
|
3
|
-
class XmlDtd < FFI::Struct # :nodoc:
|
4
|
-
|
5
|
-
layout(
|
6
|
-
:_private, :long, # actually a pointer we're casting as an integer
|
7
|
-
:type, :int,
|
8
|
-
:name, :string,
|
9
|
-
:children, :pointer,
|
10
|
-
:last, :pointer,
|
11
|
-
:parent, :pointer,
|
12
|
-
:next, :pointer,
|
13
|
-
:prev, :pointer,
|
14
|
-
:doc, :pointer,
|
15
|
-
|
16
|
-
:notations, :pointer,
|
17
|
-
:elements, :pointer,
|
18
|
-
:attributes, :pointer,
|
19
|
-
:entities, :pointer,
|
20
|
-
:external_id, :string,
|
21
|
-
:system_id, :string
|
22
|
-
)
|
23
|
-
|
24
|
-
include CommonNode
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module Nokogiri
|
2
|
-
# :stopdoc:
|
3
|
-
module LibXML
|
4
|
-
class XmlElement < FFI::Struct
|
5
|
-
include CommonNode
|
6
|
-
|
7
|
-
layout(
|
8
|
-
:_private, :long,
|
9
|
-
:type, :int,
|
10
|
-
:name, :string,
|
11
|
-
:children, :pointer,
|
12
|
-
:last, :pointer,
|
13
|
-
:parent, :pointer,
|
14
|
-
:next, :pointer,
|
15
|
-
:prev, :pointer,
|
16
|
-
:doc, :pointer,
|
17
|
-
|
18
|
-
:etype, :int,
|
19
|
-
:content, :pointer,
|
20
|
-
:properties, :pointer,
|
21
|
-
:prefix, :string
|
22
|
-
)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
# :startdoc:
|
26
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# :stopdoc:
|
2
|
-
module Nokogiri
|
3
|
-
module LibXML
|
4
|
-
class XmlElementContent < FFI::Struct
|
5
|
-
layout(
|
6
|
-
:type, :int,
|
7
|
-
:ocur, :int, # This is misspelled in the header file
|
8
|
-
:name, :string,
|
9
|
-
:c1, :pointer,
|
10
|
-
:c2, :pointer,
|
11
|
-
:parent,:pointer,
|
12
|
-
:prefix,:string
|
13
|
-
)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
# :startdoc:
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module Nokogiri
|
2
|
-
# :stopdoc:
|
3
|
-
module LibXML
|
4
|
-
class XmlEntity < FFI::Struct
|
5
|
-
include CommonNode
|
6
|
-
|
7
|
-
layout(
|
8
|
-
:_private, :long,
|
9
|
-
:type, :int,
|
10
|
-
:name, :string,
|
11
|
-
:children, :pointer,
|
12
|
-
:last, :pointer,
|
13
|
-
:parent, :pointer,
|
14
|
-
:next, :pointer,
|
15
|
-
:prev, :pointer,
|
16
|
-
:doc, :pointer,
|
17
|
-
|
18
|
-
:orig, :string,
|
19
|
-
:content, :string,
|
20
|
-
:length, :int,
|
21
|
-
:etype, :int,
|
22
|
-
:external_id, :string,
|
23
|
-
:system_id, :string,
|
24
|
-
:nexte, :pointer,
|
25
|
-
:uri, :string,
|
26
|
-
:owner, :int,
|
27
|
-
:checked, :int
|
28
|
-
)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
# :startdoc:
|
32
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module Nokogiri
|
2
|
-
module LibXML # :nodoc:
|
3
|
-
class XmlNode < FFI::Struct # :nodoc:
|
4
|
-
|
5
|
-
layout(
|
6
|
-
:_private, :long, # actually a pointer we're casting as an integer
|
7
|
-
:type, :int,
|
8
|
-
:name, :string,
|
9
|
-
:children, :pointer,
|
10
|
-
:last, :pointer,
|
11
|
-
:parent, :pointer,
|
12
|
-
:next, :pointer,
|
13
|
-
:prev, :pointer,
|
14
|
-
:doc, :pointer,
|
15
|
-
|
16
|
-
:ns, :pointer,
|
17
|
-
:content, :string,
|
18
|
-
:properties, :pointer,
|
19
|
-
:nsDef, :pointer,
|
20
|
-
:psvi, :pointer,
|
21
|
-
:line, :short
|
22
|
-
)
|
23
|
-
|
24
|
-
include CommonNode
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|