diff options
Diffstat (limited to 'components/script/dom/servoparser/xml.rs')
-rw-r--r-- | components/script/dom/servoparser/xml.rs | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/components/script/dom/servoparser/xml.rs b/components/script/dom/servoparser/xml.rs index 616263651c3..96de50f293d 100644 --- a/components/script/dom/servoparser/xml.rs +++ b/components/script/dom/servoparser/xml.rs @@ -16,8 +16,9 @@ use dom::element::{Element, ElementCreator}; use dom::htmlscriptelement::HTMLScriptElement; use dom::node::Node; use dom::processinginstruction::ProcessingInstruction; -use dom::text::Text; +use dom::virtualmethods::vtable_for; use html5ever::tokenizer::buffer_queue::BufferQueue; +use html5ever::tree_builder::{NodeOrText as H5eNodeOrText}; use html5ever_atoms::{Prefix, QualName}; use js::jsapi::JSTracer; use servo_url::ServoUrl; @@ -42,7 +43,7 @@ impl Tokenizer { script: Default::default(), }; - let tb = XmlTreeBuilder::new(sink); + let tb = XmlTreeBuilder::new(sink, Default::default()); let tok = XmlTokenizer::new(tb, Default::default()); Tokenizer { @@ -100,9 +101,14 @@ struct Sink { script: MutNullableJS<HTMLScriptElement>, } -impl<'a> TreeSink for Sink { +impl TreeSink for Sink { + type Output = Self; type Handle = JS<Node>; + fn finish(self) -> Self { + self + } + fn parse_error(&mut self, msg: Cow<'static, str>) { debug!("Parse error: {}", msg); } @@ -128,8 +134,9 @@ impl<'a> TreeSink for Sink { ns: name.namespace_url, local: name.local, }; + //TODO: Add ability to track lines to API of xml5ever let elem = Element::create(name, prefix, &*self.document, - ElementCreator::ParserCreated); + ElementCreator::ParserCreated(1)); for attr in attrs { let name = QualName { @@ -149,14 +156,10 @@ impl<'a> TreeSink for Sink { fn append(&mut self, parent: JS<Node>, child: NodeOrText<JS<Node>>) { let child = 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) - } + NodeOrText::AppendNode(n) => H5eNodeOrText::AppendNode(n), + NodeOrText::AppendText(s) => H5eNodeOrText::AppendText(s), }; - assert!(parent.AppendChild(&child).is_ok()); + super::insert(&*parent, None, child); } fn append_doctype_to_document(&mut self, name: StrTendril, public_id: StrTendril, @@ -191,4 +194,9 @@ impl<'a> TreeSink for Sink { NextParserState::Continue } } + + fn pop(&mut self, node: Self::Handle) { + let node = Root::from_ref(&*node); + vtable_for(&node).pop(); + } } |