auto merge of #3718 : juzer10/servo/master, r=jdm

We have created parser trait and declared parse_chunk function in this trait. We are yet to implement this parse_chunk for ServoHTMLParser struct.
This commit is contained in:
bors-servo 2014-10-29 14:36:45 -06:00
commit 5858fccf87
4 changed files with 26 additions and 7 deletions

View file

@ -14,6 +14,7 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::node::TrustedNodeAddress; use dom::node::TrustedNodeAddress;
use dom::document::{Document, DocumentHelpers}; use dom::document::{Document, DocumentHelpers};
use parse::html::JSMessage; use parse::html::JSMessage;
use parse::Parser;
use servo_util::task_state; use servo_util::task_state;
@ -43,6 +44,15 @@ pub struct ServoHTMLParser {
tokenizer: DOMRefCell<Tokenizer>, tokenizer: DOMRefCell<Tokenizer>,
} }
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 { impl ServoHTMLParser {
#[allow(unrooted_must_root)] #[allow(unrooted_must_root)]
pub fn new(js_chan: Sender<JSMessage>, base_url: Option<Url>, document: JSRef<Document>) pub fn new(js_chan: Sender<JSMessage>, base_url: Option<Url>, document: JSRef<Document>)

View file

@ -211,9 +211,7 @@ pub mod dom {
pub mod testbinding; pub mod testbinding;
} }
pub mod parse { pub mod parse;
pub mod html;
}
pub mod layout_interface; pub mod layout_interface;
pub mod page; pub mod page;

View file

@ -18,6 +18,7 @@ use dom::servohtmlparser;
use dom::servohtmlparser::ServoHTMLParser; use dom::servohtmlparser::ServoHTMLParser;
use dom::types::*; use dom::types::*;
use page::Page; use page::Page;
use parse::Parser;
use encoding::all::UTF_8; use encoding::all::UTF_8;
use encoding::types::{Encoding, DecodeReplace}; use encoding::types::{Encoding, DecodeReplace};
@ -486,14 +487,14 @@ pub fn parse_html(page: &Page,
match input { match input {
InputString(s) => { InputString(s) => {
parser.tokenizer().borrow_mut().feed(s); parser.parse_chunk(s);
} }
InputUrl(url) => { InputUrl(url) => {
let load_response = load_response.unwrap(); let load_response = load_response.unwrap();
match load_response.metadata.content_type { match load_response.metadata.content_type {
Some((ref t, _)) if t.as_slice().eq_ignore_ascii_case("image") => { Some((ref t, _)) if t.as_slice().eq_ignore_ascii_case("image") => {
let page = format!("<html><body><img src='{:s}' /></body></html>", base_url.as_ref().unwrap().serialize()); let page = format!("<html><body><img src='{:s}' /></body></html>", base_url.as_ref().unwrap().serialize());
parser.tokenizer().borrow_mut().feed(page); parser.parse_chunk(page);
}, },
_ => { _ => {
for msg in load_response.progress_port.iter() { for msg in load_response.progress_port.iter() {
@ -501,7 +502,7 @@ pub fn parse_html(page: &Page,
Payload(data) => { Payload(data) => {
// FIXME: use Vec<u8> (html5ever #34) // FIXME: use Vec<u8> (html5ever #34)
let data = UTF_8.decode(data.as_slice(), DecodeReplace).unwrap(); let data = UTF_8.decode(data.as_slice(), DecodeReplace).unwrap();
parser.tokenizer().borrow_mut().feed(data); parser.parse_chunk(data);
} }
Done(Err(err)) => { Done(Err(err)) => {
fail!("Failed to load page URL {:s}, error: {:s}", url.serialize(), 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); task_state::exit(InHTMLParser);

View file

@ -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);
}