aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/servoparser/xml.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/servoparser/xml.rs')
-rw-r--r--components/script/dom/servoparser/xml.rs30
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();
+ }
}