include/oox/token/tokenmap.hxx                 |   11 +++++++++++
 oox/inc/drawingml/connectorhelper.hxx          |    8 --------
 oox/inc/drawingml/customshapeproperties.hxx    |    2 +-
 oox/qa/token/tokenmap-test.cxx                 |   13 +++++++++++++
 oox/source/drawingml/connectorhelper.cxx       |   13 ++-----------
 oox/source/drawingml/customshapeproperties.cxx |    4 ++--
 oox/source/drawingml/shape.cxx                 |   13 ++-----------
 oox/source/drawingml/table/tablecell.cxx       |    5 +----
 8 files changed, 32 insertions(+), 37 deletions(-)

New commits:
commit 270b7efe92751a46c3d85e856b932a365c5f5b73
Author:     Regina Henschel <[email protected]>
AuthorDate: Thu Nov 16 15:19:08 2023 +0100
Commit:     Regina Henschel <[email protected]>
CommitDate: Fri Nov 17 15:33:41 2023 +0100

    Add getUnicodeTokenName() to StaticTokenMap and use...
    
    it in several places. Currently these places get a Sequence<sal_Int8>
    by call of StaticTokenMap().getUtf8TokenName() and immediately after
    that generate an OUString from it using reinterpret_cast<const char*>
    and the OUString ctor with 8-Bit character buffer array. The patch
    moves this conversion to StaticTokenMap.
    
    Change-Id: Ia2af110e2a0f1708e0685115d325c1c12cab3857
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159514
    Tested-by: Jenkins
    Reviewed-by: Regina Henschel <[email protected]>

diff --git a/include/oox/token/tokenmap.hxx b/include/oox/token/tokenmap.hxx
index db71c24c2371..4358822c360f 100644
--- a/include/oox/token/tokenmap.hxx
+++ b/include/oox/token/tokenmap.hxx
@@ -76,6 +76,17 @@ public:
         return getTokenPerfectHash( pToken, nLength );
     }
 
+    /** Returns the name of the passed token identifier as OUString. */
+    OUString getUnicodeTokenName(sal_Int32 nToken) const
+    {
+        SAL_WARN_IF(nToken < 0 || nToken >= XML_TOKEN_COUNT, "oox", "Wrong 
nToken parameter");
+        OUString const ret((0 <= nToken && nToken < XML_TOKEN_COUNT)
+            ? rtl::OUString(reinterpret_cast<const 
char*>(maTokenNames[nToken].getConstArray()),
+                            maTokenNames[nToken].getLength(), 
RTL_TEXTENCODING_UTF8)
+            : OUString());
+        return ret;
+    }
+
 private:
     static sal_Int32 getTokenPerfectHash( const char *pToken, sal_Int32 
nLength );
     static const css::uno::Sequence< sal_Int8 > EMPTY_BYTE_SEQ;
diff --git a/oox/inc/drawingml/connectorhelper.hxx 
b/oox/inc/drawingml/connectorhelper.hxx
index 1e875ab8ee95..f5409d635270 100644
--- a/oox/inc/drawingml/connectorhelper.hxx
+++ b/oox/inc/drawingml/connectorhelper.hxx
@@ -24,14 +24,6 @@
 
 namespace ConnectorHelper
 {
-/* ToDo: Other place? It uses getShapePresetTypeName() and that is only used 
in shape.cxx in
-   Shape::createAndInsert() for "mso-orig-shape-type" property in GrabBag and 
for msConnectorName.
-   In both cases it is immediately converted to OUString. So perhaps let
-   getShapePresetTypeName() return an OUString directly?
-*/
-rtl::OUString getShapePresetTypeNameOUString(
-    const oox::drawingml::CustomShapePropertiesPtr& pCustomShapePropertiesPtr);
-
 /**
  * Some preset shapes use the default connector site but in order right, 
bottom, left, top.
  * The function detects this.
diff --git a/oox/inc/drawingml/customshapeproperties.hxx 
b/oox/inc/drawingml/customshapeproperties.hxx
index 61a151d9aa09..c699ffddcce7 100644
--- a/oox/inc/drawingml/customshapeproperties.hxx
+++ b/oox/inc/drawingml/customshapeproperties.hxx
@@ -101,7 +101,7 @@ public:
                         const css::awt::Size &aSize );
 
     sal_Int32 getShapePresetType() const { return mnShapePresetType; }
-    css::uno::Sequence< sal_Int8 > const & getShapePresetTypeName() const;
+    OUString getShapePresetTypeName() const;
     void setShapePresetType( sal_Int32 nShapePresetType ){ mnShapePresetType = 
nShapePresetType; };
     bool                                getShapeTypeOverride() const { return 
mbShapeTypeOverride; };
     void                                setShapeTypeOverride( bool 
bShapeTypeOverride ) { mbShapeTypeOverride = bShapeTypeOverride; };
diff --git a/oox/qa/token/tokenmap-test.cxx b/oox/qa/token/tokenmap-test.cxx
index 058f7c16ebbf..e30b6aef806b 100644
--- a/oox/qa/token/tokenmap-test.cxx
+++ b/oox/qa/token/tokenmap-test.cxx
@@ -23,10 +23,12 @@ class TokenmapTest: public CppUnit::TestFixture
 {
 public:
     void test_roundTrip();
+    void test_roundTripUnicode();
 
     CPPUNIT_TEST_SUITE(TokenmapTest);
 
     CPPUNIT_TEST(test_roundTrip);
+    CPPUNIT_TEST(test_roundTripUnicode);
     CPPUNIT_TEST_SUITE_END();
 
 private:
@@ -46,6 +48,17 @@ void TokenmapTest::test_roundTrip()
     }
 }
 
+void TokenmapTest::test_roundTripUnicode()
+{
+    for (sal_Int32 nToken = 0; nToken < XML_TOKEN_COUNT; ++nToken)
+    {
+        // check that the getIdentifier <-> getToken roundtrip works for 
OUString
+        OUString sName = tokenMap.getUnicodeTokenName(nToken);
+        sal_Int32 ret = oox::TokenMap::getTokenFromUnicode(sName);
+        CPPUNIT_ASSERT_EQUAL(ret, nToken);
+    }
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(TokenmapTest);
 
 }
diff --git a/oox/source/drawingml/connectorhelper.cxx 
b/oox/source/drawingml/connectorhelper.cxx
index 82bd92a568b1..ff2c1fed42b9 100644
--- a/oox/source/drawingml/connectorhelper.cxx
+++ b/oox/source/drawingml/connectorhelper.cxx
@@ -38,15 +38,6 @@
 
 using namespace ::com::sun::star;
 
-OUString ConnectorHelper::getShapePresetTypeNameOUString(
-    const oox::drawingml::CustomShapePropertiesPtr& pCustomShapePropertiesPtr)
-{
-    return rtl::OUString(reinterpret_cast<const char*>(
-                             
pCustomShapePropertiesPtr->getShapePresetTypeName().getConstArray()),
-                         
pCustomShapePropertiesPtr->getShapePresetTypeName().getLength(),
-                         RTL_TEXTENCODING_UTF8);
-}
-
 // These shapes have no gluepoints defined in their mso_CustomShape struct, 
thus the gluepoint
 // adaption to default gluepoints will be done. Other shapes having no 
gluepoint defined in the
 // mso_CustomShape struct, have gluepoints in order top-left-bottom-right in 
OOXML. But the shapes
@@ -306,8 +297,8 @@ void 
ConnectorHelper::applyConnections(oox::drawingml::ShapePtr& rConnector,
                 // our default gluepoints are used. The order of the default 
gluepoints might differ
                 // from the order of the OOXML gluepoints. We try to change 
nGlueId so, that the
                 // connector attaches to a default gluepoint at the same side 
as it attaches in OOXML.
-                const OUString sShapeType = 
ConnectorHelper::getShapePresetTypeNameOUString(
-                    pItem->second->getCustomShapeProperties());
+                const OUString sShapeType
+                    = 
pItem->second->getCustomShapeProperties()->getShapePresetTypeName();
                 if (ConnectorHelper::hasClockwiseCxn(sShapeType))
                     nGlueId = (nGlueId + 1) % 4;
                 else
diff --git a/oox/source/drawingml/customshapeproperties.cxx 
b/oox/source/drawingml/customshapeproperties.cxx
index 0ff24fce1789..321bc9bf537a 100644
--- a/oox/source/drawingml/customshapeproperties.cxx
+++ b/oox/source/drawingml/customshapeproperties.cxx
@@ -54,9 +54,9 @@ CustomShapeProperties::CustomShapeProperties()
 {
 }
 
-uno::Sequence< sal_Int8 > const & 
CustomShapeProperties::getShapePresetTypeName() const
+OUString CustomShapeProperties::getShapePresetTypeName() const
 {
-    return StaticTokenMap().getUtf8TokenName( mnShapePresetType );
+    return StaticTokenMap().getUnicodeTokenName(mnShapePresetType);
 }
 
 sal_Int32 CustomShapeProperties::SetCustomShapeGuideValue( std::vector< 
CustomShapeGuide >& rGuideList, const CustomShapeGuide& rGuide )
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index 01798c344631..c42a9f7820a3 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -1377,11 +1377,7 @@ Reference< XShape > const & Shape::createAndInsert(
                     aGrabBag.realloc( length+1);
                     auto pGrabBag = aGrabBag.getArray();
                     pGrabBag[length].Name = "mso-orig-shape-type";
-                    uno::Sequence< sal_Int8 > const & aNameSeq =
-                        mpCustomShapePropertiesPtr->getShapePresetTypeName();
-                    OUString sShapePresetTypeName(reinterpret_cast< const 
char* >(
-                        aNameSeq.getConstArray()), aNameSeq.getLength(), 
RTL_TEXTENCODING_UTF8);
-                    pGrabBag[length].Value <<= sShapePresetTypeName;
+                    pGrabBag[length].Value <<= 
mpCustomShapePropertiesPtr->getShapePresetTypeName();
                     
propertySet->setPropertyValue("FrameInteropGrabBag",uno::Any(aGrabBag));
                 }
                 //If the text box has links then save the link information so 
that
@@ -1766,12 +1762,7 @@ Reference< XShape > const & Shape::createAndInsert(
 
         if (bIsConnectorShape)
         {
-            OUString sConnectorShapePresetTypeName(
-                reinterpret_cast<const char*>(
-                    
mpCustomShapePropertiesPtr->getShapePresetTypeName().getConstArray()),
-                
mpCustomShapePropertiesPtr->getShapePresetTypeName().getLength(),
-                RTL_TEXTENCODING_UTF8);
-            msConnectorName = sConnectorShapePresetTypeName;
+            msConnectorName = 
mpCustomShapePropertiesPtr->getShapePresetTypeName();
 
             auto aAdjustmentList = 
mpCustomShapePropertiesPtr->getAdjustmentGuideList();
             for (size_t i = 0; i < aAdjustmentList.size(); i++)
diff --git a/oox/source/drawingml/table/tablecell.cxx 
b/oox/source/drawingml/table/tablecell.cxx
index 9d16bce09d17..687c987fe242 100644
--- a/oox/source/drawingml/table/tablecell.cxx
+++ b/oox/source/drawingml/table/tablecell.cxx
@@ -597,10 +597,7 @@ void TableCell::pushToXCell( const 
::oox::core::XmlFilterBase& rFilterBase, cons
     else if ( getVertToken() != XML_horz && getVertToken() != XML_eaVert )
     {
         // put the vert value in the grab bag for roundtrip
-        const Sequence<sal_Int8>& aTokenNameSeq = 
StaticTokenMap().getUtf8TokenName(getVertToken());
-        const OUString aTokenName{ reinterpret_cast<const 
char*>(aTokenNameSeq.getConstArray()),
-                                   aTokenNameSeq.getLength(), 
RTL_TEXTENCODING_UTF8 };
-
+        const OUString 
aTokenName(StaticTokenMap().getUnicodeTokenName(getVertToken()));
         Sequence<PropertyValue> aGrabBag;
         xPropSet->getPropertyValue("CellInteropGrabBag") >>= aGrabBag;
         PropertyValue aPropertyValue = 
comphelper::makePropertyValue("mso-tcPr-vert-value", aTokenName);

Reply via email to