summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2014-02-13 15:25:44 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2014-02-13 15:33:08 +0100
commitd747d0fc3b3e9c02a2eaa5b4a03c6905a68663d0 (patch)
tree8d43288d52c1d8cf28926004f598a53f1e4d10e1
parent7ff8414a411ae35e1fe56e9724646d0e94fa17f6 (diff)
DOC/RTF export: fix handling of column breaks when there is only one column
The first real part of commit 4d5c193b2fd38c6cab049fcb97189462fff0fddb (INTEGRATION: CWS limerickfilterteam08 (1.64.6); FILE MERGED, 2003-09-01) tweaked the DOC export, so that in case there is only one column, the column break is not exported: this way the Writer and Word layout matches, because Word handles that situation by handling the break as a page one, but Writer layout ignores it. On import, the DOC filter changes a column break to a page break in that situation, so visually the roundtrip is OK. The RTF filter does the same: the tokenizer turns a column break into a page one if necessary, and on export then we can ignore such a column break. However, the DOCX filter is different: there we don't tweak the column break on import, so we want to keep it on export as well. (A perfect solution for this would be one more layout compat option, then filters can stop tweaking the break types.) Recently commit 78c5cbc720993e9cc01fceadd73678ed1a45d37f (fdo#74153 : Preservation of Column Break with column_count = 0, 2014-02-03) turned on the export of such column breaks in the exporter unconditionally, and this broke the above logic of DOC/RTF roundtrip. Fix this by adding a virtual method where each format can decide what it wants. Change-Id: I807c2fdc02aefc20ffbb4a4dbbf3845ecad81bca
-rw-r--r--sw/source/filter/ww8/docxexport.hxx2
-rw-r--r--sw/source/filter/ww8/rtfexport.hxx2
-rw-r--r--sw/source/filter/ww8/wrtww8.hxx5
-rw-r--r--sw/source/filter/ww8/ww8atr.cxx5
4 files changed, 13 insertions, 1 deletions
diff --git a/sw/source/filter/ww8/docxexport.hxx b/sw/source/filter/ww8/docxexport.hxx
index fe303930cbf9..99b7ee7542f5 100644
--- a/sw/source/filter/ww8/docxexport.hxx
+++ b/sw/source/filter/ww8/docxexport.hxx
@@ -109,6 +109,8 @@ public:
/// Determines if the format is expected to support unicode.
virtual bool SupportsUnicode() const { return true; }
+ virtual bool SupportsOneColumnBreak() const { return true; }
+
virtual bool ignoreAttributeForStyles( sal_uInt16 nWhich ) const;
/// Guess the script (asian/western).
diff --git a/sw/source/filter/ww8/rtfexport.hxx b/sw/source/filter/ww8/rtfexport.hxx
index e776f2e72aa4..d801db4b6fbd 100644
--- a/sw/source/filter/ww8/rtfexport.hxx
+++ b/sw/source/filter/ww8/rtfexport.hxx
@@ -62,6 +62,8 @@ public:
/// Determines if the format is expected to support unicode.
virtual bool SupportsUnicode() const { return true; }
+ virtual bool SupportsOneColumnBreak() const { return false; }
+
/// Guess the script (asian/western).
virtual bool CollapseScriptsforWordOk( sal_uInt16 nScript, sal_uInt16 nWhich );
diff --git a/sw/source/filter/ww8/wrtww8.hxx b/sw/source/filter/ww8/wrtww8.hxx
index 30ee97d909bd..55ae63629306 100644
--- a/sw/source/filter/ww8/wrtww8.hxx
+++ b/sw/source/filter/ww8/wrtww8.hxx
@@ -633,6 +633,9 @@ public:
/// Determines if the format is expected to support unicode.
virtual bool SupportsUnicode() const = 0;
+ /// Determines if column break with one column should be exported or not.
+ virtual bool SupportsOneColumnBreak() const = 0;
+
/// 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; }
@@ -956,6 +959,8 @@ public:
/// False for WW6, true for WW8.
virtual bool SupportsUnicode() const { return bWrtWW8; }
+ virtual bool SupportsOneColumnBreak() const { return false; }
+
private:
/// Format-dependent part of the actual export.
virtual void ExportDocument_Impl();
diff --git a/sw/source/filter/ww8/ww8atr.cxx b/sw/source/filter/ww8/ww8atr.cxx
index a6f711e94227..d326cef4125b 100644
--- a/sw/source/filter/ww8/ww8atr.cxx
+++ b/sw/source/filter/ww8/ww8atr.cxx
@@ -3627,7 +3627,10 @@ void AttributeOutputBase::FormatBreak( const SvxFmtBreakItem& rBreak )
// no break;
case SVX_BREAK_COLUMN_AFTER:
case SVX_BREAK_COLUMN_BOTH:
- nC = msword::ColumnBreak;
+ if ( GetExport().Sections().CurrentNumberOfColumns( *GetExport().pDoc ) > 1 || GetExport().SupportsOneColumnBreak() )
+ {
+ nC = msword::ColumnBreak;
+ }
break;
case SVX_BREAK_PAGE_BEFORE: // PageBreak