[Libreoffice-commits] core.git: 5 commits - editeng/source include/tools tools/source
Caolán McNamara
caolanm at redhat.com
Fri Oct 18 08:29:51 PDT 2013
editeng/source/editeng/editeng.cxx | 4 +--
editeng/source/editeng/impedit.hxx | 8 +++---
editeng/source/editeng/impedit2.cxx | 45 +++++++++++++++++++-----------------
editeng/source/editeng/impedit3.cxx | 14 +++++------
editeng/source/editeng/impedit4.cxx | 14 +++++------
include/tools/string.hxx | 2 -
tools/source/string/tustring.cxx | 26 --------------------
7 files changed, 44 insertions(+), 69 deletions(-)
New commits:
commit 9567fbdff6141a605f54df77ddcae173467d5cba
Author: Caolán McNamara <caolanm at redhat.com>
Date: Fri Oct 18 16:21:33 2013 +0100
disambiguate GetScriptType that return different value types
Change-Id: I694d81d17fac5fbd964937dc654ebd764af90842
diff --git a/editeng/source/editeng/editeng.cxx b/editeng/source/editeng/editeng.cxx
index 6b7538d..dfc9713 100644
--- a/editeng/source/editeng/editeng.cxx
+++ b/editeng/source/editeng/editeng.cxx
@@ -511,7 +511,7 @@ sal_uInt16 EditEngine::GetScriptType( const ESelection& rSelection ) const
{
DBG_CHKTHIS( EditEngine, 0 );
EditSelection aSel( pImpEditEngine->CreateSel( rSelection ) );
- return pImpEditEngine->GetScriptType( aSel );
+ return pImpEditEngine->GetItemScriptType( aSel );
}
LanguageType EditEngine::GetLanguage(const EditPaM& rPaM) const
@@ -739,7 +739,7 @@ const ParaPortion* EditEngine::GetPrevVisPortion(const ParaPortion* pCurPortion)
sal_uInt16 EditEngine::GetScriptType(const EditSelection& rSel) const
{
- return pImpEditEngine->GetScriptType(rSel);
+ return pImpEditEngine->GetItemScriptType(rSel);
}
void EditEngine::RemoveParaPortion(sal_Int32 nNode)
diff --git a/editeng/source/editeng/impedit.hxx b/editeng/source/editeng/impedit.hxx
index 2ded5c5..1cd40de 100644
--- a/editeng/source/editeng/impedit.hxx
+++ b/editeng/source/editeng/impedit.hxx
@@ -592,10 +592,10 @@ private:
void InitScriptTypes( sal_Int32 nPara );
- sal_uInt16 GetScriptType( const EditPaM& rPaM, sal_uInt16* pEndPos = NULL ) const;
- sal_uInt16 GetScriptType( const EditSelection& rSel ) const;
- sal_Bool IsScriptChange( const EditPaM& rPaM ) const;
- sal_Bool HasScriptType( sal_Int32 nPara, sal_uInt16 nType ) const;
+ sal_uInt16 GetI18NScriptType( const EditPaM& rPaM, sal_uInt16* pEndPos = NULL ) const;
+ sal_uInt16 GetItemScriptType( const EditSelection& rSel ) const;
+ sal_Bool IsScriptChange( const EditPaM& rPaM ) const;
+ sal_Bool HasScriptType( sal_Int32 nPara, sal_uInt16 nType ) const;
sal_Bool ImplCalcAsianCompression( ContentNode* pNode, TextPortion* pTextPortion, sal_uInt16 nStartPos, sal_Int32* pDXArray, sal_uInt16 n100thPercentFromMax, sal_Bool bManipulateDXArray );
void ImplExpandCompressedPortions( EditLine* pLine, ParaPortion* pParaPortion, long nRemainingWidth );
diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx
index a9b69a7..e8cf38d4 100644
--- a/editeng/source/editeng/impedit2.cxx
+++ b/editeng/source/editeng/impedit2.cxx
@@ -1757,7 +1757,7 @@ private:
}
-sal_uInt16 ImpEditEngine::GetScriptType( const EditPaM& rPaM, sal_uInt16* pEndPos ) const
+sal_uInt16 ImpEditEngine::GetI18NScriptType( const EditPaM& rPaM, sal_uInt16* pEndPos ) const
{
sal_uInt16 nScriptType = 0;
@@ -1785,7 +1785,7 @@ sal_uInt16 ImpEditEngine::GetScriptType( const EditPaM& rPaM, sal_uInt16* pEndPo
return nScriptType ? nScriptType : GetI18NScriptTypeOfLanguage( GetDefaultLanguage() );
}
-sal_uInt16 ImpEditEngine::GetScriptType( const EditSelection& rSel ) const
+sal_uInt16 ImpEditEngine::GetItemScriptType( const EditSelection& rSel ) const
{
EditSelection aSel( rSel );
aSel.Adjust( aEditDoc );
@@ -1827,7 +1827,7 @@ sal_uInt16 ImpEditEngine::GetScriptType( const EditSelection& rSel ) const
if (bStartInRange || bEndInRange)
{
if ( rTypes[n].nScriptType != i18n::ScriptType::WEAK )
- nScriptType |= GetItemScriptType ( rTypes[n].nScriptType );
+ nScriptType |= ::GetItemScriptType( rTypes[n].nScriptType );
}
}
}
@@ -3775,7 +3775,7 @@ sal_uInt16 ImpEditEngine::GetChar(
if ( nChar && ( nChar < pParaPortion->GetNode()->Len() ) )
{
EditPaM aPaM( pParaPortion->GetNode(), nChar+1 );
- sal_uInt16 nScriptType = GetScriptType( aPaM );
+ sal_uInt16 nScriptType = GetI18NScriptType( aPaM );
if ( nScriptType == i18n::ScriptType::COMPLEX )
{
uno::Reference < i18n::XBreakIterator > _xBI( ImplGetBreakIterator() );
diff --git a/editeng/source/editeng/impedit3.cxx b/editeng/source/editeng/impedit3.cxx
index 8e66ec1..d100109 100644
--- a/editeng/source/editeng/impedit3.cxx
+++ b/editeng/source/editeng/impedit3.cxx
@@ -1095,8 +1095,8 @@ sal_Bool ImpEditEngine::CreateLines( sal_Int32 nPara, sal_uInt32 nStartPosY )
if( bScriptSpace && ( _nPortionEnd < pNode->Len() ) && ( nTmpWidth < nXWidth ) && IsScriptChange( EditPaM( pNode, _nPortionEnd ) ) )
{
sal_Bool bAllow = sal_False;
- sal_uInt16 nScriptTypeLeft = GetScriptType( EditPaM( pNode, _nPortionEnd ) );
- sal_uInt16 nScriptTypeRight = GetScriptType( EditPaM( pNode, _nPortionEnd+1 ) );
+ sal_uInt16 nScriptTypeLeft = GetI18NScriptType( EditPaM( pNode, _nPortionEnd ) );
+ sal_uInt16 nScriptTypeRight = GetI18NScriptType( EditPaM( pNode, _nPortionEnd+1 ) );
if ( ( nScriptTypeLeft == i18n::ScriptType::ASIAN ) || ( nScriptTypeRight == i18n::ScriptType::ASIAN ) )
bAllow = sal_True;
@@ -2002,7 +2002,7 @@ void ImpEditEngine::ImpAdjustBlocks( ParaPortion* pParaPortion, EditLine* pLine,
{
EditPaM aPaM( pNode, nChar+1 );
LanguageType eLang = GetLanguage(aPaM);
- sal_uInt16 nScript = GetScriptType(aPaM);
+ sal_uInt16 nScript = GetI18NScriptType(aPaM);
if ( MsLangId::getPrimaryLanguage( eLang) == LANGUAGE_ARABIC_PRIMARY_ONLY )
// Arabic script is handled later.
continue;
@@ -2556,7 +2556,7 @@ void ImpEditEngine::SeekCursor( ContentNode* pNode, sal_uInt16 nPos, SvxFont& rF
rFont = pNode->GetCharAttribs().GetDefFont();
- short nScriptType = GetScriptType( EditPaM( pNode, nPos ) );
+ short nScriptType = GetI18NScriptType( EditPaM( pNode, nPos ) );
if ( ( nScriptType == i18n::ScriptType::ASIAN ) || ( nScriptType == i18n::ScriptType::COMPLEX ) )
{
const SvxFontItem& rFontItem = (const SvxFontItem&)pNode->GetContentAttribs().GetItem( GetScriptItemId( EE_CHAR_FONTINFO, nScriptType ) );
@@ -3012,7 +3012,7 @@ void ImpEditEngine::Paint( OutputDevice* pOutDev, Rectangle aClipRect, Point aSt
aTmpFont.SetFillColor( COL_LIGHTGRAY );
aTmpFont.SetTransparent( sal_False );
}
- else if ( GetScriptType( EditPaM( pPortion->GetNode(), nIndex+1 ) ) == i18n::ScriptType::COMPLEX )
+ else if ( GetI18NScriptType( EditPaM( pPortion->GetNode(), nIndex+1 ) ) == i18n::ScriptType::COMPLEX )
{
aTmpFont.SetFillColor( COL_LIGHTCYAN );
aTmpFont.SetTransparent( sal_False );
@@ -4303,7 +4303,7 @@ void ImpEditEngine::ImplInitLayoutMode( OutputDevice* pOutDev, sal_Int32 nPara,
else
{
ContentNode* pNode = GetEditDoc().GetObject( nPara );
- short nScriptType = GetScriptType( EditPaM( pNode, nIndex+1 ) );
+ short nScriptType = GetI18NScriptType( EditPaM( pNode, nIndex+1 ) );
bCTL = nScriptType == i18n::ScriptType::COMPLEX;
// this change was discussed in issue 37190
bR2L = GetRightToLeft( nPara, nIndex + 1) % 2 ? sal_True : sal_False;
@@ -4385,7 +4385,7 @@ sal_Bool ImpEditEngine::ImplCalcAsianCompression( ContentNode* pNode, TextPortio
sal_Bool bCompressed = sal_False;
- if ( GetScriptType( EditPaM( pNode, nStartPos+1 ) ) == i18n::ScriptType::ASIAN )
+ if ( GetI18NScriptType( EditPaM( pNode, nStartPos+1 ) ) == i18n::ScriptType::ASIAN )
{
long nNewPortionWidth = pTextPortion->GetSize().Width();
sal_uInt16 nPortionLen = pTextPortion->GetLen();
diff --git a/editeng/source/editeng/impedit4.cxx b/editeng/source/editeng/impedit4.cxx
index d04545d..3ec19db 100644
--- a/editeng/source/editeng/impedit4.cxx
+++ b/editeng/source/editeng/impedit4.cxx
@@ -598,7 +598,7 @@ sal_uInt32 ImpEditEngine::WriteRTF( SvStream& rOutput, EditSelection aSel )
if ( nStartPos != 0 )
{
aAttribItems.Clear();
- lcl_FindValidAttribs( aAttribItems, pNode, nStartPos, GetScriptType( EditPaM( pNode, 0 ) ) );
+ lcl_FindValidAttribs( aAttribItems, pNode, nStartPos, GetI18NScriptType( EditPaM( pNode, 0 ) ) );
if ( aAttribItems.Count() )
{
// These attributes may not apply to the entire paragraph:
@@ -634,7 +634,7 @@ sal_uInt32 ImpEditEngine::WriteRTF( SvStream& rOutput, EditSelection aSel )
else
{
aAttribItems.Clear();
- sal_uInt16 nScriptType = GetScriptType( EditPaM( pNode, nIndex+1 ) );
+ sal_uInt16 nScriptType = GetI18NScriptType( EditPaM( pNode, nIndex+1 ) );
if ( !n || IsScriptChange( EditPaM( pNode, nIndex ) ) )
{
SfxItemSet aAttribs = GetAttribs( nNode, nIndex+1, nIndex+1 );
@@ -1029,7 +1029,7 @@ EditTextObject* ImpEditEngine::CreateTextObject( EditSelection aSel, SfxItemPool
// Templates are not saved!
// (Only the name and family, template itself must be in App!)
- pTxtObj->mpImpl->SetScriptType(GetScriptType(aSel));
+ pTxtObj->mpImpl->SetScriptType(GetItemScriptType(aSel));
// iterate over the paragraphs ...
sal_Int32 nNode;
@@ -1414,7 +1414,7 @@ void ImpEditEngine::SetAllMisspellRanges( const std::vector<editeng::MisspellRan
LanguageType ImpEditEngine::GetLanguage( const EditPaM& rPaM, sal_uInt16* pEndPos ) const
{
- short nScriptType = GetScriptType( rPaM, pEndPos ); // pEndPos will be valid now, pointing to ScriptChange or NodeLen
+ short nScriptType = GetI18NScriptType( rPaM, pEndPos ); // pEndPos will be valid now, pointing to ScriptChange or NodeLen
sal_uInt16 nLangId = GetScriptItemId( EE_CHAR_LANGUAGE, nScriptType );
const SvxLanguageItem* pLangItem = &(const SvxLanguageItem&)rPaM.GetNode()->GetContentAttribs().GetItem( nLangId );
const EditCharAttrib* pAttr = rPaM.GetNode()->GetCharAttribs().FindAttrib( nLangId, rPaM.GetIndex() );
@@ -1750,7 +1750,7 @@ void ImpEditEngine::ImpConvert( OUString &rConvTxt, LanguageType &rConvTxtLang,
// check script type to the right of the start of the current portion
EditPaM aPaM( CreateEditPaM( EPaM(aCurStart.nPara, nLangIdx) ) );
- sal_Bool bIsAsianScript = (i18n::ScriptType::ASIAN == GetScriptType( aPaM ));
+ sal_Bool bIsAsianScript = (i18n::ScriptType::ASIAN == GetI18NScriptType( aPaM ));
// not yet processed text part with for conversion
// not suitable language found that needs to be changed?
if (bAllowImplicitChangesForNotConvertibleText &&
commit fdf85819c33abe5a81d19a94b3bac0800b6cda30
Author: Caolán McNamara <caolanm at redhat.com>
Date: Fri Oct 18 16:04:40 2013 +0100
Related: fdo#38838 remove String::Match
Change-Id: I9db663dbcb432cbfe380e1272d6daaed3e6f4221
diff --git a/include/tools/string.hxx b/include/tools/string.hxx
index 16f28db..2e9e1cb 100644
--- a/include/tools/string.hxx
+++ b/include/tools/string.hxx
@@ -229,8 +229,6 @@ public:
sal_Bool Equals( const UniString& rStr,
xub_StrLen nIndex, xub_StrLen nLen ) const;
- xub_StrLen Match( const UniString& rStr ) const;
-
xub_StrLen Search( sal_Unicode c, xub_StrLen nIndex = 0 ) const;
xub_StrLen Search( const UniString& rStr, xub_StrLen nIndex = 0 ) const;
diff --git a/tools/source/string/tustring.cxx b/tools/source/string/tustring.cxx
index 40c99cf..59b80d7 100644
--- a/tools/source/string/tustring.cxx
+++ b/tools/source/string/tustring.cxx
@@ -186,32 +186,6 @@ sal_Bool STRING::Equals( const STRING& rStr, xub_StrLen nIndex, xub_StrLen nLen
return (ImplStringCompareWithoutZero( mpData->maStr+nIndex, rStr.mpData->maStr, nLen ) == 0);
}
-xub_StrLen STRING::Match( const STRING& rStr ) const
-{
- DBG_CHKTHIS( STRING, DBGCHECKSTRING );
- DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING );
-
- // return if string is empty
- if ( !mpData->mnLen )
- return STRING_MATCH;
-
- // Search the string for unmatching chars
- const STRCODE* pStr1 = mpData->maStr;
- const STRCODE* pStr2 = rStr.mpData->maStr;
- xub_StrLen i = 0;
- while ( i < mpData->mnLen )
- {
- // Abort on the first unmatching char
- if ( *pStr1 != *pStr2 )
- return i;
- ++pStr1,
- ++pStr2,
- ++i;
- }
-
- return STRING_MATCH;
-}
-
STRING& STRING::Append( STRCODE c )
{
DBG_CHKTHIS( STRING, DBGCHECKSTRING );
commit f1a8aefec91f51a15c951f53f283a38a2edcd141
Author: Caolán McNamara <caolanm at redhat.com>
Date: Fri Oct 18 16:01:15 2013 +0100
Resolves: rhbz#1020712 return all the selected scripts
What we want here is *all* the scripts in the range, that's the whole point of
using SCRIPTTYPE. We use this to determine the font to show in the fontbox. If
it's an exclusive script then we can show the font that that script, and if
there are multiple scripts we know to set it empty.
With the other intermediate bugs out of the way, this now appears to work
correctly.
Change-Id: I58426123602d70c151bd878e96fa5cbab7d3fd3e
diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx
index e7dbdc6..a9b69a7 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;
}
}
}
commit b57ffef61afd61b57087150b1a9245e21079e15b
Author: Caolán McNamara <caolanm at redhat.com>
Date: Fri Oct 18 15:52:43 2013 +0100
Related: rhbz#1020712 more i18n::ScriptType being compared against SCRIPTTYPE
Change-Id: I5da9114a3fd8330df2b63dc9187323765d305791
diff --git a/editeng/source/editeng/impedit4.cxx b/editeng/source/editeng/impedit4.cxx
index fb61b94..d04545d 100644
--- a/editeng/source/editeng/impedit4.cxx
+++ b/editeng/source/editeng/impedit4.cxx
@@ -2144,7 +2144,7 @@ void ImpEditEngine::ApplyChangedSentence(EditView& rEditView,
rEditView.pImpEditView->SetEditSelection( aCurrentOldPosition->Max() );
}
- sal_uInt16 nScriptType = GetI18NScriptTypeOfLanguage( aCurrentNewPortion->eLanguage );
+ sal_uInt16 nScriptType = SvtLanguageOptions::GetScriptTypeOfLanguage( aCurrentNewPortion->eLanguage );
sal_uInt16 nLangWhichId = EE_CHAR_LANGUAGE;
switch(nScriptType)
{
@@ -2191,7 +2191,7 @@ void ImpEditEngine::ApplyChangedSentence(EditView& rEditView,
LanguageType eCurLanguage = GetLanguage( aCurrentPaM );
if(eCurLanguage != aCurrentNewPortion->eLanguage)
{
- sal_uInt16 nScriptType = GetI18NScriptTypeOfLanguage( aCurrentNewPortion->eLanguage );
+ sal_uInt16 nScriptType = SvtLanguageOptions::GetScriptTypeOfLanguage( aCurrentNewPortion->eLanguage );
sal_uInt16 nLangWhichId = EE_CHAR_LANGUAGE;
switch(nScriptType)
{
commit e63a0d5657c7b9c7431525ba669b3edab0e56af3
Author: Caolán McNamara <caolanm at redhat.com>
Date: Fri Oct 18 15:36:28 2013 +0100
Related: rhbz#1020712 wrong default font shown in editengine
Only in editengine could we have this fiasco.
There are two ImpEditEngine::GetScriptType's
a) sal_uInt16 ImpEditEngine::GetScriptType(const EditPaM& rPaM, sal_uInt16* pEndPos) const
this one returns i18n::ScriptType
b) sal_uInt16 ImpEditEngine::GetScriptType(const EditSelection& rSel) const
this one returns SCRIPTTYPE
Could there be a better way to ensure that mistakes will be made.
Anyway, within variant b, with an empty edit engine
ImpEditEngine::GetScriptType calls GetI18NScriptTypeOfLanguage but *that*
returns i18n::ScriptType's not SCRIPTTYPEs but when there is content then a
SCRIPTTYPE is truly returned.
Change-Id: I3a4a7c8746728e0fdfb25d961004c8339a24c93d
diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx
index 515842e..e7dbdc6 100644
--- a/editeng/source/editeng/impedit2.cxx
+++ b/editeng/source/editeng/impedit2.cxx
@@ -1828,7 +1828,7 @@ sal_uInt16 ImpEditEngine::GetScriptType( const EditSelection& rSel ) const
}
}
}
- return nScriptType ? nScriptType : GetI18NScriptTypeOfLanguage( GetDefaultLanguage() );
+ return nScriptType ? nScriptType : SvtLanguageOptions::GetScriptTypeOfLanguage( GetDefaultLanguage() );
}
sal_Bool ImpEditEngine::IsScriptChange( const EditPaM& rPaM ) const
More information about the Libreoffice-commits
mailing list