nokogiri 1.11.1-java → 1.11.2-java
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.
- checksums.yaml +4 -4
- data/LICENSE-DEPENDENCIES.md +12 -12
- data/LICENSE.md +1 -1
- data/README.md +20 -15
- data/ext/java/nokogiri/EncodingHandler.java +78 -59
- data/ext/java/nokogiri/HtmlDocument.java +137 -114
- data/ext/java/nokogiri/HtmlElementDescription.java +104 -87
- data/ext/java/nokogiri/HtmlEntityLookup.java +31 -26
- data/ext/java/nokogiri/HtmlSaxParserContext.java +220 -192
- data/ext/java/nokogiri/HtmlSaxPushParser.java +164 -139
- data/ext/java/nokogiri/NokogiriService.java +597 -526
- data/ext/java/nokogiri/XmlAttr.java +120 -96
- data/ext/java/nokogiri/XmlAttributeDecl.java +97 -76
- data/ext/java/nokogiri/XmlCdata.java +35 -26
- data/ext/java/nokogiri/XmlComment.java +48 -37
- data/ext/java/nokogiri/XmlDocument.java +642 -540
- data/ext/java/nokogiri/XmlDocumentFragment.java +127 -107
- data/ext/java/nokogiri/XmlDtd.java +450 -384
- data/ext/java/nokogiri/XmlElement.java +25 -18
- data/ext/java/nokogiri/XmlElementContent.java +345 -286
- data/ext/java/nokogiri/XmlElementDecl.java +126 -95
- data/ext/java/nokogiri/XmlEntityDecl.java +121 -97
- data/ext/java/nokogiri/XmlEntityReference.java +51 -42
- data/ext/java/nokogiri/XmlNamespace.java +177 -145
- data/ext/java/nokogiri/XmlNode.java +1843 -1588
- data/ext/java/nokogiri/XmlNodeSet.java +361 -299
- data/ext/java/nokogiri/XmlProcessingInstruction.java +49 -39
- data/ext/java/nokogiri/XmlReader.java +513 -418
- data/ext/java/nokogiri/XmlRelaxng.java +91 -78
- data/ext/java/nokogiri/XmlSaxParserContext.java +330 -285
- data/ext/java/nokogiri/XmlSaxPushParser.java +229 -190
- data/ext/java/nokogiri/XmlSchema.java +328 -263
- data/ext/java/nokogiri/XmlSyntaxError.java +113 -83
- data/ext/java/nokogiri/XmlText.java +57 -46
- data/ext/java/nokogiri/XmlXpathContext.java +240 -206
- data/ext/java/nokogiri/XsltStylesheet.java +282 -239
- data/ext/java/nokogiri/internals/ClosedStreamException.java +5 -2
- data/ext/java/nokogiri/internals/HtmlDomParserContext.java +199 -168
- data/ext/java/nokogiri/internals/IgnoreSchemaErrorsErrorHandler.java +17 -10
- data/ext/java/nokogiri/internals/NokogiriBlockingQueueInputStream.java +43 -16
- data/ext/java/nokogiri/internals/NokogiriDomParser.java +65 -50
- data/ext/java/nokogiri/internals/NokogiriEntityResolver.java +107 -88
- data/ext/java/nokogiri/internals/NokogiriErrorHandler.java +25 -18
- data/ext/java/nokogiri/internals/NokogiriHandler.java +316 -254
- data/ext/java/nokogiri/internals/NokogiriHelpers.java +738 -622
- data/ext/java/nokogiri/internals/NokogiriNamespaceCache.java +186 -143
- data/ext/java/nokogiri/internals/NokogiriNamespaceContext.java +83 -68
- data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler.java +66 -49
- data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler4NekoHtml.java +86 -69
- data/ext/java/nokogiri/internals/NokogiriStrictErrorHandler.java +44 -29
- data/ext/java/nokogiri/internals/NokogiriXPathFunction.java +118 -101
- data/ext/java/nokogiri/internals/NokogiriXPathFunctionResolver.java +34 -24
- data/ext/java/nokogiri/internals/NokogiriXPathVariableResolver.java +25 -17
- data/ext/java/nokogiri/internals/NokogiriXsltErrorListener.java +57 -42
- data/ext/java/nokogiri/internals/ParserContext.java +206 -179
- data/ext/java/nokogiri/internals/ReaderNode.java +478 -371
- data/ext/java/nokogiri/internals/SaveContextVisitor.java +822 -707
- data/ext/java/nokogiri/internals/SchemaErrorHandler.java +28 -19
- data/ext/java/nokogiri/internals/XalanDTMManagerPatch.java +129 -123
- data/ext/java/nokogiri/internals/XmlDeclHandler.java +5 -4
- data/ext/java/nokogiri/internals/XmlDomParserContext.java +208 -177
- data/ext/java/nokogiri/internals/XmlSaxParser.java +24 -17
- data/ext/java/nokogiri/internals/c14n/AttrCompare.java +71 -68
- data/ext/java/nokogiri/internals/c14n/C14nHelper.java +137 -118
- data/ext/java/nokogiri/internals/c14n/CanonicalFilter.java +27 -21
- data/ext/java/nokogiri/internals/c14n/CanonicalizationException.java +74 -61
- data/ext/java/nokogiri/internals/c14n/Canonicalizer.java +230 -205
- data/ext/java/nokogiri/internals/c14n/Canonicalizer11.java +572 -547
- data/ext/java/nokogiri/internals/c14n/Canonicalizer11_OmitComments.java +17 -10
- data/ext/java/nokogiri/internals/c14n/Canonicalizer11_WithComments.java +17 -10
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315.java +323 -302
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315Excl.java +232 -219
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315ExclOmitComments.java +22 -15
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315ExclWithComments.java +23 -16
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315OmitComments.java +23 -16
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315WithComments.java +22 -15
- data/ext/java/nokogiri/internals/c14n/CanonicalizerBase.java +575 -545
- data/ext/java/nokogiri/internals/c14n/CanonicalizerPhysical.java +141 -120
- data/ext/java/nokogiri/internals/c14n/CanonicalizerSpi.java +39 -38
- data/ext/java/nokogiri/internals/c14n/Constants.java +13 -10
- data/ext/java/nokogiri/internals/c14n/ElementProxy.java +279 -247
- data/ext/java/nokogiri/internals/c14n/HelperNodeList.java +66 -53
- data/ext/java/nokogiri/internals/c14n/IgnoreAllErrorHandler.java +44 -37
- data/ext/java/nokogiri/internals/c14n/InclusiveNamespaces.java +135 -120
- data/ext/java/nokogiri/internals/c14n/InvalidCanonicalizerException.java +59 -48
- data/ext/java/nokogiri/internals/c14n/NameSpaceSymbTable.java +384 -334
- data/ext/java/nokogiri/internals/c14n/NodeFilter.java +25 -24
- data/ext/java/nokogiri/internals/c14n/UtfHelpper.java +151 -140
- data/ext/java/nokogiri/internals/c14n/XMLUtils.java +456 -423
- data/ext/java/nokogiri/internals/dom2dtm/DOM2DTM.java +1466 -1500
- data/ext/java/nokogiri/internals/dom2dtm/DOM2DTMdefaultNamespaceDeclarationNode.java +626 -570
- data/ext/nokogiri/depend +34 -474
- data/ext/nokogiri/extconf.rb +253 -183
- data/ext/nokogiri/html_document.c +10 -15
- data/ext/nokogiri/html_element_description.c +84 -71
- data/ext/nokogiri/html_entity_lookup.c +21 -16
- data/ext/nokogiri/html_sax_parser_context.c +66 -65
- data/ext/nokogiri/html_sax_push_parser.c +29 -27
- data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
- data/ext/nokogiri/nokogiri.c +171 -63
- data/ext/nokogiri/test_global_handlers.c +3 -4
- data/ext/nokogiri/xml_attr.c +15 -15
- data/ext/nokogiri/xml_attribute_decl.c +18 -18
- data/ext/nokogiri/xml_cdata.c +13 -18
- data/ext/nokogiri/xml_comment.c +19 -26
- data/ext/nokogiri/xml_document.c +221 -164
- data/ext/nokogiri/xml_document_fragment.c +13 -15
- data/ext/nokogiri/xml_dtd.c +54 -48
- data/ext/nokogiri/xml_element_content.c +30 -27
- data/ext/nokogiri/xml_element_decl.c +22 -22
- data/ext/nokogiri/xml_encoding_handler.c +17 -11
- data/ext/nokogiri/xml_entity_decl.c +32 -30
- data/ext/nokogiri/xml_entity_reference.c +16 -18
- data/ext/nokogiri/xml_namespace.c +56 -49
- data/ext/nokogiri/xml_node.c +338 -286
- data/ext/nokogiri/xml_node_set.c +168 -156
- data/ext/nokogiri/xml_processing_instruction.c +17 -19
- data/ext/nokogiri/xml_reader.c +191 -157
- data/ext/nokogiri/xml_relax_ng.c +29 -23
- data/ext/nokogiri/xml_sax_parser.c +117 -112
- data/ext/nokogiri/xml_sax_parser_context.c +100 -85
- data/ext/nokogiri/xml_sax_push_parser.c +34 -27
- data/ext/nokogiri/xml_schema.c +48 -42
- data/ext/nokogiri/xml_syntax_error.c +21 -23
- data/ext/nokogiri/xml_text.c +13 -17
- data/ext/nokogiri/xml_xpath_context.c +134 -127
- data/ext/nokogiri/xslt_stylesheet.c +157 -157
- data/lib/nokogiri.rb +1 -22
- data/lib/nokogiri/css/parser.rb +1 -1
- data/lib/nokogiri/extension.rb +26 -0
- data/lib/nokogiri/html/document_fragment.rb +15 -15
- data/lib/nokogiri/nokogiri.jar +0 -0
- data/lib/nokogiri/version/constant.rb +1 -1
- data/lib/nokogiri/version/info.rb +31 -8
- data/lib/nokogiri/xml/document.rb +31 -11
- data/lib/nokogiri/xml/node.rb +38 -42
- data/lib/nokogiri/xml/reader.rb +2 -9
- data/lib/nokogiri/xml/xpath.rb +1 -3
- data/lib/nokogiri/xml/xpath/syntax_error.rb +1 -1
- metadata +7 -8
- data/ext/nokogiri/xml_io.c +0 -63
- data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
@@ -17,10 +17,10 @@
|
|
17
17
|
* distribute, sublicense, and/or sell copies of the Software, and to
|
18
18
|
* permit persons to whom the Software is furnished to do so, subject to
|
19
19
|
* the following conditions:
|
20
|
-
*
|
20
|
+
*
|
21
21
|
* The above copyright notice and this permission notice shall be
|
22
22
|
* included in all copies or substantial portions of the Software.
|
23
|
-
*
|
23
|
+
*
|
24
24
|
* THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
25
25
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
26
26
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
@@ -47,55 +47,64 @@ import org.w3c.dom.Node;
|
|
47
47
|
|
48
48
|
/**
|
49
49
|
* Class for Nokogiri::XML::EntityReference
|
50
|
-
*
|
50
|
+
*
|
51
51
|
* @author sergio
|
52
52
|
* @author Patrick Mahoney <pat@polycrystal.org>
|
53
53
|
* @author Yoko Harada <yokolet@gmail.com>
|
54
54
|
*/
|
55
|
-
@JRubyClass(name="Nokogiri::XML::EntityReference", parent="Nokogiri::XML::Node")
|
56
|
-
public class XmlEntityReference extends XmlNode
|
55
|
+
@JRubyClass(name = "Nokogiri::XML::EntityReference", parent = "Nokogiri::XML::Node")
|
56
|
+
public class XmlEntityReference extends XmlNode
|
57
|
+
{
|
57
58
|
|
58
|
-
|
59
|
-
|
60
|
-
|
59
|
+
public
|
60
|
+
XmlEntityReference(Ruby ruby, RubyClass klazz)
|
61
|
+
{
|
62
|
+
super(ruby, klazz);
|
63
|
+
}
|
64
|
+
|
65
|
+
public
|
66
|
+
XmlEntityReference(Ruby ruby, RubyClass klass, Node node)
|
67
|
+
{
|
68
|
+
super(ruby, klass, node);
|
69
|
+
}
|
61
70
|
|
62
|
-
|
63
|
-
|
71
|
+
protected void
|
72
|
+
init(ThreadContext context, IRubyObject[] args)
|
73
|
+
{
|
74
|
+
if (args.length < 2) {
|
75
|
+
throw context.runtime.newArgumentError(args.length, 2);
|
64
76
|
}
|
65
77
|
|
66
|
-
|
67
|
-
|
68
|
-
throw context.runtime.newArgumentError(args.length, 2);
|
69
|
-
}
|
78
|
+
IRubyObject doc = args[0];
|
79
|
+
IRubyObject name = args[1];
|
70
80
|
|
71
|
-
|
72
|
-
|
81
|
+
Document document = ((XmlNode) doc).getOwnerDocument();
|
82
|
+
// FIXME: disable error checking as a workaround for #719. this depends on the internals of Xerces.
|
83
|
+
CoreDocumentImpl internalDocument = (CoreDocumentImpl) document;
|
84
|
+
boolean oldErrorChecking = internalDocument.getErrorChecking();
|
85
|
+
internalDocument.setErrorChecking(false);
|
86
|
+
Node node = document.createEntityReference(rubyStringToString(name));
|
87
|
+
internalDocument.setErrorChecking(oldErrorChecking);
|
88
|
+
setNode(context.runtime, node);
|
89
|
+
}
|
73
90
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
if (nokoNode instanceof XmlNode) {
|
91
|
-
XmlNode cur = (XmlNode) nokoNode;
|
92
|
-
cur.accept(context, visitor);
|
93
|
-
} else if (nokoNode instanceof XmlNamespace) {
|
94
|
-
XmlNamespace cur = (XmlNamespace) nokoNode;
|
95
|
-
cur.accept(context, visitor);
|
96
|
-
}
|
97
|
-
child = child.getNextSibling();
|
98
|
-
}
|
99
|
-
visitor.leave(node);
|
91
|
+
@Override
|
92
|
+
public void
|
93
|
+
accept(ThreadContext context, SaveContextVisitor visitor)
|
94
|
+
{
|
95
|
+
visitor.enter(node);
|
96
|
+
Node child = node.getFirstChild();
|
97
|
+
while (child != null) {
|
98
|
+
IRubyObject nokoNode = getCachedNodeOrCreate(context.getRuntime(), child);
|
99
|
+
if (nokoNode instanceof XmlNode) {
|
100
|
+
XmlNode cur = (XmlNode) nokoNode;
|
101
|
+
cur.accept(context, visitor);
|
102
|
+
} else if (nokoNode instanceof XmlNamespace) {
|
103
|
+
XmlNamespace cur = (XmlNamespace) nokoNode;
|
104
|
+
cur.accept(context, visitor);
|
105
|
+
}
|
106
|
+
child = child.getNextSibling();
|
100
107
|
}
|
108
|
+
visitor.leave(node);
|
109
|
+
}
|
101
110
|
}
|
@@ -17,10 +17,10 @@
|
|
17
17
|
* distribute, sublicense, and/or sell copies of the Software, and to
|
18
18
|
* permit persons to whom the Software is furnished to do so, subject to
|
19
19
|
* the following conditions:
|
20
|
-
*
|
20
|
+
*
|
21
21
|
* The above copyright notice and this permission notice shall be
|
22
22
|
* included in all copies or substantial portions of the Software.
|
23
|
-
*
|
23
|
+
*
|
24
24
|
* THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
25
25
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
26
26
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
@@ -50,150 +50,182 @@ import org.w3c.dom.Node;
|
|
50
50
|
|
51
51
|
/**
|
52
52
|
* Class for Nokogiri::XML::Namespace
|
53
|
-
*
|
53
|
+
*
|
54
54
|
* @author serabe
|
55
55
|
* @author Yoko Harada <yokolet@gmail.com>
|
56
56
|
*/
|
57
|
-
@JRubyClass(name="Nokogiri::XML::Namespace")
|
58
|
-
public class XmlNamespace extends RubyObject
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
57
|
+
@JRubyClass(name = "Nokogiri::XML::Namespace")
|
58
|
+
public class XmlNamespace extends RubyObject
|
59
|
+
{
|
60
|
+
private Attr attr;
|
61
|
+
private transient IRubyObject prefixRuby;
|
62
|
+
private transient IRubyObject hrefRuby;
|
63
|
+
private String prefix;
|
64
|
+
private String href;
|
65
|
+
|
66
|
+
public
|
67
|
+
XmlNamespace(Ruby runtime, RubyClass klazz)
|
68
|
+
{
|
69
|
+
super(runtime, klazz);
|
70
|
+
}
|
71
|
+
|
72
|
+
XmlNamespace(Ruby runtime, Attr attr, String prefix, String href, IRubyObject document)
|
73
|
+
{
|
74
|
+
this(runtime, attr, prefix, null, href, null, document);
|
75
|
+
}
|
76
|
+
|
77
|
+
private
|
78
|
+
XmlNamespace(Ruby runtime, Attr attr, String prefix, IRubyObject prefixRuby,
|
79
|
+
String href, IRubyObject hrefRuby, IRubyObject document)
|
80
|
+
{
|
81
|
+
super(runtime, getNokogiriClass(runtime, "Nokogiri::XML::Namespace"));
|
82
|
+
|
83
|
+
this.attr = attr;
|
84
|
+
this.prefix = prefix;
|
85
|
+
this.href = href;
|
86
|
+
this.prefixRuby = prefixRuby;
|
87
|
+
this.hrefRuby = hrefRuby;
|
88
|
+
setInstanceVariable("@document", document);
|
89
|
+
}
|
90
|
+
|
91
|
+
public Node
|
92
|
+
getNode()
|
93
|
+
{
|
94
|
+
return attr;
|
95
|
+
}
|
96
|
+
|
97
|
+
public String
|
98
|
+
getPrefix()
|
99
|
+
{
|
100
|
+
return prefix;
|
101
|
+
}
|
102
|
+
|
103
|
+
boolean
|
104
|
+
hasPrefix(String prefix)
|
105
|
+
{
|
106
|
+
return prefix == null ? this.prefix == null : prefix.equals(this.prefix);
|
107
|
+
}
|
108
|
+
|
109
|
+
public String
|
110
|
+
getHref()
|
111
|
+
{
|
112
|
+
return href;
|
113
|
+
}
|
114
|
+
|
115
|
+
void
|
116
|
+
deleteHref()
|
117
|
+
{
|
118
|
+
href = "http://www.w3.org/XML/1998/namespace";
|
119
|
+
hrefRuby = null;
|
120
|
+
attr.getOwnerElement().removeAttributeNode(attr);
|
121
|
+
}
|
122
|
+
|
123
|
+
public static XmlNamespace
|
124
|
+
createFromAttr(Ruby runtime, Attr attr)
|
125
|
+
{
|
126
|
+
String prefixStr = getLocalNameForNamespace(attr.getName(), null);
|
127
|
+
IRubyObject prefix = prefixStr == null ? runtime.getNil() : null;
|
128
|
+
String hrefStr = attr.getValue();
|
129
|
+
// check namespace cache
|
130
|
+
XmlDocument xmlDocument = (XmlDocument) getCachedNodeOrCreate(runtime, attr.getOwnerDocument());
|
131
|
+
XmlNamespace namespace = xmlDocument.getNamespaceCache().get(prefixStr, hrefStr);
|
132
|
+
if (namespace != null) { return namespace; }
|
133
|
+
|
134
|
+
namespace = new XmlNamespace(runtime, attr, prefixStr, prefix, hrefStr, null, xmlDocument);
|
135
|
+
xmlDocument.getNamespaceCache().put(namespace, attr.getOwnerElement());
|
136
|
+
return namespace;
|
137
|
+
}
|
138
|
+
|
139
|
+
static XmlNamespace
|
140
|
+
createImpl(Node owner, IRubyObject prefix, String prefixStr, IRubyObject href, String hrefStr)
|
141
|
+
{
|
142
|
+
final Ruby runtime = prefix.getRuntime();
|
143
|
+
|
144
|
+
Document document = owner.getOwnerDocument();
|
145
|
+
XmlDocument xmlDocument = (XmlDocument) getCachedNodeOrCreate(runtime, document);
|
146
|
+
|
147
|
+
assert xmlDocument.getNamespaceCache().get(prefixStr, hrefStr) == null;
|
148
|
+
|
149
|
+
// creating XmlNamespace instance
|
150
|
+
String attrName = "xmlns";
|
151
|
+
if (prefixStr != null && !prefixStr.isEmpty()) { attrName = attrName + ':' + prefixStr; }
|
152
|
+
|
153
|
+
Attr attrNode = document.createAttribute(attrName);
|
154
|
+
attrNode.setNodeValue(hrefStr);
|
155
|
+
|
156
|
+
XmlNamespace namespace = new XmlNamespace(runtime, attrNode, prefixStr, prefix, hrefStr, href, xmlDocument);
|
157
|
+
xmlDocument.getNamespaceCache().put(namespace, owner);
|
158
|
+
return namespace;
|
159
|
+
}
|
160
|
+
|
161
|
+
// owner should be an Attr node
|
162
|
+
public static XmlNamespace
|
163
|
+
createDefaultNamespace(Ruby runtime, Node owner)
|
164
|
+
{
|
165
|
+
String prefixStr = owner.getPrefix();
|
166
|
+
String hrefStr = owner.getNamespaceURI();
|
167
|
+
// check namespace cache
|
168
|
+
XmlDocument xmlDocument = (XmlDocument) getCachedNodeOrCreate(runtime, owner.getOwnerDocument());
|
169
|
+
XmlNamespace namespace = xmlDocument.getNamespaceCache().get(prefixStr, hrefStr);
|
170
|
+
if (namespace != null) { return namespace; }
|
171
|
+
|
172
|
+
namespace = new XmlNamespace(runtime, (Attr) owner, prefixStr, hrefStr, xmlDocument);
|
173
|
+
xmlDocument.getNamespaceCache().put(namespace, owner);
|
174
|
+
return namespace;
|
175
|
+
}
|
176
|
+
|
177
|
+
/**
|
178
|
+
* Create and return a copy of this object.
|
179
|
+
*
|
180
|
+
* @return a clone of this object
|
181
|
+
*/
|
182
|
+
@Override
|
183
|
+
public Object
|
184
|
+
clone() throws CloneNotSupportedException
|
185
|
+
{
|
186
|
+
return super.clone();
|
187
|
+
}
|
188
|
+
|
189
|
+
public boolean
|
190
|
+
isEmpty()
|
191
|
+
{
|
192
|
+
return prefix == null && href == null;
|
193
|
+
}
|
194
|
+
|
195
|
+
@JRubyMethod
|
196
|
+
public IRubyObject
|
197
|
+
href(ThreadContext context)
|
198
|
+
{
|
199
|
+
if (hrefRuby == null) {
|
200
|
+
if (href == null) { return hrefRuby = context.nil; }
|
201
|
+
return hrefRuby = context.runtime.newString(href);
|
202
|
+
}
|
203
|
+
return hrefRuby;
|
204
|
+
}
|
205
|
+
|
206
|
+
@JRubyMethod
|
207
|
+
public IRubyObject
|
208
|
+
prefix(ThreadContext context)
|
209
|
+
{
|
210
|
+
if (prefixRuby == null) {
|
211
|
+
if (prefix == null) { return prefixRuby = context.nil; }
|
212
|
+
return prefixRuby = context.runtime.newString(prefix);
|
213
|
+
}
|
214
|
+
return prefixRuby;
|
215
|
+
}
|
216
|
+
|
217
|
+
public void
|
218
|
+
accept(ThreadContext context, SaveContextVisitor visitor)
|
219
|
+
{
|
220
|
+
String prefix = this.prefix;
|
221
|
+
if (prefix == null) { prefix = ""; }
|
222
|
+
String href = this.href;
|
223
|
+
if (href == null) { href = ""; }
|
224
|
+
String string = ' ' + prefix + '=' + '"' + href + '"';
|
225
|
+
visitor.enter(string);
|
226
|
+
visitor.leave(string);
|
227
|
+
// is below better?
|
228
|
+
//visitor.enter(attr);
|
229
|
+
//visitor.leave(attr);
|
230
|
+
}
|
199
231
|
}
|