summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/xmloff/xmlnumfe.hxx2
-rw-r--r--include/xmloff/xmltoken.hxx1
-rw-r--r--xmloff/source/core/xmltoken.cxx1
-rw-r--r--xmloff/source/style/xmlnumfe.cxx17
-rw-r--r--xmloff/source/style/xmlnumfi.cxx13
5 files changed, 30 insertions, 4 deletions
diff --git a/include/xmloff/xmlnumfe.hxx b/include/xmloff/xmlnumfe.hxx
index ceffa35d0679..1f4198a738c5 100644
--- a/include/xmloff/xmlnumfe.hxx
+++ b/include/xmloff/xmlnumfe.hxx
@@ -67,7 +67,7 @@ private:
bool bGrouping, sal_Int32 nTrailingThousands,
const SvXMLEmbeddedTextEntryArr& rEmbeddedEntries );
SAL_DLLPRIVATE void WriteScientificElement_Impl( sal_Int32 nDecimals, sal_Int32 nInteger,
- bool bGrouping, sal_Int32 nExp, sal_Int32 nExpInterval );
+ bool bGrouping, sal_Int32 nExp, sal_Int32 nExpInterval, bool bExpSign );
SAL_DLLPRIVATE void WriteFractionElement_Impl( sal_Int32 nInteger, bool bGrouping,
sal_Int32 nNumeratorDigits, sal_Int32 nDenominatorDigits, sal_Int32 nDenominator );
SAL_DLLPRIVATE void WriteCurrencyElement_Impl( const OUString& rString,
diff --git a/include/xmloff/xmltoken.hxx b/include/xmloff/xmltoken.hxx
index a4f026d0e12e..af2fcdbcaa18 100644
--- a/include/xmloff/xmltoken.hxx
+++ b/include/xmloff/xmltoken.hxx
@@ -3250,6 +3250,7 @@ namespace xmloff { namespace token {
XML_EXTERNALDATA,
XML_EXPONENT_INTERVAL,
+ XML_EXPONENT_SIGN,
XML_TOKEN_END
};
diff --git a/xmloff/source/core/xmltoken.cxx b/xmloff/source/core/xmltoken.cxx
index 27d4c32f368e..5a853e767391 100644
--- a/xmloff/source/core/xmltoken.cxx
+++ b/xmloff/source/core/xmltoken.cxx
@@ -3248,6 +3248,7 @@ namespace xmloff { namespace token {
TOKEN( "external-data", XML_EXTERNALDATA),
TOKEN( "exponent-interval", XML_EXPONENT_INTERVAL ),
+ TOKEN( "exponent-sign", XML_EXPONENT_SIGN ),
#if OSL_DEBUG_LEVEL > 0
{ 0, NULL, NULL, XML_TOKEN_END }
diff --git a/xmloff/source/style/xmlnumfe.cxx b/xmloff/source/style/xmlnumfe.cxx
index 91c78e45e486..2c0bab4f7352 100644
--- a/xmloff/source/style/xmlnumfe.cxx
+++ b/xmloff/source/style/xmlnumfe.cxx
@@ -634,7 +634,7 @@ void SvXMLNumFmtExport::WriteNumberElement_Impl(
void SvXMLNumFmtExport::WriteScientificElement_Impl(
sal_Int32 nDecimals, sal_Int32 nInteger,
- bool bGrouping, sal_Int32 nExp, sal_Int32 nExpInterval )
+ bool bGrouping, sal_Int32 nExp, sal_Int32 nExpInterval, bool bExpSign )
{
FinishTextElement_Impl();
@@ -679,6 +679,16 @@ void SvXMLNumFmtExport::WriteScientificElement_Impl(
}
}
+ // exponent sign
+ if ( bExpSign )
+ {
+ rExport.AddAttribute( XML_NAMESPACE_LO_EXT, XML_EXPONENT_SIGN, XML_TRUE );
+ }
+ else
+ {
+ rExport.AddAttribute( XML_NAMESPACE_LO_EXT, XML_EXPONENT_SIGN, XML_FALSE );
+ }
+
SvXMLElementExport aElem( rExport,
XML_NAMESPACE_NUMBER, XML_SCIENTIFIC_NUMBER,
true, false );
@@ -1162,6 +1172,7 @@ void SvXMLNumFmtExport::ExportPart_Impl( const SvNumberformat& rFormat, sal_uInt
bool bExpFound = false;
bool bCurrFound = false;
bool bInInteger = true;
+ bool bExpSign = true;
sal_Int32 nExpDigits = 0;
sal_Int32 nIntegerSymbols = 0; // for embedded-text, including "#"
sal_Int32 nTrailingThousands = 0; // thousands-separators after all digits
@@ -1204,6 +1215,8 @@ void SvXMLNumFmtExport::ExportPart_Impl( const SvNumberformat& rFormat, sal_uInt
case NF_SYMBOLTYPE_EXP:
bExpFound = true; // following digits are exponent digits
bInInteger = false;
+ if ( pElemStr && pElemStr->getLength() == 1 )
+ bExpSign = false; // for 0.00E0
break;
case NF_SYMBOLTYPE_CURRENCY:
bCurrFound = true;
@@ -1415,7 +1428,7 @@ void SvXMLNumFmtExport::ExportPart_Impl( const SvNumberformat& rFormat, sal_uInt
// #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, nLeading, bThousand, nExpDigits, nIntegerSymbols );
+ WriteScientificElement_Impl( nPrecision, nLeading, bThousand, nExpDigits, nIntegerSymbols, bExpSign );
bAnyContent = true;
break;
case css::util::NumberFormat::FRACTION:
diff --git a/xmloff/source/style/xmlnumfi.cxx b/xmloff/source/style/xmlnumfi.cxx
index f7b9e824d3f0..02f31cd98a04 100644
--- a/xmloff/source/style/xmlnumfi.cxx
+++ b/xmloff/source/style/xmlnumfi.cxx
@@ -117,6 +117,7 @@ struct SvXMLNumberInfo
bool bGrouping;
bool bDecReplace;
bool bVarDecimals;
+ bool bExpSign;
double fDisplayFactor;
SvXMLEmbeddedElementArr aEmbeddedElements;
@@ -124,6 +125,7 @@ struct SvXMLNumberInfo
{
nDecimals = nInteger = nExpDigits = nExpInterval = nNumerDigits = nDenomDigits = nFracDenominator = -1;
bGrouping = bDecReplace = bVarDecimals = false;
+ bExpSign = true;
fDisplayFactor = 1.0;
}
};
@@ -278,6 +280,7 @@ enum SvXMLStyleElemAttrTokens
XML_TOK_ELEM_ATTR_DENOMINATOR_VALUE,
XML_TOK_ELEM_ATTR_MIN_EXPONENT_DIGITS,
XML_TOK_ELEM_ATTR_EXPONENT_INTERVAL,
+ XML_TOK_ELEM_ATTR_EXPONENT_SIGN,
XML_TOK_ELEM_ATTR_MIN_NUMERATOR_DIGITS,
XML_TOK_ELEM_ATTR_MIN_DENOMINATOR_DIGITS,
XML_TOK_ELEM_ATTR_RFC_LANGUAGE_TAG,
@@ -575,6 +578,7 @@ const SvXMLTokenMap& SvXMLNumImpData::GetStyleElemAttrTokenMap()
{ XML_NAMESPACE_NUMBER, XML_MIN_EXPONENT_DIGITS, XML_TOK_ELEM_ATTR_MIN_EXPONENT_DIGITS },
{ XML_NAMESPACE_LO_EXT, XML_EXPONENT_INTERVAL, XML_TOK_ELEM_ATTR_EXPONENT_INTERVAL },
{ XML_NAMESPACE_NUMBER, XML_EXPONENT_INTERVAL, XML_TOK_ELEM_ATTR_EXPONENT_INTERVAL },
+ { XML_NAMESPACE_LO_EXT, XML_EXPONENT_SIGN, XML_TOK_ELEM_ATTR_EXPONENT_SIGN },
{ XML_NAMESPACE_NUMBER, XML_MIN_NUMERATOR_DIGITS, XML_TOK_ELEM_ATTR_MIN_NUMERATOR_DIGITS },
{ XML_NAMESPACE_NUMBER, XML_MIN_DENOMINATOR_DIGITS, XML_TOK_ELEM_ATTR_MIN_DENOMINATOR_DIGITS },
{ XML_NAMESPACE_NUMBER, XML_RFC_LANGUAGE_TAG, XML_TOK_ELEM_ATTR_RFC_LANGUAGE_TAG },
@@ -966,6 +970,10 @@ SvXMLNumFmtElementContext::SvXMLNumFmtElementContext( SvXMLImport& rImport,
if (::sax::Converter::convertNumber( nAttrVal, sValue, 0 ))
aNumInfo.nExpInterval = nAttrVal;
break;
+ case XML_TOK_ELEM_ATTR_EXPONENT_SIGN:
+ if (::sax::Converter::convertBool( bAttrBool, sValue ))
+ aNumInfo.bExpSign = bAttrBool;
+ break;
case XML_TOK_ELEM_ATTR_MIN_NUMERATOR_DIGITS:
if (::sax::Converter::convertNumber( nAttrVal, sValue, 0 ))
aNumInfo.nNumerDigits = nAttrVal;
@@ -1237,7 +1245,10 @@ void SvXMLNumFmtElementContext::EndElement()
}
rParent.AddNumber( aNumInfo ); // simple number
- rParent.AddToCode( OUString("E+") );
+ if ( aNumInfo.bExpSign )
+ rParent.AddToCode( OUString("E+") );
+ else
+ rParent.AddToCode( OUString("E") );
for (sal_Int32 i=0; i<aNumInfo.nExpDigits; i++)
{
rParent.AddToCode( '0' );