20 #include <com/sun/star/i18n/CTLScriptType.hpp>
21 #include <com/sun/star/i18n/ScriptDirection.hpp>
22 #include <com/sun/star/i18n/UnicodeScript.hpp>
29 ScriptDirection::LEFT_TO_RIGHT,
30 ScriptDirection::RIGHT_TO_LEFT,
31 ScriptDirection::LEFT_TO_RIGHT,
32 ScriptDirection::LEFT_TO_RIGHT,
33 ScriptDirection::LEFT_TO_RIGHT,
34 ScriptDirection::RIGHT_TO_LEFT,
35 ScriptDirection::NEUTRAL,
36 ScriptDirection::NEUTRAL,
37 ScriptDirection::NEUTRAL,
38 ScriptDirection::NEUTRAL,
39 ScriptDirection::NEUTRAL,
40 ScriptDirection::LEFT_TO_RIGHT,
41 ScriptDirection::LEFT_TO_RIGHT,
42 ScriptDirection::RIGHT_TO_LEFT,
43 ScriptDirection::RIGHT_TO_LEFT,
44 ScriptDirection::RIGHT_TO_LEFT,
45 ScriptDirection::NEUTRAL,
46 ScriptDirection::NEUTRAL,
47 ScriptDirection::NEUTRAL,
53 return (dir == ScriptDirection::NEUTRAL) ? defaultScriptDirection : dir;
59 sal_Int32 cPos = nPos;
61 if (cPos < static_cast<sal_Int32>(Text.size())) {
62 for (; cPos >= 0; cPos--) {
63 if (direction != getScriptDirection(Text, cPos, direction))
67 return cPos == nPos ? -1 : cPos + 1;
72 sal_Int32 cPos = nPos;
73 sal_Int32 len = Text.size();
76 for (; cPos < len; cPos++) {
77 if (direction != getScriptDirection(Text, cPos, direction))
81 return cPos == nPos ? -1 : cPos;
87 { UnicodeScript_kHebrew, UnicodeScript_kHebrew, CTLScriptType::CTL_HEBREW },
88 { UnicodeScript_kArabic, UnicodeScript_kArabic, CTLScriptType::CTL_ARABIC },
89 { UnicodeScript_kDevanagari, UnicodeScript_kDevanagari, CTLScriptType::CTL_INDIC },
90 { UnicodeScript_kThai, UnicodeScript_kThai, CTLScriptType::CTL_THAI },
91 { UnicodeScript_kScriptCount, UnicodeScript_kScriptCount, CTLScriptType::CTL_UNKNOWN }
102 else if (nPos >= static_cast<sal_Int32>(Text.size()))
105 sal_Int16 cType = getCTLScriptType(Text, nPos);
106 for (nPos--; nPos >= 0; nPos--) {
107 if (cType != getCTLScriptType(Text, nPos))
119 else if (nPos >= static_cast<sal_Int32>(Text.size()))
122 sal_Int16 cType = getCTLScriptType(Text, nPos);
123 sal_Int32 len = Text.size();
124 for (nPos++; nPos < len; nPos++) {
125 if (cType != getCTLScriptType(Text, nPos))
static sal_uInt8 getUnicodeDirection(const sal_Unicode ch)
static sal_Int16 getUnicodeScriptType(const sal_Unicode ch, const ScriptTypeList *typeList, sal_Int16 unknownType=0)
static sal_Int16 getScriptDirection(std::u16string_view Text, sal_Int32 nPos, sal_Int16 defaultScriptDirection)
static sal_Int16 getCTLScriptType(std::u16string_view Text, sal_Int32 nPos)
static sal_Int32 beginOfCTLScriptType(std::u16string_view Text, sal_Int32 nPos)
static sal_Int32 beginOfScriptDirection(std::u16string_view Text, sal_Int32 nPos, sal_Int16 scriptDirection)
const sal_Int16 scriptDirection[]
static sal_Int32 endOfCTLScriptType(std::u16string_view Text, sal_Int32 nPos)
static sal_Int32 endOfScriptDirection(std::u16string_view Text, sal_Int32 nPos, sal_Int16 scriptDirection)
ScriptTypeList const typeList[]