[Libreoffice-commits] libmspub.git: 2 commits - src/lib

2018-02-15 Thread David Tardon
 src/lib/MSPUBParser.cpp |6 ++
 1 file changed, 2 insertions(+), 4 deletions(-)

New commits:
commit 2be062bd914c000899a03822664f9a523d435f3e
Author: David Tardon 
Date:   Thu Feb 15 10:42:06 2018 +0100

drop unnecessary variables

Change-Id: If3d15512433406399716e458c666b81dc7aa41ef

diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp
index da4de8b..1f6fa95 100644
--- a/src/lib/MSPUBParser.cpp
+++ b/src/lib/MSPUBParser.cpp
@@ -1973,12 +1973,10 @@ void 
MSPUBParser::parseEscherShape(librevenge::RVNGInputStream *input, const Esc
   }
   if (rotated90)
   {
-int initialX = absolute.m_xs;
-int initialY = absolute.m_ys;
 int initialWidth = int64_t(absolute.m_xe) - absolute.m_xs;
 int initialHeight = int64_t(absolute.m_ye) - absolute.m_ys;
-int centerX = int64_t(initialX) + initialWidth / 2;
-int centerY = int64_t(initialY) + initialHeight / 2;
+int centerX = int64_t(absolute.m_xs) + initialWidth / 2;
+int centerY = int64_t(absolute.m_ys) + initialHeight / 2;
 int xs = centerX - initialHeight / 2;
 int ys = centerY - initialWidth / 2;
 int xe = xs + initialHeight;
commit a500976df2557c4c4c5f90bda0a401319573ceff
Author: David Tardon 
Date:   Thu Feb 15 10:41:20 2018 +0100

ofz#6339 avoid signed int overflow

Change-Id: I6459deafb6d0dabc47e6e446457165b6814f348e

diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp
index 1078eda..da4de8b 100644
--- a/src/lib/MSPUBParser.cpp
+++ b/src/lib/MSPUBParser.cpp
@@ -1977,8 +1977,8 @@ void 
MSPUBParser::parseEscherShape(librevenge::RVNGInputStream *input, const Esc
 int initialY = absolute.m_ys;
 int initialWidth = int64_t(absolute.m_xe) - absolute.m_xs;
 int initialHeight = int64_t(absolute.m_ye) - absolute.m_ys;
-int centerX = initialX + initialWidth / 2;
-int centerY = initialY + initialHeight / 2;
+int centerX = int64_t(initialX) + initialWidth / 2;
+int centerY = int64_t(initialY) + initialHeight / 2;
 int xs = centerX - initialHeight / 2;
 int ys = centerY - initialWidth / 2;
 int xe = xs + initialHeight;
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libmspub.git: 2 commits - src/lib

2017-12-30 Thread David Tardon
 src/lib/MSPUBBlockID.h |7 +++
 src/lib/MSPUBCollector.cpp |  102 ++---
 src/lib/MSPUBParser.cpp|   93 ++---
 src/lib/MSPUBParser97.cpp  |   24 +-
 src/lib/MSPUBTypes.h   |   44 ---
 5 files changed, 241 insertions(+), 29 deletions(-)

New commits:
commit df9a3b0cc2d2af14f2816477f2ca2e65320234a4
Author: David Tardon 
Date:   Sat Dec 30 14:26:06 2017 +0100

fix parsing of bold and italic in mspub 2002 docs

Change-Id: I3945cdf240cd23c593d413d7d964d33e288d873b

diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp
index 40cb694..b6d6bbb 100644
--- a/src/lib/MSPUBParser.cpp
+++ b/src/lib/MSPUBParser.cpp
@@ -1476,8 +1476,12 @@ CharacterStyle 
MSPUBParser::getCharacterStyle(librevenge::RVNGInputStream *input
   {
 dTextSize = textSize1 * (double(POINTS_IN_INCH) / EMUS_IN_INCH);
   }
-  style.italic = seenItalic1 && seenItalic2;
-  style.bold = seenBold1 && seenBold2;
+  // FIXME: What's this with foo1 && foo2? I've only seen foo1 in 2k2
+  // files and either just foo1 or foo1+foo2 in 2k7 files...
+  style.italic = seenItalic1; // && seenItalic2;
+  style.bold = seenBold1; // && seenBold2;
+  (void) seenItalic2;
+  (void) seenBold2;
   style.textSizeInPt = dTextSize;
   style.colorIndex = getColorIndexByQuillEntry(colorIndex);
   style.fontIndex = fontIndex;
commit 45832739afa9280d180d50b34041c4930eb7fd24
Author: David Tardon 
Date:   Sat Dec 30 13:31:52 2017 +0100

parse more text formatting properties

Change-Id: I25aef81ba5b3beaa57726d85b57c7acab79198d1

diff --git a/src/lib/MSPUBBlockID.h b/src/lib/MSPUBBlockID.h
index 4420e05..bf92664 100644
--- a/src/lib/MSPUBBlockID.h
+++ b/src/lib/MSPUBBlockID.h
@@ -35,6 +35,13 @@ enum MSPUBBlockID // Don't be alarmed by multiple elements 
with the same value;
   ITALIC_1_ID = 0x03,
   ITALIC_2_ID = 0x38,
   UNDERLINE_ID = 0x1E,
+  OUTLINE_ID = 0x4,
+  SHADOW_ID = 0x5,
+  SMALL_CAPS_ID = 0x13,
+  ALL_CAPS_ID = 0x14,
+  EMBOSS_ID = 0x16,
+  ENGRAVE_ID = 0x17,
+  SCALING_ID = 0x20,
   TEXT_SIZE_1_ID = 0x0C,
   TEXT_SIZE_2_ID = 0x39,
   COLOR_INDEX_CONTAINER_ID = 0x44,
diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp
index dafe561..24c8d08 100644
--- a/src/lib/MSPUBCollector.cpp
+++ b/src/lib/MSPUBCollector.cpp
@@ -238,6 +238,82 @@ void mapTableTextToCells(
   assert(paraToCellMap.size() <= tableCellTextEnds.size());
 }
 
+void fillUnderline(librevenge::RVNGPropertyList , const Underline 
underline)
+{
+  switch (underline)
+  {
+  case Underline::None:
+return;
+  case Underline::Single:
+  case Underline::WordsOnly:
+  case Underline::Double:
+  case Underline::Thick:
+props.insert("style:text-underline-style", "solid");
+break;
+  case Underline::Dotted:
+  case Underline::ThickDot:
+props.insert("style:text-underline-style", "dotted");
+break;
+  case Underline::Dash:
+  case Underline::ThickDash:
+props.insert("style:text-underline-style", "dash");
+break;
+  case Underline::DotDash:
+  case Underline::ThickDotDash:
+props.insert("style:text-underline-style", "dot-dash");
+break;
+  case Underline::DotDotDash:
+  case Underline::ThickDotDotDash:
+props.insert("style:text-underline-style", "dot-dot-dash");
+break;
+  case Underline::Wave:
+  case Underline::ThickWave:
+  case Underline::DoubleWave:
+props.insert("style:text-underline-style", "wave");
+break;
+  case Underline::LongDash:
+  case Underline::ThickLongDash:
+props.insert("style:text-underline-style", "long-dash");
+break;
+  }
+
+  switch (underline)
+  {
+  case Underline::Double:
+  case Underline::DoubleWave:
+props.insert("style:text-underline-type", "double");
+break;
+  default:
+props.insert("style:text-underline-type", "single");
+break;
+  }
+
+  switch (underline)
+  {
+  case Underline::Thick:
+  case Underline::ThickWave:
+  case Underline::ThickDot:
+  case Underline::ThickDash:
+  case Underline::ThickDotDash:
+  case Underline::ThickDotDotDash:
+props.insert("style:text-underline-width", "bold");
+break;
+  default:
+props.insert("style:text-underline-width", "auto");
+break;
+  }
+
+  switch (underline)
+  {
+  case Underline::WordsOnly:
+props.insert("style:text-underline-mode", "skip-white-space");
+break;
+  default:
+props.insert("style:text-underline-mode", "continuous");
+break;
+  }
+}
+
 } // anonymous namespace
 
 void MSPUBCollector::collectMetaData(const librevenge::RVNGPropertyList 
)
@@ -1514,7 +1590,7 @@ librevenge::RVNGPropertyList 
MSPUBCollector::getParaStyleProps(const ParagraphSt
 
 librevenge::RVNGPropertyList MSPUBCollector::getCharStyleProps(const 
CharacterStyle , boost::optional defaultCharStyleIndex) const
 {
-  CharacterStyle _nothing = CharacterStyle(false, false, false);
+  CharacterStyle _nothing;
   if (!defaultCharStyleIndex)
   {
 

[Libreoffice-commits] libmspub.git: 2 commits - src/lib

2017-07-29 Thread David Tardon
 src/lib/MSPUBCollector.cpp |2 +-
 src/lib/MSPUBMetaData.cpp  |4 ++--
 src/lib/PolygonUtils.cpp   |   12 ++--
 src/lib/libmspub_utils.cpp |   14 +++---
 4 files changed, 16 insertions(+), 16 deletions(-)

New commits:
commit 77655b7e8dfd05669c3bc1c691a882fa45251cf5
Author: David Tardon 
Date:   Sat Jul 29 12:54:50 2017 +0200

use vector::data()

Change-Id: I8ff2210e36df47c3fcc34a2357425668d6bbfb03

diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp
index b071cb6..981d345 100644
--- a/src/lib/MSPUBCollector.cpp
+++ b/src/lib/MSPUBCollector.cpp
@@ -1174,7 +1174,7 @@ const char *MSPUBCollector::getCalculatedEncoding() const
 goto csd_fail;
   }
   // don't worry, the below call doesn't require a null-terminated string.
-  ucsdet_setText(ucd, (const char *)(_allText[0]), m_allText.size(), 
);
+  ucsdet_setText(ucd, (const char *)m_allText.data(), m_allText.size(), 
);
   if (U_FAILURE(status))
   {
 goto csd_fail;
diff --git a/src/lib/PolygonUtils.cpp b/src/lib/PolygonUtils.cpp
index 5a9c3d1..7020b69 100644
--- a/src/lib/PolygonUtils.cpp
+++ b/src/lib/PolygonUtils.cpp
@@ -6381,19 +6381,19 @@ bool isShapeTypeRectangle(ShapeType type)
 std::shared_ptr getFromDynamicCustomShape(const 
DynamicCustomShape )
 {
   return std::shared_ptr(new CustomShape(
-  dcs.m_vertices.empty() ? NULL : 
_vertices[0],
+  dcs.m_vertices.empty() ? NULL : 
dcs.m_vertices.data(),
   dcs.m_vertices.size(),
-  dcs.m_elements.empty() ? NULL : 
_elements[0],
+  dcs.m_elements.empty() ? NULL : 
dcs.m_elements.data(),
   dcs.m_elements.size(),
-  dcs.m_calculations.empty() ? 
NULL : _calculations[0],
+  dcs.m_calculations.empty() ? 
NULL : dcs.m_calculations.data(),
   dcs.m_calculations.size(),
   
dcs.m_defaultAdjustValues.empty() ? NULL :
-  _defaultAdjustValues[0],
+  dcs.m_defaultAdjustValues.data(),
   dcs.m_defaultAdjustValues.size(),
-  dcs.m_textRectangles.empty() ? 
NULL : _textRectangles[0],
+  dcs.m_textRectangles.empty() ? 
NULL : dcs.m_textRectangles.data(),
   dcs.m_textRectangles.size(),
   dcs.m_coordWidth, 
dcs.m_coordHeight,
-  dcs.m_gluePoints.empty() ? NULL 
: _gluePoints[0],
+  dcs.m_gluePoints.empty() ? NULL 
: dcs.m_gluePoints.data(),
   dcs.m_gluePoints.size(),
   dcs.m_adjustShiftMask
 ));
diff --git a/src/lib/libmspub_utils.cpp b/src/lib/libmspub_utils.cpp
index 05627a9..1540e21 100644
--- a/src/lib/libmspub_utils.cpp
+++ b/src/lib/libmspub_utils.cpp
@@ -333,7 +333,7 @@ void readNBytes(librevenge::RVNGInputStream *input, 
unsigned long length, std::v
 return;
   }
   out = std::vector(numBytesRead);
-  memcpy([0], tmpBuffer, numBytesRead);
+  memcpy(out.data(), tmpBuffer, numBytesRead);
   return;
 }
 
@@ -387,7 +387,7 @@ void appendCharacters(librevenge::RVNGString , const 
std::vector
Date:   Sat Jul 29 12:46:16 2017 +0200

do not append UTF-8 string by code units

Change-Id: I7b8f01fb875336d7d736cf24553fbb82e44fa5ec

diff --git a/src/lib/MSPUBMetaData.cpp b/src/lib/MSPUBMetaData.cpp
index c298bd1..f9ffb8f 100644
--- a/src/lib/MSPUBMetaData.cpp
+++ b/src/lib/MSPUBMetaData.cpp
@@ -252,8 +252,8 @@ librevenge::RVNGString 
libmspub::MSPUBMetaData::readCodePageString(librevenge::R
   {
 // 
http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130%28v=vs.85%29.aspx
 // says this is UTF-8.
-for (std::vector::const_iterator i = characters.begin(); i 
!= characters.end(); ++i)
-  string.append((const char)*i);
+characters.push_back(0);
+string.append(reinterpret_cast(characters.data()));
   }
   else
   {
diff --git a/src/lib/libmspub_utils.cpp b/src/lib/libmspub_utils.cpp
index 00a6f30..05627a9 100644
--- a/src/lib/libmspub_utils.cpp
+++ b/src/lib/libmspub_utils.cpp
@@ -237,17 +237,17 @@ static void _appendUCS4(librevenge::RVNGString , 
unsigned ucs4Character)
 len = 6;
   }
 
-  unsigned char outbuf[6] = { 0, 0, 0, 0, 0, 0 };
+  char outbuf[7] = { 0 };
   int i;
   for (i = len - 1; i > 0; --i)
   {
-outbuf[i] = (ucs4Character & 0x3f) 

[Libreoffice-commits] libmspub.git: 2 commits - src/lib

2017-05-09 Thread David Tardon
 src/lib/MSPUBCollector.cpp |   11 ---
 1 file changed, 4 insertions(+), 7 deletions(-)

New commits:
commit 860883fa6fa861f808c091a3cecd03aa351d87a8
Author: David Tardon 
Date:   Tue May 9 12:40:16 2017 +0200

use existing conv. functions

Change-Id: Ia2f5ab36ae42321771fd43e77b96b5a0b9452412

diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp
index d703549..b071cb6 100644
--- a/src/lib/MSPUBCollector.cpp
+++ b/src/lib/MSPUBCollector.cpp
@@ -310,11 +310,8 @@ void MSPUBCollector::setShapeStretchBorderArt(unsigned 
seqNum)
 
 void MSPUBCollector::setRectCoordProps(Coordinate coord, 
librevenge::RVNGPropertyList *props) const
 {
-  int xs = coord.m_xs, ys = coord.m_ys;
-  double x_center = m_width / 2;
-  double y_center = m_height / 2;
-  props->insert("svg:x", x_center + (double)xs / EMUS_IN_INCH);
-  props->insert("svg:y", y_center + (double)ys / EMUS_IN_INCH);
+  props->insert("svg:x", coord.getXIn(m_width));
+  props->insert("svg:y", coord.getYIn(m_width));
   props->insert("svg:width", coord.getWidthIn());
   props->insert("svg:height", coord.getHeightIn());
 }
commit b14004f95982560820f63a44b18d99ff64438f64
Author: David Tardon 
Date:   Tue May 9 12:39:21 2017 +0200

ofz#1357 avoid integer overflow

Change-Id: I60b2118c0fad45c3bba2006f60636f20bb95eaf0

diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp
index d900893..d703549 100644
--- a/src/lib/MSPUBCollector.cpp
+++ b/src/lib/MSPUBCollector.cpp
@@ -310,13 +310,13 @@ void MSPUBCollector::setShapeStretchBorderArt(unsigned 
seqNum)
 
 void MSPUBCollector::setRectCoordProps(Coordinate coord, 
librevenge::RVNGPropertyList *props) const
 {
-  int xs = coord.m_xs, ys = coord.m_ys, xe = coord.m_xe, ye = coord.m_ye;
+  int xs = coord.m_xs, ys = coord.m_ys;
   double x_center = m_width / 2;
   double y_center = m_height / 2;
   props->insert("svg:x", x_center + (double)xs / EMUS_IN_INCH);
   props->insert("svg:y", y_center + (double)ys / EMUS_IN_INCH);
-  props->insert("svg:width", (double)(xe - xs) / EMUS_IN_INCH);
-  props->insert("svg:height", (double)(ye - ys) / EMUS_IN_INCH);
+  props->insert("svg:width", coord.getWidthIn());
+  props->insert("svg:height", coord.getHeightIn());
 }
 
 Coordinate getFudgedCoordinates(Coordinate coord, const std::vector 
, bool makeBigger, BorderPosition borderPosition)
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libmspub.git: 2 commits - src/lib

2017-05-02 Thread David Tardon
 src/lib/Coordinate.h  |4 ++--
 src/lib/MSPUBParser97.cpp |   12 +---
 2 files changed, 7 insertions(+), 9 deletions(-)

New commits:
commit fcfdbdf6d0481e8c709f8033181e8da09142cff9
Author: David Tardon 
Date:   Tue May 2 16:31:18 2017 +0200

ofz#1004 fix signed integer overflow

Change-Id: I2cb4414464fe62c2b88b6cdcda3a9ba52cf82800

diff --git a/src/lib/Coordinate.h b/src/lib/Coordinate.h
index f15ffb4..336eb09 100644
--- a/src/lib/Coordinate.h
+++ b/src/lib/Coordinate.h
@@ -27,11 +27,11 @@ struct Coordinate
   }
   double getWidthIn() const
   {
-return double(m_xe - m_xs) / EMUS_IN_INCH;
+return double(int64_t(m_xe) - m_xs) / EMUS_IN_INCH;
   }
   double getHeightIn() const
   {
-return double(m_ye - m_ys) / EMUS_IN_INCH;
+return double(int64_t(m_ye) - m_ys) / EMUS_IN_INCH;
   }
 };
 }
commit 6a7bc865eac08ab145b15e504b931e040700015e
Author: David Tardon 
Date:   Tue May 2 16:26:40 2017 +0200

ofz#1288 fix signed integer overflow

Change-Id: I282a6c1b1c5d4ce95d73e6bc59c4e5be574f0802

diff --git a/src/lib/MSPUBParser97.cpp b/src/lib/MSPUBParser97.cpp
index f3b29a2..867a1cf 100644
--- a/src/lib/MSPUBParser97.cpp
+++ b/src/lib/MSPUBParser97.cpp
@@ -9,6 +9,7 @@
 
 #include "MSPUBParser97.h"
 
+#include 
 #include 
 #include 
 
@@ -263,14 +264,11 @@ MSPUBParser97::TextInfo97 
MSPUBParser97::getTextInfo(librevenge::RVNGInputStream
 
 int MSPUBParser97::translateCoordinateIfNecessary(int coordinate) const
 {
-  if (m_isBanner)
-  {
-return coordinate - 120 * EMUS_IN_INCH;
-  }
+  const int offset = (m_isBanner ? 120 : 25) * EMUS_IN_INCH;
+  if (std::numeric_limits::min() + offset > coordinate)
+return std::numeric_limits::min();
   else
-  {
-return coordinate - 25 * EMUS_IN_INCH;
-  }
+return coordinate - offset;
 }
 
 unsigned MSPUBParser97::getFirstLineOffset() const
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libmspub.git: 2 commits - src/lib

2015-01-06 Thread David Tardon
 src/lib/MSPUBMetaData.cpp |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit 84aa593e58a2a3cc28e6e36086d0c99f59e42757
Author: David Tardon dtar...@redhat.com
Date:   Tue Jan 6 13:44:05 2015 +0100

why is this variable static?

Change-Id: Ib3108e1f4a0a4caa2df9685ee58a9ea6e7f7634e

diff --git a/src/lib/MSPUBMetaData.cpp b/src/lib/MSPUBMetaData.cpp
index c52fcd7..7e5888e 100644
--- a/src/lib/MSPUBMetaData.cpp
+++ b/src/lib/MSPUBMetaData.cpp
@@ -210,7 +210,7 @@ bool 
libmspub::MSPUBMetaData::parseTimes(librevenge::RVNGInputStream *input)
   uint64_t modifiedTime = readU64(input);
 
   // modifiedTime is number of 100ns since Jan 1 1601
-  static const uint64_t epoch = uint64_t(116444736UL) * 100;
+  const uint64_t epoch = uint64_t(116444736UL) * 100;
   time_t sec = (modifiedTime / 1000) - epoch;
   const struct tm *time = localtime(sec);
   if (time)
commit 4a642d5ab5d9822168ff49580e1349f422ef4481
Author: David Tardon dtar...@redhat.com
Date:   Tue Jan 6 13:43:21 2015 +0100

workaround build error on some old 32-bit systems

error: integer constant is too large for 'long' type

Change-Id: I7f6a169059ca3dcd4d9977c6af1522799f1df051

diff --git a/src/lib/MSPUBMetaData.cpp b/src/lib/MSPUBMetaData.cpp
index eca048b..c52fcd7 100644
--- a/src/lib/MSPUBMetaData.cpp
+++ b/src/lib/MSPUBMetaData.cpp
@@ -210,7 +210,7 @@ bool 
libmspub::MSPUBMetaData::parseTimes(librevenge::RVNGInputStream *input)
   uint64_t modifiedTime = readU64(input);
 
   // modifiedTime is number of 100ns since Jan 1 1601
-  static const uint64_t epoch = 11644473600;
+  static const uint64_t epoch = uint64_t(116444736UL) * 100;
   time_t sec = (modifiedTime / 1000) - epoch;
   const struct tm *time = localtime(sec);
   if (time)
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libmspub.git: 2 commits - src/lib

2014-12-29 Thread David Tardon
 src/lib/MSPUBCollector.cpp |  101 -
 1 file changed, 74 insertions(+), 27 deletions(-)

New commits:
commit b3ac66dd7a7a4d9d1ed92ffc34a456fef695127e
Author: David Tardon dtar...@redhat.com
Date:   Mon Dec 29 19:18:49 2014 +0100

cells are not always saved in L-R T-B order

As an additional bonus, this simplifies the output loop.

Change-Id: I2ae1eab52d3681c02e790af950c82a7f01d3aa11

diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp
index c157b33..5bc7e62 100644
--- a/src/lib/MSPUBCollector.cpp
+++ b/src/lib/MSPUBCollector.cpp
@@ -108,11 +108,13 @@ static void 
separateSpacesAndInsertText(librevenge::RVNGDrawingInterface *iface,
 struct TableLayoutCell
 {
   TableLayoutCell()
-: m_rowSpan(0)
+: m_cell(0)
+, m_rowSpan(0)
 , m_colSpan(0)
   {
   }
 
+  unsigned m_cell;
   unsigned m_rowSpan;
   unsigned m_colSpan;
 };
@@ -173,11 +175,66 @@ void createTableLayout(const std::vectorCellInfo 
cells, TableLayout tableLay
 }
 
 TableLayoutCell layoutCell = 
tableLayout[it-m_startRow][it-m_startColumn];
+layoutCell.m_cell = unsigned(int(it - cells.begin()));
 layoutCell.m_rowSpan = rowSpan;
 layoutCell.m_colSpan = colSpan;
   }
 }
 
+typedef std::vectorstd::pairunsigned, unsigned  ParagraphToCellMap_t;
+typedef std::vectorlibrevenge::RVNGString SpanTexts_t;
+typedef std::vectorSpanTexts_t ParagraphTexts_t;
+
+void mapTableTextToCells(
+  const std::vectorTextParagraph text,
+  const std::vectorunsigned tableCellTextEnds,
+  const char *const encoding,
+  ParagraphToCellMap_t paraToCellMap,
+  ParagraphTexts_t paraTexts
+)
+{
+  assert(paraToCellMap.empty());
+  assert(paraTexts.empty());
+
+  paraToCellMap.reserve(tableCellTextEnds.size());
+  paraTexts.reserve(tableCellTextEnds.size());
+
+  unsigned firstPara = 0;
+  unsigned offset = 1;
+  for (unsigned para = 0; para != text.size(); ++para)
+  {
+paraTexts.push_back(SpanTexts_t());
+paraTexts.back().reserve(text[para].spans.size());
+
+for (unsigned i_spans = 0; i_spans != text[para].spans.size(); ++i_spans)
+{
+  librevenge::RVNGString textString;
+  appendCharacters(textString, text[para].spans[i_spans].chars, encoding);
+  offset += textString.len();
+  // TODO: why do we not drop these during parse already?
+  if ((i_spans == text[para].spans.size() - 1)  (textString == \r))
+continue;
+  paraTexts.back().push_back(textString);
+}
+
+assert(paraTexts.back().size() = text[para].spans.size());
+
+if ((paraToCellMap.size()  tableCellTextEnds.size()))
+{
+  if (offset  tableCellTextEnds[paraToCellMap.size()])
+  {
+MSPUB_DEBUG_MSG((text of cell %u ends in the middle of a 
paragraph!\n, unsigned(paraToCellMap.size(;
+  }
+
+  paraToCellMap.push_back(std::make_pair(firstPara, para));
+  firstPara = para + 1;
+}
+  }
+
+  assert(paraTexts.size() == text.size());
+  assert(paraToCellMap.size() = tableCellTextEnds.size());
+}
+
 } // anonymous namespace
 
 void MSPUBCollector::addEOTFont(const librevenge::RVNGString name, const 
librevenge::RVNGBinaryData data)
@@ -949,12 +1006,14 @@ boost::functionvoid(void) 
MSPUBCollector::paintShape(const ShapeInfo info, co
   std::vectorunsigned tableCellTextEnds;
   if (bool(info.m_tableCellTextEnds))
 tableCellTextEnds = get(info.m_tableCellTextEnds);
+
   TableLayout 
tableLayout(boost::extents[get(info.m_tableInfo).m_numRows][get(info.m_tableInfo).m_numColumns]);
   createTableLayout(get(info.m_tableInfo).m_cells, tableLayout);
 
-  unsigned cell = 0;
-  unsigned para = 0;
-  unsigned offset = 1;
+  ParagraphToCellMap_t paraToCellMap;
+  ParagraphTexts_t paraTexts;
+  mapTableTextToCells(text, tableCellTextEnds, getCalculatedEncoding(), 
paraToCellMap, paraTexts);
+
   for (unsigned row = 0; row != tableLayout.shape()[0]; ++row)
   {
 m_painter-openTableRow(librevenge::RVNGPropertyList());
@@ -978,38 +1037,26 @@ boost::functionvoid(void) 
MSPUBCollector::paintShape(const ShapeInfo info, co
 
 m_painter-openTableCell(cellProps);
 
-if (cell  tableCellTextEnds.size())
+if (tableLayout[row][col].m_cell  paraToCellMap.size())
 {
-  const unsigned cellEnd = tableCellTextEnds[cell];
-  while ((para  text.size())  (offset  cellEnd))
+  const std::pairunsigned, unsigned cellParas = 
paraToCellMap[tableLayout[row][col].m_cell];
+  for (unsigned para = cellParas.first; para = cellParas.second; 
++para)
   {
 librevenge::RVNGPropertyList paraProps = 
getParaStyleProps(text[para].style, text[para].style.m_defaultCharStyleIndex);
 m_painter-openParagraph(paraProps);
-for (unsigned i_spans = 0; (i_spans  text[para].spans.size()) 
 (offset  cellEnd); ++i_spans)
+
+for (unsigned i_spans = 0; 

[Libreoffice-commits] libmspub.git: 2 commits - src/lib

2014-12-29 Thread David Tardon
 src/lib/MSPUBCollector.cpp |   17 +++--
 src/lib/MSPUBCollector.h   |4 ++--
 src/lib/MSPUBParser.cpp|7 +--
 src/lib/ShapeInfo.h|3 +--
 4 files changed, 15 insertions(+), 16 deletions(-)

New commits:
commit 630ed6296456fe14c08a25dda703a221280a00c2
Author: David Tardon dtar...@redhat.com
Date:   Mon Dec 29 21:53:11 2014 +0100

fix parsing of docs with multiple tables

Change-Id: I4f8141a6fe71db283b698b67819e5ed00aed3860

diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp
index 98d34cc..71e3846 100644
--- a/src/lib/MSPUBCollector.cpp
+++ b/src/lib/MSPUBCollector.cpp
@@ -282,8 +282,6 @@ void MSPUBCollector::setShapeTableInfo(unsigned seqNum,
const TableInfo ti)
 {
   m_shapeInfosBySeqNum[seqNum].m_tableInfo = ti;
-  if (!m_tableCellTextEndsVector.empty())
-m_shapeInfosBySeqNum[seqNum].m_tableCellTextEnds = 
m_tableCellTextEndsVector.back();
 }
 
 void MSPUBCollector::setShapeNumColumns(unsigned seqNum,
@@ -380,7 +378,7 @@ 
MSPUBCollector::MSPUBCollector(librevenge::RVNGDrawingInterface *painter) :
   m_shapeInfosBySeqNum(), m_masterPages(),
   m_shapesWithCoordinatesRotated90(),
   m_masterPagesByPageSeqNum(),
-  m_tableCellTextEndsVector(), m_stringOffsetsByTextId(),
+  m_tableCellTextEndsByTextId(), m_stringOffsetsByTextId(),
   m_calculationValuesSeen(), m_pageSeqNumsOrdered(),
   m_encodingHeuristic(false), m_allText(),
   m_calculatedEncoding()
@@ -393,10 +391,10 @@ void MSPUBCollector::setTextStringOffset(
   m_stringOffsetsByTextId[textId] = offset;
 }
 
-void MSPUBCollector::setNextTableCellTextEnds(
-  const std::vectorunsigned ends)
+void MSPUBCollector::setTableCellTextEnds(
+  const unsigned textId, const std::vectorunsigned ends)
 {
-  m_tableCellTextEndsVector.push_back(ends);
+  m_tableCellTextEndsByTextId[textId] = ends;
 }
 
 void MSPUBCollector::useEncodingHeuristic()
@@ -1003,9 +1001,8 @@ boost::functionvoid(void) 
MSPUBCollector::paintShape(const ShapeInfo info, co
 {
   m_painter-startTableObject(props);
 
-  std::vectorunsigned tableCellTextEnds;
-  if (bool(info.m_tableCellTextEnds))
-tableCellTextEnds = get(info.m_tableCellTextEnds);
+  const std::mapunsigned, std::vectorunsigned ::const_iterator it = 
m_tableCellTextEndsByTextId.find(get(info.m_textId));
+  const std::vectorunsigned tableCellTextEnds = (it != 
m_tableCellTextEndsByTextId.end()) ? it-second : std::vectorunsigned();
 
   TableLayout 
tableLayout(boost::extents[get(info.m_tableInfo).m_numRows][get(info.m_tableInfo).m_numColumns]);
   createTableLayout(get(info.m_tableInfo).m_cells, tableLayout);
diff --git a/src/lib/MSPUBCollector.h b/src/lib/MSPUBCollector.h
index b66e317..7e4b953 100644
--- a/src/lib/MSPUBCollector.h
+++ b/src/lib/MSPUBCollector.h
@@ -121,7 +121,7 @@ public:
 
   void useEncodingHeuristic();
 
-  void setNextTableCellTextEnds(const std::vectorunsigned ends);
+  void setTableCellTextEnds(unsigned textId, const std::vectorunsigned 
ends);
   void setTextStringOffset(unsigned textId, unsigned offset);
 
   bool go();
@@ -165,7 +165,7 @@ private:
   std::setunsigned m_masterPages;
   std::setunsigned m_shapesWithCoordinatesRotated90;
   std::mapunsigned, unsigned m_masterPagesByPageSeqNum;
-  std::vectorstd::vectorunsigned  m_tableCellTextEndsVector;
+  std::mapunsigned, std::vectorunsigned  m_tableCellTextEndsByTextId;
   std::mapunsigned, unsigned m_stringOffsetsByTextId;
   mutable std::vectorbool m_calculationValuesSeen;
   std::vectorunsigned m_pageSeqNumsOrdered;
diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp
index d2f3baa..1810152 100644
--- a/src/lib/MSPUBParser.cpp
+++ b/src/lib/MSPUBParser.cpp
@@ -973,6 +973,7 @@ bool MSPUBParser::parseQuill(librevenge::RVNGInputStream 
*input)
   std::vectorunsigned textLengths;
   std::vectorunsigned textIDs;
   std::vectorunsigned textOffsets;
+  std::mapunsigned, std::vectorunsigned  tableCellTextEnds;
   unsigned textOffsetAccum = 0;
   std::vectorTextSpanReference spans;
   std::vectorTextParagraphReference paras;
@@ -1045,8 +1046,7 @@ bool MSPUBParser::parseQuill(librevenge::RVNGInputStream 
*input)
 else if (i-name == TCD )
 {
   input-seek(i-offset, librevenge::RVNG_SEEK_SET);
-  std::vectorunsigned ends = parseTableCellDefinitions(input, *i);
-  m_collector-setNextTableCellTextEnds(ends);
+  tableCellTextEnds[i-id] = parseTableCellDefinitions(input, *i);
 }
   }
   if (parsedStrs  parsedSyid  parsedFdpc  parsedFdpp  parsedStsh  
parsedFont  textChunkReference != chunkReferences.end())
@@ -1106,6 +1106,9 @@ bool MSPUBParser::parseQuill(librevenge::RVNGInputStream 
*input)
   }
   m_collector-addTextString(readParas, textIDs[j]);
   m_collector-setTextStringOffset(textIDs[j], textOffsets[j]);
+  const std::mapunsigned, std::vectorunsigned ::const_iterator it = 
tableCellTextEnds.find(j);
+  if (it != tableCellTextEnds.end())
+

[Libreoffice-commits] libmspub.git: 2 commits - src/lib

2014-12-28 Thread David Tardon
 src/lib/MSPUBCollector.cpp |  160 -
 src/lib/MSPUBParser.cpp|7 +
 2 files changed, 124 insertions(+), 43 deletions(-)

New commits:
commit 82f18199d17bb4da46b2728f7dfc477eac984bc2
Author: David Tardon dtar...@redhat.com
Date:   Sun Dec 28 14:05:49 2014 +0100

BIPU handling of tables

Change-Id: I99b127f651c20d7024a3f7db881b386424f334d0

diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp
index 53ef937..04f5b6c 100644
--- a/src/lib/MSPUBCollector.cpp
+++ b/src/lib/MSPUBCollector.cpp
@@ -150,6 +150,8 @@ void MSPUBCollector::setShapeTableInfo(unsigned seqNum,
const TableInfo ti)
 {
   m_shapeInfosBySeqNum[seqNum].m_tableInfo = ti;
+  if (!m_tableCellTextEndsVector.empty())
+m_shapeInfosBySeqNum[seqNum].m_tableCellTextEnds = 
m_tableCellTextEndsVector.back();
 }
 
 void MSPUBCollector::setShapeNumColumns(unsigned seqNum,
@@ -482,6 +484,7 @@ boost::functionvoid(void) 
MSPUBCollector::paintShape(const ShapeInfo info, co
   bool hasFill = fill != none;
   boost::optionalstd::vectorTextParagraph  maybeText = getShapeText(info);
   bool hasText = bool(maybeText);
+  const bool isTable = bool(info.m_tableInfo);
   bool makeLayer = hasBorderArt ||
(hasStroke  hasFill) || (hasStroke  hasText) || 
(hasFill  hasText);
   if (makeLayer)
@@ -863,57 +866,128 @@ boost::functionvoid(void) 
MSPUBCollector::paintShape(const ShapeInfo info, co
 {
   props.insert(librevenge:rotate, textRotation * 180 / M_PI);
 }
-Margins margins = info.m_margins.get_value_or(Margins());
-props.insert(fo:padding-left, (double)margins.m_left / EMUS_IN_INCH);
-props.insert(fo:padding-top, (double)margins.m_top / EMUS_IN_INCH);
-props.insert(fo:padding-right, (double)margins.m_right / EMUS_IN_INCH);
-props.insert(fo:padding-bottom, (double)margins.m_bottom / EMUS_IN_INCH);
-if (bool(info.m_verticalAlign))
+
+if (isTable)
 {
-  switch (info.m_verticalAlign.get())
+  m_painter-startTableObject(props);
+
+  std::vectorunsigned tableCellTextEnds;
+  if (bool(info.m_tableCellTextEnds))
+tableCellTextEnds = get(info.m_tableCellTextEnds);
+  unsigned row = 0;
+  unsigned column = 0;
+  unsigned para = 0;
+  unsigned offset = 1;
+  for (unsigned cell = 0; cell != get(info.m_tableInfo).m_numColumns * 
get(info.m_tableInfo).m_numRows; ++cell)
   {
-  default:
-  case TOP:
-props.insert(draw:textarea-vertical-align, top);
-break;
-  case MIDDLE:
-props.insert(draw:textarea-vertical-align, middle);
-break;
-  case BOTTOM:
-props.insert(draw:textarea-vertical-align, bottom);
-break;
+assert(row  get(info.m_tableInfo).m_numRows);
+assert(column  get(info.m_tableInfo).m_numColumns);
+
+if (column == 0)
+  m_painter-openTableRow(librevenge::RVNGPropertyList());
+
+librevenge::RVNGPropertyList cellProps;
+cellProps.insert(librevenge:column, int(column));
+cellProps.insert(librevenge:row, int(row));
+m_painter-openTableCell(cellProps);
+
+if (cell  tableCellTextEnds.size())
+{
+  const unsigned cellEnd = tableCellTextEnds[cell];
+  while ((para  text.size())  (offset  cellEnd))
+  {
+librevenge::RVNGPropertyList paraProps = 
getParaStyleProps(text[para].style, text[para].style.m_defaultCharStyleIndex);
+m_painter-openParagraph(paraProps);
+for (unsigned i_spans = 0; (i_spans  text[para].spans.size())  
(offset  cellEnd); ++i_spans)
+{
+  librevenge::RVNGString textString;
+  appendCharacters(textString, text[para].spans[i_spans].chars,
+   getCalculatedEncoding());
+  offset += textString.len();
+  // TODO: why do we not drop these during parse already?
+  if ((i_spans == text[para].spans.size() - 1)  (textString == 
\r))
+continue;
+  librevenge::RVNGPropertyList charProps = 
getCharStyleProps(text[para].spans[i_spans].style, 
text[para].style.m_defaultCharStyleIndex);
+  m_painter-openSpan(charProps);
+  separateSpacesAndInsertText(m_painter, textString);
+  m_painter-closeSpan();
+}
+
+if (offset  cellEnd)
+{
+  MSPUB_DEBUG_MSG((cell text ends in the middle of a span!\n));
+}
+m_painter-closeParagraph();
+++para;
+  }
+}
+
+m_painter-closeTableCell();
+++column;
+if (column == get(info.m_tableInfo).m_numColumns)
+{
+  m_painter-closeTableRow();
+  ++row;
+  column = 0;
+}
   }
+
+  m_painter-endTableObject();
 }
-if (info.m_numColumns)
-{
-  unsigned ncols = 

[Libreoffice-commits] libmspub.git: 2 commits - src/lib

2014-11-25 Thread David Tardon
 src/lib/MSPUBParser.cpp |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit 0ab2f4869b5d5f43a3793ae7e556bd5825609552
Author: David Tardon dtar...@redhat.com
Date:   Tue Nov 25 15:27:51 2014 +0100

do not dereference past-the-end iterator

Change-Id: I93b300e79163c9fb6a6f32f937c75e6265f1c5b7

diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp
index 2797845..ee30d91 100644
--- a/src/lib/MSPUBParser.cpp
+++ b/src/lib/MSPUBParser.cpp
@@ -967,13 +967,13 @@ bool MSPUBParser::parseQuill(librevenge::RVNGInputStream 
*input)
 unsigned bytesRead = 0;
 std::vectorTextSpanReference::iterator currentTextSpan = spans.begin();
 std::vectorTextParagraphReference::iterator currentTextPara = 
paras.begin();
-for (unsigned j = 0; j  textIDs.size()  j  textLengths.size()  
currentTextPara != paras.end(); ++j)
+for (unsigned j = 0; j  textIDs.size()  j  textLengths.size(); ++j)
 {
   MSPUB_DEBUG_MSG((Parsing a text block.\n));
   std::vectorTextParagraph readParas;
   std::vectorTextSpan readSpans;
   std::vectorunsigned char text;
-  for (unsigned k = 0; k  textLengths[j]  currentTextSpan != 
spans.end(); ++k)
+  for (unsigned k = 0; k  textLengths[j]  currentTextPara != 
paras.end()  currentTextSpan != spans.end(); ++k)
   {
 text.push_back(readU8(input));
 text.push_back(readU8(input));
commit b33edc1675cec963340466627973fba070d2747d
Author: David Tardon dtar...@redhat.com
Date:   Tue Nov 25 15:22:30 2014 +0100

do not dereference past-the-end iterator

Change-Id: Icef6e8a324f85c51c27dd03a03ca1c37e4b01bc1

diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp
index 091f2b5..2797845 100644
--- a/src/lib/MSPUBParser.cpp
+++ b/src/lib/MSPUBParser.cpp
@@ -967,13 +967,13 @@ bool MSPUBParser::parseQuill(librevenge::RVNGInputStream 
*input)
 unsigned bytesRead = 0;
 std::vectorTextSpanReference::iterator currentTextSpan = spans.begin();
 std::vectorTextParagraphReference::iterator currentTextPara = 
paras.begin();
-for (unsigned j = 0; j  textIDs.size()  j  textLengths.size(); ++j)
+for (unsigned j = 0; j  textIDs.size()  j  textLengths.size()  
currentTextPara != paras.end(); ++j)
 {
   MSPUB_DEBUG_MSG((Parsing a text block.\n));
   std::vectorTextParagraph readParas;
   std::vectorTextSpan readSpans;
   std::vectorunsigned char text;
-  for (unsigned k = 0; k  textLengths[j]; ++k)
+  for (unsigned k = 0; k  textLengths[j]  currentTextSpan != 
spans.end(); ++k)
   {
 text.push_back(readU8(input));
 text.push_back(readU8(input));
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libmspub.git: 2 commits - src/lib

2013-11-20 Thread Fridrich Štrba
 src/lib/MSPUBCollector.cpp |2 -
 src/lib/MSPUBParser.cpp|   10 +++---
 src/lib/MSPUBParser2k.cpp  |   74 ++---
 src/lib/PolygonUtils.cpp   |4 +-
 4 files changed, 46 insertions(+), 44 deletions(-)

New commits:
commit 4a37910aafea0a69be1377045239244d1ce0f7e0
Author: Fridrich Å trba fridrich.st...@bluewin.ch
Date:   Wed Nov 20 16:56:01 2013 +0100

Astyle

Change-Id: Iefe93634d0573d57a95c1c0b96848db2f4ec2b8c

diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp
index c3bf61d..d6cc2c7 100644
--- a/src/lib/MSPUBParser.cpp
+++ b/src/lib/MSPUBParser.cpp
@@ -1618,16 +1618,16 @@ void 
libmspub::MSPUBParser::parseEscherShape(librevenge::RVNGInputStream *input,
 
   m_collector-addShapeLine(*shapeSeqNum,
 topExists ? 
Line(ColorReference(*ptr_topColor), ptr_topWidth ? *ptr_topWidth : 9525, true) :
-  Line(ColorReference(0), 0, 
false));
+Line(ColorReference(0), 0, false));
   m_collector-addShapeLine(*shapeSeqNum,
 rightExists ? 
Line(ColorReference(*ptr_rightColor), ptr_rightWidth ? *ptr_rightWidth : 9525, 
true) :
-  Line(ColorReference(0), 0, 
false));
+Line(ColorReference(0), 0, false));
   m_collector-addShapeLine(*shapeSeqNum,
 bottomExists ? 
Line(ColorReference(*ptr_bottomColor), ptr_bottomWidth ? *ptr_bottomWidth : 
9525, true) :
-  Line(ColorReference(0), 0, 
false));
+Line(ColorReference(0), 0, false));
   m_collector-addShapeLine(*shapeSeqNum,
 leftExists ? 
Line(ColorReference(*ptr_leftColor), ptr_leftWidth ? *ptr_leftWidth : 9525, 
true) :
-  Line(ColorReference(0), 0, 
false));
+Line(ColorReference(0), 0, false));
 
   // Amazing feat of Microsoft engineering:
   // The detailed interaction of four flags describes ONE 
true/false property!
@@ -1636,7 +1636,7 @@ void 
libmspub::MSPUBParser::parseEscherShape(librevenge::RVNGInputStream *input,
   (*ptr_leftFlags  FLAG_USE_LEFT_INSET_PEN) 
   (!(*ptr_leftFlags  FLAG_USE_LEFT_INSET_PEN_OK) || 
(*ptr_leftFlags  FLAG_LEFT_INSET_PEN_OK)) 
   (*ptr_leftFlags  FLAG_LEFT_INSET_PEN))
-{
+  {
 m_collector-setShapeBorderPosition(*shapeSeqNum, 
INSIDE_SHAPE);
   }
   else
diff --git a/src/lib/MSPUBParser2k.cpp b/src/lib/MSPUBParser2k.cpp
index 90a2780..974a310 100644
--- a/src/lib/MSPUBParser2k.cpp
+++ b/src/lib/MSPUBParser2k.cpp
@@ -240,10 +240,10 @@ libmspub::ShapeType 
libmspub::MSPUBParser2k::getShapeType(unsigned char shapeSpe
   {
   case 0x1:
 return RIGHT_TRIANGLE;
-/*
-case 0x2:
-  return GENERAL_TRIANGLE;
-*/
+  /*
+  case 0x2:
+return GENERAL_TRIANGLE;
+  */
   case 0x3:
 return UP_ARROW;
   case 0x4:
@@ -254,10 +254,10 @@ libmspub::ShapeType 
libmspub::MSPUBParser2k::getShapeType(unsigned char shapeSpe
 return ISOCELES_TRIANGLE;
   case 0x7:
 return PARALLELOGRAM;
-/*
-case 0x8:
-  return TILTED_TRAPEZOID;
-*/
+  /*
+  case 0x8:
+return TILTED_TRAPEZOID;
+  */
   case 0x9:
 return UP_DOWN_ARROW;
   case 0xA:
@@ -274,41 +274,41 @@ libmspub::ShapeType 
libmspub::MSPUBParser2k::getShapeType(unsigned char shapeSpe
 return BENT_ARROW;
   case 0x10:
 return SEAL_24;
-/*
-case 0x11:
-  return PIE;
-*/
+  /*
+  case 0x11:
+return PIE;
+  */
   case 0x12:
 return PENTAGON;
   case 0x13:
 return HOME_PLATE;
-/*
-case 0x14:
-  return NOTCHED_TRIANGLE;
-*/
+  /*
+  case 0x14:
+return NOTCHED_TRIANGLE;
+  */
   case 0x15:
 return U_TURN_ARROW;
   case 0x16:
 return IRREGULAR_SEAL_1;
-/*
-case 0x17:
-  return CHORD;
-*/
+  /*
+  case 0x17:
+return CHORD;
+  */
   case 0x18:
 return HEXAGON;
-/*
-case 0x19:
-  return NOTCHED_RECTANGLE;
-*/
-/*
-case 0x1A:
-  return W_SHAPE; //This is a bizarre shape; the number of vertices 
depends on one of the adjust values.
-  //We need to refactor our escher shape drawing routines 
before we can handle it.
-*/
-/*
-case 0x1B:
-  return ROUND_RECT_CALLOUT_2K; //This is not quite the same as the round 
rect. found in 2k2 and above.
-*/
+  /*
+  case 0x19:
+return NOTCHED_RECTANGLE;
+  */
+  /*
+  case 0x1A:
+return W_SHAPE; //This is a bizarre shape; the number of vertices depends 
on 

[Libreoffice-commits] libmspub.git: 2 commits - src/lib

2013-04-24 Thread Franz Schmid
 src/lib/MSPUBCollector.cpp|6 +++---
 src/lib/MSPUBSVGGenerator.cpp |   35 +++
 2 files changed, 26 insertions(+), 15 deletions(-)

New commits:
commit b4c7fe03433a0db5a625e76fa7fa81e4a41f85c6
Author: Franz Schmid fr...@linux-hp-i7.site
Date:   Fri Apr 19 20:49:01 2013 +0200

First Line left indent is signed not unsigned.

diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp
index 4af4969..a8d55ca 100644
--- a/src/lib/MSPUBCollector.cpp
+++ b/src/lib/MSPUBCollector.cpp
@@ -1167,8 +1167,8 @@ WPXPropertyList 
libmspub::MSPUBCollector::getParaStyleProps(const ParagraphStyle
  defaultStyle.m_spaceAfterEmu.get_value_or(0));
   unsigned spaceBeforeEmu = style.m_spaceBeforeEmu.get_value_or(
   defaultStyle.m_spaceBeforeEmu.get_value_or(0));
-  unsigned firstLineIndentEmu = style.m_firstLineIndentEmu.get_value_or(
-  
defaultStyle.m_firstLineIndentEmu.get_value_or(0));
+  int firstLineIndentEmu = style.m_firstLineIndentEmu.get_value_or(
+ 
defaultStyle.m_firstLineIndentEmu.get_value_or(0));
   unsigned leftIndentEmu = style.m_leftIndentEmu.get_value_or(
  defaultStyle.m_leftIndentEmu.get_value_or(0));
   unsigned rightIndentEmu = style.m_rightIndentEmu.get_value_or(
commit 826cb95f46f0853bfaec885ca2b9f8b88f036771
Author: Franz Schmid fr...@linux-hp-i7.site
Date:   Wed Apr 17 22:48:01 2013 +0200

Fixed crash when converting files with dashed lines to svg.

diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp
index 895b736..4af4969 100644
--- a/src/lib/MSPUBCollector.cpp
+++ b/src/lib/MSPUBCollector.cpp
@@ -743,7 +743,7 @@ boost::functionvoid(void) 
libmspub::MSPUBCollector::paintShape(const ShapeInfo
   graphicsProps.insert(svg:stroke-linecap, round);
   break;
 case RECT_DOT:
-  graphicsProps.insert(svg:stroke-linecap, rect);
+  graphicsProps.insert(svg:stroke-linecap, butt);
   break;
 default:
   break;
diff --git a/src/lib/MSPUBSVGGenerator.cpp b/src/lib/MSPUBSVGGenerator.cpp
index 7546230..4b5482f 100644
--- a/src/lib/MSPUBSVGGenerator.cpp
+++ b/src/lib/MSPUBSVGGenerator.cpp
@@ -546,9 +546,10 @@ void libmspub::MSPUBSVGGenerator::writeStyle(bool /* 
isClosed */)
 {
   m_outputSink  style=\;
 
+  double width = 1.0 / 72.0;
   if (m_style[svg:stroke-width])
   {
-double width = m_style[svg:stroke-width]-getDouble();
+width = m_style[svg:stroke-width]-getDouble();
 if (width == 0.0  m_style[draw:stroke]  
m_style[draw:stroke]-getStr() != none)
   width = 0.2 / 72.0; // reasonable hairline
 m_outputSink  stroke-width:   doubleToString(72*width)  ; ;
@@ -562,29 +563,39 @@ void libmspub::MSPUBSVGGenerator::writeStyle(bool /* 
isClosed */)
   }
 
   if (m_style[draw:stroke]  m_style[draw:stroke]-getStr() == solid)
-m_outputSink  stroke-dasharray:  solid; ;
-  else if (m_style[draw:stroke]  m_style[draw:stroke]-getStr() == 
dash)
+m_outputSink  stroke-dasharray:  none; ;
+  if (m_style[draw:stroke]  m_style[draw:stroke]-getStr() == dash)
   {
-int dots1 = m_style[draw:dots1]-getInt();
-int dots2 = m_style[draw:dots2]-getInt();
-double dots1len = m_style[draw:dots1-length]-getDouble();
-double dots2len = m_style[draw:dots2-length]-getDouble();
-double gap = m_style[draw:distance]-getDouble();
+int dots1 = 0;
+if (m_style[draw:dots1])
+  dots1 = m_style[draw:dots1]-getInt();
+int dots2 = 0;
+if (m_style[draw:dots2])
+  dots2 = m_style[draw:dots2]-getInt();
+double dots1len = width * 72.0;
+double dots2len = width * 72.0;
+double gap = width * 72.0;
+if (m_style[draw:dots1-length])
+  dots1len = m_style[draw:dots1-length]-getDouble() * 72.0;
+if (m_style[draw:dots2-length])
+  dots2len = m_style[draw:dots2-length]-getDouble() * 72.0;
+if (m_style[draw:distance])
+  gap = m_style[draw:distance]-getDouble() * 72.0;
 m_outputSink  stroke-dasharray: ;
 for (int i = 0; i  dots1; i++)
 {
   if (i)
 m_outputSink  , ;
-  m_outputSink  (int)dots1len;
+  m_outputSink  dots1len;
   m_outputSink  , ;
-  m_outputSink  (int)gap;
+  m_outputSink  gap;
 }
 for (int j = 0; j  dots2; j++)
 {
   m_outputSink  , ;
-  m_outputSink  (int)dots2len;
+  m_outputSink  dots2len;
   m_outputSink  , ;
-  m_outputSink  (int)gap;
+  m_outputSink  gap;
 }
 m_outputSink  ; ;
   }
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libmspub.git: 2 commits - src/lib

2013-04-16 Thread Fridrich Štrba
 src/lib/MSPUBCollector.cpp |   53 +++--
 src/lib/MSPUBCollector.h   |2 -
 src/lib/MSPUBParser.cpp|   15 +---
 src/lib/MSPUBParser2k.cpp  |2 -
 src/lib/MSPUBParser97.cpp  |2 -
 src/lib/PolygonUtils.cpp   |   14 +--
 src/lib/ShapeInfo.h|7 ++---
 7 files changed, 43 insertions(+), 52 deletions(-)

New commits:
commit 45093bd820c2e7863aebed9b106488021a641061
Author: Fridrich Å trba fridrich.st...@bluewin.ch
Date:   Tue Apr 16 09:25:20 2013 +0200

*.is_initialized() - status

diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp
index 36f51ca..895b736 100644
--- a/src/lib/MSPUBCollector.cpp
+++ b/src/lib/MSPUBCollector.cpp
@@ -333,7 +333,7 @@ std::vectorint 
libmspub::MSPUBCollector::getShapeAdjustValues(const ShapeInfo
 
 boost::optionalstd::vectorlibmspub::TextParagraph  
libmspub::MSPUBCollector::getShapeText(const ShapeInfo info) const
 {
-  if (info.m_textId.is_initialized())
+  if (!!info.m_textId)
   {
 unsigned stringId = info.m_textId.get();
 const std::vectorTextParagraph *ptr_str = 
getIfExists_const(m_textStringsById, stringId);
@@ -350,11 +350,11 @@ void 
libmspub::MSPUBCollector::setupShapeStructures(ShapeGroupElement elt)
   ShapeInfo *ptr_info = getIfExists(m_shapeInfosBySeqNum, elt.getSeqNum());
   if (ptr_info)
   {
-if (ptr_info-m_imgIndex.is_initialized())
+if (!!ptr_info-m_imgIndex)
 {
   unsigned index = ptr_info-m_imgIndex.get();
   int rot = 0;
-  if (ptr_info-m_innerRotation.is_initialized())
+  if (!!ptr_info-m_innerRotation)
 rot = ptr_info-m_innerRotation.get();
   if (index - 1  m_images.size())
   {
@@ -390,7 +390,7 @@ boost::functionvoid(void) 
libmspub::MSPUBCollector::paintShape(const ShapeInfo
   bool hasStroke = false;
   bool hasBorderArt = false;
   boost::optionalunsigned maybeBorderImg = info.m_borderImgIndex;
-  if (maybeBorderImg.is_initialized()  !info.m_lines.empty())
+  if (!!maybeBorderImg  !info.m_lines.empty())
   {
 hasStroke = true;
 hasBorderArt = true;
@@ -409,7 +409,7 @@ boost::functionvoid(void) 
libmspub::MSPUBCollector::paintShape(const ShapeInfo
   WPXString fill = graphicsProps[draw:fill] ? 
graphicsProps[draw:fill]-getStr() : none;
   bool hasFill = fill != none;
   boost::optionalstd::vectorTextParagraph  maybeText = getShapeText(info);
-  bool hasText = maybeText.is_initialized();
+  bool hasText = !!maybeText;
   bool makeLayer = hasBorderArt ||
(hasStroke  hasFill) || (hasStroke  hasText) || 
(hasFill  hasText);
   if (makeLayer)
@@ -432,7 +432,7 @@ boost::functionvoid(void) 
libmspub::MSPUBCollector::paintShape(const ShapeInfo
   BorderPosition borderPosition =
 hasBorderArt ? INSIDE_SHAPE : 
info.m_borderPosition.get_value_or(HALF_INSIDE_SHAPE);
   ShapeType type;
-  if (info.m_cropType.is_initialized())
+  if (!!info.m_cropType)
   {
 type = info.m_cropType.get();
   }
@@ -460,7 +460,7 @@ boost::functionvoid(void) 
libmspub::MSPUBCollector::paintShape(const ShapeInfo
 width -= 2 * borderImgWidth;
   }
 }
-if (info.m_pictureRecolor.is_initialized())
+if (!!info.m_pictureRecolor)
 {
   Color obc = info.m_pictureRecolor.get().getFinalColor(m_paletteColors);
   graphicsProps.insert(draw:color-mode, greyscale);
@@ -472,7 +472,7 @@ boost::functionvoid(void) 
libmspub::MSPUBCollector::paintShape(const ShapeInfo
static_castdouble(obc.g) / 255.0, WPX_PERCENT);
 }
 bool shadowPropsInserted = false;
-if (info.m_shadow.is_initialized())
+if (!!info.m_shadow)
 {
   const Shadow s = info.m_shadow.get();
   if (!needsEmulation(s))
@@ -496,7 +496,7 @@ boost::functionvoid(void) 
libmspub::MSPUBCollector::paintShape(const ShapeInfo
 writeCustomShape(type, graphicsProps, m_painter, x, y, height, width,
  true, foldedTransform,
  std::vectorLine(), 
boost::bind(libmspub::MSPUBCollector::getCalculationValue, this, info, _1, 
false, adjustValues), m_paletteColors, info.getCustomShape());
-if (info.m_pictureRecolor.is_initialized())
+if (!!info.m_pictureRecolor)
 {
   graphicsProps.remove(draw:color-mode);
   graphicsProps.remove(draw:red);
@@ -581,7 +581,7 @@ boost::functionvoid(void) 
libmspub::MSPUBCollector::paintShape(const ShapeInfo
   m_painter-drawRectangle(leftRectProps);
   std::vectorunsigned::const_iterator iOffset = ba.m_offsets.begin();
   boost::optionalColor oneBitColor;
-  if (info.m_lineBackColor.is_initialized())
+  if (!!info.m_lineBackColor)
   {
 oneBitColor = 
info.m_lineBackColor.get().getFinalColor(m_paletteColors);
   }
@@ -732,7 +732,7 @@ boost::functionvoid(void) 
libmspub::MSPUBCollector::paintShape(const ShapeInfo
   height = strokeCoord.getHeightIn();
   width = strokeCoord.getWidthIn();
   

[Libreoffice-commits] libmspub.git: 2 commits - src/lib

2013-04-04 Thread Fridrich Štrba
 src/lib/Fill.cpp   |   28 +---
 src/lib/Fill.h |   13 -
 src/lib/FillType.h |8 +++-
 src/lib/MSPUBCollector.cpp |8 ++--
 src/lib/MSPUBParser.cpp|   15 +--
 src/lib/ShapeInfo.h|3 ++-
 6 files changed, 61 insertions(+), 14 deletions(-)

New commits:
commit c51d3825ee97cd563a4791f2b1b43e40c5272a7f
Author: Fridrich Å trba fridrich.st...@bluewin.ch
Date:   Thu Apr 4 15:05:16 2013 +0200

Astyle stuff (astyle -b -k3 -y -n -s2 -r \*.cpp \*.h)

diff --git a/src/lib/Fill.cpp b/src/lib/Fill.cpp
index 66d55de..aeaeb37 100644
--- a/src/lib/Fill.cpp
+++ b/src/lib/Fill.cpp
@@ -54,11 +54,11 @@ WPXPropertyListVector 
ImgFill::getProperties(WPXPropertyList *out) const
   out-insert(style:repeat, stretch);
 }
 if (m_rotation != 0)
-   {
- WPXString sValue;
- sValue.sprintf(%d, m_rotation);
- out-insert(libwpg:rotate, sValue);
-   }
+{
+  WPXString sValue;
+  sValue.sprintf(%d, m_rotation);
+  out-insert(libwpg:rotate, sValue);
+}
   }
   return WPXPropertyListVector();
 }
@@ -133,19 +133,19 @@ WPXPropertyListVector 
GradientFill::getProperties(WPXPropertyList *out) const
   out-insert(draw:angle, -m_angle); // draw:angle is clockwise in odf format
   switch (m_type)
   {
- case 4:
- case 7:
- out-insert(libmspub:shade, normal);
- break;
- case 5:
- out-insert(libmspub:shade, center);
- break;
- case 6:
- out-insert(libmspub:shade, shape);
- break;
- default:
- out-insert(libmspub:shade, normal);
- break;
+  case 4:
+  case 7:
+out-insert(libmspub:shade, normal);
+break;
+  case 5:
+out-insert(libmspub:shade, center);
+break;
+  case 6:
+out-insert(libmspub:shade, shape);
+break;
+  default:
+out-insert(libmspub:shade, normal);
+break;
   }
   for (unsigned i = 0; i  m_stops.size(); ++i)
   {
diff --git a/src/lib/FillType.h b/src/lib/FillType.h
index 7b1f4cb..8978ebd 100644
--- a/src/lib/FillType.h
+++ b/src/lib/FillType.h
@@ -34,10 +34,10 @@ namespace libmspub
 enum FillType
 {
   SOLID,
-  GRADIENT = 0x07,   // msofillShadeScale Similar to msofillShade, but the 
fillAngle
- // is additionally scaled by the aspect ratio of
- // the shape. If shape is square, it is the
- // same as msofillShade
+  GRADIENT = 0x07, // msofillShadeScale Similar to msofillShade, but the 
fillAngle
+   // is additionally scaled by the aspect ratio of
+   // the shape. If shape is square, it is the
+   // same as msofillShade
   GRADIENTCENTER = 0x06, // msofillShadeShape  Shade from shape outline to end 
point
   GRADIENTSHAPE = 0x05,  // msofillShadeCenter Shade from bounding rectangle 
to end point
   GRADIENTNORMAL = 0x04, // msofillShade   Shade from start to end points
diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp
index bbe229a..82b7cca 100644
--- a/src/lib/MSPUBCollector.cpp
+++ b/src/lib/MSPUBCollector.cpp
@@ -348,9 +348,9 @@ void 
libmspub::MSPUBCollector::setupShapeStructures(ShapeGroupElement elt)
 if (ptr_info-m_imgIndex.is_initialized())
 {
   unsigned index = ptr_info-m_imgIndex.get();
- int rot = 0;
- if (ptr_info-m_innerRotation.is_initialized())
- rot = ptr_info-m_innerRotation.get();
+  int rot = 0;
+  if (ptr_info-m_innerRotation.is_initialized())
+rot = ptr_info-m_innerRotation.get();
   if (index - 1  m_images.size())
   {
 ptr_info-m_fill = boost::shared_ptrconst Fill(new ImgFill(index, 
this, false, rot));
@@ -424,7 +424,7 @@ boost::functionvoid(void) 
libmspub::MSPUBCollector::paintShape(const ShapeInfo
   {
 type = info.m_type.get_value_or(RECTANGLE);
   }
-  
+
   if (hasFill)
   {
 double x, y, height, width;
diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp
index cdbc155..584c227 100644
--- a/src/lib/MSPUBParser.cpp
+++ b/src/lib/MSPUBParser.cpp
@@ -1894,13 +1894,13 @@ boost::shared_ptrlibmspub::Fill 
libmspub::MSPUBParser::getNewFill(const std::m
   case TEXTURE:
   case BITMAP:
   {
-   // in the case the shape is rotated we must rotate the image too
+// in the case the shape is rotated we must rotate the image too
 int rotation = 0;
 const int *ptr_rotation = (const int *)getIfExists_const(foptProperties, 
FIELDID_ROTATION);
 if (ptr_rotation)
 {
-   rotation = (int)doubleModulo(toFixedPoint(*ptr_rotation), 360);
-   MSPUB_DEBUG_MSG((Rotation value %d\n, rotation));
+  rotation = (int)doubleModulo(toFixedPoint(*ptr_rotation), 360);
+  MSPUB_DEBUG_MSG((Rotation value %d\n, rotation));
 }
 const unsigned *ptr_bgPxId = getIfExists_const(foptProperties,