diff options
author | Laurent Balland-Poirier <laurent.balland-poirier@laposte.net> | 2016-07-17 11:06:41 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2016-07-27 11:04:04 +0000 |
commit | aab21302fa7ec76772456ad0cd8729a16e2a11e0 (patch) | |
tree | e13aa4a462b95728fbaf014b0aad74e46ae2c0b7 /xmloff/source/style/xmlnumfi.cxx | |
parent | 7c84a219e3cc8d623826343f547ba8adacca6d56 (diff) |
tdf#100755 Extend ODF to allow 0 in fraction
As '0' is now allowed in numerator/denominator
this commit extend ODF to save/load this format
Change-Id: I3bc897dcce5393453acd7a434a21ae305feeb919
Reviewed-on: https://gerrit.libreoffice.org/27263
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Eike Rathke <erack@redhat.com>
Diffstat (limited to 'xmloff/source/style/xmlnumfi.cxx')
-rw-r--r-- | xmloff/source/style/xmlnumfi.cxx | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/xmloff/source/style/xmlnumfi.cxx b/xmloff/source/style/xmlnumfi.cxx index 7e9c501ce0fb..c9da66addd1f 100644 --- a/xmloff/source/style/xmlnumfi.cxx +++ b/xmloff/source/style/xmlnumfi.cxx @@ -101,6 +101,8 @@ struct SvXMLNumberInfo sal_Int32 nMaxDenomDigits; sal_Int32 nFracDenominator; sal_Int32 nMinDecimalDigits; + sal_Int32 nZerosNumerDigits; + sal_Int32 nZerosDenomDigits; bool bGrouping; bool bDecReplace; bool bExpSign; @@ -111,7 +113,7 @@ struct SvXMLNumberInfo SvXMLNumberInfo() { nDecimals = nInteger = nExpDigits = nExpInterval = nMinNumerDigits = nMinDenomDigits = nMaxNumerDigits = nMaxDenomDigits = - nFracDenominator = nMinDecimalDigits = -1; + nFracDenominator = nMinDecimalDigits = nZerosNumerDigits = nZerosDenomDigits = -1; bGrouping = bDecReplace = bDecAlign = false; bExpSign = true; fDisplayFactor = 1.0; @@ -266,6 +268,8 @@ enum SvXMLStyleElemAttrTokens XML_TOK_ELEM_ATTR_MIN_DENOMINATOR_DIGITS, XML_TOK_ELEM_ATTR_MAX_NUMERATOR_DIGITS, XML_TOK_ELEM_ATTR_MAX_DENOMINATOR_VALUE, + XML_TOK_ELEM_ATTR_ZEROS_NUMERATOR_DIGITS, + XML_TOK_ELEM_ATTR_ZEROS_DENOMINATOR_DIGITS, XML_TOK_ELEM_ATTR_RFC_LANGUAGE_TAG, XML_TOK_ELEM_ATTR_LANGUAGE, XML_TOK_ELEM_ATTR_SCRIPT, @@ -569,6 +573,10 @@ const SvXMLTokenMap& SvXMLNumImpData::GetStyleElemAttrTokenMap() { XML_NAMESPACE_LO_EXT, XML_MAX_NUMERATOR_DIGITS, XML_TOK_ELEM_ATTR_MAX_NUMERATOR_DIGITS }, { XML_NAMESPACE_LO_EXT, XML_MAX_DENOMINATOR_VALUE, XML_TOK_ELEM_ATTR_MAX_DENOMINATOR_VALUE }, { XML_NAMESPACE_NUMBER, XML_MAX_DENOMINATOR_VALUE, XML_TOK_ELEM_ATTR_MAX_DENOMINATOR_VALUE }, + { XML_NAMESPACE_LO_EXT, XML_ZEROS_NUMERATOR_DIGITS, XML_TOK_ELEM_ATTR_ZEROS_NUMERATOR_DIGITS }, + { XML_NAMESPACE_NUMBER, XML_ZEROS_NUMERATOR_DIGITS, XML_TOK_ELEM_ATTR_ZEROS_NUMERATOR_DIGITS }, + { XML_NAMESPACE_LO_EXT, XML_ZEROS_DENOMINATOR_DIGITS,XML_TOK_ELEM_ATTR_ZEROS_DENOMINATOR_DIGITS }, + { XML_NAMESPACE_NUMBER, XML_ZEROS_DENOMINATOR_DIGITS,XML_TOK_ELEM_ATTR_ZEROS_DENOMINATOR_DIGITS }, { XML_NAMESPACE_NUMBER, XML_RFC_LANGUAGE_TAG, XML_TOK_ELEM_ATTR_RFC_LANGUAGE_TAG }, { XML_NAMESPACE_NUMBER, XML_LANGUAGE, XML_TOK_ELEM_ATTR_LANGUAGE }, { XML_NAMESPACE_NUMBER, XML_SCRIPT, XML_TOK_ELEM_ATTR_SCRIPT }, @@ -1003,7 +1011,15 @@ SvXMLNumFmtElementContext::SvXMLNumFmtElementContext( SvXMLImport& rImport, aNumInfo.nFracDenominator = nAttrVal; bIsMaxDenominator = true; } - break; + break; + case XML_TOK_ELEM_ATTR_ZEROS_NUMERATOR_DIGITS: + if (::sax::Converter::convertNumber( nAttrVal, sValue, 0 )) + aNumInfo.nZerosNumerDigits = nAttrVal; + break; + case XML_TOK_ELEM_ATTR_ZEROS_DENOMINATOR_DIGITS: + if (::sax::Converter::convertNumber( nAttrVal, sValue, 0 )) + aNumInfo.nZerosDenomDigits = nAttrVal; + break; case XML_TOK_ELEM_ATTR_RFC_LANGUAGE_TAG: aLanguageTagODF.maRfcLanguageTag = sValue; break; @@ -1036,9 +1052,23 @@ SvXMLNumFmtElementContext::SvXMLNumFmtElementContext( SvXMLImport& rImport, else aNumInfo.nMinDecimalDigits = aNumInfo.nDecimals; } + if ( aNumInfo.nZerosDenomDigits > 0 ) + { // nMin = count of '0' and '?' + if ( aNumInfo.nMinDenomDigits < aNumInfo.nZerosDenomDigits ) + aNumInfo.nMinDenomDigits = aNumInfo.nZerosDenomDigits; + } + else + aNumInfo.nZerosDenomDigits = 0; if ( aNumInfo.nMinDenomDigits >= 0 ) if ( aNumInfo.nMaxDenomDigits < aNumInfo.nMinDenomDigits ) aNumInfo.nMaxDenomDigits = ( aNumInfo.nMinDenomDigits ? aNumInfo.nMinDenomDigits : 1 ); + if ( aNumInfo.nZerosNumerDigits > 0 ) + { + if ( aNumInfo.nMinNumerDigits < aNumInfo.nZerosNumerDigits ) + aNumInfo.nMinNumerDigits = aNumInfo.nZerosNumerDigits; + } + else + aNumInfo.nZerosNumerDigits = 0; if ( aNumInfo.nMinNumerDigits >= 0 ) if ( aNumInfo.nMaxNumerDigits < aNumInfo.nMinNumerDigits ) aNumInfo.nMaxNumerDigits = ( aNumInfo.nMinNumerDigits ? aNumInfo.nMinNumerDigits : 1 ); @@ -1254,8 +1284,10 @@ void SvXMLNumFmtElementContext::EndElement() { if ( i > aNumInfo.nMinNumerDigits ) rParent.AddToCode( '#' ); - else + else if ( i > aNumInfo.nZerosNumerDigits ) rParent.AddToCode( '?' ); + else + rParent.AddToCode( '0' ); } rParent.AddToCode( '/' ); if ( aNumInfo.nFracDenominator > 0 ) @@ -1268,8 +1300,10 @@ void SvXMLNumFmtElementContext::EndElement() { if ( i > aNumInfo.nMinDenomDigits ) rParent.AddToCode( '#' ); - else + else if ( i > aNumInfo.nZerosDenomDigits ) rParent.AddToCode( '?' ); + else + rParent.AddToCode( '0' ); } } } |