⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 proparserutils.h

📁 QT 开发环境里面一个很重要的文件
💻 H
字号:
/******************************************************************************** Copyright (C) 2006-2006 Trolltech ASA. All rights reserved.**** This file is part of the Qt Linguist of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#ifndef PROPARSERUTILS_H#define PROPARSERUTILS_H#include <QtCore/QLibraryInfo>// Pre- and postcondition macros#define PRE(cond) do {if(!(cond))qt_assert(#cond,__FILE__,__LINE__);} while (0)#define POST(cond) do {if(!(cond))qt_assert(#cond,__FILE__,__LINE__);} while (0)// This struct is from qmake, but we are not using everything.struct Option{    //simply global convenience    //static QString libtool_ext;    //static QString pkgcfg_ext;    //static QString prf_ext;    //static QString prl_ext;    //static QString ui_ext;    //static QStringList h_ext;    //static QStringList cpp_ext;    //static QString h_moc_ext;    //static QString cpp_moc_ext;    //static QString obj_ext;    //static QString lex_ext;    //static QString yacc_ext;    //static QString h_moc_mod;    //static QString cpp_moc_mod;    //static QString lex_mod;    //static QString yacc_mod;    static QString dir_sep;    static QString dirlist_sep;    static QString qmakespec;        enum TARG_MODE { TARG_UNIX_MODE, TARG_WIN_MODE, TARG_MACX_MODE, TARG_MAC9_MODE, TARG_QNX6_MODE };    static TARG_MODE target_mode;    //static QString pro_ext;    //static QString res_ext;    //static char field_sep;    static void init()    {#ifdef Q_OS_WIN        Option::dirlist_sep = ';';        Option::dir_sep = QLatin1Char('\\');#else        Option::dirlist_sep = ':';        Option::dir_sep = QLatin1Char('/');#endif        Option::qmakespec = qgetenv("QMAKESPEC");    }};#if defined(Q_OS_WIN32)Option::TARG_MODE Option::target_mode = Option::TARG_WIN_MODE;#elif defined(Q_OS_MAC)Option::TARG_MODE Option::target_mode = Option::TARG_MACX_MODE;#elif defined(Q_OS_QNX6)Option::TARG_MODE Option::target_mode = Option::TARG_QNX6_MODE;#elseOption::TARG_MODE Option::target_mode = Option::TARG_UNIX_MODE;#endifQString Option::qmakespec;QString Option::dirlist_sep;QString Option::dir_sep;static void unquote(QString *string){    PRE(string);    if ( (string->startsWith(QLatin1Char('\"')) && string->endsWith(QLatin1Char('\"')))        || (string->startsWith(QLatin1Char('\'')) && string->endsWith(QLatin1Char('\''))) )    {        string->remove(0,1);        string->remove(string->length() - 1,1);    }}static void insertUnique(QMap<QByteArray, QStringList> *map, const QByteArray &key, const QString &value, bool unique = true){    QStringList &sl = (*map)[key];    if (!unique || (unique && !sl.contains(value))) {        sl.append(value);    }}inline QStringList splitPathList(const QString paths) { return paths.split(Option::dirlist_sep); }static QStringList split_arg_list(QString params){    int quote = 0;    QStringList args;    const ushort LPAREN = '(';    const ushort RPAREN = ')';    const ushort SINGLEQUOTE = '\'';    const ushort DOUBLEQUOTE = '"';    const ushort COMMA = ',';    const ushort SPACE = ' ';    //const ushort TAB = '\t';    ushort unicode;    const QChar *params_data = params.data();    const int params_len = params.length();    int last = 0;    while(last < params_len && ((params_data+last)->unicode() == SPACE                                /*|| (params_data+last)->unicode() == TAB*/))        ++last;    for(int x = last, parens = 0; x <= params_len; x++) {        unicode = (params_data+x)->unicode();        if(x == params_len) {            while(x && (params_data+(x-1))->unicode() == SPACE)                --x;            QString mid(params_data+last, x-last);            if(quote) {                if(mid[0] == quote && mid[(int)mid.length()-1] == quote)                    mid = mid.mid(1, mid.length()-2);                quote = 0;            }            args << mid;            break;        }        if(unicode == LPAREN) {            --parens;        } else if(unicode == RPAREN) {            ++parens;        } else if(quote && unicode == quote) {            quote = 0;        } else if(!quote && (unicode == SINGLEQUOTE || unicode == DOUBLEQUOTE)) {            quote = unicode;        } else if(!parens && !quote && unicode == COMMA) {            QString mid = params.mid(last, x - last).trimmed();            args << mid;            last = x+1;            while(last < params_len && ((params_data+last)->unicode() == SPACE                                        /*|| (params_data+last)->unicode() == TAB*/))                ++last;        }    }    for(int i = 0; i < args.count(); i++)        unquote(&args[i]);    return args;}static QStringList qmake_mkspec_paths(){    QStringList ret;    const QString concat = QDir::separator() + QString("mkspecs");    QByteArray qmakepath = qgetenv("QMAKEPATH");    if (!qmakepath.isEmpty()) {        const QStringList lst = splitPathList(QString::fromLocal8Bit(qmakepath));        for(QStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it)            ret << ((*it) + concat);    }    ret << QLibraryInfo::location(QLibraryInfo::DataPath) + concat;    return ret;}static QString getPropertyValue(const QString &v){    if(v == "QT_INSTALL_PREFIX")        return QLibraryInfo::location(QLibraryInfo::PrefixPath);    else if(v == "QT_INSTALL_DATA")        return QLibraryInfo::location(QLibraryInfo::DataPath);    else if(v == "QT_INSTALL_DOCS")        return QLibraryInfo::location(QLibraryInfo::DocumentationPath);    else if(v == "QT_INSTALL_HEADERS")        return QLibraryInfo::location(QLibraryInfo::HeadersPath);    else if(v == "QT_INSTALL_LIBS")        return QLibraryInfo::location(QLibraryInfo::LibrariesPath);    else if(v == "QT_INSTALL_BINS")        return QLibraryInfo::location(QLibraryInfo::BinariesPath);    else if(v == "QT_INSTALL_PLUGINS")        return QLibraryInfo::location(QLibraryInfo::PluginsPath);    else if(v == "QT_INSTALL_TRANSLATIONS")        return QLibraryInfo::location(QLibraryInfo::TranslationsPath);    else if(v == "QT_INSTALL_CONFIGURATION")        return QLibraryInfo::location(QLibraryInfo::SettingsPath);    else if(v == "QT_INSTALL_EXAMPLES")        return QLibraryInfo::location(QLibraryInfo::ExamplesPath);    else if(v == "QT_INSTALL_DEMOS")        return QLibraryInfo::location(QLibraryInfo::DemosPath);    else if(v == "QMAKE_MKSPECS")        return qmake_mkspec_paths().join(Option::dirlist_sep);    else if(v == "QMAKE_VERSION")        return QLatin1String("1.0");        //###        //return qmake_version();#ifdef QT_VERSION_STR    else if(v == "QT_VERSION")        return QT_VERSION_STR;#endif    return QLatin1String("UNKNOWN");        //###}#endif // PROPARSERUTILS_H

⌨️ 快捷键说明

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