aboutsummaryrefslogtreecommitdiff
path: root/xml/parser.ixx
diff options
context:
space:
mode:
Diffstat (limited to 'xml/parser.ixx')
-rw-r--r--xml/parser.ixx35
1 files changed, 35 insertions, 0 deletions
diff --git a/xml/parser.ixx b/xml/parser.ixx
index c0fe256..49d9c89 100644
--- a/xml/parser.ixx
+++ b/xml/parser.ixx
@@ -29,6 +29,19 @@ namespace xml
init ();
}
+ inline parser::event_type parser::
+ peek ()
+ {
+ if (state_ == state_peek)
+ return event_;
+ else
+ {
+ event_type e (next_ (true));
+ state_ = state_peek; // Set it after the call to next_().
+ return e;
+ }
+ }
+
template <typename T>
inline T parser::
value () const
@@ -173,6 +186,28 @@ namespace xml
return element<T> (qname_type (n), dv);
}
+ inline void parser::
+ content (content_type c)
+ {
+ assert (state_ == state_next);
+
+ if (!element_state_.empty () && element_state_.back ().depth == depth_)
+ element_state_.back ().content = c;
+ else
+ element_state_.push_back (element_entry (depth_, c));
+ }
+
+ inline parser::content_type parser::
+ content () const
+ {
+ assert (state_ == state_next);
+
+ return
+ !element_state_.empty () && element_state_.back ().depth == depth_
+ ? element_state_.back ().content
+ : mixed;
+ }
+
inline const parser::element_entry* parser::
get_element () const
{