diff options
-rw-r--r-- | sw/inc/doc.hxx | 2 | ||||
-rw-r--r-- | sw/source/core/docnode/ndtbl.cxx | 17 | ||||
-rw-r--r-- | sw/source/core/edit/edtab.cxx | 2 | ||||
-rw-r--r-- | sw/source/core/fields/cellfml.cxx | 4 | ||||
-rw-r--r-- | sw/source/core/fields/fldbas.cxx | 4 | ||||
-rw-r--r-- | sw/source/core/fields/usrfld.cxx | 4 | ||||
-rw-r--r-- | sw/source/core/table/swtable.cxx | 10 | ||||
-rw-r--r-- | sw/source/core/txtnode/fmtatr2.cxx | 5 | ||||
-rw-r--r-- | sw/source/core/unocore/unotbl.cxx | 2 |
9 files changed, 31 insertions, 19 deletions
diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx index 08c590a81024..e63fb0c7dd03 100644 --- a/sw/inc/doc.hxx +++ b/sw/inc/doc.hxx @@ -1252,6 +1252,8 @@ public: SwTableBoxFormat* MakeTableBoxFormat(); SwTableLineFormat* MakeTableLineFormat(); + // helper function: cleanup before checking number value + bool IsNumberFormat( const OUString& rString, sal_uInt32& F_Index, double& fOutNumber); // Check if box has numerical value. Change format of box if required. void ChkBoxNumFormat( SwTableBox& rAktBox, bool bCallUpdate ); void SetTableBoxFormulaAttrs( SwTableBox& rBox, const SfxItemSet& rSet ); diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx index 9d427e613372..d5c9d5357a06 100644 --- a/sw/source/core/docnode/ndtbl.cxx +++ b/sw/source/core/docnode/ndtbl.cxx @@ -4032,6 +4032,23 @@ bool SwDoc::SetColRowWidthHeight( SwTableBox& rAktBox, TableChgWidthHeightType e return bRet; } +bool SwDoc::IsNumberFormat( const OUString& rString, sal_uInt32& F_Index, double& fOutNumber ) +{ + if( rString.getLength() > 308 ) // optimization matches svl:IsNumberFormat arbitrary value + return false; + + // remove any comment anchor marks + OUStringBuffer sStringBuffer(rString); + sal_Int32 nCommentPosition = sStringBuffer.indexOf( CH_TXTATR_INWORD ); + while( nCommentPosition != -1 ) + { + sStringBuffer.remove( nCommentPosition, 1 ); + nCommentPosition = sStringBuffer.indexOf( CH_TXTATR_INWORD, nCommentPosition ); + } + + return GetNumberFormatter()->IsNumberFormat( sStringBuffer.makeStringAndClear(), F_Index, fOutNumber ); +} + void SwDoc::ChkBoxNumFormat( SwTableBox& rBox, bool bCallUpdate ) { // Optimization: If the Box says it's Text, it remains Text diff --git a/sw/source/core/edit/edtab.cxx b/sw/source/core/edit/edtab.cxx index e547f40ba83e..af961388cba9 100644 --- a/sw/source/core/edit/edtab.cxx +++ b/sw/source/core/edit/edtab.cxx @@ -400,7 +400,7 @@ bool SwEditShell::IsTableBoxTextFormat() const return false; double fVal; - return !GetDoc()->GetNumberFormatter()->IsNumberFormat( rText, nFormat, fVal ); + return !GetDoc()->IsNumberFormat( rText, nFormat, fVal ); } OUString SwEditShell::GetTableBoxText() const diff --git a/sw/source/core/fields/cellfml.cxx b/sw/source/core/fields/cellfml.cxx index c0655b2de3f7..1be01755be5a 100644 --- a/sw/source/core/fields/cellfml.cxx +++ b/sw/source/core/fields/cellfml.cxx @@ -224,12 +224,12 @@ double SwTableBox::GetValue( SwTableCalcPara& rCalcPara ) const css::util::NumberFormat::PERCENT == pNumFormatr->GetType( nFormatIndex )) { sal_uInt32 nTmpFormat = 0; - if( pNumFormatr->IsNumberFormat( sText, nTmpFormat, aNum ) && + if( pDoc->IsNumberFormat( sText, nTmpFormat, aNum ) && css::util::NumberFormat::NUMBER == pNumFormatr->GetType( nTmpFormat )) sText += "%"; } - if( pNumFormatr->IsNumberFormat( sText, nFormatIndex, aNum )) + if( pDoc->IsNumberFormat( sText, nFormatIndex, aNum )) nRet = aNum; } // ?? otherwise it is an error diff --git a/sw/source/core/fields/fldbas.cxx b/sw/source/core/fields/fldbas.cxx index 1bd796bb66f0..0eca840c2311 100644 --- a/sw/source/core/fields/fldbas.cxx +++ b/sw/source/core/fields/fldbas.cxx @@ -702,9 +702,7 @@ void SwFormulaField::SetExpandedFormula( const OUString& rStr ) { double fTmpValue; - SvNumberFormatter* pFormatter = GetDoc()->GetNumberFormatter(); - - if (pFormatter->IsNumberFormat(rStr, nFormat, fTmpValue)) + if (GetDoc()->IsNumberFormat(rStr, nFormat, fTmpValue)) { SwValueField::SetValue(fTmpValue); diff --git a/sw/source/core/fields/usrfld.cxx b/sw/source/core/fields/usrfld.cxx index 080dcfc77bd1..845d02de6582 100644 --- a/sw/source/core/fields/usrfld.cxx +++ b/sw/source/core/fields/usrfld.cxx @@ -259,9 +259,7 @@ void SwUserFieldType::SetContent( const OUString& rStr, sal_uInt32 nFormat ) { double fValue; - SvNumberFormatter* pFormatter = GetDoc()->GetNumberFormatter(); - - if (pFormatter->IsNumberFormat(rStr, nFormat, fValue)) + if (GetDoc()->IsNumberFormat(rStr, nFormat, fValue)) { SetValue(fValue); aContent = DoubleToString(fValue, nFormat); diff --git a/sw/source/core/table/swtable.cxx b/sw/source/core/table/swtable.cxx index ca0efb0f9353..281249f700f7 100644 --- a/sw/source/core/table/swtable.cxx +++ b/sw/source/core/table/swtable.cxx @@ -2293,19 +2293,19 @@ void SwTableBoxFormat::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew pNumFormatr->GetType( nNewFormat )) { sal_uInt32 nTmpFormat = 0; - if( pNumFormatr->IsNumberFormat( + if( GetDoc()->IsNumberFormat( aText, nTmpFormat, fVal )) { if( css::util::NumberFormat::NUMBER == pNumFormatr->GetType( nTmpFormat )) aText += "%"; - bIsNumFormat = pNumFormatr->IsNumberFormat( + bIsNumFormat = GetDoc()->IsNumberFormat( aText, nTmpFormatIdx, fVal ); } } else - bIsNumFormat = pNumFormatr->IsNumberFormat( + bIsNumFormat = GetDoc()->IsNumberFormat( aText, nTmpFormatIdx, fVal ); if( bIsNumFormat ) @@ -2393,7 +2393,7 @@ bool SwTableBox::HasNumContent( double& rNum, sal_uInt32& rFormatIndex, if( !rIsEmptyTextNd && css::util::NumberFormat::PERCENT == pNumFormatr->GetType( rFormatIndex )) { sal_uInt32 nTmpFormat = 0; - if( pNumFormatr->IsNumberFormat( aText, nTmpFormat, rNum ) && + if( GetFrameFormat()->GetDoc()->IsNumberFormat( aText, nTmpFormat, rNum ) && css::util::NumberFormat::NUMBER == pNumFormatr->GetType( nTmpFormat )) aText += "%"; } @@ -2401,7 +2401,7 @@ bool SwTableBox::HasNumContent( double& rNum, sal_uInt32& rFormatIndex, else rFormatIndex = 0; - bRet = pNumFormatr->IsNumberFormat( aText, rFormatIndex, rNum ); + bRet = GetFrameFormat()->GetDoc()->IsNumberFormat( aText, rFormatIndex, rNum ); } else rIsEmptyTextNd = false; diff --git a/sw/source/core/txtnode/fmtatr2.cxx b/sw/source/core/txtnode/fmtatr2.cxx index f8ef2b31698b..d26594caf222 100644 --- a/sw/source/core/txtnode/fmtatr2.cxx +++ b/sw/source/core/txtnode/fmtatr2.cxx @@ -754,11 +754,8 @@ sal_uInt32 MetaField::GetNumberFormat(OUString const & rContent) const SwTextNode * const pTextNode( GetTextNode() ); if (pTextNode) { - SvNumberFormatter *const pNumberFormatter( - pTextNode->GetDoc()->GetNumberFormatter() ); double number; - (void) pNumberFormatter->IsNumberFormat( - rContent, nNumberFormat, number ); + (void) pTextNode->GetDoc()->IsNumberFormat( rContent, nNumberFormat, number ); } return nNumberFormat; } diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx index 4754febbc808..1c00d99e4461 100644 --- a/sw/source/core/unocore/unotbl.cxx +++ b/sw/source/core/unocore/unotbl.cxx @@ -1238,7 +1238,7 @@ double SwXCell::GetForcedNumericalValue() const nFIndex = pNumFormatter->GetStandardIndex( eLang ); } double fTmp; - if (!pNumFormatter->IsNumberFormat(const_cast<SwXCell*>(this)->getString(), nFIndex, fTmp)) + if (!const_cast<SwDoc*>(GetDoc())->IsNumberFormat(const_cast<SwXCell*>(this)->getString(), nFIndex, fTmp)) ::rtl::math::setNan(&fTmp); return fTmp; } |