aboutsummaryrefslogtreecommitdiff
path: root/xml/parser.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'xml/parser.cxx')
-rw-r--r--xml/parser.cxx35
1 files changed, 35 insertions, 0 deletions
diff --git a/xml/parser.cxx b/xml/parser.cxx
index 6d5ab23..ef5683f 100644
--- a/xml/parser.cxx
+++ b/xml/parser.cxx
@@ -204,6 +204,41 @@ namespace xml
istream::iostate old_state_;
};
+ parser::event_type parser::
+ next ()
+ {
+ if (state_ == state_next)
+ return next_ (false);
+ else
+ {
+ // If we previously peeked at start/end_element, then adjust
+ // state accordingly.
+ //
+ switch (event_)
+ {
+ case end_element:
+ {
+ if (!element_state_.empty () &&
+ element_state_.back ().depth == depth_)
+ pop_element ();
+
+ depth_--;
+ break;
+ }
+ case start_element:
+ {
+ depth_++;
+ break;
+ }
+ default:
+ break;
+ }
+
+ state_ = state_next;
+ return event_;
+ }
+ }
+
const string& parser::
attribute (const qname_type& qn) const
{