diff options
Diffstat (limited to 'xmloff/source/style/xmlnumfi.cxx')
-rw-r--r-- | xmloff/source/style/xmlnumfi.cxx | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/xmloff/source/style/xmlnumfi.cxx b/xmloff/source/style/xmlnumfi.cxx index 02f31cd98a04..d5a44c37d84e 100644 --- a/xmloff/source/style/xmlnumfi.cxx +++ b/xmloff/source/style/xmlnumfi.cxx @@ -114,17 +114,18 @@ struct SvXMLNumberInfo sal_Int32 nNumerDigits; sal_Int32 nDenomDigits; sal_Int32 nFracDenominator; + sal_Int32 nMinDecimalDigits; bool bGrouping; bool bDecReplace; - bool bVarDecimals; bool bExpSign; double fDisplayFactor; SvXMLEmbeddedElementArr aEmbeddedElements; SvXMLNumberInfo() { - nDecimals = nInteger = nExpDigits = nExpInterval = nNumerDigits = nDenomDigits = nFracDenominator = -1; - bGrouping = bDecReplace = bVarDecimals = false; + nDecimals = nInteger = nExpDigits = nExpInterval = nNumerDigits = nDenomDigits = + nFracDenominator = nMinDecimalDigits = -1; + bGrouping = bDecReplace = false; bExpSign = true; fDisplayFactor = 1.0; } @@ -273,6 +274,7 @@ enum SvXMLStyleAttrTokens enum SvXMLStyleElemAttrTokens { XML_TOK_ELEM_ATTR_DECIMAL_PLACES, + XML_TOK_ELEM_ATTR_MIN_DECIMAL_DIGITS, XML_TOK_ELEM_ATTR_MIN_INTEGER_DIGITS, XML_TOK_ELEM_ATTR_GROUPING, XML_TOK_ELEM_ATTR_DISPLAY_FACTOR, @@ -570,6 +572,7 @@ const SvXMLTokenMap& SvXMLNumImpData::GetStyleElemAttrTokenMap() { // attributes for an element within a style { XML_NAMESPACE_NUMBER, XML_DECIMAL_PLACES, XML_TOK_ELEM_ATTR_DECIMAL_PLACES }, + { XML_NAMESPACE_LO_EXT, XML_MIN_DECIMAL_DIGITS, XML_TOK_ELEM_ATTR_MIN_DECIMAL_DIGITS }, { XML_NAMESPACE_NUMBER, XML_MIN_INTEGER_DIGITS, XML_TOK_ELEM_ATTR_MIN_INTEGER_DIGITS }, { XML_NAMESPACE_NUMBER, XML_GROUPING, XML_TOK_ELEM_ATTR_GROUPING }, { XML_NAMESPACE_NUMBER, XML_DISPLAY_FACTOR, XML_TOK_ELEM_ATTR_DISPLAY_FACTOR }, @@ -924,6 +927,7 @@ SvXMLNumFmtElementContext::SvXMLNumFmtElementContext( SvXMLImport& rImport, LanguageTagODF aLanguageTagODF; sal_Int32 nAttrVal; bool bAttrBool(false); + bool bVarDecimals = false; sal_uInt16 nAttrEnum; double fAttrDouble; @@ -944,6 +948,10 @@ SvXMLNumFmtElementContext::SvXMLNumFmtElementContext( SvXMLImport& rImport, if (::sax::Converter::convertNumber( nAttrVal, sValue, 0 )) aNumInfo.nDecimals = std::min<sal_Int32>(nAttrVal, MAX_SECOND_DIGITS); break; + case XML_TOK_ELEM_ATTR_MIN_DECIMAL_DIGITS: + if (::sax::Converter::convertNumber( nAttrVal, sValue, 0 )) + aNumInfo.nMinDecimalDigits = nAttrVal; + break; case XML_TOK_ELEM_ATTR_MIN_INTEGER_DIGITS: if (::sax::Converter::convertNumber( nAttrVal, sValue, 0 )) aNumInfo.nInteger = nAttrVal; @@ -960,7 +968,7 @@ SvXMLNumFmtElementContext::SvXMLNumFmtElementContext( SvXMLImport& rImport, if ( !sValue.isEmpty() ) aNumInfo.bDecReplace = true; // only a default string is supported else - aNumInfo.bVarDecimals = true; // empty replacement string: variable decimals + bVarDecimals = true; // empty replacement string: variable decimals break; case XML_TOK_ELEM_ATTR_MIN_EXPONENT_DIGITS: if (::sax::Converter::convertNumber( nAttrVal, sValue, 0 )) @@ -1011,6 +1019,13 @@ SvXMLNumFmtElementContext::SvXMLNumFmtElementContext( SvXMLImport& rImport, break; } } + if ( aNumInfo.nMinDecimalDigits == -1) + { + if ( bVarDecimals ) + aNumInfo.nMinDecimalDigits = 0; + else + aNumInfo.nMinDecimalDigits = aNumInfo.nDecimals; + } if ( !aLanguageTagODF.isEmpty() ) { @@ -1799,7 +1814,9 @@ void SvXMLNumFormatContext::AddNumber( const SvXMLNumberInfo& rInfo ) } sal_uInt16 nGenPrec = nPrec; - if ( rInfo.bDecReplace || rInfo.bVarDecimals ) + if ( rInfo.nMinDecimalDigits >= 0 ) + nGenPrec = rInfo.nMinDecimalDigits; + if ( rInfo.bDecReplace ) nGenPrec = 0; // generate format without decimals... bool bGrouping = rInfo.bGrouping; @@ -1892,13 +1909,14 @@ void SvXMLNumFormatContext::AddNumber( const SvXMLNumberInfo& rInfo ) aFormatCode.append( aNumStr.makeStringAndClear() ); - if ( ( rInfo.bDecReplace || rInfo.bVarDecimals ) && nPrec ) // add decimal replacement (dashes) + if ( ( rInfo.bDecReplace || rInfo.nMinDecimalDigits < rInfo.nDecimals ) && nPrec ) // add decimal replacement (dashes) { // add dashes for explicit decimal replacement, # for variable decimals sal_Unicode cAdd = rInfo.bDecReplace ? '-' : '#'; - aFormatCode.append( pData->GetLocaleData( nFormatLang ).getNumDecimalSep() ); - for ( sal_uInt16 i=0; i<nPrec; i++) + if ( rInfo.nMinDecimalDigits == 0 ) + aFormatCode.append( pData->GetLocaleData( nFormatLang ).getNumDecimalSep() ); + for ( sal_uInt16 i=rInfo.nMinDecimalDigits; i<nPrec; i++) aFormatCode.append( cAdd ); } |