From 6a736c7f3c9456224aadde71ebbd62e844fd6877 Mon Sep 17 00:00:00 2001 From: nchinth Date: Fri, 17 Oct 2014 16:30:01 -0400 Subject: [PATCH] Adding initial version of parser trait Added parse_chunk method declaration to parser Removed unnecessary visibilty for parse_chunk function Implemented parse_chunk function Implemented parse_chunk fn for ServoHTMLParser Moved parser trait to mod.rs and added finish fn added licence header to mod.rs and other review comments Fixed trailing space issue Fixed failed tabular space test --- components/script/dom/servohtmlparser.rs | 10 ++++++++++ components/script/lib.rs | 4 +--- components/script/parse/html.rs | 9 +++++---- components/script/parse/mod.rs | 10 ++++++++++ 4 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 components/script/parse/mod.rs 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); +}