mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
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:
commit
5858fccf87
4 changed files with 26 additions and 7 deletions
|
@ -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>)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
10
components/script/parse/mod.rs
Normal file
10
components/script/parse/mod.rs
Normal 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);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue