summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/xml_parser/xml_parser_kernel_interfaces.h
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/dlib/xml_parser/xml_parser_kernel_interfaces.h')
-rw-r--r--ml/dlib/dlib/xml_parser/xml_parser_kernel_interfaces.h244
1 files changed, 244 insertions, 0 deletions
diff --git a/ml/dlib/dlib/xml_parser/xml_parser_kernel_interfaces.h b/ml/dlib/dlib/xml_parser/xml_parser_kernel_interfaces.h
new file mode 100644
index 000000000..a0edf3317
--- /dev/null
+++ b/ml/dlib/dlib/xml_parser/xml_parser_kernel_interfaces.h
@@ -0,0 +1,244 @@
+// Copyright (C) 2003 Davis E. King (davis@dlib.net)
+// License: Boost Software License See LICENSE.txt for the full license.
+#ifndef DLIB_XML_PARSER_KERNEl_INTERFACES_
+#define DLIB_XML_PARSER_KERNEl_INTERFACES_
+
+#include <string>
+#include "../interfaces/enumerable.h"
+#include "../interfaces/map_pair.h"
+#include "../error.h"
+
+namespace dlib
+{
+
+// ----------------------------------------------------------------------------------------
+
+ class xml_attribute_list_error : public dlib::error
+ {
+ /*!
+ WHAT THIS OBJECT REPRESENTS
+ This is an exception object thrown by attribute_list objects if you try to
+ access a non-existent attribute.
+ !*/
+ public:
+ xml_attribute_list_error(const std::string& msg) : dlib::error(msg){}
+ };
+
+// ----------------------------------------------------------------------------------------
+// ----------------------------------------------------------------------------------------
+// ----------------------------------------------------------------------------------------
+
+ class attribute_list : public enumerable<map_pair<std::string,std::string> >
+ {
+
+ /*!
+ WHAT THIS OBJECT REPRESENTS
+ this object represents a list of the attributes found in
+ an XML element. each attribute is associated with a value.
+ !*/
+
+
+ public:
+
+ inline virtual ~attribute_list (
+ ) =0;
+
+
+ virtual bool is_in_list (
+ const std::string& key
+ ) const =0;
+ /*!
+ ensures
+ - returns true if there is an attribute named key in the list
+ - returns false
+ !*/
+
+ virtual const std::string& operator[] (
+ const std::string& key
+ ) const =0;
+ /*!
+ ensures
+ if (is_in_list(key) == true) then
+ - returns a const reference to the value associated with the attribute
+ named key.
+ - else
+ - throws xml_attribute_list_error
+ !*/
+
+ protected:
+
+ // restricted functions
+ attribute_list& operator=(attribute_list&) {return *this;}
+ };
+
+// ----------------------------------------------------------------------------------------
+// ----------------------------------------------------------------------------------------
+// ----------------------------------------------------------------------------------------
+
+ class document_handler
+ {
+ /*!
+ EXCEPTIONS
+ a document_handler is allowed to throw any exception
+
+
+ WHAT THIS OBJECT REPRESENTS
+ this object is an interface for handling the basic events
+ generated by an XML parser
+ !*/
+
+
+ public:
+
+ inline virtual ~document_handler (
+ ) =0;
+
+ virtual void start_document (
+ )=0;
+ /*!
+ requires
+ - is called when the document parsing begins
+ !*/
+
+ virtual void end_document (
+ )=0;
+ /*!
+ requires
+ - is called after the document parsing has ended. note that this
+ is always called, even if an error occurs.
+ !*/
+
+ virtual void start_element (
+ const unsigned long line_number,
+ const std::string& name,
+ const dlib::attribute_list& atts
+ )=0;
+ /*!
+ requires
+ - is called when an opening element tag is encountered.
+ - line_number == the line number where the opening tag for this element
+ was encountered.
+ - name == the name of the element encountered
+ - atts == a list containing all the attributes in this element and their
+ associated values
+ !*/
+
+ virtual void end_element (
+ const unsigned long line_number,
+ const std::string& name
+ )=0;
+ /*!
+ requires
+ - is called when a closing element tag is encountered. (note that this
+ includes tags such as <example_tag/>. I.e. the previous tag would
+ trigger a start_element() callback as well as an end_element() callback)
+ - line_number == the line number where the closing tag for this
+ element was encountered and
+ - name == the name of the element encountered
+ !*/
+
+ virtual void characters (
+ const std::string& data
+ )=0;
+ /*!
+ requires
+ - is called just before we encounter a start_element, end_element, or
+ processing_instruction tag but only if there was data between the
+ last and next tag.
+ (i.e. data will never be "")
+ - data == all the normal non-markup data and CDATA between the next and
+ last tag in the document.
+ !*/
+
+ virtual void processing_instruction (
+ const unsigned long line_number,
+ const std::string& target,
+ const std::string& data
+ )=0;
+ /*!
+ requires
+ - is called when a processing instruction is encountered
+ - line_number == the line number where this processing instruction
+ was encountered
+ - target == the target value for this processing instruction
+ - data == the data value for this processing instruction
+ !*/
+
+ protected:
+
+ // restricted functions
+ document_handler& operator=(document_handler&) { return *this; }
+ };
+
+
+// ----------------------------------------------------------------------------------------
+// ----------------------------------------------------------------------------------------
+// ----------------------------------------------------------------------------------------
+
+ class error_handler
+ {
+ /*!
+ EXCEPTIONS
+ an error_handler is allowed to throw any exception
+
+
+ WHAT THIS OBJECT REPRESENTS
+ this object is an interface for handling the error/warning
+ events generated by an XML parser
+ !*/
+
+ public:
+
+ inline virtual ~error_handler (
+ ) =0;
+
+ virtual void error (
+ const unsigned long line_number
+ )=0;
+ /*!
+ requires
+ - is called when an error that does NOT require the parser to halt
+ is encountered. (i.e. somewhat minor errors in the input)
+ - line_number == the line number where this error was encountered
+
+ the following events trigger an error:
+ an invalid processing instruction
+ !*/
+
+ virtual void fatal_error (
+ const unsigned long line_number
+ )=0;
+ /*!
+ requires
+ - is called when an error that requires the parser to abort its parsing
+ is encountered (i.e. fatal errors in the input)
+ - line_number == the line number where this fatal error was encountered
+
+ the following events trigger a fatal_error:
+ Everything other than the events listed above for error.
+ Also note that encountering an entity reference other than the
+ predefined ones listed in xml_parser_kernel_abstract is a fatal_error.
+ Hitting EOF before the closing tag for the document is also a fatal_error.
+ !*/
+
+ protected:
+
+ // restricted functions
+ error_handler& operator=(error_handler&) { return *this;}
+ };
+
+// ----------------------------------------------------------------------------------------
+// ----------------------------------------------------------------------------------------
+// ----------------------------------------------------------------------------------------
+
+ document_handler::~document_handler (
+ ){}
+ attribute_list::~attribute_list (
+ ){}
+ error_handler::~error_handler (
+ ){}
+
+}
+
+#endif // DLIB_XML_PARSER_KERNEl_INTERFACES_
+