diff options
author | Caolán McNamara <caolanm@redhat.com> | 2012-10-26 11:47:13 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2012-10-26 12:12:03 +0100 |
commit | 08ffb7bc5ec4472126762f4cb9677349b61122f6 (patch) | |
tree | fc3843eb08548cae81671ca2f5542505f3238995 | |
parent | 55619c1028b31f55c5b205ce3615bd606f5414f0 (diff) |
Resolves: fdo#50285 merging props unsafe with intermediate charstyle prop
Its a nice idea to merge properties of the same type and value if one starts
and the same place the last one ended. But character styles are properties as
well, so if we have character-style+superscript on range a, and
character-style+superscript on range b and merge these so that we end up as...
character-style on range a, superscript on range a+b, and character-style on
range b then that clearly gives the wrong result if applied in that order.
So its only safe to merge if there are no intermediate properties that can
affect the merge candidates.
A regression from b3cee382f449aa69213dc21f7b1ba6a5356d2865
Change-Id: I541563d11265426736b840de068922eef8d45573
-rw-r--r-- | sw/source/filter/ww1/fltshell.cxx | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sw/source/filter/ww1/fltshell.cxx b/sw/source/filter/ww1/fltshell.cxx index 26930970b2fd..5e23c0205e4a 100644 --- a/sw/source/filter/ww1/fltshell.cxx +++ b/sw/source/filter/ww1/fltshell.cxx @@ -325,6 +325,8 @@ SwFltStackEntry* SwFltControlStack::SetAttr(const SwPosition& rPos, myEIter aI = maEntries.begin(); while (aI != maEntries.end()) { + bool bLastEntry = aI == maEntries.end() - 1; + SwFltStackEntry& rEntry = *aI; if (rEntry.bOpen) { @@ -350,7 +352,7 @@ SwFltStackEntry* SwFltControlStack::SetAttr(const SwPosition& rPos, { rEntry.bConsumedByField = consumedByField; rEntry.SetEndPos(rPos); - if (nAttrId == rEntry.pAttr->Which()) + if (bLastEntry && nAttrId == rEntry.pAttr->Which()) { //potential candidate for merging with an identical //property beginning at rPos @@ -377,7 +379,7 @@ SwFltStackEntry* SwFltControlStack::SetAttr(const SwPosition& rPos, //we advance to the next node, or finish processing the document if (rEntry.m_aPtPos.m_nNode.GetIndex() == aFltPos.m_nNode.GetIndex()) { - if (nAttrId == rEntry.pAttr->Which() && + if (bLastEntry && nAttrId == rEntry.pAttr->Which() && rEntry.m_aPtPos.m_nCntnt == aFltPos.m_nCntnt) { //potential candidate for merging with an identical |