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

📄 xlat.cpp

📁 IBM的解析xml的工具Xerces的源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
                    continue;                }                //                //  Lets try to create the header file that was indicated for                //  this domain.                //                tmpFileBuf = new XMLCh [bufSize + 1];                tmpFileBuf[0] = 0;                XMLString::catString(tmpFileBuf, gOutPath);                XMLString::catString(tmpFileBuf, headerName);                char *tmpFileBufCh = XMLString::transcode(tmpFileBuf);                                FILE* outHeader = fopen(tmpFileBufCh, "wt+");                XMLString::release(&tmpFileBufCh);                if ((!outHeader) || (fwide(outHeader, 1) < 0))                 {                    wprintf(L"Could not open domain header file: %s\n\n", xmlStrToPrintable(tmpFileBuf));                    releasePrintableStr                    XMLString::release(&tmpFileBuf);                    XMLString::release(&headerName);                    XMLString::release(&errNameSpace);                    throw ErrReturn_OutFileOpenFailed;                }                XMLString::release(&tmpFileBuf);                                //                //  Write out the opening of the class they are nested within, and                //  the header protection define.                //                                fwprintf(outHeader, L"// This file is generated, don't edit it!!\n\n");                fwprintf(outHeader, L"#if !defined(ERRHEADER_%s)\n", xmlStrToPrintable(errNameSpace) );                releasePrintableStr                                fwprintf(outHeader, L"#define ERRHEADER_%s\n\n", xmlStrToPrintable(errNameSpace) );                releasePrintableStr                // If its not the exception domain, then we need a header included                if (XMLString::compareString(domainStr, XMLUni::fgExceptDomain))                    fwprintf(outHeader, L"#include <xercesc/framework/XMLErrorReporter.hpp>\n");                //  Write out the namespace declaration                fwprintf(outHeader, L"#include <xercesc/util/XercesDefs.hpp>\n");                fwprintf(outHeader, L"#include <xercesc/dom/DOMError.hpp>\n\n");                fwprintf(outHeader, L"XERCES_CPP_NAMESPACE_BEGIN\n\n");                //  Now the message codes                fwprintf(outHeader, L"class %s\n{\npublic :\n    enum Codes\n    {\n", xmlStrToPrintable(errNameSpace) );                releasePrintableStr                // Tell the formatter that a new domain is starting                formatter->startDomain                (                    domainStr                    , errNameSpace                );                //                //  Force out the first message, which is always implicit and is                //  the 'no error' entry for that domain.                //                unsigned int count = 0;                fwprintf(outHeader, L"        %-32s   = %d\n", longChars("NoError"), count++);                //                //  Loop through the children of this node, which should take us                //  through the optional Warning, Error, and Validity subsections.                //                DOMNode* typeNode = curElem->getFirstChild();                bool typeGotten[3] = { false, false, false };                while (typeNode)                {                    // Skip over text nodes or comment nodes ect...                    if (typeNode->getNodeType() != DOMNode::ELEMENT_NODE)                    {                        typeNode = typeNode->getNextSibling();                        continue;                    }                    // Convert it to an element node                    const DOMElement* typeElem = (const DOMElement*)typeNode;                    // Now get its tag name and convert that to a message type enum                    const XMLCh* typeName = typeElem->getTagName();                    MsgTypes type;                    tmpXMLStr = XMLString::transcode("Warning");                    XMLCh* tmpXMLStr2 = XMLString::transcode("Error");                    XMLCh* tmpXMLStr3 =XMLString::transcode("FatalError");                    if (!XMLString::compareString(typeName, tmpXMLStr ))                    {                        type = MsgType_Warning;                        typeGotten[0] = true;                    }                     else if (!XMLString::compareString(typeName, tmpXMLStr2 ))                    {                        type = MsgType_Error;                        typeGotten[1] = true;                    }                     else if (!XMLString::compareString(typeName, tmpXMLStr3 ))                    {                        type = MsgType_FatalError;                        typeGotten[2] = true;                    }                     else                    {                        wprintf(L"Expected a Warning, Error, or FatalError node\n\n");                        XMLString::release(&tmpXMLStr);                        XMLString::release(&tmpXMLStr2);                        XMLString::release(&tmpXMLStr3);                        throw ErrReturn_SrcFmtError;                    }                    XMLString::release(&tmpXMLStr);                    XMLString::release(&tmpXMLStr2);                    XMLString::release(&tmpXMLStr3);                    // Call the start message type event                    formatter->startMsgType(type);                    // Enumerate the messages under this subsection                    enumMessages                    (                        typeElem                        , formatter                        , outHeader                        , type                        , count                    );                    // Call the end message type event                    formatter->endMsgType(type);                    // Move to the next child of the source element                    typeNode = typeNode->getNextSibling();                }                //                //  For any that we did not get, spit out faux boundary                //  values for it.                //                for (unsigned int subIndex = 0; subIndex < 3; subIndex++)                {                    if (!typeGotten[subIndex])                    {                        fwprintf                        (                            outHeader                            , L"      , %s%-30s   = %d\n"                            , xmlStrToPrintable(typePrefixes[subIndex])                             , longChars("LowBounds")                            , count++                        );                        releasePrintableStr                        fwprintf                        (                            outHeader                            , L"      , %s%-30s   = %d\n"                            , xmlStrToPrintable(typePrefixes[subIndex])                             , longChars("HighBounds")                            , count++                        );                        releasePrintableStr                    }                }                // Tell the formatter that this domain is ending                formatter->endDomain(domainStr, count);                // Close out the enum declaration                fwprintf(outHeader, L"    };\n\n");                //                //  Generate the code that creates the simple static methods                //  for testing the error types. We don't do this for the                //  exceptions header.                //                if (XMLString::compareString(domainStr, XMLUni::fgExceptDomain))                {                    fwprintf                    (                        outHeader                        , L"    static bool isFatal(const %s::Codes toCheck)\n"                          L"    {\n"                          L"        return ((toCheck >= F_LowBounds) && (toCheck <= F_HighBounds));\n"                          L"    }\n\n"                        , xmlStrToPrintable(errNameSpace)                     );                    releasePrintableStr                    fwprintf                    (                        outHeader                        , L"    static bool isWarning(const %s::Codes toCheck)\n"                          L"    {\n"                          L"        return ((toCheck >= W_LowBounds) && (toCheck <= W_HighBounds));\n"                          L"    }\n\n"                        , xmlStrToPrintable(errNameSpace)                     );                    releasePrintableStr                    fwprintf                    (                        outHeader                        , L"    static bool isError(const %s::Codes toCheck)\n"                          L"    {\n"                          L"        return ((toCheck >= E_LowBounds) && (toCheck <= E_HighBounds));\n"                          L"    }\n\n"                        , xmlStrToPrintable(errNameSpace)                     );                    releasePrintableStr                    fwprintf                    (                        outHeader                        , L"    static XMLErrorReporter::ErrTypes errorType(const %s::Codes toCheck)\n"                          L"    {\n"                          L"       if ((toCheck >= W_LowBounds) && (toCheck <= W_HighBounds))\n"                          L"           return XMLErrorReporter::ErrType_Warning;\n"                          L"       else if ((toCheck >= F_LowBounds) && (toCheck <= F_HighBounds))\n"                          L"            return XMLErrorReporter::ErrType_Fatal;\n"                          L"       else if ((toCheck >= E_LowBounds) && (toCheck <= E_HighBounds))\n"                          L"            return XMLErrorReporter::ErrType_Error;\n"                          L"       return XMLErrorReporter::ErrTypes_Unknown;\n"                          L"    }\n"                        , xmlStrToPrintable(errNameSpace)                    );                    releasePrintableStr                    fwprintf                    (                        outHeader                        , L"    static DOMError::ErrorSeverity  DOMErrorType(const %s::Codes toCheck)\n"                          L"    {\n"                          L"       if ((toCheck >= W_LowBounds) && (toCheck <= W_HighBounds))\n"                          L"           return DOMError::DOM_SEVERITY_WARNING;\n"                          L"       else if ((toCheck >= F_LowBounds) && (toCheck <= F_HighBounds))\n"                          L"            return DOMError::DOM_SEVERITY_FATAL_ERROR;\n"                          L"       else return DOMError::DOM_SEVERITY_ERROR;\n"                          L"    }\n"                        , xmlStrToPrintable(errNameSpace)                    );                    releasePrintableStr                }                // the private default ctor                fwprintf(outHeader, L"\n");                fwprintf(outHeader, L"private:\n");                fwprintf(outHeader, L"    // -----------------------------------------------------------------------\n");                fwprintf(outHeader, L"    //  Unimplemented constructors and operators\n");                fwprintf(outHeader, L"    // -----------------------------------------------------------------------\n");                fwprintf(outHeader, L"    %s();\n", xmlStrToPrintable(errNameSpace));                releasePrintableStr                // And close out the class declaration, the namespace declaration and the header file                fwprintf(outHeader, L"};\n\n");                fwprintf(outHeader, L"XERCES_CPP_NAMESPACE_END\n\n");                fwprintf(outHeader, L"#endif\n\n");                fclose(outHeader);                XMLString::release(&headerName);                XMLString::release(&errNameSpace);            }            // Ok, we are done so call the end output method            formatter->endOutput();            // And clean up the stuff we allocated            delete formatter;        }        catch(const ErrReturns retVal)        {            // And call the termination method            if(srcDoc)                delete srcDoc;            XMLPlatformUtils::Terminate();            return retVal;        }        delete srcDoc;    }    // And call the termination method    release_Globals();    XMLPlatformUtils::Terminate();    // Went ok, so return success    return ErrReturn_Success;}// -----------------------------------------------------------------------//  XlatErrHandler: Implementation of the error handler interface// -----------------------------------------------------------------------void XlatErrHandler::warning(const SAXParseException& toCatch){    parseError(toCatch);}void XlatErrHandler::error(const SAXParseException& toCatch){    parseError(toCatch);}void XlatErrHandler::fatalError(const SAXParseException& toCatch){    parseError(toCatch);}void XlatErrHandler::resetErrors(){}// if longChars is a macro, don't bother#ifndef longChars    wchar_t* longChars(const char *str)     {        mbstowcs(fTmpWStr, str, 255);        return (fTmpWStr);    }#endif

⌨️ 快捷键说明

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