diff options
author | Eike Rathke <erack@redhat.com> | 2018-07-10 18:39:32 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2018-07-10 18:40:13 +0200 |
commit | 8ca6468f0f4900d4d3bb45e0e938fe35c308512c (patch) | |
tree | 1fff546c6b05469af901e268ac879e84c5b98748 | |
parent | edc62adae9a354ca1305e83b10c98a545f58d341 (diff) |
Revert "tdf#118324 Extend ODF for blank in integer"
This reverts commit c290f692dd28094d41dff686f3faa1c4e14b556e.
Reverting because
a) makes builds fail with errors from the schema validator in saving unit tests
b) the loext:max-blank-integer-digits is now saved for some number formats where it is not necessary
For example, load sc/qa/unit/data/ods/tdf102370_ExponentWithoutSign.ods
save as .xlsx
reload the .xlsx
save as .ods
(which effectively is what the ScExportTest::testExponentWithoutSignFormatXLSX() unit test does and makes the schema validator stumble)
Change-Id: Iaac7e42b23317e7977876c9b5d545c76a1e2a4d2
Reviewed-on: https://gerrit.libreoffice.org/57240
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Eike Rathke <erack@redhat.com>
-rw-r--r-- | include/xmloff/xmlnumfe.hxx | 6 | ||||
-rw-r--r-- | include/xmloff/xmlnumfi.hxx | 2 | ||||
-rw-r--r-- | include/xmloff/xmltoken.hxx | 1 | ||||
-rw-r--r-- | svl/source/numbers/zformat.cxx | 3 | ||||
-rw-r--r-- | xmloff/source/core/xmltoken.cxx | 1 | ||||
-rw-r--r-- | xmloff/source/style/xmlnumfe.cxx | 61 | ||||
-rw-r--r-- | xmloff/source/style/xmlnumfi.cxx | 33 | ||||
-rw-r--r-- | xmloff/source/token/tokens.txt | 1 |
8 files changed, 20 insertions, 88 deletions
diff --git a/include/xmloff/xmlnumfe.hxx b/include/xmloff/xmlnumfe.hxx index b52136b8d677..75c3b133c036 100644 --- a/include/xmloff/xmlnumfe.hxx +++ b/include/xmloff/xmlnumfe.hxx @@ -64,12 +64,12 @@ private: SAL_DLLPRIVATE void WriteColorElement_Impl( const Color& rColor ); SAL_DLLPRIVATE void WriteNumberElement_Impl( sal_Int32 nDecimals, sal_Int32 nMinDecimals, - sal_Int32 nInteger, sal_Int32 nBlankInteger, const OUString& rDashStr, + sal_Int32 nInteger, const OUString& rDashStr, bool bGrouping, sal_Int32 nTrailingThousands, const SvXMLEmbeddedTextEntryArr& rEmbeddedEntries ); - SAL_DLLPRIVATE void WriteScientificElement_Impl( sal_Int32 nDecimals, sal_Int32 nMinDecimals, sal_Int32 nInteger, sal_Int32 nBlankInteger, + SAL_DLLPRIVATE void WriteScientificElement_Impl( sal_Int32 nDecimals, sal_Int32 nMinDecimals, sal_Int32 nInteger, bool bGrouping, sal_Int32 nExp, sal_Int32 nExpInterval, bool bExpSign ); - SAL_DLLPRIVATE void WriteFractionElement_Impl( sal_Int32 nInteger, sal_Int32 nBlankInteger, bool bGrouping, + SAL_DLLPRIVATE void WriteFractionElement_Impl( sal_Int32 nInteger, bool bGrouping, const SvNumberformat& rFormat, sal_uInt16 nPart ); SAL_DLLPRIVATE void WriteCurrencyElement_Impl( const OUString& rString, const OUString& rExt ); diff --git a/include/xmloff/xmlnumfi.hxx b/include/xmloff/xmlnumfi.hxx index 7e01f6afb4f3..39d058fbaeed 100644 --- a/include/xmloff/xmlnumfi.hxx +++ b/include/xmloff/xmlnumfi.hxx @@ -157,7 +157,7 @@ class XMLOFF_DLLPUBLIC SvXMLNumFormatContext : public SvXMLStyleContext public: SvXMLNumFormatContext( SvXMLImport& rImport, - sal_uInt16 nPrfx, + sal_uInt16 nPrfx, const OUString& rLName, SvXMLNumImpData* pNewData, sal_uInt16 nNewType, diff --git a/include/xmloff/xmltoken.hxx b/include/xmloff/xmltoken.hxx index 017af65a526b..862741d0a0eb 100644 --- a/include/xmloff/xmltoken.hxx +++ b/include/xmloff/xmltoken.hxx @@ -3316,7 +3316,6 @@ namespace xmloff { namespace token { XML_ZEROS_NUMERATOR_DIGITS, XML_ZEROS_DENOMINATOR_DIGITS, XML_INTEGER_FRACTION_DELIMITER, - XML_MAX_BLANK_INTEGER_DIGITS, // tdf#115319 XML_REFERENCE_LANGUAGE, diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx index 9b4ef9da027e..53e7a02e9acf 100644 --- a/svl/source/numbers/zformat.cxx +++ b/svl/source/numbers/zformat.cxx @@ -4755,10 +4755,9 @@ void SvNumberformat::GetNumForInfo( sal_uInt16 nNumFor, SvNumFormatType& rScanne { p++; } - while ( *p == '0' || *p == '?' ) + while ( *p++ == '0' ) { nLeadingCnt++; - p++; } } else if (nType == NF_SYMBOLTYPE_DECSEP diff --git a/xmloff/source/core/xmltoken.cxx b/xmloff/source/core/xmltoken.cxx index 13e58baea38a..f32309b3e1a1 100644 --- a/xmloff/source/core/xmltoken.cxx +++ b/xmloff/source/core/xmltoken.cxx @@ -3309,7 +3309,6 @@ namespace xmloff { namespace token { TOKEN( "zeros-numerator-digits", XML_ZEROS_NUMERATOR_DIGITS ), TOKEN( "zeros-denominator-digits", XML_ZEROS_DENOMINATOR_DIGITS ), TOKEN( "integer-fraction-delimiter", XML_INTEGER_FRACTION_DELIMITER ), - TOKEN( "max-blank-integer-digits", XML_MAX_BLANK_INTEGER_DIGITS ), // for optional language-dependent reference formats TOKEN( "reference-language", XML_REFERENCE_LANGUAGE ), diff --git a/xmloff/source/style/xmlnumfe.cxx b/xmloff/source/style/xmlnumfe.cxx index 96cd44061b3f..52847a6a8784 100644 --- a/xmloff/source/style/xmlnumfe.cxx +++ b/xmloff/source/style/xmlnumfe.cxx @@ -542,7 +542,7 @@ void SvXMLNumFmtExport::WriteAMPMElement_Impl() void SvXMLNumFmtExport::WriteNumberElement_Impl( sal_Int32 nDecimals, sal_Int32 nMinDecimals, - sal_Int32 nInteger, sal_Int32 nBlankInteger, const OUString& rDashStr, + sal_Int32 nInteger, const OUString& rDashStr, bool bGrouping, sal_Int32 nTrailingThousands, const SvXMLEmbeddedTextEntryArr& rEmbeddedEntries ) { @@ -555,10 +555,10 @@ void SvXMLNumFmtExport::WriteNumberElement_Impl( OUString::number( nDecimals ) ); } - SvtSaveOptions::ODFSaneDefaultVersion eVersion = rExport.getSaneDefaultVersion(); if ( nMinDecimals >= 0 ) // negative = automatic { // Export only for 1.2 with extensions or 1.3 and later. + SvtSaveOptions::ODFSaneDefaultVersion eVersion = rExport.getSaneDefaultVersion(); if (eVersion > SvtSaveOptions::ODFSVER_012) { // For 1.2+ use loext namespace, for 1.3 use number namespace. @@ -569,20 +569,13 @@ void SvXMLNumFmtExport::WriteNumberElement_Impl( } } - // integer digits: '0' and '?' + // integer digits if ( nInteger >= 0 ) // negative = automatic { rExport.AddAttribute( XML_NAMESPACE_NUMBER, XML_MIN_INTEGER_DIGITS, OUString::number( nInteger ) ); } - // blank integer digits: '?' - if ( nBlankInteger > 0 && ( (eVersion & SvtSaveOptions::ODFSVER_EXTENDED) != 0 ) ) - { - rExport.AddAttribute( XML_NAMESPACE_LO_EXT, XML_MAX_BLANK_INTEGER_DIGITS, - OUString::number( nBlankInteger ) ); - } - // decimal replacement (dashes) or variable decimals (#) if ( !rDashStr.isEmpty() || nMinDecimals < nDecimals ) { @@ -639,7 +632,7 @@ void SvXMLNumFmtExport::WriteNumberElement_Impl( } void SvXMLNumFmtExport::WriteScientificElement_Impl( - sal_Int32 nDecimals, sal_Int32 nMinDecimals, sal_Int32 nInteger, sal_Int32 nBlankInteger, + sal_Int32 nDecimals, sal_Int32 nMinDecimals, sal_Int32 nInteger, bool bGrouping, sal_Int32 nExp, sal_Int32 nExpInterval, bool bExpSign ) { FinishTextElement_Impl(); @@ -672,13 +665,6 @@ void SvXMLNumFmtExport::WriteScientificElement_Impl( OUString::number( nInteger ) ); } - // blank integer digits '?' - if ( nBlankInteger > 0 && ( (eVersion & SvtSaveOptions::ODFSVER_EXTENDED) != 0 ) ) - { - rExport.AddAttribute( XML_NAMESPACE_LO_EXT, XML_MAX_BLANK_INTEGER_DIGITS, - OUString::number( nBlankInteger ) ); - } - // (automatic) grouping separator if ( bGrouping ) { @@ -722,7 +708,7 @@ void SvXMLNumFmtExport::WriteScientificElement_Impl( } void SvXMLNumFmtExport::WriteFractionElement_Impl( - sal_Int32 nInteger, sal_Int32 nBlankInteger, bool bGrouping, + sal_Int32 nInteger, bool bGrouping, const SvNumberformat& rFormat, sal_uInt16 nPart ) { FinishTextElement_Impl(); @@ -761,14 +747,6 @@ void SvXMLNumFmtExport::WriteFractionElement_Impl( OUString::number( nInteger ) ); } - SvtSaveOptions::ODFSaneDefaultVersion eVersion = rExport.getSaneDefaultVersion(); - // blank integer digits '?' - if ( nBlankInteger > 0 && ( (eVersion & SvtSaveOptions::ODFSVER_EXTENDED) != 0 ) ) - { - rExport.AddAttribute( XML_NAMESPACE_LO_EXT, XML_MAX_BLANK_INTEGER_DIGITS, - OUString::number( nBlankInteger ) ); - } - // (automatic) grouping separator if ( bGrouping ) { @@ -776,6 +754,7 @@ void SvXMLNumFmtExport::WriteFractionElement_Impl( } // integer/fraction delimiter + SvtSaveOptions::ODFSaneDefaultVersion eVersion = rExport.getSaneDefaultVersion(); if ( !aIntegerFractionDelimiterString.isEmpty() && aIntegerFractionDelimiterString != " " && ((eVersion & SvtSaveOptions::ODFSVER_EXTENDED) != 0) ) { // Export only for 1.2 with extensions or 1.3 and later. @@ -1281,7 +1260,7 @@ void SvXMLNumFmtExport::ExportPart_Impl( const SvNumberformat& rFormat, sal_uInt if ( eBuiltIn == NF_NUMBER_STANDARD ) { // default number format contains just one number element - WriteNumberElement_Impl( -1, -1, 1, -1, OUString(), false, 0, aEmbeddedEntries ); + WriteNumberElement_Impl( -1, -1, 1, OUString(), false, 0, aEmbeddedEntries ); bAnyContent = true; } else if ( eBuiltIn == NF_BOOLEAN ) @@ -1304,7 +1283,6 @@ void SvXMLNumFmtExport::ExportPart_Impl( const SvNumberformat& rFormat, sal_uInt sal_Int32 nIntegerSymbols = 0; // for embedded-text, including "#" sal_Int32 nTrailingThousands = 0; // thousands-separators after all digits sal_Int32 nMinDecimals = nPrecision; - sal_Int32 nBlankInteger = 0; OUString sCurrExt; OUString aCalendar; sal_uInt16 nPos = 0; @@ -1327,7 +1305,7 @@ void SvXMLNumFmtExport::ExportPart_Impl( const SvNumberformat& rFormat, sal_uInt bDecDashes = true; nMinDecimals = 0; } - else if ( nFmtType != SvNumFormatType::FRACTION && !bInInteger && pElemStr ) + else if ( !bInInteger && pElemStr ) { for ( sal_Int32 i = pElemStr->getLength()-1; i >= 0 ; i-- ) { @@ -1343,18 +1321,10 @@ void SvXMLNumFmtExport::ExportPart_Impl( const SvNumberformat& rFormat, sal_uInt } } if ( bInInteger && pElemStr ) - { nIntegerSymbols += pElemStr->getLength(); - for ( sal_Int32 i = pElemStr->getLength()-1; i >= 0 ; i-- ) - { - if ( (*pElemStr)[i] == '?' ) - nBlankInteger ++; - } - } nTrailingThousands = 0; break; case NF_SYMBOLTYPE_DECSEP: - case NF_SYMBOLTYPE_FRACBLANK: bInInteger = false; break; case NF_SYMBOLTYPE_THSEP: @@ -1503,7 +1473,7 @@ void SvXMLNumFmtExport::ExportPart_Impl( const SvNumberformat& rFormat, sal_uInt } break; case NF_KEY_GENERAL : - WriteNumberElement_Impl( -1, -1, 1, -1, OUString(), false, 0, aEmbeddedEntries ); + WriteNumberElement_Impl( -1, -1, 1, OUString(), false, 0, aEmbeddedEntries ); break; case NF_KEY_CCC: if (pElemStr) @@ -1561,10 +1531,7 @@ void SvXMLNumFmtExport::ExportPart_Impl( const SvNumberformat& rFormat, sal_uInt // only one built-in format has automatic integer digits sal_Int32 nInteger = nLeading; if ( eBuiltIn == NF_NUMBER_SYSTEM ) - { nInteger = -1; - nBlankInteger = -1; - } // string for decimal replacement // has to be taken from nPrecision @@ -1576,17 +1543,16 @@ void SvXMLNumFmtExport::ExportPart_Impl( const SvNumberformat& rFormat, sal_uInt if (bDecAlign && nPrecision > 0) sDashStr = " "; - WriteNumberElement_Impl(nDecimals, nMinDecimals, nInteger, nBlankInteger, sDashStr.makeStringAndClear(), + WriteNumberElement_Impl(nDecimals, nMinDecimals, nInteger, sDashStr.makeStringAndClear(), bThousand, nTrailingThousands, aEmbeddedEntries); bAnyContent = true; } break; case SvNumFormatType::SCIENTIFIC: - // #i43959# for scientific numbers, count all integer symbols ("0", "?" and "#") + // #i43959# for scientific numbers, count all integer symbols ("0" and "#") // as integer digits: use nIntegerSymbols instead of nLeading // nIntegerSymbols represents exponent interval (for engineering notation) - WriteScientificElement_Impl( nPrecision, nMinDecimals, nLeading, nBlankInteger, - bThousand, nExpDigits, nIntegerSymbols, bExpSign ); + WriteScientificElement_Impl( nPrecision, nMinDecimals, nLeading, bThousand, nExpDigits, nIntegerSymbols, bExpSign ); bAnyContent = true; break; case SvNumFormatType::FRACTION: @@ -1598,9 +1564,8 @@ void SvXMLNumFmtExport::ExportPart_Impl( const SvNumberformat& rFormat, sal_uInt // the fraction doesn't have an integer part, and no // min-integer-digits attribute must be written. nInteger = -1; - nBlankInteger = -1; } - WriteFractionElement_Impl( nInteger, nBlankInteger, bThousand, rFormat, nPart ); + WriteFractionElement_Impl( nInteger, bThousand, rFormat, nPart ); bAnyContent = true; } break; diff --git a/xmloff/source/style/xmlnumfi.cxx b/xmloff/source/style/xmlnumfi.cxx index 5d68358c2db5..e611c144f290 100644 --- a/xmloff/source/style/xmlnumfi.cxx +++ b/xmloff/source/style/xmlnumfi.cxx @@ -92,8 +92,7 @@ public: struct SvXMLNumberInfo { sal_Int32 nDecimals; - sal_Int32 nInteger; /// Total min number of digits in integer part ('0' + '?') - sal_Int32 nBlankInteger; /// Number of '?' in integer part + sal_Int32 nInteger; sal_Int32 nExpDigits; sal_Int32 nExpInterval; sal_Int32 nMinNumerDigits; @@ -114,7 +113,7 @@ struct SvXMLNumberInfo SvXMLNumberInfo() { - nDecimals = nInteger = nBlankInteger = nExpDigits = nExpInterval = nMinNumerDigits = nMinDenomDigits = nMaxNumerDigits = nMaxDenomDigits = + nDecimals = nInteger = nExpDigits = nExpInterval = nMinNumerDigits = nMinDenomDigits = nMaxNumerDigits = nMaxDenomDigits = nFracDenominator = nMinDecimalDigits = nZerosNumerDigits = nZerosDenomDigits = -1; bGrouping = bDecReplace = bDecAlign = false; bExpSign = true; @@ -254,7 +253,6 @@ enum SvXMLStyleElemAttrTokens XML_TOK_ELEM_ATTR_DECIMAL_PLACES, XML_TOK_ELEM_ATTR_MIN_DECIMAL_PLACES, XML_TOK_ELEM_ATTR_MIN_INTEGER_DIGITS, - XML_TOK_ELEM_ATTR_MAX_BLANK_INTEGER_DIGITS, XML_TOK_ELEM_ATTR_GROUPING, XML_TOK_ELEM_ATTR_DISPLAY_FACTOR, XML_TOK_ELEM_ATTR_DECIMAL_REPLACEMENT, @@ -546,8 +544,6 @@ const SvXMLTokenMap& SvXMLNumImpData::GetStyleElemAttrTokenMap() { XML_NAMESPACE_LO_EXT, XML_MIN_DECIMAL_PLACES, XML_TOK_ELEM_ATTR_MIN_DECIMAL_PLACES }, { XML_NAMESPACE_NUMBER, XML_MIN_DECIMAL_PLACES, XML_TOK_ELEM_ATTR_MIN_DECIMAL_PLACES }, { XML_NAMESPACE_NUMBER, XML_MIN_INTEGER_DIGITS, XML_TOK_ELEM_ATTR_MIN_INTEGER_DIGITS }, - { XML_NAMESPACE_LO_EXT, XML_MAX_BLANK_INTEGER_DIGITS,XML_TOK_ELEM_ATTR_MAX_BLANK_INTEGER_DIGITS }, - { XML_NAMESPACE_NUMBER, XML_MAX_BLANK_INTEGER_DIGITS,XML_TOK_ELEM_ATTR_MAX_BLANK_INTEGER_DIGITS }, { XML_NAMESPACE_NUMBER, XML_GROUPING, XML_TOK_ELEM_ATTR_GROUPING }, { XML_NAMESPACE_NUMBER, XML_DISPLAY_FACTOR, XML_TOK_ELEM_ATTR_DISPLAY_FACTOR }, { XML_NAMESPACE_NUMBER, XML_DECIMAL_REPLACEMENT, XML_TOK_ELEM_ATTR_DECIMAL_REPLACEMENT }, @@ -935,10 +931,6 @@ SvXMLNumFmtElementContext::SvXMLNumFmtElementContext( SvXMLImport& rImport, if (::sax::Converter::convertNumber( nAttrVal, sValue, 0 )) aNumInfo.nInteger = nAttrVal; break; - case XML_TOK_ELEM_ATTR_MAX_BLANK_INTEGER_DIGITS: - if (::sax::Converter::convertNumber( nAttrVal, sValue, 0 )) - aNumInfo.nBlankInteger = nAttrVal; - break; case XML_TOK_ELEM_ATTR_GROUPING: if (::sax::Converter::convertBool( bAttrBool, sValue )) aNumInfo.bGrouping = bAttrBool; @@ -1032,8 +1024,6 @@ SvXMLNumFmtElementContext::SvXMLNumFmtElementContext( SvXMLImport& rImport, break; } } - if ( aNumInfo.nBlankInteger > aNumInfo.nInteger ) - aNumInfo.nInteger = aNumInfo.nBlankInteger; if ( aNumInfo.nMinDecimalDigits == -1) { if ( bVarDecimals || aNumInfo.bDecReplace ) @@ -1904,25 +1894,6 @@ void SvXMLNumFormatContext::AddNumber( const SvXMLNumberInfo& rInfo ) aNumStr.stripStart('#'); } - if ( rInfo.nBlankInteger > 0 ) - { - // Replace nBlankInteger '0' by '?' - sal_Int32 nIndex = 0; - sal_Int32 nBlanks = rInfo.nBlankInteger; - sal_Int32 nIntegerEnd = aNumStr.indexOf( pFormatter->GetNumDecimalSep() ); - if ( nIntegerEnd < 0 ) - nIntegerEnd = aNumStr.getLength(); - while ( nIndex < nIntegerEnd && nBlanks > 0 ) - { - if ( aNumStr[nIndex] == '0' ) - { - aNumStr[nIndex] = '?'; - nBlanks--; - } - nIndex++; - } - } - if ( bGrouping && rInfo.nExpInterval > rInfo.nInteger ) { sal_Int32 nIndex = 0; diff --git a/xmloff/source/token/tokens.txt b/xmloff/source/token/tokens.txt index 4b1c8544b7a0..63e8b99015ab 100644 --- a/xmloff/source/token/tokens.txt +++ b/xmloff/source/token/tokens.txt @@ -3084,7 +3084,6 @@ max-numerator-digits zeros-numerator-digits zeros-denominator-digits integer-fraction-delimiter -max-blank-integer-digits reference-language newline creator-initials |