14 for (
const Translator::FileFormat &fmt : std::as_const(Translator::registeredFileFormats())) {
15 if (file.endsWith(u'.' + fmt.extension, Qt::CaseInsensitive)) {
17 if (tor.load(file, cd, fmt.extension)) {
18 for (TranslatorMessage msg : tor.messages()) {
19 msg.setType(TranslatorMessage::Unfinished);
20 msg.setTranslations(QStringList());
21 msg.setTranslatorComment(QString());
22 fetchedTor.extend(msg, cd);
34 bool requireQmlSupport =
false;
36 QStringList sourceFilesCpp;
37 for (
const auto &sourceFile : sourceFiles) {
38 if (sourceFile.endsWith(
".java"_L1, Qt::CaseInsensitive))
39 loadJava(fetchedTor, sourceFile, cd);
40 else if (sourceFile.endsWith(
".ui"_L1, Qt::CaseInsensitive)
41 || sourceFile.endsWith(
".jui"_L1, Qt::CaseInsensitive))
42 loadUI(fetchedTor, sourceFile, cd);
44 else if (sourceFile.endsWith(
".js"_L1, Qt::CaseInsensitive)
45 || sourceFile.endsWith(
".qs"_L1, Qt::CaseInsensitive)) {
46 loadQScript(fetchedTor, sourceFile, cd);
47 }
else if (sourceFile.endsWith(
".mjs"_L1, Qt::CaseInsensitive)) {
48 loadJSModule(fetchedTor, sourceFile, cd);
49 }
else if (sourceFile.endsWith(
".qml"_L1, Qt::CaseInsensitive))
50 loadQml(fetchedTor, sourceFile, cd);
52 else if (sourceFile.endsWith(
".qml"_L1, Qt::CaseInsensitive)
53 || sourceFile.endsWith(
".js"_L1, Qt::CaseInsensitive)
54 || sourceFile.endsWith(
".mjs"_L1, Qt::CaseInsensitive)
55 || sourceFile.endsWith(
".qs"_L1, Qt::CaseInsensitive))
56 requireQmlSupport =
true;
58 else if (sourceFile.endsWith(u".py", Qt::CaseInsensitive))
59 loadPython(fetchedTor, sourceFile, cd);
60 else if (!processTs(fetchedTor, sourceFile, cd))
61 sourceFilesCpp << sourceFile;
65 if (requireQmlSupport) {
66 std::cout << qPrintable(
"missing qml/javascript support\n"
67 "Some files have been ignored.\n"_L1);
71 loadCPP(fetchedTor, sourceFilesCpp, cd);
73 if (!cd.error().isEmpty())
74 std::cerr << qPrintable(cd.error());
79 static const char tab[] =
"abfnrtv";
80 static const char backTab[] =
"\a\b\f\n\r\t\v";
82 const QByteArray in = str.toUtf8();
85 out.reserve(in.size());
86 for (qsizetype i = 0; i < in.size();) {
96 if (c ==
'x' || c ==
'u' || c ==
'U') {
97 qsizetype maxSize = 2;
102 maxSize =
std::min(in.size(), i + maxSize);
104 const bool unicode = (c !=
'x');
106 while (i < maxSize && isxdigit((c = in[i]))) {
111 out += QString(QChar(hex.toUInt(
nullptr, 16))).toUtf8();
113 out += hex.toUInt(
nullptr, 16);
114 }
else if (c >=
'0' && c <
'8') {
118 while (n < 2 && i < in.size() && (c = in[i]) >=
'0' && c <
'8') {
123 out += oct.toUInt(0, 8);
125 const char *p = strchr(tab, c);
126 out += !p ? c : backTab[p - tab];
132 return QString::fromUtf8(out.constData(), out.size());
179 for (
const QString &pair : aliasString.split(u',', Qt::SkipEmptyParts)) {
180 const int equalSign = pair.indexOf(u'=');
182 printErr(
"tr-function mapping '%1' in -tr-function-alias is missing the '='.\n"_L1.arg(
186 const bool plusEqual = equalSign > 0 && pair[equalSign - 1] == u'+';
187 const int trFunctionEnd = plusEqual ? equalSign - 1 : equalSign;
188 const QString trFunctionName = pair.left(trFunctionEnd).trimmed();
189 const QString alias = pair.mid(equalSign + 1).trimmed();
190 const int trFunction = trFunctionByDefaultName(trFunctionName);
191 if (trFunction < 0) {
192 printErr(
"Unknown tr-function '%1' in -tr-function-alias option.\n"
193 "Available tr-functions are: %2\n"_L1.arg(trFunctionName,
194 availableFunctions().join(u',')));
197 if (alias.isEmpty()) {
198 printErr(
"Empty alias for tr-function '%1' in -tr-function-alias option.\n"_L1.arg(
202 trFunctionAliasManager.modifyAlias(trFunction, alias,
203 plusEqual ? TrFunctionAliasManager::AddAlias
204 : TrFunctionAliasManager::SetAlias);
225void TrFunctionAliasManager::modifyAlias(
int trFunction,
const QString &alias, Operation op)
227 QList<QString> &list = m_trFunctionAliases[trFunction];
230 list.push_back(alias);
231 m_nameToTrFunctionMap.clear();
254QStringList TrFunctionAliasManager::availableFunctionsWithAliases()
const
257 result.reserve(NumTrFunctions);
258 for (
int i = 0; i < NumTrFunctions; ++i)
259 result.push_back(defaultTrFunctionNames[i] +
" (="_L1 + m_trFunctionAliases[i].join(u'=')
264QStringList TrFunctionAliasManager::listAliases()
const
267 result.reserve(NumTrFunctions);
268 for (
int i = 0; i < NumTrFunctions; ++i) {
269 for (
int ii = 1; ii < m_trFunctionAliases[i].size(); ii++) {
271 result.push_back(m_trFunctionAliases[i][ii]);