📄 parser.h
字号:
// -*- C++ -*-
//=============================================================================
/**
* @file Parser.h
*
* Parser.h,v 1.13 2003/07/19 19:04:10 dhinton Exp
*
* @author Nanbor Wang <nanbor@cs.wustl.edu>
* @author Krishnakumar B <kitty@cs.wustl.edu>
*/
//=============================================================================
#ifndef _ACEXML_BASIC_PARSER_H_
#define _ACEXML_BASIC_PARSER_H_
#include /**/ "ace/pre.h"
#include "ACEXML/parser/parser/Parser_export.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
#pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
#include "ACEXML/common/XMLReader.h"
#include "ACEXML/common/LocatorImpl.h"
#include "ACEXML/common/NamespaceSupport.h"
#include "ACEXML/common/CharStream.h"
#include "ace/Obstack.h"
#include "ace/Functor.h"
#include "ace/SString.h"
#include "ace/Hash_Map_Manager.h"
#include "ace/Unbounded_Set.h"
#include "ace/Containers_T.h"
#include "ace/Auto_Ptr.h"
#include "ACEXML/parser/parser/Entity_Manager.h"
#include "ACEXML/parser/parser/ParserInternals.h"
#include "ACEXML/parser/parser/ParserContext.h"
/**
* @class ACEXML_Parser Parser.h "ACEXML/parser/parser/Parser.h"
*
* @brief A SAX based parser.
*
*/
class ACEXML_PARSER_Export ACEXML_Parser : public ACEXML_XMLReader
{
public:
/// Default constructor.
ACEXML_Parser (void);
/// Destructor.
virtual ~ACEXML_Parser (void);
/**
* Initialize the parser state.
*
* @retval 0 if parser was initialized correctly else -1.
*/
int initialize (ACEXML_InputSource* input);
/**
* Return the current content handler.
*/
virtual ACEXML_ContentHandler *getContentHandler (void) const;
/*
* Return the current DTD handler.
*/
virtual ACEXML_DTDHandler *getDTDHandler (void) const;
/*
* Return the current entity resolver.
*/
virtual ACEXML_EntityResolver *getEntityResolver (void) const;
/*
* Return the current error handler.
*/
virtual ACEXML_ErrorHandler *getErrorHandler (void) const;
/**
* Look up the value of a feature. This method allows
* programmers to check whether a specific feature has been
* activated in the parser.
*/
virtual int getFeature (const ACEXML_Char *name ACEXML_ENV_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXNotRecognizedException,
ACEXML_SAXNotSupportedException)) ;
/**
* Activating or deactivating a feature.
*/
virtual void setFeature (const ACEXML_Char *name,
int boolean_value ACEXML_ENV_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXNotRecognizedException,
ACEXML_SAXNotSupportedException)) ;
/*
* Look up the value of a property.
*/
virtual void * getProperty (const ACEXML_Char *name ACEXML_ENV_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXNotRecognizedException,
ACEXML_SAXNotSupportedException)) ;
/*
* Set the value of a property.
*/
virtual void setProperty (const ACEXML_Char *name,
void *value ACEXML_ENV_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXNotRecognizedException,
ACEXML_SAXNotSupportedException)) ;
/*
* Parse an XML document.
*/
virtual void parse (ACEXML_InputSource *input ACEXML_ENV_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException)) ;
/*
* Parse an XML document from a system identifier (URI).
*/
virtual void parse (const ACEXML_Char *systemId ACEXML_ENV_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException))
;
/*
* Allow an application to register a content event handler.
*/
virtual void setContentHandler (ACEXML_ContentHandler *handler);
/*
* Allow an application to register a DTD event handler.
*/
virtual void setDTDHandler (ACEXML_DTDHandler *handler);
/*
* Allow an application to register an entity resolver.
*/
virtual void setEntityResolver (ACEXML_EntityResolver *resolver);
/*
* Allow an application to register an error event handler.
*/
virtual void setErrorHandler (ACEXML_ErrorHandler *handler);
protected:
/**
* Parse XML Prolog.
*/
void parse_xml_prolog (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse VersionInfo declaration.
*
*/
void parse_version_info (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a EncodingDecl declaration.
*
*/
void parse_encoding_decl (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a XMLDecl declaration.
*
*/
void parse_xml_decl (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a TextDecl declaration.
*/
int parse_text_decl (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a PI statement. The first character encountered
* should always be '?' in the PI prefix "@<?".
*
* @retval 0 on success, -1 otherwise.
*/
int parse_processing_instruction (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse the DOCTYPE declaration. The first character encountered
* should always be 'D' in doctype prefix: "@<@!DOCTYPE".
*/
int parse_doctypedecl (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse an XML element. The first character encountered should
* be the first character of the element "Name".
*
* @param is_root If not 0, then we are expecting to see the "root"
* element now, and the next element's name need to match the name
* defined in DOCTYPE definition, i.e., @a this->doctype_.
*
* @todo Instead of simply checking for the root element based on the
* argument @a is_root, we should instead either pass in some sort
* of validator or allow the function to return the element name so it
* can be used in a validator.
*/
void parse_element (int is_root ACEXML_ENV_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a content declaration.
*
*/
int parse_content (const ACEXML_Char* startname, const ACEXML_Char* ns_uri,
const ACEXML_Char* ns_lname
ACEXML_ENV_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a character reference, i.e., " " or "". The first
* character encountered should be the '#' char.
*
* @param buf points to a character buffer for the result.
*
* @param len In/out argument which initially specifies the size of the
* buffer and is later set to the no. of characters in the reference.
*
* @retval 0 on success and -1 otherwise.
*/
int parse_char_reference (ACEXML_Char *buf, size_t& len);
/**
* Parse a reference name, i.e., foo in "&foo;" or "%foo;". The first
* character encountered should be the character following '&' or '%'.
* Effectively the same as @sa parse_name but we don't use the parser's
* obstack. Caller is responsible for deleting the memory.
*
* @retval A pointer to name of reference, 0 otherwise.
*/
ACEXML_Char* parse_reference_name (void);
/**
* Parse a CDATA section. The first character should always be the first
* '[' in CDATA definition.
*
* @retval 0 on success.
* @retval -1 if fail.
*/
int parse_cdata (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a "markupdecl" section, this includes both "markupdecl" and
* "DeclSep" sections in XML specification
*/
int parse_internal_dtd (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Skip over a comment. The first character encountered should always be
* the first '-' in the comment prefix "@<@!--".
*/
int parse_comment (void);
/**
* Parse an "ELEMENT" decl. The first character this method
* expects is always the 'L' (the second char) in the word
* "ELEMENT".
*
* @retval 0 on success, -1 otherwise.
*/
int parse_element_decl (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse an "ENTITY" decl. The first character this method expects
* is always the 'N' (the second char) in the word "ENTITY".
*
* @retval 0 on success, -1 otherwise.
*/
int parse_entity_decl (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse an "ATTLIST" decl. Thse first character this method
* expects is always the 'A' (the first char) in the word
* "ATTLIST".
*
* @retval 0 on success, -1 otherwise.
*/
int parse_attlist_decl (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a AttType declaration.
*
*/
int parse_atttype (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
*Parse a "NOTATION" decl. The first character this method
* expects is always the 'N' (the first char) in the word
* "NOTATION".
*
* @retval 0 on success, -1 otherwise.
*/
int parse_notation_decl (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse an ExternalID or a reference to PUBLIC ExternalID.
* Possible cases are in the forms of: <code>
*
* SYSTEM 'quoted string representing system resource'
* PUBLIC 'quoted name of public ID' 'quoted resource'
* PUBLIC 'quoted name we are referring to'
* </code>
*
* The first character this function sees must be either 'S' or 'P'.
* When the function finishes parsing, the input stream points
* at the first non-whitespace character.
*
* @param publicId returns the unquoted publicId read. If none
* is available, it will be reset to 0.
* @param systemId returns the unquoted systemId read. If none
* is available, it will be reset to 0.
*
* @retval 0 on success, -1 otherwise.
*/
int parse_external_id (ACEXML_Char *&publicId, ACEXML_Char *&systemId
ACEXML_ENV_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse an external DTD.
*
*/
int parse_external_dtd (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse an external subset. This does the actual parsing of an external
* subset and is called by @sa parse_external_dtd.
*
*/
int parse_external_subset (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a markupDecl section.
*
*/
int parse_markup_decl (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a conditionalSect declaration.
*
*/
int parse_conditional_section (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a includeSect declaration.
*
*/
int parse_includesect (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
*
* Parse a ignoreSect declaration.
*/
int parse_ignoresect (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a PEReference.
*
*/
int parse_PE_reference (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a Reference.
*
*/
int parse_entity_reference (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse an entityValue.
*
*/
int parse_entity_value (ACEXML_Char *&str ACEXML_ENV_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a DefaultDecl specification.
*
*/
int parse_defaultdecl (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse the "children" and "Mixed" non-terminals in contentspec.
*
* The first character this function sees must be the first
* open paren '(' in children.
*
* @retval 0 on success, -1 otherwise.
*/
int parse_children_definition (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a @c cp non-terminal. @c cp can either be a @c seq or a @c choice.
* This function calls itself recursively.
*
* @param skip_open_paren when non-zero, it indicates that the open paren of
* the @c seq or @c choice has already been removed from the input
* stream.
*
* @retval 0 on success, -1 otherwise.
*/
int parse_child (int skip_open_paren ACEXML_ENV_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a name from the input CharStream. If @a ch @!= 0, then we have
* already consumed the first name character from the input CharStream,
* otherwise, parse_name will use this->get() to acquire the initial
* character.
*
* @return A pointer to the string in the obstack, 0 if it's not a
* valid name.
*/
ACEXML_Char *parse_name (ACEXML_Char ch = 0);
/**
* Parse a NMTOKEN from the input stream.
*
* @return A pointer to the string in the obstack, 0 if it's not a valid
* NMTOKEN.
*/
ACEXML_Char* parse_nmtoken (ACEXML_Char ch = 0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -