bool TypeRegistry::create_template_instance(const std::string &decl, TypeDesc &newtd) { std::string name; StringList params; if (TypeNameUtils::splitTemplateDeclaration(decl, name, params)) { const TypeDesc *td = findTemplate(name); if (td) { // unwind typedefs if (!td->alias.empty()) return create_template_instance(td->alias, newtd); std::string qdecl(decl); TypeNameUtils::qualifyAllIdentifiers(qdecl, *td, *this); newtd = *td; qualify_single_type(newtd); if (translate_template(newtd, qdecl, params)) { newtd.type_name = qdecl; //Notify::info("qualifying `" + newtd.type_name + "'"); qualify_single_type(newtd); return true; } return false; } newtd.type_name = decl; newtd.undefined = true; return true; } return false; }
/*=gfunc ag_function_p * * what: test for function * * exparg: ag-name, name of AutoGen macro * * doc: return SCM_BOOL_T if a specified name is a user-defined AutoGen * macro, otherwise return SCM_BOOL_F. =*/ SCM ag_scm_ag_function_p(SCM obj) { SCM res; if (findTemplate(ag_scm2zchars(obj, "ag user macro")) == NULL) res = SCM_BOOL_F; else res = SCM_BOOL_T; return res; }
/*=macfunc UNKNOWN * * what: Either a user macro or a value name. * handler_proc: * load_proc: * unnamed: * * desc: * * The macro text has started with a name not known to AutoGen. If, at run * time, it turns out to be the name of a defined macro, then that macro is * invoked. If it is not, then it is a conditional expression that is * evaluated only if the name is defined at the time the macro is invoked. * * You may not specify @code{UNKNOWN} explicitly. =*/ tMacro* mFunc_Unknown(tTemplate* pT, tMacro* pMac) { tTemplate * pInv = findTemplate(pT->pzTemplText + pMac->ozName); if (pInv != NULL) { if (OPT_VALUE_TRACE >= TRACE_EVERYTHING) fprintf(pfTrace, TRACE_FN_REMAPPED, TRACE_FN_REMAP_INVOKE, pMac->funcCode, pT->pzTplFile, pMac->lineNo); pMac->funcCode = FTYP_DEFINE; pMac->funcPrivate = (void*)pInv; parseMacroArgs(pT, pMac); return mFunc_Define(pT, pMac); } if (OPT_VALUE_TRACE >= TRACE_EVERYTHING) { fprintf(pfTrace, TRACE_FN_REMAPPED, TRACE_FN_REMAP_EXPR, pMac->funcCode, pT->pzTplFile, pMac->lineNo); fprintf(pfTrace, TRACE_FN_REMAP_BASE, pT->pzTemplText + pMac->ozName); } pMac->funcCode = FTYP_EXPR; if (pMac->ozText == 0) { pMac->res = EMIT_VALUE; } else { char* pzExpr = pT->pzTemplText + pMac->ozText; switch (*pzExpr) { case ';': case '(': pMac->res = EMIT_EXPRESSION; break; case '`': pMac->res = EMIT_SHELL; spanQuote(pzExpr); break; case '"': case '\'': spanQuote(pzExpr); /* FALLTHROUGH */ default: pMac->res = EMIT_STRING; } if (OPT_VALUE_TRACE >= TRACE_EVERYTHING) fprintf(pfTrace, TRACE_UNKNOWN_FMT, pMac->res, pzExpr); } return mFunc_Expr(pT, pMac); }
/** * Given a target element, find the template that best matches in the given * XSL document, according to the rules specified in the xsl draft. * * @param executionContext current execution context * @param targetNode element that needs a rule * @return pointer to rule that best matches targetNode */ const ElemTemplate* findTemplate( StylesheetExecutionContext& executionContext, XalanNode* targetNode) const { assert(targetNode != 0); return findTemplate( executionContext, targetNode, targetNode->getNodeType(), s_emptyQName, false); }
bool DspMakefileGenerator::writeDspParts(QTextStream &t) { QString dspfile; if ( !project->variables()["DSP_TEMPLATE"].isEmpty() ) { dspfile = project->first("DSP_TEMPLATE"); } else { dspfile = project->first("MSVCDSP_TEMPLATE"); } if (dspfile.startsWith("\"") && dspfile.endsWith("\"")) dspfile = dspfile.mid(1, dspfile.length() - 2); QString dspfile_loc = findTemplate(dspfile); QFile file(dspfile_loc); if(!file.open(IO_ReadOnly)) { fprintf(stderr, "Cannot open dsp file: %s\n", dspfile.latin1()); return FALSE; } QTextStream dsp(&file); QString platform = "Win32"; if ( !project->variables()["QMAKE_PLATFORM"].isEmpty() ) platform = varGlue("QMAKE_PLATFORM", "", " ", ""); // Setup PCH variables precompH = project->first("PRECOMPILED_HEADER"); QString namePCH = QFileInfo(precompH).fileName(); usePCH = !precompH.isEmpty() && project->isActiveConfig("precompile_header"); if (usePCH) { // Created files QString origTarget = project->first("QMAKE_ORIG_TARGET"); origTarget.replace(QRegExp("-"), "_"); precompObj = "\"$(IntDir)\\" + origTarget + Option::obj_ext + "\""; precompPch = "\"$(IntDir)\\" + origTarget + ".pch\""; // Add PRECOMPILED_HEADER to HEADERS if (!project->variables()["HEADERS"].contains(precompH)) project->variables()["HEADERS"] += precompH; // Add precompile compiler options project->variables()["PRECOMPILED_FLAGS_REL"] = "/Yu\"" + namePCH + "\" /FI\"" + namePCH + "\" "; project->variables()["PRECOMPILED_FLAGS_DEB"] = "/Yu\"" + namePCH + "\" /FI\"" + namePCH + "\" "; // Return to variable pool project->variables()["PRECOMPILED_OBJECT"] = precompObj; project->variables()["PRECOMPILED_PCH"] = precompPch; } int rep; QString line; while ( !dsp.eof() ) { line = dsp.readLine(); while((rep = line.find(QRegExp("\\$\\$[a-zA-Z0-9_-]*"))) != -1) { QString torep = line.mid(rep, line.find(QRegExp("[^\\$a-zA-Z0-9_-]"), rep) - rep); QString variable = torep.right(torep.length()-2); t << line.left(rep); //output the left side line = line.right(line.length() - (rep + torep.length())); //now past the variable if(variable == "MSVCDSP_SOURCES") { if(project->variables()["SOURCES"].isEmpty()) continue; QString mocpath = var( "QMAKE_MOC" ); mocpath = mocpath.replace( QRegExp( "\\..*$" ), "" ) + " "; QStringList list = project->variables()["SOURCES"] + project->variables()["DEF_FILE"]; if(!project->isActiveConfig("flat")) list.sort(); QStringList::Iterator it; for( it = list.begin(); it != list.end(); ++it) { beginGroupForFile((*it), t); t << "# Begin Source File\n\nSOURCE=" << (*it) << endl; if (usePCH && (*it).endsWith(".c")) t << "# SUBTRACT CPP /FI\"" << namePCH << "\" /Yu\"" << namePCH << "\" /Fp" << endl; if ( project->isActiveConfig("moc") && (*it).endsWith(Option::cpp_moc_ext)) { QString base = (*it); base.replace(QRegExp("\\..*$"), "").upper(); base.replace(QRegExp("[^a-zA-Z]"), "_"); QString build = "\n\n# Begin Custom Build - Moc'ing " + findMocSource((*it)) + "...\n" "InputPath=.\\" + (*it) + "\n\n" "\"" + (*it) + "\"" " : $(SOURCE) \"$(INTDIR)\" \"$(OUTDIR)\"\n" "\t" + mocpath + findMocSource((*it)) + " -o " + (*it) + "\n\n" "# End Custom Build\n\n"; t << "USERDEP_" << base << "=\".\\" << findMocSource((*it)) << "\" \"$(QTDIR)\\bin\\moc.exe\"" << endl << endl; t << "!IF \"$(CFG)\" == \"" << var("MSVCDSP_PROJECT") << " - " << platform << " Release\"" << build << "!ELSEIF \"$(CFG)\" == \"" << var("MSVCDSP_PROJECT") << " - " << platform << " Debug\"" << build << "!ENDIF " << endl << endl; } t << "# End Source File" << endl; } endGroups(t); } else if(variable == "MSVCDSP_IMAGES") { if(project->variables()["IMAGES"].isEmpty()) continue; t << "# Begin Source File\n\nSOURCE=" << project->first("QMAKE_IMAGE_COLLECTION") << endl; t << "# End Source File" << endl; } else if(variable == "MSVCDSP_HEADERS") { if(project->variables()["HEADERS"].isEmpty()) continue; QStringList list = project->variables()["HEADERS"]; if(!project->isActiveConfig("flat")) list.sort(); for(QStringList::Iterator it = list.begin(); it != list.end(); ++it) { // beginGroupForFile((*it), t); t << "# Begin Source File\n\nSOURCE=" << (*it) << endl << endl; QString compilePCH; QStringList customDependencies; QString createMOC; QString buildCmdsR, buildCmdsD; QString buildCmds = "\nBuildCmds= \\\n"; // Create unique baseID QString base = (*it); { base.replace(QRegExp("\\..*$"), "").upper(); base.replace(QRegExp("[^a-zA-Z]"), "_"); } if (usePCH && precompH.endsWith(*it)) { QString basicBuildCmd = QString("\tcl.exe /TP /W3 /FD /c /D \"WIN32\" /Yc /Fp\"%1\" /Fo\"%2\" %3 %4 %5 %6 %7 %8 %9 /D \"") .arg(precompPch) .arg(precompObj) .arg(var("MSVCDSP_INCPATH")) .arg(var("MSVCDSP_DEFINES")) .arg(var("MSVCDSP_CXXFLAGS")); buildCmdsR = basicBuildCmd .arg("/D \"NDEBUG\"") .arg(var("QMAKE_CXXFLAGS_RELEASE")) .arg(var("MSVCDSP_MTDEF")) .arg(var("MSVCDSP_RELDEFS")); buildCmdsD = basicBuildCmd .arg("/D \"_DEBUG\" /Od") .arg(var("QMAKE_CXXFLAGS_DEBUG")) .arg(var("MSVCDSP_MTDEFD")) .arg(var("MSVCDSP_DEBUG_OPT")); if (project->first("TEMPLATE") == "vcapp") { // App buildCmdsR += var("MSVCDSP_WINCONDEF"); buildCmdsD += var("MSVCDSP_WINCONDEF"); } else if (project->isActiveConfig("dll")) { // Dll buildCmdsR += "_WINDOWS\" /D \"_USRDLL"; buildCmdsD += "_WINDOWS\" /D \"_USRDLL"; } else { // Lib buildCmdsR += "_LIB"; buildCmdsD += "_LIB"; } buildCmdsR += "\" /Fd\"$(IntDir)\\\\\" " + (*it) + " \\\n"; buildCmdsD += "\" /Fd\"$(IntDir)\\\\\" " + (*it) + " \\\n"; compilePCH = precompPch + " : $(SOURCE) \"$(INTDIR)\" \"$(OUTDIR)\"\n $(BuildCmds)\n\n"; QStringList &tmp = findDependencies(precompH); if(!tmp.isEmpty()) // Got Deps for PCH customDependencies += tmp; } if (project->isActiveConfig("moc") && !findMocDestination((*it)).isEmpty()) { QString mocpath = var( "QMAKE_MOC" ); mocpath = mocpath.replace( QRegExp( "\\..*$" ), "" ) + " "; buildCmds += "\t" + mocpath + (*it) + " -o " + findMocDestination((*it)) + " \\\n"; createMOC = "\"" + findMocDestination((*it)) + "\" : $(SOURCE) \"$(INTDIR)\" \"$(OUTDIR)\"\n $(BuildCmds)\n\n"; customDependencies += "\"$(QTDIR)\\bin\\moc.exe\""; } if (!createMOC.isEmpty() || !compilePCH.isEmpty()) { bool doMOC = !createMOC.isEmpty(); bool doPCH = !compilePCH.isEmpty(); QString build = "\n\n# Begin Custom Build - "+ QString(doMOC?"Moc'ing ":"") + QString((doMOC&&doPCH)?" and ":"") + QString(doPCH?"Creating PCH cpp from ":"") + (*it) + "...\nInputPath=.\\" + (*it) + "\n\n" + buildCmds + "%1\n" + createMOC + compilePCH + "# End Custom Build\n\n"; t << "USERDEP_" << base << "=" << valGlue(customDependencies, "\"", "\" \"", "\"") << endl << endl; t << "!IF \"$(CFG)\" == \"" << var("MSVCDSP_PROJECT") << " - " << platform << " Release\"" << build.arg(buildCmdsR) << "!ELSEIF \"$(CFG)\" == \"" << var("MSVCDSP_PROJECT") << " - " << platform << " Debug\"" << build.arg(buildCmdsD) << "!ENDIF " << endl << endl; } t << "# End Source File" << endl; } // endGroups(t); } else if(variable == "MSVCDSP_FORMSOURCES" || variable == "MSVCDSP_FORMHEADERS") { if(project->variables()["FORMS"].isEmpty()) continue; QString uiSourcesDir; QString uiHeadersDir; if(!project->variables()["UI_DIR"].isEmpty()) { uiSourcesDir = project->first("UI_DIR"); uiHeadersDir = project->first("UI_DIR"); } else { if ( !project->variables()["UI_SOURCES_DIR"].isEmpty() ) uiSourcesDir = project->first("UI_SOURCES_DIR"); else uiSourcesDir = ""; if ( !project->variables()["UI_HEADERS_DIR"].isEmpty() ) uiHeadersDir = project->first("UI_HEADERS_DIR"); else uiHeadersDir = ""; } QStringList list = project->variables()["FORMS"]; if(!project->isActiveConfig("flat")) list.sort(); QString ext = variable == "MSVCDSP_FORMSOURCES" ? ".cpp" : ".h"; for(QStringList::Iterator it = list.begin(); it != list.end(); ++it) { QString base = (*it); int dot = base.findRev("."); base.replace( dot, base.length() - dot, ext ); QString fname = base; int lbs = fname.findRev( "\\" ); QString fpath; if ( lbs != -1 ) fpath = fname.left( lbs + 1 ); fname = fname.right( fname.length() - lbs - 1 ); if ( ext == ".cpp" && !uiSourcesDir.isEmpty() ) fname.prepend(uiSourcesDir); else if ( ext == ".h" && !uiHeadersDir.isEmpty() ) fname.prepend(uiHeadersDir); else fname = base; // beginGroupForFile(fname, t); t << "# Begin Source File\n\nSOURCE=" << fname << "\n# End Source File" << endl; } // endGroups(t); } else if(variable == "MSVCDSP_TRANSLATIONS" ) { if(project->variables()["TRANSLATIONS"].isEmpty()) continue; t << "# Begin Group \"Translations\"\n"; t << "# Prop Default_Filter \"ts\"\n"; QStringList list = project->variables()["TRANSLATIONS"]; if(!project->isActiveConfig("flat")) list.sort(); for(QStringList::Iterator it = list.begin(); it != list.end(); ++it) { QString sify = *it; sify.replace('/', '\\' ); QString base = (*it); base.replace(QRegExp("\\..*$"), "").upper(); base.replace(QRegExp("[^a-zA-Z]"), "_"); // beginGroupForFile(sify, t); t << "# Begin Source File\n\nSOURCE=" << sify << endl; t << "\n# End Source File" << endl; } // endGroups(t); t << "\n# End Group\n"; } else if (variable == "MSVCDSP_MOCSOURCES" && project->isActiveConfig("moc")) { if ( project->variables()["SRCMOC"].isEmpty()) continue; QString mocpath = var( "QMAKE_MOC" ); mocpath = mocpath.replace( QRegExp( "\\..*$" ), "" ) + " "; QStringList list = project->variables()["SRCMOC"]; if(!project->isActiveConfig("flat")) list.sort(); for(QStringList::Iterator it = list.begin(); it != list.end(); ++it) { // beginGroupForFile((*it), t); t << "# Begin Source File\n\nSOURCE=" << (*it) << endl; if ( project->isActiveConfig("moc") && (*it).endsWith(Option::cpp_moc_ext)) { QString base = (*it); base.replace(QRegExp("\\..*$"), "").upper(); base.replace(QRegExp("[^a-zA-Z]"), "_"); QString build = "\n\n# Begin Custom Build - Moc'ing " + findMocSource((*it)) + "...\n" "InputPath=.\\" + (*it) + "\n\n" "\"" + (*it) + "\"" " : $(SOURCE) \"$(INTDIR)\" \"$(OUTDIR)\"\n" "\t" + mocpath + findMocSource((*it)) + " -o " + (*it) + "\n\n" "# End Custom Build\n\n"; t << "USERDEP_" << base << "=\".\\" << findMocSource((*it)) << "\" \"$(QTDIR)\\bin\\moc.exe\"" << endl << endl; t << "!IF \"$(CFG)\" == \"" << var("MSVCDSP_PROJECT") << " - " << platform << " Release\"" << build << "!ELSEIF \"$(CFG)\" == \"" << var("MSVCDSP_PROJECT") << " - " << platform << " Debug\"" << build << "!ENDIF " << endl << endl; } t << "# End Source File" << endl; } // endGroups(t); } else if(variable == "MSVCDSP_PICTURES") { if(project->variables()["IMAGES"].isEmpty()) continue; t << "# Begin Group \"Images\"\n" << "# Prop Default_Filter \"png jpeg bmp xpm\"\n"; QStringList list = project->variables()["IMAGES"]; if(!project->isActiveConfig("flat")) list.sort(); QStringList::Iterator it; // dump the image list to a file UIC can read. QFile f( "images.tmp" ); f.open( IO_WriteOnly ); QTextStream ts( &f ); for( it = list.begin(); it != list.end(); ++it ) ts << " " << *it; f.close(); // create an output step for images not more than once bool imagesBuildDone = FALSE; for( it = list.begin(); it != list.end(); ++it ) { // beginGroupForFile((*it), t); t << "# Begin Source File\n\nSOURCE=" << (*it) << endl; QString base = (*it); QString uicpath = var("QMAKE_UIC"); uicpath = uicpath.replace(QRegExp("\\..*$"), "") + " "; if ( !imagesBuildDone ) { imagesBuildDone = TRUE; QString build = "\n\n# Begin Custom Build - Creating image collection...\n" "InputPath=.\\" + base + "\n\n"; build += "\"" + project->first("QMAKE_IMAGE_COLLECTION") + "\" : $(SOURCE) \"$(INTDIR)\" \"$(OUTDIR)\"\n"; build += "\t" + uicpath + "-embed " + project->first("QMAKE_ORIG_TARGET") + " -f images.tmp -o " + project->first("QMAKE_IMAGE_COLLECTION") + "\n\n"; build.append("# End Custom Build\n\n"); t << "USERDEP_" << base << "="; QStringList::Iterator it2 = list.begin(); while ( it2 != list.end() ) { t << "\"" << (*it2) << "\""; it2++; if ( it2 != list.end() ) t << "\\\n"; } t << endl << endl; t << "!IF \"$(CFG)\" == \"" << var("MSVCDSP_PROJECT") << " - Win32 Release\"" << build << "!ELSEIF \"$(CFG)\" == \"" << var("MSVCDSP_PROJECT") << " - Win32 Debug\"" << build << "!ENDIF \n\n" << endl; } t << "# End Source File" << endl; } // endGroups(t); t << "\n# End Group\n"; } else if(variable == "MSVCDSP_FORMS") { if(project->variables()["FORMS"].isEmpty()) continue; t << "# Begin Group \"Forms\"\n" << "# Prop Default_Filter \"ui\"\n"; QString uicpath = var("QMAKE_UIC"); uicpath = uicpath.replace(QRegExp("\\..*$"), "") + " "; QString mocpath = var( "QMAKE_MOC" ); mocpath = mocpath.replace( QRegExp( "\\..*$" ), "" ) + " "; QStringList list = project->variables()["FORMS"]; if(!project->isActiveConfig("flat")) list.sort(); for(QStringList::Iterator it = list.begin(); it != list.end(); ++it) { QString base = (*it); // beginGroupForFile(base, t); t << "# Begin Source File\n\nSOURCE=" << base << endl; QString fname = base; fname.replace(".ui", ""); int lbs = fname.findRev( "\\" ); QString fpath; if ( lbs != -1 ) fpath = fname.left( lbs + 1 ); fname = fname.right( fname.length() - lbs - 1 ); QString mocFile; if(!project->variables()["MOC_DIR"].isEmpty()) mocFile = project->first("MOC_DIR"); else mocFile = fpath; QString uiSourcesDir; QString uiHeadersDir; if(!project->variables()["UI_DIR"].isEmpty()) { uiSourcesDir = project->first("UI_DIR"); uiHeadersDir = project->first("UI_DIR"); } else { if ( !project->variables()["UI_SOURCES_DIR"].isEmpty() ) uiSourcesDir = project->first("UI_SOURCES_DIR"); else uiSourcesDir = fpath; if ( !project->variables()["UI_HEADERS_DIR"].isEmpty() ) uiHeadersDir = project->first("UI_HEADERS_DIR"); else uiHeadersDir = fpath; } t << "USERDEP_" << base << "=\"$(QTDIR)\\bin\\moc.exe\" \"$(QTDIR)\\bin\\uic.exe\"" << endl << endl; QString build = "\n\n# Begin Custom Build - Uic'ing " + base + "...\n" "InputPath=.\\" + base + "\n\n" "BuildCmds= \\\n\t" + uicpath + base + " -o " + uiHeadersDir + fname + ".h \\\n" "\t" + uicpath + base + " -i " + fname + ".h -o " + uiSourcesDir + fname + ".cpp \\\n" "\t" + mocpath + " " + uiHeadersDir + fname + ".h -o " + mocFile + Option::h_moc_mod + fname + Option::h_moc_ext + " \\\n"; build.append("\n\"" + uiHeadersDir + fname + ".h\" : \"$(SOURCE)\" \"$(INTDIR)\" \"$(OUTDIR)\"" "\n" "\t$(BuildCmds)\n\n" "\"" + uiSourcesDir + fname + ".cpp\" : \"$(SOURCE)\" \"$(INTDIR)\" \"$(OUTDIR)\"" "\n" "\t$(BuildCmds)\n\n" "\"" + mocFile + Option::h_moc_mod + fname + Option::h_moc_ext + "\" : \"$(SOURCE)\" \"$(INTDIR)\" \"$(OUTDIR)\"" "\n" "\t$(BuildCmds)\n\n"); build.append("# End Custom Build\n\n"); t << "!IF \"$(CFG)\" == \"" << var("MSVCDSP_PROJECT") << " - " << platform << " Release\"" << build << "!ELSEIF \"$(CFG)\" == \"" << var("MSVCDSP_PROJECT") << " - " << platform << " Debug\"" << build << "!ENDIF \n\n" << "# End Source File" << endl; } // endGroups(t); t << "\n# End Group\n"; } else if(variable == "MSVCDSP_LEXSOURCES") { if(project->variables()["LEXSOURCES"].isEmpty()) continue; t << "# Begin Group \"Lexables\"\n" << "# Prop Default_Filter \"l\"\n"; QString lexpath = var("QMAKE_LEX") + varGlue("QMAKE_LEXFLAGS", " ", " ", "") + " "; QStringList list = project->variables()["LEXSOURCES"]; if(!project->isActiveConfig("flat")) list.sort(); for(QStringList::Iterator it = list.begin(); it != list.end(); ++it) { QString fname = (*it); // beginGroupForFile(fname, t); t << "# Begin Source File\n\nSOURCE=" << fname << endl; fname.replace(".l", Option::lex_mod + Option::cpp_ext.first()); QString build = "\n\n# Begin Custom Build - Lex'ing " + (*it) + "...\n" "InputPath=.\\" + (*it) + "\n\n" "\"" + fname + "\" : \"$(SOURCE)\" \"$(INTDIR)\" \"$(OUTDIR)\"" "\n" "\t" + lexpath + (*it) + "\\\n" "\tdel " + fname + "\\\n" "\tcopy lex.yy.c " + fname + "\n\n" + "# End Custom Build\n\n"; t << "!IF \"$(CFG)\" == \"" << var("MSVCDSP_PROJECT") << " - " << platform << " Release\"" << build << "!ELSEIF \"$(CFG)\" == \"" << var("MSVCDSP_PROJECT") << " - " << platform << " Debug\"" << build << "!ENDIF \n\n" << build << "# End Source File" << endl; } // endGroups(t); t << "\n# End Group\n"; } else if(variable == "MSVCDSP_YACCSOURCES") { if(project->variables()["YACCSOURCES"].isEmpty()) continue; t << "# Begin Group \"Yaccables\"\n" << "# Prop Default_Filter \"y\"\n"; QString yaccpath = var("QMAKE_YACC") + varGlue("QMAKE_YACCFLAGS", " ", " ", "") + " "; QStringList list = project->variables()["YACCSOURCES"]; if(!project->isActiveConfig("flat")) list.sort(); for(QStringList::Iterator it = list.begin(); it != list.end(); ++it) { QString fname = (*it); // beginGroupForFile(fname, t); t << "# Begin Source File\n\nSOURCE=" << fname << endl; fname.replace(".y", Option::yacc_mod); QString build = "\n\n# Begin Custom Build - Yacc'ing " + (*it) + "...\n" "InputPath=.\\" + (*it) + "\n\n" "\"" + fname + Option::cpp_ext.first() + "\" : \"$(SOURCE)\" \"$(INTDIR)\" \"$(OUTDIR)\"" "\n" "\t" + yaccpath + (*it) + "\\\n" "\tdel " + fname + Option::h_ext.first() + "\\\n" "\tmove y.tab.h " + fname + Option::h_ext.first() + "\n\n" + "\tdel " + fname + Option::cpp_ext.first() + "\\\n" "\tmove y.tab.c " + fname + Option::cpp_ext.first() + "\n\n" + "# End Custom Build\n\n"; t << "!IF \"$(CFG)\" == \"" << var("MSVCDSP_PROJECT") << " - " << platform << " Release\"" << build << "!ELSEIF \"$(CFG)\" == \"" << var("MSVCDSP_PROJECT") << " - " << platform << " Debug\"" << build << "!ENDIF \n\n" << "# End Source File" << endl; } // endGroups(t); t << "\n# End Group\n"; } else if( variable == "MSVCDSP_CONFIGMODE" ) { if( project->isActiveConfig( "debug" ) ) t << "Debug"; else t << "Release"; } else if( variable == "MSVCDSP_IDLSOURCES" ) { QStringList list = project->variables()["MSVCDSP_IDLSOURCES"]; if(!project->isActiveConfig("flat")) list.sort(); for(QStringList::Iterator it = list.begin(); it != list.end(); ++it) { t << "# Begin Source File" << endl << endl; t << "SOURCE=" << (*it) << endl; t << "# PROP Exclude_From_Build 1" << endl; t << "# End Source File" << endl << endl; } } else t << var(variable); } t << line << endl; } t << endl; file.close(); return TRUE; }
void ReportGenerator::slotAddresseeSearchFinished( int ) { qDebug() << "** Reached slotAddresseeSearchFinished!"; // now the addressee search through the address provider is finished. // Rendering can be started. QString tmplFile = findTemplate( mArchDoc->docType() ); if ( tmplFile.isEmpty() ) { // qDebug () << "tmplFile is empty!"; return; } else { // qDebug () << "Reading this template: " << tmplFile; } // create a text template TextTemplate tmpl( tmplFile ); if( !tmpl.open() ) { // qDebug () << "ERROR: Unable to open document template " << tmplFile; QMessageBox msgBox; msgBox.setText(i18n("The template file could not be opened: %1\n ", tmplFile)); msgBox.setInformativeText(i18n("Please check the setup and the doc type configuration.")); msgBox.setWindowTitle(i18n("Template Error")); msgBox.setStandardButtons(QMessageBox::Ok); msgBox.exec(); return; } /* replace the placeholders */ /* A placeholder has the format <!-- %VALUE --> */ const ArchDocPositionList posList = mArchDoc->positions(); QString h; ArchDocPositionList::const_iterator it; int specialPosCnt = 0; int taxFreeCnt = 0; int reducedTaxCnt = 0; int fullTaxCnt = 0; bool individualTax = false; /* Check for the tax settings: If the taxType is not the same for all items, * we have individual Tax setting and show the tax marker etc. */ DocPositionBase::TaxType ttype = DocPositionBase::TaxInvalid; for ( it = posList.begin(); it != posList.end(); ++it ) { ArchDocPosition pos (*it); if( ttype == DocPositionBase::TaxInvalid ) { ttype = pos.taxType(); } else { if( ttype != pos.taxType() ) { // different from previous one? individualTax = true; break; } } } /* now loop over the items to fill the template structures */ for ( it = posList.begin(); it != posList.end(); ++it ) { ArchDocPosition pos (*it); tmpl.createDictionary( "POSITIONS" ); tmpl.setValue( "POSITIONS", TAG( "POS_NUMBER" ) , pos.posNumber() ); tmpl.setValue( "POSITIONS", "POS_TEXT", rmlString( pos.text(), QString( "%1text" ).arg( pos.kind().toLower() ) ) ); // format the amount value of the item, do not show the precision if there is no fraction double amount = pos.amount(); QString num; num.setNum( amount ); // no locale awareness. int prec = 0; if( num.contains( QChar('.') ) ) { // there is a decimal point // calculate the precision prec = num.length() - (1+num.lastIndexOf( QChar('.') ) ); } // qDebug() << "**** " << num << " has precision " << prec; h = mArchDoc->locale()->toString( amount, 'f', prec ); tmpl.setValue( "POSITIONS", "POS_AMOUNT", h ); tmpl.setValue( "POSITIONS", "POS_UNIT", escapeTrml2pdfXML( pos.unit() ) ); tmpl.setValue( "POSITIONS", "POS_UNITPRICE", pos.unitPrice().toString( mArchDoc->locale() ) ); tmpl.setValue( "POSITIONS", "POS_TOTAL", pos.nettoPrice().toString( mArchDoc->locale() ) ); tmpl.setValue( "POSITIONS", "POS_KIND", pos.kind().toLower() ); QString taxType; if( individualTax ) { if( pos.taxType() == 1 ) { taxFreeCnt++; taxType = "TAX_FREE"; } else if( pos.taxType() == 2 ) { reducedTaxCnt++; taxType = "REDUCED_TAX"; } else { // ATTENTION: Default for all non known tax types is full tax. fullTaxCnt++; taxType = "FULL_TAX"; } tmpl.createSubDictionary( "POSITIONS", taxType ); } /* item kind: Normal, alternative or demand item. For normal items, the kind is empty. */ if ( !pos.kind().isEmpty() ) { specialPosCnt++; } } if ( specialPosCnt ) { tmpl.createDictionary( "SPECIAL_POS" ); tmpl.setValue( "SPECIAL_POS", "COUNT", QString::number( specialPosCnt ) ); } /* * Just show the tax index if we have multiple tax settings */ if( individualTax ) { tmpl.createDictionary( "TAX_FREE_ITEMS" ); tmpl.setValue( "TAX_FREE_ITEMS", "COUNT", QString::number( taxFreeCnt )); tmpl.createDictionary( "REDUCED_TAX_ITEMS" ); tmpl.setValue( "REDUCED_TAX_ITEMS", "COUNT", QString::number( reducedTaxCnt )); tmpl.setValue( "REDUCED_TAX_ITEMS", "TAX", mArchDoc->locale()->toString( mArchDoc->reducedTax()) ); tmpl.createDictionary( "FULL_TAX_ITEMS" ); tmpl.setValue( "FULL_TAX_ITEMS", "COUNT", QString::number( fullTaxCnt )); tmpl.setValue( "FULL_TAX_ITEMS", "TAX", mArchDoc->locale()->toString( mArchDoc->tax()) ); } /* now replace stuff in the whole document */ tmpl.setValue( TAG( "DATE" ), mArchDoc->locale()->toString(mArchDoc->date(), QLocale::NarrowFormat) ); tmpl.setValue( TAG( "DOCTYPE" ), escapeTrml2pdfXML( mArchDoc->docType() ) ); tmpl.setValue( TAG( "ADDRESS" ), escapeTrml2pdfXML( mArchDoc->address() ) ); contactToTemplate( &tmpl, "CLIENT", mCustomerContact ); contactToTemplate( &tmpl, "MY", myContact ); tmpl.setValue( TAG( "DOCID" ), escapeTrml2pdfXML( mArchDoc->ident() ) ); tmpl.setValue( TAG( "PROJECTLABEL" ), escapeTrml2pdfXML( mArchDoc->projectLabel() ) ); tmpl.setValue( TAG( "SALUT" ), escapeTrml2pdfXML( mArchDoc->salut() ) ); tmpl.setValue( TAG( "GOODBYE" ), escapeTrml2pdfXML( mArchDoc->goodbye() ) ); tmpl.setValue( TAG( "PRETEXT" ), rmlString( mArchDoc->preText() ) ); tmpl.setValue( TAG( "POSTTEXT" ), rmlString( mArchDoc->postText() ) ); tmpl.setValue( TAG( "BRUTTOSUM" ), mArchDoc->bruttoSum().toString( mArchDoc->locale() ) ); tmpl.setValue( TAG( "NETTOSUM" ), mArchDoc->nettoSum().toString( mArchDoc->locale() ) ); h = mArchDoc->locale()->toString( mArchDoc->tax() ); // qDebug () << "Tax in archive document: " << h; if ( mArchDoc->reducedTaxSum().toLong() > 0 ) { tmpl.createDictionary( DICT( "SECTION_REDUCED_TAX" ) ); tmpl.setValue( "SECTION_REDUCED_TAX", TAG( "REDUCED_TAX_SUM" ), mArchDoc->reducedTaxSum().toString( mArchDoc->locale() ) ); h = mArchDoc->locale()->toString( mArchDoc->reducedTax() ); tmpl.setValue( "SECTION_REDUCED_TAX", TAG( "REDUCED_TAX" ), h ); tmpl.setValue( "SECTION_REDUCED_TAX", TAG( "REDUCED_TAX_LABEL" ), i18n( "reduced VAT" ) ); } if ( mArchDoc->fullTaxSum().toLong() > 0 ) { tmpl.createDictionary( DICT( "SECTION_FULL_TAX" ) ); tmpl.setValue( "SECTION_FULL_TAX", TAG( "FULL_TAX_SUM" ), mArchDoc->fullTaxSum().toString( mArchDoc->locale() ) ); h = mArchDoc->locale()->toString( mArchDoc->tax() ); tmpl.setValue( "SECTION_FULL_TAX", TAG( "FULL_TAX" ), h ); tmpl.setValue( "SECTION_FULL_TAX", TAG( "FULL_TAX_LABEL" ), i18n( "VAT" ) ); } h = mArchDoc->locale()->toString( mArchDoc->tax() ); tmpl.setValue( TAG( "VAT" ), h ); tmpl.setValue( TAG( "VATSUM" ), mArchDoc->taxSum().toString( mArchDoc->locale() ) ); // My own contact data const QString output = tmpl.expand(); convertTemplate(output); }