summaryrefslogtreecommitdiff
path: root/writerfilter/source/dmapper/NumberingManager.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'writerfilter/source/dmapper/NumberingManager.cxx')
-rw-r--r--writerfilter/source/dmapper/NumberingManager.cxx14
1 files changed, 8 insertions, 6 deletions
diff --git a/writerfilter/source/dmapper/NumberingManager.cxx b/writerfilter/source/dmapper/NumberingManager.cxx
index f7ee07c9c98c..62706d1a5614 100644
--- a/writerfilter/source/dmapper/NumberingManager.cxx
+++ b/writerfilter/source/dmapper/NumberingManager.cxx
@@ -44,6 +44,7 @@
#include <comphelper/sequence.hxx>
#include <comphelper/propertyvalue.hxx>
#include <comphelper/string.hxx>
+#include <regex>
using namespace com::sun::star;
@@ -676,18 +677,19 @@ void ListsManager::lcl_attribute( Id nName, Value& rVal )
{
case NS_ooxml::LN_CT_LevelText_val:
{
- //this strings contains the definition of the level
- //the level number is marked as %n
- //these numbers can be mixed randomly together with separators pre- and suffixes
- //the Writer supports only a number of upper levels to show, separators is always a dot
- //and each level can have a prefix and a suffix
if(pCurrentLvl)
{
//if the BulletChar is a soft-hyphen (0xad)
//replace it with a hard-hyphen (0x2d)
//-> this fixes missing hyphen export in PDF etc.
// see tdf#101626
- pCurrentLvl->SetBulletChar( rVal.getString().replace( 0xad, 0x2d ) );
+ std::string sLevelText = rVal.getString().replace(0xad, 0x2d).toUtf8().getStr();
+
+ // DOCX level-text contains levels definition in format "%1.%2.%3"
+ // we need to convert it to LO internal representation: "%1%.%2%.%3%"
+ std::regex aTokenRegex("(%\\d)");
+ sLevelText = std::regex_replace(sLevelText, aTokenRegex, "$1%");
+ pCurrentLvl->SetBulletChar( OUString::fromUtf8(sLevelText) );
}
}
break;