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
QValidator::State ListValidator::validate(QString &text, int &pos) const { Q_ASSERT(inner); QStringList strings = text.split(QLatin1Char(',')); int unusedPos; QValidator::State state = Acceptable; for (QStringList::iterator i = strings.begin(); i != strings.end(); ++i) { QString string = i->trimmed(); const int position = i->indexOf(string); const int size = string.size(); const QValidator::State current = inner->validate(string, unusedPos); i->replace(position, size, string); if (current == Invalid) { state = Invalid; break; } if (current == Intermediate) { if (state == Intermediate) { state = Invalid; break; } state = Intermediate; } } text = strings.join(QLatin1Char(',')); return state; }
bool synaxErrorJudger::isAlldataTypeValid(QStringList &data, vector<pair<int, size_t>> &dataTypeInfo) { QStringList::iterator it; for (it = data.begin(); it != data.end(); ++it) { *it = it->trimmed(); if (*it == "") { return false; } bool ok; if (it->indexOf('\'') != -1) { //引号'应该是字符或字符串 it->remove(0, 1).remove(QRegExp("'$")); size_t len = it->size(); if (len < 1 || len > 255) { return false; } else if (len == 1) { dataTypeInfo.push_back(pair<int, size_t>(_CHAR, sizeof(char))); } else { dataTypeInfo.push_back(pair<int, size_t>(_STRING, len * sizeof(char))); } } else if (it->indexOf('.') != -1) { //有小数点且不是字符串,应该是float it->toFloat(&ok); if (!ok) { return false; } else { dataTypeInfo.push_back(pair<int, size_t>(_FLOAT, sizeof(float))); } } else { //剩下的应该是int类型 it->toInt(&ok); if (!ok) { return false; } else { dataTypeInfo.push_back(pair<int, size_t>(_INT, sizeof(int))); } } } return true; }
std::vector<size_t> LineEditDialog::getSelectedIndeces(QStringList list) { std::vector<size_t> indexList; for (QStringList::iterator it = list.begin(); it != list.end(); ++it) { QString s = it->mid(5, it->indexOf(" ") - 5); indexList.push_back(atoi(s.toStdString().c_str())); } return indexList; }
void synaxErrorJudger::getAttributeInfo(vector<string> &attributeNameList, vector<pair<int, size_t>> &dataTypeInfo, set<string> &uniqueAttribute) { int begin = sqlExp.indexOf('(') + 1; int end = sqlExp.lastIndexOf(',') - 1; QStringList attrList = sqlExp.mid(begin, end - begin + 1).split(','); QStringList::iterator it; for (it = attrList.begin(); it != attrList.end(); ++it) { if (it->trimmed() == "") { throw QString("Synax Error: Create statement's format is incorrect."); } string attributeName = it->section(' ', 0, 0, QString::SectionSkipEmpty).trimmed().toStdString(); attributeNameList.push_back(attributeName); if (it->indexOf("unique") != -1) { uniqueAttribute.insert(attributeName); it->remove(it->indexOf("unique"), sizeof("unique") - 1); } it->remove(it->indexOf(attributeName.c_str()), attributeName.size()); *it = it->trimmed(); if (*it == "int") { dataTypeInfo.push_back(pair<int, size_t>(_INT, sizeof(int))); } else if (*it == "char") { dataTypeInfo.push_back(pair<int, size_t>(_CHAR, sizeof(char))); } else if (*it == "float") { dataTypeInfo.push_back(pair<int, size_t>(_FLOAT, sizeof(float))); } else { //一定是char(n,因为通过了前面正则表达式的匹配 it->remove("char").remove('(').remove(')'); //去除括号 int length = it->trimmed().toInt(); if (length < 1 || length > 255) { throw QString("Synax Error: The length of string is overflow."); } dataTypeInfo.push_back(pair<int, size_t>(_STRING, sizeof(char) * length)); } } }
void GoogleSession::authResult(bool errorFlag) { if (errorFlag) { qDebug() << "Auth http error" << http->errorString(); setState(Invalid); emit error(AuthenticationFailed, http->errorString()); } else { QString resp = http->readAll(); //qDebug() << resp; QStringList keys = resp.split("\n"); QHash<QString, QString> keyMap; for (QStringList::iterator it = keys.begin(); it!=keys.end(); it++) { int sep = it->indexOf('='); QString key = it->left(sep); QString value = it->right(it->length()-sep-1); keyMap[key] = value; //qDebug() << key << value; } if (http->lastResponse().statusCode()==200) // OK { if (keyMap.contains("Auth")) { authKey = keyMap["Auth"]; qDebug() << "Authenticated" << authKey; setState(Authenticated); emit authenticated(); } else { setState(Invalid); emit error(AuthenticationFailed, "No Auth key"); } } else { qDebug() << "ERROR Response header:" << http->lastResponse().statusCode() << http->lastResponse().reasonPhrase(); qDebug() << "ERROR reason" << keyMap["Error"]; setState(Invalid); emit error(AuthenticationFailed, keyMap["Error"]); } } }
void Dialog::initCdrConf() { LOG_FUNC(Dialog::initCdrConf); QDir dir("./"); /*C++11 语法 for(auto fileName : dir.entryList()) { if(fileName.indexOf(".xml") != -1) this->lsComboValuesSite.append(fileName); }*/ QStringList list = dir.entryList(); for(QStringList::iterator iter = list.begin(); iter != list.end(); iter ++) { if(iter->indexOf(".xml") != -1) this->lsComboValuesSite.append(*iter); } }
bool MercurialClient::parentRevisionsSync(const QString &workingDirectory, const QString &file /* = QString() */, const QString &revision, QStringList *parents) { parents->clear(); QStringList args; args << QLatin1String("parents") << QLatin1String("-r") <<revision; if (!file.isEmpty()) args << file; QByteArray outputData; if (!vcsFullySynchronousExec(workingDirectory, args, &outputData)) return false; QString output = QString::fromLocal8Bit(outputData); output.remove(QLatin1Char('\r')); /* Looks like: \code changeset: 0:031a48610fba user: ... \endcode */ // Obtain first line and split by blank-delimited tokens VCSBase::VCSBaseOutputWindow *outputWindow = VCSBase::VCSBaseOutputWindow::instance(); const QStringList lines = output.split(QLatin1Char('\n')); if (lines.size() < 1) { outputWindow->appendSilently(msgParentRevisionFailed(workingDirectory, revision, msgParseParentsOutputFailed(output))); return false; } QStringList changeSets = lines.front().simplified().split(QLatin1Char(' ')); if (changeSets.size() < 2) { outputWindow->appendSilently(msgParentRevisionFailed(workingDirectory, revision, msgParseParentsOutputFailed(output))); return false; } // Remove revision numbers const QChar colon = QLatin1Char(':'); const QStringList::iterator end = changeSets.end(); QStringList::iterator it = changeSets.begin(); for (++it; it != end; ++it) { const int colonIndex = it->indexOf(colon); if (colonIndex != -1) parents->push_back(it->mid(colonIndex + 1)); } return true; }
QStringList MercurialClient::parentRevisionsSync(const QString &workingDirectory, const QString &file /* = QString() */, const QString &revision) { QStringList parents; QStringList args; args << QLatin1String("parents") << QLatin1String("-r") <<revision; if (!file.isEmpty()) args << file; const SynchronousProcessResponse resp = vcsFullySynchronousExec(workingDirectory, args); if (resp.result != SynchronousProcessResponse::Finished) return QStringList(); /* Looks like: \code changeset: 0:031a48610fba user: ... \endcode */ // Obtain first line and split by blank-delimited tokens const QStringList lines = resp.stdOut().split(QLatin1Char('\n')); if (lines.size() < 1) { VcsOutputWindow::appendSilently(msgParentRevisionFailed(workingDirectory, revision, msgParseParentsOutputFailed(resp.stdOut()))); return QStringList(); } QStringList changeSets = lines.front().simplified().split(QLatin1Char(' ')); if (changeSets.size() < 2) { VcsOutputWindow::appendSilently(msgParentRevisionFailed(workingDirectory, revision, msgParseParentsOutputFailed(resp.stdOut()))); return QStringList(); } // Remove revision numbers const QChar colon = QLatin1Char(':'); const QStringList::iterator end = changeSets.end(); QStringList::iterator it = changeSets.begin(); for (++it; it != end; ++it) { const int colonIndex = it->indexOf(colon); if (colonIndex != -1) parents.push_back(it->mid(colonIndex + 1)); } return parents; }
Calamares::JobResult CreateUserJob::exec() { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QDir destDir( gs->value( "rootMountPoint" ).toString() ); if ( gs->contains( "sudoersGroup" ) && !gs->value( "sudoersGroup" ).toString().isEmpty() ) { QFileInfo sudoersFi( destDir.absoluteFilePath( "etc/sudoers.d/10-installer" ) ); if ( !sudoersFi.absoluteDir().exists() ) return Calamares::JobResult::error( tr( "Sudoers dir is not writable." ) ); QFile sudoersFile( sudoersFi.absoluteFilePath() ); if (!sudoersFile.open( QIODevice::WriteOnly | QIODevice::Text ) ) return Calamares::JobResult::error( tr( "Cannot create sudoers file for writing." ) ); QString sudoersGroup = gs->value( "sudoersGroup" ).toString(); QTextStream sudoersOut( &sudoersFile ); sudoersOut << QString( "%%1 ALL=(ALL) ALL\n" ).arg( sudoersGroup ); if ( QProcess::execute( "chmod", { "440", sudoersFi.absoluteFilePath() } ) ) return Calamares::JobResult::error( tr( "Cannot chmod sudoers file." ) ); } QFileInfo groupsFi( destDir.absoluteFilePath( "etc/group" ) ); QFile groupsFile( groupsFi.absoluteFilePath() ); if ( !groupsFile.open( QIODevice::ReadOnly | QIODevice::Text ) ) return Calamares::JobResult::error( tr( "Cannot open groups file for reading." ) ); QString groupsData = QString::fromLocal8Bit( groupsFile.readAll() ); QStringList groupsLines = groupsData.split( '\n' ); for ( QStringList::iterator it = groupsLines.begin(); it != groupsLines.end(); ++it ) { int indexOfFirstToDrop = it->indexOf( ':' ); it->truncate( indexOfFirstToDrop ); } foreach ( const QString& group, m_defaultGroups ) if ( !groupsLines.contains( group ) ) CalamaresUtils::System::instance()-> targetEnvCall( { "groupadd", group } ); QString defaultGroups = m_defaultGroups.join( ',' ); if ( m_autologin ) { QString autologinGroup; if ( gs->contains( "autologinGroup" ) && !gs->value( "autologinGroup" ).toString().isEmpty() ) autologinGroup = gs->value( "autologinGroup" ).toString(); else autologinGroup = QStringLiteral( "autologin" ); CalamaresUtils::System::instance()->targetEnvCall( { "groupadd", autologinGroup } ); defaultGroups.append( QString( ",%1" ).arg( autologinGroup ) ); } int ec = CalamaresUtils::System::instance()-> targetEnvCall( { "useradd", "-m", "-s", "/bin/bash", "-U", "-G", defaultGroups, m_userName } ); if ( ec ) return Calamares::JobResult::error( tr( "Cannot create user %1." ) .arg( m_userName ), tr( "useradd terminated with error code %1." ) .arg( ec ) ); ec = CalamaresUtils::System::instance()->targetEnvCall( { "chfn", "-f", m_fullName, m_userName } ); if ( ec ) return Calamares::JobResult::error( tr( "Cannot set full name for user %1." ) .arg( m_userName ), tr( "chfn terminated with error code %1." ) .arg( ec ) ); ec = CalamaresUtils::System::instance()-> targetEnvCall( { "chown", "-R", QString( "%1:%2" ).arg( m_userName ) .arg( m_userName ), QString( "/home/%1" ).arg( m_userName ) } ); if ( ec ) return Calamares::JobResult::error( tr( "Cannot set home directory ownership for user %1." ) .arg( m_userName ), tr( "chown terminated with error code %1." ) .arg( ec ) ); return Calamares::JobResult::ok(); }
void synaxErrorJudger::generateCondition() { int begin = sqlExp.indexOf("where") + 5; int end = sqlExp.indexOf(QRegExp(";$")) - 1; QStringList conditions = sqlExp.mid(begin, end - begin + 1).split("and"); QStringList::iterator it; pair<int, size_t> dataType; int logicType; string rightSide, leftSide; for (it = conditions.begin(); it != conditions.end(); ++it) { *it = it->trimmed(); if (*it == "") { throw QString("Synax Error: Conditions' format is incorrect."); } int begin = 0; int end = it->indexOf(QRegExp("[=><]"))-1; rightSide = it->mid(begin, end - begin + 1).trimmed().toStdString(); begin = end + 1; end = it->indexOf(QRegExp("[=><]"), begin + 1); if (end - begin > 1 || end == -1) { //如果下一个"=",">","<"号出现在较远处 end = begin; //说明这个逻辑关系是"=",">","<"而非">=", "<=", "<>" } logicType = condition::getLogicTypeFromStr(it->mid(begin, end - begin + 1).toStdString()); if (logicType == _ERROR) { throw QString("Synax Error: The logic arithemtic is invalid."); } bool ok; *it = it->mid(end + 1).trimmed(); if (it->indexOf(QRegExp("^'")) != -1) { //引号'应该是字符或字符串 it->remove(0, 1).remove(QRegExp("'$")); size_t len = it->size(); pair<int, size_t> dType; Api::cManager.getAttributeDataType(*tblName, rightSide, dType); if (len < 1 || len > 255 || len > dType.second) { throw QString("Synax Error: The length of string is overflow."); } else if (len == 1) { dataType = pair<int, size_t>(_CHAR, sizeof(char)); } else { dataType = pair<int, size_t>(_STRING, dType.second * sizeof(char)); } } else if (it->indexOf('.') != -1) { //有小数点且不是字符串,应该是float it->toFloat(&ok); if (!ok) { ; } else { dataType = pair<int, size_t>(_FLOAT, sizeof(float)); } } else { //剩下的应该是int类型 it->toInt(&ok); if (!ok) { ; } else { dataType = pair<int, size_t>(_INT, sizeof(int)); } } leftSide = it->toStdString(); if (cond == 0) { cond = new vector<condition>; } cond->push_back(condition(rightSide, logicType, dataType, leftSide)); } }
ConversionStatus GettextExportPlugin::save(QIODevice* device, const GettextStorage* catalog) { QTextStream stream(device); //if ( m_wrapWidth == -1 ) m_wrapWidth=80; #if 0 //legacy if (useOldEncoding && catalog->fileCodec()) { stream.setCodec(catalog->fileCodec()); } else { /* switch(_saveSettings.encoding) { case ProjectSettingsBase::UTF8: stream.setCodec(QTextCodec::codecForName("utf-8")); break; case ProjectSettingsBase::UTF16: stream.setCodec(QTextCodec::codecForName("utf-16")); break; default: stream.setCodec(QTextCodec::codecForLocale()); break; }*/ #endif //NOTE i had a look and even ja team uses utf-8 now stream.setCodec(QTextCodec::codecForName("utf-8")); // only save header if it is not empty const QString& headerComment( catalog->m_header.comment() ); // ### why is this useful to have a header with an empty msgstr? if ( !headerComment.isEmpty() || !catalog->m_header.msgstrPlural().isEmpty() ) { // write header writeComment( stream, headerComment ); const QString& headerMsgid (catalog->m_header.msgid()); // Gettext PO files should have an empty msgid as header if ( !headerMsgid.isEmpty() ) { // ### perhaps it is grave enough for a user message kWarning() << "Non-empty msgid for the header, assuming empty msgid!" << endl << headerMsgid << "---"; } // ### FIXME: if it is the header, then the msgid should be empty! (Even if KBabel has made something out of a non-header first entry!) stream << "msgid \"\"\n"; writeKeyword( stream, "msgstr", catalog->m_header.msgstr(), false ); } const QVector<CatalogItem>& catalogEntries=catalog->m_entries; int limit=catalog->numberOfEntries(); QStringList list; for (int counter = 0; counter < limit; counter++) { stream << '\n'; // write entry writeComment( stream, catalogEntries.at(counter).comment() ); const QString& msgctxt = catalogEntries.at(counter).msgctxt(); if (! msgctxt.isEmpty() ) writeKeyword( stream, "msgctxt", msgctxt ); writeKeyword( stream, "msgid", catalogEntries.at(counter).msgid(), true, catalogEntries.at(counter).prependEmptyForMsgid() ); if ( catalogEntries.at(counter).isPlural() ) writeKeyword( stream, "msgid_plural", catalogEntries.at(counter).msgid(1), true, catalogEntries.at(counter).prependEmptyForMsgid() ); if (!catalogEntries.at(counter).isPlural()) writeKeyword( stream, "msgstr", catalogEntries.at(counter).msgstr(), true, catalogEntries.at(counter).prependEmptyForMsgstr() ); else { kDebug() << "Saving gettext plural form"; //TODO check len of the actual stringlist?? const int forms = catalog->numberOfPluralForms(); for ( int i = 0; i < forms; ++i ) { QString keyword = "msgstr[" % QString::number( i ) % ']'; writeKeyword( stream, keyword, catalogEntries.at(counter).msgstr(i), true, catalogEntries.at(counter).prependEmptyForMsgstr() ); } } } #if 0 //legacy if ( _saveSettings.saveObsolete ) #endif { QList<QString>::const_iterator oit; const QStringList& _obsolete=catalog->m_catalogExtraData; oit=_obsolete.constBegin(); if (oit!=_obsolete.constEnd()) { stream << "\n" << (*oit); while((++oit)!=_obsolete.constEnd()) stream << "\n\n" << (*oit); } } int i=m_trailingNewLines+1; while (--i>=0) stream << '\n'; return OK; } void GettextExportPlugin::writeComment( QTextStream& stream, const QString& comment ) const { if( !comment.isEmpty() ) { // We must check that each comment line really starts with a #, to avoid syntax errors int pos = 0; for(;;) { const int newpos = comment.indexOf( '\n', pos, Qt::CaseInsensitive ); if ( newpos == pos ) { ++pos; stream << '\n'; continue; } const QString& span ((newpos==-1 ) ? comment.mid(pos) : comment.mid(pos, newpos-pos) ); const int len = span.length(); QString spaces; // Stored leading spaces for ( int i = 0 ; i < len ; ++i ) { const QChar& ch = span[ i ]; if ( ch == '#' ) { stream << spaces << span.mid( i ); break; } else if ( ch == ' ' || ch == '\t' ) { // We have a leading white space character, so store it temporary spaces += ch; } else { // Not leading white space and not a # character. so consider that the # character was missing at first position. stream << "# " << spaces << span.mid( i ); break; } } stream << '\n'; if ( newpos == -1 ) break; else pos = newpos + 1; } } } void GettextExportPlugin::writeKeyword( QTextStream& stream, const QString& keyword, QString text, bool containsHtml, bool startedWithEmptyLine ) const { if ( text.isEmpty() ) { // Whatever the wrapping mode, an empty line is an empty line stream << keyword << " \"\"\n"; return; } //TODO remove this for KDE 4.4 //NOTE not? int pos=0; while ((pos=text.indexOf("\\\"",pos))!=-1) { if (pos==0 || text.at(pos-1)!='\\') text.replace(pos,2,'"'); else pos++; } text.replace('"',"\\\""); #if 0 if ( m_wrapWidth == -1 ) { // Traditional KBabel wrapping QStringList list = text.split( '\n', QString::SkipEmptyParts ); if ( text.startsWith( '\n' ) ) list.prepend( QString() ); if(list.isEmpty()) list.append( QString() ); if( list.count() > 1 ) list.prepend( QString() ); stream << keyword << ' '; QStringList::const_iterator it; for( it = list.constBegin(); it != list.constEnd(); ++it ) stream << '\"' << (*it) << "\"\n"; return; } #endif if ( m_wrapWidth == 0 ) // Unknown special wrapping, so assume "no wrap" instead { // No wrapping (like Gettext's --no.wrap or -w0 ) // we need to remove the \n characters, as they are extra characters QString realText( text ); realText.remove( '\n' ); stream << keyword << " \"" << realText << "\"\n"; return; } else if ( m_wrapWidth < 0 ) { // No change in wrapping QStringList list = text.split( '\n'); if (list.count()>1 || startedWithEmptyLine /* || keyword.length()+3+text.length()>=80*/) list.prepend(QString()); stream << keyword << " "; QStringList::const_iterator it; for( it = list.constBegin(); it != list.constEnd(); ++it ) stream << "\"" << (*it) << "\"\n"; return; } // lazy wrapping QStringList list = text.split( '\n', QString::SkipEmptyParts ); if ( text.startsWith( '\n' ) ) list.prepend( QString() ); if(list.isEmpty()) list.append( QString() ); static QRegExp breakStopReForHtml("[ >.%]", Qt::CaseSensitive, QRegExp::Wildcard); QRegExp breakStopRe=containsHtml?breakStopReForHtml:QRegExp("[ .%]", Qt::CaseSensitive, QRegExp::Wildcard); int max=m_wrapWidth-2; bool prependedEmptyLine=false; QStringList::iterator itm; for( itm = list.begin(); itm != list.end(); ++itm ) { if (list.count()==1 && keyword.length()+1+itm->length()>=max) { prependedEmptyLine=true; itm=list.insert(itm,QString()); } if (itm->length()>max) { int pos = itm->lastIndexOf(breakStopRe,max-1); if (pos>0) { int pos2 = itm->indexOf('<',pos); if (pos2>0&&pos2<max-1) pos=itm->indexOf('<',pos); ++pos; } else pos=max; //itm=list.insert(itm,itm->left(pos)); QString t=*itm; itm=list.insert(itm,t); itm++; if (itm != list.end()) { (*itm)=itm->remove(0,pos); itm--; if (itm != list.end()) itm->truncate(pos); } } } if( !prependedEmptyLine && list.count() > 1 ) list.prepend( QString() ); stream << keyword << " "; QStringList::const_iterator it; for( it = list.constBegin(); it != list.constEnd(); ++it ) stream << "\"" << (*it) << "\"\n"; }