diff options
| author | Lucie Gérard <lucie.gerard@qt.io> | 2023-10-10 15:33:48 +0200 |
|---|---|---|
| committer | Lucie Gérard <lucie.gerard@qt.io> | 2023-10-26 14:12:00 +0200 |
| commit | d6e0d5630a49e9614a70bf960a213b3eff03a68e (patch) | |
| tree | 1ecb2d4a5064328dfd4d55c27cdf87709470cef1 /src/qml/compiler | |
| parent | 9187e07d36db8c262b51ba7d1ce35615b31ee918 (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.cpp | 9 | ||||
| -rw-r--r-- | src/qml/compiler/qqmlirbuilder_p.h | 2 | ||||
| -rw-r--r-- | src/qml/compiler/qv4compiler.cpp | 4 |
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)); |
