📄 xmlparse.cpp
字号:
#define poolFinish(pool) ((pool)->start = (pool)->ptr)#define poolAppendChar(pool, c) \ (((pool)->ptr == (pool)->end && !poolGrow(pool)) \ ? 0 \ : ((*((pool)->ptr)++ = c), 1))struct XML_ParserStruct { /* The first member must be userData so that the XML_GetUserData macro works. */ void *m_userData; void *m_handlerArg; char *m_buffer; const XML_Memory_Handling_Suite m_mem; /* first character to be parsed */ const char *m_bufferPtr; /* past last character to be parsed */ char *m_bufferEnd; /* allocated end of buffer */ const char *m_bufferLim; XML_Index m_parseEndByteIndex; const char *m_parseEndPtr; XML_Char *m_dataBuf; XML_Char *m_dataBufEnd; XML_StartElementHandler m_startElementHandler; XML_EndElementHandler m_endElementHandler; XML_CharacterDataHandler m_characterDataHandler; XML_ProcessingInstructionHandler m_processingInstructionHandler; XML_CommentHandler m_commentHandler; XML_StartCdataSectionHandler m_startCdataSectionHandler; XML_EndCdataSectionHandler m_endCdataSectionHandler; XML_DefaultHandler m_defaultHandler; XML_StartDoctypeDeclHandler m_startDoctypeDeclHandler; XML_EndDoctypeDeclHandler m_endDoctypeDeclHandler; XML_UnparsedEntityDeclHandler m_unparsedEntityDeclHandler; XML_NotationDeclHandler m_notationDeclHandler; XML_StartNamespaceDeclHandler m_startNamespaceDeclHandler; XML_EndNamespaceDeclHandler m_endNamespaceDeclHandler; XML_NotStandaloneHandler m_notStandaloneHandler; XML_ExternalEntityRefHandler m_externalEntityRefHandler; XML_Parser m_externalEntityRefHandlerArg; XML_SkippedEntityHandler m_skippedEntityHandler; XML_UnknownEncodingHandler m_unknownEncodingHandler; XML_ElementDeclHandler m_elementDeclHandler; XML_AttlistDeclHandler m_attlistDeclHandler; XML_EntityDeclHandler m_entityDeclHandler; XML_XmlDeclHandler m_xmlDeclHandler; const ENCODING *m_encoding; INIT_ENCODING m_initEncoding; const ENCODING *m_internalEncoding; const XML_Char *m_protocolEncodingName; XML_Bool m_ns; XML_Bool m_ns_triplets; void *m_unknownEncodingMem; void *m_unknownEncodingData; void *m_unknownEncodingHandlerData; void (XMLCALL *m_unknownEncodingRelease)(void *); PROLOG_STATE m_prologState; Processor *m_processor; enum XML_Error m_errorCode; const char *m_eventPtr; const char *m_eventEndPtr; const char *m_positionPtr; OPEN_INTERNAL_ENTITY *m_openInternalEntities; OPEN_INTERNAL_ENTITY *m_freeInternalEntities; XML_Bool m_defaultExpandInternalEntities; int m_tagLevel; ENTITY *m_declEntity; const XML_Char *m_doctypeName; const XML_Char *m_doctypeSysid; const XML_Char *m_doctypePubid; const XML_Char *m_declAttributeType; const XML_Char *m_declNotationName; const XML_Char *m_declNotationPublicId; ELEMENT_TYPE *m_declElementType; ATTRIBUTE_ID *m_declAttributeId; XML_Bool m_declAttributeIsCdata; XML_Bool m_declAttributeIsId; DTD *m_dtd; const XML_Char *m_curBase; TAG *m_tagStack; TAG *m_freeTagList; BINDING *m_inheritedBindings; BINDING *m_freeBindingList; int m_attsSize; int m_nSpecifiedAtts; int m_idAttIndex; ATTRIBUTE *m_atts; NS_ATT *m_nsAtts; unsigned long m_nsAttsVersion; unsigned char m_nsAttsPower; POSITION m_position; STRING_POOL m_tempPool; STRING_POOL m_temp2Pool; char *m_groupConnector; unsigned int m_groupSize; XML_Char m_namespaceSeparator; XML_Parser m_parentParser; XML_ParsingStatus m_parsingStatus;#ifdef XML_DTD XML_Bool m_isParamEntity; XML_Bool m_useForeignDTD; enum XML_ParamEntityParsing m_paramEntityParsing;#endif};#define MALLOC(s) (parser->m_mem.malloc_fcn((s)))#define REALLOC(p,s) (parser->m_mem.realloc_fcn((p),(s)))#define FREE(p) (parser->m_mem.free_fcn((p)))#define userData (parser->m_userData)#define handlerArg (parser->m_handlerArg)#define startElementHandler (parser->m_startElementHandler)#define endElementHandler (parser->m_endElementHandler)#define characterDataHandler (parser->m_characterDataHandler)#define processingInstructionHandler \ (parser->m_processingInstructionHandler)#define commentHandler (parser->m_commentHandler)#define startCdataSectionHandler \ (parser->m_startCdataSectionHandler)#define endCdataSectionHandler (parser->m_endCdataSectionHandler)#define defaultHandler (parser->m_defaultHandler)#define startDoctypeDeclHandler (parser->m_startDoctypeDeclHandler)#define endDoctypeDeclHandler (parser->m_endDoctypeDeclHandler)#define unparsedEntityDeclHandler \ (parser->m_unparsedEntityDeclHandler)#define notationDeclHandler (parser->m_notationDeclHandler)#define startNamespaceDeclHandler \ (parser->m_startNamespaceDeclHandler)#define endNamespaceDeclHandler (parser->m_endNamespaceDeclHandler)#define notStandaloneHandler (parser->m_notStandaloneHandler)#define externalEntityRefHandler \ (parser->m_externalEntityRefHandler)#define externalEntityRefHandlerArg \ (parser->m_externalEntityRefHandlerArg)#define internalEntityRefHandler \ (parser->m_internalEntityRefHandler)#define skippedEntityHandler (parser->m_skippedEntityHandler)#define unknownEncodingHandler (parser->m_unknownEncodingHandler)#define elementDeclHandler (parser->m_elementDeclHandler)#define attlistDeclHandler (parser->m_attlistDeclHandler)#define entityDeclHandler (parser->m_entityDeclHandler)#define xmlDeclHandler (parser->m_xmlDeclHandler)#define encoding (parser->m_encoding)#define initEncoding (parser->m_initEncoding)#define internalEncoding (parser->m_internalEncoding)#define unknownEncodingMem (parser->m_unknownEncodingMem)#define unknownEncodingData (parser->m_unknownEncodingData)#define unknownEncodingHandlerData \ (parser->m_unknownEncodingHandlerData)#define unknownEncodingRelease (parser->m_unknownEncodingRelease)#define protocolEncodingName (parser->m_protocolEncodingName)#define ns (parser->m_ns)#define ns_triplets (parser->m_ns_triplets)#define prologState (parser->m_prologState)#define processor (parser->m_processor)#define errorCode (parser->m_errorCode)#define eventPtr (parser->m_eventPtr)#define eventEndPtr (parser->m_eventEndPtr)#define positionPtr (parser->m_positionPtr)#define position (parser->m_position)#define openInternalEntities (parser->m_openInternalEntities)#define freeInternalEntities (parser->m_freeInternalEntities)#define defaultExpandInternalEntities \ (parser->m_defaultExpandInternalEntities)#define tagLevel (parser->m_tagLevel)#define buffer (parser->m_buffer)#define bufferPtr (parser->m_bufferPtr)#define bufferEnd (parser->m_bufferEnd)#define parseEndByteIndex (parser->m_parseEndByteIndex)#define parseEndPtr (parser->m_parseEndPtr)#define bufferLim (parser->m_bufferLim)#define dataBuf (parser->m_dataBuf)#define dataBufEnd (parser->m_dataBufEnd)#define _dtd (parser->m_dtd)#define curBase (parser->m_curBase)#define declEntity (parser->m_declEntity)#define doctypeName (parser->m_doctypeName)#define doctypeSysid (parser->m_doctypeSysid)#define doctypePubid (parser->m_doctypePubid)#define declAttributeType (parser->m_declAttributeType)#define declNotationName (parser->m_declNotationName)#define declNotationPublicId (parser->m_declNotationPublicId)#define declElementType (parser->m_declElementType)#define declAttributeId (parser->m_declAttributeId)#define declAttributeIsCdata (parser->m_declAttributeIsCdata)#define declAttributeIsId (parser->m_declAttributeIsId)#define freeTagList (parser->m_freeTagList)#define freeBindingList (parser->m_freeBindingList)#define inheritedBindings (parser->m_inheritedBindings)#define tagStack (parser->m_tagStack)#define atts (parser->m_atts)#define attsSize (parser->m_attsSize)#define nSpecifiedAtts (parser->m_nSpecifiedAtts)#define idAttIndex (parser->m_idAttIndex)#define nsAtts (parser->m_nsAtts)#define nsAttsVersion (parser->m_nsAttsVersion)#define nsAttsPower (parser->m_nsAttsPower)#define tempPool (parser->m_tempPool)#define temp2Pool (parser->m_temp2Pool)#define groupConnector (parser->m_groupConnector)#define groupSize (parser->m_groupSize)#define namespaceSeparator (parser->m_namespaceSeparator)#define parentParser (parser->m_parentParser)#define ps_parsing (parser->m_parsingStatus.parsing)#define ps_finalBuffer (parser->m_parsingStatus.finalBuffer)#ifdef XML_DTD#define isParamEntity (parser->m_isParamEntity)#define useForeignDTD (parser->m_useForeignDTD)#define paramEntityParsing (parser->m_paramEntityParsing)#endif /* XML_DTD */XML_Parser XMLCALLXML_ParserCreate(const XML_Char *encodingName){ return XML_ParserCreate_MM(encodingName, NULL, NULL);}XML_Parser XMLCALLXML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep){ XML_Char tmp[2]; *tmp = nsSep; return XML_ParserCreate_MM(encodingName, NULL, tmp);}static const XML_Char implicitContext[] = { 'x', 'm', 'l', '=', 'h', 't', 't', 'p', ':', '/', '/', 'w', 'w', 'w', '.', 'w', '3', '.', 'o', 'r', 'g', '/', 'X', 'M', 'L', '/', '1', '9', '9', '8', '/', 'n', 'a', 'm', 'e', 's', 'p', 'a', 'c', 'e', '\0'};XML_Parser XMLCALLXML_ParserCreate_MM(const XML_Char *encodingName, const XML_Memory_Handling_Suite *memsuite, const XML_Char *nameSep){ XML_Parser parser = parserCreate(encodingName, memsuite, nameSep, NULL); if (parser != NULL && ns) { /* implicit context only set for root parser, since child parsers (i.e. external entity parsers) will inherit it */ if (!setContext(parser, implicitContext)) { XML_ParserFree(parser); return NULL; } } return parser;}static XML_ParserparserCreate(const XML_Char *encodingName, const XML_Memory_Handling_Suite *memsuite, const XML_Char *nameSep, DTD *dtd){ XML_Parser parser; if (memsuite) { XML_Memory_Handling_Suite *mtemp; parser = (XML_Parser) memsuite->malloc_fcn(sizeof(struct XML_ParserStruct)); if (parser != NULL) { mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem); mtemp->malloc_fcn = memsuite->malloc_fcn; mtemp->realloc_fcn = memsuite->realloc_fcn; mtemp->free_fcn = memsuite->free_fcn; } } else { XML_Memory_Handling_Suite *mtemp; parser = (XML_Parser)malloc(sizeof(struct XML_ParserStruct)); if (parser != NULL) { mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem); mtemp->malloc_fcn = malloc; mtemp->realloc_fcn = realloc; mtemp->free_fcn = free; } } if (!parser) return parser; buffer = NULL; bufferLim = NULL; attsSize = INIT_ATTS_SIZE; atts = (ATTRIBUTE *)MALLOC(attsSize * sizeof(ATTRIBUTE)); if (atts == NULL) { FREE(parser); return NULL; } dataBuf = (XML_Char *)MALLOC(INIT_DATA_BUF_SIZE * sizeof(XML_Char)); if (dataBuf == NULL) { FREE(atts); FREE(parser); return NULL; } dataBufEnd = dataBuf + INIT_DATA_BUF_SIZE; if (dtd) _dtd = dtd; else { _dtd = dtdCreate(&parser->m_mem); if (_dtd == NULL) { FREE(dataBuf); FREE(atts); FREE(parser); return NULL; } } freeBindingList = NULL; freeTagList = NULL; freeInternalEntities = NULL; groupSize = 0; groupConnector = NULL; unknownEncodingHandler = NULL; unknownEncodingHandlerData = NULL; namespaceSeparator = '!'; ns = XML_FALSE; ns_triplets = XML_FALSE; nsAtts = NULL; nsAttsVersion = 0; nsAttsPower = 0; poolInit(&tempPool, &(parser->m_mem)); poolInit(&temp2Pool, &(parser->m_mem)); parserInit(parser, encodingName); if (encodingName && !protocolEncodingName) { XML_ParserFree(parser); return NULL; } if (nameSep) { ns = XML_TRUE; internalEncoding = XmlGetInternalEncodingNS(); namespaceSeparator = *nameSep; } else { internalEncoding = XmlGetInternalEncoding(); } return parser;}static voidparserInit(XML_Parser parser, const XML_Char *encodingName){ processor = prologInitProcessor; XmlPrologStateInit(&prologState); protocolEncodingName = (encodingName != NULL ? poolCopyString(&tempPool, encodingName) : NULL); curBase = NULL; XmlInitEncoding(&initEncoding, &encoding, 0); userData = NULL; handlerArg = NULL; startElementHandler = NULL; endElementHandler = NULL; characterDataHandler = NULL; processingInstructionHandler = NULL; commentHandler = NULL; startCdataSectionHandler = NULL; endCdataSectionHandler = NULL; defaultHandler = NULL; startDoctypeDeclHandler = NULL; endDoctypeDeclHandler = NULL; unparsedEntityDeclHandler = NULL; notationDeclHandler = NULL; startNamespaceDeclHandler = NULL; endNamespaceDeclHandler = NULL; notStandaloneHandler = NULL; externalEntityRefHandler = NULL; externalEntityRefHandlerArg = parser; skippedEntityHandler = NULL; elementDeclHandler = NULL; attlistDeclHandler = NULL; entityDeclHandler = NULL; xmlDeclHandler = NULL; bufferPtr = buffer; bufferEnd = buffer; parseEndByteIndex = 0; parseEndPtr = NULL; declElementType = NULL; declAttributeId = NULL; declEntity = NULL; doctypeName = NULL; doctypeSysid = NULL; doctypePubid = NULL; declAttributeType = NULL; declNotationName = NULL; declNotationPublicId = NULL; declAttributeIsCdata = XML_FALSE; declAttributeIsId = XML_FALSE; memset(&position, 0, sizeof(POSITION)); errorCode = XML_ERROR_NONE; eventPtr = NULL; eventEndPtr = NULL; positionPtr = NULL; openInternalEntities = NULL; defaultExpandInternalEntities = XML_TRUE; tagLevel = 0; tagStack = NULL; inheritedBindings = NULL; nSpecifiedAtts = 0; unknownEncodingMem = NULL; unknownEncodingRelease = NULL; unknownEncodingData = NULL; parentParser = NULL; ps_parsing = XML_INITIALIZED;#ifdef XML_DTD isParamEntity = XML_FALSE; useForeignDTD = XML_FALSE; paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER;#endif}/* moves list of bindings to freeBindingList */static void FASTCALLmoveToFreeBindingList(XML_Parser parser, BINDING *bindings){ while (bindings) { BINDING *b = bindings; bindings = bindings->nextTagBinding; b->nextTagBinding = freeBindingList; freeBindingList = b; }}XML_Bool XMLCALLXML_ParserReset(XML_Parser parser, const XML_Char *encodingName){ TAG *tStk; OPEN_INTERNAL_ENTITY *openEntityList; if (parentParser)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -