diff options
Diffstat (limited to 'chart2')
-rw-r--r-- | chart2/qa/extras/chart2import.cxx | 22 | ||||
-rw-r--r-- | chart2/qa/extras/data/docx/tdf139658.docx | bin | 0 -> 27488 bytes | |||
-rw-r--r-- | chart2/source/tools/InternalDataProvider.cxx | 12 |
3 files changed, 32 insertions, 2 deletions
diff --git a/chart2/qa/extras/chart2import.cxx b/chart2/qa/extras/chart2import.cxx index 3a8b77f48cdd..0c142a4e7f97 100644 --- a/chart2/qa/extras/chart2import.cxx +++ b/chart2/qa/extras/chart2import.cxx @@ -174,6 +174,7 @@ public: void testTdf137874(); void testTdfCustomShapePos(); void testTdf121281(); + void testTdf139658(); CPPUNIT_TEST_SUITE(Chart2ImportTest); CPPUNIT_TEST(Fdo60083); @@ -297,6 +298,7 @@ public: CPPUNIT_TEST(testTdf137874); CPPUNIT_TEST(testTdfCustomShapePos); CPPUNIT_TEST(testTdf121281); + CPPUNIT_TEST(testTdf139658); CPPUNIT_TEST_SUITE_END(); @@ -2895,6 +2897,26 @@ void Chart2ImportTest::testTdf121281() CPPUNIT_ASSERT_GREATEREQUAL(static_cast<sal_Int32>(0), aLabelPosition.Y); } +void Chart2ImportTest::testTdf139658() +{ + load(u"/chart2/qa/extras/data/docx/", "tdf139658.docx"); + uno::Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY); + CPPUNIT_ASSERT(xChartDoc.is()); + Reference<chart2::XInternalDataProvider> xInternalProvider(xChartDoc->getDataProvider(), + uno::UNO_QUERY); + CPPUNIT_ASSERT(xInternalProvider.is()); + + Reference<chart::XComplexDescriptionAccess> xDescAccess(xInternalProvider, uno::UNO_QUERY); + CPPUNIT_ASSERT(xDescAccess.is()); + + // Get the category labels. + Sequence<OUString> aCategories = xDescAccess->getRowDescriptions(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), aCategories.getLength()); + CPPUNIT_ASSERT_EQUAL(OUString("category1"), aCategories[0]); + CPPUNIT_ASSERT_EQUAL(OUString("\"category2\""), aCategories[1]); + CPPUNIT_ASSERT_EQUAL(OUString("category\"3"), aCategories[2]); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Chart2ImportTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/chart2/qa/extras/data/docx/tdf139658.docx b/chart2/qa/extras/data/docx/tdf139658.docx Binary files differnew file mode 100644 index 000000000000..59deda9f83f9 --- /dev/null +++ b/chart2/qa/extras/data/docx/tdf139658.docx diff --git a/chart2/source/tools/InternalDataProvider.cxx b/chart2/source/tools/InternalDataProvider.cxx index 1b2f6ae28351..9595cf2375d7 100644 --- a/chart2/source/tools/InternalDataProvider.cxx +++ b/chart2/source/tools/InternalDataProvider.cxx @@ -518,7 +518,14 @@ InternalDataProvider::createDataSequenceFromArray( const OUString& rArrayStr, st bool bInQuote = false; for (; p != pEnd; ++p) { - if (*p == '"') + // Skip next "" within the title text: it's an escaped double quotation mark. + if (bInQuote && *p == '"' && *(p + 1) == '"') + { + if (!pElem) + pElem = p; + ++p; + } + else if (*p == '"') { bInQuote = !bInQuote; if (bInQuote) @@ -534,7 +541,8 @@ InternalDataProvider::createDataSequenceFromArray( const OUString& rArrayStr, st // Non empty string if (!aElem.isEmpty()) bAllNumeric = false; - aRawElems.push_back(aElem); + // Restore also escaped double quotation marks + aRawElems.push_back(aElem.replaceAll("\"\"", "\"")); pElem = nullptr; aElem.clear(); |