qstringx.h

来自「Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 」· C头文件 代码 · 共 107 行

H
107
字号
// Copyright (C) 2004 Shintaro Matsuoka <shin@shoegazed.org>// Copyright (C) 2006 Martin Aumueller <aumuell@reserv.at>// See COPYING file for licensing information#ifndef AMAROK_QSTRINGX_H#define AMAROK_QSTRINGX_H#include <qglobal.h>#include <qregexp.h>#include <qstring.h>#include <qstringlist.h>#include <qmap.h>namespace Amarok{class QStringx : public QString{public:    QStringx() {};    QStringx( QChar ch ) : QString( ch ) {};    QStringx( const QString& s ) : QString( s ) {};    QStringx( const QByteArray& ba ) : QString( ba ) {};    QStringx( const QChar* unicode, uint length ) : QString( unicode, length ) {};    QStringx( const char* str ) : QString( str ) {};    virtual ~QStringx() {};    // the numbers following % obviously are not taken into account    QString args( const QStringList& args ) const    {        const QStringList text = QStringList::split( QRegExp( "%\\d+" ), *this, true );        QValueListConstIterator<QString> itrText = text.begin();        QValueListConstIterator<QString> itrArgs = args.begin();        QString merged = (*itrText);        ++itrText;        while ( itrText != text.end() && itrArgs != args.end() )        {            merged += (*itrArgs) + (*itrText);            ++itrText;            ++itrArgs;        }        Q_ASSERT( itrText == text.end() && itrArgs == args.end() );        return merged;    }    // %something gets replaced by the value corresponding to key "something" in args    QString namedArgs( const QMap<QString, QString> args, bool opt=false ) const    {        QRegExp rxArg( "%[a-zA-Z0-9]+" );        QString result;        int start = 0;        for( int pos = rxArg.search( *this );                pos != -1;                pos = rxArg.search( *this, start ) )        {            int len = rxArg.matchedLength();            QString p = rxArg.capturedTexts()[0].mid(1, len-1);            result += mid( start, pos-start );            if( args[p] != QString::null )                result += args[p];            else if( opt )                return QString();            start = pos + len;        }        result += mid( start );        return result;    }    // %something gets replaced by the value corresponding to key "something" in args,    // however, if key "something" is not available,    // then replace everything within surrounding { } by an empty string    QString namedOptArgs( const QMap<QString, QString> args ) const    {        QRegExp rxOptArg( "\\{.*%[a-zA-Z0-9_]+.*\\}" );        rxOptArg.setMinimal( true );        QString result;        int start = 0;        for( int pos = rxOptArg.search( *this );                pos != -1;                pos = rxOptArg.search( *this, start ) )        {            int len = rxOptArg.matchedLength();            QStringx opt = rxOptArg.capturedTexts()[0].mid(1, len-2);            result += QStringx(mid( start, pos-start )).namedArgs( args );            result += opt.namedArgs( args, true );            start = pos + len;        }        result += QStringx( mid( start ) ).namedArgs( args );        return result;    }};} // namespace Amarok#endif // AMAROK_QSTRINGX_H

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?