diff options
Diffstat (limited to 'i18nutil/source/utility/scripttypedetector.cxx')
-rw-r--r-- | i18nutil/source/utility/scripttypedetector.cxx | 58 |
1 files changed, 5 insertions, 53 deletions
diff --git a/i18nutil/source/utility/scripttypedetector.cxx b/i18nutil/source/utility/scripttypedetector.cxx index a2796e42a562..5bc3f9bb2aa1 100644 --- a/i18nutil/source/utility/scripttypedetector.cxx +++ b/i18nutil/source/utility/scripttypedetector.cxx @@ -17,11 +17,11 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include <com/sun/star/i18n/CTLScriptType.hpp> #include <com/sun/star/i18n/ScriptDirection.hpp> #include <com/sun/star/i18n/UnicodeScript.hpp> #include <i18nutil/scripttypedetector.hxx> #include <i18nutil/unicode.hxx> +#include <o3tl/safeint.hxx> using namespace com::sun::star::i18n; @@ -54,11 +54,11 @@ sal_Int16 ScriptTypeDetector::getScriptDirection( std::u16string_view Text, sal_ } // return value '-1' means either the direction on nPos is not same as scriptDirection or nPos is out of range. -sal_Int32 ScriptTypeDetector::beginOfScriptDirection( const OUString& Text, sal_Int32 nPos, sal_Int16 direction ) +sal_Int32 ScriptTypeDetector::beginOfScriptDirection( std::u16string_view Text, sal_Int32 nPos, sal_Int16 direction ) { sal_Int32 cPos = nPos; - if (cPos < Text.getLength()) { + if (cPos < static_cast<sal_Int32>(Text.size())) { for (; cPos >= 0; cPos--) { if (direction != getScriptDirection(Text, cPos, direction)) break; @@ -67,10 +67,10 @@ sal_Int32 ScriptTypeDetector::beginOfScriptDirection( const OUString& Text, sal_ return cPos == nPos ? -1 : cPos + 1; } -sal_Int32 ScriptTypeDetector::endOfScriptDirection( const OUString& Text, sal_Int32 nPos, sal_Int16 direction ) +sal_Int32 ScriptTypeDetector::endOfScriptDirection( std::u16string_view Text, sal_Int32 nPos, sal_Int16 direction ) { sal_Int32 cPos = nPos; - sal_Int32 len = Text.getLength(); + sal_Int32 len = Text.size(); if (cPos >=0) { for (; cPos < len; cPos++) { @@ -81,52 +81,4 @@ sal_Int32 ScriptTypeDetector::endOfScriptDirection( const OUString& Text, sal_In return cPos == nPos ? -1 : cPos; } -sal_Int16 ScriptTypeDetector::getCTLScriptType( std::u16string_view Text, sal_Int32 nPos ) -{ - static const ScriptTypeList typeList[] = { - { UnicodeScript_kHebrew, UnicodeScript_kHebrew, CTLScriptType::CTL_HEBREW }, // 10 - { UnicodeScript_kArabic, UnicodeScript_kArabic, CTLScriptType::CTL_ARABIC }, // 11 - { UnicodeScript_kDevanagari, UnicodeScript_kDevanagari, CTLScriptType::CTL_INDIC }, // 14 - { UnicodeScript_kThai, UnicodeScript_kThai, CTLScriptType::CTL_THAI }, // 24 - { UnicodeScript_kScriptCount, UnicodeScript_kScriptCount, CTLScriptType::CTL_UNKNOWN } // 88 - }; - - return unicode::getUnicodeScriptType(Text[nPos], typeList); -} - -// Begin of Script Type is inclusive. -sal_Int32 ScriptTypeDetector::beginOfCTLScriptType( const OUString& Text, sal_Int32 nPos ) -{ - if (nPos < 0) - return 0; - else if (nPos >= Text.getLength()) - return Text.getLength(); - else { - sal_Int16 cType = getCTLScriptType(Text, nPos); - for (nPos--; nPos >= 0; nPos--) { - if (cType != getCTLScriptType(Text, nPos)) - break; - } - return nPos + 1; - } -} - -// End of the Script Type is exclusive, the return value pointing to the begin of next script type -sal_Int32 ScriptTypeDetector::endOfCTLScriptType( const OUString& Text, sal_Int32 nPos ) -{ - if (nPos < 0) - return 0; - else if (nPos >= Text.getLength()) - return Text.getLength(); - else { - sal_Int16 cType = getCTLScriptType(Text, nPos); - sal_Int32 len = Text.getLength(); - for (nPos++; nPos < len; nPos++) { - if (cType != getCTLScriptType(Text, nPos)) - break; - } - return nPos; - } -} - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |