/** @short Take the initial text and mark it as a quotation */ QStringList quoteText(QStringList inputLines) { QStringList quote; for (QStringList::iterator line = inputLines.begin(); line != inputLines.end(); ++line) { if (UiUtils::signatureSeparator().match(*line).hasMatch()) { // This is the signature separator, we should not include anything below that in the quote break; } // rewrap - we need to keep the quotes at < 79 chars, yet the grow with every level if (line->length() < 79-2) { // this line is short enough, prepend quote mark and continue if (line->isEmpty() || line->at(0) == QLatin1Char('>')) line->prepend(QLatin1Char('>')); else line->prepend(QLatin1String("> ")); quote << *line; continue; } // long line -> needs to be wrapped // 1st, detect the quote depth and eventually stript the quotes from the line int quoteLevel = 0; int contentStart = 0; if (line->at(0) == QLatin1Char('>')) { quoteLevel = 1; while (quoteLevel < line->length() && line->at(quoteLevel) == QLatin1Char('>')) ++quoteLevel; contentStart = quoteLevel; if (quoteLevel < line->length() && line->at(quoteLevel) == QLatin1Char(' ')) ++contentStart; } // 2nd, build a quote string QString quotemarks; for (int i = 0; i < quoteLevel; ++i) quotemarks += QLatin1Char('>'); quotemarks += QLatin1String("> "); // 3rd, wrap the line, prepend the quotemarks to each line and add it to the quote text int space(contentStart), lastSpace(contentStart), pos(contentStart), length(0); while (pos < line->length()) { if (line->at(pos) == QLatin1Char(' ')) space = pos+1; ++length; if (length > 65-quotemarks.length() && space != lastSpace) { // wrap quote << quotemarks + line->mid(lastSpace, space - lastSpace); lastSpace = space; length = pos - space; } ++pos; } quote << quotemarks + line->mid(lastSpace); } return quote; }
QStringList::iterator CLArgsPrivate::hasOutputToken(QString& indexStr) { QString outputLong( QString::fromUtf8("--output") ); QString outputShort( QString::fromUtf8("-o") ); for (QStringList::iterator it = args.begin(); it != args.end(); ++it) { int indexOf = it->indexOf(outputLong); if (indexOf != -1) { indexOf += outputLong.size(); if ( indexOf < it->size() ) { indexStr = it->mid(indexOf); bool ok; indexStr.toInt(&ok); if (!ok) { error = 1; std::cout << QObject::tr("Wrong formating for the -o option").toStdString() << std::endl; return args.end(); } } else { indexStr = QChar::fromLatin1('1'); } return it; } else { indexOf = it->indexOf(outputShort); if (indexOf != -1) { if ( (it->size() > 2) && !it->at(2).isDigit() ) { //This is probably the --onload option return args.end(); } indexOf += outputShort.size(); if ( indexOf < it->size() ) { indexStr = it->mid(indexOf); bool ok; indexStr.toInt(&ok); if (!ok) { error = 1; std::cout << QObject::tr("Wrong formating for the -o option").toStdString() << std::endl; return args.end(); } } else { indexStr = QChar::fromLatin1('1'); } return it; } } } return args.end(); } // CLArgsPrivate::hasOutputToken
QString MessageView::quoteText() const { if (const AbstractPartWidget *w = dynamic_cast<const AbstractPartWidget *>(viewer)) { QStringList quote; QStringList lines = w->quoteMe().split('\n'); for (QStringList::iterator line = lines.begin(); line != lines.end(); ++line) { if (Composer::Util::signatureSeparator().exactMatch(*line)) { // This is the signature separator, we should not include anything below that in the quote break; } // rewrap - we need to keep the quotes at < 79 chars, yet the grow with every level if (line->length() < 79-2) { // this line is short enough, prepend quote mark and continue if (line->isEmpty() || line->at(0) == '>') line->prepend(">"); else line->prepend("> "); quote << *line; continue; } // long line -> needs to be wrapped // 1st, detect the quote depth and eventually stript the quotes from the line int quoteLevel = 0; int contentStart = 0; if (line->at(0) == '>') { quoteLevel = 1; while (quoteLevel < line->length() && line->at(quoteLevel) == '>') ++quoteLevel; contentStart = quoteLevel; if (quoteLevel < line->length() && line->at(quoteLevel) == ' ') ++contentStart; } // 2nd, build a qute string QString quotemarks; for (int i = 0; i < quoteLevel; ++i) quotemarks += ">"; quotemarks += "> "; // 3rd, wrap the line, prepend the quotemarks to each line and add it to the quote text int space(contentStart), lastSpace(contentStart), pos(contentStart), length(0); while (pos < line->length()) { if (line->at(pos) == ' ') space = pos+1; ++length; if (length > 65-quotemarks.length() && space != lastSpace) { // wrap quote << quotemarks + line->mid(lastSpace, space - lastSpace); lastSpace = space; length = pos - space; } ++pos; } quote << quotemarks + line->mid(lastSpace); } const Imap::Message::Envelope &e = message.data(Imap::Mailbox::RoleMessageEnvelope).value<Imap::Message::Envelope>(); QString sender; if (!e.from.isEmpty()) sender = e.from[0].prettyName(Imap::Message::MailAddress::FORMAT_JUST_NAME); if (e.from.isEmpty()) sender = tr("you"); // One extra newline at the end of the quoted text to separate the response quote << QString(); return tr("On %1, %2 wrote:\n").arg(e.date.toLocalTime().toString(Qt::SystemLocaleLongDate)).arg(sender) + quote.join("\n"); } return QString(); }
void ExportGroupTemplateDialog::onOkClicked() { QString dirPath = _imp->fileEdit->text(); if ( !dirPath.isEmpty() && ( dirPath[dirPath.size() - 1] == QLatin1Char('/') ) ) { dirPath.remove(dirPath.size() - 1, 1); } QDir d(dirPath); if ( !d.exists() ) { Dialogs::errorDialog( tr("Error").toStdString(), tr("You must specify a directory to save the script").toStdString() ); return; } QString pluginLabel = _imp->labelEdit->text(); if ( pluginLabel.isEmpty() ) { Dialogs::errorDialog( tr("Error").toStdString(), tr("You must specify a label to name the script").toStdString() ); return; } else { pluginLabel = QString::fromUtf8( NATRON_PYTHON_NAMESPACE::makeNameScriptFriendly( pluginLabel.toStdString() ).c_str() ); } QString pluginID = _imp->idEdit->text(); if ( pluginID.isEmpty() ) { Dialogs::errorDialog( tr("Error").toStdString(), tr("You must specify a unique ID to identify the script").toStdString() ); return; } QString iconPath = _imp->iconPath->text(); QString grouping = _imp->groupingEdit->text(); QString description = _imp->descriptionEdit->getText(); QString filePath = d.absolutePath() + QLatin1Char('/') + pluginLabel + QString::fromUtf8(".py"); QStringList filters; filters.push_back( QString( pluginLabel + QString::fromUtf8(".py") ) ); if ( !d.entryList(filters, QDir::Files | QDir::NoDotAndDotDot).isEmpty() ) { StandardButtonEnum rep = Dialogs::questionDialog(tr("Existing plug-in").toStdString(), tr("A group plug-in with the same name already exists " "would you like to " "override it?").toStdString(), false); if (rep == eStandardButtonNo) { return; } } bool foundInPath = false; QStringList groupSearchPath = appPTR->getAllNonOFXPluginsPaths(); for (QStringList::iterator it = groupSearchPath.begin(); it != groupSearchPath.end(); ++it) { if ( !it->isEmpty() && ( it->at(it->size() - 1) == QLatin1Char('/') ) ) { it->remove(it->size() - 1, 1); } if (*it == dirPath) { foundInPath = true; } } if (!foundInPath) { QString message = dirPath + tr(" does not exist in the group plug-in search path, would you like to add it?"); StandardButtonEnum rep = Dialogs::questionDialog(tr("Plug-in path").toStdString(), message.toStdString(), false); if (rep == eStandardButtonYes) { appPTR->getCurrentSettings()->appendPythonGroupsPath( dirPath.toStdString() ); } } QFile file(filePath); if ( !file.open(QIODevice::ReadWrite | QIODevice::Truncate) ) { Dialogs::errorDialog( tr("Error").toStdString(), QString(tr("Cannot open ") + filePath).toStdString() ); return; } QTextStream ts(&file); QString content; _imp->group->exportGroupToPython(pluginID, pluginLabel, description, iconPath, grouping, content); ts << content; accept(); } // ExportGroupTemplateDialog::onOkClicked