1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2016 The Qt Company Ltd. 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of the Qt Linguist of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see https://www.qt.io/terms-conditions. For further 15 ** information use the contact form at https://www.qt.io/contact-us. 16 ** 17 ** GNU General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU 19 ** General Public License version 3 as published by the Free Software 20 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT 21 ** included in the packaging of this file. Please review the following 22 ** information to ensure the GNU General Public License requirements will 23 ** be met: https://www.gnu.org/licenses/gpl-3.0.html. 24 ** 25 ** $QT_END_LICENSE$ 26 ** 27 ****************************************************************************/ 28 29 #ifndef LUPDATE_H 30 #define LUPDATE_H 31 32 #include "qglobal.h" 33 34 #include <QtCore/QList> 35 #include <QtCore/QHash> 36 #include <QtCore/QCoreApplication> 37 #include <QtCore/QString> 38 #include <QtCore/QStringList> 39 #include <QtCore/QTranslator> 40 41 QT_BEGIN_NAMESPACE 42 43 class ConversionData; 44 class QStringList; 45 class Translator; 46 class TranslatorMessage; 47 48 enum UpdateOption { 49 Verbose = 1, 50 NoObsolete = 2, 51 PluralOnly = 4, 52 NoSort = 8, 53 HeuristicSameText = 16, 54 HeuristicSimilarText = 32, 55 HeuristicNumber = 64, 56 AbsoluteLocations = 256, 57 RelativeLocations = 512, 58 NoLocations = 1024, 59 NoUiLines = 2048, 60 SourceIsUtf16 = 4096 61 }; 62 63 Q_DECLARE_FLAGS(UpdateOptions, UpdateOption) 64 Q_DECLARE_OPERATORS_FOR_FLAGS(UpdateOptions) 65 66 Translator merge( 67 const Translator &tor, const Translator &virginTor, const QList<Translator> &aliens, 68 UpdateOptions options, QString &err); 69 70 void loadCPP(Translator &translator, const QStringList &filenames, ConversionData &cd); 71 bool loadJava(Translator &translator, const QString &filename, ConversionData &cd); 72 bool loadUI(Translator &translator, const QString &filename, ConversionData &cd); 73 74 #ifndef QT_NO_QML 75 bool loadQScript(Translator &translator, const QString &filename, ConversionData &cd); 76 bool loadQml(Translator &translator, const QString &filename, ConversionData &cd); 77 #endif 78 79 #define LUPDATE_FOR_EACH_TR_FUNCTION(UNARY_MACRO) \ 80 /* from cpp.cpp */ \ 81 UNARY_MACRO(Q_DECLARE_TR_FUNCTIONS) \ 82 UNARY_MACRO(QT_TR_N_NOOP) \ 83 UNARY_MACRO(QT_TRID_N_NOOP) \ 84 UNARY_MACRO(QT_TRANSLATE_N_NOOP) \ 85 UNARY_MACRO(QT_TRANSLATE_N_NOOP3) \ 86 UNARY_MACRO(QT_TR_NOOP) \ 87 UNARY_MACRO(QT_TRID_NOOP) \ 88 UNARY_MACRO(QT_TRANSLATE_NOOP) \ 89 UNARY_MACRO(QT_TRANSLATE_NOOP3) \ 90 UNARY_MACRO(QT_TR_NOOP_UTF8) \ 91 UNARY_MACRO(QT_TRANSLATE_NOOP_UTF8) \ 92 UNARY_MACRO(QT_TRANSLATE_NOOP3_UTF8) \ 93 UNARY_MACRO(findMessage) /* QTranslator::findMessage() has the same parameters as QApplication::translate() */ \ 94 UNARY_MACRO(qtTrId) \ 95 UNARY_MACRO(tr) \ 96 UNARY_MACRO(trUtf8) \ 97 UNARY_MACRO(translate) \ 98 /* from qdeclarative.cpp: */ \ 99 UNARY_MACRO(qsTr) \ 100 UNARY_MACRO(qsTrId) \ 101 UNARY_MACRO(qsTranslate) \ 102 /*end*/ 103 104 class ParserTool 105 { 106 public: 107 static QString transcode(const QString &str); 108 }; 109 110 class TrFunctionAliasManager { 111 public: 112 TrFunctionAliasManager(); 113 ~TrFunctionAliasManager(); 114 115 enum TrFunction { 116 // need to uglify names b/c most of the names are themselves macros: 117 #define MAKE_ENTRY(F) Function_##F, 118 LUPDATE_FOR_EACH_TR_FUNCTION(MAKE_ENTRY) 119 #undef MAKE_ENTRY 120 NumTrFunctions 121 }; 122 123 enum Operation { AddAlias, SetAlias }; 124 125 int trFunctionByName(const QString &trFunctionName) const; 126 127 void modifyAlias(int trFunction, const QString &alias, Operation op); 128 isAliasFor(const QString & identifier,TrFunction trFunction)129 bool isAliasFor(const QString &identifier, TrFunction trFunction) const 130 { return m_trFunctionAliases[trFunction].contains(identifier); } 131 132 QStringList availableFunctionsWithAliases() const; 133 134 private: 135 void ensureTrFunctionHashUpdated() const; 136 137 private: 138 QStringList m_trFunctionAliases[NumTrFunctions]; 139 mutable QHash<QString,TrFunction> m_nameToTrFunctionMap; 140 }; 141 142 class LU { 143 Q_DECLARE_TR_FUNCTIONS(LUpdate) 144 }; 145 146 QT_END_NAMESPACE 147 148 extern QT_PREPEND_NAMESPACE(TrFunctionAliasManager) trFunctionAliasManager; 149 150 #endif 151