summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@suse.cz>2012-10-01 13:42:02 +0200
committerMiklos Vajna <vmiklos@suse.cz>2012-10-01 15:46:52 +0200
commite3ea2eb7eb9100509d661f18455a7e5bb9a1bd45 (patch)
treeffac3929edaa24e9dca547af95a2705f9cf5c649
parent6bbd433294d598eca5feb3f1e8264e6b7a816396 (diff)
n#782345 import DOCX w:splitPgBreakAndParaMark compat option
This fixes docx import of page breaks in empty paragraphs, when the compat option in question is set. Even empty paragraphs have an "end of paragraph" character in dmapper: import page breaks there, instead of delaying the import till the all-catcher importer at the start of the next paragraph. Change-Id: Ie5c37042b3c445e0669771d15c8eb46380192db3 (cherry picked from commit 40d93d978d4f8fa709bdeb061b106122789d8e32)
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx10
-rw-r--r--writerfilter/source/dmapper/SettingsTable.cxx10
-rw-r--r--writerfilter/source/dmapper/SettingsTable.hxx1
3 files changed, 21 insertions, 0 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 8f33cb769fe2..eca584c42333 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -3606,6 +3606,16 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
// RTF always uses text() instead of utext() for run break
if(len == 1 && ((*data_) == 0x0d || (*data_) == 0x07) && !IsRTFImport())
{
+ PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH);
+ if (pContext && m_pImpl->GetSettingsTable()->GetSplitPgBreakAndParaMark())
+ {
+ if (m_pImpl->isBreakDeferred(PAGE_BREAK))
+ pContext->Insert(PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE));
+ else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
+ pContext->Insert(PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_COLUMN_BEFORE));
+ m_pImpl->clearDeferredBreaks();
+ }
+
bool bSingleParagraph = m_pImpl->GetIsFirstParagraphInSection() && m_pImpl->GetIsLastParagraphInSection();
// If the paragraph contains only the section properties and it has
// no runs, we should not create a paragraph for it in Writer, unless that would remove the whole section.
diff --git a/writerfilter/source/dmapper/SettingsTable.cxx b/writerfilter/source/dmapper/SettingsTable.cxx
index 2e262fc90bf4..ab281bd67507 100644
--- a/writerfilter/source/dmapper/SettingsTable.cxx
+++ b/writerfilter/source/dmapper/SettingsTable.cxx
@@ -79,6 +79,7 @@ struct SettingsTable_Impl
bool m_bEvenAndOddHeaders;
bool m_bUsePrinterMetrics;
bool m_bDoNotUseHTMLParagraphAutoSpacing;
+ bool m_bSplitPgBreakAndParaMark;
SettingsTable_Impl( DomainMapper& rDMapper, const uno::Reference< lang::XMultiServiceFactory > xTextFactory ) :
m_rDMapper( rDMapper )
@@ -100,6 +101,7 @@ struct SettingsTable_Impl
, m_bEvenAndOddHeaders(false)
, m_bUsePrinterMetrics(false)
, m_bDoNotUseHTMLParagraphAutoSpacing(false)
+ , m_bSplitPgBreakAndParaMark(false)
{}
};
@@ -213,6 +215,9 @@ void SettingsTable::lcl_sprm(Sprm& rSprm)
case NS_ooxml::LN_CT_Compat_doNotUseHTMLParagraphAutoSpacing:
m_pImpl->m_bDoNotUseHTMLParagraphAutoSpacing = nIntValue;
break;
+ case NS_ooxml::LN_CT_Compat_splitPgBreakAndParaMark:
+ m_pImpl->m_bSplitPgBreakAndParaMark = nIntValue;
+ break;
default:
{
#ifdef DEBUG_DMAPPER_SETTINGS_TABLE
@@ -260,6 +265,11 @@ bool SettingsTable::GetDoNotUseHTMLParagraphAutoSpacing() const
return m_pImpl->m_bDoNotUseHTMLParagraphAutoSpacing;
}
+bool SettingsTable::GetSplitPgBreakAndParaMark() const
+{
+ return m_pImpl->m_bSplitPgBreakAndParaMark;
+}
+
void SettingsTable::ApplyProperties( uno::Reference< text::XTextDocument > xDoc )
{
uno::Reference< beans::XPropertySet> xDocProps( xDoc, uno::UNO_QUERY );
diff --git a/writerfilter/source/dmapper/SettingsTable.hxx b/writerfilter/source/dmapper/SettingsTable.hxx
index 5dfa0a2941b9..9016eaefcedf 100644
--- a/writerfilter/source/dmapper/SettingsTable.hxx
+++ b/writerfilter/source/dmapper/SettingsTable.hxx
@@ -75,6 +75,7 @@ class WRITERFILTER_DLLPRIVATE SettingsTable : public LoggedProperties, public Lo
bool GetUsePrinterMetrics() const;
bool GetDoNotUseHTMLParagraphAutoSpacing() const;
+ bool GetSplitPgBreakAndParaMark() const;
void ApplyProperties( uno::Reference< text::XTextDocument > xDoc );