📄 parser.h
字号:
/**
* Parse the version string in an XML Prolog section.
*
* @param str String containing the version number if successful.
* @return 0 if the string was read successfully, 0 otherwise.
*/
int parse_version (ACEXML_Char*& str);
/**
* Parse the version number in a VersionInfo declaration.
*/
int parse_version_num (ACEXML_Char*& str);
/**
* Parse the encoding name in an XML Prolog section.
*
* @param str String containing the encoding name if successful.
* @return 0 if the string was read successfully, 0 otherwise.
*/
int parse_encname (ACEXML_Char*& str);
/**
* Parse a SDDecl string.
*
* @param str String containing the encoding name if successful.
* @return 0 if the string was read successfully, -1 otherwise.
*/
int parse_sddecl (ACEXML_Char*& str);
/**
* Parse an attribute name.
*
* @retval str String containing the value of the attribute name
* if successful.
* @retval 0 otherwise.
*/
ACEXML_Char* parse_attname (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse an attribute value.
*
* @param str String containing the value of the attribute if successful.
* @return 0 if attribute value was read successfully, -1 otherwise.
*/
int parse_attvalue (ACEXML_Char*& str ACEXML_ENV_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a tokenized type attribute.
*
* @return 0 if attribute type was read successfully, -1 otherwise.
*/
int parse_tokenized_type (ACEXML_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a SystemLiteral.
*
* @param str String containing the SystemLiteral if successful.
* @return 0 if the string was read successfully, 0 otherwise.
*/
int parse_system_literal (ACEXML_Char*& str);
/**
* Parse a PubidLiteral.
*
* @param str String containing the PubidLiteral if successful.
* @return 0 if the string was read successfully, 0 otherwise.
*/
int parse_pubid_literal (ACEXML_Char*& str);
/**
* Check if a character @a c is a whitespace.
*
* @retval 1 if @a c is a valid white space character. 0 otherwise.
*/
int is_whitespace (const ACEXML_Char c) const;
/**
* Check if a character @a c is a valid Char.
*
* @retval 1 if @a c is a valid character. 0 otherwise.
*/
int isChar (ACEXML_UCS4 c) const;
/**
* Check if a character @a c is a valid CharRef character.
*
* @retval 1 if @a c is a valid character reference character, 0 otherwise.
*/
int isCharRef (const ACEXML_Char c) const;
/**
* Check if a character @a c is a BaseChar.
*
* @retval 1 if @a c is a valid BaseChar character, 0 otherwise.
*/
int isBasechar (const ACEXML_Char c) const;
/**
* Check if a character @a c is a Ideographic.
*
* @retval 1 if @a c is a valid Ideographic character, 0 otherwise.
*/
int isIdeographic (const ACEXML_Char c) const;
/**
* Check if a character @a c is a CombiningChar.
*
* @retval 1 if @a c is a valid CombiningChar character, 0 otherwise.
*/
int isCombiningchar (const ACEXML_Char c) const;
/**
* Check if a character @a c is a Digit.
*
* @retval 1 if @a c is a valid Digit character, 0 otherwise.
*/
int isDigit (const ACEXML_Char c) const;
/**
* Check if a character @a c is an Extender.
*
* @retval 1 if @a c is a valid Extender character, 0 otherwise.
*/
int isExtender (const ACEXML_Char c) const;
/**
* Check if a character @a c is a Letter.
*
* @retval 1 if @a c is a valid Letter character, 0 otherwise.
*/
int isLetter (const ACEXML_Char c) const;
/**
* Check if a character is an acceptable NameChar.
*
* @retval 1 if @a c is a valid NameChar character, 0 otherwise.
*/
int isNameChar (const ACEXML_Char c) const;
/**
* Check if a character is a PubidChar.
*
* @retval 1 if @a c is a valid PubidChar character, 0 otherwise.
*/
int isPubidChar (const ACEXML_Char c) const;
/// Get a character.
virtual ACEXML_Char get (void);
/// Peek a character.
virtual ACEXML_Char peek (void);
private:
// *** Helper functions for parsing XML
/**
* Skip any whitespaces encountered until the first non-whitespace
* character is encountered.
*
* @return The next non-whitespace character from the CharStream.
*
* @sa skip_whitespace_count
*/
ACEXML_Char skip_whitespace (void);
/**
* Skip any whitespaces encountered until the first non-whitespace
* character. The first non-whitespace character is not consumed.
* This method does peek into the input CharStream and therefore
* is more expensive than @ref skip_whitespace.
*
* @param peek If non-null, @a peek points to a ACEXML_Char where
* skip_whitespace_count stores the first non-whitespace
* character it sees (character is not removed from the stream.)
*
* @return The number of whitespace characters consumed.
*
* @sa skip_whitespace
*/
int skip_whitespace_count (ACEXML_Char *peek = 0);
/**
* Skip an equal sign.
*
* @retval 0 when succeeds, -1 if no equal sign is found.
*/
int skip_equal (void);
/**
* Get a quoted string. Quoted strings are used to specify
* attribute values and this routine will replace character and
* entity references on-the-fly. Parameter entities are not allowed
* (or replaced) in this function. (But regular entities are.)
*
* @param str returns the un-quoted string.
*
* @retval 0 on success, -1 otherwise.
*/
int get_quoted_string (ACEXML_Char *&str);
/**
* Check if a character @a c is a Digit.
*
* @retval 1 if @a c is a valid Digit character, 0 otherwise.
*/
int isNormalDigit (const ACEXML_Char c) const;
/**
* Dispatch errors to ErrorHandler.
*
*/
void error (const ACEXML_Char* msg ACEXML_ENV_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Dispatch warnings to ErrorHandler.
*
*/
void warning (const ACEXML_Char* msg ACEXML_ENV_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Dispatch fatal errors to ErrorHandler.
*
*/
void fatal_error (const ACEXML_Char* msg ACEXML_ENV_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Dispatch prefix mapping calls to the ContentHandler.
*
* @param prefix Namespace prefix
* @param uri Namespace URI
* @param name Local name
* @param start 1 => startPrefixMapping 0 => endPrefixMapping
*/
void prefix_mapping (const ACEXML_Char* prefix,
const ACEXML_Char* uri,
const ACEXML_Char* name,
int start ACEXML_ENV_ARG_DECL)
ACE_THROW_SPEC ((ACEXML_SAXException));
/**
* Parse a keyword.
*/
int parse_token (const ACEXML_Char* keyword);
/**
* Push the current context on to the stack.
*
*/
int push_context (ACEXML_Parser_Context* context);
/**
* Pop the top element in the stack and replace current context with that.
*/
int pop_context (int GE_ref ACEXML_ENV_ARG_DECL);
/**
* Create a new ACEXML_CharStream from @a systemId and @a publicId and
* replace the current input stream with the newly created stream.
*/
virtual int switch_input (ACEXML_CharStream* cstream,
const ACEXML_Char* systemId,
const ACEXML_Char* publicId = 0);
/**
* Create a new ACEXML_InputSource from @a systemId and @a publicId and
* replace the current input source with the newly created InputSource.
*/
virtual int switch_input (ACEXML_InputSource* input,
const ACEXML_Char* systemId,
const ACEXML_Char* publicId = 0);
/**
* Check for a parameter entity reference. This is used to check for the
* occurence of a PE Reference withing markupDecl. Additionally this
* function consumes any leading or trailing whitespace around the PE
* Reference.
*
* @retval Number of whitespace characters skipped.
*/
int check_for_PE_reference (ACEXML_ENV_SINGLE_ARG_DECL);
/**
* Reset the parser state.
*
*/
void reset (void);
/**
* Very trivial, non-conformant normalization of a systemid.
*
*/
ACEXML_Char* normalize_systemid (const ACEXML_Char* systemId);
// Feature names:
/**
* \addtogroup acexml_parser_features
* @{
*/
/**
* @var simple_parsing_feature_
*
* This constant string defines the name of "simple XML parsing"
* feature. When this feature is enabled, ACEXML parser is allowed
* to parse a simple XML stream without mandated XML prolog
* and no DTD defintion.
*/
static const ACEXML_Char simple_parsing_feature_[];
/**
* @var namespaces_feature_
*
* This constant string defines the SAX XML Namespace feature. When this
* feature is enabled, ACEXML parser allows access by namespace qualified
* names.
*/
static const ACEXML_Char namespaces_feature_[];
/**
* @var namespace_prefixes_feature_
*
* This constant string defines the SAX XML Namespace prefixes feature.
* Normally the list of attributes returned by the parser will not
* contain attributes used as namespace declarations (xmlns*). When this
* feature is enabled, the list of attributes contains the namespace
* declarations also.
*/
static const ACEXML_Char namespace_prefixes_feature_[];
/**
* @var validation_feature_
*
* This constant string defines the SAX XML Validation feature. When
* this feature is enabled, the parser validates the document in
* addition to checking for well-formedness.
*/
static const ACEXML_Char validation_feature_[];
/* @} */
/// Keeping track of the handlers. We do not manage the memory for
/// handlers.
ACEXML_DTDHandler *dtd_handler_;
ACEXML_EntityResolver *entity_resolver_;
ACEXML_ContentHandler *content_handler_;
ACEXML_ErrorHandler *error_handler_;
/// Document Type
ACEXML_Char *doctype_;
/// Current parser context
ACEXML_Parser_Context* current_;
/// Stack used to hold the Parser_Context
ACE_Unbounded_Stack<ACEXML_Parser_Context*> ctx_stack_;
/*
* The following two are essentially chains of references and is used by
* the parser to determine if there is any recursion. We keep two of
* these one for general entities and one for parameter entities, as they
* both fall under different namespaces.
*
*/
/// Set used to hold the general entity references that are active.
ACE_Unbounded_Stack<ACEXML_Char*> GE_reference_;
/// Set used to hold the parameter entity references that are active.
ACE_Unbounded_Stack<ACEXML_Char*> PE_reference_;
/// Obstack used by the parser to hold all the strings parsed
ACE_Obstack_T<ACEXML_Char> obstack_;
/// Alternative obstack used to hold any strings when the original is in use
ACE_Obstack_T<ACEXML_Char> alt_stack_;
/// Namespace stack used by the parser to implement support for Namespaces
ACEXML_NamespaceSupport xml_namespace_;
/// T => We are processing a nested namespace
int nested_namespace_;
/// Set of internal parsed general entities in the document
ACEXML_Entity_Manager internal_GE_;
/// Set of external parsed general entities in the document
ACEXML_Entity_Manager external_GE_;
/// Set of unparsed entities in the document
ACEXML_Entity_Manager unparsed_entities_;
/// Set of predefined entities used by the parser
ACEXML_Entity_Manager predef_entities_;
/// Set of internal parsed parameter entities in the document
ACEXML_Entity_Manager internal_PE_;
/// Set of external parsed parameter entities in the document
ACEXML_Entity_Manager external_PE_;
/// Set of notations declared in the document
ACEXML_Entity_Manager notations_;
/// State of the parser when it encounters a reference.
ACEXML_ParserInt::ReferenceState ref_state_;
/// T => We are parsing an external subset
int external_subset_;
/// T => We are parsing an external entity value
int external_entity_;
/// T => Internal DTD has parameter entity references
int has_pe_refs_;
/// If set, the document is a standalone XML document
int standalone_;
/// If set, the document has an external DTD subset
int external_dtd_;
/// If set, the document has an internal DTD
int internal_dtd_;
/// Feature flags
/// If set, the parser should parse a document without a prolog
int simple_parsing_;
/// If set, the parser should also validate
int validate_;
/// If set, the parser should allow access by namespace qualified names.
int namespaces_;
/// If set, the parser should include namespace declarations in the list
/// of attributes of an element.
int namespace_prefixes_;
};
#if defined (__ACEXML_INLINE__)
# include "ACEXML/parser/parser/Parser.i"
#endif /* __ACEXML_INLINE__ */
#include /**/ "ace/post.h"
#endif /* _ACEXML_BASIC_PARSER_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -