Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/3741

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/41/3741/1

resolved fdo#63779 case-insensitive non-regex search broken

Broken with 531538892795bec909bb8baff6bbf9e19baf809e

Change-Id: I0302baee0532ab8f10853c648bf695a58cfe273c
(cherry picked from commit db46a7336e330516f4df4e41f6895aa1afb03450)
---
M i18npool/source/search/textsearch.cxx
1 file changed, 57 insertions(+), 12 deletions(-)



diff --git a/i18npool/source/search/textsearch.cxx b/i18npool/source/search/textsearch.cxx
index 997b01d..7762832 100644
--- a/i18npool/source/search/textsearch.cxx
+++ b/i18npool/source/search/textsearch.cxx
@@ -50,7 +50,7 @@
 using namespace ::com::sun::star::i18n;
 using namespace ::com::sun::star;
 
-static sal_Int32 COMPLEX_TRANS_MASK_TMP =
+static const sal_Int32 COMPLEX_TRANS_MASK_TMP =
     TransliterationModules_ignoreBaFa_ja_JP |
     TransliterationModules_ignoreIterationMark_ja_JP |
     TransliterationModules_ignoreTiJi_ja_JP |
@@ -59,10 +59,23 @@
     TransliterationModules_ignoreIandEfollowedByYa_ja_JP |
     TransliterationModules_ignoreKiKuFollowedBySa_ja_JP |
     TransliterationModules_ignoreProlongedSoundMark_ja_JP;
-static const sal_Int32 COMPLEX_TRANS_MASK = COMPLEX_TRANS_MASK_TMP | 
TransliterationModules_IGNORE_KANA | TransliterationModules_FULLWIDTH_HALFWIDTH;
-static const sal_Int32 SIMPLE_TRANS_MASK = ~(COMPLEX_TRANS_MASK | 
TransliterationModules_IGNORE_CASE | TransliterationModules_UPPERCASE_LOWERCASE | 
TransliterationModules_LOWERCASE_UPPERCASE);
-    // Above 2 transliteration is simple but need to take effect in
-    // complex transliteration
+
+// These 2 transliterations are simple but need to take effect in
+// complex transliteration.
+static const sal_Int32 COMPLEX_TRANS_MASK =
+    COMPLEX_TRANS_MASK_TMP |
+    TransliterationModules_IGNORE_KANA |
+    TransliterationModules_FULLWIDTH_HALFWIDTH;
+
+static const sal_Int32 SIMPLE_TRANS_MASK = ~COMPLEX_TRANS_MASK;
+
+// Regex patterns are case sensitive.
+static const sal_Int32 SIMPLE_TRANS_MASK_REPATTERN =
+    ~(COMPLEX_TRANS_MASK |
+            TransliterationModules_IGNORE_CASE |
+            TransliterationModules_UPPERCASE_LOWERCASE |
+            TransliterationModules_LOWERCASE_UPPERCASE);
+
 
 TextSearch::TextSearch(const Reference < XComponentContext > & rxContext)
         : m_xContext( rxContext )
@@ -123,14 +136,46 @@
 
     sSrchStr = aSrchPara.searchString;
 
-    // use transliteration here
-    if ( xTranslit.is() && aSrchPara.transliterateFlags & SIMPLE_TRANS_MASK )
-        sSrchStr = xTranslit->transliterateString2String(
-            aSrchPara.searchString, 0, aSrchPara.searchString.getLength());
+    // Transliterate search string.
+    if (aSrchPara.algorithmType == SearchAlgorithms_REGEXP)
+    {
+        if (aSrchPara.transliterateFlags & SIMPLE_TRANS_MASK_REPATTERN)
+        {
+            if ((aSrchPara.transliterateFlags & SIMPLE_TRANS_MASK_REPATTERN) !=
+                    (aSrchPara.transliterateFlags & SIMPLE_TRANS_MASK))
+            {
+                com::sun::star::uno::Reference< XExtendedTransliteration > xTranslitPattern(
+                         Transliteration::create( m_xContext ));
+                if (xTranslitPattern.is())
+                {
+                    xTranslitPattern->loadModule(
+                            (TransliterationModules)( aSrchPara.transliterateFlags & 
SIMPLE_TRANS_MASK_REPATTERN ),
+                            aSrchPara.Locale);
+                    sSrchStr = xTranslitPattern->transliterateString2String(
+                            aSrchPara.searchString, 0, aSrchPara.searchString.getLength());
+                }
+            }
+            else
+            {
+                if (xTranslit.is())
+                    sSrchStr = xTranslit->transliterateString2String(
+                            aSrchPara.searchString, 0, aSrchPara.searchString.getLength());
+            }
+            // xTranslit2 complex transliterated sSrchStr2 is not used in
+            // regex, see TextSearch::searchForward() and
+            // TextSearch::searchBackward()
+        }
+    }
+    else
+    {
+        if ( xTranslit.is() && aSrchPara.transliterateFlags & SIMPLE_TRANS_MASK )
+            sSrchStr = xTranslit->transliterateString2String(
+                    aSrchPara.searchString, 0, aSrchPara.searchString.getLength());
 
-    if ( xTranslit2.is() && aSrchPara.transliterateFlags & COMPLEX_TRANS_MASK )
-        sSrchStr2 = xTranslit2->transliterateString2String(
-            aSrchPara.searchString, 0, aSrchPara.searchString.getLength());
+        if ( xTranslit2.is() && aSrchPara.transliterateFlags & COMPLEX_TRANS_MASK )
+            sSrchStr2 = xTranslit2->transliterateString2String(
+                    aSrchPara.searchString, 0, aSrchPara.searchString.getLength());
+    }
 
     // When start or end of search string is a complex script type, we need to
     // make sure the result boundary is not located in the middle of cell.

-- 
To view, visit https://gerrit.libreoffice.org/3741
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0302baee0532ab8f10853c648bf695a58cfe273c
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-4-0
Gerrit-Owner: Eike Rathke <erack@redhat.com>


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.