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
This commit is contained in:
nchinth 2014-10-17 16:30:01 -04:00 committed by Nikhil Chinthapallee
parent 7ba02bb11d
commit 6a736c7f3c
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);
}