Revision control
++ // Copyright (C) 2025 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
++
++ #ifndef TRPARSER_H
++ #define TRPARSER_H
++ #include <QtCore/QTranslator>
++ #include <QHash>
++
++ QT_BEGIN_NAMESPACE
++
++ class Translator;
++ class ConversionData;
++
++ enum UpdateOption {
++ Verbose = 1,
++ NoObsolete = 2,
++ PluralOnly = 4,
++ NoSort = 8,
++ HeuristicSameText = 16,
++ HeuristicSimilarText = 32,
++ AbsoluteLocations = 256,
++ RelativeLocations = 512,
++ NoLocations = 1024,
++ NoUiLines = 2048,
++ SourceIsUtf16 = 4096,
++ Werror = 8192,
++ SortMessages = 16384
++ };
++
++ Q_DECLARE_FLAGS(UpdateOptions, UpdateOption)
++ Q_DECLARE_OPERATORS_FOR_FLAGS(UpdateOptions)
++
++ void loadCPP(Translator &translator, const QStringList &filenames, ConversionData &cd);
++ bool loadJava(Translator &translator, const QString &filename, ConversionData &cd);
++ bool loadPython(Translator &translator, const QString &fileName, ConversionData &cd);
++ bool loadUI(Translator &translator, const QString &filename, ConversionData &cd);
++
++ #ifndef QT_NO_QML
++ bool loadQScript(Translator &translator, const QString &filename, ConversionData &cd);
++ bool loadJSModule(Translator &translator, const QString &filename, ConversionData &cd);
++ bool loadQml(Translator &translator, const QString &filename, ConversionData &cd);
++ #endif
++
++ void processSources(Translator &fetchedTor, const QStringList &sourceFiles, ConversionData &cd);
++
++ Translator merge(const Translator &tor, const Translator &virginTor,
++ const QList<Translator> &aliens, UpdateOptions options, QString &err);
++
++ QString transcode(const QString &str);
++
++ #define LUPDATE_FOR_EACH_TR_FUNCTION(UNARY_MACRO) \
++ /* from cpp.cpp */ \
++ UNARY_MACRO(Q_DECLARE_TR_FUNCTIONS) \
++ UNARY_MACRO(QT_TR_N_NOOP) \
++ UNARY_MACRO(QT_TRID_N_NOOP) \
++ UNARY_MACRO(QT_TRANSLATE_N_NOOP) \
++ UNARY_MACRO(QT_TRANSLATE_N_NOOP3) \
++ UNARY_MACRO(QT_TR_NOOP) \
++ UNARY_MACRO(QT_TRID_NOOP) \
++ UNARY_MACRO(QT_TRANSLATE_NOOP) \
++ UNARY_MACRO(QT_TRANSLATE_NOOP3) \
++ UNARY_MACRO(QT_TR_NOOP_UTF8) \
++ UNARY_MACRO(QT_TRANSLATE_NOOP_UTF8) \
++ UNARY_MACRO(QT_TRANSLATE_NOOP3_UTF8) \
++ UNARY_MACRO(findMessage) /* QTranslator::findMessage() has the same parameters as \
++ QApplication::translate() */ \
++ UNARY_MACRO(qtTrId) \
++ UNARY_MACRO(tr) \
++ UNARY_MACRO(trUtf8) \
++ UNARY_MACRO(translate) \
++ /* from qdeclarative.cpp: */ \
++ UNARY_MACRO(qsTr) \
++ UNARY_MACRO(qsTrId) \
++ UNARY_MACRO(qsTranslate) \
++ /*end*/
++
++ int trFunctionByDefaultName(const QString &trFunctionName);
++ QStringList availableFunctions();
++ bool parseTrFunctionAliasString(const QString &aliasString);
++
++ class TrFunctionAliasManager
++ {
++ public:
++ TrFunctionAliasManager();
++ ~TrFunctionAliasManager();
++
++ enum TrFunction {
++ // need to uglify names b/c most of the names are themselves macros:
++ #define MAKE_ENTRY(F) Function_##F,
++ LUPDATE_FOR_EACH_TR_FUNCTION(MAKE_ENTRY)
++ #undef MAKE_ENTRY
++ NumTrFunctions
++ };
++
++ using NameToTrFunctionMap = QHash<QString, TrFunction>;
++
++ enum Operation { AddAlias, SetAlias };
++
++ int trFunctionByName(const QString &trFunctionName) const;
++
++ void modifyAlias(int trFunction, const QString &alias, Operation op);
++
++ bool isAliasFor(const QString &identifier, TrFunction trFunction) const
++ {
++ return m_trFunctionAliases[trFunction].contains(identifier);
++ }
++
++ QStringList availableFunctionsWithAliases() const;
++ QStringList listAliases() const;
++
++ const NameToTrFunctionMap &nameToTrFunctionMap() const;
++
++ private:
++ void ensureTrFunctionHashUpdated() const;
++
++ private:
++ QStringList m_trFunctionAliases[NumTrFunctions];
++ mutable NameToTrFunctionMap m_nameToTrFunctionMap;
++ };
++
++ extern TrFunctionAliasManager trFunctionAliasManager;
++
++ QT_END_NAMESPACE
++
++ #endif // TRPARSER_H