proparser.cpp
来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 161 行
CPP
161 行
/******************************************************************************** Copyright (C) 1992-2007 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://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** 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; 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) { // app/lib template sourceFiles += visitor->absFileNames(QLatin1String("SOURCES")); sourceFiles += visitor->absFileNames(QLatin1String("HEADERS")); QStringList tsFiles = visitor->values(QLatin1String("TRANSLATIONS")); for (int i = 0; i < tsFiles.count(); ++i) { tsFileNames << rootPath.absoluteFilePath(tsFiles.at(i)); } QStringList trcodec = visitor->values(QLatin1String("CODEC")) + visitor->values(QLatin1String("DEFAULTCODEC")) + visitor->values(QLatin1String("CODECFORTR")); if (!trcodec.isEmpty()) codecForTr = trcodec.last(); QStringList srccodec = visitor->values(QLatin1String("CODECFORSRC")); if (!srccodec.isEmpty()) codecForSource = srccodec.last(); 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;}QStringList getListOfProfiles(const QStringList &proFiles, bool verbose){ QStringList profileList = proFiles; bool ok = true; int i = 0; while( i < profileList.count() ) { QFileInfo fi(profileList.at(i)); ProFileTranslationsScanner *visitor = new ProFileTranslationsScanner(verbose); ok = fi.exists(); if (ok) { ProFile *pro = visitor->queryProFile(fi.absoluteFilePath()); if (!pro) ok = false; else ok = pro->Accept(visitor); if (ok && visitor->templateType() == ProFileEvaluator::TT_Subdirs) { QStringList subdirs = visitor->values(QLatin1String("SUBDIRS")); for (int is = 0; is < subdirs.count(); ++is) { QString subdir = subdirs[is]; QDir dir( subdir ); QStringList profiles = dir.entryList(QStringList() << QLatin1String("*.pro")); if (profiles.count()) profileList << subdir + QLatin1Char('/') + profiles[0]; } profileList.removeAt(i); } else { ++i; } } delete visitor; } if (!ok) profileList.clear(); return profileList;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?