aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/compiler
diff options
context:
space:
mode:
authorLucie Gérard <lucie.gerard@qt.io>2023-10-10 15:33:48 +0200
committerLucie Gérard <lucie.gerard@qt.io>2023-10-26 14:12:00 +0200
commitd6e0d5630a49e9614a70bf960a213b3eff03a68e (patch)
tree1ecb2d4a5064328dfd4d55c27cdf87709470cef1 /src/qml/compiler
parent9187e07d36db8c262b51ba7d1ce35615b31ee918 (diff)
Add pragma syntax to support translation context
Translator pragma can be used to set the translation context instead of having the file name used [ChangeLog][qml][translation][Important Behavior Changes] The context for the translation can now be controled in a given file using pragma Translator. Task-number: QTBUG-114528 Change-Id: I6d9d7fb81ea969a90d8637d7277bdbe96c102088 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/qml/compiler')
-rw-r--r--src/qml/compiler/qqmlirbuilder.cpp9
-rw-r--r--src/qml/compiler/qqmlirbuilder_p.h2
-rw-r--r--src/qml/compiler/qv4compiler.cpp4
3 files changed, 15 insertions, 0 deletions
diff --git a/src/qml/compiler/qqmlirbuilder.cpp b/src/qml/compiler/qqmlirbuilder.cpp
index 2d1a617b09..96529f0061 100644
--- a/src/qml/compiler/qqmlirbuilder.cpp
+++ b/src/qml/compiler/qqmlirbuilder.cpp
@@ -921,6 +921,10 @@ bool IRBuilder::visit(QQmlJS::AST::UiPragma *node)
} else if (node->name == "ValueTypeBehavior"_L1) {
if (!PragmaParser<Pragma::ValueTypeBehaviorValue>::run(this, node, pragma))
return false;
+ } else if (node->name == "Translator"_L1) {
+ pragma->type = Pragma::Translator;
+ pragma->translationContextIndex = registerString(node->values->value.toString());
+
} else {
recordError(node->pragmaToken, QCoreApplication::translate(
"QQmlParser", "Unknown pragma '%1'").arg(node->name));
@@ -1711,6 +1715,11 @@ void QmlUnitGenerator::generate(Document &output, const QV4::CompiledData::Depen
createdUnit->flags |= Unit::ValueTypesAddressable;
}
break;
+ case Pragma::Translator:
+ if (createdUnit->translationTableSize)
+ if (quint32_le *index = createdUnit->translationContextIndex())
+ *index = p->translationContextIndex;
+ break;
}
}
diff --git a/src/qml/compiler/qqmlirbuilder_p.h b/src/qml/compiler/qqmlirbuilder_p.h
index 8083fd752c..aad2f2fdbe 100644
--- a/src/qml/compiler/qqmlirbuilder_p.h
+++ b/src/qml/compiler/qqmlirbuilder_p.h
@@ -411,6 +411,7 @@ struct Q_QML_COMPILER_PRIVATE_EXPORT Pragma
FunctionSignatureBehavior,
NativeMethodBehavior,
ValueTypeBehavior,
+ Translator,
};
enum ListPropertyAssignBehaviorValue
@@ -453,6 +454,7 @@ struct Q_QML_COMPILER_PRIVATE_EXPORT Pragma
FunctionSignatureBehaviorValue functionSignatureBehavior;
NativeMethodBehaviorValue nativeMethodBehavior;
ValueTypeBehaviorValues::Int valueTypeBehavior;
+ uint translationContextIndex;
};
QV4::CompiledData::Location location;
diff --git a/src/qml/compiler/qv4compiler.cpp b/src/qml/compiler/qv4compiler.cpp
index 34c62cc992..7a7c8f621b 100644
--- a/src/qml/compiler/qv4compiler.cpp
+++ b/src/qml/compiler/qv4compiler.cpp
@@ -682,6 +682,10 @@ QV4::CompiledData::Unit QV4::Compiler::JSUnitGenerator::generateHeader(QV4::Comp
unit.translationTableSize = translations.size();
unit.offsetToTranslationTable = nextOffset;
nextOffset += unit.translationTableSize * sizeof(CompiledData::TranslationData);
+ if (unit.translationTableSize != 0) {
+ constexpr auto spaceForTranslationContextId = sizeof(quint32_le);
+ nextOffset += spaceForTranslationContextId;
+ }
nextOffset = static_cast<quint32>(QtPrivate::roundUpToMultipleOf(8, nextOffset));