diff --git a/src/kuitmarkup.cpp b/src/kuitmarkup.cpp --- a/src/kuitmarkup.cpp +++ b/src/kuitmarkup.cpp @@ -1123,9 +1123,11 @@ KuitFormatterPrivate(const QString &language); + ~KuitFormatterPrivate(); + QString format(const QByteArray &domain, const QString &context, const QString &text, - Kuit::VisualFormat format) const; + Kuit::VisualFormat format); // Get metatranslation (formatting patterns, etc.) QString metaTr(const char *context, const char *text) const; @@ -1198,34 +1200,41 @@ QHash guiPathDelim; QHash keyNames; + const KuitSetup *setup; }; KuitFormatterPrivate::KuitFormatterPrivate(const QString &language_) - : language(language_) + : language(language_), setup(nullptr) +{ +} + +KuitFormatterPrivate::~KuitFormatterPrivate() { + delete setup; } + QString KuitFormatterPrivate::format(const QByteArray &domain, const QString &context, const QString &text, - Kuit::VisualFormat format) const + Kuit::VisualFormat format) { - const KuitSetup &setup = Kuit::setupForDomain(domain); + setup = &Kuit::setupForDomain(domain); // If format is undefined, determine it based on UI marker inside context. Kuit::VisualFormat resolvedFormat = format; if (resolvedFormat == Kuit::UndefinedFormat) { - resolvedFormat = formatFromUiMarker(context, setup); + resolvedFormat = formatFromUiMarker(context, *setup); } // Quick check: are there any tags at all? QString ftext; if (text.indexOf(QL1C('<')) < 0) { ftext = finalizeVisualText(text, resolvedFormat); } else { // Format the text. - ftext = toVisualText(text, resolvedFormat, setup); + ftext = toVisualText(text, resolvedFormat, *setup); if (ftext.isEmpty()) { // error while processing markup - ftext = salvageMarkup(text, resolvedFormat, setup); + ftext = salvageMarkup(text, resolvedFormat, *setup); } } return ftext;