📄 xlat.cpp
字号:
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 + -