i18npool/source/search/textsearch.cxx | 69 ++++++++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 12 deletions(-)
New commits: commit 94e95f7784aaaa969a536a63ae79f698a8c070a9 Author: Eike Rathke <er...@redhat.com> Date: Thu May 2 15:37:27 2013 +0200 resolved fdo#63779 case-insensitive non-regex search broken Broken with 531538892795bec909bb8baff6bbf9e19baf809e Change-Id: I0302baee0532ab8f10853c648bf695a58cfe273c (cherry picked from commit db46a7336e330516f4df4e41f6895aa1afb03450) Reviewed-on: https://gerrit.libreoffice.org/3742 Reviewed-by: Petr Mladek <pmla...@suse.cz> Tested-by: Petr Mladek <pmla...@suse.cz> Reviewed-by: Fridrich Strba <fridr...@documentfoundation.org> Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> 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::lang; 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 @@ static sal_Int32 COMPLEX_TRANS_MASK_TMP = 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 @@ void TextSearch::setOptions( const SearchOptions& rOptions ) throw( RuntimeExcep 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.
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits