diff --git a/components/script/dom/servohtmlparser.rs b/components/script/dom/servohtmlparser.rs index 88f0c9c8275..f88c0777437 100644 --- a/components/script/dom/servohtmlparser.rs +++ b/components/script/dom/servohtmlparser.rs @@ -14,6 +14,7 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; use dom::node::TrustedNodeAddress; use dom::document::{Document, DocumentHelpers}; use parse::html::JSMessage; +use parse::Parser; use servo_util::task_state; @@ -43,6 +44,15 @@ pub struct ServoHTMLParser { tokenizer: DOMRefCell, } +impl Parser for ServoHTMLParser{ + fn parse_chunk(&self, input: String) { + self.tokenizer().borrow_mut().feed(input); + } + fn finish(&self){ + self.tokenizer().borrow_mut().end(); + } +} + impl ServoHTMLParser { #[allow(unrooted_must_root)] pub fn new(js_chan: Sender, base_url: Option, document: JSRef) diff --git a/components/script/lib.rs b/components/script/lib.rs index e03801f5217..755898a5fd9 100644 --- a/components/script/lib.rs +++ b/components/script/lib.rs @@ -211,9 +211,7 @@ pub mod dom { pub mod testbinding; } -pub mod parse { - pub mod html; -} +pub mod parse; pub mod layout_interface; pub mod page; diff --git a/components/script/parse/html.rs b/components/script/parse/html.rs index 8eca823236a..28f13562619 100644 --- a/components/script/parse/html.rs +++ b/components/script/parse/html.rs @@ -18,6 +18,7 @@ use dom::servohtmlparser; use dom::servohtmlparser::ServoHTMLParser; use dom::types::*; use page::Page; +use parse::Parser; use encoding::all::UTF_8; use encoding::types::{Encoding, DecodeReplace}; @@ -486,14 +487,14 @@ pub fn parse_html(page: &Page, match input { InputString(s) => { - parser.tokenizer().borrow_mut().feed(s); + parser.parse_chunk(s); } InputUrl(url) => { let load_response = load_response.unwrap(); match load_response.metadata.content_type { Some((ref t, _)) if t.as_slice().eq_ignore_ascii_case("image") => { let page = format!("", base_url.as_ref().unwrap().serialize()); - parser.tokenizer().borrow_mut().feed(page); + parser.parse_chunk(page); }, _ => { for msg in load_response.progress_port.iter() { @@ -501,7 +502,7 @@ pub fn parse_html(page: &Page, Payload(data) => { // FIXME: use Vec (html5ever #34) let data = UTF_8.decode(data.as_slice(), DecodeReplace).unwrap(); - parser.tokenizer().borrow_mut().feed(data); + parser.parse_chunk(data); } Done(Err(err)) => { fail!("Failed to load page URL {:s}, error: {:s}", url.serialize(), err); @@ -514,7 +515,7 @@ pub fn parse_html(page: &Page, } } - parser.tokenizer().borrow_mut().end(); + parser.finish(); task_state::exit(InHTMLParser); diff --git a/components/script/parse/mod.rs b/components/script/parse/mod.rs new file mode 100644 index 00000000000..6111f196053 --- /dev/null +++ b/components/script/parse/mod.rs @@ -0,0 +1,10 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * 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/. */ + +pub mod html; + +pub trait Parser { + fn parse_chunk(&self,input: String); + fn finish(&self); +}