tdf#133342 Add user defined percent string
With Add/Delete decimal place, insert percent char
and string text between number and '%'
Change-Id: I4a97e4361228020803810692d7977e5806baf180
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94757
Tested-by: Jenkins
Reviewed-by: Eike Rathke <erack@redhat.com>
diff --git a/include/svl/zformat.hxx b/include/svl/zformat.hxx
index 5b6f7024..abd805d 100644
--- a/include/svl/zformat.hxx
+++ b/include/svl/zformat.hxx
@@ -297,6 +297,8 @@ public:
// nPos == 0xFFFF => last substring
short GetNumForType( sal_uInt16 nNumFor, sal_uInt16 nPos ) const;
OUString GetPercentString( sal_uInt16 nNumFor = 0 ) const;
OUString GetDenominatorString( sal_uInt16 nNumFor ) const;
OUString GetNumeratorString( sal_uInt16 nNumFor ) const;
OUString GetIntegerFractionDelimiterString( sal_uInt16 nNumFor ) const;
diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx
index 8186800ec..f8652a0 100644
--- a/svl/source/numbers/zforlist.cxx
+++ b/svl/source/numbers/zforlist.cxx
@@ -3094,7 +3094,7 @@ OUString SvNumberFormatter::GenerateFormat(sal_uInt32 nIndex,
}
if (eType == SvNumFormatType::PERCENT)
{
sString.append('%');
sString.append( pFormat->GetPercentString() );
}
else if (eType == SvNumFormatType::SCIENTIFIC)
{
diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx
index 4532e33..8e78cf6 100644
--- a/svl/source/numbers/zformat.cxx
+++ b/svl/source/numbers/zformat.cxx
@@ -2289,6 +2289,33 @@ void lcl_GetOutputStringScientific(double fNumber, sal_uInt16 nCharCount,
nPrec, rFormatter.GetNumDecimalSep()[0], true );
}
OUString lcl_GetPercentString(const ImpSvNumberformatInfo &rInfo, sal_uInt16 nCnt)
{
sal_Int32 i;
OUStringBuffer aPercentString;
for( i = 0; i < nCnt; i++ )
{
if( rInfo.nTypeArray[i] == NF_SYMBOLTYPE_PERCENT )
{
aPercentString.append( rInfo.sStrArray[i] );
bool bStringFound = false;
for( i--; i >= 0 && rInfo.nTypeArray[i] == NF_SYMBOLTYPE_STRING ; i-- )
{
if( !bStringFound )
{
bStringFound = true;
aPercentString.insert( 0, "\"" );
}
aPercentString.insert( 0, rInfo.sStrArray[i] );
}
i = nCnt;
if( bStringFound )
aPercentString.insert( 0, "\"" );
}
}
return aPercentString.makeStringAndClear();
}
OUString lcl_GetDenominatorString(const ImpSvNumberformatInfo &rInfo, sal_uInt16 nCnt)
{
sal_Int32 i;
@@ -2363,6 +2390,13 @@ OUString lcl_GetIntegerFractionDelimiterString(const ImpSvNumberformatInfo &rInf
}
OUString SvNumberformat::GetPercentString( sal_uInt16 nNumFor ) const
{
const ImpSvNumberformatInfo& rInfo = NumFor[nNumFor].Info();
sal_uInt16 nCnt = NumFor[nNumFor].GetCount();
return lcl_GetPercentString( rInfo, nCnt );
}
OUString SvNumberformat::GetDenominatorString( sal_uInt16 nNumFor ) const
{
const ImpSvNumberformatInfo& rInfo = NumFor[nNumFor].Info();