📄 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, 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 + -