Rebased ref, commits from common ancestor:
commit 31699dc711942bde9d1fb9b64aa9c87217967f81
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Wed Jun 14 11:48:51 2023 +0900
Commit:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
CommitDate: Thu Jun 15 20:12:15 2023 +0900

    oox, writerfilter, xmloff: use frozen unordered_map for static data
    
    Change-Id: I4a53fa57f52900104d249c84cde36c9d3b9e1300

diff --git a/oox/Library_oox.mk b/oox/Library_oox.mk
index b878089027b1..3bf2d607918c 100644
--- a/oox/Library_oox.mk
+++ b/oox/Library_oox.mk
@@ -65,6 +65,7 @@ $(eval $(call gb_Library_use_libraries,oox,\
 
 $(eval $(call gb_Library_use_externals,oox,\
        boost_headers \
+       frozen \
 ))
 
 ifeq ($(TLS),OPENSSL)
diff --git a/oox/source/drawingml/color.cxx b/oox/source/drawingml/color.cxx
index ad0b5ca7835e..6660c6bd2660 100644
--- a/oox/source/drawingml/color.cxx
+++ b/oox/source/drawingml/color.cxx
@@ -19,7 +19,9 @@
 
 #include <oox/drawingml/color.hxx>
 #include <algorithm>
-#include <unordered_map>
+#include <frozen/bits/defines.h>
+#include <frozen/bits/elsa_std.h>
+#include <frozen/unordered_map.h>
 #include <math.h>
 #include <osl/diagnose.h>
 #include <sal/log.hxx>
@@ -214,39 +216,40 @@ void lclOffValue( sal_Int32& ornValue, sal_Int32 nOff, 
sal_Int32 nMax = MAX_PERC
     ornValue = getLimitedValue< sal_Int32, sal_Int32 >( ornValue + nOff, 0, 
nMax );
 }
 
+static constexpr frozen::unordered_map<std::u16string_view, 
model::ThemeColorType, 26> aSchemeColorNameToIndex
+{
+    { u"dk1", model::ThemeColorType::Dark1 },
+    { u"lt1", model::ThemeColorType::Light1 },
+    { u"dk2", model::ThemeColorType::Dark2 },
+    { u"lt2", model::ThemeColorType::Light2 },
+    { u"accent1", model::ThemeColorType::Accent1 },
+    { u"accent2", model::ThemeColorType::Accent2 },
+    { u"accent3", model::ThemeColorType::Accent3 },
+    { u"accent4", model::ThemeColorType::Accent4 },
+    { u"accent5", model::ThemeColorType::Accent5 },
+    { u"accent6", model::ThemeColorType::Accent6 },
+    { u"hlink", model::ThemeColorType::Hyperlink },
+    { u"folHlink", model::ThemeColorType::FollowedHyperlink },
+    { u"tx1", model::ThemeColorType::Dark1 },
+    { u"bg1", model::ThemeColorType::Light1 },
+    { u"tx2", model::ThemeColorType::Dark2 },
+    { u"bg2", model::ThemeColorType::Light2 },
+    { u"dark1", model::ThemeColorType::Dark1},
+    { u"light1", model::ThemeColorType::Light1},
+    { u"dark2", model::ThemeColorType::Dark2 },
+    { u"light2", model::ThemeColorType::Light2 },
+    { u"text1", model::ThemeColorType::Dark1 },
+    { u"background1", model::ThemeColorType::Light1 },
+    { u"text2", model::ThemeColorType::Dark2 },
+    { u"background2", model::ThemeColorType::Light2 },
+    { u"hyperlink", model::ThemeColorType::Hyperlink },
+    { u"followedHyperlink", model::ThemeColorType::FollowedHyperlink }
+};
+
 } // namespace
 
 model::ThemeColorType schemeNameToThemeColorType(OUString const& rSchemeName)
 {
-    static std::unordered_map<OUString, model::ThemeColorType> const 
aSchemeColorNameToIndex{
-        { u"dk1", model::ThemeColorType::Dark1 },
-        { u"lt1", model::ThemeColorType::Light1 },
-        { u"dk2", model::ThemeColorType::Dark2 },
-        { u"lt2", model::ThemeColorType::Light2 },
-        { u"accent1", model::ThemeColorType::Accent1 },
-        { u"accent2", model::ThemeColorType::Accent2 },
-        { u"accent3", model::ThemeColorType::Accent3 },
-        { u"accent4", model::ThemeColorType::Accent4 },
-        { u"accent5", model::ThemeColorType::Accent5 },
-        { u"accent6", model::ThemeColorType::Accent6 },
-        { u"hlink", model::ThemeColorType::Hyperlink },
-        { u"folHlink", model::ThemeColorType::FollowedHyperlink },
-        { u"tx1", model::ThemeColorType::Dark1 },
-        { u"bg1", model::ThemeColorType::Light1 },
-        { u"tx2", model::ThemeColorType::Dark2 },
-        { u"bg2", model::ThemeColorType::Light2 },
-        { u"dark1", model::ThemeColorType::Dark1},
-        { u"light1", model::ThemeColorType::Light1},
-        { u"dark2", model::ThemeColorType::Dark2 },
-        { u"light2", model::ThemeColorType::Light2 },
-        { u"text1", model::ThemeColorType::Dark1 },
-        { u"background1", model::ThemeColorType::Light1 },
-        { u"text2", model::ThemeColorType::Dark2 },
-        { u"background2", model::ThemeColorType::Light2 },
-        { u"hyperlink", model::ThemeColorType::Hyperlink },
-        { u"followedHyperlink", model::ThemeColorType::FollowedHyperlink}
-    };
-
     auto aIterator = aSchemeColorNameToIndex.find(rSchemeName);
     if (aIterator == aSchemeColorNameToIndex.end())
         return model::ThemeColorType::Unknown;
diff --git a/oox/source/drawingml/colorchoicecontext.cxx 
b/oox/source/drawingml/colorchoicecontext.cxx
index b0977c5e003c..04b9f996d8d5 100644
--- a/oox/source/drawingml/colorchoicecontext.cxx
+++ b/oox/source/drawingml/colorchoicecontext.cxx
@@ -24,13 +24,16 @@
 #include <oox/token/namespaces.hxx>
 #include <oox/token/tokens.hxx>
 #include <unordered_map>
+#include <frozen/bits/defines.h>
+#include <frozen/bits/elsa_std.h>
+#include <frozen/unordered_map.h>
 
 namespace oox::drawingml {
 
 namespace
 {
 
-const std::unordered_map<sal_Int32, model::SystemColorType> 
constSystemColorMap =
+static constexpr frozen::unordered_map<sal_Int32, model::SystemColorType, 30> 
constSystemColorMap
 {
     { XML_scrollBar, model::SystemColorType::ScrollBar },
     { XML_background, model::SystemColorType::Background },
@@ -64,7 +67,7 @@ const std::unordered_map<sal_Int32, model::SystemColorType> 
constSystemColorMap
     { XML_menuBar, model::SystemColorType::MenuBar }
 };
 
-const std::unordered_map<sal_Int32, model::TransformationType> 
constTransformTypeMap =
+static constexpr frozen::unordered_map<sal_Int32, model::TransformationType, 
28> constTransformTypeMap
 {
     { XML_alpha, model::TransformationType::Alpha },
     { XML_alphaMod, model::TransformationType::AlphaMod },
diff --git a/oox/source/drawingml/fontworkhelpers.cxx 
b/oox/source/drawingml/fontworkhelpers.cxx
index 3c8d28d634c6..0a68e4844a9b 100644
--- a/oox/source/drawingml/fontworkhelpers.cxx
+++ b/oox/source/drawingml/fontworkhelpers.cxx
@@ -905,6 +905,18 @@ void FontworkHelpers::applyPropsToRuns(const 
std::vector<beans::PropertyValue>&
         }
     }
 }
+namespace
+{
+constexpr const std::array<std::u16string_view, 5> aCharPropNames{
+    u"CharColorLumMod", u"CharColorLumOff", u"CharColorTheme", 
u"CharComplexColor",
+    u"CharTransparence"
+};
+
+constexpr const std::array<std::u16string_view, 5> aShapePropNames{
+    u"FillColorLumMod", u"FillColorLumOff", u"FillColorTheme", 
u"FillComplexColor",
+    u"FillTransparence"
+};
+}
 
 void FontworkHelpers::createCharFillPropsFromShape(
     const uno::Reference<beans::XPropertySet>& rXPropSet,
@@ -930,17 +942,12 @@ void FontworkHelpers::createCharFillPropsFromShape(
         rCharPropVec.push_back(comphelper::makePropertyValue(u"CharColor", 
sal_Int32(aColor)));
     }
 
-    const std::array<OUString, 5> aCharPropNames
-        = { u"CharColorLumMod", u"CharColorLumOff", u"CharColorTheme", 
u"CharComplexColor",
-            u"CharTransparence" };
-    const std::array<OUString, 5> aShapePropNames
-        = { u"FillColorLumMod", u"FillColorLumOff", u"FillColorTheme", 
u"FillComplexColor",
-            u"FillTransparence" };
     for (size_t i = 0; i < 5; i++)
     {
-        if (xPropSetInfo->hasPropertyByName(aShapePropNames[i]))
+        OUString aPropertyName(aShapePropNames[i]);
+        if (xPropSetInfo->hasPropertyByName(aPropertyName))
             rCharPropVec.push_back(comphelper::makePropertyValue(
-                aCharPropNames[i], 
rXPropSet->getPropertyValue(aShapePropNames[i])));
+                OUString(aCharPropNames[i]), 
rXPropSet->getPropertyValue(aPropertyName)));
     }
 }
 
@@ -1039,29 +1046,32 @@ typedef std::multimap<sal_Int32, GradientStopColor> 
ColorMapType;
 
 namespace
 {
+constexpr const std::array<std::u16string_view, 12> W14ColorNames{
+    u"tx1",     u"bg1",     u"tx2",     u"bg2",     u"accent1", u"accent2",
+    u"accent3", u"accent4", u"accent5", u"accent6", u"hlink",   u"folHlink"
+};
+
+constexpr const std::array<std::u16string_view, 12> WColorNames{
+    u"text1",   u"background1", u"text2",   u"background2", u"accent1",   
u"accent2",
+    u"accent3", u"accent4",     u"accent5", u"accent6",     u"hyperlink", 
u"followedHyperlink"
+};
+
 // Returns the string to be used in w14:schemeClr in case of w14:textOutline 
or w14:textFill
 OUString lcl_getW14MarkupStringForThemeColor(const model::ComplexColor& 
rComplexColor)
 {
-    const std::array<OUString, 12> W14ColorNames
-        = { u"tx1",     u"bg1",     u"tx2",     u"bg2",     u"accent1", 
u"accent2",
-            u"accent3", u"accent4", u"accent5", u"accent6", u"hlink",   
u"folHlink" };
     const sal_uInt8 nClrNameIndex = std::clamp<sal_uInt8>(
         sal_Int32(rComplexColor.getSchemeType()), 
sal_Int32(model::ThemeColorType::Dark1),
         sal_Int32(model::ThemeColorType::FollowedHyperlink));
-    return W14ColorNames[nClrNameIndex];
+    return OUString(W14ColorNames[nClrNameIndex]);
 }
 
 // Returns the string to be used in w:themeColor. It is exported via 
CharThemeColor.
 OUString lcl_getWMarkupStringForThemeColor(const model::ComplexColor& 
rComplexColor)
 {
-    const std::array<OUString, 12> WColorNames
-        = { u"text1",   u"background1", u"text2",     u"background2",
-            u"accent1", u"accent2",     u"accent3",   u"accent4",
-            u"accent5", u"accent6",     u"hyperlink", u"followedHyperlink" };
     const sal_uInt8 nClrNameIndex = std::clamp<sal_uInt8>(
         sal_Int32(rComplexColor.getSchemeType()), 
sal_Int32(model::ThemeColorType::Dark1),
         sal_Int32(model::ThemeColorType::FollowedHyperlink));
-    return WColorNames[nClrNameIndex];
+    return OUString(WColorNames[nClrNameIndex]);
 }
 
 // Puts the value of the first occurrence of rType in rComplexColor into 
rValue and returns true.
diff --git a/oox/source/drawingml/misccontexts.cxx 
b/oox/source/drawingml/misccontexts.cxx
index 25058d392600..3de0538925b4 100644
--- a/oox/source/drawingml/misccontexts.cxx
+++ b/oox/source/drawingml/misccontexts.cxx
@@ -28,6 +28,9 @@
 #include <vcl/GraphicExternalLink.hxx>
 #include <vcl/graph.hxx>
 #include <unordered_map>
+#include <frozen/bits/defines.h>
+#include <frozen/bits/elsa_std.h>
+#include <frozen/unordered_map.h>
 
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
@@ -143,7 +146,7 @@ ContextHandlerRef GradientFillContext::onCreateContext(
 namespace
 {
 
-std::unordered_map<sal_Int32, model::PatternPreset> constPatternPresetMap =
+static constexpr frozen::unordered_map<sal_Int32, model::PatternPreset, 54> 
constPatternPresetMap
 {
     { XML_pct5, model::PatternPreset::Percent_5 },
     { XML_pct10, model::PatternPreset::Percent_10 },
diff --git a/oox/source/drawingml/table/predefined-table-styles.cxx 
b/oox/source/drawingml/table/predefined-table-styles.cxx
index 531e20b14512..f3f9082f2501 100644
--- a/oox/source/drawingml/table/predefined-table-styles.cxx
+++ b/oox/source/drawingml/table/predefined-table-styles.cxx
@@ -8,6 +8,9 @@
  */
 #include <oox/token/tokens.hxx>
 #include <drawingml/table/tablestyle.hxx>
+#include <frozen/bits/defines.h>
+#include <frozen/bits/elsa_std.h>
+#include <frozen/unordered_map.h>
 
 using namespace oox;
 using namespace oox::drawingml::table;
@@ -194,13 +197,18 @@ static void createStyleIdMap()
         = std::make_pair(OUString("Dark-Style-2"), OUString("Accent5"));
 }
 
-static std::map<OUString, sal_Int32> tokens = { { "", XML_dk1 },
-                                                { "Accent1", XML_accent1 },
-                                                { "Accent2", XML_accent2 },
-                                                { "Accent3", XML_accent3 },
-                                                { "Accent4", XML_accent4 },
-                                                { "Accent5", XML_accent5 },
-                                                { "Accent6", XML_accent6 } };
+static constexpr frozen::unordered_map<std::u16string_view, sal_Int32, 6> 
tokens{
+    { u"Accent1", XML_accent1 }, { u"Accent2", XML_accent2 }, { u"Accent3", 
XML_accent3 },
+    { u"Accent4", XML_accent4 }, { u"Accent5", XML_accent5 }, { u"Accent6", 
XML_accent6 }
+};
+
+sal_Int32 resolveToken(OUString const& rString)
+{
+    auto interator = tokens.find(rString);
+    if (interator != tokens.end())
+        return interator->second;
+    return XML_dk1;
+}
 
 void setBorderLineType(const oox::drawingml::LinePropertiesPtr& pLineProp, 
sal_Int32 nToken)
 {
@@ -444,7 +452,7 @@ std::unique_ptr<TableStyle> CreateTableStyle(const 
OUString& styleId)
             setBorderLineType(pLastColBottomBorder, XML_solidFill);
             setBorderLineType(pLastColInsideHBorder, XML_solidFill);
 
-            sal_Int32 accent_val = tokens[mStyleIdMap[styleId].second];
+            sal_Int32 accent_val = resolveToken(mStyleIdMap[styleId].second);
 
             wholeTblTextColor.setSchemeClr(XML_dk1);
             firstRowTextColor.setSchemeClr(XML_lt1);
@@ -509,7 +517,7 @@ std::unique_ptr<TableStyle> CreateTableStyle(const 
OUString& styleId)
             wholeTblTextColor.setSchemeClr(XML_lt1);
             firstRowTextColor.setSchemeClr(XML_lt1);
 
-            accent_val = tokens[mStyleIdMap[styleId].second];
+            accent_val = resolveToken(mStyleIdMap[styleId].second);
 
             pTblBgFillProperties->maFillColor.setSchemeClr(accent_val);
             
pFirstRowBottomBorder->maLineFill.maFillColor.setSchemeClr(XML_lt1);
@@ -554,7 +562,7 @@ std::unique_ptr<TableStyle> CreateTableStyle(const 
OUString& styleId)
         sal_Int32 accent_val;
 
         if (!accent_name.isEmpty())
-            accent_val = tokens[mStyleIdMap[styleId].second];
+            accent_val = resolveToken(mStyleIdMap[styleId].second);
         else
             accent_val = XML_tx1;
 
@@ -591,7 +599,7 @@ std::unique_ptr<TableStyle> CreateTableStyle(const 
OUString& styleId)
         sal_Int32 accent_val;
 
         if (!accent_name.isEmpty())
-            accent_val = tokens[mStyleIdMap[styleId].second];
+            accent_val = resolveToken(mStyleIdMap[styleId].second);
         else
             accent_val = XML_tx1;
 
@@ -628,7 +636,7 @@ std::unique_ptr<TableStyle> CreateTableStyle(const 
OUString& styleId)
         sal_Int32 accent_val;
 
         if (!accent_name.isEmpty())
-            accent_val = tokens[mStyleIdMap[styleId].second];
+            accent_val = resolveToken(mStyleIdMap[styleId].second);
         else
             accent_val = XML_tx1;
 
@@ -665,7 +673,7 @@ std::unique_ptr<TableStyle> CreateTableStyle(const 
OUString& styleId)
         sal_Int32 accent_val;
 
         if (!accent_name.isEmpty())
-            accent_val = tokens[mStyleIdMap[styleId].second];
+            accent_val = resolveToken(mStyleIdMap[styleId].second);
         else
             accent_val = XML_dk1;
 
@@ -713,7 +721,7 @@ std::unique_ptr<TableStyle> CreateTableStyle(const 
OUString& styleId)
         sal_Int32 accent_val;
 
         if (!accent_name.isEmpty())
-            accent_val = tokens[mStyleIdMap[styleId].second];
+            accent_val = resolveToken(mStyleIdMap[styleId].second);
         else
             accent_val = XML_dk1;
 
@@ -753,7 +761,7 @@ std::unique_ptr<TableStyle> CreateTableStyle(const 
OUString& styleId)
         sal_Int32 accent_val;
 
         if (!accent_name.isEmpty())
-            accent_val = tokens[mStyleIdMap[styleId].second];
+            accent_val = resolveToken(mStyleIdMap[styleId].second);
         else
             accent_val = XML_dk1;
 
@@ -780,7 +788,7 @@ std::unique_ptr<TableStyle> CreateTableStyle(const 
OUString& styleId)
         sal_Int32 accent_val;
 
         if (!accent_name.isEmpty())
-            accent_val = tokens[mStyleIdMap[styleId].second];
+            accent_val = resolveToken(mStyleIdMap[styleId].second);
         else
             accent_val = XML_dk1;
 
@@ -823,7 +831,7 @@ std::unique_ptr<TableStyle> CreateTableStyle(const 
OUString& styleId)
 
         if (!accent_name.isEmpty())
         {
-            accent_val = tokens[mStyleIdMap[styleId].second];
+            accent_val = resolveToken(mStyleIdMap[styleId].second);
             transform_val = XML_shade;
         }
         else
@@ -866,7 +874,7 @@ std::unique_ptr<TableStyle> CreateTableStyle(const 
OUString& styleId)
         sal_Int32 accent_val;
 
         if (!accent_name.isEmpty())
-            accent_val = tokens[mStyleIdMap[styleId].second];
+            accent_val = resolveToken(mStyleIdMap[styleId].second);
         else
             accent_val = XML_dk1;
 
diff --git a/oox/source/export/ThemeExport.cxx 
b/oox/source/export/ThemeExport.cxx
index f09f9012e246..f60304155d9e 100644
--- a/oox/source/export/ThemeExport.cxx
+++ b/oox/source/export/ThemeExport.cxx
@@ -19,6 +19,9 @@
 #include <sax/fastattribs.hxx>
 #include <unordered_map>
 #include <oox/export/drawingml.hxx>
+#include <frozen/bits/defines.h>
+#include <frozen/bits/elsa_std.h>
+#include <frozen/unordered_map.h>
 
 namespace oox
 {
@@ -142,16 +145,84 @@ bool ThemeExport::writeFontScheme(model::FontScheme 
const& rFontScheme)
     return true;
 }
 
-void ThemeExport::writeColorTransformations(
-    std::vector<model::Transformation> const& rTransformations)
+namespace
 {
-    static std::unordered_map<model::TransformationType, sal_Int32> 
constTransformTypeTokenMap = {
+static constexpr frozen::unordered_map<model::TransformationType, sal_Int32, 4>
+    constTransformTypeTokenMap{
         { model::TransformationType::Tint, XML_tint },
         { model::TransformationType::Shade, XML_shade },
         { model::TransformationType::LumMod, XML_lumMod },
         { model::TransformationType::LumOff, XML_lumOff },
     };
 
+static constexpr frozen::unordered_map<model::ThemeColorType, const char*, 12>
+    constThemeColorTypeTokenMap{ { model::ThemeColorType::Dark1, "dk1" },
+                                 { model::ThemeColorType::Light1, "lt1" },
+                                 { model::ThemeColorType::Dark2, "dk2" },
+                                 { model::ThemeColorType::Light2, "lt2" },
+                                 { model::ThemeColorType::Accent1, "accent1" },
+                                 { model::ThemeColorType::Accent2, "accent2" },
+                                 { model::ThemeColorType::Accent3, "accent3" },
+                                 { model::ThemeColorType::Accent4, "accent4" },
+                                 { model::ThemeColorType::Accent5, "accent5" },
+                                 { model::ThemeColorType::Accent6, "accent6" },
+                                 { model::ThemeColorType::Hyperlink, "hlink" },
+                                 { model::ThemeColorType::FollowedHyperlink, 
"folHlink" } };
+
+static constexpr frozen::unordered_map<model::SystemColorType, const char*, 30>
+    constSystemColorTypeTokenMap{
+        { model::SystemColorType::DarkShadow3D, "3dDkShadow" },
+        { model::SystemColorType::Light3D, "3dLight" },
+        { model::SystemColorType::ActiveBorder, "activeBorder" },
+        { model::SystemColorType::ActiveCaption, "activeCaption" },
+        { model::SystemColorType::AppWorkspace, "appWorkspace" },
+        { model::SystemColorType::Background, "background" },
+        { model::SystemColorType::ButtonFace, "btnFace" },
+        { model::SystemColorType::ButtonHighlight, "btnHighlight" },
+        { model::SystemColorType::ButtonShadow, "btnShadow" },
+        { model::SystemColorType::ButtonText, "btnText" },
+        { model::SystemColorType::CaptionText, "captionText" },
+        { model::SystemColorType::GradientActiveCaption, 
"gradientActiveCaption" },
+        { model::SystemColorType::GradientInactiveCaption, 
"gradientInactiveCaption" },
+        { model::SystemColorType::GrayText, "grayText" },
+        { model::SystemColorType::Highlight, "highlight" },
+        { model::SystemColorType::HighlightText, "highlightText" },
+        { model::SystemColorType::HotLight, "hotLight" },
+        { model::SystemColorType::InactiveBorder, "inactiveBorder" },
+        { model::SystemColorType::InactiveCaption, "inactiveCaption" },
+        { model::SystemColorType::InactiveCaptionText, "inactiveCaptionText" },
+        { model::SystemColorType::InfoBack, "infoBk" },
+        { model::SystemColorType::InfoText, "infoText" },
+        { model::SystemColorType::Menu, "menu" },
+        { model::SystemColorType::MenuBar, "menuBar" },
+        { model::SystemColorType::MenuHighlight, "menuHighlight" },
+        { model::SystemColorType::MenuText, "menuText" },
+        { model::SystemColorType::ScrollBar, "scrollBar" },
+        { model::SystemColorType::Window, "window" },
+        { model::SystemColorType::WindowFrame, "windowFrame" },
+        { model::SystemColorType::WindowText, "windowText" }
+    };
+
+static constexpr frozen::unordered_map<sal_Int32, model::ThemeColorType, 12> 
constTokenMap{
+    { XML_dk1, model::ThemeColorType::Dark1 },
+    { XML_lt1, model::ThemeColorType::Light1 },
+    { XML_dk2, model::ThemeColorType::Dark2 },
+    { XML_lt2, model::ThemeColorType::Light2 },
+    { XML_accent1, model::ThemeColorType::Accent1 },
+    { XML_accent2, model::ThemeColorType::Accent2 },
+    { XML_accent3, model::ThemeColorType::Accent3 },
+    { XML_accent4, model::ThemeColorType::Accent4 },
+    { XML_accent5, model::ThemeColorType::Accent5 },
+    { XML_accent6, model::ThemeColorType::Accent6 },
+    { XML_hlink, model::ThemeColorType::Hyperlink },
+    { XML_folHlink, model::ThemeColorType::FollowedHyperlink }
+};
+
+} // end anonymous ns
+
+void ThemeExport::writeColorTransformations(
+    std::vector<model::Transformation> const& rTransformations)
+{
     for (model::Transformation const& rTransformation : rTransformations)
     {
         auto iterator = 
constTransformTypeTokenMap.find(rTransformation.meType);
@@ -191,19 +262,6 @@ void ThemeExport::writeColorHSL(model::ComplexColor const& 
rComplexColor)
 
 void ThemeExport::writeColorScheme(model::ComplexColor const& rComplexColor)
 {
-    static std::unordered_map<model::ThemeColorType, const char*> 
constThemeColorTypeTokenMap
-        = { { model::ThemeColorType::Dark1, "dk1" },
-            { model::ThemeColorType::Light1, "lt1" },
-            { model::ThemeColorType::Dark2, "dk2" },
-            { model::ThemeColorType::Light2, "lt2" },
-            { model::ThemeColorType::Accent1, "accent1" },
-            { model::ThemeColorType::Accent2, "accent2" },
-            { model::ThemeColorType::Accent3, "accent3" },
-            { model::ThemeColorType::Accent4, "accent4" },
-            { model::ThemeColorType::Accent5, "accent5" },
-            { model::ThemeColorType::Accent6, "accent6" },
-            { model::ThemeColorType::Hyperlink, "hlink" },
-            { model::ThemeColorType::FollowedHyperlink, "folHlink" } };
     auto iterator = 
constThemeColorTypeTokenMap.find(rComplexColor.meSchemeType);
     if (iterator != constThemeColorTypeTokenMap.end())
     {
@@ -216,40 +274,8 @@ void ThemeExport::writeColorScheme(model::ComplexColor 
const& rComplexColor)
 
 void ThemeExport::writeColorSystem(model::ComplexColor const& rComplexColor)
 {
-    static std::unordered_map<model::SystemColorType, const char*> 
constThemeColorTypeTokenMap = {
-        { model::SystemColorType::DarkShadow3D, "3dDkShadow" },
-        { model::SystemColorType::Light3D, "3dLight" },
-        { model::SystemColorType::ActiveBorder, "activeBorder" },
-        { model::SystemColorType::ActiveCaption, "activeCaption" },
-        { model::SystemColorType::AppWorkspace, "appWorkspace" },
-        { model::SystemColorType::Background, "background" },
-        { model::SystemColorType::ButtonFace, "btnFace" },
-        { model::SystemColorType::ButtonHighlight, "btnHighlight" },
-        { model::SystemColorType::ButtonShadow, "btnShadow" },
-        { model::SystemColorType::ButtonText, "btnText" },
-        { model::SystemColorType::CaptionText, "captionText" },
-        { model::SystemColorType::GradientActiveCaption, 
"gradientActiveCaption" },
-        { model::SystemColorType::GradientInactiveCaption, 
"gradientInactiveCaption" },
-        { model::SystemColorType::GrayText, "grayText" },
-        { model::SystemColorType::Highlight, "highlight" },
-        { model::SystemColorType::HighlightText, "highlightText" },
-        { model::SystemColorType::HotLight, "hotLight" },
-        { model::SystemColorType::InactiveBorder, "inactiveBorder" },
-        { model::SystemColorType::InactiveCaption, "inactiveCaption" },
-        { model::SystemColorType::InactiveCaptionText, "inactiveCaptionText" },
-        { model::SystemColorType::InfoBack, "infoBk" },
-        { model::SystemColorType::InfoText, "infoText" },
-        { model::SystemColorType::Menu, "menu" },
-        { model::SystemColorType::MenuBar, "menuBar" },
-        { model::SystemColorType::MenuHighlight, "menuHighlight" },
-        { model::SystemColorType::MenuText, "menuText" },
-        { model::SystemColorType::ScrollBar, "scrollBar" },
-        { model::SystemColorType::Window, "window" },
-        { model::SystemColorType::WindowFrame, "windowFrame" },
-        { model::SystemColorType::WindowText, "windowText" },
-    };
-    auto iterator = 
constThemeColorTypeTokenMap.find(rComplexColor.meSystemColorType);
-    if (iterator != constThemeColorTypeTokenMap.end())
+    auto iterator = 
constSystemColorTypeTokenMap.find(rComplexColor.meSystemColorType);
+    if (iterator != constSystemColorTypeTokenMap.end())
     {
         const char* sValue = iterator->second;
         mpFS->startElementNS(XML_a, XML_sysClr, XML_val, sValue);
@@ -844,21 +870,7 @@ bool ThemeExport::writeFormatScheme(model::FormatScheme 
const& rFormatScheme)
 
 bool ThemeExport::writeColorSet(model::Theme const& rTheme)
 {
-    static std::unordered_map<sal_Int32, model::ThemeColorType> constTokenMap
-        = { { XML_dk1, model::ThemeColorType::Dark1 },
-            { XML_lt1, model::ThemeColorType::Light1 },
-            { XML_dk2, model::ThemeColorType::Dark2 },
-            { XML_lt2, model::ThemeColorType::Light2 },
-            { XML_accent1, model::ThemeColorType::Accent1 },
-            { XML_accent2, model::ThemeColorType::Accent2 },
-            { XML_accent3, model::ThemeColorType::Accent3 },
-            { XML_accent4, model::ThemeColorType::Accent4 },
-            { XML_accent5, model::ThemeColorType::Accent5 },
-            { XML_accent6, model::ThemeColorType::Accent6 },
-            { XML_hlink, model::ThemeColorType::Hyperlink },
-            { XML_folHlink, model::ThemeColorType::FollowedHyperlink } };
-
-    static std::array<sal_Int32, 12> constTokenArray
+    static const constexpr std::array<sal_Int32, 12> constTokenArray
         = { XML_dk1,     XML_lt1,     XML_dk2,     XML_lt2,     XML_accent1, 
XML_accent2,
             XML_accent3, XML_accent4, XML_accent5, XML_accent6, XML_hlink,   
XML_folHlink };
 
@@ -868,11 +880,15 @@ bool ThemeExport::writeColorSet(model::Theme const& 
rTheme)
 
     for (auto nToken : constTokenArray)
     {
-        model::ThemeColorType eColorType = constTokenMap[nToken];
-        Color aColor = pColorSet->getColor(eColorType);
-        mpFS->startElementNS(XML_a, nToken);
-        mpFS->singleElementNS(XML_a, XML_srgbClr, XML_val, 
I32SHEX(sal_Int32(aColor)));
-        mpFS->endElementNS(XML_a, nToken);
+        auto iterator = constTokenMap.find(nToken);
+        if (iterator != constTokenMap.end())
+        {
+            model::ThemeColorType eColorType = iterator->second;
+            Color aColor = pColorSet->getColor(eColorType);
+            mpFS->startElementNS(XML_a, nToken);
+            mpFS->singleElementNS(XML_a, XML_srgbClr, XML_val, 
I32SHEX(sal_Int32(aColor)));
+            mpFS->endElementNS(XML_a, nToken);
+        }
     }
 
     return true;
diff --git a/oox/source/token/relationship.cxx 
b/oox/source/token/relationship.cxx
index cfe1dedc508d..7cc0bb002fe0 100644
--- a/oox/source/token/relationship.cxx
+++ b/oox/source/token/relationship.cxx
@@ -10,21 +10,28 @@
 #include <oox/token/relationship.hxx>
 
 #include <sal/log.hxx>
-#include <map>
+#include <frozen/bits/defines.h>
+#include <frozen/bits/elsa_std.h>
+#include <frozen/unordered_map.h>
 
-namespace oox {
+namespace oox
+{
 
-OUString getRelationship(Relationship eRelationship)
+namespace
+{
+
+static constexpr frozen::unordered_map<Relationship, std::u16string_view, 48> 
constRelationshipMap
 {
-    static const std::map<Relationship, OUString> aMap =
-    {
 #include "relationship.inc"
-    };
+};
 
-    auto itr = aMap.find(eRelationship);
-    if (itr != aMap.end())
-        return itr->second;
+} // end anonymous ns
 
+OUString getRelationship(Relationship eRelationship)
+{
+    auto iterator = constRelationshipMap.find(eRelationship);
+    if (iterator != constRelationshipMap.end())
+        return OUString(iterator->second);
     SAL_WARN("oox", "could not find an entry for the relationship: " << 
static_cast<int>(eRelationship));
     return OUString();
 }
diff --git a/oox/source/token/relationship.inc 
b/oox/source/token/relationship.inc
index 4a772671a96f..5b2f16b9264c 100644
--- a/oox/source/token/relationship.inc
+++ b/oox/source/token/relationship.inc
@@ -1,48 +1,48 @@
-{Relationship::ACTIVEXCONTROLBINARY, 
"http://schemas.microsoft.com/office/2006/relationships/activeXControlBinary"},
-{Relationship::CHART, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart"},
-{Relationship::CHARTUSERSHAPES, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartUserShapes"},
-{Relationship::COMMENTS, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments"},
-{Relationship::COMMENTAUTHORS, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/commentAuthors"},
-{Relationship::COMMENTSEXTENDED, 
"http://schemas.microsoft.com/office/2011/relationships/commentsExtended"},
-{Relationship::CONTROL, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/control"},
-{Relationship::CTRLPROP, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/ctrlProp"},
-{Relationship::CUSTOMXML, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml"},
-{Relationship::CUSTOMXMLPROPS, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps"},
-{Relationship::DIAGRAMCOLORS, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramColors"},
-{Relationship::DIAGRAMDATA, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramData"},
-{Relationship::DIAGRAMDRAWING, 
"http://schemas.microsoft.com/office/2007/relationships/diagramDrawing"},
-{Relationship::DIAGRAMLAYOUT, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramLayout"},
-{Relationship::DIAGRAMQUICKSTYLE, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramQuickStyle"},
-{Relationship::DRAWING, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing"},
-{Relationship::ENDNOTES, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes"},
-{Relationship::EXTERNALLINKPATH, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath"},
-{Relationship::FONT, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/font"},
-{Relationship::FONTTABLE, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable"},
-{Relationship::FOOTER, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer"},
-{Relationship::FOOTNOTES, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes"},
-{Relationship::GLOSSARYDOCUMENT, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/glossaryDocument"},
-{Relationship::HDPHOTO, 
"http://schemas.microsoft.com/office/2007/relationships/hdphoto"},
-{Relationship::HEADER, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/header"},
-{Relationship::HYPERLINK, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"},
-{Relationship::IMAGE, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"},
-{Relationship::MEDIA, 
"http://schemas.microsoft.com/office/2007/relationships/media"},
-{Relationship::NOTESMASTER, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster"},
-{Relationship::NOTESSLIDE, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide"},
-{Relationship::NUMBERING, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering"},
-{Relationship::OFFICEDOCUMENT, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"},
-{Relationship::OLEOBJECT, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject"},
-{Relationship::PACKAGE, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/package"},
-{Relationship::PRESPROPS, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps"},
-{Relationship::SETTINGS, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings"},
-{Relationship::SHAREDSTRINGS, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings"},
-{Relationship::SLIDE, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide"},
-{Relationship::SLIDELAYOUT, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout"},
-{Relationship::SLIDEMASTER, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster"},
-{Relationship::STYLES, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"},
-{Relationship::THEME, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"},
-{Relationship::VBAPROJECT, 
"http://schemas.microsoft.com/office/2006/relationships/vbaProject"},
-{Relationship::VIDEO, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video"},
-{Relationship::AUDIO, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/audio"},
-{Relationship::VMLDRAWING, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing"},
-{Relationship::WORDVBADATA, 
"http://schemas.microsoft.com/office/2006/relationships/wordVbaData"},
-{Relationship::WORKSHEET, 
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"}
+{Relationship::ACTIVEXCONTROLBINARY, 
u"http://schemas.microsoft.com/office/2006/relationships/activeXControlBinary"},
+{Relationship::CHART, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart"},
+{Relationship::CHARTUSERSHAPES, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartUserShapes"},
+{Relationship::COMMENTS, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments"},
+{Relationship::COMMENTAUTHORS, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/commentAuthors"},
+{Relationship::COMMENTSEXTENDED, 
u"http://schemas.microsoft.com/office/2011/relationships/commentsExtended"},
+{Relationship::CONTROL, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/control"},
+{Relationship::CTRLPROP, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/ctrlProp"},
+{Relationship::CUSTOMXML, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml"},
+{Relationship::CUSTOMXMLPROPS, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps"},
+{Relationship::DIAGRAMCOLORS, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramColors"},
+{Relationship::DIAGRAMDATA, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramData"},
+{Relationship::DIAGRAMDRAWING, 
u"http://schemas.microsoft.com/office/2007/relationships/diagramDrawing"},
+{Relationship::DIAGRAMLAYOUT, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramLayout"},
+{Relationship::DIAGRAMQUICKSTYLE, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramQuickStyle"},
+{Relationship::DRAWING, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing"},
+{Relationship::ENDNOTES, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes"},
+{Relationship::EXTERNALLINKPATH, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath"},
+{Relationship::FONT, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/font"},
+{Relationship::FONTTABLE, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable"},
+{Relationship::FOOTER, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer"},
+{Relationship::FOOTNOTES, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes"},
+{Relationship::GLOSSARYDOCUMENT, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/glossaryDocument"},
+{Relationship::HDPHOTO, 
u"http://schemas.microsoft.com/office/2007/relationships/hdphoto"},
+{Relationship::HEADER, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/header"},
+{Relationship::HYPERLINK, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"},
+{Relationship::IMAGE, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"},
+{Relationship::MEDIA, 
u"http://schemas.microsoft.com/office/2007/relationships/media"},
+{Relationship::NOTESMASTER, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster"},
+{Relationship::NOTESSLIDE, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide"},
+{Relationship::NUMBERING, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering"},
+{Relationship::OFFICEDOCUMENT, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"},
+{Relationship::OLEOBJECT, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject"},
+{Relationship::PACKAGE, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/package"},
+{Relationship::PRESPROPS, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps"},
+{Relationship::SETTINGS, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings"},
+{Relationship::SHAREDSTRINGS, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings"},
+{Relationship::SLIDE, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide"},
+{Relationship::SLIDELAYOUT, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout"},
+{Relationship::SLIDEMASTER, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster"},
+{Relationship::STYLES, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"},
+{Relationship::THEME, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"},
+{Relationship::VBAPROJECT, 
u"http://schemas.microsoft.com/office/2006/relationships/vbaProject"},
+{Relationship::VIDEO, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video"},
+{Relationship::AUDIO, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/audio"},
+{Relationship::VMLDRAWING, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing"},
+{Relationship::WORDVBADATA, 
u"http://schemas.microsoft.com/office/2006/relationships/wordVbaData"},
+{Relationship::WORKSHEET, 
u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"}
diff --git a/writerfilter/Library_writerfilter.mk 
b/writerfilter/Library_writerfilter.mk
index 3e0662b4fb35..85afb7e598cd 100644
--- a/writerfilter/Library_writerfilter.mk
+++ b/writerfilter/Library_writerfilter.mk
@@ -56,6 +56,7 @@ $(eval $(call gb_Library_use_externals,writerfilter,\
        icuuc \
        icu_headers \
        libxml2 \
+       frozen \
 ))
 
 $(eval $(call gb_Library_add_exception_objects,writerfilter,\
diff --git a/writerfilter/source/dmapper/PropertyIds.cxx 
b/writerfilter/source/dmapper/PropertyIds.cxx
index f809d54432c8..623161135a26 100644
--- a/writerfilter/source/dmapper/PropertyIds.cxx
+++ b/writerfilter/source/dmapper/PropertyIds.cxx
@@ -18,13 +18,16 @@
  */
 #include <rtl/ustring.hxx>
 #include "PropertyIds.hxx"
-#include <unordered_map>
+#include <frozen/bits/defines.h>
+#include <frozen/bits/elsa_std.h>
+#include <frozen/unordered_map.h>
 
 namespace writerfilter::dmapper{
 
-const OUString & getPropertyName( PropertyIds eId )
+namespace
 {
-    static const std::unordered_map<PropertyIds, OUString> map {
+    constexpr const frozen::unordered_map<PropertyIds, std::u16string_view, 
347> constPropertyMap
+    {
         { PROP_CHAR_WEIGHT, u"CharWeight"},
         { PROP_CHAR_POSTURE, u"CharPosture"},
         { PROP_CHAR_STRIKEOUT, u"CharStrikeout"},
@@ -373,7 +376,15 @@ const OUString & getPropertyName( PropertyIds eId )
         { PROP_PARA_CONNECT_BORDERS, u"ParaIsConnectBorder"},
         { PROP_DECORATIVE, u"Decorative"},
     };
-    return map.at(eId);
+} // end anonymous ns
+
+OUString getPropertyName( PropertyIds eId )
+{
+    auto iterator = constPropertyMap.find(eId);
+    if (iterator != constPropertyMap.end())
+        return OUString(iterator->second);
+
+    return OUString();
 }
 
 bool isCharacterProperty( const PropertyIds eId )
diff --git a/writerfilter/source/dmapper/PropertyIds.hxx 
b/writerfilter/source/dmapper/PropertyIds.hxx
index 60d6537ae6c2..d3213b7be073 100644
--- a/writerfilter/source/dmapper/PropertyIds.hxx
+++ b/writerfilter/source/dmapper/PropertyIds.hxx
@@ -377,7 +377,7 @@ enum PropertyIds
     };
 
 //Returns the UNO string equivalent to eId.
-const OUString & getPropertyName(PropertyIds eId);
+OUString getPropertyName(PropertyIds eId);
 
 bool isCharacterProperty(const PropertyIds eId);
 
diff --git a/xmloff/Library_xo.mk b/xmloff/Library_xo.mk
index d2b539d514d9..8e7f3208bfe9 100644
--- a/xmloff/Library_xo.mk
+++ b/xmloff/Library_xo.mk
@@ -41,7 +41,10 @@ $(eval $(call gb_Library_add_defs,xo,\
     -DXMLOFF_DLLIMPLEMENTATION \
 ))
 
-$(eval $(call gb_Library_use_external,xo,boost_headers))
+$(eval $(call gb_Library_use_externals,xo,\
+    boost_headers \
+    frozen \
+))
 
 $(eval $(call gb_Library_use_custom_headers,xo,\
        officecfg/registry \
diff --git a/xmloff/source/style/XMLRtlGutterPropertyHandler.cxx 
b/xmloff/source/style/XMLRtlGutterPropertyHandler.cxx
index 651406f0fa2b..34fa8f036f65 100644
--- a/xmloff/source/style/XMLRtlGutterPropertyHandler.cxx
+++ b/xmloff/source/style/XMLRtlGutterPropertyHandler.cxx
@@ -18,11 +18,10 @@
  */
 
 #include <XMLRtlGutterPropertyHandler.hxx>
-
-#include <set>
-
+#include <frozen/bits/defines.h>
+#include <frozen/bits/elsa_std.h>
+#include <frozen/unordered_set.h>
 #include <com/sun/star/uno/Any.hxx>
-
 #include <xmloff/xmluconv.hxx>
 
 using namespace com::sun::star;
@@ -31,13 +30,18 @@ XMLRtlGutterPropertyHandler::XMLRtlGutterPropertyHandler() 
= default;
 
 XMLRtlGutterPropertyHandler::~XMLRtlGutterPropertyHandler() = default;
 
+namespace
+{
+constexpr const frozen::unordered_set<std::u16string_view, 4> constRtlModes{ 
u"rl-tb", u"tb-rl",
+                                                                             
u"rl", u"tb" };
+}
+
 bool XMLRtlGutterPropertyHandler::importXML(const OUString& rStrImpValue, 
uno::Any& rValue,
                                             const SvXMLUnitConverter&) const
 {
     // Infer RtlGutter from WritingMode.
-    std::set<OUString> aRtlModes = { "rl-tb", "tb-rl", "rl", "tb" };
-    auto it = aRtlModes.find(rStrImpValue);
-    rValue <<= (it != aRtlModes.end());
+    auto it = constRtlModes.find(rStrImpValue);
+    rValue <<= (it != constRtlModes.end());
     return true;
 }
 

Reply via email to