diff options
Diffstat (limited to 'editeng')
-rw-r--r-- | editeng/source/editeng/impedit2.cxx | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx index e7dbdc65b546..a9b69a7caef0 100644 --- a/editeng/source/editeng/impedit2.cxx +++ b/editeng/source/editeng/impedit2.cxx @@ -1803,28 +1803,31 @@ sal_uInt16 ImpEditEngine::GetScriptType( const EditSelection& rSel ) const const ScriptTypePosInfos& rTypes = pParaPortion->aScriptInfos; - // find the first(!) script type position that holds the - // complete selection. Thus it will work for selections as - // well as with just moving the cursor from char to char. + // find all the scripts of this range sal_uInt16 nS = ( nPara == nStartPara ) ? aSel.Min().GetIndex() : 0; sal_uInt16 nE = ( nPara == nEndPara ) ? aSel.Max().GetIndex() : pParaPortion->GetNode()->Len(); - for ( size_t n = 0; n < rTypes.size(); n++ ) + + //no selection, just bare cursor + if (nStartPara == nEndPara && nS == nE) + { + //If we are not at the start of the paragraph we want the properties of the + //preceding character. Otherwise get the properties of the next (or what the + //next would have if it existed) + if (nS != 0) + --nS; + else + ++nE; + } + + for (size_t n = 0; n < rTypes.size(); ++n) { - if (rTypes[n].nStartPos <= nS && nE <= rTypes[n].nEndPos) + bool bStartInRange = rTypes[n].nStartPos <= nS && nS < rTypes[n].nEndPos; + bool bEndInRange = rTypes[n].nStartPos < nE && nE <= rTypes[n].nEndPos; + + if (bStartInRange || bEndInRange) { if ( rTypes[n].nScriptType != i18n::ScriptType::WEAK ) - { nScriptType |= GetItemScriptType ( rTypes[n].nScriptType ); - } - else - { - if ( !nScriptType && n ) - { - // #93548# When starting with WEAK, use prev ScriptType... - nScriptType = rTypes[n-1].nScriptType; - } - } - break; } } } |