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

📄 proparser.cpp

📁 QT 开发环境里面一个很重要的文件
💻 CPP
字号:
/******************************************************************************** Copyright (C) 1992-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.******************************************************************************/#include "proparser.h"#include "profileevaluator.h"#include <stdio.h>#include <proreader.h>#include <QtCore/QFileInfo>#include <QtCore/QDir>#include <QtCore/QStringList>// assumes that the list is sorted (or more correctly, that all equal elements are grouped together).void removeDuplicates(QStringList *strings, bool alreadySorted /*= true*/){    if (!alreadySorted) {        strings->sort();    }    QString prev;    QStringList::iterator it = strings->begin();    while (it != strings->end()) {        if (*it == prev) {            it = strings->erase(it);        }else{            prev = *it;            ++it;        }    }}bool evaluateProFile(const QString &fileName, bool verbose,QMap<QByteArray, QStringList> *varMap){    bool ok = true;    QStringList sourceFiles;    QString codecForTr;    QString codecForSource;    QStringList tsFileNames;    ProReader pr;    ProFileTranslationsScanner *visitor = new ProFileTranslationsScanner(verbose);    QFileInfo fi(fileName);    QDir rootPath;    ok = fi.exists();    if (ok) {        rootPath.setPath(fi.absolutePath());        ProFile *pro = visitor->queryProFile(fi.absoluteFilePath());        if (!pro)            ok = false;        else            ok = pro->Accept(visitor);    }    if (ok) {        if (visitor->templateType() == ProFileEvaluator::TT_Subdirs) {            QString oldPath = QDir::currentPath();            QFileInfo fi(fileName);            QDir::setCurrent(fi.absolutePath());            QStringList subdirs = visitor->values("SUBDIRS");            for (int is = 0; is < subdirs.count() && ok; ++is) {                QString subdir = subdirs[is];                QDir dir( subdir );                QStringList profiles = dir.entryList(QStringList() << "*.pro");                if (profiles.count()) {                    ProReader subreader;                    ProFileTranslationsScanner *subvisitor = new ProFileTranslationsScanner(verbose);                    QString profile = subdir + QLatin1Char('/') + profiles[0];                    fi.setFile(profile);                    ProFile *pro = subreader.read(fi.absoluteFilePath());                    QString tmpPath = QDir::currentPath();                    ok = pro->Accept(subvisitor);                    if (ok) {                        sourceFiles += subvisitor->absFileNames(QLatin1String("SOURCES"));                        sourceFiles += subvisitor->absFileNames(QLatin1String("HEADERS"));                        QStringList forms = subvisitor->absFileNames(QLatin1String("INTERFACES"))                            + subvisitor->absFileNames(QLatin1String("FORMS"))                            + subvisitor->absFileNames(QLatin1String("FORMS3"));                        sourceFiles << forms;                    }                    delete subvisitor;                }            }            QDir::setCurrent(oldPath);        } else {            // app/lib template            sourceFiles += visitor->absFileNames(QLatin1String("SOURCES"));            sourceFiles += visitor->absFileNames(QLatin1String("HEADERS"));            tsFileNames << visitor->values("TRANSLATIONS");            QStringList trcodec = visitor->values(QLatin1String("CODEC"))                + visitor->values(QLatin1String("DEFAULTCODEC"))                + visitor->values(QLatin1String("CODECFORTR"));            if (!trcodec.isEmpty())                codecForTr = trcodec.last().toLatin1();            QStringList srccodec = visitor->values(QLatin1String("CODECFORSRC"));            if (!srccodec.isEmpty())                 codecForSource = srccodec.last().toLatin1();                        QStringList forms = visitor->absFileNames(QLatin1String("INTERFACES"))                + visitor->absFileNames(QLatin1String("FORMS"))                + visitor->absFileNames(QLatin1String("FORMS3"));            sourceFiles << forms;        }    }    if (ok) {        removeDuplicates(&sourceFiles, false);        removeDuplicates(&tsFileNames, false);        varMap->insert("SOURCES", sourceFiles);        varMap->insert("CODECFORTR", QStringList() << codecForTr);        varMap->insert("CODECFORSRC", QStringList() << codecForSource);        varMap->insert("TRANSLATIONS", tsFileNames);    }    return ok;}

⌨️ 快捷键说明

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