summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2014-06-27 21:28:36 +0200
committerMichael Stahl <mstahl@redhat.com>2014-06-30 10:27:20 +0000
commit124c2c3b015a7a9980dae67e1ca6844e66fa6258 (patch)
tree8d1a0ce8e129850da01eb6b8ed140963afcac319
parent556412d3fa3916b1e1d0375fa999fdf92136b64e (diff)
fdo#80167 RTF export: don't loose page breaks
DOCX export tries to write accurately both <w:br> and <w:pageBreakBefore>, while DOC/RTF prefers just the page break before paragraph attribute. Given that these later two exporters are not adapted to write their equivalent of <w:br> at all, add a virtual method to determine if writing page breaks as "page break before" is preferred or not, that'll give the expected RTF export result. This conditionally reverts commit a31fbb53dba76736b37213b98b64937f05929a67 (fdo#74566:DOCX: Preservation <w:br> tag for Break to Next Page, 2014-02-06). (cherry picked from commit 8100100298b877765e1781fb0eed285e82749ad1) Conflicts: sw/qa/extras/rtfexport/rtfexport.cxx Change-Id: I4a5dd295b07739a570cd8cc6709561e64d031273 Reviewed-on: https://gerrit.libreoffice.org/9945 Tested-by: Michael Stahl <mstahl@redhat.com> Reviewed-by: Michael Stahl <mstahl@redhat.com>
-rw-r--r--sw/qa/extras/rtfexport/data/fdo80167.rtf6
-rw-r--r--sw/qa/extras/rtfexport/rtfexport.cxx6
-rw-r--r--sw/source/filter/ww8/docxexport.hxx2
-rw-r--r--sw/source/filter/ww8/rtfexport.hxx5
-rw-r--r--sw/source/filter/ww8/wrtww8.hxx5
-rw-r--r--sw/source/filter/ww8/ww8atr.cxx13
6 files changed, 34 insertions, 3 deletions
diff --git a/sw/qa/extras/rtfexport/data/fdo80167.rtf b/sw/qa/extras/rtfexport/data/fdo80167.rtf
new file mode 100644
index 000000000000..3aa9dd3b6b6a
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/fdo80167.rtf
@@ -0,0 +1,6 @@
+{\rtf1
+\pard\plain
+one\par
+\pard\page\par
+\pard two\par
+}
diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx
index de0ae10fdce0..e4ed68583a40 100644
--- a/sw/qa/extras/rtfexport/rtfexport.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport.cxx
@@ -644,6 +644,12 @@ DECLARE_RTFEXPORT_TEST(testFdo77600, "fdo77600.rtf")
CPPUNIT_ASSERT_EQUAL(OUString("Arial"), getProperty<OUString>(getRun(getParagraph(1), 3), "CharFontName"));
}
+DECLARE_RTFEXPORT_TEST(testFdo80167, "fdo80167.rtf")
+{
+ // Problem was that after export, the page break was missing, so this was 1.
+ CPPUNIT_ASSERT_EQUAL(2, getPages());
+}
+
#endif
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/filter/ww8/docxexport.hxx b/sw/source/filter/ww8/docxexport.hxx
index 950db249f066..9ab2db9c8125 100644
--- a/sw/source/filter/ww8/docxexport.hxx
+++ b/sw/source/filter/ww8/docxexport.hxx
@@ -124,6 +124,8 @@ public:
virtual bool ignoreAttributeForStyles( sal_uInt16 nWhich ) const SAL_OVERRIDE;
+ virtual bool PreferPageBreakBefore() const SAL_OVERRIDE { return false; }
+
/// Guess the script (asian/western).
virtual bool CollapseScriptsforWordOk( sal_uInt16 nScript, sal_uInt16 nWhich ) SAL_OVERRIDE;
diff --git a/sw/source/filter/ww8/rtfexport.hxx b/sw/source/filter/ww8/rtfexport.hxx
index aebb83992bac..c384289cff77 100644
--- a/sw/source/filter/ww8/rtfexport.hxx
+++ b/sw/source/filter/ww8/rtfexport.hxx
@@ -80,6 +80,11 @@ public:
return false;
}
+ virtual bool PreferPageBreakBefore() const SAL_OVERRIDE
+ {
+ return true;
+ }
+
/// Guess the script (asian/western).
virtual bool CollapseScriptsforWordOk(sal_uInt16 nScript, sal_uInt16 nWhich) SAL_OVERRIDE;
diff --git a/sw/source/filter/ww8/wrtww8.hxx b/sw/source/filter/ww8/wrtww8.hxx
index 9229fa5fcc71..b41abc4e123f 100644
--- a/sw/source/filter/ww8/wrtww8.hxx
+++ b/sw/source/filter/ww8/wrtww8.hxx
@@ -645,6 +645,9 @@ public:
/// Used to filter out attributes that can be e.g. written to .doc but not to .docx
virtual bool ignoreAttributeForStyles( sal_uInt16 /*nWhich*/ ) const { return false; }
+ /// If saving page break is preferred as a paragraph attribute (yes) or as a special character (no).
+ virtual bool PreferPageBreakBefore() const = 0;
+
/// Guess the script (asian/western).
///
/// Sadly word does not have two different sizes for asian font size and
@@ -964,6 +967,8 @@ public:
/// False for WW6, true for WW8.
virtual bool SupportsUnicode() const SAL_OVERRIDE { return bWrtWW8; }
+ virtual bool PreferPageBreakBefore() const SAL_OVERRIDE { return true; }
+
virtual bool SupportsOneColumnBreak() const SAL_OVERRIDE { return false; }
virtual bool FieldsQuoted() const SAL_OVERRIDE { return false; }
diff --git a/sw/source/filter/ww8/ww8atr.cxx b/sw/source/filter/ww8/ww8atr.cxx
index 93c06822d7f5..ed6994bc4a49 100644
--- a/sw/source/filter/ww8/ww8atr.cxx
+++ b/sw/source/filter/ww8/ww8atr.cxx
@@ -3765,9 +3765,16 @@ void AttributeOutputBase::FormatBreak( const SvxFmtBreakItem& rBreak )
break;
case SVX_BREAK_PAGE_BEFORE: // PageBreak
- // From now on(fix for #i77900#) we prefer to save a page break as
- // paragraph attribute, this has to be done after the export of the
- // paragraph ( => !GetExport().bBreakBefore )
+ // From now on(fix for #i77900#) we prefer to save a page break
+ // as paragraph attribute (if the exporter is OK with that),
+ // this has to be done after the export of the paragraph ( =>
+ // !GetExport().bBreakBefore )
+ if (GetExport().PreferPageBreakBefore())
+ {
+ if (!GetExport().bBreakBefore)
+ PageBreakBefore(true);
+ break;
+ }
case SVX_BREAK_PAGE_AFTER:
case SVX_BREAK_PAGE_BOTH:
nC = msword::PageBreak;