diff options
author | ronak <ronak@localhost.localdomain> | 2015-12-03 17:30:17 -0500 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2015-12-04 16:37:13 -0500 |
commit | d38a1a0d032dfeabd5451c96f85280fd1fa1b830 (patch) | |
tree | 8f290554341c7f40ebd79fc2c2796be7ef7ba68c /components/script/parse/xml.rs | |
parent | 9d3b915cace62d1e6aaa22572a992316894edf76 (diff) | |
download | servo-d38a1a0d032dfeabd5451c96f85280fd1fa1b830.tar.gz servo-d38a1a0d032dfeabd5451c96f85280fd1fa1b830.zip |
Create and invoke XML parser for XML documents.
Diffstat (limited to 'components/script/parse/xml.rs')
-rw-r--r-- | components/script/parse/xml.rs | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/components/script/parse/xml.rs b/components/script/parse/xml.rs index 2c2f97d3a78..30cd5138348 100644 --- a/components/script/parse/xml.rs +++ b/components/script/parse/xml.rs @@ -6,7 +6,7 @@ use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; use dom::bindings::inheritance::Castable; -use dom::bindings::js::{JS, RootedReference}; +use dom::bindings::js::{JS, Root, RootedReference}; use dom::comment::Comment; use dom::document::Document; use dom::documenttype::DocumentType; @@ -14,7 +14,10 @@ use dom::element::{Element, ElementCreator}; use dom::node::Node; use dom::processinginstruction::ProcessingInstruction; use dom::servoxmlparser; +use dom::servoxmlparser::ServoXMLParser; +use dom::text::Text; use msg::constellation_msg::PipelineId; +use parse::Parser; use std::borrow::Cow; use string_cache::QualName; use tendril::StrTendril; @@ -61,8 +64,14 @@ impl<'a> TreeSink for servoxmlparser::Sink { } fn append(&mut self, parent: JS<Node>, child: NodeOrText<JS<Node>>) { - let child = self.get_or_create(child); - + 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) + } + }; assert!(parent.AppendChild(child.r()).is_ok()); } @@ -90,8 +99,14 @@ pub enum ParseContext { } -pub fn parse_xml(_document: &Document, - _input: DOMString, - _url: Url, - _context: ParseContext) { +pub fn parse_xml(document: &Document, + input: DOMString, + url: Url, + context: ParseContext) { + let parser = match context { + ParseContext::Owner(owner) => + ServoXMLParser::new(Some(url), document, owner), + }; + parser.parse_chunk(String::from(input)); } + |