From 3389c497c0ca740dbcd4fd56a4fc8d490f7a8592 Mon Sep 17 00:00:00 2001 From: Connor Brewster Date: Thu, 14 Apr 2016 14:56:38 -0600 Subject: Finish hooking up XML parser added script integration with xml5ever Updated test expectations Removed timeout test expectation Refactors application/xhtml+xml is treated as HTML Updated xml5ever Updated Text Expectations --- components/script/parse/xml.rs | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'components/script/parse/xml.rs') diff --git a/components/script/parse/xml.rs b/components/script/parse/xml.rs index 6c82e5af358..74741af8806 100644 --- a/components/script/parse/xml.rs +++ b/components/script/parse/xml.rs @@ -11,11 +11,13 @@ use dom::comment::Comment; use dom::document::Document; use dom::documenttype::DocumentType; use dom::element::{Element, ElementCreator}; +use dom::htmlscriptelement::HTMLScriptElement; use dom::node::Node; use dom::processinginstruction::ProcessingInstruction; use dom::servoxmlparser; use dom::servoxmlparser::ServoXMLParser; use dom::text::Text; +use html5ever; use msg::constellation_msg::PipelineId; use parse::Parser; use std::borrow::Cow; @@ -24,7 +26,7 @@ use url::Url; use util::str::DOMString; use xml5ever::tendril::StrTendril; use xml5ever::tokenizer::{Attribute, QName}; -use xml5ever::tree_builder::{NodeOrText, TreeSink}; +use xml5ever::tree_builder::{NextParserState, NodeOrText, TreeSink}; impl<'a> TreeSink for servoxmlparser::Sink { type Handle = JS; @@ -101,6 +103,24 @@ impl<'a> TreeSink for servoxmlparser::Sink { doc); JS::from_ref(pi.upcast()) } + + fn mark_script_already_started(&mut self, node: Self::Handle) { + let script = node.downcast::(); + if let Some(script) = script { + script.mark_already_started(); + } + } + + fn complete_script(&mut self, node: Self::Handle) -> NextParserState { + let script = node.downcast::(); + if let Some(script) = script { + return match script.prepare() { + html5ever::tree_builder::NextParserState::Continue => NextParserState::Continue, + html5ever::tree_builder::NextParserState::Suspend => NextParserState::Suspend + }; + } + NextParserState::Continue + } } @@ -119,4 +139,3 @@ pub fn parse_xml(document: &Document, }; parser.parse_chunk(String::from(input)); } - -- cgit v1.2.3