本文整理汇总了C++中Q3CString::find方法的典型用法代码示例。如果您正苦于以下问题:C++ Q3CString::find方法的具体用法?C++ Q3CString::find怎么用?C++ Q3CString::find使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Q3CString
的用法示例。
在下文中一共展示了Q3CString::find方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: read_word_bis
char Lex::read_word_bis(bool in_templ)
{
char result = 0;
if (!context.reread.isEmpty()) {
if (in_templ && (context.reread == ">>")) {
// >> read as > because unlike C++ not have to write "T<..X<..> >"
context.reread = context.reread.mid(1);
result = '>';
}
else {
result = context.reread.latin1()[0];
context.reread = QString::null;
}
}
else {
for (;;) {
int c = get();
#ifdef TRACE
cout << "deja \"" << result << "\", '" << ((char) c) << "'\n";
#endif
if (c == EOF)
break;
else if (Separators.find(c) == -1) {
if (result == 0)
result = c;
}
else if (result != 0) {
unget();
break;
}
else {
switch (c) {
case '"':
bypass_string();
#ifdef TRACE
cout << "retourne '" << (char) c << "'\n";
#endif
return (char) c;
case '[':
bypass_array_dim();
#ifdef TRACE
cout << "retourne '!' (array dim)\n";
#endif
return '!'; // to not be [
case '\'':
bypass_character();
#ifdef TRACE
cout << "retourne ' (char)\n";
#endif
return (char) c;
case '/':
switch (peek()) {
case '/':
bypass_cpp_comment();
break;
case '*':
bypass_c_comment();
break;
case '=':
get();
#ifdef TRACE
cout << "retourne '/' (/=)\n";
#endif
return (char) c;
default:
#ifdef TRACE
cout << "retourne '/'\n";
#endif
return (char) c;
}
break;
case '\n':
context.line_number += 1;
break;
case '@':
bypass_annotation();
#ifdef TRACE
cout << "retourne '@' (annotation)\n";
#endif
return (char) c;
case '>':
if (in_templ && (peek() == '>')) {
// >> read as > because unlike C++ not have to write "T<..X<..> >"
get();
if (peek() != '=') {
unget();
#ifdef TRACE
cout << "retourne '>'\n";
#endif
return '>';
}
unget();
}
// no break
default:
if (c > ' ')
return bypass_operator(c);
break;
//.........这里部分代码省略.........
示例2: new_one
bool UmlRelation::new_one(Class * container, const Q3CString & name,
UmlClass * dest, const Q3CString & modifier,
const Q3CString & pretype, const Q3CString & array,
const Q3CString & typeform, aVisibility visibility,
bool staticp, bool constp, bool mutablep, bool volatilep,
const Q3CString & value, Q3CString comment,
Q3CString description
#ifdef ROUNDTRIP
, bool roundtrip, Q3PtrList<UmlItem> & expected_order
#endif
)
{
#ifdef DEBUG_BOUML
cout << "RELATION '" << name << "' from '" << cl->name() << "' to '" << dest->name()
<< "' modifier '" << modifier << "' array '" << array
<< "' typeform '" << typeform << "'\n";
#endif
if (
#ifdef REVERSE
container->from_libp() &&
#endif
(visibility == PrivateVisibility)) {
Lex::finish_line();
Lex::clear_comments();
return TRUE;
}
UmlClass * cl = container->get_uml();
UmlRelation * rel;
#ifdef ROUNDTRIP
if (roundtrip &&
((rel = search_rel(container, name, dest, "")) != 0)) {
rel->set_usefull();
expected_order.append(rel);
}
else {
#endif
rel = UmlBaseRelation::create((modifier.isEmpty() &&
((typeform == "${type}") ||
(typeform[typeform.find("${type}") + 7] != '*')))
? aDirectionalAggregationByValue
: aDirectionalAssociation,
cl, dest);
if (rel == 0) {
UmlCom::trace(Q3CString("<font face=helvetica><b>cannot add relation <i>")
+ name + "</i> in <i>" + cl->name() + "</i> to <i>"
+ dest->name() + "</i></b></font><br><hr>");
return FALSE;
}
#ifdef REVERSE
# ifndef ROUNDTRIP
Statistic::one_relation_more();
# else
if (roundtrip) {
expected_order.append(rel);
container->set_updated();
roundtrip = FALSE;
}
}
# endif
#endif
Lex::finish_line();
comment = Lex::get_comments(comment);
description = Lex::get_description(description);
#ifdef ROUNDTRIP
if (roundtrip) {
if (rel->visibility() != visibility) {
rel->set_Visibility(visibility);
container->set_updated();
}
if (rel->isReadOnly() != constp) {
rel->set_isReadOnly(constp);
container->set_updated();
}
if (rel->isClassMember() != staticp) {
rel->set_isClassMember(staticp);
container->set_updated();
}
if (rel->isCppMutable() != mutablep) {
rel->set_isCppMutable(mutablep);
container->set_updated();
}
if (rel->isVolatile() != volatilep) {
rel->set_isVolatile(volatilep);
container->set_updated();
}
}
else {
#endif
//.........这里部分代码省略.........
示例3: read_word
Q3CString Lex::read_word(bool in_templ)
{
QString result;
if (!context.reread.isEmpty()) {
result = context.reread;
if (in_templ && (result == ">>")) {
// >> read as > because unlike C++ not have to write "T<..X<..> >"
context.reread = result.mid(1);
result = result.left(1);
}
else
context.reread = QString::null;
}
else {
for (;;) {
int c = get();
#ifdef TRACE
cout << "deja \"" << result << "\", '" << ((char) c) << "'\n";
#endif
if (c == EOF)
break;
else if (Separators.find(c) == -1)
result += c;
else if (! result.isEmpty()) {
unget();
break;
}
else {
switch (c) {
case '"':
return read_string();
case '[':
return read_array_dim();
case '\'':
return read_character();
case '/':
switch (peek()) {
case '/':
bypass_cpp_comment();
break;
case '*':
bypass_c_comment();
break;
case '=':
get();
#ifdef TRACE
cout << "retourne '/='\n";
#endif
return "/=";
default:
#ifdef TRACE
cout << "retourne '/'\n";
#endif
return "/";
}
break;
case '\n':
context.line_number += 1;
break;
case '@':
return read_annotation();
case '>':
if (in_templ && (peek() == '>')) {
// >> read as > because unlike C++ not have to write "T<..X<..> >"
get();
if (peek() != '=') {
unget();
#ifdef TRACE
cout << "retourne '>'\n";
#endif
return ">";
}
unget();
}
// no break
default:
if (c > ' ')
return manage_operator(result, c);
break;
}
}
}
}
#ifdef TRACE
cout << "retourne '" << result << "'\n";
#endif
return Q3CString(result.toAscii().constData());
}
示例4: new_one
bool UmlOperation::new_one(Class * container, aVisibility visibility,
bool finalp, bool abstractp, bool staticp,
Q3CString comment, Q3CString description)
{
// 'function' was read, it is followed by :
// ['&'] name'(' {'array' | <classname>] ['&'] '$'<varname> ['=' <value>]}* ')' '{' ... '}'
Q3CString s = Lex::read_word();
bool refp;
if (s == "&") {
refp = TRUE;
s = Lex::read_word();
}
else
refp = FALSE;
if (s.isEmpty()) {
Lex::premature_eof();
return FALSE;
}
Q3CString name = s;
#ifdef TRACE
QLOG_INFO() <<"OPERATION '" << name << "'\n";
#endif
s = Lex::read_word();
if (s != "(") {
Lex::syntax_error("'(' expected rather than '" + s + "'");
return FALSE;
}
UmlClass * cl = container->get_uml();
UmlOperation * op;
#ifndef REVERSE
if (visibility == PrivateVisibility)
op = 0;
else
#endif
{
op = UmlBaseOperation::create(cl, name);
if (op == 0) {
PhpCatWindow::trace(Q3CString("<font face=helvetica><b>cannot add operation <i>")
+ name + "</i> in <i>" + cl->name()
+ "</i></b></font><br>");
return FALSE;
}
#ifdef REVERSE
Statistic::one_operation_more();
#endif
}
Q3CString def;
if (op != 0) {
op->set_Visibility(visibility);
if (staticp) op->set_isClassMember(TRUE);
if (finalp) op->set_isPhpFinal(TRUE);
def = PhpSettings::operationDef();
int index;
if (((index = def.find("${(}")) == -1) ||
(def.find("${)}", index + 4) == -1) ||
((index = def.find("${name}")) == -1) ||
(def.find("${body}") == -1)) {
// use a definition where ${body] is not indented
def = " ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}\n{\n ${body}}\n";
index = def.find("${name}");
}
if (refp)
def.insert(index, "&");
if ((name == cl->name()) || (name == "__construct")) {
// constructor, remove useless ${}
if ((index = def.find("${static}")) != -1)
def.remove(index, 9);
if ((index = def.find("${final}")) != -1)
def.remove(index, 8);
if ((index = def.find("${abstract}")) != -1)
def.remove(index, 11);
}
if (abstractp) {
op->set_isAbstract(TRUE);
def = def.left(def.find("${)}") + 4) + ";";
}
}
// parameters
unsigned rank = 0;
UmlParameter param;
//.........这里部分代码省略.........
示例5: gen_app
void UmlArtifact::gen_app(const Q3CString & path) {
Q3CString target;
Q3CString pro;
propertyValue("genpro target", target);
propertyValue("genpro pro", pro);
if (target.isEmpty()) {
if ((target = name()) == "executable")
target = UmlPackage::getProject()->name();
#ifdef WIN32
target += ".exe";
#endif
}
if (pro.isEmpty()) {
pro = target;
#ifdef WIN32
if (pro.right(4) == ".exe")
pro.resize(pro.length() - 4);
#endif
QDir d(path);
pro = d.absFilePath(pro + ".pro");
}
Q3CString tmplt;
Q3CString config;
Q3CString defines;
Q3CString includepath;
Q3CString dependpath;
Q3CString objectsdir;
Q3CString footer;
if (!propertyValue("genpro tmplt", tmplt))
tmplt = "app";
if (!propertyValue("genpro config", config))
config = "debug warn_on qt";
if (!propertyValue("genpro defines", defines))
defines = "WITHCPP WITHJAVA WITHPHP WITHPYTHON WITHIDL";
else if (defines.find("WITHPHP") == -1) {
int n = 0;
if (defines.find("WITHCPP") != -1)
n += 1;
if (defines.find("WITHJAVA") != -1)
n += 1;
if (defines.find("WITHIDL") != -1)
n += 1;
if (n > 1)
defines += " WITHPHP WITHPYTHON";
}
else if (defines.find("WITHPYTHON") == -1) {
int n = 0;
if (defines.find("WITHCPP") != -1)
n += 1;
if (defines.find("WITHJAVA") != -1)
n += 1;
if (defines.find("WITHIDL") != -1)
n += 1;
if (defines.find("WITHPHP") != -1)
n += 1;
if (n > 1)
defines += " WITHPYTHON";
}
propertyValue("genpro includepath", includepath);
propertyValue("genpro dependpath", dependpath);
propertyValue("genpro objectsdir", objectsdir);
propertyValue("genpro footer", footer);
for (;;) {
Dialog dialog(this, path, pro, target, tmplt, config, defines,
includepath, dependpath, objectsdir, footer);
if (dialog.exec() != QDialog::Accepted)
return;
set_PropertyValue("genpro pro", pro);
set_PropertyValue("genpro path", path);
set_PropertyValue("genpro target", target);
set_PropertyValue("genpro tmplt", tmplt);
set_PropertyValue("genpro config", config);
set_PropertyValue("genpro defines", defines);
set_PropertyValue("genpro includepath", includepath);
set_PropertyValue("genpro dependpath", dependpath);
set_PropertyValue("genpro objectsdir", objectsdir);
set_PropertyValue("genpro footer", footer);
QFile f(pro);
if (! f.open(QIODevice::WriteOnly))
//.........这里部分代码省略.........
示例6: name
UmlClassView * UmlPackage::get_classview(const Q3CString & nmsp) {
UmlPackage * pack;
if (nmsp != cppNamespace()) {
if (namespace_fixedp) {
if ((pack = findCppNamespace(nmsp)) == 0) {
Q3CString s = nmsp;
if (s.isEmpty())
s = name();
else {
int index = 0;
while ((index = s.find("::", index)) != -1)
s.replace(index++, 2, " ");
}
if (((pack = UmlBasePackage::create(this, s)) == 0) &&
((pack = UmlBasePackage::create(this, s += "_")) == 0) &&
((pack = UmlBasePackage::create(this, s += "_")) == 0) &&
((pack = UmlBasePackage::create(this, s += "_")) == 0) &&
((pack = UmlBasePackage::create(this, s += "_")) == 0)) {
#ifdef REVERSE
UmlCom::trace(Q3CString("<font face=helvetica><b>cannot create package <i>")
+ s + "</i> under package <i>"
+ name() + "</b></font><br>");
UmlCom::message("");
throw 0;
#else
QMessageBox::critical(0, "Fatal Error",
Q3CString("<font face=helvetica><b>cannot create package <i>")
+ s + "</i> under package <i>"
+ Name() + "</b></font><br>");
QApplication::exit(1);
#endif
}
pack->set_CppNamespace(nmsp);
pack->set_CppSrcDir(cppSrcDir());
pack->set_CppHDir(cppHDir());
pack->namespace_fixedp = TRUE;
}
}
else {
pack = this;
pack->set_CppNamespace(nmsp);
pack->namespace_fixedp = TRUE;
}
}
else
pack = this;
if (pack->class_view == 0) {
Q3PtrVector<UmlItem> ch = pack->children();
for (unsigned index = 0; index != ch.size(); index += 1)
// return the first class view find
if (ch[index]->kind() == aClassView)
return pack->class_view = (UmlClassView *) ch[index];
if ((pack->class_view = UmlBaseClassView::create(pack, name())) == 0) {
#ifdef REVERSE
UmlCom::trace(Q3CString("<font face=helvetica><b>cannot create class view <i>")
+ name() + "</i> under package <i>"
+ pack->name() + "</b></font><br>");
UmlCom::message("");
throw 0;
#else
QMessageBox::critical(0, "Fatal Error",
Q3CString("<font face=helvetica><b>cannot create class view <i>")
+ name() + "</i> under package <i>"
+ pack->name() + "</b></font><br>");
QApplication::exit(1);
#endif
}
}
return pack->class_view;
}
示例7: compute_dependency
void UmlClass::compute_dependency(Q3PtrList<CppRefType> & dependencies,
const Q3CString &, bool all_in_h) {
Q3PtrVector<UmlItem> ch = children();
const Q3CString stereotype = cpp_stereotype();
bool a_typedef = (stereotype == "typedef");
bool an_enum = (stereotype == "enum");
const Q3ValueList<UmlFormalParameter> formals = this->formals();
const Q3ValueList<UmlActualParameter> actuals = this->actuals();
if (!formals.isEmpty())
// template class, force depend in h
all_in_h = TRUE;
for (unsigned index = 0; index != ch.size(); index += 1) {
if (ch[index]->kind() != aNcRelation) {
UmlClassItem * it = (UmlClassItem *) ch[index];
if (! it->cppDecl().isEmpty())
it->compute_dependency(dependencies, stereotype, all_in_h);
}
}
if (an_enum && (!formals.isEmpty() || !actuals.isEmpty())) {
write_trace_header();
UmlCom::trace(" <font color=\"red\"><b><i>template enum</i></b></font><br>");
incr_warning();
}
else if (a_typedef && !formals.isEmpty()) {
write_trace_header();
UmlCom::trace(" <font color=\"red\"><b><i>template typedef</i></b></font><br>");
incr_warning();
}
else {
Q3ValueList<UmlFormalParameter>::ConstIterator itf;
for (itf = formals.begin(); itf != formals.end(); ++itf)
CppRefType::remove((*itf).name(), dependencies);
Q3ValueList<UmlActualParameter>::ConstIterator ita;
for (ita = actuals.begin(); ita != actuals.end(); ++ita)
UmlClassMember::compute_dependency(dependencies, "${type}",
(*ita).value(), all_in_h);
if (a_typedef) {
Q3CString decl = cppDecl();
int index;
remove_comments(decl);
if ((index = decl.find("${name}")) != -1)
decl.remove((unsigned) index, 7);
replace_alias(decl);
UmlClassMember::compute_dependency(dependencies, decl,
baseType(), all_in_h);
}
}
if ((associatedArtifact() == 0) ||
(associatedArtifact()->associatedClasses().count() == 1))
CppRefType::remove(this, dependencies);
else
CppRefType::force_ref(this, dependencies);
}
示例8: compute_dependency
void UmlRelation::compute_dependency(Q3PtrList<CppRefType> & dependencies,
const Q3CString & cl_stereotype,
bool all_in_h) {
if (cl_stereotype == "enum")
return;
switch (relationKind()) {
case aDependency:
if (stereotype() == "friend")
break;
CppRefType::add(roleType(), dependencies, cppDecl() != "#include in source",
roleType()->isCppExternal());
break;
case aGeneralisation:
case aRealization:
CppRefType::add(roleType(), dependencies, TRUE);
break;
default:
Q3CString decl = cppDecl();
int index;
if ((index = decl.find("${static}")) != -1)
decl.remove((unsigned) index, 9);
if ((index = decl.find("${mutable}")) != -1)
decl.remove((unsigned) index, 10);
if ((index = decl.find("${volatile}")) != -1)
decl.remove((unsigned) index, 11);
if ((index = decl.find("${const}")) != -1)
decl.remove((unsigned) index, 8);
if ((index = decl.find("${multiplicity}")) != -1)
decl.remove((unsigned) index, 15);
if ((index = decl.find("${name}")) != -1)
decl.remove((unsigned) index, 7);
if ((index = decl.find("${inverse_name}")) != -1)
decl.remove((unsigned) index, 15);
if ((index = decl.find("${value}")) != -1)
decl.remove((unsigned) index, 8);
if ((index = decl.find("${h_value}")) != -1)
decl.remove((unsigned) index, 10);
if ((index = decl.find("${stereotype}")) != -1)
decl.replace((unsigned) index, 13,
CppSettings::relationAttributeStereotype(stereotype()));
if ((index = decl.find("${association}")) != -1) {
decl.replace((unsigned) index, 14,
association().toString());
}
replace_alias(decl);
UmlTypeSpec type;
type.type = roleType();
UmlClassMember::compute_dependency(dependencies, decl, type, all_in_h);
}
}
示例9: file_path
Q3CString UmlPackage::file_path(const Q3CString & f) {
if (!dir.read) {
dir.file = javaDir();
if (! RootDirRead) {
RootDirRead = TRUE;
RootDir = JavaSettings::rootDir();
if (!RootDir.isEmpty() && // empty -> error
QDir::isRelativePath(RootDir)) {
QFileInfo f(getProject()->supportFile());
QDir d(f.dirPath());
RootDir = d.filePath(RootDir);
}
}
QDir d_root(RootDir);
if (dir.file.isEmpty())
dir.file = RootDir;
else if (QDir::isRelativePath(dir.file))
dir.file = d_root.filePath(dir.file);
if (dir.file.isEmpty()) {
UmlCom::trace(Q3CString("<font color=\"red\"><b><b> The generation directory "
"must be specified for the package<i> ") + name()
+ "</i>, edit the <i> generation settings</i> (tab 'directory') "
"or edit the package (tab 'Java')</b></font><br>");
UmlCom::bye(n_errors() + 1);
UmlCom::fatal_error("UmlPackage::file_path");
}
dir.read = TRUE;
}
QDir d(dir.file);
if (! d.exists()) {
// create directory including the intermediates
Q3CString s = dir.file;
int index = 0;
QChar sep = QDir::separator();
if (sep != '/') {
while ((index = s.find(sep, index)) != -1)
s.replace(index++, 1, "/");
}
s = QDir::cleanDirPath(s) + "/";
index = s.find("/");
int index2;
while ((index2 = s.find("/", index + 1)) != -1) {
Q3CString s2 = s.left(index2);
QDir sd(s2);
if (!sd.exists()) {
if (!sd.mkdir(s2)) {
UmlCom::trace(Q3CString("<font color=\"red\"><b> cannot create directory <i>")
+ s2 + "</i></b></font><br>");
UmlCom::bye(n_errors() + 1);
UmlCom::fatal_error("UmlPackage::file_path");
}
}
index = index2;
}
}
return Q3CString(d.filePath(f).toAscii().constData()) + Q3CString(".") +
JavaSettings::sourceExtension();
}
示例10: write
void UmlClass::write(QTextOStream & f, bool with_formals, BooL * is_template,
const Q3ValueList<UmlActualParameter> & actuals) {
if (context.findRef(this) == -1) {
if (parent()->kind() == aClass) {
if (context.findRef((UmlClass *) parent()) == -1) {
// parent cannot have formals, but may have actuals
((UmlClass *) parent())->write(f, FALSE, 0, actuals);
f << "::";
}
}
else {
UmlArtifact * cp = associatedArtifact();
Q3CString nasp = ((UmlPackage *)
((cp != 0) ? (UmlItem *) cp : (UmlItem *) this)->package())
->cppNamespace();
if (CppSettings::isForceNamespacePrefixGeneration() ||
(nasp != UmlArtifact::generation_package()->cppNamespace()))
f << nasp << "::";
}
}
Q3CString s;
if (isCppExternal()) {
s = cppDecl();
int index = s.find('\n');
s = (index == -1) ? s.stripWhiteSpace()
: s.left(index).stripWhiteSpace();
if ((index = s.find("${name}")) != -1)
s.replace(index, 7, name());
else if ((index = s.find("${Name}")) != -1)
s.replace(index, 7, capitalize(name()));
else if ((index = s.find("${NAME}")) != -1)
s.replace(index, 7, name().upper());
else if ((index = s.find("${nAME}")) != -1)
s.replace(index, 7, name().lower());
}
else
s = name(); // true_name
if (! s.isEmpty()){
f << s;
if (is_template != 0)
*is_template = (s.at(s.length() - 1) == '>');
}
else if (is_template != 0)
*is_template = FALSE;
if (with_formals) {
Q3ValueList<UmlFormalParameter> formals = this->formals();
if (! formals.isEmpty()) {
const char * sep = "<";
Q3ValueList<UmlFormalParameter>::ConstIterator it;
for (it = formals.begin(); it != formals.end(); ++it) {
f << sep << (*it).name();
sep = ", ";
}
f << '>';
if (is_template != 0)
*is_template = TRUE;
}
}
else if (!actuals.isEmpty()) {
Q3ValueList<UmlActualParameter>::ConstIterator ita;
BooL need_space = FALSE;
bool used = FALSE;
for (ita = actuals.begin(); ita != actuals.end(); ++ita) {
if ((*ita).superClass() == this) {
used = TRUE;
(*ita).generate(f, need_space);
}
}
if (used) {
if (need_space)
f << " >";
else
f << '>';
if (is_template != 0)
*is_template = TRUE;
}
}
}
示例11: cpp
Q3CString UmlParameter::cpp(unsigned rank) const
{
Q3CString s;
int index;
if ((type.type != 0) &&
(CppSettings::classStereotype(type.type->stereotype()) == "enum")) {
switch (dir) {
case InputDirection:
s = CppSettings::enumIn();
break;
case OutputDirection:
s = CppSettings::enumOut();
break;
default:
// can't be return
s = CppSettings::enumInout();
break;
}
}
else {
switch (dir) {
case InputDirection:
if (!type.explicit_type.isEmpty())
s = CppSettings::builtinIn(type.explicit_type);
if (s.isEmpty())
s = CppSettings::in();
case OutputDirection:
if (!type.explicit_type.isEmpty())
s = CppSettings::builtinOut(type.explicit_type);
if (s.isEmpty())
s = CppSettings::out();
break;
default:
// can't be return
if (!type.explicit_type.isEmpty())
s = CppSettings::builtinInout(type.explicit_type);
if (s.isEmpty())
s = CppSettings::inout();
}
}
if ((index = s.find("${type}")) != -1) {
Q3CString t;
t.sprintf("${t%u}", rank);
s.replace(index, 7, t);
}
Q3CString p;
p.sprintf(" ${p%u}${v%u}", rank, rank);
return s + p;
}
示例12: file_path
Q3CString UmlPackage::file_path(const Q3CString & f, Q3CString relto) {
if (!dir.read) {
dir.file = phpDir();
dir.file_absolute = FALSE;
QDir d_root(rootDir());
if (dir.file.isEmpty())
dir.file = RootDir;
else if (QDir::isRelativePath(dir.file))
dir.file = d_root.filePath(dir.file);
else
dir.file_absolute = TRUE;
if (dir.file.isEmpty()) {
UmlCom::trace(Q3CString("<font color=\"red\"><b><b> The generation directory "
"must be specified for the package<i> ") + name()
+ "</i>, edit the <i> generation settings</i> (tab 'directory') "
"or edit the package (tab 'Php')</b></font><br>");
UmlCom::bye(n_errors() + 1);
UmlCom::fatal_error("UmlPackage::file_path");
}
dir.read = TRUE;
}
if (f.isEmpty())
return dir.file;
QDir d(dir.file);
if (! d.exists()) {
// create directory including the intermediates
Q3CString s = dir.file;
int index = 0;
QChar sep = QDir::separator();
if (sep != '/') {
while ((index = s.find(sep, index)) != -1)
s.replace(index++, 1, "/");
}
s = QDir::cleanDirPath(s) + "/";
index = s.find("/");
int index2;
while ((index2 = s.find("/", index + 1)) != -1) {
Q3CString s2 = s.left(index2);
QDir sd(s2);
if (!sd.exists()) {
if (!sd.mkdir(s2)) {
UmlCom::trace(Q3CString("<font color=\"red\"><b> cannot create directory <i>")
+ s2 + "</i></b></font><br>");
UmlCom::bye(n_errors() + 1);
UmlCom::fatal_error("UmlPackage::file_path");
}
}
index = index2;
}
}
Q3CString df = (dir.file_absolute || relto.isEmpty())
? Q3CString(d.filePath(f).toAscii().constData())
: relative_path(d, relto) + f;
if (PhpSettings::isRelativePath() && (df[0] != '/') && (df[0] != '.'))
df = "./" + df;
return df + Q3CString(".") + PhpSettings::sourceExtension();
}
示例13: add_import
void UmlArtifact::add_import(const char * i) {
Q3CString s = javaSource();
s.insert(s.find("${definition}"), i);
set_JavaSource(s);
}
示例14: identifierp
bool Lex::identifierp(const char * s)
{
return (Separators.find(*s) == -1);
}
示例15: normalize
Q3CString Lex::normalize(const Q3CString & s)
{
int index = s.find('<');
if (index == -1)
return s;
Q3CString r;
const char * p = s;
index = 0;
for (;;) {
char c = *p++;
switch (c) {
case 0:
return r;
case '<':
if (!r.isEmpty() && (r.at(r.length() - 1) == ' '))
r.truncate(r.length() - 1);
r += '<';
break;
case '>':
if (!r.isEmpty() && (r.at(r.length() - 1) == '>'))
r += " >";
else
r += '>';
break;
case '/':
if (*p == '/') {
// comment
p += 1;
do p += 1;
while (*p && (*p != '\n'));
}
else if (*p == '*') {
/* comment */
p += 1;
do p += 1;
while (*p && ((*p != '*') || (p[1] != '/')));
p += 2;
}
else {
if (!r.isEmpty() && (r.at(r.length() - 1) == ' '))
r.truncate(r.length() - 1);
}
break;
case '#':
do {
if (*++p == '\\')
p += 2;
else if ((*p == '/') && (p[1] == '*')) {
/* comment */
p += 1;
do p += 1; while (*p && ((*p != '*') || (p[1] != '/')));
p += 2;
}
} while (*p && (*p != '\n'));
break;
case '"':
if (!r.isEmpty() &&
(r.at(r.length() - 1) == '"') &&
(p[-2] != '"'))
r += ' ';
do {
if (*++p == '\\')
p += 2;
} while (*p && (*p != '"'));
break;
case '\'':
if (!r.isEmpty() && (r.at(r.length() - 1) == ' '))
r.truncate(r.length() - 1);
do {
if (*++p == '\\')
p += 2;
} while (*p && (*p != '\''));
break;
case ':':
if (!r.isEmpty() && (p[-2] <= ' '))
r += " :";
else
r += ':';
break;
default:
if (c > ' ') {
if (::identifierp(c)) {
if (!r.isEmpty() && ::identifierp(r.at(r.length() - 1)))
r += ' ';
r += c;
while ((*p == ':') || ::identifierp(*p))
r += *p++;
}
else
r += c;
}
}
}
return r;
//.........这里部分代码省略.........