diff options
author | jsharda <jsharda@ncsu.edu> | 2015-11-25 21:30:36 -0500 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2015-12-04 16:32:53 -0500 |
commit | a840a23990fbca4ce9572e729d9f390f3d991390 (patch) | |
tree | bfb7b1e175545f5b730da951ad21349698804f21 /components/script/dom/servoxmlparser.rs | |
parent | 2cfcc26d9e5cc732a7594f0c0d96d4174c6b0a8a (diff) | |
download | servo-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.rs | 28 |
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, |