void ICUResBundFormatter::endMsgType(const MsgTypes type) { #ifndef ICU_RESBUNDLE_IN_TABLE_FORM fwprintf(fOutFl, L"\t\t\"%s End \" ,\n", xmlStrToPrintable(typePrefixes[type]) ); releasePrintableStr #endif }
// --------------------------------------------------------------------------- // CppSrcFormatter: Implementation of the formatter interface // --------------------------------------------------------------------------- void CppSrcFormatter::endDomain(const XMLCh* const domainName , const unsigned int msgCount) { // And close out the array declaration fwprintf(fOutFl, L"\n};\n"); // Output the const size value fwprintf(fOutFl, L"const unsigned int %s%s = %d;\n\n", xmlStrToPrintable(fCurDomainName), longChars("Size"), msgCount); releasePrintableStr }
void ICUResBundFormatter::startOutput(const XMLCh* const msgLocale , const XMLCh* const outPath) { // // Ok, lets try to open the the output file. All of the messages // for all the domains are put into a single Msg file, which can be // compiled into the program. // // CppErrMsgs_xxxx.Msg // // where xxx is the locale suffix passed in. // const unsigned int bufSize = 4095; XMLCh tmpBuf[bufSize + 1]; tmpBuf[0] = 0; XMLCh *tmpXMLStr = XMLString::transcode(".txt"); // ICU Resource Bundles now uses "root" as locale XMLCh* locale = XMLString::transcode ("root"); XMLString::catString(tmpBuf, outPath); XMLString::catString(tmpBuf, locale); XMLString::catString(tmpBuf, tmpXMLStr ); XMLString::release(&tmpXMLStr); char *tmpStr = XMLString::transcode(tmpBuf); fOutFl = fopen(tmpStr, "wt"); XMLString::release(&tmpStr); if ((!fOutFl) || (fwide(fOutFl, 1) < 0)) { wprintf(L"Could not open the output file: %s\n\n", xmlStrToPrintable(tmpBuf) ); releasePrintableStr throw ErrReturn_OutFileOpenFailed; } // Set the message delimiter fwprintf(fOutFl, L"%s { \n", xmlStrToPrintable(locale) ); releasePrintableStr XMLString::release(&locale); }
void ICUResBundFormatter::nextMessage(const XMLCh* const msgText , const XMLCh* const msgId , const unsigned int messageId , const unsigned int curId) { // // We have to transcode the message text to UTF-8 in order to be able // to write it out to a message catalog (which is not Unicode enabled.) // If the text is just US-ASCII, this won't have any effect, but don't // bother checking, just do it simple and stupid. // // // array_name { // "xxx" , // "yyy" , // } // // // table_name { // AB { "xxx" } // CD { "yyy" } // } // #ifdef ICU_RESBUNDLE_IN_TABLE_FORM fwprintf(fOutFl, L"\t\t %3d { \"%s\" } \n", curId, xmlStrToPrintable(msgText)); releasePrintableStr // need to print leading 0 if less than 100, not tested yet #else fwprintf(fOutFl, L"\t\t\"%s\" ,\n", xmlStrToPrintable(msgText)); releasePrintableStr // need a space between the last character and the closing " #endif }
void Win32RCFormatter::startOutput( const XMLCh* const locale , const XMLCh* const outPath) { // // Ok, lets try to open the the output file. All of the messages for all // the domains are put into a single message tabble in a single RC file, // which can be linked into the program. // // CppErrMsgs_xxxx.RC // // where xxx is the locale suffix passed in. // const unsigned int bufSize = 4095; XMLCh tmpBuf[bufSize + 1]; // make sure the append will work tmpBuf[0] = 0; XMLCh *tmpXMLStr = XMLString::transcode("CppErrMsgs_"); XMLCh *tmpXMLStr2 = XMLString::transcode(".RC"); XMLString::catString(tmpBuf, outPath); XMLString::catString(tmpBuf, tmpXMLStr ); XMLString::catString(tmpBuf, locale); XMLString::catString(tmpBuf, tmpXMLStr2 ); XMLString::release(&tmpXMLStr); XMLString::release(&tmpXMLStr2); char *tmpStr = XMLString::transcode(tmpBuf); fOutFl = fopen(tmpStr, "wt"); XMLString::release(&tmpStr); if ((!fOutFl) || (fwide(fOutFl,1) < 0)) { wprintf(L"Could not open the output file: %s\n\n", xmlStrToPrintable(tmpBuf) ); releasePrintableStr throw ErrReturn_OutFileOpenFailed; } // // Ok, lets output the grunt data at the start of the file. We put out a // comment that indicates its a generated file, and the title string. // fwprintf ( fOutFl , L"// ----------------------------------------------------------------\n" L"// This file was generated from the XML error message source.\n" L"// so do not edit this file directly!!\n" L"// ----------------------------------------------------------------\n\n" ); }
void MsgCatFormatter::startDomain( const XMLCh* const domainName , const XMLCh* const nameSpace) { // Output a constant to the header file fwprintf(fOutHpp, L"const unsigned int CatId_%s = %d;\n", xmlStrToPrintable(nameSpace), fSeqId); releasePrintableStr // // Output the leading part of the array declaration. Its just an // array of pointers to Unicode chars. // fwprintf(fOutFl, L"$set %u\n", fSeqId); // And bump the sequence id fSeqId++; }
void MsgCatFormatter::nextMessage(const XMLCh* const msgText , const XMLCh* const msgId , const unsigned int messageId , const unsigned int curId) { // // We have to transcode the message text to UTF-8 in order to be able // to write it out to a message catalog (which is not Unicode enabled.) // If the text is just US-ASCII, this won't have any effect, but don't // bother checking, just do it simple and stupid. // // // on hp, it is required that message line shall start with number // w/o leading space. // fwprintf(fOutFl, L"%d %s\n", curId, xmlStrToPrintable(msgText)); releasePrintableStr }
void ICUResBundFormatter::startDomain(const XMLCh* const domainName , const XMLCh* const nameSpace) { // // Output: // // an array // domainName { // int index = XMLString::lastIndexOf(domainName, chForwardSlash); #ifdef ICU_RESBUNDLE_IN_TABLE_FORM fwprintf(fOutFl, L"\n\t // a table \n"); #else fwprintf(fOutFl, L"\n\t // an array \n"); #endif fwprintf(fOutFl, L"\t%s { \n" , xmlStrToPrintable(&(domainName[index+1]))); releasePrintableStr }
void CppSrcFormatter::startDomain( const XMLCh* const domainName , const XMLCh* const) { // // We have a different array name for each domain, so store that for // later use and for use below. // XMLString::release(&fCurDomainName); if (!XMLString::compareString(XMLUni::fgXMLErrDomain, domainName)) { fCurDomainName = XMLString::transcode("gXMLErrArray"); } else if (!XMLString::compareString(XMLUni::fgExceptDomain, domainName)) { fCurDomainName = XMLString::transcode("gXMLExceptArray"); } else if (!XMLString::compareString(XMLUni::fgValidityDomain, domainName)) { fCurDomainName = XMLString::transcode("gXMLValidityArray"); } else if (!XMLString::compareString(XMLUni::fgXMLDOMMsgDomain, domainName)) { fCurDomainName = XMLString::transcode("gXMLDOMMsgArray"); } else { wprintf(L"Unknown message domain: %s\n", domainName); throw ErrReturn_SrcFmtError; } // // Output the leading part of the array declaration. Its just an // array of pointers to Unicode chars. // fwprintf(fOutFl, L"const XMLCh %s[][128] = \n{\n", xmlStrToPrintable(fCurDomainName)); releasePrintableStr // Reset the first message trigger fFirst = true; }
void MsgCatFormatter::startOutput( const XMLCh* const locale , const XMLCh* const outPath) { // // Ok, lets try to open the the output file. All of the messages // for all the domains are put into a single Msg file, which can be // compiled into the program. // // CppErrMsgs_xxxx.Msg // // where xxx is the locale suffix passed in. // const unsigned int bufSize = 4095; XMLCh *tmpBuf = new XMLCh[bufSize + 1]; tmpBuf[0] = 0; XMLCh *tmpXMLStr = XMLString::transcode("XercesMessages_"); XMLCh *tmpXMLStr2 = XMLString::transcode(".Msg"); XMLString::catString(tmpBuf, outPath); XMLString::catString(tmpBuf, tmpXMLStr ); XMLString::catString(tmpBuf, locale); XMLString::catString(tmpBuf, tmpXMLStr2 ); XMLString::release(&tmpXMLStr); XMLString::release(&tmpXMLStr2); char *tmpStr = XMLString::transcode(tmpBuf); fOutFl = fopen(tmpStr, "wt"); XMLString::release(&tmpStr); if ((!fOutFl) ||(fwide(fOutFl, 1) < 0)) { wprintf(L"Could not open the output file: %s\n\n", xmlStrToPrintable(tmpBuf) ); releasePrintableStr XMLString::release(&tmpBuf); throw ErrReturn_OutFileOpenFailed; } // Set the message delimiter fwprintf(fOutFl, L"$quote \"\n"); delete tmpBuf; tmpBuf = new XMLCh[bufSize + 1]; tmpBuf[0] = 0; tmpXMLStr = XMLString::transcode("XMLMsgCat_Ids.hpp"); XMLString::catString(tmpBuf, outPath); XMLString::catString(tmpBuf, tmpXMLStr ); XMLString::release(&tmpXMLStr); tmpStr = XMLString::transcode(tmpBuf); fOutHpp = fopen(tmpStr, "wt"); XMLString::release(&tmpStr); if ((!fOutHpp) || (fwide(fOutHpp,1) < 0)) { wprintf(L"Could not open the output file: %s\n\n", xmlStrToPrintable(tmpBuf) ); releasePrintableStr XMLString::release(&tmpBuf); throw ErrReturn_OutFileOpenFailed; } fwprintf ( fOutHpp , L"// ----------------------------------------------------------------\n" L"// This file was generated from the XML error message source.\n" L"// so do not edit this file directly!!\n" L"// ----------------------------------------------------------------\n\n" L"#include <xercesc/util/XercesDefs.hpp>\n\n" L"XERCES_CPP_NAMESPACE_BEGIN\n\n" ); // Reset the sequence id fSeqId = 1; delete tmpBuf; }