Kaydet (Commit) 2d3d9426 authored tarafından Luke Deller's avatar Luke Deller Kaydeden (comit) Luboš Luňák

Fix style renaming confusion in ww8 filter (solves fdo#63603)

- Mapping LO default style to Word "Normal" style for docx output used a
  hard coded style name, so it broke when LO's default style was renamed
  in 4.0 (plus it would never have worked for non-English languages)
- This renaming did not cater for nameclashes, leading to fdo#63603
- Similar renaming when importing doc styles did cater for nameclashes,
  but had a minor bug in that

Change-Id: Id23f3021c6507b474c16e93abf43ba748606ebc7
Reviewed-on: https://gerrit.libreoffice.org/3743Reviewed-by: 's avatarLuboš Luňák <l.lunak@suse.cz>
Tested-by: 's avatarLuboš Luňák <l.lunak@suse.cz>
üst 6b30f7c3
......@@ -300,11 +300,13 @@ namespace myImplHelpers
aName.InsertAscii("WW-" , 0);
sal_Int32 nI = 1;
String aBaseName = aName;
while (
0 != (pColl = maHelper.GetStyle(aName)) &&
(nI < SAL_MAX_INT32)
)
{
aName = aBaseName;
aName += OUString::number(nI++);
}
}
......
......@@ -527,8 +527,32 @@ void MSWordStyles::OutputStyle( SwFmt* pFmt, sal_uInt16 nPos )
GetStyleData( pFmt, bFmtColl, nBase, nWwNext );
String aName = pFmt->GetName();
if ( aName.EqualsAscii( "Default" ) )
// We want to map LO's default style to Word's "Normal" style.
// Word looks for this specific style name when reading docx files.
// (It must be the English word regardless of language settings)
if ( nPos == 0 ) {
assert( pFmt->GetPoolFmtId() == RES_POOLCOLL_STANDARD );
aName = OUString("Normal");
} else if (aName.EqualsIgnoreCaseAscii("Normal")) {
// If LO has a style named "Normal"(!) rename it to something unique
aName.InsertAscii("LO-" , 0);
String aBaseName = aName;
// Check if we still have a clash, in which case we add a suffix
for ( int nSuffix = 0; ; ++nSuffix ) {
bool clash=false;
for ( int n = 1; n < nUsedSlots; ++n )
if ( pFmtA[n] &&
pFmtA[n]->GetName().EqualsIgnoreCaseAscii(aName) )
{
clash = true;
break;
}
if (!clash)
break;
aName = aBaseName;
aName += OUString::number(++nSuffix);
}
}
m_rExport.AttrOutput().StartStyle( aName, bFmtColl,
nBase, nWwNext, GetWWId( *pFmt ), nPos,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment