📄 xmlparse.c
字号:
#define declElementType (((Parser *)parser)->m_declElementType)#define declAttributeId (((Parser *)parser)->m_declAttributeId)#define declAttributeIsCdata (((Parser *)parser)->m_declAttributeIsCdata)#define freeTagList (((Parser *)parser)->m_freeTagList)#define freeBindingList (((Parser *)parser)->m_freeBindingList)#define inheritedBindings (((Parser *)parser)->m_inheritedBindings)#define tagStack (((Parser *)parser)->m_tagStack)#define atts (((Parser *)parser)->m_atts)#define attsSize (((Parser *)parser)->m_attsSize)#define nSpecifiedAtts (((Parser *)parser)->m_nSpecifiedAtts)#define tempPool (((Parser *)parser)->m_tempPool)#define temp2Pool (((Parser *)parser)->m_temp2Pool)#define groupConnector (((Parser *)parser)->m_groupConnector)#define groupSize (((Parser *)parser)->m_groupSize)#define hadExternalDoctype (((Parser *)parser)->m_hadExternalDoctype)#define namespaceSeparator (((Parser *)parser)->m_namespaceSeparator)#ifdef _MSC_VER#ifdef _DEBUGParser *asParser(XML_Parser parser){ return parser;}#endif#endifXML_Parser XML_ParserCreate(const XML_Char *encodingName){ XML_Parser parser = malloc(sizeof(Parser)); if (!parser) return parser; processor = prologInitProcessor; XmlPrologStateInit(&prologState); userData = 0; handlerArg = 0; startElementHandler = 0; endElementHandler = 0; characterDataHandler = 0; processingInstructionHandler = 0; commentHandler = 0; startCdataSectionHandler = 0; endCdataSectionHandler = 0; defaultHandler = 0; unparsedEntityDeclHandler = 0; notationDeclHandler = 0; startNamespaceDeclHandler = 0; endNamespaceDeclHandler = 0; notStandaloneHandler = 0; externalEntityRefHandler = 0; externalEntityRefHandlerArg = parser; unknownEncodingHandler = 0; buffer = 0; bufferPtr = 0; bufferEnd = 0; parseEndByteIndex = 0; parseEndPtr = 0; bufferLim = 0; declElementType = 0; declAttributeId = 0; declEntity = 0; declNotationName = 0; declNotationPublicId = 0; memset(&position, 0, sizeof(POSITION)); errorCode = XML_ERROR_NONE; eventPtr = 0; eventEndPtr = 0; positionPtr = 0; openInternalEntities = 0; tagLevel = 0; tagStack = 0; freeTagList = 0; freeBindingList = 0; inheritedBindings = 0; attsSize = INIT_ATTS_SIZE; atts = malloc(attsSize * sizeof(ATTRIBUTE)); nSpecifiedAtts = 0; dataBuf = malloc(INIT_DATA_BUF_SIZE * sizeof(XML_Char)); groupSize = 0; groupConnector = 0; hadExternalDoctype = 0; unknownEncodingMem = 0; unknownEncodingRelease = 0; unknownEncodingData = 0; unknownEncodingHandlerData = 0; namespaceSeparator = '!'; ns = 0; poolInit(&tempPool); poolInit(&temp2Pool); protocolEncodingName = encodingName ? poolCopyString(&tempPool, encodingName) : 0; if (!dtdInit(&dtd) || !atts || !dataBuf || (encodingName && !protocolEncodingName)) { XML_ParserFree(parser); return 0; } dataBufEnd = dataBuf + INIT_DATA_BUF_SIZE; XmlInitEncoding(&initEncoding, &encoding, 0); return parser;}XML_Parser XML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep){ static const XML_Char implicitContext[] = { XML_T('x'), XML_T('m'), XML_T('l'), XML_T('='), XML_T('h'), XML_T('t'), XML_T('t'), XML_T('p'), XML_T(':'), XML_T('/'), XML_T('/'), XML_T('w'), XML_T('w'), XML_T('w'), XML_T('.'), XML_T('w'), XML_T('3'), XML_T('.'), XML_T('o'), XML_T('r'), XML_T('g'), XML_T('/'), XML_T('X'), XML_T('M'), XML_T('L'), XML_T('/'), XML_T('1'), XML_T('9'), XML_T('9'), XML_T('8'), XML_T('/'), XML_T('n'), XML_T('a'), XML_T('m'), XML_T('e'), XML_T('s'), XML_T('p'), XML_T('a'), XML_T('c'), XML_T('e'), XML_T('\0') }; XML_Parser parser = XML_ParserCreate(encodingName); if (parser) { XmlInitEncodingNS(&initEncoding, &encoding, 0); ns = 1; namespaceSeparator = nsSep; } if (!setContext(parser, implicitContext)) { XML_ParserFree(parser); return 0; } return parser;}int XML_SetEncoding(XML_Parser parser, const XML_Char *encodingName){ if (!encodingName) protocolEncodingName = 0; else { protocolEncodingName = poolCopyString(&tempPool, encodingName); if (!protocolEncodingName) return 0; } return 1;}XML_Parser XML_ExternalEntityParserCreate(XML_Parser oldParser, const XML_Char *context, const XML_Char *encodingName){ XML_Parser parser = oldParser; DTD *oldDtd = &dtd; XML_StartElementHandler oldStartElementHandler = startElementHandler; XML_EndElementHandler oldEndElementHandler = endElementHandler; XML_CharacterDataHandler oldCharacterDataHandler = characterDataHandler; XML_ProcessingInstructionHandler oldProcessingInstructionHandler = processingInstructionHandler; XML_CommentHandler oldCommentHandler = commentHandler; XML_StartCdataSectionHandler oldStartCdataSectionHandler = startCdataSectionHandler; XML_EndCdataSectionHandler oldEndCdataSectionHandler = endCdataSectionHandler; XML_DefaultHandler oldDefaultHandler = defaultHandler; XML_StartNamespaceDeclHandler oldStartNamespaceDeclHandler = startNamespaceDeclHandler; XML_EndNamespaceDeclHandler oldEndNamespaceDeclHandler = endNamespaceDeclHandler; XML_NotStandaloneHandler oldNotStandaloneHandler = notStandaloneHandler; XML_ExternalEntityRefHandler oldExternalEntityRefHandler = externalEntityRefHandler; XML_UnknownEncodingHandler oldUnknownEncodingHandler = unknownEncodingHandler; void *oldUserData = userData; void *oldHandlerArg = handlerArg; int oldDefaultExpandInternalEntities = defaultExpandInternalEntities; void *oldExternalEntityRefHandlerArg = externalEntityRefHandlerArg; parser = (ns ? XML_ParserCreateNS(encodingName, namespaceSeparator) : XML_ParserCreate(encodingName)); if (!parser) return 0; startElementHandler = oldStartElementHandler; endElementHandler = oldEndElementHandler; characterDataHandler = oldCharacterDataHandler; processingInstructionHandler = oldProcessingInstructionHandler; commentHandler = oldCommentHandler; startCdataSectionHandler = oldStartCdataSectionHandler; endCdataSectionHandler = oldEndCdataSectionHandler; defaultHandler = oldDefaultHandler; startNamespaceDeclHandler = oldStartNamespaceDeclHandler; endNamespaceDeclHandler = oldEndNamespaceDeclHandler; notStandaloneHandler = oldNotStandaloneHandler; externalEntityRefHandler = oldExternalEntityRefHandler; unknownEncodingHandler = oldUnknownEncodingHandler; userData = oldUserData; if (oldUserData == oldHandlerArg) handlerArg = userData; else handlerArg = parser; if (oldExternalEntityRefHandlerArg != oldParser) externalEntityRefHandlerArg = oldExternalEntityRefHandlerArg; defaultExpandInternalEntities = oldDefaultExpandInternalEntities; if (!dtdCopy(&dtd, oldDtd) || !setContext(parser, context)) { XML_ParserFree(parser); return 0; } processor = externalEntityInitProcessor; return parser;}staticvoid destroyBindings(BINDING *bindings){ for (;;) { BINDING *b = bindings; if (!b) break; bindings = b->nextTagBinding; free(b->uri); free(b); }}void XML_ParserFree(XML_Parser parser){ for (;;) { TAG *p; if (tagStack == 0) { if (freeTagList == 0) break; tagStack = freeTagList; freeTagList = 0; } p = tagStack; tagStack = tagStack->parent; free(p->buf); destroyBindings(p->bindings); free(p); } destroyBindings(freeBindingList); destroyBindings(inheritedBindings); poolDestroy(&tempPool); poolDestroy(&temp2Pool); dtdDestroy(&dtd); free((void *)atts); free(groupConnector); free(buffer); free(dataBuf); free(unknownEncodingMem); if (unknownEncodingRelease) unknownEncodingRelease(unknownEncodingData); free(parser);}void XML_UseParserAsHandlerArg(XML_Parser parser){ handlerArg = parser;}void XML_SetUserData(XML_Parser parser, void *p){ if (handlerArg == userData) handlerArg = userData = p; else userData = p;}int XML_SetBase(XML_Parser parser, const XML_Char *p){ if (p) { p = poolCopyString(&dtd.pool, p); if (!p) return 0; dtd.base = p; } else dtd.base = 0; return 1;}const XML_Char *XML_GetBase(XML_Parser parser){ return dtd.base;}int XML_GetSpecifiedAttributeCount(XML_Parser parser){ return nSpecifiedAtts;}void XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end){ startElementHandler = start; endElementHandler = end;}void XML_SetCharacterDataHandler(XML_Parser parser, XML_CharacterDataHandler handler){ characterDataHandler = handler;}void XML_SetProcessingInstructionHandler(XML_Parser parser, XML_ProcessingInstructionHandler handler){ processingInstructionHandler = handler;}void XML_SetCommentHandler(XML_Parser parser, XML_CommentHandler handler){ commentHandler = handler;}void XML_SetCdataSectionHandler(XML_Parser parser, XML_StartCdataSectionHandler start, XML_EndCdataSectionHandler end){ startCdataSectionHandler = start; endCdataSectionHandler = end;}void XML_SetDefaultHandler(XML_Parser parser, XML_DefaultHandler handler){ defaultHandler = handler; defaultExpandInternalEntities = 0;}void XML_SetDefaultHandlerExpand(XML_Parser parser, XML_DefaultHandler handler){ defaultHandler = handler; defaultExpandInternalEntities = 1;}void XML_SetUnparsedEntityDeclHandler(XML_Parser parser, XML_UnparsedEntityDeclHandler handler){ unparsedEntityDeclHandler = handler;}void XML_SetNotationDeclHandler(XML_Parser parser, XML_NotationDeclHandler handler){ notationDeclHandler = handler;}void XML_SetNamespaceDeclHandler(XML_Parser parser, XML_StartNamespaceDeclHandler start, XML_EndNamespaceDeclHandler end){ startNamespaceDeclHandler = start; endNamespaceDeclHandler = end;}void XML_SetNotStandaloneHandler(XML_Parser parser, XML_NotStandaloneHandler handler){ notStandaloneHandler = handler;}void XML_SetExternalEntityRefHandler(XML_Parser parser, XML_ExternalEntityRefHandler handler){ externalEntityRefHandler = handler;}void XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg){ if (arg) externalEntityRefHandlerArg = arg; else externalEntityRefHandlerArg = parser;}void XML_SetUnknownEncodingHandler(XML_Parser parser, XML_UnknownEncodingHandler handler, void *data){ unknownEncodingHandler = handler; unknownEncodingHandlerData = data;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -