[PATCH libreoffice-4-0] fdo#60668: filter out fieldmark chars from Index entries:

Michael Stahl (via Code Review) gerrit at gerrit.libreoffice.org
Tue Feb 12 10:58:31 PST 2013


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/2122

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/22/2122/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.

Change-Id: Ie5ae2a82da9a6618bb451efabfd38769c495cc93
(cherry picked from commit e31807c83009655c342c929a118f0d28a8f63ddc)
---
M sw/source/core/txtnode/ndtxt.cxx
1 file changed, 30 insertions(+), 13 deletions(-)



diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx
index 4fedcfa..eb2dd25 100644
--- a/sw/source/core/txtnode/ndtxt.cxx
+++ b/sw/source/core/txtnode/ndtxt.cxx
@@ -2959,8 +2959,7 @@
 
     // mask hidden characters
     const sal_Unicode cChar = CH_TXTATR_BREAKWORD;
-    sal_uInt16 nHiddenChrs =
-        SwScriptInfo::MaskHiddenRanges( *this, sTmpText, 0, sTmpText.Len(), cChar );
+    SwScriptInfo::MaskHiddenRanges(*this, sTmpText, 0, sTmpText.Len(), cChar);
 
     sTmpText = sTmpText.Copy( nIdx, nLen );
     rDestNd.InsertText( sTmpText, aDestIdx );
@@ -3063,22 +3062,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/2122
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie5ae2a82da9a6618bb451efabfd38769c495cc93
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-4-0
Gerrit-Owner: Michael Stahl <mstahl at redhat.com>


More information about the LibreOffice mailing list