aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/servohtmlparser.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/servohtmlparser.rs')
-rw-r--r--components/script/dom/servohtmlparser.rs46
1 files changed, 23 insertions, 23 deletions
diff --git a/components/script/dom/servohtmlparser.rs b/components/script/dom/servohtmlparser.rs
index 2450b4c8aa3..75d060ddf29 100644
--- a/components/script/dom/servohtmlparser.rs
+++ b/components/script/dom/servohtmlparser.rs
@@ -8,13 +8,15 @@
use document_loader::LoadType;
use dom::bindings::cell::DOMRefCell;
use dom::bindings::codegen::Bindings::ServoHTMLParserBinding;
+use dom::bindings::codegen::InheritTypes::NodeCast;
use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JS, Root};
use dom::bindings::refcounted::Trusted;
use dom::bindings::trace::JSTraceable;
use dom::bindings::utils::{Reflector, reflect_dom_object};
-use dom::document::{Document, DocumentHelpers};
+use dom::document::Document;
use dom::node::{window_from_node, Node};
+use dom::text::Text;
use dom::window::Window;
use network_listener::PreInvoke;
use parse::Parser;
@@ -27,7 +29,7 @@ use encoding::all::UTF_8;
use encoding::types::{Encoding, DecoderTrap};
use html5ever::tokenizer;
use html5ever::tree_builder;
-use html5ever::tree_builder::{TreeBuilder, TreeBuilderOpts};
+use html5ever::tree_builder::{NodeOrText, TreeBuilder, TreeBuilderOpts};
use hyper::header::ContentType;
use hyper::mime::{Mime, TopLevel, SubLevel};
use js::jsapi::JSTracer;
@@ -42,6 +44,19 @@ pub struct Sink {
pub document: JS<Document>,
}
+impl Sink {
+ pub fn get_or_create(&self, child: NodeOrText<JS<Node>>) -> Root<Node> {
+ match child {
+ NodeOrText::AppendNode(n) => n.root(),
+ NodeOrText::AppendText(t) => {
+ let doc = self.document.root();
+ let text = Text::new(t.into(), &doc);
+ NodeCast::from_root(text)
+ }
+ }
+ }
+}
+
/// FragmentContext is used only to pass this group of related values
/// into functions.
#[derive(Copy, Clone)]
@@ -272,16 +287,9 @@ impl ServoHTMLParser {
}
}
-trait PrivateServoHTMLParserHelpers {
- /// Synchronously run the tokenizer parse loop until explicitly suspended or
- /// the tokenizer runs out of input.
- fn parse_sync(self);
- /// Retrieve the window object associated with this parser.
- fn window(self) -> Root<Window>;
-}
-impl<'a> PrivateServoHTMLParserHelpers for &'a ServoHTMLParser {
- fn parse_sync(self) {
+impl ServoHTMLParser {
+ fn parse_sync(&self) {
let mut first = true;
// This parser will continue to parse while there is either pending input or
@@ -314,28 +322,20 @@ impl<'a> PrivateServoHTMLParserHelpers for &'a ServoHTMLParser {
}
}
- fn window(self) -> Root<Window> {
+ fn window(&self) -> Root<Window> {
let doc = self.document.root();
window_from_node(doc.r())
}
}
-pub trait ServoHTMLParserHelpers {
- /// Cause the parser to interrupt next time the tokenizer reaches a quiescent state.
- /// No further parsing will occur after that point until the `resume` method is called.
- /// Panics if the parser is already suspended.
- fn suspend(self);
- /// Immediately resume a suspended parser. Panics if the parser is not suspended.
- fn resume(self);
-}
-impl<'a> ServoHTMLParserHelpers for &'a ServoHTMLParser {
- fn suspend(self) {
+impl ServoHTMLParser {
+ pub fn suspend(&self) {
assert!(!self.suspended.get());
self.suspended.set(true);
}
- fn resume(self) {
+ pub fn resume(&self) {
assert!(self.suspended.get());
self.suspended.set(false);
self.parse_sync();