diff options
Diffstat (limited to 'libxsde/xsde/cxx/parser/elements.cxx')
-rw-r--r-- | libxsde/xsde/cxx/parser/elements.cxx | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/libxsde/xsde/cxx/parser/elements.cxx b/libxsde/xsde/cxx/parser/elements.cxx new file mode 100644 index 0000000..4273ab8 --- /dev/null +++ b/libxsde/xsde/cxx/parser/elements.cxx @@ -0,0 +1,201 @@ +// file : xsde/cxx/parser/elements.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2009 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <assert.h> + +#include <xsde/cxx/parser/elements.hxx> + +namespace xsde +{ + namespace cxx + { + namespace parser + { + // parser_base + // + parser_base:: + ~parser_base () + { + } + + void parser_base:: + pre () + { +#ifdef XSDE_REUSE_STYLE_TIEIN + if (impl_) + impl_->pre (); +#endif + } + + void parser_base:: + _pre () + { +#ifdef XSDE_REUSE_STYLE_TIEIN + if (impl_) + impl_->_pre (); +#endif + } + + void parser_base:: + _post () + { +#ifdef XSDE_REUSE_STYLE_TIEIN + if (impl_) + impl_->_post (); +#endif + } + +#ifdef XSDE_REUSE_STYLE_TIEIN + +#ifdef XSDE_POLYMORPHIC + void parser_base:: + _start_any_element (const ro_string& ns, + const ro_string& name, + const char* type) + { + if (impl_) + impl_->_start_any_element (ns, name, type); + } +#else + void parser_base:: + _start_any_element (const ro_string& ns, + const ro_string& name) + { + if (impl_) + impl_->_start_any_element (ns, name); + } +#endif + + void parser_base:: + _end_any_element (const ro_string& ns, + const ro_string& name) + { + if (impl_) + impl_->_end_any_element (ns, name); + } + + void parser_base:: + _any_attribute (const ro_string& ns, + const ro_string& name, + const ro_string& value) + { + if (impl_) + impl_->_any_attribute (ns, name, value); + } + + void parser_base:: + _any_characters (const ro_string& s) + { + if (impl_) + impl_->_any_characters (s); + } +#else // !XSDE_REUSE_STYLE_TIEIN + +#ifdef XSDE_POLYMORPHIC + void parser_base:: + _start_any_element (const ro_string&, + const ro_string&, + const char*) + { + } +#else + void parser_base:: + _start_any_element (const ro_string&, + const ro_string&) + { + } +#endif + + void parser_base:: + _end_any_element (const ro_string&, + const ro_string&) + { + } + + void parser_base:: + _any_attribute (const ro_string&, + const ro_string&, + const ro_string&) + { + } + + void parser_base:: + _any_characters (const ro_string&) + { + } +#endif // XSDE_REUSE_STYLE_TIEIN + + + void parser_base:: + _pre_impl (context& c) + { +#ifdef XSDE_REUSE_STYLE_TIEIN + assert (parent_ == 0); + + // Set the parent_ pointers in the tied-in implementations. + // + _set_parent_chain (); +#endif + context_ = &c; + + previous_ = c.current_; + + c.current_.parser_ = this; + c.current_.depth_ = 0; + c.current_.any_ = false; + + _pre (); + } + + void parser_base:: + _post_impl () + { +#if defined(XSDE_PARSER_VALIDATION) || !defined(XSDE_EXCEPTIONS) + if (!context_->error_type ()) +#endif + _post (); + + context_->current_ = previous_; + context_ = 0; + } + +#ifdef XSDE_POLYMORPHIC + const char* parser_base:: + _dynamic_type () const + { + return 0; + } +#endif + + void parser_base:: + _reset () + { +#ifdef XSDE_REUSE_STYLE_TIEIN + if (impl_) + impl_->_reset (); +#endif + +#ifndef XSDE_EXCEPTIONS + error_type_ = error_none; +#endif + context_ = 0; + + previous_.parser_ = 0; + previous_.depth_ = 0; + previous_.any_ = false; + } + +#if defined (XSDE_REUSE_STYLE_TIEIN) && !defined (XSDE_EXCEPTIONS) + const parser_base* parser_base:: + _ultimate_impl () const + { + const parser_base* p = impl_; + for (; p->impl_ != 0; p = p->impl_) /*noop*/; + return p; + } +#endif + } + } +} |