aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/servoxmlparser.rs
diff options
context:
space:
mode:
authorjsharda <jsharda@ncsu.edu>2015-11-25 21:30:36 -0500
committerJosh Matthews <josh@joshmatthews.net>2015-12-04 16:32:53 -0500
commita840a23990fbca4ce9572e729d9f390f3d991390 (patch)
treebfb7b1e175545f5b730da951ad21349698804f21 /components/script/dom/servoxmlparser.rs
parent2cfcc26d9e5cc732a7594f0c0d96d4174c6b0a8a (diff)
downloadservo-a840a23990fbca4ce9572e729d9f390f3d991390.tar.gz
servo-a840a23990fbca4ce9572e729d9f390f3d991390.zip
Prepare infrastructure for XML parser.
Diffstat (limited to 'components/script/dom/servoxmlparser.rs')
-rw-r--r--components/script/dom/servoxmlparser.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/components/script/dom/servoxmlparser.rs b/components/script/dom/servoxmlparser.rs
index 9de29cb392d..987c43f4982 100644
--- a/components/script/dom/servoxmlparser.rs
+++ b/components/script/dom/servoxmlparser.rs
@@ -2,9 +2,37 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+use dom::bindings::js::{JS, Root};
use dom::bindings::reflector::Reflector;
+use dom::bindings::trace::JSTraceable;
+use dom::document::Document;
+use dom::node::Node;
+use dom::text::Text;
+use url::Url;
+use util::str::DOMString;
+use xml5ever::tree_builder::{NodeOrText, TreeSink};
#[must_root]
+#[derive(JSTraceable, HeapSizeOf)]
+pub struct Sink {
+ pub base_url: Option<Url>,
+ pub document: JS<Document>,
+}
+
+impl Sink {
+ #[allow(unrooted_must_root)] // method is only run at parse time
+ pub fn get_or_create(&self, child: NodeOrText<JS<Node>>) -> Root<Node> {
+ match child {
+ NodeOrText::AppendNode(n) => Root::from_ref(&*n),
+ NodeOrText::AppendText(t) => {
+ let s: String = t.into();
+ let text = Text::new(DOMString::from(s), &self.document);
+ Root::upcast(text)
+ }
+ }
+ }
+}
+#[must_root]
#[dom_struct]
pub struct ServoXMLParser {
reflector_: Reflector,