summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2013-02-12 19:43:16 +0100
committerMiklos Vajna <vmiklos@suse.cz>2013-02-14 08:54:48 +0000
commit1c6f5a16d83a87d7f2233e5c7e60ab5f39546225 (patch)
tree53bf68253de3f6e8358009b53da1b3db7fd0fd28 /sw
parent59e5098128cd445ed70de418cb787cfa94a65249 (diff)
fdo#60668: filter out fieldmark chars from Index entries:
SwTxtNode::GetExpandTxt must filter out all dummy characters used to represent fields, footnotes, field marks, etc. (cherry picked from commit e31807c83009655c342c929a118f0d28a8f63ddc) Conflicts: sw/source/core/txtnode/ndtxt.cxx Change-Id: Ie5ae2a82da9a6618bb451efabfd38769c495cc93 Reviewed-on: https://gerrit.libreoffice.org/2134 Reviewed-by: Miklos Vajna <vmiklos@suse.cz> Tested-by: Miklos Vajna <vmiklos@suse.cz>
Diffstat (limited to 'sw')
-rw-r--r--sw/source/core/txtnode/ndtxt.cxx45
1 files changed, 31 insertions, 14 deletions
diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx
index e9e30a703b7a..46ef84926d94 100644
--- a/sw/source/core/txtnode/ndtxt.cxx
+++ b/sw/source/core/txtnode/ndtxt.cxx
@@ -2965,9 +2965,8 @@ sal_Bool SwTxtNode::GetExpandTxt( SwTxtNode& rDestNd, const SwIndex* pDestIdx,
sTmpText.SearchAndReplaceAll('\t', ' ');
// mask hidden characters
- const xub_Unicode cChar = CH_TXTATR_BREAKWORD;
- sal_uInt16 nHiddenChrs =
- SwScriptInfo::MaskHiddenRanges( *this, sTmpText, 0, sTmpText.Len(), cChar );
+ const sal_Unicode cChar = CH_TXTATR_BREAKWORD;
+ SwScriptInfo::MaskHiddenRanges(*this, sTmpText, 0, sTmpText.Len(), cChar);
sTmpText = sTmpText.Copy( nIdx, nLen );
rDestNd.InsertText( sTmpText, aDestIdx );
@@ -3070,22 +3069,40 @@ sal_Bool SwTxtNode::GetExpandTxt( SwTxtNode& rDestNd, const SwIndex* pDestIdx,
rDestNd.InsertText( GetNumString(), aDestIdx );
}
- if ( nHiddenChrs > 0 )
+ aDestIdx = 0;
+ sal_Int32 nStartDelete(-1);
+ while (aDestIdx < rDestNd.GetTxt().Len())
{
- aDestIdx = 0;
- while ( aDestIdx < rDestNd.GetTxt().Len() )
+ sal_Unicode const cur(rDestNd.GetTxt().GetChar(aDestIdx.GetIndex()));
+ if ( (cChar == cur) // filter substituted hidden text
+ || (CH_TXT_ATR_FIELDSTART == cur) // filter all fieldmarks
+ || (CH_TXT_ATR_FIELDEND == cur)
+ || (CH_TXT_ATR_FORMELEMENT == cur))
{
- if ( cChar == rDestNd.GetTxt().GetChar( aDestIdx.GetIndex() ) )
+ if (-1 == nStartDelete)
{
- xub_StrLen nIndex = aDestIdx.GetIndex();
- while ( nIndex < rDestNd.GetTxt().Len() &&
- cChar == rDestNd.GetTxt().GetChar( ++nIndex ) )
- ;
- rDestNd.EraseText( aDestIdx, nIndex - aDestIdx.GetIndex() );
+ nStartDelete = aDestIdx.GetIndex(); // start deletion range
}
- else
- ++aDestIdx;
+ ++aDestIdx;
+ if (aDestIdx < rDestNd.GetTxt().Len())
+ {
+ continue;
+ } // else: end of paragraph => delete, see below
}
+ else
+ {
+ if (-1 == nStartDelete)
+ {
+ ++aDestIdx;
+ continue;
+ } // else: delete, see below
+ }
+ assert(-1 != nStartDelete); // without delete range, would have contined
+ rDestNd.EraseText(
+ SwIndex(&rDestNd, static_cast<xub_StrLen>(nStartDelete)),
+ aDestIdx.GetIndex() - nStartDelete);
+ assert(aDestIdx.GetIndex() == nStartDelete);
+ nStartDelete = -1; // reset
}
return sal_True;