void gen(Store& s, char* store_fname, char* output_fname, int length, int order){ ofstream ofs; ofs.open(output_fname); s.open(store_fname); if (!s.is_init()){ wcerr << "Store is not initialized, initializing..." << endl; s.init(); wcerr << "Store initialized!" << endl; } string txt = generate_text(s, length, order); replace(txt.begin(), txt.end(), '_', ' '); ofs << txt; ofs.close(); }
void UmlArtifact::generate() { if (! managed) { managed = TRUE; if (stereotype() == "text") { generate_text(); return; } else if (stereotype() != "source") return; package_of_generated_artifact = package(); const Q3CString def = idlSource(); if (def.isEmpty()) return; const Q3CString & name = this->name(); UmlPackage * pack = package(); Q3CString path = pack->path(name); Q3CString mod_start; Q3CString mod_end; Q3CString mod = pack->idlModule(); if (! mod.isEmpty()) { int index = 0; int index2; Q3CString closed = "\n}; // module "; while ((index2 = mod.find(':', index)) != -1) { Q3CString mo = mod.mid(index, index2 - index); mod_start += Q3CString("module ") + mo + " {\n\n"; closed += mo; mod_end = closed + "\n" + mod_end; closed += "::"; mod.replace(index2, 2, "_"); index = index2 + 1; } mod_start += Q3CString("module ") + mod.mid(index) + " {\n\n"; closed += mod.mid(index); mod_end = closed + "\n" + mod_end; } UmlCom::message(name); if (verbose()) UmlCom::trace(Q3CString("<hr><font face=helvetica>Generate code for <i> ") + name + "</i> in <i>" + path + "</i></font><br>"); else set_trace_header(Q3CString("<font face=helvetica>Generate code for <i> ") + name + "</i> in <i>" + path + "</i></font><br>"); #if 0 // compute dependencies Q3PtrList<CppRefType> dependencies; #endif const Q3PtrVector<UmlClass> & cls = associatedClasses(); unsigned n = cls.count(); unsigned index; #if 0 for (index = 0; index != n; index += 1) cls[index]->compute_dependencies(dependencies); #endif // generate source file QByteArray file; QTextOStream f(&file); const char * p = def; const char * pp = 0; for (;;) { if (*p == 0) { if (pp == 0) break; // comment management done p = pp; pp = 0; if (*p == 0) break; } if (*p == '@') manage_alias(p, f); else if (*p != '$') f << *p++; else if (!strncmp(p, "${comment}", 10)) manage_comment(p, pp); else if (!strncmp(p, "${description}", 14)) manage_description(p, pp); else if (!strncmp(p, "${name}", 7)) { p += 7; f << name; } else if (!strncmp(p, "${Name}", 7)) { p += 7; f << capitalize(name); } else if (!strncmp(p, "${NAME}", 7)) { p += 7; f << name.upper(); } else if (!strncmp(p, "${nAME}", 7)) { p += 7; f << name.lower(); } else if (!strncmp(p, "${module}", 9)) { p += 9; f << mod; } else if (!strncmp(p, "${MODULE}", 9)) { p += 9; f << mod.upper(); } else if (!strncmp(p, "${includes}", 11)) { p += 11; /*if (!incl_computed) { incl_computed = TRUE; CppRefType::compute(dependencies, hdef, srcdef, h_incl, decl, incl, this); } if (!incl.isEmpty()) { f << incl; if (*p != '\n') f << '\n'; } else*/ if (*p == '\n') p += 1; } else if (!strncmp(p, "${definition}", 13)) { p += 13; for (index = 0; index != n; index += 1) cls[index]->generate(f); if (*p == '\n') p += 1; } else if (!strncmp(p, "${module_start}", 15)) { p += 15; if (!mod_start.isEmpty()) f << mod_start; if (*p == '\n') p += 1; } else if (!strncmp(p, "${module_end}", 13)) { p += 13; if (!mod_end.isEmpty()) f << mod_end; if (*p == '\n') p += 1; } else // strange f << *p++; } f << '\000'; if (must_be_saved(path, file)) { write_trace_header(); FILE * fp; if ((fp = fopen((const char *) path, "wb")) == 0) { write_trace_header(); UmlCom::trace(Q3CString("<font color=\"red\"><b><i> ") + name + " : </i> cannot open <i> " + path + "</i>, edit the <i> generation settings</i> (tab directory) or the <i>" + pack->name() + "</i> Idl directory specification</b></font><br>"); incr_error(); } else { fputs((const char *) file, fp); fclose(fp); } } else if (get_trace_header().isEmpty()) UmlCom::trace(Q3CString("<font face=helvetica><i> ") + path + "</i> not modified</font><br>"); } }
static void generate_boxes(fz_context *ctx, fz_pool *pool, fz_html_font_set *set, fz_archive *zip, const char *base_uri, fz_xml *node, fz_html *top, fz_css_rule *rule, fz_css_match *up_match, int list_counter) { fz_css_match match; fz_html *box; const char *tag; int display; while (node) { match.up = up_match; match.count = 0; tag = fz_xml_tag(node); if (tag) { fz_match_css(ctx, &match, rule, node); display = fz_get_css_match_display(&match); if (!strcmp(tag, "br")) { if (top->type == BOX_INLINE) { fz_html *flow = top; while (flow->type != BOX_FLOW) flow = flow->up; add_flow_break(ctx, pool, flow, &top->style); } else { box = new_box(ctx, pool); fz_apply_css_style(ctx, set, &box->style, &match); top = insert_break_box(ctx, box, top); } } else if (!strcmp(tag, "img")) { const char *src = fz_xml_att(node, "src"); if (src) { box = new_box(ctx, pool); fz_apply_css_style(ctx, set, &box->style, &match); insert_inline_box(ctx, pool, box, top); generate_image(ctx, pool, zip, base_uri, box, src); } } else if (display != DIS_NONE) { box = new_box(ctx, pool); fz_apply_css_style(ctx, set, &box->style, &match); if (display == DIS_BLOCK || display == DIS_INLINE_BLOCK) { top = insert_block_box(ctx, box, top); } else if (display == DIS_LIST_ITEM) { top = insert_block_box(ctx, box, top); box->list_item = ++list_counter; } else if (display == DIS_INLINE) { insert_inline_box(ctx, pool, box, top); } else { fz_warn(ctx, "unknown box display type"); insert_box(ctx, box, BOX_BLOCK, top); } if (fz_xml_down(node)) { int child_counter = list_counter; if (!strcmp(tag, "ul") || !strcmp(tag, "ol")) child_counter = 0; generate_boxes(ctx, pool, set, zip, base_uri, fz_xml_down(node), box, rule, &match, child_counter); } // TODO: remove empty flow boxes } } else { if (top->type != BOX_INLINE) { /* Create anonymous inline box, with the same style as the top block box. */ box = new_box(ctx, pool); insert_inline_box(ctx, pool, box, top); box->style = top->style; /* Make sure not to recursively multiply font sizes. */ box->style.font_size.value = 1; box->style.font_size.unit = N_SCALE; generate_text(ctx, pool, box, fz_xml_text(node)); } else { generate_text(ctx, pool, top, fz_xml_text(node)); } } node = fz_xml_next(node); } }
static void generate_boxes(fz_context *ctx, fz_html_font_set *set, fz_archive *zip, const char *base_uri, fz_xml *node, fz_html *top, fz_css_rule *rule, fz_css_match *up_match) { fz_css_match match; fz_html *box; const char *tag; int display; while (node) { match.up = up_match; match.count = 0; tag = fz_xml_tag(node); if (tag) { fz_match_css(ctx, &match, rule, node); display = fz_get_css_match_display(&match); if (!strcmp(tag, "br")) { box = new_box(ctx); fz_apply_css_style(ctx, set, &box->style, &match); top = insert_break_box(ctx, box, top); } else if (!strcmp(tag, "img")) { const char *src = fz_xml_att(node, "src"); if (src) { box = new_box(ctx); fz_apply_css_style(ctx, set, &box->style, &match); insert_inline_box(ctx, box, top); generate_image(ctx, zip, base_uri, box, src); } } else if (display != DIS_NONE) { box = new_box(ctx); fz_apply_css_style(ctx, set, &box->style, &match); if (display == DIS_BLOCK) { top = insert_block_box(ctx, box, top); } else if (display == DIS_LIST_ITEM) { top = insert_block_box(ctx, box, top); } else if (display == DIS_INLINE) { insert_inline_box(ctx, box, top); } else { fz_warn(ctx, "unknown box display type"); insert_box(ctx, box, BOX_BLOCK, top); } if (fz_xml_down(node)) generate_boxes(ctx, set, zip, base_uri, fz_xml_down(node), box, rule, &match); // TODO: remove empty flow boxes } } else { if (top->type != BOX_INLINE) { box = new_box(ctx); insert_inline_box(ctx, box, top); box->style = top->style; generate_text(ctx, box, fz_xml_text(node)); } else { generate_text(ctx, top, fz_xml_text(node)); } } node = fz_xml_next(node); } }
void UmlArtifact::generate() { if (! managed) { managed = TRUE; if (stereotype() == "text") { generate_text(); return; } else if (stereotype() != "source") return; package_of_generated_artifact = package(); current = this; const WrapperStr filedef = javaSource(); if (filedef.isEmpty()) return; const WrapperStr & name = this->name(); WrapperStr path = package_of_generated_artifact->file_path(name); UmlCom::message(name); if (verbose()) UmlCom::trace(WrapperStr("<hr><font face=helvetica>Generate code for <i> ") + name + "</i> in " + path + "</i></font><br>"); else set_trace_header(WrapperStr("<font face=helvetica>Generate code for <i> ") + name + "</i> in " + path + "</i></font><br>"); // get bodies if preserve const QVector<UmlClass*> & cls = associatedClasses(); if (preserve()) UmlOperation::read_bodies(path); // generate file unsigned n = cls.count(); unsigned index; WrapperStr incl; QSharedPointer<QByteArray> headerFile(new QByteArray()); QTextStream f(headerFile.data(), QIODevice::WriteOnly); const char * p = filedef; const char * pp = 0; for (;;) { if (*p == 0) { if (pp == 0) break; // comment management done p = pp; pp = 0; if (*p == 0) break; } if (*p == '@') manage_alias(p, f); else if (*p != '$') f << *p++; else if (!strncmp(p, "${comment}", 10)) manage_comment(p, pp, JavaSettings::isGenerateJavadocStyleComment()); else if (!strncmp(p, "${description}", 14)) manage_description(p, pp); else if (!strncmp(p, "${name}", 7)) { p += 7; f << name; } else if (!strncmp(p, "${Name}", 7)) { p += 7; f << capitalize(name); } else if (!strncmp(p, "${NAME}", 7)) { p += 7; f << name.upper(); } else if (!strncmp(p, "${nAME}", 7)) { p += 7; f << name.lower(); } else if (!strncmp(p, "${imports}", 10)) { WrapperStr indent = current_indent(p, filedef); for (index = 0; index != n; index += 1) cls[index]->generate_import(f, indent); p += 10; if (*p == '\n') p += 1; } else if (!strncmp(p, "${package}", 10)) { p += 10; const WrapperStr & package = package_of_generated_artifact->javaPackage(); if (!package.isEmpty()) f << "package " << package << ";\n\n"; if (*p == '\n') p += 1; } else if (!strncmp(p, "${definition}", 13)) { WrapperStr indent = current_indent(p, filedef); for (index = 0; index != n; index += 1) cls[index]->generate(f, indent); p += 13; if (*p == '\n') p += 1; } else // strange f << *p++; } f << '\000'; f.flush(); if (must_be_saved(path, headerFile->data())) { write_trace_header(); FILE * fp; if ((fp = fopen((const char *) path, "wb")) == 0) { write_trace_header(); UmlCom::trace(WrapperStr("<font color=\"red\"><b><i> ") + name + "</i> : cannot open <i> " + path + "</i>, edit the <i> generation settings</i> (tab directory) or the <i>" + package_of_generated_artifact->name() + "</i> Java directory specification</b></font><br>"); incr_error(); } else { fputs((const char *) headerFile->data(), fp); fclose(fp); } } else if (get_trace_header().isEmpty()) UmlCom::trace(WrapperStr("<font face=helvetica><i> ") + path + "</i> not modified</font><br>"); if (imports != 0) { delete imports; imports = 0; } } }
void UmlArtifact::generate() { if (! managed) { managed = TRUE; if (stereotype() == "text") { generate_text(); return; } else if (stereotype() != "source") return; package_of_generated_artifact = package(); const WrapperStr hdef = cppHeader(); QLOG_INFO() << "Read header as: " + hdef.operator QString(); const WrapperStr srcdef = cppSource(); if (hdef.isEmpty() && srcdef.isEmpty()) { if (verbose()) UmlCom::trace(WrapperStr("<hr><font face=helvetica>artifact <i>") + name() + "</i> has an empty C++ definition</font><br>"); return; } const WrapperStr & name = UmlArtifact::name(); UmlPackage * pack = package(); WrapperStr h_path = pack->header_path(name); WrapperStr src_path = pack->source_path(name); WrapperStr nasp_start; WrapperStr nasp_end; const char * cnasp = pack->cppNamespace(); WrapperStr nasp = ((cnasp[0] == ':') && (cnasp[1] == ':')) ? cnasp + 2 : cnasp; if (!nasp.isEmpty()) { int index = 0; int index2; WrapperStr closed = "\n} // namespace "; while ((index2 = nasp.find(':', index)) != -1) { WrapperStr na = nasp.mid(index, index2 - index); nasp_start += WrapperStr("namespace ") + na + " {\n\n"; closed += na; nasp_end = closed + "\n" + nasp_end; closed += "::"; nasp.replace(index2, 2, "_"); index = index2 + 1; } nasp_start += WrapperStr("namespace ") + nasp.mid(index) + " {\n\n"; closed += nasp.mid(index); nasp_end = closed + "\n" + nasp_end; } else { WrapperStr s; if (!hdef.isEmpty()) s = " in <i> " + h_path + "</i>"; if (!srcdef.isEmpty()) { if (!hdef.isEmpty()) s += " and <i> " + src_path + "</i>"; else s = " in <i> " + src_path + "</i>"; } UmlCom::message(name); if (verbose()) UmlCom::trace(WrapperStr("<hr><font face=helvetica>Generate code for <i> ") + name + "</i>" + s + "</font><br>"); else set_trace_header(WrapperStr("<font face=helvetica>Generate code for <i> ") + name + "</i>" + s + "</font><br>"); } // get bodies if preserve const Q3PtrVector<UmlClass> & cls = associatedClasses(); if (preserve()) UmlOperation::read_bodies(h_path, src_path); // compute dependencies bool all_in_h = (hdef.find("${all_includes}") != -1); Q3PtrList<CppRefType> dependencies; unsigned n = cls.count(); unsigned index; for (index = 0; index != n; index += 1) cls[index]->compute_dependencies(dependencies, all_in_h); // generate header file WrapperStr h_incl; WrapperStr src_incl; WrapperStr decl; bool incl_computed = FALSE; if (!hdef.isEmpty()) { //headerFile->append("Test DAta"); QLOG_INFO() << "openign file for writing: "; //QTextStream f_h(file.data()); //[lgfreitas] Now QTextStream receives a pointer to a byte array... QSharedPointer<QByteArray> headerFile(new QByteArray()); QTextStream f_h(headerFile.data(), QFile::WriteOnly); f_h.setCodec(QTextCodec::codecForLocale()); //QTextStream f_h(headerFile.data(), QIODevice::WriteOnly); //QString h_copy = QString(hdef.operator QString()); const char * p = hdef; const char * pp = 0; for (;;) { QLOG_INFO() << "At this point P is: " << QString(p); if (*p == 0) { if (pp == 0) break; // comment management done p = pp; pp = 0; if (*p == 0) break; } if (*p == '@') manage_alias(p, f_h); else if (*p != '$') { QTextCodec* codec = QTextCodec::codecForLocale(); //f_h << codec->fromUnicode(*p,1); //p++; f_h << toLocale(p); } else if (!strncmp(p, "${comment}", 10)) manage_comment(p, pp, CppSettings::isGenerateJavadocStyleComment()); else if (!strncmp(p, "${description}", 14)) manage_description(p, pp); else if (!strncmp(p, "${name}", 7)) { p += 7; f_h << name; } else if (!strncmp(p, "${Name}", 7)) { p += 7; //QLOG_INFO() << "Outputting name: " << name; f_h << capitalize(name); } else if (!strncmp(p, "${NAME}", 7)) { p += 7; f_h << name.upper(); } else if (!strncmp(p, "${nAME}", 7)) { p += 7; f_h << name.lower(); } else if (!strncmp(p, "${namespace}", 12)) { p += 12; f_h << nasp; } else if (!strncmp(p, "${NAMESPACE}", 12)) { p += 12; f_h << nasp.upper(); } else if (!strncmp(p, "${includes}", 11) || !strncmp(p, "${all_includes}", 15)) { QLOG_INFO() << "REaDING INCLUDES"; p += (p[2] == 'a') ? 15 : 11; QLOG_INFO() << "Modified p 1 to be" << QString(p); if (!incl_computed) { incl_computed = TRUE; CppRefType::compute(dependencies, hdef.operator QString(), srcdef, h_incl, decl, src_incl, this); QLOG_INFO() << "Modified hdef to be: " << hdef.operator QString(); } QLOG_INFO() << "Modified p 2 to be" << QString(p); if (!h_incl.isEmpty()) { f_h << h_incl; if (*p != '\n') f_h << '\n'; } else if (*p == '\n') p += 1; QLOG_INFO() << "FINISHED INCLUDES"; } else if (!strncmp(p, "${declarations}", 15)) { p += 15; if (!incl_computed) { incl_computed = TRUE; CppRefType::compute(dependencies, hdef.operator QString(), srcdef, h_incl, decl, src_incl, this); } QLOG_INFO() << "DECLS IS: " << decl.operator QString(); if (!decl.isEmpty()) { f_h << decl; if (*p != '\n') f_h << '\n'; } else if (*p == '\n') p += 1; } else if (!strncmp(p, "${namespace_start}", 18)) { p += 18; if (!nasp_start.isEmpty()) f_h << nasp_start; if (*p == '\n') p += 1; } else if (!strncmp(p, "${namespace_end}", 16)) { p += 16; if (!nasp_end.isEmpty()) f_h << nasp_end; if (*p == '\n') p += 1; } else if (!strncmp(p, "${definition}", 13)) { p += 13; for (index = 0; index != n; index += 1) cls[index]->generate_decl(f_h, current_indent(p, hdef.operator QString())); if (*p == '\n') p += 1; } else // strange f_h << toLocale(p); } f_h << '\000'; f_h.flush(); if (must_be_saved(h_path, headerFile->data())) { QLOG_INFO() << "this is essentially what goes to the header file: " << headerFile->size(); write_trace_header(); //FILE * fp_h; QFile file(h_path); if (!file.open(QFile::WriteOnly)) { UmlCom::trace(WrapperStr("<font color=\"red\"><b><i> ") + name + "</i> : cannot open <i> " + h_path + "</i>, edit the <i> generation settings</i> (tab directory) or the <i>" + pack->name() + "</i> C++ directory specification</b></font><br>"); incr_error(); } else { QLOG_INFO() << "this is essentially what goes to the file: " << headerFile->constData(); QTextCodec* codec = QTextCodec::codecForLocale(); QTextStream out(&file); out.setCodec(QTextCodec::codecForLocale()); QString temp(*headerFile.data()); out << codec->toUnicode(temp); //out << *headerFile.data(); out.flush(); } } else { WrapperStr th = get_trace_header(); if (th.isEmpty()) UmlCom::trace(WrapperStr("<br><font face=helvetica><i> ") + h_path + "</i> not modified</font><br>"); else set_trace_header(th + "<font face=helvetica><i> " + h_path + "</i> not modified</font><br>"); } } // generate source file if (!srcdef.isEmpty()) { QSharedPointer<QByteArray> file(new QByteArray()); QTextStream f_src(file.data(), QIODevice::WriteOnly); const char * p = srcdef; const char * pp = 0; for (;;) { if (*p == 0) { if (pp == 0) break; // comment management done p = pp; pp = 0; if (*p == 0) break; } if (*p == '@') manage_alias(p, f_src); else if (*p != '$') f_src << toLocale(p); else if (!strncmp(p, "${comment}", 10)) manage_comment(p, pp, CppSettings::isGenerateJavadocStyleComment()); else if (!strncmp(p, "${description}", 14)) manage_description(p, pp); else if (!strncmp(p, "${name}", 7)) { // for file header p += 7; f_src << name; } else if (!strncmp(p, "${includes}", 11)) { p += 11; if (!incl_computed) { incl_computed = TRUE; CppRefType::compute(dependencies, hdef.operator QString(), srcdef, h_incl, decl, src_incl, this); } if (!src_incl.isEmpty()) { f_src << src_incl; if (*p != '\n') f_src << '\n'; } else if (*p == '\n') p += 1; } else if (!strncmp(p, "${members}", 10)) { p += 10; for (index = 0; index != n; index += 1) cls[index]->generate_def(f_src, current_indent(p, srcdef), FALSE); if (*p == '\n') p += 1; } else if (!strncmp(p, "${namespace_start}", 18)) { p += 18; if (!nasp_start.isEmpty()) f_src << nasp_start; if (*p == '\n') p += 1; } else if (!strncmp(p, "${namespace_end}", 16)) { p += 16; if (!nasp_end.isEmpty()) f_src << nasp_end; if (*p == '\n') p += 1; } else // strange f_src << toLocale(p); } f_src << '\000'; f_src.flush(); if (must_be_saved(src_path, file->data())) { write_trace_header(); FILE * fp_src; if ((fp_src = fopen((const char *) src_path, "wb")) == 0) { write_trace_header(); UmlCom::trace(WrapperStr("<font color=\"red\"><b><i> ") + name + " : </i> cannot open <i> " + src_path + "</i>, edit the <i> generation settings</i> (tab directory) or the <i>" + pack->name() + "</i> C++ directory specification</b></font><br>"); incr_error(); } else { fputs((const char *) file->data(), fp_src); fclose(fp_src); } } else if (get_trace_header().isEmpty()) UmlCom::trace(WrapperStr("<font face=helvetica><i> ") + src_path + "</i> not modified</font><br>"); } } }
int main(int argc, char **argv) { generate_text(getenv("QUERY_STRING")); return 0; }
void UmlArtifact::generate() { if (! managed) { managed = TRUE; if (stereotype() == "text") { generate_text(); return; } else if (stereotype() != "source") return; package_of_generated_artifact = package(); current = this; const WrapperStr filedef = pythonSource(); if (filedef.isEmpty()) return; const WrapperStr & name = this->name(); WrapperStr path = package_of_generated_artifact->file_path(name); UmlCom::message(name); if (verbose()) UmlCom::trace(WrapperStr("<hr><font face=helvetica>Generate code for <i> ") + name + "</i> in " + path + "</i></font><br>"); else set_trace_header(WrapperStr("<font face=helvetica>Generate code for <i> ") + name + "</i> in " + path + "</i></font><br>"); // get bodies if preserve const QVector<UmlClass*> & cls = associatedClasses(); if (preserve()) UmlOperation::read_bodies(path); // generate file WrapperStr indent; BooL indent_needed; unsigned n = cls.count(); unsigned index; QByteArray file; // note : QTextStream(FILE *) does not work under windows QTextStream f(&file); const char * p = filedef; const char * pp = 0; for (;;) { if (*p == 0) { if (pp == 0) break; // comment management done p = pp; pp = 0; if (*p == 0) break; } if (*p == '@') { indent_needed = FALSE; manage_alias(p, f, indent, indent_needed); } else if (*p != '$') f << *p++; else if (!strncmp(p, "${comment}", 10)) manage_comment(p, pp); else if (!strncmp(p, "${description}", 14)) manage_description(p, pp); else if (!strncmp(p, "${name}", 7)) { p += 7; f << name; } else if (!strncmp(p, "${Name}", 7)) { p += 7; f << capitalize(name); } else if (!strncmp(p, "${NAME}", 7)) { p += 7; f << name.upper(); } else if (!strncmp(p, "${nAME}", 7)) { p += 7; f << name.lower(); } else if (!strncmp(p, "${definition}", 13)) { indent_needed = TRUE; for (index = 0; index != n; index += 1) cls[index]->generate(f, indent, indent_needed); p += 13; if (*p == '\n') p += 1; } else if (!strncmp(p, "${import}", 9)) { imports = ""; generate_imports(f, imports); for (index = 0; index != n; index += 1) cls[index]->generate_imports(f, imports); p += 9; } else f << *p++; } f << '\000'; if (must_be_saved(path, file)) { write_trace_header(); FILE * fp; if ((fp = fopen((const char *) path, "wb")) == 0) { write_trace_header(); UmlCom::trace(WrapperStr("<font color=\"red\"><b><i> ") + name + "</i> : cannot open <i> " + path + "</i>, edit the <i> generation settings</i> (tab directory) or the <i>" + package_of_generated_artifact->name() + "</i> Python directory specification</b></font><br>"); incr_error(); } else { fputs((const char *) file, fp); fclose(fp); } } else if (get_trace_header().isEmpty()) UmlCom::trace(WrapperStr("<font face=helvetica><i> ") + path + "</i> not modified</font><br>"); } }