{
self.insert_appropriately(AppendText(chars));
Done
}
@@ -538,8 +538,7 @@ where
.any(|a| self.sink.elem_name(a).expanded() == tag.name.expanded())
}
- // Pop elements until an element from the set has been popped. Returns the
- // number of elements popped.
+ // Pop elements until an element from the set has been popped.
fn pop_until(&self, pred: P)
where
P: Fn(ExpandedName) -> bool,
@@ -560,7 +559,7 @@ where
set(self.sink.elem_name(&self.current_node()).expanded())
}
- fn close_tag(&self, tag: Tag) -> XmlProcessResult {
+ fn close_tag(&self, tag: Tag) -> XmlProcessResult {
debug!(
"Close tag: current_node.name {:?} \n Current tag {:?}",
self.sink.elem_name(&self.current_node()),
@@ -597,18 +596,10 @@ where
node
}
- fn stop_parsing(&self) -> XmlProcessResult {
+ fn stop_parsing(&self) -> XmlProcessResult {
warn!("stop_parsing for XML5 not implemented, full speed ahead!");
Done
}
-
- fn complete_script(&self) {
- let open_elems = self.open_elems.borrow();
- let current = current_node(&open_elems);
- if self.sink.complete_script(current) == NextParserState::Suspend {
- self.next_tokenizer_state.set(Some(Quiescent));
- }
- }
}
fn any_not_whitespace(x: &StrTendril) -> bool {
@@ -622,7 +613,7 @@ where
Handle: Clone,
Sink: TreeSink,
{
- fn step(&self, mode: XmlPhase, token: Token) -> XmlProcessResult {
+ fn step(&self, mode: XmlPhase, token: Token) -> XmlProcessResult<::Handle> {
self.debug_step(mode, &token);
match mode {
@@ -716,8 +707,9 @@ where
};
if tag.name.local == local_name!("script") {
self.insert_tag(tag.clone());
- self.complete_script();
- self.close_tag(tag)
+ let script = current_node(&self.open_elems.borrow()).clone();
+ self.close_tag(tag);
+ XmlProcessResult::Script(script)
} else {
self.append_tag(tag)
}
@@ -737,7 +729,12 @@ where
tag
};
if tag.name.local == local_name!("script") {
- self.complete_script();
+ let script = current_node(&self.open_elems.borrow()).clone();
+ self.close_tag(tag);
+ if self.no_open_elems() {
+ self.phase.set(End);
+ }
+ return XmlProcessResult::Script(script);
}
let retval = self.close_tag(tag);
if self.no_open_elems() {
diff --git a/xml5ever/src/tree_builder/types.rs b/xml5ever/src/tree_builder/types.rs
index 4c031abe..fbc9c0ac 100644
--- a/xml5ever/src/tree_builder/types.rs
+++ b/xml5ever/src/tree_builder/types.rs
@@ -34,7 +34,8 @@ pub enum Token {
Eof,
}
-pub enum XmlProcessResult {
+pub enum XmlProcessResult {
Done,
Reprocess(XmlPhase, Token),
+ Script(Handle),
}