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::document::{Document, DocumentHelpers};
use parse::html::JSMessage;
use parse::Parser;
use servo_util::task_state;
@ -43,6 +44,15 @@ pub struct ServoHTMLParser {
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 {
#[allow(unrooted_must_root)]
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 parse {
pub mod html;
}
pub mod parse;
pub mod layout_interface;
pub mod page;

View file

@ -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!("<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() {
@ -501,7 +502,7 @@ pub fn parse_html(page: &Page,
Payload(data) => {
// FIXME: use Vec<u8> (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);

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