⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlparse.c

📁 Simple Jabber Client for Symbian Platform
💻 C
📖 第 1 页 / 共 5 页
字号:
#define ns (((Parser *)parser)->m_ns)
#define prologState (((Parser *)parser)->m_prologState)
#define processor (((Parser *)parser)->m_processor)
#define errorCode (((Parser *)parser)->m_errorCode)
#define eventPtr (((Parser *)parser)->m_eventPtr)
#define eventEndPtr (((Parser *)parser)->m_eventEndPtr)
#define positionPtr (((Parser *)parser)->m_positionPtr)
#define position (((Parser *)parser)->m_position)
#define openInternalEntities (((Parser *)parser)->m_openInternalEntities)
#define defaultExpandInternalEntities (((Parser *)parser)->m_defaultExpandInternalEntities)
#define tagLevel (((Parser *)parser)->m_tagLevel)
#define buffer (((Parser *)parser)->m_buffer)
#define bufferPtr (((Parser *)parser)->m_bufferPtr)
#define bufferEnd (((Parser *)parser)->m_bufferEnd)
#define parseEndByteIndex (((Parser *)parser)->m_parseEndByteIndex)
#define parseEndPtr (((Parser *)parser)->m_parseEndPtr)
#define bufferLim (((Parser *)parser)->m_bufferLim)
#define dataBuf (((Parser *)parser)->m_dataBuf)
#define dataBufEnd (((Parser *)parser)->m_dataBufEnd)
#define dtd (((Parser *)parser)->m_dtd)
#define declEntity (((Parser *)parser)->m_declEntity)
#define declNotationName (((Parser *)parser)->m_declNotationName)
#define declNotationPublicId (((Parser *)parser)->m_declNotationPublicId)
#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 _DEBUG
Parser *asParser(XML_Parser parser)
{
    return parser;
}
#endif
#endif

XML_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;
}

static
void 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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -