aboutsummaryrefslogtreecommitdiff
path: root/libxsde/xsde/cxx/parser/context.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'libxsde/xsde/cxx/parser/context.hxx')
-rw-r--r--libxsde/xsde/cxx/parser/context.hxx139
1 files changed, 139 insertions, 0 deletions
diff --git a/libxsde/xsde/cxx/parser/context.hxx b/libxsde/xsde/cxx/parser/context.hxx
new file mode 100644
index 0000000..2b79be9
--- /dev/null
+++ b/libxsde/xsde/cxx/parser/context.hxx
@@ -0,0 +1,139 @@
+// file : xsde/cxx/parser/context.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2009 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSDE_CXX_PARSER_CONTEXT_HXX
+#define XSDE_CXX_PARSER_CONTEXT_HXX
+
+#include <xsde/cxx/config.hxx>
+
+#include <stddef.h> // size_t
+
+#include <xsde/c/expat/expat.h>
+
+#ifndef XSDE_EXCEPTIONS
+# include <xsde/cxx/sys-error.hxx>
+#endif
+
+#ifdef XSDE_PARSER_VALIDATION
+# include <xsde/cxx/schema-error.hxx>
+#endif
+
+namespace xsde
+{
+ namespace cxx
+ {
+ namespace parser
+ {
+ struct parser_base;
+
+ struct parser_state
+ {
+ parser_state ();
+
+ // Depth is maintained only when we don't have a parser for a
+ // document fragment or if we are handling a wildcard in which
+ // case the any flag should be set.
+ //
+ parser_base* parser_;
+ size_t depth_;
+ bool any_;
+ };
+
+ class context
+ {
+ public:
+ context (XML_Parser xml_parser);
+
+ public:
+ XML_Parser
+ xml_parser ();
+
+ // Error handling via codes.
+ //
+ public:
+
+ // Application error.
+ //
+#ifndef XSDE_EXCEPTIONS
+ public:
+ int
+ app_error () const;
+
+ void
+ app_error (int);
+#endif
+
+ // Schema error.
+ //
+#ifdef XSDE_PARSER_VALIDATION
+ public:
+ typedef cxx::schema_error::value schema_error_t;
+
+ schema_error_t
+ schema_error () const;
+
+ void
+ schema_error (schema_error_t);
+#endif
+
+ // System error.
+ //
+#ifndef XSDE_EXCEPTIONS
+ public:
+ typedef cxx::sys_error::value sys_error_t;
+
+ sys_error_t
+ sys_error () const;
+
+ void
+ sys_error (sys_error_t);
+#endif
+
+ // Implementation details.
+ //
+#if defined(XSDE_PARSER_VALIDATION) || !defined(XSDE_EXCEPTIONS)
+ public:
+ enum error_type_t
+ {
+ error_none = 0,
+ error_app,
+ error_schema,
+ error_sys
+ };
+
+ error_type_t
+ error_type () const;
+
+ protected:
+ error_type_t error_type_;
+
+ union
+ {
+#ifndef XSDE_EXCEPTIONS
+ int app;
+#endif
+#ifdef XSDE_PARSER_VALIDATION
+ schema_error_t schema;
+#endif
+#ifndef XSDE_EXCEPTIONS
+ sys_error_t sys;
+#endif
+ } error_code_;
+
+#endif // XSDE_PARSER_VALIDATION || !XSDE_EXCEPTIONS
+
+ public:
+ parser_state current_;
+
+ protected:
+ XML_Parser xml_parser_;
+ };
+ }
+ }
+}
+
+#include <xsde/cxx/parser/context.ixx>
+
+#endif // XSDE_CXX_PARSER_CONTEXT_HXX