diff --git a/src/servo/parser/html.rs b/src/servo/parser/html.rs index 0bfd79b5d2d..c4134289b87 100644 --- a/src/servo/parser/html.rs +++ b/src/servo/parser/html.rs @@ -1,3 +1,5 @@ +import comm::{port, chan}; + type parser = { mut lookahead: option, reader: io::reader @@ -162,3 +164,20 @@ fn parser(reader: io::reader) -> parser { ret { mut lookahead: none, reader: reader }; } +fn spawn_parser_task(filename: str) -> port { + let result_port = port(); + let result_chan = chan(result_port); + task::spawn_listener::<()> {|_child_port| + let file_data = io::read_whole_file(filename).get(); + let reader = io::bytes_reader(file_data); + let parser = parser(reader); + + loop { + let token = parser.parse(); + result_chan.send(token); + if token == to_eof { break; } + } + }; + ret result_port; +} + diff --git a/src/servo/servo.rs b/src/servo/servo.rs index 9a9540b9742..0318854e2e6 100644 --- a/src/servo/servo.rs +++ b/src/servo/servo.rs @@ -16,7 +16,12 @@ fn parse(filename: str) { fn main(args: [str]) { if args.len() >= 2u { - parse(args[1]); + let p = html::spawn_parser_task(args[1]); + loop { + let token = p.recv(); + io::println(#fmt("token: %?", token)); + if token == html::to_eof { break; } + } } // The platform event handler thread