summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorAttila Bakos (NISZ) <bakos.attilakaroly@nisz.hu>2022-05-26 17:04:54 +0200
committerLászló Németh <nemeth@numbertext.org>2022-05-31 13:00:38 +0200
commit445d4ce232b8e8efaeb2605533fede1b71f52f30 (patch)
tree4d9172a07ada471c2dd318ae70fcc03e48b8913b /oox
parentb94275f6d2cb4dc28d1563fd7994251042b6d51a (diff)
tdf#147991 PPTX export: fix bullet indent regression
Instead of exporting the inherited master slide indent values of the placeholders, export 0 indent value for removed/disabled bullets to fix interoperability. Regression from commit f57cfddb51b7d7409b7b425dc200aa73406a13bd "tdf#145162 PPTX export: fix extra bullet regression". Change-Id: Icbf823adc07f19fd10d1a60da9cff17616a2aef6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135025 Tested-by: László Németh <nemeth@numbertext.org> Reviewed-by: László Németh <nemeth@numbertext.org>
Diffstat (limited to 'oox')
-rw-r--r--oox/source/export/drawingml.cxx53
-rw-r--r--oox/source/export/shapes.cxx13
2 files changed, 53 insertions, 13 deletions
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 18e6e2723e89..eea8394aef36 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -122,6 +122,7 @@
#include <editeng/unoprnms.hxx>
#include <editeng/flditem.hxx>
#include <editeng/escapementitem.hxx>
+#include <editeng/unonrule.hxx>
#include <svx/svdoashp.hxx>
#include <svx/svdomedia.hxx>
#include <svx/unoshape.hxx>
@@ -2705,13 +2706,7 @@ static OUString GetAutoNumType(SvxNumType nNumberingType, bool bSDot, bool bPBeh
void DrawingML::WriteParagraphNumbering(const Reference< XPropertySet >& rXPropSet, float fFirstCharHeight, sal_Int16 nLevel )
{
if (nLevel < 0 || !GetProperty(rXPropSet, "NumberingRules"))
- {
- if (GetDocumentType() == DOCUMENT_PPTX)
- {
- mpFS->singleElementNS(XML_a, XML_buNone);
- }
return;
- }
Reference< XIndexAccess > rXIndexAccess;
@@ -3015,6 +3010,32 @@ bool DrawingML::WriteParagraphProperties( const Reference< XTextContent >& rPara
if (GetProperty(rXPropSet, "NumberingLevel"))
mAny >>= nLevel;
+ bool bWriteNumbering = true;
+ bool bForceZeroIndent = false;
+ if (mbPlaceholder)
+ {
+ Reference< text::XTextRange > xParaText(rParagraph, UNO_QUERY);
+ if (xParaText)
+ {
+ bool bNumberingOnThisLevel = false;
+ if (nLevel > -1)
+ {
+ Reference< XIndexAccess > xNumberingRules(rXPropSet->getPropertyValue("NumberingRules"), UNO_QUERY);
+ const PropertyValues& rNumRuleOfLevel = xNumberingRules->getByIndex(nLevel).get<PropertyValues>();
+ for (const PropertyValue& rRule : rNumRuleOfLevel)
+ if (rRule.Name == "NumberingType" && rRule.Value.hasValue())
+ bNumberingOnThisLevel = rRule.Value.get<sal_uInt16>() != style::NumberingType::NUMBER_NONE;
+ }
+
+ const bool bIsNumberingVisible = rXPropSet->getPropertyValue("NumberingIsNumber").get<bool>();
+ const bool bIsLineEmpty = !xParaText->getString().getLength();
+
+ bWriteNumbering = !bIsLineEmpty && bIsNumberingVisible && (nLevel != -1);
+ bForceZeroIndent = (!bIsNumberingVisible || bIsLineEmpty || !bNumberingOnThisLevel);
+ }
+
+ }
+
sal_Int16 nTmp = sal_Int16(style::ParagraphAdjust_LEFT);
if (GetProperty(rXPropSet, "ParaAdjust"))
mAny >>= nTmp;
@@ -3058,23 +3079,26 @@ bool DrawingML::WriteParagraphProperties( const Reference< XTextContent >& rPara
sal_Int32 nLeftMargin = getBulletMarginIndentation ( rXPropSet, nLevel,u"LeftMargin");
sal_Int32 nLineIndentation = getBulletMarginIndentation ( rXPropSet, nLevel,u"FirstLineOffset");
- if( !(nLevel != -1
- || nAlignment != style::ParagraphAdjust_LEFT
- || bHasLinespacing) )
- return false;
+ if (bWriteNumbering && !bForceZeroIndent)
+ {
+ if (!(nLevel != -1
+ || nAlignment != style::ParagraphAdjust_LEFT
+ || bHasLinespacing))
+ return false;
+ }
if (nParaLeftMargin) // For Paragraph
mpFS->startElementNS( XML_a, nElement,
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_indent, sax_fastparser::UseIf(OString::number(!bForceZeroIndent ? oox::drawingml::convertHmmToEmu(nParaFirstLineIndent) : 0), (bForceZeroIndent || (nParaFirstLineIndent != 0))),
XML_algn, GetAlignment( nAlignment ),
XML_rtl, sax_fastparser::UseIf(ToPsz10(bRtl), bRtl));
else
mpFS->startElementNS( XML_a, nElement,
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_indent, sax_fastparser::UseIf(OString::number(!bForceZeroIndent ? oox::drawingml::convertHmmToEmu(nLineIndentation) : 0), (bForceZeroIndent || ( nLineIndentation != 0))),
XML_algn, GetAlignment( nAlignment ),
XML_rtl, sax_fastparser::UseIf(ToPsz10(bRtl), bRtl));
@@ -3106,7 +3130,10 @@ bool DrawingML::WriteParagraphProperties( const Reference< XTextContent >& rPara
mpFS->endElementNS( XML_a, XML_spcAft );
}
- WriteParagraphNumbering( rXPropSet, fFirstCharHeight, nLevel );
+ if (!bWriteNumbering)
+ mpFS->singleElementNS(XML_a, XML_buNone);
+ else
+ WriteParagraphNumbering( rXPropSet, fFirstCharHeight, nLevel );
WriteParagraphTabStops( rXPropSet );
diff --git a/oox/source/export/shapes.cxx b/oox/source/export/shapes.cxx
index 9854c98a584e..305bc2e78f53 100644
--- a/oox/source/export/shapes.cxx
+++ b/oox/source/export/shapes.cxx
@@ -1949,6 +1949,9 @@ static const NameToConvertMapType& lcl_GetConverters()
ShapeExport& ShapeExport::WriteShape( const Reference< XShape >& xShape )
{
+ if (!xShape)
+ throw lang::IllegalArgumentException();
+
OUString sShapeType = xShape->getShapeType();
SAL_INFO("oox.shape", "write shape: " << sShapeType);
NameToConvertMapType::const_iterator aConverter
@@ -1958,6 +1961,16 @@ ShapeExport& ShapeExport::WriteShape( const Reference< XShape >& xShape )
SAL_INFO("oox.shape", "unknown shape");
return WriteUnknownShape( xShape );
}
+
+ if (GetDocumentType() == DOCUMENT_PPTX)
+ {
+ Reference< XPropertySet > xShapeProperties(xShape, UNO_QUERY);
+ if (xShapeProperties && xShapeProperties->getPropertySetInfo()
+ && xShapeProperties->getPropertySetInfo()->hasPropertyByName("IsPresentationObject")
+ && xShapeProperties->getPropertyValue("IsPresentationObject").hasValue())
+ mbPlaceholder = xShapeProperties->getPropertyValue("IsPresentationObject").get<bool>();
+ }
+
(this->*(aConverter->second))( xShape );
return *this;