[PATCH libreoffice-3-6] fdo#60668: filter out fieldmark chars from Index entries:
Michael Stahl (via Code Review)
gerrit at gerrit.libreoffice.org
Wed Feb 13 02:18:32 PST 2013
Hi,
I have submitted a patch for review:
https://gerrit.libreoffice.org/2134
To pull it, you can do:
git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/34/2134/1
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
---
M sw/source/core/txtnode/ndtxt.cxx
1 file changed, 31 insertions(+), 14 deletions(-)
diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx
index e9e30a7..46ef849 100644
--- a/sw/source/core/txtnode/ndtxt.cxx
+++ b/sw/source/core/txtnode/ndtxt.cxx
@@ -2965,9 +2965,8 @@
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 @@
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;
--
To view, visit https://gerrit.libreoffice.org/2134
To unsubscribe, visit https://gerrit.libreoffice.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie5ae2a82da9a6618bb451efabfd38769c495cc93
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-3-6
Gerrit-Owner: Michael Stahl <mstahl at redhat.com>
More information about the LibreOffice
mailing list