[Libreoffice-commits] core.git: Branch 'distro/nisz/libreoffice-7-0' - include/sax oox/source sc/source sd/source
Mike Kaganski (via logerrit)
logerrit at kemper.freedesktop.org
Thu Feb 25 14:13:21 UTC 2021
include/sax/fshelper.hxx | 41 ++++++++++++++++-----
oox/source/export/drawingml.cxx | 56 +++++++++++++++---------------
oox/source/export/shapes.cxx | 8 ++--
sc/source/filter/excel/xecontent.cxx | 15 +++-----
sc/source/filter/excel/xeescher.cxx | 8 ++--
sc/source/filter/excel/xeextlst.cxx | 4 +-
sc/source/filter/excel/xestyle.cxx | 4 +-
sd/source/filter/eppt/pptx-animations.cxx | 38 ++++++++++----------
sd/source/filter/eppt/pptx-epptooxml.cxx | 8 ++--
9 files changed, 101 insertions(+), 81 deletions(-)
New commits:
commit 5f6a288f0ce4ed2507cb65b97ad8474416931768
Author: Mike Kaganski <mike.kaganski at collabora.com>
AuthorDate: Mon Jul 6 02:08:33 2020 +0300
Commit: Gabor Kelemen <kelemen.gabor2 at nisz.hu>
CommitDate: Thu Feb 25 15:12:46 2021 +0100
Use std::optional to allow optional inclusion of attributes
... instead of converting the O(U)String objects to char*.
Eventually this could allow to drop variants of *Element that take
XFastAttributeListRef.
Change-Id: Ib2748fcd93e655c55a176c00410fdcc7f052930d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98179
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski at collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111546
Tested-by: Gabor Kelemen <kelemen.gabor2 at nisz.hu>
Reviewed-by: Gabor Kelemen <kelemen.gabor2 at nisz.hu>
diff --git a/include/sax/fshelper.hxx b/include/sax/fshelper.hxx
index 235181bf9846..e4b5072345e2 100644
--- a/include/sax/fshelper.hxx
+++ b/include/sax/fshelper.hxx
@@ -25,6 +25,7 @@
#include <com/sun/star/uno/Sequence.hxx>
#include <rtl/ustring.hxx>
#include <sax/saxdllapi.h>
+#include <optional>
#include <memory>
#include <utility>
@@ -58,16 +59,21 @@ public:
startElement(elementTokenId, std::forward<Args>(args)...);
}
template<typename... Args>
- void startElement(sal_Int32 elementTokenId, sal_Int32 attribute, const OString& value, Args &&... args)
+ void startElement(sal_Int32 elementTokenId, sal_Int32 attribute,
+ const std::optional<OString>& value, Args&&... args)
{
- pushAttributeValue(attribute, value);
+ if (value)
+ pushAttributeValue(attribute, *value);
startElement(elementTokenId, std::forward<Args>(args)...);
}
template<typename... Args>
- void startElement(sal_Int32 elementTokenId, sal_Int32 attribute, const OUString& value, Args&&... args)
+ void startElement(sal_Int32 elementTokenId, sal_Int32 attribute,
+ const std::optional<OUString>& value, Args&&... args)
{
- // The temporary created by toUtf8() must stay alive until startElement() ends using it
- startElement(elementTokenId, attribute, value.toUtf8(), std::forward<Args>(args)...);
+ std::optional<OString> opt;
+ if (value)
+ opt = value->toUtf8();
+ startElement(elementTokenId, attribute, opt, std::forward<Args>(args)...);
}
void startElement(sal_Int32 elementTokenId);
@@ -87,16 +93,21 @@ public:
singleElement(elementTokenId, std::forward<Args>(args)...);
}
template<typename... Args>
- void singleElement(sal_Int32 elementTokenId, sal_Int32 attribute, const OString& value, Args &&... args)
+ void singleElement(sal_Int32 elementTokenId, sal_Int32 attribute,
+ const std::optional<OString>& value, Args&&... args)
{
- pushAttributeValue(attribute, value);
+ if (value)
+ pushAttributeValue(attribute, *value);
singleElement(elementTokenId, std::forward<Args>(args)...);
}
template<typename... Args>
- void singleElement(sal_Int32 elementTokenId, sal_Int32 attribute, const OUString& value, Args&&... args)
+ void singleElement(sal_Int32 elementTokenId, sal_Int32 attribute,
+ const std::optional<OUString>& value, Args&&... args)
{
- // The temporary created by toUtf8() must stay alive until singleElement() ends using it
- singleElement(elementTokenId, attribute, value.toUtf8(), std::forward<Args>(args)...);
+ std::optional<OString> opt;
+ if (value)
+ opt = value->toUtf8();
+ singleElement(elementTokenId, attribute, opt, std::forward<Args>(args)...);
}
void singleElement(sal_Int32 elementTokenId);
@@ -150,6 +161,16 @@ private:
typedef std::shared_ptr< FastSerializerHelper > FSHelperPtr;
+// Helpers to make intention to pass optional attributes to *Element finctions explicit, instead of
+// using `(condition) ? value.toUtf8().getStr() : nullptr` syntax.
+inline const char* UseIf(const char* s, bool bUse) { return bUse ? s : nullptr; }
+// OString, OUString
+template<class TString>
+std::optional<TString> UseIf(const TString& s, bool bUse)
+{
+ return bUse ? std::optional<TString>(s) : std::optional<TString>();
+}
+
}
#endif // INCLUDED_SAX_FSHELPER_HXX
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index def29007a50b..7ccb5209c7e3 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -867,8 +867,8 @@ void DrawingML::WriteOutline( const Reference<XPropertySet>& rXPropSet, Referenc
nEmuLineWidth = oox::drawingml::convertHmmToEmu(nLineWidth);
mpFS->startElementNS( XML_a, XML_ln,
XML_cap, cap,
- XML_w, nLineWidth == 0 || (nLineWidth > 1 && nStyleLineWidth != nLineWidth) ?
- OString::number(nEmuLineWidth).getStr() : nullptr );
+ XML_w, sax_fastparser::UseIf(OString::number(nEmuLineWidth),
+ nLineWidth == 0 || (nLineWidth > 1 && nStyleLineWidth != nLineWidth)) );
if( bColorSet )
{
@@ -1344,8 +1344,8 @@ void DrawingML::WriteImageBrightnessContrastTransparence(uno::Reference<beans::X
if (nBright || nContrast)
{
mpFS->singleElementNS(XML_a, XML_lum,
- XML_bright, nBright ? OString::number(nBright * 1000).getStr() : nullptr,
- XML_contrast, nContrast ? OString::number(nContrast * 1000).getStr() : nullptr);
+ XML_bright, sax_fastparser::UseIf(OString::number(nBright * 1000), nBright != 0),
+ XML_contrast, sax_fastparser::UseIf(OString::number(nContrast * 1000), nContrast != 0));
}
if (nTransparence)
@@ -1611,9 +1611,9 @@ void DrawingML::WriteTransformation(const tools::Rectangle& rRect,
{
mpFS->startElementNS( nXmlNamespace, XML_xfrm,
- XML_flipH, bFlipH ? "1" : nullptr,
- XML_flipV, bFlipV ? "1" : nullptr,
- XML_rot, (nRotation % 21600000) ? OString::number(nRotation).getStr() : nullptr );
+ XML_flipH, sax_fastparser::UseIf("1", bFlipH),
+ XML_flipV, sax_fastparser::UseIf("1", bFlipV),
+ XML_rot, sax_fastparser::UseIf(OString::number(nRotation), nRotation % 21600000 != 0));
sal_Int32 nLeft = rRect.Left();
sal_Int32 nTop = rRect.Top();
@@ -1918,13 +1918,13 @@ void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool
mpFS->startElementNS( XML_a, nElement,
XML_b, bold,
XML_i, italic,
- XML_lang, usLanguage.isEmpty() ? nullptr : usLanguage.toUtf8().getStr(),
+ XML_lang, sax_fastparser::UseIf(usLanguage, !usLanguage.isEmpty()),
XML_sz, OString::number(nSize),
// For Condensed character spacing spc value is negative.
- XML_spc, nCharKerning ? OString::number(nCharKerning).getStr() : nullptr,
+ XML_spc, sax_fastparser::UseIf(OString::number(nCharKerning), nCharKerning != 0),
XML_strike, strikeout,
XML_u, underline,
- XML_baseline, nCharEscapement == 0 ? nullptr : OString::number(nCharEscapement*1000).getStr(),
+ XML_baseline, sax_fastparser::UseIf(OString::number(nCharEscapement*1000), nCharEscapement != 0),
XML_cap, cap );
// mso doesn't like text color to be placed after typeface
@@ -2437,7 +2437,7 @@ void DrawingML::WriteParagraphNumbering(const Reference< XPropertySet >& rXPropS
aBulletChar = SubstituteBullet( aBulletChar, aFontDesc );
mpFS->singleElementNS( XML_a, XML_buFont,
XML_typeface, aFontDesc.Name,
- XML_charset, (aFontDesc.CharSet == awt::CharSet::SYMBOL) ? "2" : nullptr );
+ XML_charset, sax_fastparser::UseIf("2", aFontDesc.CharSet == awt::CharSet::SYMBOL));
}
OUString aAutoNumType = GetAutoNumType( nNumberingType, bSDot, bPBehind, bPBoth );
@@ -2446,7 +2446,7 @@ void DrawingML::WriteParagraphNumbering(const Reference< XPropertySet >& rXPropS
{
mpFS->singleElementNS(XML_a, XML_buAutoNum,
XML_type, aAutoNumType,
- XML_startAt, nStartWith > 1 ? OString::number(nStartWith).getStr() : nullptr);
+ XML_startAt, sax_fastparser::UseIf(OString::number(nStartWith), nStartWith > 1));
}
else
{
@@ -2648,18 +2648,18 @@ void DrawingML::WriteParagraphProperties( const Reference< XTextContent >& rPara
if (nParaLeftMargin) // For Paragraph
mpFS->startElementNS( XML_a, XML_pPr,
- XML_lvl, nLevel > 0 ? OString::number(nLevel).getStr() : nullptr,
- XML_marL, nParaLeftMargin > 0 ? OString::number(oox::drawingml::convertHmmToEmu(nParaLeftMargin)).getStr() : nullptr,
- XML_indent, nParaFirstLineIndent ? OString::number(oox::drawingml::convertHmmToEmu(nParaFirstLineIndent)).getStr() : nullptr,
+ XML_lvl, sax_fastparser::UseIf(OString::number(nLevel), nLevel > 0),
+ XML_marL, sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nParaLeftMargin)), nParaLeftMargin > 0),
+ XML_indent, sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nParaFirstLineIndent)), nParaFirstLineIndent != 0),
XML_algn, GetAlignment( nAlignment ),
- XML_rtl, bRtl ? ToPsz10(bRtl) : nullptr );
+ XML_rtl, sax_fastparser::UseIf(ToPsz10(bRtl), bRtl));
else
mpFS->startElementNS( XML_a, XML_pPr,
- XML_lvl, nLevel > 0 ? OString::number(nLevel).getStr() : nullptr,
- XML_marL, nLeftMargin > 0 ? OString::number(oox::drawingml::convertHmmToEmu(nLeftMargin)).getStr() : nullptr,
- XML_indent, nLineIndentation ? OString::number(oox::drawingml::convertHmmToEmu(nLineIndentation)).getStr() : nullptr,
+ XML_lvl, sax_fastparser::UseIf(OString::number(nLevel), nLevel > 0),
+ XML_marL, sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nLeftMargin)), nLeftMargin > 0),
+ XML_indent, sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nLineIndentation)), nLineIndentation != 0),
XML_algn, GetAlignment( nAlignment ),
- XML_rtl, bRtl ? ToPsz10(bRtl) : nullptr );
+ XML_rtl, sax_fastparser::UseIf(ToPsz10(bRtl), bRtl));
if( bHasLinespacing )
@@ -2883,16 +2883,16 @@ void DrawingML::WriteText( const Reference< XInterface >& rXIface, const OUStrin
mpFS->startElementNS( (nXmlNamespace ? nXmlNamespace : XML_a), XML_bodyPr,
XML_wrap, pWrap,
- XML_fromWordArt, bFromWordArt ? "1" : nullptr,
- XML_lIns, (nLeft != DEFLRINS) ? OString::number(oox::drawingml::convertHmmToEmu(nLeft)).getStr() : nullptr,
- XML_rIns, (nRight != DEFLRINS) ? OString::number(oox::drawingml::convertHmmToEmu(nRight)).getStr() : nullptr,
- XML_tIns, (nTop != DEFTBINS) ? OString::number(oox::drawingml::convertHmmToEmu(nTop)).getStr() : nullptr,
- XML_bIns, (nBottom != DEFTBINS) ? OString::number(oox::drawingml::convertHmmToEmu(nBottom)).getStr() : nullptr,
+ XML_fromWordArt, sax_fastparser::UseIf("1", bFromWordArt),
+ XML_lIns, sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nLeft)), nLeft != DEFLRINS),
+ XML_rIns, sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nRight)), nRight != DEFLRINS),
+ XML_tIns, sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nTop)), nTop != DEFTBINS),
+ XML_bIns, sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nBottom)), nBottom != DEFTBINS),
XML_anchor, sVerticalAlignment,
- XML_anchorCtr, bHorizontalCenter ? "1" : nullptr,
+ XML_anchorCtr, sax_fastparser::UseIf("1", bHorizontalCenter),
XML_vert, sWritingMode,
XML_upright, isUpright ? "1" : "0",
- XML_rot, ((nTextPreRotateAngle + nTextRotateAngle) != 0) ? oox::drawingml::calcRotationValue( (nTextPreRotateAngle + nTextRotateAngle) * 100 ).getStr() : nullptr );
+ XML_rot, sax_fastparser::UseIf(oox::drawingml::calcRotationValue((nTextPreRotateAngle + nTextRotateAngle) * 100), (nTextPreRotateAngle + nTextRotateAngle) != 0));
if (bIsFontworkShape)
{
if (aAdjustmentSeq.hasElements())
@@ -2981,7 +2981,7 @@ void DrawingML::WriteText( const Reference< XInterface >& rXIface, const OUStrin
}
mpFS->singleElementNS(XML_a, XML_normAutofit, XML_fontScale,
- ( nFontScale < MAX_SCALE_VAL && nFontScale > 0 ) ? OString::number(nFontScale).getStr() : nullptr);
+ sax_fastparser::UseIf(OString::number(nFontScale), nFontScale < MAX_SCALE_VAL && nFontScale > 0));
}
else
{
diff --git a/oox/source/export/shapes.cxx b/oox/source/export/shapes.cxx
index 014e57ef9a97..3eccfa5d44c5 100644
--- a/oox/source/export/shapes.cxx
+++ b/oox/source/export/shapes.cxx
@@ -802,7 +802,7 @@ ShapeExport& ShapeExport::WriteCustomShape( const Reference< XShape >& xShape )
pFS->startElementNS( mnXmlNamespace, XML_cNvPr,
XML_id, OString::number(GetNewShapeID(xShape)),
XML_name, GetShapeName(xShape),
- XML_hidden, isVisible ? nullptr : "1" );
+ XML_hidden, sax_fastparser::UseIf("1", !isVisible));
if( GETA( URL ) )
{
@@ -1204,7 +1204,7 @@ void ShapeExport::WriteGraphicObjectShapePart( const Reference< XShape >& xShape
pFS->startElementNS( mnXmlNamespace, XML_cNvPr,
XML_id, OString::number(GetNewShapeID(xShape)),
XML_name, GetShapeName(xShape),
- XML_descr, bHaveDesc ? sDescr.toUtf8().getStr() : nullptr );
+ XML_descr, sax_fastparser::UseIf(sDescr, bHaveDesc));
// OOXTODO: //cNvPr children: XML_extLst, XML_hlinkHover
if (bHasMediaURL)
@@ -1801,8 +1801,8 @@ void ShapeExport::WriteTableCellProperties(const Reference< XPropertySet>& xCell
aRightMargin >>= nRightMargin;
mpFS->startElementNS(XML_a, XML_tcPr,
- XML_marL, nLeftMargin > 0 ? OString::number(oox::drawingml::convertHmmToEmu(nLeftMargin)).getStr() : nullptr,
- XML_marR, nRightMargin > 0 ? OString::number(oox::drawingml::convertHmmToEmu(nRightMargin)).getStr() : nullptr);
+ XML_marL, sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nLeftMargin)), nLeftMargin > 0),
+ XML_marR, sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nRightMargin)), nRightMargin > 0));
// Write background fill for table cell.
// TODO
diff --git a/sc/source/filter/excel/xecontent.cxx b/sc/source/filter/excel/xecontent.cxx
index d69946b06f62..7f09509175f9 100644
--- a/sc/source/filter/excel/xecontent.cxx
+++ b/sc/source/filter/excel/xecontent.cxx
@@ -524,14 +524,13 @@ void XclExpHyperlink::SaveXml( XclExpXmlStream& rStrm )
OUString sId = !msTarget.isEmpty() ? rStrm.addRelation( rStrm.GetCurrentStream()->getOutputStream(),
oox::getRelationship(Relationship::HYPERLINK),
msTarget, true ) : OUString();
+ std::optional<OString> sTextMark;
+ if (mxTextMark)
+ sTextMark = XclXmlUtils::ToOString(*mxTextMark);
rStrm.GetCurrentStream()->singleElement( XML_hyperlink,
XML_ref, XclXmlUtils::ToOString(rStrm.GetRoot().GetDoc(), maScPos),
- FSNS( XML_r, XML_id ), !sId.isEmpty()
- ? sId.toUtf8().getStr()
- : nullptr,
- XML_location, mxTextMark.get() != nullptr
- ? XclXmlUtils::ToOString( *mxTextMark ).getStr()
- : nullptr,
+ FSNS( XML_r, XML_id ), sax_fastparser::UseIf(sId, !sId.isEmpty()),
+ XML_location, sTextMark,
// OOXTODO: XML_tooltip, from record HLinkTooltip 800h wzTooltip
XML_display, m_Repr );
}
@@ -1548,8 +1547,8 @@ void XclExpIconSet::SaveXml( XclExpXmlStream& rStrm )
const char* pIconSetName = ScIconSetFormat::getIconSetName(mrFormat.GetIconSetData()->eIconSetType);
rWorksheet->startElement( XML_iconSet,
XML_iconSet, pIconSetName,
- XML_showValue, mrFormat.GetIconSetData()->mbShowValue ? nullptr : "0",
- XML_reverse, mrFormat.GetIconSetData()->mbReverse ? "1" : nullptr );
+ XML_showValue, sax_fastparser::UseIf("0", !mrFormat.GetIconSetData()->mbShowValue),
+ XML_reverse, sax_fastparser::UseIf("1", mrFormat.GetIconSetData()->mbReverse));
maCfvoList.SaveXml( rStrm );
diff --git a/sc/source/filter/excel/xeescher.cxx b/sc/source/filter/excel/xeescher.cxx
index 8afbe2e3752b..0e78fbf251da 100644
--- a/sc/source/filter/excel/xeescher.cxx
+++ b/sc/source/filter/excel/xeescher.cxx
@@ -1192,10 +1192,10 @@ void XclExpTbxControlObj::SaveXml( XclExpXmlStream& rStrm )
// Insets are used just as internal margins for text boxes within shapes.
// If this attribute is omitted, then a value of 45720 or 0.05 inches is implied.
pDrawing->startElementNS(XML_a, XML_bodyPr,
- XML_lIns, (nLeft != DEFLRINS) ? OString::number(oox::drawingml::convertHmmToEmu(nLeft)).getStr() : nullptr,
- XML_rIns, (nRight != DEFLRINS) ? OString::number(oox::drawingml::convertHmmToEmu(nRight)).getStr() : nullptr,
- XML_tIns, (nTop != DEFTBINS) ? OString::number(oox::drawingml::convertHmmToEmu(nTop)).getStr() : nullptr,
- XML_bIns, (nBottom != DEFTBINS) ? OString::number(oox::drawingml::convertHmmToEmu(nBottom)).getStr() : nullptr,
+ XML_lIns, sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nLeft)), nLeft != DEFLRINS),
+ XML_rIns, sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nRight)), nRight != DEFLRINS),
+ XML_tIns, sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nTop)), nTop != DEFTBINS),
+ XML_bIns, sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nBottom)), nBottom != DEFTBINS),
XML_anchor, "ctr");
{
diff --git a/sc/source/filter/excel/xeextlst.cxx b/sc/source/filter/excel/xeextlst.cxx
index db770b0dc6cd..35d2fac152d7 100644
--- a/sc/source/filter/excel/xeextlst.cxx
+++ b/sc/source/filter/excel/xeextlst.cxx
@@ -340,7 +340,7 @@ void XclExpExtIconSet::SaveXml(XclExpXmlStream& rStrm)
rWorksheet->startElementNS(XML_x14, XML_iconSet,
XML_iconSet, mpIconSetName,
- XML_custom, mbCustom ? ToPsz10(mbCustom) : nullptr,
+ XML_custom, sax_fastparser::UseIf(ToPsz10(mbCustom), mbCustom),
XML_reverse, ToPsz10(mbReverse),
XML_showValue, ToPsz10(mbShowValue));
@@ -398,7 +398,7 @@ void XclExpExtCfRule::SaveXml( XclExpXmlStream& rStrm )
sax_fastparser::FSHelperPtr& rWorksheet = rStrm.GetCurrentStream();
rWorksheet->startElementNS( XML_x14, XML_cfRule,
XML_type, pType,
- XML_priority, mnPriority == -1 ? nullptr : OString::number(mnPriority + 1).getStr(),
+ XML_priority, sax_fastparser::UseIf(OString::number(mnPriority + 1), mnPriority != -1),
XML_operator, mOperator,
XML_id, maId );
diff --git a/sc/source/filter/excel/xestyle.cxx b/sc/source/filter/excel/xestyle.cxx
index 8e630659434f..5a0354701b64 100644
--- a/sc/source/filter/excel/xestyle.cxx
+++ b/sc/source/filter/excel/xestyle.cxx
@@ -1600,7 +1600,7 @@ void XclExpCellAlign::SaveXml( XclExpXmlStream& rStrm ) const
// OOXTODO: XML_relativeIndent, mnIndent?
// OOXTODO: XML_justifyLastLine,
XML_shrinkToFit, ToPsz( mbShrink ),
- XML_readingOrder, mnTextDir == EXC_XF_TEXTDIR_CONTEXT ? nullptr : OString::number(mnTextDir).getStr() );
+ XML_readingOrder, sax_fastparser::UseIf(OString::number(mnTextDir), mnTextDir != EXC_XF_TEXTDIR_CONTEXT) );
}
namespace {
@@ -2200,7 +2200,7 @@ void XclExpXF::SaveXml( XclExpXmlStream& rStrm )
XML_fontId, OString::number(mnXclFont),
XML_fillId, OString::number(mnFillId),
XML_borderId, OString::number(mnBorderId),
- XML_xfId, IsStyleXF() ? nullptr : OString::number( nXfId ).getStr(),
+ XML_xfId, sax_fastparser::UseIf(OString::number(nXfId), !IsStyleXF()),
// OOXTODO: XML_quotePrefix,
// OOXTODO: XML_pivotButton,
// OOXTODO: XML_applyNumberFormat, ;
diff --git a/sd/source/filter/eppt/pptx-animations.cxx b/sd/source/filter/eppt/pptx-animations.cxx
index b46232604694..53d2ce888686 100644
--- a/sd/source/filter/eppt/pptx-animations.cxx
+++ b/sd/source/filter/eppt/pptx-animations.cxx
@@ -217,7 +217,7 @@ void WriteAnimateValues(const FSHelperPtr& pFS, const Reference<XAnimate>& rXAni
if (aValues[i].hasValue())
{
pFS->startElementNS(XML_p, XML_tav, XML_fmla,
- sFormula.isEmpty() ? nullptr : sFormula.toUtf8().getStr(), XML_tm,
+ sax_fastparser::UseIf(sFormula, !sFormula.isEmpty()), XML_tm,
OString::number(static_cast<sal_Int32>(aKeyTimes[i] * 100000.0)));
pFS->startElementNS(XML_p, XML_val);
ValuePair aPair;
@@ -903,10 +903,9 @@ void PPTXAnimationExport::WriteAnimationNodeAnimate(sal_Int32 nXmlNodeType)
}
mpFS->startElementNS(XML_p, nXmlNodeType, XML_calcmode, pCalcMode, XML_valueType,
- pValueType, XML_from,
- sFrom.isEmpty() ? nullptr : sFrom.toUtf8().getStr(), XML_to,
- sTo.isEmpty() ? nullptr : sTo.toUtf8().getStr(), XML_by,
- sBy.isEmpty() ? nullptr : sBy.toUtf8().getStr());
+ pValueType, XML_from, sax_fastparser::UseIf(sFrom, !sFrom.isEmpty()),
+ XML_to, sax_fastparser::UseIf(sTo, !sTo.isEmpty()), XML_by,
+ sax_fastparser::UseIf(sBy, !sBy.isEmpty()));
bTo = sTo.isEmpty() && sFrom.isEmpty() && sBy.isEmpty();
}
@@ -984,7 +983,7 @@ void PPTXAnimationExport::WriteAnimationNodeAnimateInside(bool bSimple, bool bWr
void PPTXAnimationExport::WriteAnimationNodeCommonPropsStart()
{
const Reference<XAnimationNode>& rXNode = getCurrentNode();
- const char* pDuration = nullptr;
+ std::optional<OString> sDuration;
const char* pRestart = nullptr;
const char* pNodeType = nullptr;
const char* pPresetClass = nullptr;
@@ -1001,7 +1000,7 @@ void PPTXAnimationExport::WriteAnimationNodeCommonPropsStart()
if (aAny >>= eTiming)
{
if (eTiming == Timing_INDEFINITE)
- pDuration = "indefinite";
+ sDuration = "indefinite";
}
else
aAny >>= fDuration;
@@ -1015,17 +1014,20 @@ void PPTXAnimationExport::WriteAnimationNodeCommonPropsStart()
pNodeType = convertEffectNodeType(nType);
if (nType == EffectNodeType::TIMING_ROOT)
{
- if (!pDuration)
- pDuration = "indefinite";
+ if (!sDuration)
+ sDuration = "indefinite";
if (!pRestart)
pRestart = "never";
}
else if (nType == EffectNodeType::MAIN_SEQUENCE)
{
- pDuration = "indefinite";
+ sDuration = "indefinite";
}
}
+ if (fDuration != 0)
+ sDuration = OString::number(static_cast<sal_Int32>(fDuration * 1000.0));
+
sal_uInt32 nPresetClass = mpContext->getEffectPresetClass();
if (nPresetClass != DFF_ANIM_PRESS_CLASS_USER_DEFINED)
pPresetClass = convertEffectPresetClass(nPresetClass);
@@ -1059,13 +1061,11 @@ void PPTXAnimationExport::WriteAnimationNodeCommonPropsStart()
bool bAutoReverse = rXNode->getAutoReverse();
mpFS->startElementNS(
- XML_p, XML_cTn, XML_id, OString::number(GetNextAnimationNodeId(rXNode)), XML_dur,
- fDuration != 0 ? OString::number(static_cast<sal_Int32>(fDuration * 1000.0)).getStr()
- : pDuration,
- XML_autoRev, bAutoReverse ? "1" : nullptr, XML_restart, pRestart, XML_nodeType, pNodeType,
- XML_fill, pFill, XML_presetClass, pPresetClass, XML_presetID,
- bPresetId ? OString::number(nPresetId).getStr() : nullptr, XML_presetSubtype,
- bPresetSubType ? OString::number(nPresetSubType).getStr() : nullptr);
+ XML_p, XML_cTn, XML_id, OString::number(GetNextAnimationNodeId(rXNode)), XML_dur, sDuration,
+ XML_autoRev, sax_fastparser::UseIf("1", bAutoReverse), XML_restart, pRestart, XML_nodeType,
+ pNodeType, XML_fill, pFill, XML_presetClass, pPresetClass, XML_presetID,
+ sax_fastparser::UseIf(OString::number(nPresetId), bPresetId), XML_presetSubtype,
+ sax_fastparser::UseIf(OString::number(nPresetSubType), bPresetSubType));
WriteAnimationCondList(mpContext->getCondition(true), XML_stCondLst);
WriteAnimationCondList(mpContext->getCondition(false), XML_endCondLst);
@@ -1194,8 +1194,8 @@ void PPTXAnimationExport::WriteAnimationNodeAudio()
mpFS->startElementNS(XML_p, XML_tgtEl);
mpFS->singleElementNS(XML_p, XML_sndTgt, FSNS(XML_r, XML_embed),
- sRelId.isEmpty() ? nullptr : sRelId.toUtf8().getStr(), XML_name,
- sUrl.isEmpty() ? nullptr : sName.toUtf8().getStr());
+ sax_fastparser::UseIf(sRelId, !sRelId.isEmpty()), XML_name,
+ sax_fastparser::UseIf(sName, !sUrl.isEmpty()));
mpFS->endElementNS(XML_p, XML_tgtEl);
mpFS->endElementNS(XML_p, XML_cMediaNode);
diff --git a/sd/source/filter/eppt/pptx-epptooxml.cxx b/sd/source/filter/eppt/pptx-epptooxml.cxx
index db3b5a309af4..70bb60bb998e 100644
--- a/sd/source/filter/eppt/pptx-epptooxml.cxx
+++ b/sd/source/filter/eppt/pptx-epptooxml.cxx
@@ -119,9 +119,9 @@ void WriteSndAc(const FSHelperPtr& pFS, const OUString& sSoundRelId, const OUStr
{
pFS->startElementNS(XML_p, XML_sndAc);
pFS->startElementNS(XML_p, XML_stSnd);
- pFS->singleElementNS(XML_p, XML_snd,
- FSNS(XML_r, XML_embed), sSoundRelId.isEmpty() ? nullptr : sSoundRelId.toUtf8().getStr(),
- XML_name, sSoundName.isEmpty() ? nullptr : sSoundName.toUtf8().getStr());
+ pFS->singleElementNS(XML_p, XML_snd, FSNS(XML_r, XML_embed),
+ sax_fastparser::UseIf(sSoundRelId, !sSoundRelId.isEmpty()), XML_name,
+ sax_fastparser::UseIf(sSoundName, !sSoundName.isEmpty()));
pFS->endElement(FSNS(XML_p, XML_stSnd));
pFS->endElement(FSNS(XML_p, XML_sndAc));
}
@@ -900,7 +900,7 @@ void PowerPointExport::WriteTransition(const FSHelperPtr& pFS)
pFS->startElementNS(XML_p, XML_transition,
XML_spd, speed,
- XML_advTm, isAdvanceTimingSet ? OString::number(advanceTiming * 1000).getStr() : nullptr);
+ XML_advTm, sax_fastparser::UseIf(OString::number(advanceTiming * 1000), isAdvanceTimingSet));
if (nTransition)
{
More information about the Libreoffice-commits
mailing list