245 lines
8.1 KiB
C++
245 lines
8.1 KiB
C++
// 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_
|
|
|