main-Datei-Schablone |
Top Previous Next |
Codeerzeugung > Code-Schablonen > main-Datei-Schablone
Standardmäßig wird mit der folgenden main-Datei-Schablone eine main-Funktion für ein Konsoleprogramm erzeugt.
//---------------------------------------------------------- // ttmain_c.frm // TextTransformer C++ Support Frame // Copyright: Dr. Detlef Meyer-Eltz // http://www.texttransformer.de // http://www.texttransformer.com // dme@texttransformer.com // // June, 2009 Version 1.7.0 //----------------------------------------------------------
#ifdef __BORLANDC__ #pragma hdrstop #endif
#include "-->ParserHeaderName" -->XercesInclude
using namespace std; using namespace tetra; -->XercesUsingNamespace
typedef -->ParserClassName::string_type string_type;
void usage() { cout << "\nParameters:\n" " -s source file\n" " -t target file\n" << endl; }
int main(int argc, char* argv[]) { string_type sTest; const char* pSourceName = NULL; const char* pTargetName = NULL;
if (argc < 2) { usage(); return 1; }
int iParam; for(iParam = 1; iParam < argc; iParam++) { if(argv[iParam][0] != '-') { usage(); return 2; }
if(!strcmp(argv[iParam], "-s")) { if(++iParam < argc) pSourceName = argv[iParam]; }
if(!strcmp(argv[iParam], "-t")) { if(++iParam < argc) pTargetName = argv[iParam]; } }
if(pSourceName == NULL ) { usage(); return 3; }
if(pTargetName == NULL ) { usage(); return 4; }
if( !-->LoadFile ) { cout << "could not load source file: " << pSourceName; return 5; }
-->Ostream if(!fout) { cout << "could not open target file: " << pTargetName; return 6; }
-->PluginType plugin(fout); InitPluginPaths(plugin, pSourceName, pTargetName); plugin.UseExcept(true);
-->XercesInit -->ParserClassName Parser;
try { Parser.-->StartRuleName(sTest.begin(), sTest.end(), &plugin); } catch(CTT_ErrorExpected& xErr) { cout << "expected: " << xErr.GetWhat() << " in " << xErr.GetProduction() << "\n"; } catch(CTT_ErrorUnexpected& xErr) { cout << "unexpected token in: " << xErr.GetProduction() << "\n"; } catch(CTT_ParseError& xErr) { cout << xErr.GetWhat(); } catch(CTT_Message& xErr) { cout << xErr.what(); } /* catch(boost::system_error& xErr) { cout << xErr.what(); }*/ catch(exception& xErr) { cout << xErr.what(); } /* xerces catches catch (const OutOfMemoryException&) { cout << ccpXercesOutOfMemory; } catch (const DOMException& e) { cout << "xerces error code: " << e.code << endl; char *pMsg = XMLString::transcode(e.getMessage()); cout << pMsg; XMLString::release(&pMsg); } catch (XMLException& e) { char *pMsg = XMLString::transcode(e.getMessage()); cout << pMsg; XMLString::release(&pMsg); } */
if( plugin.HasMessage()) { -->PluginType::ctmmsg t, tEnd = plugin.MsgEnd(); for(t = plugin.MsgBegin(); t != tEnd; ++t) cout << (*t).what() << endl << endl; }
return 0; }
Das Programm erwartet zwei Parameter: einen für die Quelltextpfad und einen für den Zielpfad.
In der Schablone gibt es fünf neue Platzhalter, die in den anderen Schablonen nicht vorkommen.
XercesInclude XercesUsingNamespace XercesInit LoadFile Ostream
Die ersten drei Platzhalter werden gelöscht, wenn im Projekt keine dnode's verwendet werden.
-->LoadFile wird je nach Modus zum Öffnen der Quelldatei ersetzt durch:
load_file_binary( sTest, pSourceName)
oder
load_file( sTest, pSourceName)
-->Ostream wird entweder durch wofstream oder durch ofstream ersetzt, je nachdem, ob die Wide-Zeichen Option aktiviert ist oder nicht und je nach Modus zum Öffnen der Zieldatei wird das Flag ios::binary gesetzt oder nicht.
Wenn dnode's verwendet werden, muss als Plugin-Typ CTT_ParseStateDomPlugin gesetzt werden.
-->XercesInclude sorgt für den Einschluss von tt_xerces.h
->XercesUsingNamespace fügt folgende Zeile ein:
using namespace xercesc;
-->XercesInit erzeugt eine CTT_Xerces Instanz und übergibt einen Zeiger auf sie an das Plugin:
CTT_Xerces Xerces("root", "UTF-8", false, true, true, true); //Xerces.setDTDParams("", "", ""); plugin.SetXerces(&Xerces); Ctranslation_unitParser::dnode::SetDefaultLabel(L"default_label");
|
Diese Seite gehört zur TextTransformer Dokumentation |
Home Inhalt English |