[Libreoffice-commits] core.git: 2 commits - sw/qa sw/source writerfilter/source
Michael Stahl (via logerrit)
logerrit at kemper.freedesktop.org
Wed Apr 15 09:29:54 UTC 2020
sw/qa/extras/ooxmlexport/ooxmlexport5.cxx | 5 +--
sw/source/filter/ww8/docxattributeoutput.cxx | 9 +++++
sw/source/filter/ww8/docxexport.cxx | 34 ++++++++++++++++------
writerfilter/source/dmapper/DomainMapper_Impl.cxx | 4 ++
writerfilter/source/dmapper/SettingsTable.cxx | 9 +++++
writerfilter/source/dmapper/SettingsTable.hxx | 1
6 files changed, 51 insertions(+), 11 deletions(-)
New commits:
commit 3cd3ae30217a80449799d7d9426c3756c572712e
Author: Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Tue Apr 14 18:10:53 2020 +0200
Commit: Michael Stahl <michael.stahl at cib.de>
CommitDate: Wed Apr 15 11:29:25 2020 +0200
writerfilter: DOCX import: import w:noLeading as AddExternalLeading
Change-Id: I3d7fa2984975205d284575c60c6c47284b00c4a0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92209
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl at cib.de>
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 1e7f8a99e663..010cb3e3fe21 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -6654,6 +6654,10 @@ void DomainMapper_Impl::ApplySettingsTable()
if( m_pSettingsTable->GetEmbedSystemFonts())
xSettings->setPropertyValue( getPropertyName( PROP_EMBED_SYSTEM_FONTS ), uno::makeAny(true) );
xSettings->setPropertyValue("AddParaTableSpacing", uno::makeAny(m_pSettingsTable->GetDoNotUseHTMLParagraphAutoSpacing()));
+ if (m_pSettingsTable->GetNoLeading())
+ {
+ xSettings->setPropertyValue("AddExternalLeading", uno::makeAny(!m_pSettingsTable->GetNoLeading()));
+ }
if( m_pSettingsTable->GetProtectForm() )
xSettings->setPropertyValue("ProtectForm", uno::makeAny( true ));
if( m_pSettingsTable->GetReadOnly() )
diff --git a/writerfilter/source/dmapper/SettingsTable.cxx b/writerfilter/source/dmapper/SettingsTable.cxx
index 303de47c8f71..81fadad6ac40 100644
--- a/writerfilter/source/dmapper/SettingsTable.cxx
+++ b/writerfilter/source/dmapper/SettingsTable.cxx
@@ -263,6 +263,7 @@ struct SettingsTable_Impl
OUString m_sRedlineProtectionKey;
bool m_bReadOnly;
bool m_bDisplayBackgroundShape;
+ bool m_bNoLeading = false;
uno::Sequence<beans::PropertyValue> m_pThemeFontLangProps;
@@ -575,6 +576,9 @@ void SettingsTable::lcl_sprm(Sprm& rSprm)
case NS_ooxml::LN_CT_Settings_displayBackgroundShape:
m_pImpl->m_bDisplayBackgroundShape = nIntValue;
break;
+ case NS_ooxml::LN_CT_Compat_noLeading:
+ m_pImpl->m_bNoLeading = nIntValue != 0;
+ break;
default:
{
#ifdef DBG_UTIL
@@ -851,6 +855,11 @@ bool SettingsTable::GetLongerSpaceSequence() const
return m_pImpl->m_bLongerSpaceSequence;
}
+bool SettingsTable::GetNoLeading() const
+{
+ return m_pImpl->m_bNoLeading;
+}
+
}//namespace dmapper
} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/SettingsTable.hxx b/writerfilter/source/dmapper/SettingsTable.hxx
index e8cbe8abaf6e..e058420c27db 100644
--- a/writerfilter/source/dmapper/SettingsTable.hxx
+++ b/writerfilter/source/dmapper/SettingsTable.hxx
@@ -77,6 +77,7 @@ class SettingsTable : public LoggedProperties, public LoggedTable
bool GetProtectForm() const;
bool GetReadOnly() const;
bool GetLongerSpaceSequence() const;
+ bool GetNoLeading() const;
bool GetNoHyphenateCaps() const;
sal_Int16 GetHypenationZone() const;
commit 968a7e3247169489d29cc7de0079eea12a663870
Author: Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Tue Apr 14 17:42:06 2020 +0200
Commit: Michael Stahl <michael.stahl at cib.de>
CommitDate: Wed Apr 15 11:29:15 2020 +0200
sw: DOCX export: export AddExternalLeading as w:noLeading
For 11pt Arial, can fit 59 paragraphs on a page vs. 57...
This is annoyingly complicated by the fact that Word 2013 ignores
w:noLeading element if compatibilityMode is 15.
Change-Id: Ie3093eabba45cdf6e7903ed860f5bad24dcc0323
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92208
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl at cib.de>
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx
index 95fcebbf9c42..ee4b35698533 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx
@@ -1119,10 +1119,11 @@ DECLARE_OOXMLEXPORT_TEST(tdf106843, "tdf106843.fodt")
assertXPath(pXmlSettings, "/w:settings/w:documentProtection", "edit", "trackedChanges");
assertXPath(pXmlSettings, "/w:settings/w:documentProtection", "enforcement", "1");
- // LO intends to export a .docx format that is natively compatible with 2013.
+ // LO intends to export a .docx format that is natively compatible with 2013
+ // but this document has an implicitly added setting AddExternalLeading = false
assertXPath(pXmlSettings, "/w:settings/w:compat/w:compatSetting[1]", "name", "compatibilityMode");
assertXPath(pXmlSettings, "/w:settings/w:compat/w:compatSetting[1]", "uri", "http://schemas.microsoft.com/office/word");
- assertXPath(pXmlSettings, "/w:settings/w:compat/w:compatSetting[1]", "val", "15"); // compatible with 2003/2016/2019
+ assertXPath(pXmlSettings, "/w:settings/w:compat/w:compatSetting[1]", "val", "14"); // compatible with 2010
}
}
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index a8ed8e88a47d..10afeb9fd918 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -3770,6 +3770,15 @@ sal_Int32 lcl_getWordCompatibilityMode( const SwDoc& rDoc )
}
}
+ // TODO: this is duplicative, better store it in DocxExport member?
+ if (!rDoc.getIDocumentSettingAccess().get(DocumentSettingId::ADD_EXT_LEADING))
+ {
+ if (nWordCompatibilityMode == -1 || 14 < nWordCompatibilityMode)
+ {
+ nWordCompatibilityMode = 14;
+ }
+ }
+
return nWordCompatibilityMode;
}
diff --git a/sw/source/filter/ww8/docxexport.cxx b/sw/source/filter/ww8/docxexport.cxx
index 035f50cbeaac..b18d94410027 100644
--- a/sw/source/filter/ww8/docxexport.cxx
+++ b/sw/source/filter/ww8/docxexport.cxx
@@ -944,6 +944,25 @@ void DocxExport::WriteDocVars(const sax_fastparser::FSHelperPtr& pFS)
}
}
+static auto
+WriteCompat(SwDoc const& rDoc, ::sax_fastparser::FSHelperPtr const& rpFS,
+ sal_Int32 & rTargetCompatibilityMode) -> void
+{
+ if (!rDoc.getIDocumentSettingAccess().get(DocumentSettingId::ADD_EXT_LEADING))
+ {
+ rpFS->singleElementNS(XML_w, XML_noLeading);
+ if (rTargetCompatibilityMode > 14)
+ { // Word ignores noLeading in compatibilityMode 15
+ rTargetCompatibilityMode = 14;
+ }
+ }
+ // Do not justify lines with manual break
+ if (rDoc.getIDocumentSettingAccess().get(DocumentSettingId::DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK))
+ {
+ rpFS->singleElementNS(XML_w, XML_doNotExpandShiftReturn);
+ }
+}
+
void DocxExport::WriteSettings()
{
SwViewShell *pViewShell(m_pDoc->getIDocumentLayoutAccess().GetCurrentViewShell());
@@ -1027,14 +1046,6 @@ void DocxExport::WriteSettings()
pFS->singleElementNS( XML_w, XML_defaultTabStop, FSNS( XML_w, XML_val ),
OString::number(m_aSettings.defaultTabStop) );
- // Do not justify lines with manual break
- if( m_pDoc->getIDocumentSettingAccess().get( DocumentSettingId::DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK ))
- {
- pFS->startElementNS(XML_w, XML_compat);
- pFS->singleElementNS(XML_w, XML_doNotExpandShiftReturn);
- pFS->endElementNS( XML_w, XML_compat );
- }
-
// export current mail merge database and table names
SwDBData aData = m_pDoc->GetDBData();
if ( !aData.sDataSource.isEmpty() && aData.nCommandType == css::sdb::CommandType::TABLE && !aData.sCommand.isEmpty() )
@@ -1121,7 +1132,7 @@ void DocxExport::WriteSettings()
* 2.) Many years later, change the TargetCompatilityMode for new documents, when we no longer care
* about working with perfect compatibility with older versions of MS Word.
*/
- const sal_Int32 nTargetCompatibilityMode = 15; //older versions might not open our files well
+ sal_Int32 nTargetCompatibilityMode = 15; //older versions might not open our files well
bool bHasCompatibilityMode = false;
const OUString aGrabBagName = UNO_NAME_MISC_OBJ_INTEROPGRABBAG;
if ( xPropSetInfo->hasPropertyByName( aGrabBagName ) )
@@ -1154,6 +1165,8 @@ void DocxExport::WriteSettings()
{
pFS->startElementNS(XML_w, XML_compat);
+ WriteCompat(*m_pDoc, pFS, nTargetCompatibilityMode);
+
uno::Sequence< beans::PropertyValue > aCompatSettingsSequence;
rProp.Value >>= aCompatSettingsSequence;
@@ -1282,6 +1295,9 @@ void DocxExport::WriteSettings()
if ( !bHasCompatibilityMode )
{
pFS->startElementNS(XML_w, XML_compat);
+
+ WriteCompat(*m_pDoc, pFS, nTargetCompatibilityMode);
+
pFS->singleElementNS( XML_w, XML_compatSetting,
FSNS( XML_w, XML_name ), "compatibilityMode",
FSNS( XML_w, XML_uri ), "http://schemas.microsoft.com/office/word",
More information about the Libreoffice-commits
mailing list