summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Tardon <dtardon@redhat.com>2015-01-06 17:01:30 +0100
committerCaolán McNamara <caolanm@redhat.com>2015-01-06 17:00:58 +0000
commitc475835cab890a69d3c07ddc85ce131b64affaa3 (patch)
tree9995339ecc48744c41eb259d6a25e8395cb32cd8
parent25b91a6ea6f8f1a1c842116d7361783335fe9338 (diff)
fdo#88098 ClarisWorks: import empty starting lines/columns
Change-Id: Ibe4d5be4df874336de7ae387d210deff0a927b38 (cherry picked from commit 2a8f6a8a81c568d9ad73838072d287ac4927649f) Reviewed-on: https://gerrit.libreoffice.org/13772 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--external/libmwaw/0001-ClarisWorks-AppleWorks-spreadsheet-do-not-remove-fir.patch99
-rw-r--r--external/libmwaw/0002-ClarisWors-AppleWorks-spreadsheet-Oops-correct-of-a-.patch31
-rw-r--r--external/libmwaw/UnpackedTarball_libmwaw.mk5
3 files changed, 135 insertions, 0 deletions
diff --git a/external/libmwaw/0001-ClarisWorks-AppleWorks-spreadsheet-do-not-remove-fir.patch b/external/libmwaw/0001-ClarisWorks-AppleWorks-spreadsheet-do-not-remove-fir.patch
new file mode 100644
index 000000000000..0d79446c7910
--- /dev/null
+++ b/external/libmwaw/0001-ClarisWorks-AppleWorks-spreadsheet-do-not-remove-fir.patch
@@ -0,0 +1,99 @@
+From c092ac823e50083c04464565365ddd4af71f8c89 Mon Sep 17 00:00:00 2001
+From: osnola <alonso@loria.fr>
+Date: Tue, 6 Jan 2015 15:39:54 +0100
+Subject: [PATCH 1/2] ClarisWorks/AppleWorks[spreadsheet]: do not remove first
+ empty rows and/or columns in the main spreadsheet + if we remove some first
+ rows/columns in a embedded spreadsheet, update the cells present in
+ formula...
+
+---
+ src/lib/ClarisWksDbaseContent.cxx | 29 +++++++++++++++++++++++++++++
+ src/lib/ClarisWksDbaseContent.hxx | 3 ++-
+ src/lib/ClarisWksSpreadsheet.cxx | 5 +++++
+ 3 files changed, 36 insertions(+), 1 deletion(-)
+
+diff --git a/src/lib/ClarisWksDbaseContent.cxx b/src/lib/ClarisWksDbaseContent.cxx
+index 7226af1..ea15544 100644
+--- a/src/lib/ClarisWksDbaseContent.cxx
++++ b/src/lib/ClarisWksDbaseContent.cxx
+@@ -1393,4 +1393,33 @@ bool ClarisWksDbaseContent::readFormula(Vec2i const &cPos, long endPos, std::vec
+
+ return true;
+ }
++
++////////////////////////////////////////////////////////////
++//
++////////////////////////////////////////////////////////////
++void ClarisWksDbaseContent::Record::updateFormulaCells(Vec2i const &removeDelta)
++{
++ if (m_content.m_contentType!=MWAWCellContent::C_FORMULA)
++ return;
++ std::vector<MWAWCellContent::FormulaInstruction> &formula=m_content.m_formula;
++ for (size_t i=0; i<formula.size(); ++i) {
++ MWAWCellContent::FormulaInstruction &instr=formula[i];
++ int numCell=instr.m_type==MWAWCellContent::FormulaInstruction::F_Cell ? 1 :
++ instr.m_type==MWAWCellContent::FormulaInstruction::F_CellList ? 2 : 0;
++ for (int c=0; c<numCell; ++c) {
++ instr.m_position[c]-=removeDelta;
++ if (instr.m_position[c][0]<0 || instr.m_position[c][1]<0) {
++ static bool first=true;
++ if (first) {
++ MWAW_DEBUG_MSG(("ClarisWksDbaseContent::Record::updateFormulaCells: some cell's positions are bad, remove formula\n"));
++ first=false;
++ // revert to the basic cell type
++ m_content.m_contentType=m_valueType;
++ return;
++ }
++ }
++ }
++ }
++}
++
+ // vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
+diff --git a/src/lib/ClarisWksDbaseContent.hxx b/src/lib/ClarisWksDbaseContent.hxx
+index 4894d31..8a40b31 100644
+--- a/src/lib/ClarisWksDbaseContent.hxx
++++ b/src/lib/ClarisWksDbaseContent.hxx
+@@ -83,7 +83,8 @@ public:
+ m_content(), m_valueType(MWAWCellContent::C_UNKNOWN), m_hasNaNValue(false), m_backgroundColor(MWAWColor::white()), m_font(3,9), m_borders(0)
+ {
+ }
+-
++ //! update the formula cell (removing delta to each position)
++ void updateFormulaCells(Vec2i const &removeDelta);
+ //! the style if known
+ int m_style;
+ //! the format
+diff --git a/src/lib/ClarisWksSpreadsheet.cxx b/src/lib/ClarisWksSpreadsheet.cxx
+index c6b9f3d..60eb293 100644
+--- a/src/lib/ClarisWksSpreadsheet.cxx
++++ b/src/lib/ClarisWksSpreadsheet.cxx
+@@ -455,6 +455,8 @@ bool ClarisWksSpreadsheet::sendSpreadsheet(int zId, MWAWListenerPtr listener)
+ MWAW_DEBUG_MSG(("ClarisWksSpreadsheet::sendSpreadsheet: can not find content\n"));
+ return false;
+ }
++ if (m_parserState->m_kind==MWAWDocument::MWAW_K_SPREADSHEET && zId==1)
++ minData=Vec2i(0,0);
+ std::vector<float> colSize((size_t)(maxData[0]-minData[0]+1),72);
+ for (int c=minData[0], fC=0; c <= maxData[0]; ++c, ++fC) {
+ if (c>=0 && c < int(sheet.m_colWidths.size()))
+@@ -462,6 +464,7 @@ bool ClarisWksSpreadsheet::sendSpreadsheet(int zId, MWAWListenerPtr listener)
+ }
+ sheetListener->openSheet(colSize, librevenge::RVNG_POINT);
+ MWAWInputStreamPtr &input= m_parserState->m_input;
++ bool recomputeCellPosition=(minData!=Vec2i(0,0));
+ for (int r=minData[1], fR=0; r <= maxData[1]; ++r, ++fR) {
+ if (sheet.m_rowHeightMap.find(r)!=sheet.m_rowHeightMap.end())
+ sheetListener->openSheetRow((float)sheet.m_rowHeightMap.find(r)->second, librevenge::RVNG_POINT);
+@@ -478,6 +481,8 @@ bool ClarisWksSpreadsheet::sendSpreadsheet(int zId, MWAWListenerPtr listener)
+ // change the reference date from 1/1/1904 to 1/1/1900
+ if (rec.m_format.m_format==MWAWCell::F_DATE && rec.m_content.isValueSet())
+ rec.m_content.setValue(rec.m_content.m_value+1460);
++ if (recomputeCellPosition)
++ rec.updateFormulaCells(minData);
+ if (rec.m_borders) {
+ int wh=0;
+ for (int i=0, bit=1; i < 4; ++i, bit*=2) {
+--
+2.1.0
+
diff --git a/external/libmwaw/0002-ClarisWors-AppleWorks-spreadsheet-Oops-correct-of-a-.patch b/external/libmwaw/0002-ClarisWors-AppleWorks-spreadsheet-Oops-correct-of-a-.patch
new file mode 100644
index 000000000000..98f07bc0fc5a
--- /dev/null
+++ b/external/libmwaw/0002-ClarisWors-AppleWorks-spreadsheet-Oops-correct-of-a-.patch
@@ -0,0 +1,31 @@
+From bc03e5d29fbf3eb3f58b9f91c7e8c748239721ac Mon Sep 17 00:00:00 2001
+From: osnola <alonso@loria.fr>
+Date: Tue, 6 Jan 2015 15:48:18 +0100
+Subject: [PATCH 2/2] ClarisWors/AppleWorks[spreadsheet]: Oops, correct of a
+ mistake...
+
+---
+ src/lib/ClarisWksDbaseContent.cxx | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/lib/ClarisWksDbaseContent.cxx b/src/lib/ClarisWksDbaseContent.cxx
+index ea15544..e175c2e 100644
+--- a/src/lib/ClarisWksDbaseContent.cxx
++++ b/src/lib/ClarisWksDbaseContent.cxx
+@@ -1413,10 +1413,10 @@ void ClarisWksDbaseContent::Record::updateFormulaCells(Vec2i const &removeDelta)
+ if (first) {
+ MWAW_DEBUG_MSG(("ClarisWksDbaseContent::Record::updateFormulaCells: some cell's positions are bad, remove formula\n"));
+ first=false;
+- // revert to the basic cell type
+- m_content.m_contentType=m_valueType;
+- return;
+ }
++ // revert to the basic cell type
++ m_content.m_contentType=m_valueType;
++ return;
+ }
+ }
+ }
+--
+2.1.0
+
diff --git a/external/libmwaw/UnpackedTarball_libmwaw.mk b/external/libmwaw/UnpackedTarball_libmwaw.mk
index 61c43a709559..e37d82d33628 100644
--- a/external/libmwaw/UnpackedTarball_libmwaw.mk
+++ b/external/libmwaw/UnpackedTarball_libmwaw.mk
@@ -13,4 +13,9 @@ $(eval $(call gb_UnpackedTarball_set_tarball,libmwaw,$(MWAW_TARBALL)))
$(eval $(call gb_UnpackedTarball_set_patchlevel,libmwaw,1))
+$(eval $(call gb_UnpackedTarball_add_patches,libmwaw,\
+ external/libmwaw/0001-ClarisWorks-AppleWorks-spreadsheet-do-not-remove-fir.patch \
+ external/libmwaw/0002-ClarisWors-AppleWorks-spreadsheet-Oops-correct-of-a-.patch \
+))
+
# vim: set noet sw=4 ts=4: