void UmlRelation::change(Context & ctx) { if (ctx.onRelation() && ctx.match_stereotype(stereotype())) { if (ctx.cpp()) { const QCString & c = cppDecl(); if (!c.isEmpty() && ctx.match(c)) { if (!set_CppDecl(ctx.replace(c))) ctx.err(); } } if (ctx.java()) { const QCString & c = javaDecl(); if (!c.isEmpty() && ctx.match(c)) { if (!set_JavaDecl(ctx.replace(c))) ctx.err(); } } if (ctx.php()) { const QCString & c = phpDecl(); if (!c.isEmpty() && ctx.match(c)) { if (!set_PhpDecl(ctx.replace(c))) ctx.err(); } } if (ctx.python()) { const QCString & c = pythonDecl(); if (!c.isEmpty() && ctx.match(c)) { if (!set_PythonDecl(ctx.replace(c))) ctx.err(); } } if (ctx.idl()) { const QCString & c = idlDecl(); if (!c.isEmpty() && ctx.match(c)) { if (!set_IdlDecl(ctx.replace(c))) ctx.err(); } } } }
void UmlOperation::generate_imports(QTextStream & f, WrapperStr & made) { WrapperStr s = pythonDecl(); if (!s.isEmpty()) { UmlArtifact * art = ((UmlClass *) parent())->assocArtifact(); returnType().generate_import(f, art, FALSE, made); int index1 = s.find("${(}"); if (index1 == -1) return; index1 += 4; int index2 = s.find("${)}", index1); if (index2 == -1) return; s = s.mid((unsigned) index1, (unsigned)(index2 - index1)); const QList<UmlParameter> & params = this->params(); QList<UmlParameter>::ConstIterator it; unsigned rank; char ti[16]; strcpy(ti, "${p"); for (it = params.begin(), rank = 0; it != params.end(); ++it, rank += 1) { sprintf(ti + 3, "%u}", rank); if (s.find(ti) != -1) (*it).type.generate_import(f, art, FALSE, made); } } }
void UmlOperation::generate(QTextStream & f, const WrapperStr &, WrapperStr indent, BooL & indent_needed, int &, const WrapperStr &) { const char * p = pythonDecl(); if ((p == 0) || (*p == 0)) return; const char * pp = 0; WrapperStr saved_indent = indent; WrapperStr indent_step = PythonSettings::indentStep(); const char * afterparam = 0; const QList<UmlParameter> & params = this->params(); unsigned rank; bool isinline = TRUE; bool in_params = FALSE; for (;;) { if (*p == 0) { if (pp == 0) break; // comment management done p = pp; if (*p == 0) break; pp = 0; indent = saved_indent; } if (*p == '@') manage_alias(p, f, indent, indent_needed); else if (*p != '$') { if (indent_needed) { indent_needed = FALSE; f << indent; } switch (*p) { case ':': if (pp == 0) { indent += indent_step; saved_indent = indent; indent_step = ""; } break; case '\n': indent_needed = TRUE; break; } 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, "${docstring}", 12)) manage_docstring(p, pp, indent_needed, indent, saved_indent); else if (!strncmp(p, "${static}", 9)) { p += 9; if (isClassMember()) { if (indent_needed) f << indent; else indent_needed = TRUE; f << "@staticmethod\n"; } } else if (!strncmp(p, "${abstract}", 11)) { p += 11; if (isAbstract()) { if (indent_needed) f << indent; else indent_needed = TRUE; f << "@abstractmethod\n"; } } else if (!strncmp(p, "${@}", 4)) { p += 4; manage_decorators(f, pythonDecorators(), indent, indent_needed); } else if (!strncmp(p, "${name}", 7)) { if (indent_needed) { indent_needed = FALSE; f << indent; } p += 7; f << compute_name(); } else if (!strncmp(p, "${class}", 8)) { if (indent_needed) { indent_needed = FALSE; f << indent; } p += 8; f << parent()->name(); } else if (!strncmp(p, "${(}", 4)) { p += 4; f << '('; in_params = TRUE; } else if (!strncmp(p, "${)}", 4)) { p += 4; f << ')'; afterparam = p; in_params = FALSE; } else if (sscanf(p, "${t%u}", &rank) == 1) { if (indent_needed) { indent_needed = FALSE; f << indent; } if (!generate_type(params, rank, f, in_params)) param_error(parent()->name(), name(), rank); p = strchr(p, '}') + 1; } else if (sscanf(p, "${p%u}", &rank) == 1) { if (indent_needed) { indent_needed = FALSE; f << indent; } if (!generate_var(params, rank, f)) param_error(parent()->name(), name(), rank); p = strchr(p, '}') + 1; } else if (sscanf(p, "${v%u}", &rank) == 1) { if (!generate_init(params, rank, f)) param_error(parent()->name(), name(), rank); p = strchr(p, '}') + 1; } else if (!strncmp(p, "${body}", 7) && (pp == 0)) {// not in comment isinline = FALSE; p = generate_body(f, indent, indent_needed, p); } else if (!strncmp(p, "${association}", 14)) { p += 14; UmlClassMember * m; if ((((m = getOf()) != 0) || ((m = setOf()) != 0)) && (m->kind() == aRelation)) { if (indent_needed) { indent_needed = FALSE; f << indent; } UmlClass::write(f, ((UmlRelation *) m)->association()); } } else if (!strncmp(p, "${type}", 7)) { p += 7; const UmlTypeSpec & t = returnType(); if ((t.type != 0) || !t.explicit_type.isEmpty()) { f << " -> "; UmlClass::write(f, t); } } else { // strange if (indent_needed) { indent_needed = FALSE; f << indent; } f << *p++; } } if (isinline) { if (indent_needed) f << indent << '\n'; else f << '\n'; indent_needed = TRUE; } }
void UmlOperation::html(QByteArray, unsigned int, unsigned int) { define(); fw.write("<table><tr><td><div class=\"element\">Operation <b>"); writeq(name()); fw.write("</b></div></td></tr></table>"); QByteArray s = description(); if (! s.isEmpty()) { fw.write("<p>"); if (! javaDecl().isEmpty()) gen_java_decl(s, TRUE); else if (! phpDecl().isEmpty()) gen_php_decl(s, TRUE); else if (! pythonDecl().isEmpty()) gen_python_decl(s, TRUE); else gen_cpp_decl(s, TRUE); fw.write("<br /></p>"); } fw.write("<p>Declaration :</p><ul>"); fw.write("<li>Uml : "); gen_uml_decl(); fw.write("</li>"); s = cppDecl(); if (!s.isEmpty()) { fw.write("<li>C++ : "); gen_cpp_decl(s, FALSE); fw.write("</li>"); } s = javaDecl(); if (!s.isEmpty()) { fw.write("<li>Java : "); gen_java_decl(s, FALSE); fw.write("</li>"); } s = phpDecl(); if (!s.isEmpty()) { fw.write("<li>Php : "); gen_php_decl(s, FALSE); fw.write("</li>"); } s = pythonDecl(); if (!s.isEmpty()) { fw.write("<li>Python : "); gen_python_decl(s, FALSE); fw.write("</li>"); } fw.write("</ul>"); annotation_constraint(); write_properties(); unload(FALSE, FALSE); }
const WrapperStr & UmlBaseOperation::pythonDef() { return pythonDecl(); }
void UmlClass::gen_html(QCString pfix, unsigned int rank, unsigned int level) { UmlCom::message(name()); QCString s; s = description(); if (isActive()) fw.write("<p>Active class</p>\n"); if (!s.isEmpty()) { fw.write("<p>"); if (! javaDecl().isEmpty()) gen_java_decl(s, TRUE); else if (! phpDecl().isEmpty()) gen_php_decl(s, TRUE); else if (! pythonDecl().isEmpty()) gen_python_decl(s, TRUE); else gen_cpp_decl(s, TRUE); fw.write("<br /></p>\n"); } if (!cppDecl().isEmpty() || !javaDecl().isEmpty() || !phpDecl().isEmpty() || !pythonDecl().isEmpty()) { fw.write("<p>Declaration :</p><ul>\n"); s = cppDecl(); if (!s.isEmpty()) { fw.write("<li>C++ : "); gen_cpp_decl(s, FALSE); fw.write("</li>"); } s = javaDecl(); if (!s.isEmpty()) { fw.write("<li>Java : "); gen_java_decl(s, FALSE); fw.write("</li>"); } s = phpDecl(); if (!s.isEmpty()) { fw.write("<li>Php : "); gen_php_decl(s, FALSE); fw.write("</li>"); } s = pythonDecl(); if (!s.isEmpty()) { fw.write("<li>Python : "); gen_python_decl(s, FALSE); fw.write("</li>"); } fw.write("</ul>"); } if (subClasses.size() != 0) { sort(subClasses); fw.write("<p>Directly inherited by : "); for (unsigned i = 0; i != subClasses.size(); i += 1) { subClasses.elementAt(i)->write(); fw.write(' '); } fw.write("</p>\n"); } write_dependencies(); annotation_constraint(); bool p = FALSE; UmlItem * x; if ((x = associatedArtifact()) != 0) { p = TRUE; fw.write("<p>Artifact : "); x->write(); } const QVector<UmlComponent> comps = associatedComponents(); if (comps.size() != 0) { if (p) fw.write(", Component(s) :"); else { p = TRUE; fw.write("<p>Component(s) :"); } for (unsigned i = 0; i != comps.size(); i += 1) { fw.write(' '); comps[i]->write(); } } if ((x = associatedDiagram()) != 0) { if (p) fw.write(", Diagram : "); else { p = TRUE; fw.write("<p>Diagram : "); } x->write(); } if (p) fw.write("</p>\n"); if (parent()->kind() == aClass) { fw.write("<p>nested in "); parent()->write(); fw.write("</p>\n"); } write_properties(); // const QVector<UmlItem> ch = children(); if (ch.size() != 0) { if (stereotype() == "enum_pattern") { p = FALSE; for (unsigned i = 0; i != ch.size(); i += 1) { if (ch[i]->kind() == anAttribute) { if (!p) { p = TRUE; fw.write("<div class=\"sub\">\n<p>Items :</p><ul>\n"); } fw.write("<li>"); writeq(ch[i]->name()); fw.write("</li>\n"); } } if (p) fw.write("</ul>\n</div>\n"); } else { fw.write("<div class=\"sub\">\n"); if (stereotype() == "enum") { unsigned i; p = FALSE; for (i = 0; i != ch.size(); i += 1) { if ((ch[i]->kind() == anAttribute) && (ch[i]->stereotype() != "attribute")) { if (!p) { p = TRUE; fw.write("<p>Items :</p><ul>\n"); } fw.write("<li>"); writeq(ch[i]->name()); fw.write("</li>\n"); } } if (p) fw.write("</ul>\n"); s = ""; for (i = 0; i != ch.size(); i += 1) if ((ch[i]->kind() != anAttribute) || (ch[i]->stereotype() == "attribute")) ch[i]->html(s, 0, 0); } else if (flat) write_children(pfix, rank, level); else { // non flat s = ""; for (unsigned i = 0; i != ch.size(); i += 1) ch[i]->html(s, 0, 0); } fw.write("</div>\n"); } } sort(*inherited_opers); bool already = FALSE; for (unsigned i = 0; i != inherited_opers->size(); i += 1) { if (already) fw.write(", "); else { already = TRUE; fw.write("<p>All public operations : "); } inherited_opers->elementAt(i)->write(); fw.write(' '); } if (already) fw.write("</p>\n"); }
const QCString & UmlBaseOperation::pythonDef() { return pythonDecl(); }
void UmlRelation::html(QByteArray, unsigned int, unsigned int) { bool extension; switch (relationKind()) { case aGeneralisation: case aRealization: case aDependency: return; case aDirectionalAssociation: extension = (parent()->stereotype() == "stereotype") && (roleType()->stereotype() == "metaclass"); break; default: extension = FALSE; } define(); if (extension) fw.write("<table><tr><td><div class=\"element\">Extension</div></td></tr></table>"); else { fw.write("<table><tr><td><div class=\"element\">Relation <b>"); writeq(name()); fw.write("</b></div></td></tr></table>"); } QByteArray s = description(); if (!s.isEmpty()) { fw.write("<p>"); if (! javaDecl().isEmpty()) gen_java_decl(s, TRUE); else if (! phpDecl().isEmpty()) gen_php_decl(s, TRUE); else if (! pythonDecl().isEmpty()) gen_python_decl(s); else gen_cpp_decl(s, TRUE); fw.write("<br /></p>"); } if (extension) { fw.write("<p>Extend "); roleType()->write(); fw.write("</p>"); } else { fw.write("<p>Declaration :</p><ul>"); fw.write("<li>Uml : "); gen_uml_decl(); fw.write("</li>"); s = cppDecl(); if (!s.isEmpty()) { fw.write("<li>C++ : "); gen_cpp_decl(s, FALSE); fw.write("</li>"); } s = javaDecl(); if (!s.isEmpty()) { fw.write("<li>Java : "); gen_java_decl(s, FALSE); fw.write("</li>"); } s = phpDecl(); if (!s.isEmpty()) { fw.write("<li>Php : "); gen_php_decl(s, FALSE); fw.write("</li>"); } s = pythonDecl(); if (!s.isEmpty()) { fw.write("<li>Python : "); gen_python_decl(s); fw.write("</li>"); } fw.write("</ul>"); } annotation_constraint(); write_properties(); unload(FALSE, FALSE); }