[Libreoffice-commits] libvisio.git: src/lib

2019-08-12 Thread Libreoffice Gerrit user
 src/lib/VDXParser.cpp |4 +---
 src/lib/VSDXMLHelper.cpp  |4 +---
 src/lib/VSDXMetaData.cpp  |4 +---
 src/lib/VSDXParser.cpp|4 +---
 src/lib/VSDXTheme.cpp |4 +---
 src/lib/VisioDocument.cpp |4 +---
 src/lib/libvisio_xml.cpp  |   14 +++---
 src/lib/libvisio_xml.h|   11 +++
 8 files changed, 20 insertions(+), 29 deletions(-)

New commits:
commit 8f0ce0bb48185458bcaa0efb8cc01da7386e208a
Author: David Tardon 
AuthorDate: Mon Aug 12 10:01:14 2019 +0200
Commit: David Tardon 
CommitDate: Mon Aug 12 10:01:14 2019 +0200

simplify creation of xmlReader

Change-Id: I95815a3f19c612a2926ea1d80f07abbaba1f5595

diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp
index aecdf20..a5c204d 100644
--- a/src/lib/VDXParser.cpp
+++ b/src/lib/VDXParser.cpp
@@ -75,9 +75,7 @@ bool 
libvisio::VDXParser::processXmlDocument(librevenge::RVNGInputStream *input)
   if (!input)
 return false;
 
-  const std::shared_ptr reader(
-xmlReaderForStream(input, nullptr, nullptr, 
XML_PARSE_NOBLANKS|XML_PARSE_NONET|XML_PARSE_RECOVER),
-xmlFreeTextReader);
+  auto reader = xmlReaderForStream(input);
   if (!reader)
 return false;
   int ret = xmlTextReaderRead(reader.get());
diff --git a/src/lib/VSDXMLHelper.cpp b/src/lib/VSDXMLHelper.cpp
index aa6a595..24045b6 100644
--- a/src/lib/VSDXMLHelper.cpp
+++ b/src/lib/VSDXMLHelper.cpp
@@ -91,9 +91,7 @@ 
libvisio::VSDXRelationships::VSDXRelationships(librevenge::RVNGInputStream *inpu
 {
   if (input)
   {
-const std::shared_ptr reader(
-  xmlReaderForStream(input, nullptr, nullptr, 
XML_PARSE_NOBLANKS|XML_PARSE_NONET|XML_PARSE_RECOVER),
-  xmlFreeTextReader);
+auto reader = xmlReaderForStream(input);
 if (reader)
 {
   bool inRelationships = false;
diff --git a/src/lib/VSDXMetaData.cpp b/src/lib/VSDXMetaData.cpp
index 33a6679..b0e5e69 100644
--- a/src/lib/VSDXMetaData.cpp
+++ b/src/lib/VSDXMetaData.cpp
@@ -120,9 +120,7 @@ bool 
libvisio::VSDXMetaData::parse(librevenge::RVNGInputStream *input)
 
   XMLErrorWatcher watcher;
 
-  const std::shared_ptr reader(
-xmlReaderForStream(input, nullptr, nullptr, 
XML_PARSE_NOBLANKS|XML_PARSE_NONET, ),
-xmlFreeTextReader);
+  auto reader = xmlReaderForStream(input, , false);
   if (!reader)
 return false;
 
diff --git a/src/lib/VSDXParser.cpp b/src/lib/VSDXParser.cpp
index a7f40db..1167ccb 100644
--- a/src/lib/VSDXParser.cpp
+++ b/src/lib/VSDXParser.cpp
@@ -304,9 +304,7 @@ void 
libvisio::VSDXParser::processXmlDocument(librevenge::RVNGInputStream *input
 
   XMLErrorWatcher watcher;
 
-  const std::shared_ptr reader(
-xmlReaderForStream(input, nullptr, nullptr, 
XML_PARSE_NOBLANKS|XML_PARSE_NONET, ),
-xmlFreeTextReader);
+  auto reader = xmlReaderForStream(input, , false);
   if (!reader)
 return;
 
diff --git a/src/lib/VSDXTheme.cpp b/src/lib/VSDXTheme.cpp
index f2c5660..59044b5 100644
--- a/src/lib/VSDXTheme.cpp
+++ b/src/lib/VSDXTheme.cpp
@@ -83,9 +83,7 @@ bool libvisio::VSDXTheme::parse(librevenge::RVNGInputStream 
*input)
   if (!input)
 return false;
 
-  const shared_ptr reader(
-xmlReaderForStream(input, nullptr, nullptr, 
XML_PARSE_NOBLANKS|XML_PARSE_NONET),
-xmlFreeTextReader);
+  auto reader = xmlReaderForStream(input, nullptr, false);
   if (!reader)
 return false;
 
diff --git a/src/lib/VisioDocument.cpp b/src/lib/VisioDocument.cpp
index 5b76be1..7541fd7 100644
--- a/src/lib/VisioDocument.cpp
+++ b/src/lib/VisioDocument.cpp
@@ -163,9 +163,7 @@ catch (...)
 static bool isXmlVisioDocument(librevenge::RVNGInputStream *input) try
 {
   input->seek(0, librevenge::RVNG_SEEK_SET);
-  const std::shared_ptr reader(
-libvisio::xmlReaderForStream(input, nullptr, nullptr, 
XML_PARSE_NOBLANKS|XML_PARSE_NONET|XML_PARSE_RECOVER),
-xmlFreeTextReader);
+  auto reader = libvisio::xmlReaderForStream(input);
   if (!reader)
 return false;
   int ret = xmlTextReaderRead(reader.get());
diff --git a/src/lib/libvisio_xml.cpp b/src/lib/libvisio_xml.cpp
index df0c5f9..d92e7c4 100644
--- a/src/lib/libvisio_xml.cpp
+++ b/src/lib/libvisio_xml.cpp
@@ -96,11 +96,19 @@ void XMLErrorWatcher::setError()
   m_error = true;
 }
 
-xmlTextReaderPtr xmlReaderForStream(librevenge::RVNGInputStream *input, const 
char *URL, const char *encoding, int options, XMLErrorWatcher *const watcher)
+std::unique_ptr
+xmlReaderForStream(librevenge::RVNGInputStream *input, XMLErrorWatcher *const 
watcher, bool recover)
 {
-  xmlTextReaderPtr reader = xmlReaderForIO(vsdxInputReadFunc, 
vsdxInputCloseFunc, (void *)input, URL, encoding, options);
+  int options = XML_PARSE_NOBLANKS | XML_PARSE_NONET;
+  if (recover)
+options |= XML_PARSE_RECOVER;
+  std::unique_ptr reader
+  {
+xmlReaderForIO(vsdxInputReadFunc, vsdxInputCloseFunc, (void *)input, 
nullptr, nullptr, options),
+xmlFreeTextReader
+  };
   if (reader)
-xmlTextReaderSetErrorHandler(reader, vsdxReaderErrorFunc, watcher);
+

[Libreoffice-commits] libvisio.git: src/lib

2019-08-07 Thread Libreoffice Gerrit user
 src/lib/VDXParser.cpp |2 +-
 src/lib/VSDXMLHelper.cpp  |2 +-
 src/lib/VSDXMetaData.cpp  |2 +-
 src/lib/VSDXParser.cpp|2 +-
 src/lib/VSDXTheme.cpp |2 +-
 src/lib/VisioDocument.cpp |2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)

New commits:
commit b480f8f038e2bc6556023b08d7ad4c617a11ed94
Author: Caolán McNamara 
AuthorDate: Thu Aug 1 10:04:24 2019 +0100
Commit: David Tardon 
CommitDate: Wed Aug 7 21:39:32 2019 +0200

drop XML_PARSE_NOENT and default to not expanding entities

Change-Id: I3c3f143b97df19227e274a1591471faa3dd3ed5f
Reviewed-on: https://gerrit.libreoffice.org/76779
Reviewed-by: David Tardon 
Tested-by: David Tardon 

diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp
index c305ab8..aecdf20 100644
--- a/src/lib/VDXParser.cpp
+++ b/src/lib/VDXParser.cpp
@@ -76,7 +76,7 @@ bool 
libvisio::VDXParser::processXmlDocument(librevenge::RVNGInputStream *input)
 return false;
 
   const std::shared_ptr reader(
-xmlReaderForStream(input, nullptr, nullptr, 
XML_PARSE_NOBLANKS|XML_PARSE_NOENT|XML_PARSE_NONET|XML_PARSE_RECOVER),
+xmlReaderForStream(input, nullptr, nullptr, 
XML_PARSE_NOBLANKS|XML_PARSE_NONET|XML_PARSE_RECOVER),
 xmlFreeTextReader);
   if (!reader)
 return false;
diff --git a/src/lib/VSDXMLHelper.cpp b/src/lib/VSDXMLHelper.cpp
index 6f483b8..aa6a595 100644
--- a/src/lib/VSDXMLHelper.cpp
+++ b/src/lib/VSDXMLHelper.cpp
@@ -92,7 +92,7 @@ 
libvisio::VSDXRelationships::VSDXRelationships(librevenge::RVNGInputStream *inpu
   if (input)
   {
 const std::shared_ptr reader(
-  xmlReaderForStream(input, nullptr, nullptr, 
XML_PARSE_NOBLANKS|XML_PARSE_NOENT|XML_PARSE_NONET|XML_PARSE_RECOVER),
+  xmlReaderForStream(input, nullptr, nullptr, 
XML_PARSE_NOBLANKS|XML_PARSE_NONET|XML_PARSE_RECOVER),
   xmlFreeTextReader);
 if (reader)
 {
diff --git a/src/lib/VSDXMetaData.cpp b/src/lib/VSDXMetaData.cpp
index 9b3d3cf..33a6679 100644
--- a/src/lib/VSDXMetaData.cpp
+++ b/src/lib/VSDXMetaData.cpp
@@ -121,7 +121,7 @@ bool 
libvisio::VSDXMetaData::parse(librevenge::RVNGInputStream *input)
   XMLErrorWatcher watcher;
 
   const std::shared_ptr reader(
-xmlReaderForStream(input, nullptr, nullptr, 
XML_PARSE_NOBLANKS|XML_PARSE_NOENT|XML_PARSE_NONET, ),
+xmlReaderForStream(input, nullptr, nullptr, 
XML_PARSE_NOBLANKS|XML_PARSE_NONET, ),
 xmlFreeTextReader);
   if (!reader)
 return false;
diff --git a/src/lib/VSDXParser.cpp b/src/lib/VSDXParser.cpp
index 1bb46cf..a7f40db 100644
--- a/src/lib/VSDXParser.cpp
+++ b/src/lib/VSDXParser.cpp
@@ -305,7 +305,7 @@ void 
libvisio::VSDXParser::processXmlDocument(librevenge::RVNGInputStream *input
   XMLErrorWatcher watcher;
 
   const std::shared_ptr reader(
-xmlReaderForStream(input, nullptr, nullptr, 
XML_PARSE_NOBLANKS|XML_PARSE_NOENT|XML_PARSE_NONET, ),
+xmlReaderForStream(input, nullptr, nullptr, 
XML_PARSE_NOBLANKS|XML_PARSE_NONET, ),
 xmlFreeTextReader);
   if (!reader)
 return;
diff --git a/src/lib/VSDXTheme.cpp b/src/lib/VSDXTheme.cpp
index 8db16e9..f2c5660 100644
--- a/src/lib/VSDXTheme.cpp
+++ b/src/lib/VSDXTheme.cpp
@@ -84,7 +84,7 @@ bool libvisio::VSDXTheme::parse(librevenge::RVNGInputStream 
*input)
 return false;
 
   const shared_ptr reader(
-xmlReaderForStream(input, nullptr, nullptr, 
XML_PARSE_NOBLANKS|XML_PARSE_NOENT|XML_PARSE_NONET),
+xmlReaderForStream(input, nullptr, nullptr, 
XML_PARSE_NOBLANKS|XML_PARSE_NONET),
 xmlFreeTextReader);
   if (!reader)
 return false;
diff --git a/src/lib/VisioDocument.cpp b/src/lib/VisioDocument.cpp
index accb5d1..5b76be1 100644
--- a/src/lib/VisioDocument.cpp
+++ b/src/lib/VisioDocument.cpp
@@ -164,7 +164,7 @@ static bool isXmlVisioDocument(librevenge::RVNGInputStream 
*input) try
 {
   input->seek(0, librevenge::RVNG_SEEK_SET);
   const std::shared_ptr reader(
-libvisio::xmlReaderForStream(input, nullptr, nullptr, 
XML_PARSE_NOBLANKS|XML_PARSE_NOENT|XML_PARSE_NONET|XML_PARSE_RECOVER),
+libvisio::xmlReaderForStream(input, nullptr, nullptr, 
XML_PARSE_NOBLANKS|XML_PARSE_NONET|XML_PARSE_RECOVER),
 xmlFreeTextReader);
   if (!reader)
 return false;
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

[Libreoffice-commits] libvisio.git: src/lib src/test

2019-07-23 Thread Libreoffice Gerrit user
 src/lib/VSDContentCollector.cpp |  126 +++-
 src/test/data/Visio11FormatLine.vsd |binary
 src/test/importtest.cpp |   80 +++---
 3 files changed, 164 insertions(+), 42 deletions(-)

New commits:
commit d6205a23ff36b1ab1f876cebfd41ad1acf19aac5
Author: Bartosz Kosiorek 
AuthorDate: Sat Jul 13 07:32:03 2019 +0200
Commit: Bartosz Kosiorek 
CommitDate: Wed Jul 24 02:17:08 2019 +0200

tdf#126402 Fix line formating issue

With this commit, I have implemented more Visio arrow styles
and I have added support importing Center Line Ending.

As a result many import issues of Visio diagrams was resolved.

Change-Id: I5284e3e53b9d5174ab49e841c66be58e06060760
Reviewed-on: https://gerrit.libreoffice.org/75635
Tested-by: Bartosz Kosiorek 
Reviewed-by: Bartosz Kosiorek 

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 37881bb..dab4782 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -157,15 +157,17 @@ const char 
*libvisio::VSDContentCollector::_linePropertiesMarkerViewbox(unsigned
 return "0 0 20 10";
   case 8:
 return "0 0 20 18";
-  case 3:
+  case 3: // Short line Arrow
+return "0 0 3000 3000";
   case 4:
   case 5:
   case 6:
-  case 11:
   case 16:
   case 17:
   case 18:
 return "0 0 20 20";
+  case 11: // Centered square filled
+return "0 0 10 10";
   case 12:
   case 13:
   case 14:
@@ -173,8 +175,8 @@ const char 
*libvisio::VSDContentCollector::_linePropertiesMarkerViewbox(unsigned
   case 22:
   case 39:
 return "0 0 20 40";
-  case 21:
-return "0 0 30 30";
+  case 21: // Centered square unfilled
+return "0 0 300 300";
   case 10:
 return "0 0 1131 1131";
   default:
@@ -184,50 +186,108 @@ const char 
*libvisio::VSDContentCollector::_linePropertiesMarkerViewbox(unsigned
 
 const char *libvisio::VSDContentCollector::_linePropertiesMarkerPath(unsigned 
marker)
 {
+  // Information how to draw path
+  // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d
+
+  /*
+  SVG defines 6 types of path commands, for a total of 20 commands:
+
+  MoveTo: M, m
+  LineTo: L, l, H, h, V, v
+  Cubic Bézier Curve: C, c, S, s
+  Quadratic Bézier Curve: Q, q, T, t
+  Elliptical Arc Curve: A, a
+  ClosePath: Z, z
+  */
   switch (marker)
   {
-  case 1:
-return "m10 -4l-14 14l4 4l10 -10l10 10l4 -4z";
-  case 2:
+  case 1: // TODO
+return "M1500 0l1500 2789v211h-114l-1286-2392v2392h-200v-2392l-1286 
2392h-114v-211z";
+  case 2: //
 return "m10 0-10 10h20z";
-  case 3:
-return "m10 -8l-14 28l6 3l8 -16l8 16l6 -3z";
-  case 4:
+  case 3: // Short line arrow, Copied from LO
+return "M1500 0l1500 2789v211h-114l-1286-2392v2392h-200v-2392l-1286 
2392h-114v-211z";
+  case 4: // Filled equilateral triangle
 return "m10 0-10 20h20z";
-  case 5:
+  case 5: // Arrow concave
 return "m10 0-10 20q10,-5 20,0z";
-  case 6:
+  case 6: //
 return "m10 0-10 20q10,5 20,0z";
-  case 8:
+  case 7: // TODO
 return "m10 0q-2.6,13.4 -10,18q10,-5 20,0q-7.4,-4.6 -10,-18";
-  case 9:
-return "m-2 -8l4 -4l20 20l-4 4z";
-  case 10: // Copied from what LO exports when using the "circle" marker
-return "m462 1118-102-29-102-51-93-72-72-93-51-102-29-102-13-105 13-102 
29-106 51-102 72-89 93-72 102-50 102-34 106-9 101 9 106 34 98 50 93 72 72 89 51 
102 29 106 13 102-13 105-29 102-51 102-72 93-93 72-98 51-106 29-101 13z";
-  case 11:
-return "m0 0v10h10v-10z";
-  case 12:
-return "m10 -12l-14 42l9 3l5 -15l5 15l9 -3z";
+  case 8: // filled arrow
+return "m10 0q-2.6,13.4 -10,18q10,-5 20,0q-7.4,-4.6 -10,-18";
+  case 9:  // Centered line
+return "M1 2l1 -1l20 20l-1 1zM11 11v12h1v-10z";//
+  case 10: // Centered Filled circle
+  case 42: // Filled circle, Copied from LO
+return "m462 1118-102-29-102-51-93-72-72-93-51-102-29-102-13-105 13-102 
29-106 51-102 72-89 93-72 102-50 102-34 106-9 101 9 106 34 98 50 93 72 72 89 51 
102 29 106 13 102-13 105-29 102-51 102-72 93-93 72-98 51-106 29-101 13z";//
+  case 11: // Centered square filled, Copied from LO
+return "M0 0h10v10h-10z";
+  case 12: // TODO
+return "M1500 0l1500 2789v211h-114l-1286-2392v2392h-200v-2392l-1286 
2392h-114v-211z";
   case 13:
 return "m10 0-10 30h20z";
   case 14:
 return "m10 0-10 30h20z m0 12l-5 15h10z";
   case 15:
-return "m10 0-10 10h20z m0 3l-5 5h10z";
+return "m10 0-10 10h20z m0 1l-8 8h16z";
   case 16:
 return "m10 0-10 20h20z m0 7l-5 10h10z";
   case 17:
 return "m10 0-10 20q10,-5 20,0z m0 7l-4 8q4,-2 8,0z";
   case 18:
 return "m10 0-10 20q10,5 20,0z m0 7l-5 10q5,2 10,0z";
-  case 21:
-return "m0 0v30h30v-30z m10 10v10h10v-10z";
-  case 22:
-return "m10 0-10 20l10 20l10 -20z m0 8l-6 12l6 12l6 -12z";
-  case 39:
-return "m10 0-10 20h20z m0 20-10 20h20z";
-  default:
-return "m10 0-10 30h20z";
+  case 19: // TODO
+return "m10 0q-2.6,13.4 

[Libreoffice-commits] libvisio.git: src/lib src/test

2019-07-11 Thread Libreoffice Gerrit user
 src/lib/VSD5Parser.cpp  |2 
 src/lib/VSD6Parser.cpp  |8 
 src/lib/VSDCollector.h  |2 
 src/lib/VSDContentCollector.cpp |6 
 src/lib/VSDContentCollector.h   |2 
 src/lib/VSDDocumentStructure.h  |   98 +--
 src/lib/VSDFieldList.cpp|  211 +++-
 src/lib/VSDFieldList.h  |   14 -
 src/lib/VSDParser.cpp   |8 
 src/lib/VSDStylesCollector.cpp  |2 
 src/lib/VSDStylesCollector.h|2 
 src/test/data/Visio11TextFieldsWithCurrency.vsd |binary
 src/test/data/Visio11TextFieldsWithUnits.vsd|binary
 src/test/data/Visio5TextFieldsWithUnits.vsd |binary
 src/test/data/Visio6TextFieldsWithUnits.vsd |binary
 src/test/importtest.cpp |   89 +-
 16 files changed, 294 insertions(+), 150 deletions(-)

New commits:
commit 2ae597695c8ad41dcbdba8405157053a44564abb
Author: Bartosz Kosiorek 
AuthorDate: Thu Jul 11 12:44:25 2019 +0200
Commit: Bartosz Kosiorek 
CommitDate: Fri Jul 12 00:12:30 2019 +0200

tdf#126292 Fix unit conversion

With this commit I have added unit support.

In .VSD format, all length values (points, kilometers, feets etc.) are 
stored in Inches,
all Elapsed time are stored in Days,
all angles are stored in radians.

It means that value should be converted from Inch/ Days or radians,
even if the unit is not displayed.

For example:
 - centimeter values should multipled by 2.54
 - elapsed hour values should be multiplied by 24
 - percent values should be multipled by 100

Change-Id: I88711a1bf1bfd6078dc6948194449bcc91f34cce
Reviewed-on: https://gerrit.libreoffice.org/75374
Reviewed-by: Bartosz Kosiorek 
Tested-by: Bartosz Kosiorek 

diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index c918510..e702f89 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -464,7 +464,7 @@ void 
libvisio::VSD5Parser::readTextField(librevenge::RVNGInputStream *input)
   else
   {
 double numericValue = readDouble(input);
-m_shape.m_fields.addNumericField(m_header.id, m_header.level, 
VSD_FIELD_FORMAT_Unknown, UNIT_NoCast, numericValue, 0x);
+m_shape.m_fields.addNumericField(m_header.id, m_header.level, 
VSD_FIELD_FORMAT_Unknown, CELL_TYPE_NoCast, numericValue, 0x);
   }
 }
 
diff --git a/src/lib/VSD6Parser.cpp b/src/lib/VSD6Parser.cpp
index 012528e..9f915d5 100644
--- a/src/lib/VSD6Parser.cpp
+++ b/src/lib/VSD6Parser.cpp
@@ -336,8 +336,8 @@ void 
libvisio::VSD6Parser::readTextField(librevenge::RVNGInputStream *input)
 {
   unsigned long initialPosition = input->tell();
   input->seek(7, librevenge::RVNG_SEEK_CUR);
-  unsigned char unit = readU8(input);
-  if (unit == UNIT_StringWithoutUnit)
+  unsigned char cellType = readU8(input);
+  if (cellType == CELL_TYPE_StringWithoutUnit)
   {
 int nameId = readS32(input);
 input->seek(6, librevenge::RVNG_SEEK_CUR);
@@ -391,13 +391,13 @@ void 
libvisio::VSD6Parser::readTextField(librevenge::RVNGInputStream *input)
 
 if (blockIdx != 2)
 {
-  if (unit == UNIT_Date)
+  if (cellType == CELL_TYPE_Date)
 formatNumber = VSD_FIELD_FORMAT_MsoDateShort;
   else
 formatNumber = VSD_FIELD_FORMAT_Unknown;
 }
 
-m_shape.m_fields.addNumericField(m_header.id, m_header.level, 
formatNumber, unit, numericValue, formatStringId);
+m_shape.m_fields.addNumericField(m_header.id, m_header.level, 
formatNumber, cellType, numericValue, formatStringId);
   }
 }
 
diff --git a/src/lib/VSDCollector.h b/src/lib/VSDCollector.h
index 11fd25e..7b06712 100644
--- a/src/lib/VSDCollector.h
+++ b/src/lib/VSDCollector.h
@@ -150,7 +150,7 @@ public:
   // Field list
   virtual void collectFieldList(unsigned id, unsigned level) = 0;
   virtual void collectTextField(unsigned id, unsigned level, int nameId, int 
formatStringId) = 0;
-  virtual void collectNumericField(unsigned id, unsigned level, unsigned short 
format, unsigned short unit, double number, int formatStringId) = 0;
+  virtual void collectNumericField(unsigned id, unsigned level, unsigned short 
format, unsigned short cellType, double number, int formatStringId) = 0;
 
   // Metadata
   virtual void collectMetaData(const librevenge::RVNGPropertyList ) = 
0;
diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index e808b21..37881bb 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -3436,7 +3436,7 @@ void 
libvisio::VSDContentCollector::collectTextField(unsigned id, unsigned level
   }
 }
 
-void libvisio::VSDContentCollector::collectNumericField(unsigned id, unsigned 
level, unsigned short format, unsigned short unit, double number, int 
formatStringId)
+void 

[Libreoffice-commits] libvisio.git: src/lib src/test

2019-07-09 Thread Libreoffice Gerrit user
 src/lib/VSD5Parser.cpp   |2 
 src/lib/VSD6Parser.cpp   |6 -
 src/lib/VSDCollector.h   |2 
 src/lib/VSDContentCollector.cpp  |5 -
 src/lib/VSDContentCollector.h|2 
 src/lib/VSDDocumentStructure.h   |   51 +
 src/lib/VSDFieldList.cpp |  104 ---
 src/lib/VSDFieldList.h   |9 +-
 src/lib/VSDParser.cpp|6 -
 src/lib/VSDStylesCollector.cpp   |2 
 src/lib/VSDStylesCollector.h |2 
 src/test/data/Visio11TextFieldsWithUnits.vsd |binary
 src/test/data/Visio6TextFieldsWithUnits.vsd  |binary
 src/test/importtest.cpp  |   11 ++
 14 files changed, 176 insertions(+), 26 deletions(-)

New commits:
commit 9bf6a30786fb75cb725fe038d77ef03e1ebc4bc0
Author: Bartosz Kosiorek 
AuthorDate: Tue Jul 9 22:54:57 2019 +0200
Commit: Bartosz Kosiorek 
CommitDate: Tue Jul 9 22:54:57 2019 +0200

tdf#126292 Fix unit conversion

Change-Id: I88711a1bf1bfd6078dc6948194449bcc91f34cce

diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index f16160e..c918510 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -464,7 +464,7 @@ void 
libvisio::VSD5Parser::readTextField(librevenge::RVNGInputStream *input)
   else
   {
 double numericValue = readDouble(input);
-m_shape.m_fields.addNumericField(m_header.id, m_header.level, 
VSD_FIELD_FORMAT_Unknown, numericValue, 0x);
+m_shape.m_fields.addNumericField(m_header.id, m_header.level, 
VSD_FIELD_FORMAT_Unknown, UNIT_NoCast, numericValue, 0x);
   }
 }
 
diff --git a/src/lib/VSD6Parser.cpp b/src/lib/VSD6Parser.cpp
index d2dd941..012528e 100644
--- a/src/lib/VSD6Parser.cpp
+++ b/src/lib/VSD6Parser.cpp
@@ -337,7 +337,7 @@ void 
libvisio::VSD6Parser::readTextField(librevenge::RVNGInputStream *input)
   unsigned long initialPosition = input->tell();
   input->seek(7, librevenge::RVNG_SEEK_CUR);
   unsigned char unit = readU8(input);
-  if (unit == 0xe8)
+  if (unit == UNIT_StringWithoutUnit)
   {
 int nameId = readS32(input);
 input->seek(6, librevenge::RVNG_SEEK_CUR);
@@ -391,13 +391,13 @@ void 
libvisio::VSD6Parser::readTextField(librevenge::RVNGInputStream *input)
 
 if (blockIdx != 2)
 {
-  if (unit == 0x28)
+  if (unit == UNIT_Date)
 formatNumber = VSD_FIELD_FORMAT_MsoDateShort;
   else
 formatNumber = VSD_FIELD_FORMAT_Unknown;
 }
 
-m_shape.m_fields.addNumericField(m_header.id, m_header.level, 
formatNumber, numericValue, formatStringId);
+m_shape.m_fields.addNumericField(m_header.id, m_header.level, 
formatNumber, unit, numericValue, formatStringId);
   }
 }
 
diff --git a/src/lib/VSDCollector.h b/src/lib/VSDCollector.h
index 7286d1c..11fd25e 100644
--- a/src/lib/VSDCollector.h
+++ b/src/lib/VSDCollector.h
@@ -150,7 +150,7 @@ public:
   // Field list
   virtual void collectFieldList(unsigned id, unsigned level) = 0;
   virtual void collectTextField(unsigned id, unsigned level, int nameId, int 
formatStringId) = 0;
-  virtual void collectNumericField(unsigned id, unsigned level, unsigned short 
format, double number, int formatStringId) = 0;
+  virtual void collectNumericField(unsigned id, unsigned level, unsigned short 
format, unsigned short unit, double number, int formatStringId) = 0;
 
   // Metadata
   virtual void collectMetaData(const librevenge::RVNGPropertyList ) = 
0;
diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index e15b4d9..e808b21 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -3436,7 +3436,7 @@ void 
libvisio::VSDContentCollector::collectTextField(unsigned id, unsigned level
   }
 }
 
-void libvisio::VSDContentCollector::collectNumericField(unsigned id, unsigned 
level, unsigned short format, double number, int formatStringId)
+void libvisio::VSDContentCollector::collectNumericField(unsigned id, unsigned 
level, unsigned short format, unsigned short unit, double number, int 
formatStringId)
 {
   _handleLevelChange(level);
   VSDFieldListElement *pElement = m_stencilFields.getElement(m_fields.size());
@@ -3446,6 +3446,7 @@ void 
libvisio::VSDContentCollector::collectNumericField(unsigned id, unsigned le
 if (element)
 {
   element->setValue(number);
+  element->setUnit(unit);
   if (format == VSD_FIELD_FORMAT_Unknown)
   {
 std::map::const_iterator iter = 
m_names.find(formatStringId);
@@ -3460,7 +3461,7 @@ void 
libvisio::VSDContentCollector::collectNumericField(unsigned id, unsigned le
   }
   else
   {
-VSDNumericField tmpField(id, level, format, number, formatStringId);
+VSDNumericField tmpField(id, level, format, unit, number, formatStringId);
 m_fields.push_back(tmpField.getString(m_names));
   }
 }
diff --git a/src/lib/VSDContentCollector.h 

[Libreoffice-commits] libvisio.git: src/lib

2019-07-09 Thread Libreoffice Gerrit user
 src/lib/VSD5Parser.cpp  |2 +-
 src/lib/VSD6Parser.cpp  |   10 +-
 src/lib/VSDContentCollector.cpp |4 ++--
 src/lib/VSDParser.cpp   |   10 +-
 4 files changed, 13 insertions(+), 13 deletions(-)

New commits:
commit 187e3c83fe021267b913068432d1387ea140944a
Author: Bartosz Kosiorek 
AuthorDate: Mon Jul 8 22:06:47 2019 +0200
Commit: Bartosz Kosiorek 
CommitDate: Tue Jul 9 21:44:44 2019 +0200

Replace magic numbers with defines

Change-Id: I76211f335341c4ebc40c38766dc04969d3b420df
Reviewed-on: https://gerrit.libreoffice.org/75245
Reviewed-by: Bartosz Kosiorek 
Tested-by: Bartosz Kosiorek 

diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index cfc0d94..f16160e 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -464,7 +464,7 @@ void 
libvisio::VSD5Parser::readTextField(librevenge::RVNGInputStream *input)
   else
   {
 double numericValue = readDouble(input);
-m_shape.m_fields.addNumericField(m_header.id, m_header.level, 0x, 
numericValue, 0x);
+m_shape.m_fields.addNumericField(m_header.id, m_header.level, 
VSD_FIELD_FORMAT_Unknown, numericValue, 0x);
   }
 }
 
diff --git a/src/lib/VSD6Parser.cpp b/src/lib/VSD6Parser.cpp
index a41016b..d2dd941 100644
--- a/src/lib/VSD6Parser.cpp
+++ b/src/lib/VSD6Parser.cpp
@@ -336,8 +336,8 @@ void 
libvisio::VSD6Parser::readTextField(librevenge::RVNGInputStream *input)
 {
   unsigned long initialPosition = input->tell();
   input->seek(7, librevenge::RVNG_SEEK_CUR);
-  unsigned char tmpCode = readU8(input);
-  if (tmpCode == 0xe8)
+  unsigned char unit = readU8(input);
+  if (unit == 0xe8)
   {
 int nameId = readS32(input);
 input->seek(6, librevenge::RVNG_SEEK_CUR);
@@ -391,10 +391,10 @@ void 
libvisio::VSD6Parser::readTextField(librevenge::RVNGInputStream *input)
 
 if (blockIdx != 2)
 {
-  if (tmpCode == 0x28)
-formatNumber = 200;
+  if (unit == 0x28)
+formatNumber = VSD_FIELD_FORMAT_MsoDateShort;
   else
-formatNumber = 0x;
+formatNumber = VSD_FIELD_FORMAT_Unknown;
 }
 
 m_shape.m_fields.addNumericField(m_header.id, m_header.level, 
formatNumber, numericValue, formatStringId);
diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 27b7195..e15b4d9 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -3446,13 +3446,13 @@ void 
libvisio::VSDContentCollector::collectNumericField(unsigned id, unsigned le
 if (element)
 {
   element->setValue(number);
-  if (format == 0x)
+  if (format == VSD_FIELD_FORMAT_Unknown)
   {
 std::map::const_iterator iter = 
m_names.find(formatStringId);
 if (iter != m_names.end())
   parseFormatId(iter->second.cstr(), format);
   }
-  if (format != 0x)
+  if (format != VSD_FIELD_FORMAT_Unknown)
 element->setFormat(format);
 
   m_fields.push_back(element->getString(m_names));
diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index 71b56ce..cc0bb96 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -2172,8 +2172,8 @@ void 
libvisio::VSDParser::readTextField(librevenge::RVNGInputStream *input)
 {
   unsigned long initialPosition = input->tell();
   input->seek(7, librevenge::RVNG_SEEK_CUR);
-  unsigned char tmpCode = readU8(input);
-  if (tmpCode == 0xe8)
+  unsigned char unit = readU8(input);
+  if (unit == 0xe8)
   {
 int nameId = readS32(input);
 input->seek(6, librevenge::RVNG_SEEK_CUR);
@@ -2227,10 +2227,10 @@ void 
libvisio::VSDParser::readTextField(librevenge::RVNGInputStream *input)
 
 if (blockIdx != 2)
 {
-  if (tmpCode == 0x28)
-formatNumber = 200;
+  if (unit == 0x28)
+formatNumber = VSD_FIELD_FORMAT_MsoDateShort;
   else
-formatNumber = 0x;
+formatNumber = VSD_FIELD_FORMAT_Unknown;
 }
 
 m_shape.m_fields.addNumericField(m_header.id, m_header.level, 
formatNumber, numericValue, formatStringId);
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

[Libreoffice-commits] libvisio.git: src/lib src/test

2019-07-08 Thread Libreoffice Gerrit user
 src/lib/VSDFieldList.cpp   |   68 ++---
 src/test/data/tdf76829-datetime-format.vsd |binary
 src/test/data/tdf76829-numeric-format.vsd  |binary
 src/test/importtest.cpp|   10 +++-
 4 files changed, 60 insertions(+), 18 deletions(-)

New commits:
commit f96f3ee3a44d6c7af28e1eb67c8da9d36012b113
Author: Bartosz Kosiorek 
AuthorDate: Thu Jul 4 09:42:40 2019 +0200
Commit: Miklos Vajna 
CommitDate: Mon Jul 8 09:28:24 2019 +0200

tdf#76829 tdf#98291 Visio: Fix number conversion to string

The method 'doubleToString' is copied from librevenge:

https://sourceforge.net/p/libwpd/librevenge/ci/master/tree/src/lib/RVNGProperty.cpp#l35

Method duplication allows to do not break ABI of librevenge.

Change-Id: Ie1bce018cf2e1fd38af07db4d19445d1bffe9005
Reviewed-on: https://gerrit.libreoffice.org/75070
Reviewed-by: Miklos Vajna 
Tested-by: Miklos Vajna 

diff --git a/src/lib/VSDFieldList.cpp b/src/lib/VSDFieldList.cpp
index 05482d0..f6fc62d 100644
--- a/src/lib/VSDFieldList.cpp
+++ b/src/lib/VSDFieldList.cpp
@@ -68,6 +68,33 @@ librevenge::RVNGString 
libvisio::VSDNumericField::datetimeToString(const char *f
   return result;
 }
 
+// This method is copied from:
+// 
https://sourceforge.net/p/libwpd/librevenge/ci/master/tree/src/lib/RVNGProperty.cpp#l35
+// to avoid ABI breakage. If upstream file was modified, please update method 
accordingly.
+static librevenge::RVNGString doubleToString(const double value, const char* 
format)
+{
+  librevenge::RVNGString tempString;
+  if (value < 0.0001 && value > -0.0001)
+tempString.sprintf(format, 0.0);
+  else
+tempString.sprintf(format, value);
+#ifndef __ANDROID__
+  std::string decimalPoint(localeconv()->decimal_point);
+#else
+  std::string decimalPoint(".");
+#endif
+  if ((decimalPoint.size() == 0) || (decimalPoint == "."))
+return tempString;
+  std::string stringValue(tempString.cstr());
+  if (!stringValue.empty())
+  {
+std::string::size_type pos;
+while ((pos = stringValue.find(decimalPoint)) != std::string::npos)
+  stringValue.replace(pos,decimalPoint.size(),".");
+  }
+  return librevenge::RVNGString(stringValue.c_str());
+}
+
 librevenge::RVNGString libvisio::VSDNumericField::getString(const 
std::map &)
 {
   if (m_format == VSD_FIELD_FORMAT_Unknown)
@@ -79,16 +106,7 @@ librevenge::RVNGString 
libvisio::VSDNumericField::getString(const std::map 
pProp{librevenge::RVNGPropertyFactory::newIntProp(m_number)};
-  return pProp ? pProp->getStr() : librevenge::RVNGString();
-}
-std::unique_ptr 
pProp{librevenge::RVNGPropertyFactory::newDoubleProp(m_number)};
-return pProp ? pProp->getStr() : librevenge::RVNGString();
+return doubleToString(m_number, "%.4g");
   }
   case VSD_FIELD_FORMAT_0PlNoUnits:
   case VSD_FIELD_FORMAT_0PlDefUnits:
@@ -98,12 +116,30 @@ librevenge::RVNGString 
libvisio::VSDNumericField::getString(const std::map 
pProp{librevenge::RVNGPropertyFactory::newIntProp(m_number)};
 return pProp ? pProp->getStr() : librevenge::RVNGString();
   }
-  //TODO VSD_FIELD_FORMAT_1PlNoUnits  4 Format string: 0.0
-  //TODO VSD_FIELD_FORMAT_1PlDefUnits  5 Format string: 0.0 u
-  //TODO VSD_FIELD_FORMAT_2PlNoUnits  6 Format string: 0.00
-  //TODO VSD_FIELD_FORMAT_2PlDefUnits  7 Format string: 0.00 u
-  //TODO VSD_FIELD_FORMAT_3PlNoUnits  8 Format string: 0.000
-  //TODO VSD_FIELD_FORMAT_3PlDefUnits  9 Format string: 0.000 u
+
+  case VSD_FIELD_FORMAT_1PlNoUnits:
+  case VSD_FIELD_FORMAT_1PlDefUnits:
+  {
+// 4 Format string: 0.0 Example: 30060.9
+// 5 Format string: 0.0 u Example: 30060.9 cm
+return doubleToString(m_number, "%.1f");
+  }
+
+  case VSD_FIELD_FORMAT_2PlNoUnits:
+  case VSD_FIELD_FORMAT_2PlDefUnits:
+  {
+// 6 Format string: 0.00 Example: 30061.92
+// 7 Format string: 0.00 u Example: 30061.92 cm
+return doubleToString(m_number, "%.2f");
+  }
+
+  case VSD_FIELD_FORMAT_3PlNoUnits:
+  case VSD_FIELD_FORMAT_3PlDefUnits:
+  {
+// 8 Format string: 0.000 Example: 30061.916
+// 9 Format string: 0.000 u Example: 30061.916 cm
+return doubleToString(m_number, "%.3f");
+  }
   //TODO VSD_FIELD_FORMAT_FeetAndInches  10 Format string: <,FEET/INCH>0.000 u
   //TODO VSD_FIELD_FORMAT_Radians  11 Format string: <,rad>0. u
   //TODO VSD_FIELD_FORMAT_Degrees  12 Format string: <,deg>0.# u
diff --git a/src/test/data/tdf76829-datetime-format.vsd 
b/src/test/data/tdf76829-datetime-format.vsd
index c9237fe..f6eed7c 100644
Binary files a/src/test/data/tdf76829-datetime-format.vsd and 
b/src/test/data/tdf76829-datetime-format.vsd differ
diff --git a/src/test/data/tdf76829-numeric-format.vsd 
b/src/test/data/tdf76829-numeric-format.vsd
index a1c24cc..db9596d 100644
Binary files a/src/test/data/tdf76829-numeric-format.vsd and 
b/src/test/data/tdf76829-numeric-format.vsd differ
diff --git a/src/test/importtest.cpp b/src/test/importtest.cpp
index 13b665f..100338d 100644
--- 

[Libreoffice-commits] libvisio.git: src/lib src/test

2019-07-03 Thread Libreoffice Gerrit user
 src/lib/VSDDocumentStructure.h |4 
 src/lib/VSDFieldList.cpp   |  169 -
 src/test/data/tdf76829-datetime-format.vsd |binary
 src/test/data/tdf76829-numeric-format.vsd  |binary
 src/test/importtest.cpp|   20 ++-
 5 files changed, 160 insertions(+), 33 deletions(-)

New commits:
commit d410b9bd6c763ec0037031b6b5913f754264beca
Author: Bartosz Kosiorek 
AuthorDate: Wed Jun 26 16:19:18 2019 +0200
Commit: Miklos Vajna 
CommitDate: Wed Jul 3 16:40:21 2019 +0200

tdf#76829 tdf#98291 Visio: Fix date and time conversion to string

The documentation which implementation was based on was
taken from:

https://docs.microsoft.com/en-us/openspecs/sharepoint_protocols/ms-vsdx/50c23601-c943-4ff2-b4a1-02445f52daf0

Change-Id: I8a3544d198d0376bdc31b158c073f5340dff7237
Reviewed-on: https://gerrit.libreoffice.org/74743
Tested-by: Miklos Vajna 
Reviewed-by: Miklos Vajna 

diff --git a/src/lib/VSDDocumentStructure.h b/src/lib/VSDDocumentStructure.h
index 1f022b7..4fd8b61 100644
--- a/src/lib/VSDDocumentStructure.h
+++ b/src/lib/VSDDocumentStructure.h
@@ -152,8 +152,8 @@
 #define VSD_FIELD_FORMAT_DateLong  21
 #define VSD_FIELD_FORMAT_DateMDYY  22
 #define VSD_FIELD_FORMAT_DateMMDDYY  23
-#define VSD_FIELD_FORMAT_DateMmmD  24
-#define VSD_FIELD_FORMAT_DateMmmmD  25
+#define VSD_FIELD_FORMAT_DateMMMD  24
+#define VSD_FIELD_FORMAT_DateD  25
 #define VSD_FIELD_FORMAT_DateDMYY  26
 #define VSD_FIELD_FORMAT_DateDDMMYY  27
 #define VSD_FIELD_FORMAT_DateDMMM  28
diff --git a/src/lib/VSDFieldList.cpp b/src/lib/VSDFieldList.cpp
index c4c16ef..05482d0 100644
--- a/src/lib/VSDFieldList.cpp
+++ b/src/lib/VSDFieldList.cpp
@@ -10,6 +10,7 @@
 #include "VSDFieldList.h"
 
 #include 
+#include 
 #include "VSDCollector.h"
 #include "libvisio_utils.h"
 
@@ -25,6 +26,9 @@ libvisio::VSDFieldListElement *libvisio::VSDTextField::clone()
 
 librevenge::RVNGString libvisio::VSDTextField::getString(const 
std::map )
 {
+  //TODO VSD_FIELD_FORMAT_StrNormal  37
+  //TODO VSD_FIELD_FORMAT_StrLower  38
+  //TODO VSD_FIELD_FORMAT_StrUpper  39
   auto iter = strVec.find(m_nameId);
   if (iter != strVec.end())
 return iter->second;
@@ -66,18 +70,111 @@ librevenge::RVNGString 
libvisio::VSDNumericField::datetimeToString(const char *f
 
 librevenge::RVNGString libvisio::VSDNumericField::getString(const 
std::map &)
 {
-  if (m_format == 0x)
+  if (m_format == VSD_FIELD_FORMAT_Unknown)
 return librevenge::RVNGString();
   switch (m_format)
   {
+  case VSD_FIELD_FORMAT_NumGenNoUnits:
+  case VSD_FIELD_FORMAT_NumGenDefUnits:
+  {
+// 0 Format string: 0. Example: 30060.9167
+// 1 Format string: 0. u Example: 30060.9167 cm
+//TODO We need to implement number of digits support after decimal 
separator in librevenge
+double intpart;
+// If there is no decimal value, then treat number as Integer
+if (std::modf(m_number, ) == 0.0)
+{
+  std::unique_ptr 
pProp{librevenge::RVNGPropertyFactory::newIntProp(m_number)};
+  return pProp ? pProp->getStr() : librevenge::RVNGString();
+}
+std::unique_ptr 
pProp{librevenge::RVNGPropertyFactory::newDoubleProp(m_number)};
+return pProp ? pProp->getStr() : librevenge::RVNGString();
+  }
+  case VSD_FIELD_FORMAT_0PlNoUnits:
+  case VSD_FIELD_FORMAT_0PlDefUnits:
+  {
+// 2 Format string: 0 Example: 30061
+// 3 Format string: 0 u Example: 30061 cm
+std::unique_ptr 
pProp{librevenge::RVNGPropertyFactory::newIntProp(m_number)};
+return pProp ? pProp->getStr() : librevenge::RVNGString();
+  }
+  //TODO VSD_FIELD_FORMAT_1PlNoUnits  4 Format string: 0.0
+  //TODO VSD_FIELD_FORMAT_1PlDefUnits  5 Format string: 0.0 u
+  //TODO VSD_FIELD_FORMAT_2PlNoUnits  6 Format string: 0.00
+  //TODO VSD_FIELD_FORMAT_2PlDefUnits  7 Format string: 0.00 u
+  //TODO VSD_FIELD_FORMAT_3PlNoUnits  8 Format string: 0.000
+  //TODO VSD_FIELD_FORMAT_3PlDefUnits  9 Format string: 0.000 u
+  //TODO VSD_FIELD_FORMAT_FeetAndInches  10 Format string: <,FEET/INCH>0.000 u
+  //TODO VSD_FIELD_FORMAT_Radians  11 Format string: <,rad>0. u
+  //TODO VSD_FIELD_FORMAT_Degrees  12 Format string: <,deg>0.# u
+  //TODO VSD_FIELD_FORMAT_FeetAndInches1Pl  13 Format string: <,FEET/INCH># 
#/# u
+  //TODO VSD_FIELD_FORMAT_FeetAndInches2Pl  14 Format string: <,FEET/INCH># 
#/## u
+  //TODO VSD_FIELD_FORMAT_Fraction1PlNoUnits  15 Format string: 0 #/#
+  //TODO VSD_FIELD_FORMAT_Fraction1PlDefUnits  16 Format string: 0 #/# u
+  //TODO VSD_FIELD_FORMAT_Fraction2PlNoUnits  17 Format string: 0 #/##
+  //TODO VSD_FIELD_FORMAT_Fraction2PlDefUnits  18 Format string: 0 #/## u
+  case VSD_FIELD_FORMAT_DateShort:
+// 20 Format string: d Example: Thu
+return datetimeToString("%a", m_number);
+  case VSD_FIELD_FORMAT_DateLong:
+// 21 Format string: dd Example: Thursday
+return datetimeToString("%A", m_number);
   case 

[Libreoffice-commits] libvisio.git: src/lib

2019-01-31 Thread Libreoffice Gerrit user
 src/lib/VSDCharacterList.cpp|2 +-
 src/lib/VSDContentCollector.cpp |   10 +-
 src/lib/VSDParagraphList.cpp|2 +-
 src/lib/VSDParser.cpp   |   14 +++---
 4 files changed, 14 insertions(+), 14 deletions(-)

New commits:
commit c5a43cf0bb3d002cc4ff396ffbf85ebe9dd0da29
Author: Miklos Vajna 
AuthorDate: Thu Jan 31 10:16:48 2019 +0100
Commit: Miklos Vajna 
CommitDate: Thu Jan 31 10:16:49 2019 +0100

Fix too small loop variables

These loop variables had narrower type than the iteration's upper bound.

Change-Id: Ie289e2fd5b11e3b654fc2e214e8f03dadee6fc65

diff --git a/src/lib/VSDCharacterList.cpp b/src/lib/VSDCharacterList.cpp
index 17935fc..b739f24 100644
--- a/src/lib/VSDCharacterList.cpp
+++ b/src/lib/VSDCharacterList.cpp
@@ -171,7 +171,7 @@ void libvisio::VSDCharacterList::handle(VSDCollector 
*collector) const
 return;
   if (!m_elementsOrder.empty())
   {
-for (unsigned i = 0; i < m_elementsOrder.size(); i++)
+for (size_t i = 0; i < m_elementsOrder.size(); i++)
 {
   auto iter = m_elements.find(m_elementsOrder[i]);
   if (iter != m_elements.end() && (0 == i || iter->second->getCharCount()))
diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 8b297da..27b7195 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -495,7 +495,7 @@ void libvisio::VSDContentCollector::_convertToPath(const 
std::vectorgetDouble() : 0.0;
 unsigned moveIndex = 0;
 std::vector tmpSegment;
-for (unsigned i = 0; i < segmentVector.size(); ++i)
+for (size_t i = 0; i < segmentVector.size(); ++i)
 {
   if (segmentVector[i]["librevenge:path-action"] && 
segmentVector[i]["librevenge:path-action"]->getStr() == "M")
   {
@@ -2071,7 +2071,7 @@ void 
libvisio::VSDContentCollector::_generatePolylineFromNURBS(unsigned degree,
   if (!m_noLine)
 m_currentLineGeometry.reserve(VSD_NUM_POLYLINES_PER_KNOT * 
knotVector.size());
 
-  for (unsigned i = 0; i < VSD_NUM_POLYLINES_PER_KNOT * knotVector.size(); i++)
+  for (size_t i = 0; i < VSD_NUM_POLYLINES_PER_KNOT * knotVector.size(); i++)
   {
 librevenge::RVNGPropertyList node;
 
@@ -2246,7 +2246,7 @@ void 
libvisio::VSDContentCollector::collectPolylineTo(unsigned /* id */, unsigne
 
   librevenge::RVNGPropertyList polyline;
   std::vector > tmpPoints(points);
-  for (unsigned i = 0; i< points.size(); i++)
+  for (size_t i = 0; i< points.size(); i++)
   {
 polyline.clear();
 if (xType == 0)
@@ -2597,7 +2597,7 @@ void libvisio::VSDContentCollector::collectShape(unsigned 
id, unsigned level, un
   m_txtxform.reset(new XForm(*(m_stencilShape->m_txtxform)));
 
 m_stencilFields = m_stencilShape->m_fields;
-for (unsigned i = 0; i < m_stencilFields.size(); i++)
+for (size_t i = 0; i < m_stencilFields.size(); i++)
 {
   VSDFieldListElement *elem = m_stencilFields.getElement(i);
   if (elem)
@@ -2681,7 +2681,7 @@ void libvisio::VSDContentCollector::collectSplineEnd()
   }
   m_splineKnotVector.push_back(m_splineLastKnot);
   std::vector weights(m_splineControlPoints.size()+2);
-  for (unsigned i=0; i < m_splineControlPoints.size()+2; i++)
+  for (size_t i=0; i < m_splineControlPoints.size()+2; i++)
 weights[i] = 1.0;
   collectNURBSTo(0, m_splineLevel, m_splineX, m_splineY, 1, 1, m_splineDegree, 
m_splineControlPoints, m_splineKnotVector, weights);
   m_splineKnotVector.clear();
diff --git a/src/lib/VSDParagraphList.cpp b/src/lib/VSDParagraphList.cpp
index 33f75fa..bfa8dd5 100644
--- a/src/lib/VSDParagraphList.cpp
+++ b/src/lib/VSDParagraphList.cpp
@@ -173,7 +173,7 @@ void libvisio::VSDParagraphList::handle(VSDCollector 
*collector) const
 return;
   if (!m_elementsOrder.empty())
   {
-for (unsigned i = 0; i < m_elementsOrder.size(); i++)
+for (size_t i = 0; i < m_elementsOrder.size(); i++)
 {
   auto iter = m_elements.find(m_elementsOrder[i]);
   if (iter != m_elements.end() && (0 == i || iter->second->getCharCount()))
diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index c967165..71b56ce 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -939,7 +939,7 @@ void 
libvisio::VSDParser::readGeomList(librevenge::RVNGInputStream *input)
 if (childrenListLength > getRemainingLength(input))
   childrenListLength = getRemainingLength(input);
 geometryOrder.reserve(childrenListLength / sizeof(uint32_t));
-for (unsigned i = 0; i < (childrenListLength / sizeof(uint32_t)); i++)
+for (size_t i = 0; i < (childrenListLength / sizeof(uint32_t)); i++)
   geometryOrder.push_back(readU32(input));
 
 if (m_currentGeometryList)
@@ -966,7 +966,7 @@ void 
libvisio::VSDParser::readCharList(librevenge::RVNGInputStream *input)
   childrenListLength = getRemainingLength(input);
 std::vector characterOrder;
 characterOrder.reserve(childrenListLength / sizeof(uint32_t));
-for (unsigned i = 0; i < (childrenListLength / 

[Libreoffice-commits] libvisio.git: src/lib

2018-03-12 Thread David Tardon
 src/lib/VSDContentCollector.cpp |5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

New commits:
commit f85c44b280a57cc273217c8385dd95a4989bd827
Author: David Tardon 
Date:   Mon Mar 12 13:32:53 2018 +0100

speed up angle normalization

Change-Id: I2531cae69ef9a64d5004692919bdcd96a069e994

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 9b4b39e..25907eb 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -638,9 +638,8 @@ void libvisio::VSDContentCollector::_flushText()
   if (flipX)
 angle -= M_PI;
 
-  while (angle > M_PI)
-angle -= 2 * M_PI;
-  while (angle < -M_PI)
+  angle = std::fmod(angle, 2 * M_PI);
+  if (angle < 0)
 angle += 2 * M_PI;
 
   textBlockProps.insert("svg:x", m_scale * x);
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-12-01 Thread Miklos Vajna
 src/lib/VSDContentCollector.cpp |1 -
 1 file changed, 1 deletion(-)

New commits:
commit 803830beed106e9de8d727a5e7eedd53e8dbf414
Author: Miklos Vajna 
Date:   Fri Dec 1 09:14:08 2017 +0100

VSDContentCollector: remove dead isParagraphOpened assignment

Local variable, not read later, so it can go.

Change-Id: Ide6c1b6976c43a3b9714d79d46631b7a80ddb300

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 190f5a2..9b4b39e 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -1104,7 +1104,6 @@ void libvisio::VSDContentCollector::_flushText()
   m_shapeOutputText->addCloseParagraph();
 else
   m_shapeOutputText->addCloseListElement();
-isParagraphOpened = false;
   }
 
   /* Last paragraph style had a bullet and we have to close
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-11-29 Thread Miklos Vajna
 src/lib/VSDContentCollector.cpp |1 -
 1 file changed, 1 deletion(-)

New commits:
commit 2baddb07cf518ca871d8969c694867d2d27c12d1
Author: Miklos Vajna 
Date:   Wed Nov 29 09:57:09 2017 +0100

VSDContentCollector: remove dead shapeId assignment

It's a by-value parameter, it's not read later in the function and the
assignment scope only includes conditions (not loops), so it's not read
later.

Change-Id: I56bed45c71de892d388fa534f8512b27245daf3a

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 87e0306..4c8aafa 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -475,7 +475,6 @@ void 
libvisio::VSDContentCollector::_flushCurrentPath(unsigned shapeId)
 librevenge::RVNGString stringId;
 stringId.sprintf("id%u", shapeId);
 propList.insert("draw:id", stringId);
-shapeId = MINUS_ONE;
   }
   _appendVisibleAndPrintable(propList);
   m_shapeOutputDrawing->addPath(propList);
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-11-26 Thread David Tardon
 src/lib/VSDXTheme.cpp |   15 +--
 src/lib/VSDXTheme.h   |4 ++--
 2 files changed, 11 insertions(+), 8 deletions(-)

New commits:
commit afa9437bec26a156aebdd60bc05fa48d68067629
Author: David Tardon 
Date:   Sun Nov 26 17:44:56 2017 +0100

ofz: ignore invalid/incomplete font entries

Change-Id: Ic5e6cf0afe62e92fba1503a1a3540eb50800dc3c

diff --git a/src/lib/VSDXTheme.cpp b/src/lib/VSDXTheme.cpp
index da69059..8db16e9 100644
--- a/src/lib/VSDXTheme.cpp
+++ b/src/lib/VSDXTheme.cpp
@@ -219,8 +219,8 @@ void libvisio::VSDXTheme::readFont(xmlTextReaderPtr reader, 
int idToken, VSDXFon
 {
   int script;
   librevenge::RVNGString typeFace;
-  readTypeFace(reader, script, typeFace);
-  font.m_typeFaces[script] = typeFace;
+  if (readTypeFace(reader, script, typeFace) && !typeFace.empty())
+font.m_typeFaces[script] = typeFace;
   break;
 }
 default:
@@ -230,7 +230,7 @@ void libvisio::VSDXTheme::readFont(xmlTextReaderPtr reader, 
int idToken, VSDXFon
   while ((idToken != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) && 1 
== ret);
 }
 
-void libvisio::VSDXTheme::readTypeFace(xmlTextReaderPtr reader, 
librevenge::RVNGString )
+bool libvisio::VSDXTheme::readTypeFace(xmlTextReaderPtr reader, 
librevenge::RVNGString )
 {
   const shared_ptr sTypeFace(xmlTextReaderGetAttribute(reader, 
BAD_CAST("typeface")), xmlFree);
   if (sTypeFace)
@@ -238,18 +238,21 @@ void libvisio::VSDXTheme::readTypeFace(xmlTextReaderPtr 
reader, librevenge::RVNG
 typeFace.clear();
 typeFace.sprintf("%s", (const char *)sTypeFace.get());
   }
+  return bool(sTypeFace);
 }
 
-void libvisio::VSDXTheme::readTypeFace(xmlTextReaderPtr reader, int , 
librevenge::RVNGString )
+bool libvisio::VSDXTheme::readTypeFace(xmlTextReaderPtr reader, int , 
librevenge::RVNGString )
 {
   const shared_ptr sScript(xmlTextReaderGetAttribute(reader, 
BAD_CAST("script")), xmlFree);
+  bool knownScript = false;
   if (sScript)
   {
 int token = libvisio::VSDXMLTokenMap::getTokenId(sScript.get());
-if (XML_TOKEN_INVALID != token)
+knownScript = XML_TOKEN_INVALID != token;
+if (knownScript)
   script = token;
   }
-  readTypeFace(reader, typeFace);
+  return readTypeFace(reader, typeFace) && knownScript;
 }
 
 void libvisio::VSDXTheme::readClrScheme(xmlTextReaderPtr reader)
diff --git a/src/lib/VSDXTheme.h b/src/lib/VSDXTheme.h
index e0de7c3..f600c96 100644
--- a/src/lib/VSDXTheme.h
+++ b/src/lib/VSDXTheme.h
@@ -94,8 +94,8 @@ private:
   void readVariationClrScheme(xmlTextReaderPtr reader, VSDXVariationClrScheme 
);
   void readFontScheme(xmlTextReaderPtr reader);
   void readFont(xmlTextReaderPtr reader, int idToken, VSDXFont );
-  void readTypeFace(xmlTextReaderPtr reader, librevenge::RVNGString );
-  void readTypeFace(xmlTextReaderPtr reader, int , 
librevenge::RVNGString );
+  bool readTypeFace(xmlTextReaderPtr reader, librevenge::RVNGString );
+  bool readTypeFace(xmlTextReaderPtr reader, int , 
librevenge::RVNGString );
 
   int getElementToken(xmlTextReaderPtr reader);
 
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-11-08 Thread Miklos Vajna
 src/lib/VDXParser.cpp   |   10 -
 src/lib/VSD5Parser.cpp  |   10 -
 src/lib/VSDCharacterList.cpp|   12 ---
 src/lib/VSDContentCollector.cpp |   20 +--
 src/lib/VSDFieldList.cpp|   10 +++--
 src/lib/VSDGeometryList.cpp |   42 +++-
 src/lib/VSDLayerList.cpp|6 +
 src/lib/VSDMetaData.cpp |2 -
 src/lib/VSDPages.cpp|2 -
 src/lib/VSDParagraphList.cpp|   14 +
 src/lib/VSDParser.cpp   |   16 +++
 src/lib/VSDStencils.cpp |4 +--
 src/lib/VSDStyles.cpp   |4 +--
 src/lib/VSDStylesCollector.cpp  |4 +--
 src/lib/VSDXMLHelper.cpp|4 +--
 src/lib/VSDXMLParserBase.cpp|   22 ++--
 src/lib/VSDXParser.cpp  |4 +--
 src/lib/VisioDocument.cpp   |2 -
 src/lib/libvisio_xml.cpp|4 +--
 19 files changed, 91 insertions(+), 101 deletions(-)

New commits:
commit 07863ce4ede0ad8752627e8e96db63bf58ca9ba7
Author: Miklos Vajna 
Date:   Wed Nov 8 09:42:51 2017 +0100

Use auto when declaring iterators and when initializing with a cast

Change-Id: I5a3b4334c2cfcf462952a8a00d97abc59eda1f19

diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp
index 0f07efd..f187a13 100644
--- a/src/lib/VDXParser.cpp
+++ b/src/lib/VDXParser.cpp
@@ -321,7 +321,7 @@ void libvisio::VDXParser::readLine(xmlTextReaderPtr reader)
   boost::optional lineCap;
   boost::optional rounding;
 
-  unsigned level = (unsigned)getElementDepth(reader);
+  auto level = (unsigned)getElementDepth(reader);
   int ret = 1;
   int tokenId = XML_TOKEN_INVALID;
   int tokenType = -1;
@@ -389,7 +389,7 @@ void 
libvisio::VDXParser::readFillAndShadow(xmlTextReaderPtr reader)
   boost::optional shadowOffsetX;
   boost::optional shadowOffsetY;
 
-  unsigned level = (unsigned)getElementDepth(reader);
+  auto level = (unsigned)getElementDepth(reader);
   int ret = 1;
   int tokenId = XML_TOKEN_INVALID;
   int tokenType = -1;
@@ -736,7 +736,7 @@ void libvisio::VDXParser::readPageProps(xmlTextReaderPtr 
reader)
   double pageScale = 1.0;
   double drawingScale = 1.0;
 
-  unsigned level = (unsigned)getElementDepth(reader);
+  auto level = (unsigned)getElementDepth(reader);
   int ret = 1;
   int tokenId = XML_TOKEN_INVALID;
   int tokenType = -1;
@@ -814,7 +814,7 @@ void libvisio::VDXParser::readFonts(xmlTextReaderPtr reader)
   xmlChar *name = xmlTextReaderGetAttribute(reader, BAD_CAST("Name"));
   if (id && name)
   {
-unsigned idx = (unsigned)xmlStringToLong(id);
+auto idx = (unsigned)xmlStringToLong(id);
 librevenge::RVNGBinaryData textStream(name, xmlStrlen(name));
 m_fonts[idx] = VSDName(textStream, libvisio::VSD_TEXT_UTF8);
   }
@@ -837,7 +837,7 @@ void libvisio::VDXParser::readTextBlock(xmlTextReaderPtr 
reader)
   double defaultTabStop = 0.0;
   unsigned char textDirection = 0;
 
-  unsigned level = (unsigned)getElementDepth(reader);
+  auto level = (unsigned)getElementDepth(reader);
   int ret = 1;
   int tokenId = XML_TOKEN_INVALID;
   int tokenType = -1;
diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index de5f85b..4caa901 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -380,11 +380,11 @@ void 
libvisio::VSD5Parser::readShape(librevenge::RVNGInputStream *input)
 m_currentShapeID = m_header.id;
   m_currentShapeLevel = m_header.level;
   unsigned parent = 0;
-  unsigned masterPage = MINUS_ONE;
-  unsigned masterShape = MINUS_ONE;
-  unsigned lineStyle = MINUS_ONE;
-  unsigned fillStyle = MINUS_ONE;
-  unsigned textStyle = MINUS_ONE;
+  auto masterPage = MINUS_ONE;
+  auto masterShape = MINUS_ONE;
+  auto lineStyle = MINUS_ONE;
+  auto fillStyle = MINUS_ONE;
+  auto textStyle = MINUS_ONE;
 
   try
   {
diff --git a/src/lib/VSDCharacterList.cpp b/src/lib/VSDCharacterList.cpp
index 3961bd5..ae702ef 100644
--- a/src/lib/VSDCharacterList.cpp
+++ b/src/lib/VSDCharacterList.cpp
@@ -82,16 +82,14 @@ libvisio::VSDCharacterList::VSDCharacterList(const 
libvisio::VSDCharacterList 
   m_elements(),
   m_elementsOrder(charList.m_elementsOrder)
 {
-  std::map::const_iterator iter = 
charList.m_elements.begin();
-  for (; iter != charList.m_elements.end(); ++iter)
+  for (auto iter = charList.m_elements.begin(); iter != 
charList.m_elements.end(); ++iter)
 m_elements[iter->first] = iter->second->clone();
 }
 
 libvisio::VSDCharacterList ::VSDCharacterList::operator=(const 
libvisio::VSDCharacterList )
 {
   clear();
-  std::map::const_iterator iter = 
charList.m_elements.begin();
-  for (; iter != charList.m_elements.end(); ++iter)
+  for (auto iter = charList.m_elements.begin(); iter != 
charList.m_elements.end(); ++iter)
 m_elements[iter->first] = iter->second->clone();
   m_elementsOrder = 

[Libreoffice-commits] libvisio.git: src/lib

2017-10-30 Thread David Tardon
 src/lib/VSDContentCollector.cpp |6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)

New commits:
commit 6ba35e73d071dd396fc919e09daa09151354cb95
Author: David Tardon 
Date:   Mon Oct 30 14:29:18 2017 +0100

ofz#3711 band-aid for OOB access in NURBS

Change-Id: Ied73be7f36bd070a38c13243dd851d0bcd4056a3

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index c842852..2ce80e9 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -1983,7 +1983,11 @@ void 
libvisio::VSDContentCollector::_generateBezierSegmentsFromNURBS(unsigned de
   double numer = knotVector[b] - knotVector[a];
   unsigned j = degree;
   std::vector alphas(degree - 1, 0.0);
-  for (; j >mult; j--)
+  // TODO: The second part of the end condition should not be
+  // necessary, but for some reason it can happen. I'm still
+  // convinced there is an inherent off-by-one bug in our impl. of
+  // the algorithm somewhere...
+  for (; j >mult && j < knotVector.size() - a; j--)
 alphas[j-mult-1] = numer/(knotVector[a+j]-knotVector[a]);
   unsigned r = degree - mult;
   for (j=1; j<=r; j++)
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-10-22 Thread David Tardon
 src/lib/VDXParser.cpp  |2 +-
 src/lib/VSDXParser.cpp |2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

New commits:
commit 15f3774513d0181ad90da382297c175cc3424462
Author: David Tardon 
Date:   Sun Oct 22 21:24:43 2017 +0200

fix debug build

Change-Id: I860b6034e5d833900652aec8c3647eeae185e538

diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp
index f2f3154..0f07efd 100644
--- a/src/lib/VDXParser.cpp
+++ b/src/lib/VDXParser.cpp
@@ -916,7 +916,7 @@ xmlChar 
*libvisio::VDXParser::readStringData(xmlTextReaderPtr reader)
 ret = xmlTextReaderRead(reader);
 if (1 == ret && stringValue)
 {
-  VSD_DEBUG_MSG(("VDXParser::readStringData stringValue %s\n", (const char 
*)stringValue));
+  VSD_DEBUG_MSG(("VDXParser::readStringData stringValue %s\n", (const char 
*)stringValue.get()));
   return stringValue.release();
 }
   }
diff --git a/src/lib/VSDXParser.cpp b/src/lib/VSDXParser.cpp
index 488be3a..efd46b9 100644
--- a/src/lib/VSDXParser.cpp
+++ b/src/lib/VSDXParser.cpp
@@ -555,7 +555,7 @@ xmlChar 
*libvisio::VSDXParser::readStringData(xmlTextReaderPtr reader)
   std::unique_ptr 
stringValue(xmlTextReaderGetAttribute(reader, BAD_CAST("V")), xmlFree);
   if (stringValue)
   {
-VSD_DEBUG_MSG(("VSDXParser::readStringData stringValue %s\n", (const char 
*)stringValue));
+VSD_DEBUG_MSG(("VSDXParser::readStringData stringValue %s\n", (const char 
*)stringValue.get()));
 return stringValue.release();
   }
   return nullptr;
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-10-20 Thread David Tardon
 src/lib/VSDContentCollector.cpp |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

New commits:
commit aef4af08f5a2a6e3301cfe3088975820185da81d
Author: David Tardon 
Date:   Fri Oct 20 13:06:21 2017 +0200

drop pointless casts

Change-Id: I2ac4f2922acd2f789bb1c7322c0d888ab1f31d0c

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 04c58ec..c842852 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -1980,11 +1980,11 @@ void 
libvisio::VSDContentCollector::_generateBezierSegmentsFromNURBS(unsigned de
   mult = degree;
 if (mult < degree)
 {
-  double numer = (double)(knotVector[b] - knotVector[a]);
+  double numer = knotVector[b] - knotVector[a];
   unsigned j = degree;
   std::vector alphas(degree - 1, 0.0);
   for (; j >mult; j--)
-alphas[j-mult-1] = numer/double(knotVector[a+j]-knotVector[a]);
+alphas[j-mult-1] = numer/(knotVector[a+j]-knotVector[a]);
   unsigned r = degree - mult;
   for (j=1; j<=r; j++)
   {
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-09-19 Thread Miklos Vajna
 src/lib/VSD5Parser.cpp  |6 +-
 src/lib/VSDCharacterList.cpp|   13 ++---
 src/lib/VSDContentCollector.cpp |  103 +++-
 src/lib/VSDFieldList.cpp|   12 ++--
 src/lib/VSDGeometryList.cpp |   20 +++
 src/lib/VSDLayerList.cpp|   12 ++--
 src/lib/VSDMetaData.cpp |4 -
 src/lib/VSDPages.cpp|   12 ++--
 src/lib/VSDParagraphList.cpp|   13 ++---
 src/lib/VSDParser.cpp   |8 +--
 src/lib/VSDShapeList.cpp|4 -
 src/lib/VSDStylesCollector.cpp  |4 -
 src/lib/VSDXMLHelper.cpp|   12 ++--
 src/lib/VSDXMLParserBase.cpp|8 +--
 14 files changed, 113 insertions(+), 118 deletions(-)

New commits:
commit f958f47bf16eb932c6e6aa3caebdde67470cd705
Author: Miklos Vajna 
Date:   Tue Sep 19 09:56:21 2017 +0200

Convert explicit for loops to range-based ones where possible

This is most useful in libvisio::VSDMetaData::readPropertySetStream() to
avoid repeating ourselves.

Change-Id: Ieeca010476c776589b56b145f5b973eec86001fe

diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index c3f80fd..12e5ed0 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -128,11 +128,11 @@ void 
libvisio::VSD5Parser::handleChunkRecords(librevenge::RVNGInputStream *input
 }
   }
   i = 0;
-  for (std::map::iterator iter = records.begin(); iter 
!= records.end(); ++iter)
+  for (auto  : records)
   {
-m_header = iter->second;
+m_header = record.second;
 m_header.id = i++;
-input->seek(startPosition + iter->first, librevenge::RVNG_SEEK_SET);
+input->seek(startPosition + record.first, librevenge::RVNG_SEEK_SET);
 handleChunk(input);
   }
 }
diff --git a/src/lib/VSDCharacterList.cpp b/src/lib/VSDCharacterList.cpp
index 6574d7a..3961bd5 100644
--- a/src/lib/VSDCharacterList.cpp
+++ b/src/lib/VSDCharacterList.cpp
@@ -148,9 +148,8 @@ void libvisio::VSDCharacterList::setCharCount(unsigned id, 
unsigned charCount)
 
 void libvisio::VSDCharacterList::resetCharCount()
 {
-  for (std::map::iterator iter = 
m_elements.begin();
-   iter != m_elements.end(); ++iter)
-iter->second->setCharCount(0);
+  for (auto  : m_elements)
+element.second->setCharCount(0);
 }
 
 unsigned libvisio::VSDCharacterList::getLevel() const
@@ -163,8 +162,8 @@ unsigned libvisio::VSDCharacterList::getLevel() const
 void libvisio::VSDCharacterList::setElementsOrder(const std::vector 
)
 {
   m_elementsOrder.clear();
-  for (unsigned i = 0; i::iterator iter = 
m_elements.begin(); iter != m_elements.end(); ++iter)
-delete iter->second;
+  for (auto  : m_elements)
+delete element.second;
   m_elements.clear();
   m_elementsOrder.clear();
 }
diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 8163ce8..512cac9 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -333,14 +333,14 @@ void 
libvisio::VSDContentCollector::_flushCurrentPath(unsigned shapeId)
   {
 bool firstPoint = true;
 bool wasMove = false;
-for (unsigned i = 0; i < m_currentFillGeometry.size(); i++)
+for (auto  : m_currentFillGeometry)
 {
   if (firstPoint)
   {
 firstPoint = false;
 wasMove = true;
   }
-  else if (m_currentFillGeometry[i]["librevenge:path-action"]->getStr() == 
"M")
+  else if (i["librevenge:path-action"]->getStr() == "M")
   {
 if (!tmpPath.empty())
 {
@@ -362,7 +362,7 @@ void 
libvisio::VSDContentCollector::_flushCurrentPath(unsigned shapeId)
   }
   else
 wasMove = false;
-  tmpPath.push_back(m_currentFillGeometry[i]);
+  tmpPath.push_back(i);
 }
 if (!tmpPath.empty())
 {
@@ -407,16 +407,16 @@ void 
libvisio::VSDContentCollector::_flushCurrentPath(unsigned shapeId)
 double y = 0.0;
 double prevX = 0.0;
 double prevY = 0.0;
-for (unsigned i = 0; i < m_currentLineGeometry.size(); i++)
+for (auto  : m_currentLineGeometry)
 {
   if (firstPoint)
   {
 firstPoint = false;
 wasMove = true;
-x = m_currentLineGeometry[i]["svg:x"]->getDouble();
-y = m_currentLineGeometry[i]["svg:y"]->getDouble();
+x = i["svg:x"]->getDouble();
+y = i["svg:y"]->getDouble();
   }
-  else if (m_currentLineGeometry[i]["librevenge:path-action"]->getStr() == 
"M")
+  else if (i["librevenge:path-action"]->getStr() == "M")
   {
 if 

[Libreoffice-commits] libvisio.git: src/lib

2017-09-13 Thread Miklos Vajna
 src/lib/VDXParser.h  |   14 ++--
 src/lib/VSD5Parser.h |   58 
 src/lib/VSD6Parser.h |   22 +++---
 src/lib/VSDCharacterList.cpp |   10 +-
 src/lib/VSDContentCollector.h|  134 +++
 src/lib/VSDFieldList.h   |   28 
 src/lib/VSDGeometryList.cpp  |  130 ++---
 src/lib/VSDInternalStream.h  |   22 +++---
 src/lib/VSDOutputElementList.cpp |  108 +++
 src/lib/VSDParagraphList.cpp |   10 +-
 src/lib/VSDStylesCollector.h |  134 +++
 src/lib/VSDXParser.h |   14 ++--
 12 files changed, 342 insertions(+), 342 deletions(-)

New commits:
commit f6c7fe7974fae43cc98c061f4a47d55a422d2d16
Author: Miklos Vajna 
Date:   Wed Sep 13 09:04:07 2017 +0200

Mark overriding member functions as 'override'

This does not affect the generated code (API or ABI), but:

1) Makes sure that in case the signature of one of these functions would
change by accident, the build breaks as the function no longer overrides
a base function.

2) Makes the code readable by explicitly marking all overriding
functions as 'override', where previously the reader had to read the
interface of the base class(es) as well to find out if the function is
virtual or not.

3) Since 'override' implies 'virtual', remove the 'virtual' keyword
where 'override' is present.

Change-Id: I482cbb5d22726b9a16c0f445fb945c24c69a5dd0

diff --git a/src/lib/VDXParser.h b/src/lib/VDXParser.h
index 0293911..6070047 100644
--- a/src/lib/VDXParser.h
+++ b/src/lib/VDXParser.h
@@ -28,9 +28,9 @@ class VDXParser : public VSDXMLParserBase
 
 public:
   explicit VDXParser(librevenge::RVNGInputStream *input, 
librevenge::RVNGDrawingInterface *painter);
-  virtual ~VDXParser();
-  bool parseMain();
-  bool extractStencils();
+  ~VDXParser() override;
+  bool parseMain() override;
+  bool extractStencils() override;
 
 private:
   VDXParser();
@@ -39,10 +39,10 @@ private:
 
   // Helper functions
 
-  xmlChar *readStringData(xmlTextReaderPtr reader);
+  xmlChar *readStringData(xmlTextReaderPtr reader) override;
 
-  int getElementToken(xmlTextReaderPtr reader);
-  int getElementDepth(xmlTextReaderPtr reader);
+  int getElementToken(xmlTextReaderPtr reader) override;
+  int getElementDepth(xmlTextReaderPtr reader) override;
 
   // Functions to read the DatadiagramML document structure
 
@@ -65,7 +65,7 @@ private:
   void readTabs(xmlTextReaderPtr reader);
   void readTab(xmlTextReaderPtr reader);
 
-  void getBinaryData(xmlTextReaderPtr reader);
+  void getBinaryData(xmlTextReaderPtr reader) override;
 
   // Private data
 
diff --git a/src/lib/VSD5Parser.h b/src/lib/VSD5Parser.h
index 02326ee..334cd05 100644
--- a/src/lib/VSD5Parser.h
+++ b/src/lib/VSD5Parser.h
@@ -23,44 +23,44 @@ class VSD5Parser : public VSD6Parser
 {
 public:
   explicit VSD5Parser(librevenge::RVNGInputStream *input, 
librevenge::RVNGDrawingInterface *painter);
-  ~VSD5Parser();
+  ~VSD5Parser() override;
 
 protected:
-  virtual void readPointer(librevenge::RVNGInputStream *input, Pointer );
-  virtual bool getChunkHeader(librevenge::RVNGInputStream *input);
-  virtual void readPointerInfo(librevenge::RVNGInputStream *input, unsigned 
ptrType, unsigned shift, unsigned , int );
-
-  virtual void readGeomList(librevenge::RVNGInputStream *input);
-  virtual void readCharList(librevenge::RVNGInputStream *input);
-  virtual void readParaList(librevenge::RVNGInputStream *input);
-  virtual void readShapeList(librevenge::RVNGInputStream *input);
-  virtual void readPropList(librevenge::RVNGInputStream *input);
-  virtual void readFieldList(librevenge::RVNGInputStream *input);
-  virtual void readNameList2(librevenge::RVNGInputStream *input);
-  virtual void readTabsDataList(librevenge::RVNGInputStream *input);
-
-  virtual void readLine(librevenge::RVNGInputStream *input);
-  virtual void readFillAndShadow(librevenge::RVNGInputStream *input);
-  virtual void readTextBlock(librevenge::RVNGInputStream *input);
-  virtual void readCharIX(librevenge::RVNGInputStream *input);
-  virtual void readParaIX(librevenge::RVNGInputStream *input);
-  virtual void readTextField(librevenge::RVNGInputStream *input);
-
-  virtual void readShape(librevenge::RVNGInputStream *input);
-  virtual void readPage(librevenge::RVNGInputStream *input);
+  void readPointer(librevenge::RVNGInputStream *input, Pointer ) override;
+  bool getChunkHeader(librevenge::RVNGInputStream *input) override;
+  void readPointerInfo(librevenge::RVNGInputStream *input, unsigned ptrType, 
unsigned shift, unsigned , int ) override;
+
+  void readGeomList(librevenge::RVNGInputStream *input) override;
+  void readCharList(librevenge::RVNGInputStream *input) override;
+  void readParaList(librevenge::RVNGInputStream *input) override;
+  void 

[Libreoffice-commits] libvisio.git: src/lib

2017-09-11 Thread David Tardon
 src/lib/Makefile.am |1 +
 1 file changed, 1 insertion(+)

New commits:
commit 634a8eacdb0e06bd3e171e963d4a57f742da4b33
Author: David Tardon 
Date:   Mon Sep 11 14:59:20 2017 +0200

fix build with older boost

Change-Id: I3a2e6d9d9e554f9e2ad010219379f5f61c5f8c25

diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index f482b9f..2828971 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -12,6 +12,7 @@ AM_CXXFLAGS = \
-I$(top_srcdir)/src/lib \
-I$(top_builddir)/src/lib \
-DBOOST_ERROR_CODE_HEADER_ONLY \
+   -DBOOST_SPIRIT_USE_PHOENIX_V3 \
-DBOOST_SYSTEM_NO_DEPRECATED \
$(LIBVISIO_CXXFLAGS) \
$(DEBUG_CXXFLAGS)
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-07-07 Thread David Tardon
 src/lib/VSDContentCollector.cpp |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit 4c9f3fd5cf1de3e4c6c0d28b848b0d496cc24f0a
Author: David Tardon 
Date:   Fri Jul 7 10:26:30 2017 +0200

ofz#2477 avoid divide by zero

Change-Id: I952670a60a0a8133509178449ac89dfad2091213

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 08e88e1..bc7fa42 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -1978,7 +1978,7 @@ void 
libvisio::VSDContentCollector::_generateBezierSegmentsFromNURBS(unsigned de
   while (b < m)
   {
 i = b;
-while (b < m && knotVector[b+1] == knotVector[b])
+while (b < m && VSD_APPROX_EQUAL(knotVector[b+1], knotVector[i]))
   b++;
 unsigned mult = b - i + 1;
 if (mult > degree) // it doesn't make sense to have knot multiplicity 
greater than the curve degree
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-07-04 Thread David Tardon
 src/lib/VSDContentCollector.cpp |   18 ++
 1 file changed, 2 insertions(+), 16 deletions(-)

New commits:
commit 4207a1089a13726cbcf1b6e74d80f146544b7b8c
Author: David Tardon 
Date:   Tue Jul 4 10:29:31 2017 +0200

ofz#1431 reject NURBS that do not have enough control points

Change-Id: I1ea6345ecb5b3f4f2d0979149dad103829c81bfa

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index f43ac24..08e88e1 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -1958,7 +1958,7 @@ void 
libvisio::VSDContentCollector::_outputLinearBezierSegment(const std::vector
 void libvisio::VSDContentCollector::_generateBezierSegmentsFromNURBS(unsigned 
degree,
  const 
std::vector > , const 
std::vector )
 {
-  if (controlPoints.empty() || knotVector.empty() || degree == 0 || degree > 3)
+  if (controlPoints.size() <= degree || knotVector.empty() || degree == 0 || 
degree > 3)
 return;
 
   /* Decomposition of a uniform spline of a given degree into Bezier segments
@@ -1973,10 +1973,8 @@ void 
libvisio::VSDContentCollector::_generateBezierSegmentsFromNURBS(unsigned de
 m = knotVector.size() - 1;
   std::vector< std::pair > points(degree + 1), 
nextPoints(degree + 1);
   unsigned i = 0;
-  for (; i <= degree && i < controlPoints.size(); i++)
+  for (; i <= degree; i++)
 points[i] = controlPoints[i];
-  if (degree >= controlPoints.size())
-fill(points.begin() + controlPoints.size(), points.end(), 
controlPoints.back());
   while (b < m)
   {
 i = b;
@@ -2031,18 +2029,6 @@ void 
libvisio::VSDContentCollector::_generateBezierSegmentsFromNURBS(unsigned de
 {
   for (i=degree-mult; i <= degree; i++)
   {
-// TODO: this seems to be an inherent problem... Possibly our
-// impl. doesn't match the algorithm's prerequisities correctly?
-// Def. of NURBS curve is (using symbolic from The NURBS Book):
-// # of control points... n+1
-// # of knots... m+1
-// degree... p
-// relation between these values... m == n + p + 1
-// The max. possible value of b-degree+i is (m-1)-p+p == m-1 == n+p.
-// But n+p >= n+1, which means that there would be at least one
-// access past the controlPoints array...
-if (b-degree+i >= controlPoints.size())
-  break;
 points[i].first = controlPoints[b-degree+i].first;
 points[i].second = controlPoints[b-degree+i].second;
   }
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

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

New commits:
commit 229da5c2e86171d2a61f183759727f8c7d77c66f
Author: David Tardon 
Date:   Tue Jun 6 10:21:45 2017 +0200

astyle

Change-Id: I2e5c31ba030aff764e2c52278e09ae09cf6e1909

diff --git a/src/lib/VSDXMLParserBase.cpp b/src/lib/VSDXMLParserBase.cpp
index 81301d0..482a2ff 100644
--- a/src/lib/VSDXMLParserBase.cpp
+++ b/src/lib/VSDXMLParserBase.cpp
@@ -1995,7 +1995,7 @@ int 
libvisio::VSDXMLParserBase::readNURBSData(boost::optional ,
   )[push_back(phx::ref(tmpData.points), 
phx::cref(point))]
   >> -lit(',') >>
   double_[push_back(phx::ref(tmpData.knots),
-_1)] >> -lit(',') >>
+_1)] >> -lit(',') >>
   double_[push_back(phx::ref(tmpData.weights), _1)]
 )
 % -lit(',')
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-05-16 Thread David Tardon
 src/lib/VSDXMLParserBase.cpp |   25 +
 1 file changed, 13 insertions(+), 12 deletions(-)

New commits:
commit 38692886d9f7e9f4bfb0f043d2019d6abf20c46b
Author: David Tardon 
Date:   Tue May 16 15:16:35 2017 +0200

nitpick

Change-Id: I48aebd0207376719f70bf590709a3df0eb3452df

diff --git a/src/lib/VSDXMLParserBase.cpp b/src/lib/VSDXMLParserBase.cpp
index b557078..81301d0 100644
--- a/src/lib/VSDXMLParserBase.cpp
+++ b/src/lib/VSDXMLParserBase.cpp
@@ -1983,21 +1983,22 @@ int 
libvisio::VSDXMLParserBase::readNURBSData(boost::optional ,
 (
   lit("NURBS")
   >> '('
-  >> double_[ref(tmpData.lastKnot) = _1] >> -char_(',')
-  >> int_[ref(tmpData.degree) = _1] >> -char_(',')
-  >> int_[ref(tmpData.xType) = _1] >> -char_(',')
-  >> int_[ref(tmpData.yType) = _1] >> -char_(',')
+  >> double_[ref(tmpData.lastKnot) = _1] >> -lit(',')
+  >> int_[ref(tmpData.degree) = _1] >> -lit(',')
+  >> int_[ref(tmpData.xType) = _1] >> -lit(',')
+  >> int_[ref(tmpData.yType) = _1] >> -lit(',')
   >> // array of points, weights and knots
   (
 (
-  (double_[ref(point.first) = _1] >> -char_(',') >>
+  (double_[ref(point.first) = _1] >> -lit(',') >>
double_[ref(point.second) = _1]
   )[push_back(phx::ref(tmpData.points), 
phx::cref(point))]
-  >> -char_(',') >>
-  double_[push_back(phx::ref(tmpData.knots), _1)] 
>> -char_(',') >>
+  >> -lit(',') >>
+  double_[push_back(phx::ref(tmpData.knots),
+_1)] >> -lit(',') >>
   double_[push_back(phx::ref(tmpData.weights), _1)]
 )
-% -char_(',')
+% -lit(',')
   )
   >> ')'
 ),
@@ -2034,14 +2035,14 @@ int 
libvisio::VSDXMLParserBase::readPolylineData(boost::optional &
 (
   lit("POLYLINE")
   >> '('
-  >> int_[ref(tmpData.xType) = _1] >> -char_(',')
-  >> int_[ref(tmpData.yType) = _1] >> -char_(',')
+  >> int_[ref(tmpData.xType) = _1] >> -lit(',')
+  >> int_[ref(tmpData.yType) = _1] >> -lit(',')
   >> // array of points
   (
 (
-  double_[ref(point.first) = _1] >> -char_(',')
+  double_[ref(point.first) = _1] >> -lit(',')
   >> double_[ref(point.second) = _1]
-)[push_back(phx::ref(tmpData.points), 
phx::cref(point))] % -char_(',')
+)[push_back(phx::ref(tmpData.points), 
phx::cref(point))] % -lit(',')
   )
   >> ')'
 ),
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-05-16 Thread David Tardon
 src/lib/VSDContentCollector.cpp |4 ++--
 src/lib/VSDXMLParserBase.cpp|6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

New commits:
commit 1b35448f766f9baffc1482da0e75360168f76f24
Author: David Tardon 
Date:   Tue May 16 09:42:49 2017 +0200

drop :: prefix

Change-Id: Iae34b40ce6fb2f99badf91fb7f97523f123ffcd4

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index acb2a30..51484a3 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -3551,7 +3551,7 @@ void libvisio::VSDContentCollector::endPages()
 
 bool libvisio::VSDContentCollector::parseFormatId(const char *formatString, 
unsigned short )
 {
-  using namespace ::boost::spirit::qi;
+  using namespace boost::spirit::qi;
 
   result = 0x;
 
@@ -3748,7 +3748,7 @@ void 
libvisio::VSDContentCollector::collectLayerMem(unsigned level, const VSDNam
   memcpy([0], layerMem.m_data.getDataBuffer(), layerMem.m_data.size());
   appendCharacters(text, tmpData, layerMem.m_format);
 
-  using namespace ::boost::spirit::qi;
+  using namespace boost::spirit::qi;
   auto first = text.cstr();
   const auto last = first + strlen(first);
   bool bRes = phrase_parse(first, last, int_ % ';', space, m_currentLayerMem) 
&& first == last;
diff --git a/src/lib/VSDXMLParserBase.cpp b/src/lib/VSDXMLParserBase.cpp
index 5eb6481..b557078 100644
--- a/src/lib/VSDXMLParserBase.cpp
+++ b/src/lib/VSDXMLParserBase.cpp
@@ -1971,7 +1971,7 @@ int 
libvisio::VSDXMLParserBase::readNURBSData(boost::optional ,
   {
 std::pair point;
 
-using namespace ::boost::spirit::qi;
+using namespace boost::spirit::qi;
 namespace phx = boost::phoenix;
 using phx::push_back;
 using phx::ref;
@@ -2023,7 +2023,7 @@ int 
libvisio::VSDXMLParserBase::readPolylineData(boost::optional &
   {
 std::pair point;
 
-using namespace ::boost::spirit::qi;
+using namespace boost::spirit::qi;
 namespace phx = boost::phoenix;
 using phx::push_back;
 using phx::ref;
@@ -2236,7 +2236,7 @@ unsigned 
libvisio::VSDXMLParserBase::getIX(xmlTextReaderPtr reader)
 
 void libvisio::VSDXMLParserBase::readTriggerId(unsigned , xmlTextReaderPtr 
reader)
 {
-  using namespace ::boost::spirit::qi;
+  using namespace boost::spirit::qi;
 
   unsigned triggerId = MINUS_ONE;
   const std::shared_ptr 
triggerString(xmlTextReaderGetAttribute(reader, BAD_CAST("F")), xmlFree);
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-05-04 Thread David Tardon
 src/lib/VSDContentCollector.cpp |   12 
 1 file changed, 12 insertions(+)

New commits:
commit 8bcfc95cb59c60c4035d8752c2341137f0c6c3af
Author: David Tardon 
Date:   Thu May 4 12:25:07 2017 +0200

ofz#1291 band-aid for out-of-bounds access

Change-Id: I9958903a5e68c2397c9e6948034a6e43114e4694

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 516ff3f..92898a5 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -2022,6 +2022,18 @@ void 
libvisio::VSDContentCollector::_generateBezierSegmentsFromNURBS(unsigned de
 {
   for (i=degree-mult; i <= degree; i++)
   {
+// TODO: this seems to be an inherent problem... Possibly our
+// impl. doesn't match the algorithm's prerequisities correctly?
+// Def. of NURBS curve is (using symbolic from The NURBS Book):
+// # of control points... n+1
+// # of knots... m+1
+// degree... p
+// relation between these values... m == n + p + 1
+// The max. possible value of b-degree+i is (m-1)-p+p == m-1 == n+p.
+// But n+p >= n+1, which means that there would be at least one
+// access past the controlPoints array...
+if (b-degree+i >= controlPoints.size())
+  break;
 points[i].first = controlPoints[b-degree+i].first;
 points[i].second = controlPoints[b-degree+i].second;
   }
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-04-24 Thread David Tardon
 src/lib/VisioDocument.cpp |   79 +++---
 1 file changed, 48 insertions(+), 31 deletions(-)

New commits:
commit 7c24597e20d6405814b137bb6750b04c090f2763
Author: David Tardon 
Date:   Mon Apr 24 09:33:12 2017 +0200

ofz#1256 don't let any exception through

Change-Id: Ifbaad9bbf825c2be3df53f0f277f76acd6e3d3f2

diff --git a/src/lib/VisioDocument.cpp b/src/lib/VisioDocument.cpp
index e07bfa7..9d6fec8 100644
--- a/src/lib/VisioDocument.cpp
+++ b/src/lib/VisioDocument.cpp
@@ -42,7 +42,7 @@ static bool checkVisioMagic(librevenge::RVNGInputStream 
*input)
   return returnValue;
 }
 
-static bool isBinaryVisioDocument(librevenge::RVNGInputStream *input)
+static bool isBinaryVisioDocument(librevenge::RVNGInputStream *input) try
 {
   std::shared_ptr docStream;
   input->seek(0, librevenge::RVNG_SEEK_SET);
@@ -68,8 +68,12 @@ static bool 
isBinaryVisioDocument(librevenge::RVNGInputStream *input)
   // Versions 2k (6) and 2k3 (11)
   return ((version >= 1 && version <= 6) || version == 11);
 }
+catch (...)
+{
+  return false;
+}
 
-static bool parseBinaryVisioDocument(librevenge::RVNGInputStream *input, 
librevenge::RVNGDrawingInterface *painter, bool isStencilExtraction)
+static bool parseBinaryVisioDocument(librevenge::RVNGInputStream *input, 
librevenge::RVNGDrawingInterface *painter, bool isStencilExtraction) try
 {
   VSD_DEBUG_MSG(("Parsing Binary Visio Document\n"));
   input->seek(0, librevenge::RVNG_SEEK_SET);
@@ -108,8 +112,12 @@ static bool 
parseBinaryVisioDocument(librevenge::RVNGInputStream *input, libreve
   else
 return parser->parseMain();
 }
+catch (...)
+{
+  return false;
+}
 
-static bool isOpcVisioDocument(librevenge::RVNGInputStream *input)
+static bool isOpcVisioDocument(librevenge::RVNGInputStream *input) try
 {
   input->seek(0, librevenge::RVNG_SEEK_SET);
   if (!input->isStructured())
@@ -130,8 +138,12 @@ static bool isOpcVisioDocument(librevenge::RVNGInputStream 
*input)
   tmpInput.reset(input->getSubStreamByName(rel->getTarget().c_str()));
   return bool(tmpInput);
 }
+catch (...)
+{
+  return false;
+}
 
-static bool parseOpcVisioDocument(librevenge::RVNGInputStream *input, 
librevenge::RVNGDrawingInterface *painter, bool isStencilExtraction)
+static bool parseOpcVisioDocument(librevenge::RVNGInputStream *input, 
librevenge::RVNGDrawingInterface *painter, bool isStencilExtraction) try
 {
   VSD_DEBUG_MSG(("Parsing Visio Document based on Open Packaging 
Convention\n"));
   input->seek(0, librevenge::RVNG_SEEK_SET);
@@ -142,42 +154,43 @@ static bool 
parseOpcVisioDocument(librevenge::RVNGInputStream *input, librevenge
 return true;
   return false;
 }
+catch (...)
+{
+  return false;
+}
 
-static bool isXmlVisioDocument(librevenge::RVNGInputStream *input)
+static bool isXmlVisioDocument(librevenge::RVNGInputStream *input) try
 {
-  try
+  input->seek(0, librevenge::RVNG_SEEK_SET);
+  const std::shared_ptr reader(
+libvisio::xmlReaderForStream(input, 0, 0, 
XML_PARSE_NOBLANKS|XML_PARSE_NOENT|XML_PARSE_NONET|XML_PARSE_RECOVER),
+xmlFreeTextReader);
+  if (!reader)
+return false;
+  int ret = xmlTextReaderRead(reader.get());
+  while (ret == 1 && 1 != xmlTextReaderNodeType(reader.get()))
+ret = xmlTextReaderRead(reader.get());
+  if (ret != 1)
   {
-input->seek(0, librevenge::RVNG_SEEK_SET);
-const std::shared_ptr reader(
-  libvisio::xmlReaderForStream(input, 0, 0, 
XML_PARSE_NOBLANKS|XML_PARSE_NOENT|XML_PARSE_NONET|XML_PARSE_RECOVER),
-  xmlFreeTextReader);
-if (!reader)
-  return false;
-int ret = xmlTextReaderRead(reader.get());
-while (ret == 1 && 1 != xmlTextReaderNodeType(reader.get()))
-  ret = xmlTextReaderRead(reader.get());
-if (ret != 1)
-{
-  return false;
-}
-const xmlChar *name = xmlTextReaderConstName(reader.get());
-if (!name)
-{
-  return false;
-}
-if (!xmlStrEqual(name, BAD_CAST("VisioDocument")))
-{
-  return false;
-}
-return true;
+return false;
+  }
+  const xmlChar *name = xmlTextReaderConstName(reader.get());
+  if (!name)
+  {
+return false;
   }
-  catch (...)
+  if (!xmlStrEqual(name, BAD_CAST("VisioDocument")))
   {
 return false;
   }
+  return true;
+}
+catch (...)
+{
+  return false;
 }
 
-static bool parseXmlVisioDocument(librevenge::RVNGInputStream *input, 
librevenge::RVNGDrawingInterface *painter, bool isStencilExtraction)
+static bool parseXmlVisioDocument(librevenge::RVNGInputStream *input, 
librevenge::RVNGDrawingInterface *painter, bool isStencilExtraction) try
 {
   VSD_DEBUG_MSG(("Parsing Visio DrawingML Document\n"));
   input->seek(0, librevenge::RVNG_SEEK_SET);
@@ -188,6 +201,10 @@ static bool 
parseXmlVisioDocument(librevenge::RVNGInputStream *input, librevenge
 return true;
   return false;
 }
+catch (...)
+{
+  return false;
+}
 
 } // anonymous namespace
 
___
Libreoffice-commits mailing list

[Libreoffice-commits] libvisio.git: src/lib

2017-04-20 Thread David Tardon
 src/lib/libvisio_xml.cpp |3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

New commits:
commit ce4e77cc8c716db1080bdebd63393268ff075aa6
Author: David Tardon 
Date:   Thu Apr 20 16:04:09 2017 +0200

avoid possible null ptr deref.

Change-Id: I61807799dd0a36d9796d4580d85068207e92e26b

diff --git a/src/lib/libvisio_xml.cpp b/src/lib/libvisio_xml.cpp
index 18214b2..225d42f 100644
--- a/src/lib/libvisio_xml.cpp
+++ b/src/lib/libvisio_xml.cpp
@@ -96,7 +96,8 @@ void XMLErrorWatcher::setError()
 xmlTextReaderPtr xmlReaderForStream(librevenge::RVNGInputStream *input, const 
char *URL, const char *encoding, int options, XMLErrorWatcher *const watcher)
 {
   xmlTextReaderPtr reader = xmlReaderForIO(vsdxInputReadFunc, 
vsdxInputCloseFunc, (void *)input, URL, encoding, options);
-  xmlTextReaderSetErrorHandler(reader, vsdxReaderErrorFunc, watcher);
+  if (reader)
+xmlTextReaderSetErrorHandler(reader, vsdxReaderErrorFunc, watcher);
   return reader;
 }
 
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-04-18 Thread David Tardon
 src/lib/VSDContentCollector.cpp |5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

New commits:
commit 260183803863967f2923dd2787f076f1cead3f0e
Author: David Tardon 
Date:   Tue Apr 18 09:53:48 2017 +0200

ofz#1150 avoid out-of-bounds access to controlPoints

Change-Id: I82e1040d4dc3f0e688b49d949559a5a770127cf3

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 2716b64..2e5cc4a 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -7,6 +7,7 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include 
 #include 
 #include  // for memcpy
 #include 
@@ -1960,8 +1961,10 @@ void 
libvisio::VSDContentCollector::_generateBezierSegmentsFromNURBS(unsigned de
   unsigned b = degree + 1;
   std::vector< std::pair > points(degree + 1), 
nextPoints(degree + 1);
   unsigned i = 0;
-  for (; i <= degree; i++)
+  for (; i <= degree && i < controlPoints.size(); i++)
 points[i] = controlPoints[i];
+  if (degree >= controlPoints.size())
+fill(points.begin() + controlPoints.size(), points.end(), 
controlPoints.back());
   while (b < knotVector.size() - 1)
   {
 i = b;
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-04-11 Thread David Tardon
 src/lib/VSDFieldList.cpp |6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

New commits:
commit d8ee1ffbf7b2918e927a96502fd182cfcf50e1f6
Author: David Tardon 
Date:   Fri Apr 7 16:10:38 2017 +0200

ofz#989 do not leak existing field with the same ID

Change-Id: Iac76df2ae09965732ae5fd42036fdb59886f071f

diff --git a/src/lib/VSDFieldList.cpp b/src/lib/VSDFieldList.cpp
index 3f436b4..2f470a5 100644
--- a/src/lib/VSDFieldList.cpp
+++ b/src/lib/VSDFieldList.cpp
@@ -216,12 +216,14 @@ void libvisio::VSDFieldList::addFieldList(unsigned id, 
unsigned level)
 
 void libvisio::VSDFieldList::addTextField(unsigned id, unsigned level, int 
nameId, int formatStringId)
 {
-  m_elements[id] = new VSDTextField(id, level, nameId, formatStringId);
+  if (m_elements.find(id) == m_elements.end())
+m_elements[id] = new VSDTextField(id, level, nameId, formatStringId);
 }
 
 void libvisio::VSDFieldList::addNumericField(unsigned id, unsigned level, 
unsigned short format, double number, int formatStringId)
 {
-  m_elements[id] = new VSDNumericField(id, level, format, number, 
formatStringId);
+  if (m_elements.find(id) == m_elements.end())
+m_elements[id] = new VSDNumericField(id, level, format, number, 
formatStringId);
 }
 
 void libvisio::VSDFieldList::handle(VSDCollector *collector) const
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-03-31 Thread David Tardon
 src/lib/VSDParser.cpp  |   17 +
 src/lib/libvisio_utils.cpp |   27 +++
 src/lib/libvisio_utils.h   |2 ++
 3 files changed, 46 insertions(+)

New commits:
commit cf0303b0ca57d3f54aa50686d38aaa149c02d034
Author: David Tardon 
Date:   Fri Mar 31 15:29:25 2017 +0200

oss-fuzz: avoid big allocations

Change-Id: I852f5359241975931b384800042760723db05b3a

diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index 8ac21eb..9f87e51 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -21,6 +21,18 @@
 #include "VSDStylesCollector.h"
 #include "VSDMetaData.h"
 
+namespace
+{
+
+void sanitizeListLength(uint32_t , const std::size_t elem, 
librevenge::RVNGInputStream *const input)
+{
+  const unsigned long maxLength = libvisio::getRemainingLength(input) / elem;
+  if (length > maxLength)
+length = maxLength;
+}
+
+}
+
 libvisio::VSDParser::VSDParser(librevenge::RVNGInputStream *input, 
librevenge::RVNGDrawingInterface *painter, librevenge::RVNGInputStream 
*container)
   : m_input(input), m_painter(painter), m_container(container), m_header(), 
m_collector(0), m_shapeList(), m_currentLevel(0),
 m_stencils(), m_currentStencil(0), m_shape(), m_isStencilStarted(false), 
m_isInStyles(false),
@@ -914,6 +926,7 @@ void 
libvisio::VSDParser::readGeomList(librevenge::RVNGInputStream *input)
 uint32_t childrenListLength = readU32(input);
 input->seek(subHeaderLength, librevenge::RVNG_SEEK_CUR);
 std::vector geometryOrder;
+sanitizeListLength(childrenListLength, 4, input);
 geometryOrder.reserve(childrenListLength / sizeof(uint32_t));
 for (unsigned i = 0; i < (childrenListLength / sizeof(uint32_t)); i++)
   geometryOrder.push_back(readU32(input));
@@ -938,6 +951,7 @@ void 
libvisio::VSDParser::readCharList(librevenge::RVNGInputStream *input)
 uint32_t subHeaderLength = readU32(input);
 uint32_t childrenListLength = readU32(input);
 input->seek(subHeaderLength, librevenge::RVNG_SEEK_CUR);
+sanitizeListLength(childrenListLength, 4, input);
 std::vector characterOrder;
 characterOrder.reserve(childrenListLength / sizeof(uint32_t));
 for (unsigned i = 0; i < (childrenListLength / sizeof(uint32_t)); i++)
@@ -958,6 +972,7 @@ void 
libvisio::VSDParser::readParaList(librevenge::RVNGInputStream *input)
 uint32_t subHeaderLength = readU32(input);
 uint32_t childrenListLength = readU32(input);
 input->seek(subHeaderLength, librevenge::RVNG_SEEK_CUR);
+sanitizeListLength(childrenListLength, 4, input);
 std::vector paragraphOrder;
 paragraphOrder.reserve(childrenListLength / sizeof(uint32_t));
 for (unsigned i = 0; i < (childrenListLength / sizeof(uint32_t)); i++)
@@ -982,6 +997,7 @@ void 
libvisio::VSDParser::readTabsDataList(librevenge::RVNGInputStream *input)
 uint32_t subHeaderLength = readU32(input);
 uint32_t childrenListLength = readU32(input);
 input->seek(subHeaderLength, librevenge::RVNG_SEEK_CUR);
+sanitizeListLength(childrenListLength, 4, input);
 std::vector tabsOrder;
 tabsOrder.reserve(childrenListLength / sizeof(uint32_t));
 for (unsigned i = 0; i < (childrenListLength / sizeof(uint32_t)); i++)
@@ -1000,6 +1016,7 @@ void 
libvisio::VSDParser::readLayerList(librevenge::RVNGInputStream *input)
 uint32_t subHeaderLength = readU32(input);
 uint32_t childrenListLength = readU32(input);
 input->seek(subHeaderLength, librevenge::RVNG_SEEK_CUR);
+sanitizeListLength(childrenListLength, 4, input);
 std::vector layerOrder;
 layerOrder.reserve(childrenListLength / sizeof(uint32_t));
 for (unsigned i = 0; i < (childrenListLength / sizeof(uint32_t)); i++)
diff --git a/src/lib/libvisio_utils.cpp b/src/lib/libvisio_utils.cpp
index 08b5b2d..a46f833 100644
--- a/src/lib/libvisio_utils.cpp
+++ b/src/lib/libvisio_utils.cpp
@@ -109,6 +109,33 @@ const librevenge::RVNGString 
libvisio::getColourString(const Colour )
   return sColour;
 }
 
+unsigned long libvisio::getRemainingLength(librevenge::RVNGInputStream *const 
input)
+{
+  if (!input)
+throw EndOfStreamException();
+
+  const unsigned long begin = (unsigned long) input->tell();
+  unsigned long end = begin;
+
+  if (0 == input->seek(0, librevenge::RVNG_SEEK_END))
+  {
+end = (unsigned long) input->tell();
+  }
+  else
+  {
+// librevenge::RVNG_SEEK_END does not work. Use the harder way.
+while (!input->isEnd())
+{
+  readU8(input);
+  ++end;
+}
+  }
+
+  input->seek(begin, librevenge::RVNG_SEEK_SET);
+
+  return end - begin;
+}
+
 void libvisio::appendUCS4(librevenge::RVNGString , UChar32 ucs4Character)
 {
   // Convert carriage returns to new line characters
diff --git a/src/lib/libvisio_utils.h b/src/lib/libvisio_utils.h
index 2a4880e..ea63867 100644
--- a/src/lib/libvisio_utils.h
+++ b/src/lib/libvisio_utils.h
@@ -88,6 +88,8 @@ double readDouble(librevenge::RVNGInputStream *input);
 
 const librevenge::RVNGString 

[Libreoffice-commits] libvisio.git: src/lib

2017-03-30 Thread David Tardon
 src/lib/VSDContentCollector.cpp  |   12 ++--
 src/lib/VSDContentCollector.h|2 +-
 src/lib/VSDGeometryList.cpp  |   12 ++--
 src/lib/VSDGeometryList.h|6 +++---
 src/lib/VSDOutputElementList.cpp |4 ++--
 src/lib/VSDXParser.cpp   |2 +-
 6 files changed, 19 insertions(+), 19 deletions(-)

New commits:
commit 7d1543b4f7bb4578735767141356bf61565a9fd9
Author: David Tardon 
Date:   Thu Mar 30 20:16:42 2017 +0200

astyle

Change-Id: I6f5e0d95ec7a0e7d6c2db9e33d82568000747a3d

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index b4db6fe..4a876c2 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -2211,7 +2211,7 @@ void 
libvisio::VSDContentCollector::collectNURBSTo(unsigned id, unsigned level,
 _handleLevelChange(level);
 }
 
-void libvisio::VSDContentCollector::collectPolylineTo(unsigned /* id */ , 
unsigned level, double x, double y, unsigned char xType, unsigned char yType, 
const std::vector > )
+void libvisio::VSDContentCollector::collectPolylineTo(unsigned /* id */, 
unsigned level, double x, double y, unsigned char xType, unsigned char yType, 
const std::vector > )
 {
   _handleLevelChange(level);
 
@@ -2327,7 +2327,7 @@ void 
libvisio::VSDContentCollector::collectTxtXForm(unsigned level, const XForm
 {
   _handleLevelChange(level);
   if (m_txtxform)
-delete(m_txtxform);
+delete (m_txtxform);
   m_txtxform = new XForm(txtxform);
   m_txtxform->x = m_txtxform->pinX - m_txtxform->pinLocX;
   m_txtxform->y = m_txtxform->pinY - m_txtxform->pinLocY;
@@ -2674,7 +2674,7 @@ void libvisio::VSDContentCollector::collectText(unsigned 
level, const librevenge
 m_currentText = libvisio::VSDName(textStream, format);
 }
 
-void libvisio::VSDContentCollector::collectParaIX(unsigned /* id */ , unsigned 
level, unsigned charCount, const boost::optional ,
+void libvisio::VSDContentCollector::collectParaIX(unsigned /* id */, unsigned 
level, unsigned charCount, const boost::optional ,
   const 
boost::optional , const boost::optional , 
const boost::optional ,
   const 
boost::optional , const boost::optional , 
const boost::optional ,
   const 
boost::optional , const boost::optional 
,
@@ -2701,7 +2701,7 @@ void 
libvisio::VSDContentCollector::collectDefaultParaStyle(unsigned charCount,
bullet, bulletStr, 
bulletFont, bulletFontSize, textPosAfterBullet, flags), m_documentTheme);
 }
 
-void libvisio::VSDContentCollector::collectCharIX(unsigned /* id */ , unsigned 
level, unsigned charCount,
+void libvisio::VSDContentCollector::collectCharIX(unsigned /* id */, unsigned 
level, unsigned charCount,
   const 
boost::optional , const boost::optional , 
const boost::optional , const boost::optional ,
   const boost::optional 
, const boost::optional , const boost::optional 
, const boost::optional ,
   const boost::optional 
, const boost::optional , const 
boost::optional , const boost::optional ,
@@ -3475,7 +3475,7 @@ void 
libvisio::VSDContentCollector::_handleLevelChange(unsigned level)
 m_x = 0;
 m_y = 0;
 if (m_txtxform)
-  delete(m_txtxform);
+  delete (m_txtxform);
 m_txtxform = 0;
 m_xform = XForm();
 m_NURBSData.clear();
@@ -3497,7 +3497,7 @@ void libvisio::VSDContentCollector::startPage(unsigned 
pageId)
   m_originalX = 0.0;
   m_originalY = 0.0;
   if (m_txtxform)
-delete(m_txtxform);
+delete (m_txtxform);
   m_txtxform = 0;
   m_xform = XForm();
   m_x = 0;
diff --git a/src/lib/VSDContentCollector.h b/src/lib/VSDContentCollector.h
index d40b72f..edf7b2a 100644
--- a/src/lib/VSDContentCollector.h
+++ b/src/lib/VSDContentCollector.h
@@ -39,7 +39,7 @@ public:
   );
   virtual ~VSDContentCollector()
   {
-if (m_txtxform) delete(m_txtxform);
+if (m_txtxform) delete (m_txtxform);
   };
 
   void collectDocumentTheme(const VSDXTheme *theme);
diff --git a/src/lib/VSDGeometryList.cpp b/src/lib/VSDGeometryList.cpp
index 50cfb7e..1e83f49 100644
--- a/src/lib/VSDGeometryList.cpp
+++ b/src/lib/VSDGeometryList.cpp
@@ -156,7 +156,7 @@ public:
 class VSDPolylineTo1 : public VSDGeometryListElement
 {
 public:
-  VSDPolylineTo1(unsigned id , unsigned level, double x, double y, unsigned 
char xType, unsigned char yType, std::vector > 
points) :
+  VSDPolylineTo1(unsigned id, unsigned level, double x, double y, unsigned 
char xType, unsigned char yType, std::vector > 
points) :
 VSDGeometryListElement(id, level), m_x(x), m_y(y), m_xType(xType), 
m_yType(yType), m_points(points) {}
   

[Libreoffice-commits] libvisio.git: src/lib

2017-02-24 Thread Fridrich Štrba
 src/lib/VSDXTheme.cpp |  120 +-
 src/lib/VSDXTheme.h   |   25 ++
 src/lib/tokens.txt|   30 
 3 files changed, 174 insertions(+), 1 deletion(-)

New commits:
commit ca14a80bcb129878bb95d1187a8f3761e65b0842
Author: Fridrich Å trba 
Date:   Fri Feb 24 10:35:45 2017 +0100

Parse Font scheme

Change-Id: If2de16033a921443025f582431c4a4b03a9e7145

diff --git a/src/lib/VSDXTheme.cpp b/src/lib/VSDXTheme.cpp
index edf395c..a05484b 100644
--- a/src/lib/VSDXTheme.cpp
+++ b/src/lib/VSDXTheme.cpp
@@ -46,8 +46,24 @@ libvisio::VSDXClrScheme::VSDXClrScheme()
 {
 }
 
+libvisio::VSDXFont::VSDXFont()
+  : m_latinTypeFace(),
+m_eaTypeFace(),
+m_csTypeFace(),
+m_typeFaces()
+{
+}
+
+libvisio::VSDXFontScheme::VSDXFontScheme()
+  : m_majorFont(),
+m_minorFont(),
+m_schemeId(0)
+{
+}
+
 libvisio::VSDXTheme::VSDXTheme()
-  : m_clrScheme()
+  : m_clrScheme(),
+m_fontScheme()
 {
 }
 
@@ -63,6 +79,7 @@ int libvisio::VSDXTheme::getElementToken(xmlTextReaderPtr 
reader)
 
 bool libvisio::VSDXTheme::parse(librevenge::RVNGInputStream *input)
 {
+  VSD_DEBUG_MSG(("VSDXTheme::parse\n"));
   if (!input)
 return false;
 
@@ -84,6 +101,9 @@ bool libvisio::VSDXTheme::parse(librevenge::RVNGInputStream 
*input)
   case XML_A_CLRSCHEME:
 readClrScheme(reader.get());
 break;
+  case XML_A_FONTSCHEME:
+readFontScheme(reader.get());
+break;
   default:
 break;
   }
@@ -137,8 +157,104 @@ boost::optional 
libvisio::VSDXTheme::readSysClr(xmlTextReaderP
   return retVal;
 }
 
+void libvisio::VSDXTheme::readFontScheme(xmlTextReaderPtr reader)
+{
+  VSD_DEBUG_MSG(("VSDXTheme::readFontScheme\n"));
+  int ret = 1;
+  int tokenId = XML_TOKEN_INVALID;
+  int tokenType = -1;
+  do
+  {
+ret = xmlTextReaderRead(reader);
+tokenId = getElementToken(reader);
+if (XML_TOKEN_INVALID == tokenId)
+{
+  VSD_DEBUG_MSG(("VSDXTheme::readFontScheme: unknown token %s\n", 
xmlTextReaderConstName(reader)));
+}
+tokenType = xmlTextReaderNodeType(reader);
+switch (tokenId)
+{
+case XML_A_MAJORFONT:
+  readFont(reader, tokenId, m_fontScheme.m_majorFont);
+  break;
+case XML_A_MINORFONT:
+  readFont(reader, tokenId, m_fontScheme.m_minorFont);
+  break;
+case XML_VT_SCHEMEID:
+  break;
+default:
+  break;
+}
+  }
+  while ((XML_A_FONTSCHEME != tokenId || XML_READER_TYPE_END_ELEMENT != 
tokenType) && 1 == ret);
+}
+
+void libvisio::VSDXTheme::readFont(xmlTextReaderPtr reader, int idToken, 
VSDXFont )
+{
+  VSD_DEBUG_MSG(("VSDXTheme::readFont\n"));
+  int ret = 1;
+  int tokenId = XML_TOKEN_INVALID;
+  int tokenType = -1;
+  do
+  {
+ret = xmlTextReaderRead(reader);
+tokenId = getElementToken(reader);
+if (XML_TOKEN_INVALID == tokenId)
+{
+  VSD_DEBUG_MSG(("VSDXTheme::readFont: unknown token %s\n", 
xmlTextReaderConstName(reader)));
+}
+tokenType = xmlTextReaderNodeType(reader);
+switch (tokenId)
+{
+case XML_A_LATIN:
+  readTypeFace(reader, font.m_latinTypeFace);
+  break;
+case XML_A_EA:
+  readTypeFace(reader, font.m_eaTypeFace);
+  break;
+case XML_A_CS:
+  readTypeFace(reader, font.m_csTypeFace);
+  break;
+case XML_A_FONT:
+{
+  int script;
+  librevenge::RVNGString typeFace;
+  readTypeFace(reader, script, typeFace);
+  font.m_typeFaces[script] = typeFace;
+  break;
+}
+default:
+  break;
+}
+  }
+  while ((idToken != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) && 1 
== ret);
+}
+
+void libvisio::VSDXTheme::readTypeFace(xmlTextReaderPtr reader, 
librevenge::RVNGString )
+{
+  const shared_ptr sTypeFace(xmlTextReaderGetAttribute(reader, 
BAD_CAST("typeface")), xmlFree);
+  if (sTypeFace)
+  {
+typeFace.clear();
+typeFace.sprintf("%s", (const char *)sTypeFace.get());
+  }
+}
+
+void libvisio::VSDXTheme::readTypeFace(xmlTextReaderPtr reader, int , 
librevenge::RVNGString )
+{
+  const shared_ptr sScript(xmlTextReaderGetAttribute(reader, 
BAD_CAST("script")), xmlFree);
+  if (sScript)
+  {
+int token = libvisio::VSDXMLTokenMap::getTokenId(sScript.get());
+if (XML_TOKEN_INVALID != token)
+  script = token;
+  }
+  readTypeFace(reader, typeFace);
+}
+
 void libvisio::VSDXTheme::readClrScheme(xmlTextReaderPtr reader)
 {
+  VSD_DEBUG_MSG(("VSDXTheme::readClrScheme\n"));
   int ret = 1;
   int tokenId = XML_TOKEN_INVALID;
   int tokenType = -1;
@@ -238,6 +354,7 @@ void libvisio::VSDXTheme::readThemeColour(xmlTextReaderPtr 
reader, int idToken,
 
 void libvisio::VSDXTheme::readVariationClrSchemeLst(xmlTextReaderPtr reader)
 {
+  VSD_DEBUG_MSG(("VSDXTheme::readVariationClrSchemeLst\n"));
   int ret = 1;
   int tokenId = XML_TOKEN_INVALID;
   int tokenType = -1;
@@ -268,6 +385,7 @@ void 
libvisio::VSDXTheme::readVariationClrSchemeLst(xmlTextReaderPtr reader)
 
 void 

[Libreoffice-commits] libvisio.git: src/lib

2017-02-20 Thread Fridrich Štrba
 src/lib/VSDStyles.h |  128 +++-
 1 file changed, 77 insertions(+), 51 deletions(-)

New commits:
commit 3f2307fafcf063ae3abd26df1b68acb6ef4821de
Author: Fridrich Å trba 
Date:   Mon Feb 20 10:34:23 2017 +0100

Reformat

Change-Id: Ie279dc00725578641fd7780bb333047ec09fec36

diff --git a/src/lib/VSDStyles.h b/src/lib/VSDStyles.h
index 5bc020b..fbf6adc 100644
--- a/src/lib/VSDStyles.h
+++ b/src/lib/VSDStyles.h
@@ -64,15 +64,16 @@ struct VSDOptionalLineStyle
 struct VSDLineStyle
 {
   VSDLineStyle() :
-width(0.01), colour(), pattern(1), startMarker(0), endMarker(0), cap(0), 
rounding(0.0),
-qsLineColour(-1), qsLineMatrix(-1) {}
+width(0.01), colour(), pattern(1), startMarker(0), endMarker(0), cap(0),
+rounding(0.0), qsLineColour(-1), qsLineMatrix(-1) {}
   VSDLineStyle(double w, Colour col, unsigned char p, unsigned char sm,
unsigned char em, unsigned char c, double r, long qlc, long 
qlm) :
-width(w), colour(col), pattern(p), startMarker(sm), endMarker(em), cap(c), 
rounding(r),
-qsLineColour(qlc), qsLineMatrix(qlm) {}
+width(w), colour(col), pattern(p), startMarker(sm), endMarker(em), cap(c),
+rounding(r), qsLineColour(qlc), qsLineMatrix(qlm) {}
   VSDLineStyle(const VSDLineStyle ) :
-width(style.width), colour(style.colour), pattern(style.pattern), 
startMarker(style.startMarker),
-endMarker(style.endMarker), cap(style.cap), rounding(style.rounding), 
qsLineColour(style.qsLineColour),
+width(style.width), colour(style.colour), pattern(style.pattern),
+startMarker(style.startMarker), endMarker(style.endMarker), cap(style.cap),
+rounding(style.rounding), qsLineColour(style.qsLineColour),
 qsLineMatrix(style.qsLineMatrix) {}
   ~VSDLineStyle() {}
   void override(const VSDOptionalLineStyle , const VSDXTheme *theme)
@@ -120,10 +121,12 @@ struct VSDOptionalFillStyle
 shadowFgColour(sfgc), shadowPattern(shp), shadowOffsetX(shX), 
shadowOffsetY(shY),
 qsFillColour(qsFc), qsShadowColour(qsSc), qsFillMatrix(qsFm) {}
   VSDOptionalFillStyle(const VSDOptionalFillStyle ) :
-fgColour(style.fgColour), bgColour(style.bgColour), 
pattern(style.pattern), fgTransparency(style.fgTransparency),
-bgTransparency(style.bgTransparency), 
shadowFgColour(style.shadowFgColour), shadowPattern(style.shadowPattern),
-shadowOffsetX(style.shadowOffsetX), shadowOffsetY(style.shadowOffsetY), 
qsFillColour(style.qsFillColour),
-qsShadowColour(style.qsShadowColour), qsFillMatrix(style.qsFillMatrix) {}
+fgColour(style.fgColour), bgColour(style.bgColour), pattern(style.pattern),
+fgTransparency(style.fgTransparency), bgTransparency(style.bgTransparency),
+shadowFgColour(style.shadowFgColour), shadowPattern(style.shadowPattern),
+shadowOffsetX(style.shadowOffsetX), shadowOffsetY(style.shadowOffsetY),
+qsFillColour(style.qsFillColour), qsShadowColour(style.qsShadowColour),
+qsFillMatrix(style.qsFillMatrix) {}
   ~VSDOptionalFillStyle() {}
   void override(const VSDOptionalFillStyle )
   {
@@ -158,18 +161,22 @@ struct VSDOptionalFillStyle
 struct VSDFillStyle
 {
   VSDFillStyle()
-: fgColour(), bgColour(0xff, 0xff, 0xff, 0), pattern(0), 
fgTransparency(0), bgTransparency(0), shadowFgColour(),
-  shadowPattern(0), shadowOffsetX(0), shadowOffsetY(0), qsFillColour(-1), 
qsShadowColour(-1), qsFillMatrix(-1) {}
-  VSDFillStyle(const Colour , const Colour , unsigned char p, double 
fga, double bga, const Colour ,
-   unsigned char shp, double shX, double shY, long qsFc, long 
qsSc, long qsFm)
+: fgColour(), bgColour(0xff, 0xff, 0xff, 0), pattern(0), fgTransparency(0),
+  bgTransparency(0), shadowFgColour(),  shadowPattern(0), shadowOffsetX(0),
+  shadowOffsetY(0), qsFillColour(-1), qsShadowColour(-1), qsFillMatrix(-1) 
{}
+  VSDFillStyle(const Colour , const Colour , unsigned char p,
+   double fga, double bga, const Colour , unsigned char shp,
+   double shX, double shY, long qsFc, long qsSc, long qsFm)
 : fgColour(fgc), bgColour(bgc), pattern(p), fgTransparency(fga), 
bgTransparency(bga),
   shadowFgColour(sfgc), shadowPattern(shp), shadowOffsetX(shX), 
shadowOffsetY(shY),
   qsFillColour(qsFc), qsShadowColour(qsSc), qsFillMatrix(qsFm) {}
   VSDFillStyle(const VSDFillStyle ) :
-fgColour(style.fgColour), bgColour(style.bgColour), 
pattern(style.pattern), fgTransparency(style.fgTransparency),
-bgTransparency(style.bgTransparency), 
shadowFgColour(style.shadowFgColour), shadowPattern(style.shadowPattern),
-shadowOffsetX(style.shadowOffsetX), shadowOffsetY(style.shadowOffsetY), 
qsFillColour(style.qsFillColour),
-qsShadowColour(style.qsShadowColour), qsFillMatrix(style.qsFillMatrix) {}
+fgColour(style.fgColour), bgColour(style.bgColour), pattern(style.pattern),
+fgTransparency(style.fgTransparency), bgTransparency(style.bgTransparency),
+

[Libreoffice-commits] libvisio.git: src/lib

2017-02-06 Thread Fridrich Štrba
 src/lib/VSD5Parser.cpp |   13 +
 src/lib/VSD5Parser.h   |2 ++
 src/lib/VSDParser.h|2 +-
 3 files changed, 16 insertions(+), 1 deletion(-)

New commits:
commit fa12c4c3306da7c572bbd37c314f797d01cc26c1
Author: Fridrich Å trba 
Date:   Mon Apr 18 21:02:13 2016 +0200

We will need to override readXForm1D in VSD5Parser

Change-Id: I95efbae6f33a34b16fcda3b013f3adb64bd84ea8

diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index 3d9edcf..fd5b298 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -492,6 +492,19 @@ void 
libvisio::VSD5Parser::readMisc(librevenge::RVNGInputStream *input)
 m_shape.m_misc.m_hideText = false;
 }
 
+void libvisio::VSD5Parser::readXForm1D(librevenge::RVNGInputStream *input)
+{
+  if (!m_shape.m_xform1d)
+m_shape.m_xform1d = new XForm1D();
+  input->seek(1, librevenge::RVNG_SEEK_CUR);
+  m_shape.m_xform1d->beginX = readDouble(input);
+  input->seek(1, librevenge::RVNG_SEEK_CUR);
+  m_shape.m_xform1d->beginY = readDouble(input);
+  input->seek(1, librevenge::RVNG_SEEK_CUR);
+  m_shape.m_xform1d->endX = readDouble(input);
+  input->seek(1, librevenge::RVNG_SEEK_CUR);
+  m_shape.m_xform1d->endY = readDouble(input);
+}
 
 unsigned libvisio::VSD5Parser::getUInt(librevenge::RVNGInputStream *input)
 {
diff --git a/src/lib/VSD5Parser.h b/src/lib/VSD5Parser.h
index 886cc22..02326ee 100644
--- a/src/lib/VSD5Parser.h
+++ b/src/lib/VSD5Parser.h
@@ -57,6 +57,8 @@ protected:
 
   virtual void readMisc(librevenge::RVNGInputStream *input);
 
+  virtual void readXForm1D(librevenge::RVNGInputStream *input);
+
   virtual unsigned getUInt(librevenge::RVNGInputStream *input);
   virtual int getInt(librevenge::RVNGInputStream *input);
 
diff --git a/src/lib/VSDParser.h b/src/lib/VSDParser.h
index 3b11d35..bdd8b37 100644
--- a/src/lib/VSDParser.h
+++ b/src/lib/VSDParser.h
@@ -68,7 +68,7 @@ protected:
   void readInfiniteLine(librevenge::RVNGInputStream *input);
   void readShapeData(librevenge::RVNGInputStream *input);
   void readXFormData(librevenge::RVNGInputStream *input);
-  void readXForm1D(librevenge::RVNGInputStream *input);
+  virtual void readXForm1D(librevenge::RVNGInputStream *input);
   void readTxtXForm(librevenge::RVNGInputStream *input);
   void readShapeId(librevenge::RVNGInputStream *input);
   virtual void readShapeList(librevenge::RVNGInputStream *input);
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-02-06 Thread Fridrich Štrba
 src/lib/VDXParser.cpp   |8 ++--
 src/lib/VSD5Parser.cpp  |6 +--
 src/lib/VSD6Parser.cpp  |2 -
 src/lib/VSDCollector.h  |   11 +++--
 src/lib/VSDContentCollector.cpp |   22 ++-
 src/lib/VSDContentCollector.h   |   11 +++--
 src/lib/VSDParser.cpp   |   13 +++
 src/lib/VSDStyles.h |   74 +++-
 src/lib/VSDStylesCollector.cpp  |   10 +++--
 src/lib/VSDStylesCollector.h|   11 +++--
 src/lib/VSDXMLParserBase.cpp|5 +-
 src/lib/VSDXParser.cpp  |   48 -
 src/lib/tokens.txt  |8 
 13 files changed, 138 insertions(+), 91 deletions(-)

New commits:
commit 90bdec7116f35886a4a3bb687945e3ebbf9a9433
Author: Fridrich Å trba 
Date:   Mon Feb 6 11:36:58 2017 +0100

Some more reading of theme references

Change-Id: Ic9dd48b086eef11e82ecac6b19b9aea07844

diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp
index cfdb1f1..e81ef0c 100644
--- a/src/lib/VDXParser.cpp
+++ b/src/lib/VDXParser.cpp
@@ -372,9 +372,9 @@ void libvisio::VDXParser::readLine(xmlTextReaderPtr reader)
   while ((XML_LINE != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) && 
1 == ret && (!m_watcher || !m_watcher->isError()));
 
   if (m_isInStyles)
-m_collector->collectLineStyle(level, strokeWidth, colour, linePattern, 
startMarker, endMarker, lineCap, rounding);
+m_collector->collectLineStyle(level, strokeWidth, colour, linePattern, 
startMarker, endMarker,lineCap, rounding, -1, -1);
   else
-m_shape.m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, colour, 
linePattern, startMarker, endMarker, lineCap, rounding));
+m_shape.m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, colour, 
linePattern, startMarker, endMarker, lineCap, rounding, -1, -1));
 }
 
 void libvisio::VDXParser::readFillAndShadow(xmlTextReaderPtr reader)
@@ -453,7 +453,7 @@ void 
libvisio::VDXParser::readFillAndShadow(xmlTextReaderPtr reader)
 
   if (m_isInStyles)
 m_collector->collectFillStyle(level, fillColourFG, fillColourBG, 
fillPattern, fillFGTransparency,
-  fillBGTransparency, shadowPattern, 
shadowColourFG, shadowOffsetX, shadowOffsetY, -1, -1);
+  fillBGTransparency, shadowPattern, 
shadowColourFG, shadowOffsetX, shadowOffsetY, -1, -1, -1);
   else
   {
 if (m_isStencilStarted)
@@ -461,7 +461,7 @@ void 
libvisio::VDXParser::readFillAndShadow(xmlTextReaderPtr reader)
   VSD_DEBUG_MSG(("Found stencil fill\n"));
 }
 m_shape.m_fillStyle.override(VSDOptionalFillStyle(fillColourFG, 
fillColourBG, fillPattern, fillFGTransparency, fillBGTransparency,
-  shadowColourFG, 
shadowPattern, shadowOffsetX, shadowOffsetY, -1, -1));
+  shadowColourFG, 
shadowPattern, shadowOffsetX, shadowOffsetY, -1, -1, 1));
   }
 }
 
diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index 94dbbed..3d9edcf 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -213,9 +213,9 @@ void 
libvisio::VSD5Parser::readLine(librevenge::RVNGInputStream *input)
   unsigned char lineCap = readU8(input);
 
   if (m_isInStyles)
-m_collector->collectLineStyle(m_header.level, strokeWidth, c, linePattern, 
startMarker, endMarker, lineCap, rounding);
+m_collector->collectLineStyle(m_header.level, strokeWidth, c, linePattern, 
startMarker, endMarker, lineCap, rounding, -1, -1);
   else
-m_shape.m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, c, 
linePattern, startMarker, endMarker, lineCap, rounding));
+m_shape.m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, c, 
linePattern, startMarker, endMarker, lineCap, rounding, -1, -1));
 }
 
 void libvisio::VSD5Parser::readParaIX(librevenge::RVNGInputStream *input)
@@ -356,7 +356,7 @@ void 
libvisio::VSD5Parser::readFillAndShadow(librevenge::RVNGInputStream *input)
 }
 m_shape.m_fillStyle.override(VSDOptionalFillStyle(colourFG, colourBG, 
fillPattern, 0.0,
   0.0, shfgc, 
shadowPattern, shadowOffsetX,
-  shadowOffsetY, -1, -1));
+  shadowOffsetY, -1, -1, 
-1));
   }
 }
 
diff --git a/src/lib/VSD6Parser.cpp b/src/lib/VSD6Parser.cpp
index 9979895..745de2f 100644
--- a/src/lib/VSD6Parser.cpp
+++ b/src/lib/VSD6Parser.cpp
@@ -305,7 +305,7 @@ void 
libvisio::VSD6Parser::readFillAndShadow(librevenge::RVNGInputStream *input)
 }
 m_shape.m_fillStyle.override(VSDOptionalFillStyle(colourFG, colourBG, 
fillPattern, fillFGTransparency,
   fillBGTransparency, 
shadowFG, shadowPattern,
-  shadowOffsetX, 
shadowOffsetY, -1, -1));
+ 

[Libreoffice-commits] libvisio.git: src/lib

2017-02-06 Thread Fridrich Štrba
 src/lib/VDXParser.cpp   |8 +-
 src/lib/VSD5Parser.cpp  |3 
 src/lib/VSD6Parser.cpp  |3 
 src/lib/VSDCollector.h  |   11 +--
 src/lib/VSDContentCollector.cpp |   84 +++--
 src/lib/VSDContentCollector.h   |   15 ++--
 src/lib/VSDParser.cpp   |8 +-
 src/lib/VSDStencils.cpp |   11 +--
 src/lib/VSDStencils.h   |1 
 src/lib/VSDStyles.cpp   |   25 +--
 src/lib/VSDStyles.h |  134 ++--
 src/lib/VSDStylesCollector.cpp  |   24 ++-
 src/lib/VSDStylesCollector.h|   11 +--
 src/lib/VSDXMLParserBase.cpp|3 
 src/lib/VSDXParser.cpp  |   44 +++--
 15 files changed, 161 insertions(+), 224 deletions(-)

New commits:
commit ed97f8fb2124f3b19645b3ad5f756cabe88510eb
Author: Fridrich Å trba 
Date:   Mon Feb 6 10:16:34 2017 +0100

Theme fill and shadow colour

Change-Id: I6659c65d0f940b3762b76dad01b3a353df59de9a

diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp
index 9f39ada..cfdb1f1 100644
--- a/src/lib/VDXParser.cpp
+++ b/src/lib/VDXParser.cpp
@@ -453,7 +453,7 @@ void 
libvisio::VDXParser::readFillAndShadow(xmlTextReaderPtr reader)
 
   if (m_isInStyles)
 m_collector->collectFillStyle(level, fillColourFG, fillColourBG, 
fillPattern, fillFGTransparency,
-  fillBGTransparency, shadowPattern, 
shadowColourFG, shadowOffsetX, shadowOffsetY);
+  fillBGTransparency, shadowPattern, 
shadowColourFG, shadowOffsetX, shadowOffsetY, -1, -1);
   else
   {
 if (m_isStencilStarted)
@@ -461,7 +461,7 @@ void 
libvisio::VDXParser::readFillAndShadow(xmlTextReaderPtr reader)
   VSD_DEBUG_MSG(("Found stencil fill\n"));
 }
 m_shape.m_fillStyle.override(VSDOptionalFillStyle(fillColourFG, 
fillColourBG, fillPattern, fillFGTransparency, fillBGTransparency,
-  shadowColourFG, 
shadowPattern, shadowOffsetX, shadowOffsetY));
+  shadowColourFG, 
shadowPattern, shadowOffsetX, shadowOffsetY, -1, -1));
   }
 }
 
@@ -904,8 +904,8 @@ void libvisio::VDXParser::readTextBlock(xmlTextReaderPtr 
reader)
 m_collector->collectTextBlockStyle(level, leftMargin, rightMargin, 
topMargin, bottomMargin,
verticalAlign, !!bgClrId, bgColour, 
defaultTabStop, textDirection);
   else
-m_shape.m_textBlockStyle.override(VSDOptionalTextBlockStyle(leftMargin, 
rightMargin, topMargin, bottomMargin,
-verticalAlign, 
!!bgClrId, bgColour, defaultTabStop, textDirection));
+m_shape.m_textBlockStyle.override(VSDOptionalTextBlockStyle(leftMargin, 
rightMargin, topMargin, bottomMargin, verticalAlign,
+!!bgClrId, 
bgColour, defaultTabStop, textDirection));
 }
 
 xmlChar *libvisio::VDXParser::readStringData(xmlTextReaderPtr reader)
diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index 747be18..94dbbed 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -355,7 +355,8 @@ void 
libvisio::VSD5Parser::readFillAndShadow(librevenge::RVNGInputStream *input)
   shadowOffsetY = m_shadowOffsetY;
 }
 m_shape.m_fillStyle.override(VSDOptionalFillStyle(colourFG, colourBG, 
fillPattern, 0.0,
-  0.0, shfgc, 
shadowPattern, shadowOffsetX, shadowOffsetY));
+  0.0, shfgc, 
shadowPattern, shadowOffsetX,
+  shadowOffsetY, -1, -1));
   }
 }
 
diff --git a/src/lib/VSD6Parser.cpp b/src/lib/VSD6Parser.cpp
index 34cde71..9979895 100644
--- a/src/lib/VSD6Parser.cpp
+++ b/src/lib/VSD6Parser.cpp
@@ -304,7 +304,8 @@ void 
libvisio::VSD6Parser::readFillAndShadow(librevenge::RVNGInputStream *input)
   shadowOffsetY = m_shadowOffsetY;
 }
 m_shape.m_fillStyle.override(VSDOptionalFillStyle(colourFG, colourBG, 
fillPattern, fillFGTransparency,
-  fillBGTransparency, 
shadowFG, shadowPattern, shadowOffsetX, shadowOffsetY));
+  fillBGTransparency, 
shadowFG, shadowPattern,
+  shadowOffsetX, 
shadowOffsetY, -1, -1));
   }
 }
 
diff --git a/src/lib/VSDCollector.h b/src/lib/VSDCollector.h
index 6e16bc2..4012d37 100644
--- a/src/lib/VSDCollector.h
+++ b/src/lib/VSDCollector.h
@@ -23,6 +23,7 @@ public:
   VSDCollector() {};
   virtual ~VSDCollector() {}
 
+  virtual void collectDocumentTheme(const VSDXTheme *theme) = 0;
   virtual void collectEllipticalArcTo(unsigned id, unsigned level, double x3, 
double y3, double x2, double y2, double angle, double ecc) = 0;
   virtual void 

[Libreoffice-commits] libvisio.git: src/lib

2017-02-05 Thread Fridrich Štrba
 src/lib/VSDXMLParserBase.cpp |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit 3b137389ae81d3b3ae326561d7a314e38afa5e4c
Author: Fridrich Å trba 
Date:   Sun Feb 5 22:48:58 2017 +0100

This one was wrong

Change-Id: If578f9289aef9b4265545ef4b10215ea555091d7

diff --git a/src/lib/VSDXMLParserBase.cpp b/src/lib/VSDXMLParserBase.cpp
index ec2a4ab..d1b8676 100644
--- a/src/lib/VSDXMLParserBase.cpp
+++ b/src/lib/VSDXMLParserBase.cpp
@@ -2184,7 +2184,7 @@ int 
libvisio::VSDXMLParserBase::readExtendedColourData(Colour , long ,
 if (iter != m_colours.end())
   value = iter->second;
 else
-  return -1000;
+  idx = -1;
   }
 }
 else
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-02-05 Thread Fridrich Štrba
 src/lib/VSDXMLParserBase.cpp |9 +++--
 1 file changed, 7 insertions(+), 2 deletions(-)

New commits:
commit fed7358999a4a49576cebc322fdf03848f130414
Author: Fridrich Å trba 
Date:   Sun Feb 5 22:31:44 2017 +0100

Return uninitialized boost::optional instead of default Colour value

Change-Id: I7d3d48ac80cae9bc7fca5e5a8452122fef40c786

diff --git a/src/lib/VSDXMLParserBase.cpp b/src/lib/VSDXMLParserBase.cpp
index da5581f..ec2a4ab 100644
--- a/src/lib/VSDXMLParserBase.cpp
+++ b/src/lib/VSDXMLParserBase.cpp
@@ -2184,9 +2184,11 @@ int 
libvisio::VSDXMLParserBase::readExtendedColourData(Colour , long ,
 if (iter != m_colours.end())
   value = iter->second;
 else
-  idx = -1;
+  return -1000;
   }
 }
+else
+  return -1000;
 return 1;
   }
   return -1;
@@ -2196,7 +2198,10 @@ int 
libvisio::VSDXMLParserBase::readExtendedColourData(boost::optional &
 {
   Colour tmpValue;
   int ret = readExtendedColourData(tmpValue, reader);
-  value = tmpValue;
+  if (ret != -1000)
+value = tmpValue;
+  else
+ret = 1;
   return ret;
 }
 
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-01-19 Thread Fridrich Štrba
 src/lib/VSDParser.cpp |   49 ++---
 1 file changed, 46 insertions(+), 3 deletions(-)

New commits:
commit ea5f92515f98766062c2c24c0726ceb761abc19a
Author: Fridrich Å trba 
Date:   Thu Jan 19 09:48:15 2017 +0100

Deduce text encoding from font name

Change-Id: I168765794d9d7598e2429f68f9a1d3c936ef8202

diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index 680e14b..52f7d0d 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -1733,15 +1733,56 @@ void 
libvisio::VSDParser::readFontIX(librevenge::RVNGInputStream *input)
   unsigned char codePage = (unsigned char)(getUInt(input) & 0xff);
   tmpAdjust -= input->tell();
 
-  librevenge::RVNGBinaryData textStream;
+  std::string fontName;
 
   for (long i = 0; i < (long)(m_header.dataLength + tmpAdjust); i++)
   {
-unsigned char curchar = readU8(input);
+char curchar = (char)readU8(input);
 if (curchar == 0)
   break;
-textStream.append(curchar);
+fontName.append(1, curchar);
   }
+
+  if (!codePage)
+  {
+// Try to parse the font name for codePage
+size_t length = fontName.length();
+size_t found = std::string::npos;
+
+if (length > 3 && (found=fontName.find(" CE", length - 3)) != 
std::string::npos)
+  codePage = 0xee;
+else if (length > 9 && (found=fontName.rfind(" Cyrillic", length - 9)) != 
std::string::npos)
+  codePage = 0xcc;
+else if (length > 4 && (found=fontName.rfind(" Cyr", length - 4)) != 
std::string::npos)
+  codePage = 0xcc;
+else if (length > 4 && (found=fontName.rfind(" CYR", length - 4)) != 
std::string::npos)
+  codePage = 0xcc;
+else if (length > 7 && (found=fontName.rfind(" Baltic", length - 7)) != 
std::string::npos)
+  codePage = 0xba;
+else if (length > 6 && (found=fontName.rfind(" Greek", length - 6)) != 
std::string::npos)
+  codePage = 0xa1;
+else if (length > 4 && (found=fontName.rfind(" Tur", length - 4)) != 
std::string::npos)
+  codePage = 0xa2;
+else if (length > 4 && (found=fontName.rfind(" TUR", length - 4)) != 
std::string::npos)
+  codePage = 0xa2;
+else if (length > 7 && (found=fontName.rfind(" Hebrew", length - 7)) != 
std::string::npos)
+  codePage = 0xb1;
+else if (length > 7 && (found=fontName.rfind(" Arabic", length - 7)) != 
std::string::npos)
+  codePage = 0xb2;
+else if (length > 5 && (found=fontName.rfind(" Thai", length - 5)) != 
std::string::npos)
+  codePage = 0xde;
+else if (length >= 4 && (found=fontName.find("GOST", 0, 4)) != 
std::string::npos)
+{
+  codePage = 0xcc;
+  found = std::string::npos;
+}
+
+if (found != std::string::npos)
+{
+  fontName.erase(found, std::string::npos);
+}
+  }
+
   TextFormat format = libvisio::VSD_TEXT_ANSI;
   switch (codePage)
   {
@@ -1793,6 +1834,8 @@ void 
libvisio::VSDParser::readFontIX(librevenge::RVNGInputStream *input)
   default:
 break;
   }
+
+  librevenge::RVNGBinaryData textStream((const unsigned char 
*)fontName.c_str(), fontName.length());
   m_fonts[m_header.id] = VSDName(textStream, format);
 }
 
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2017-01-18 Thread Fridrich Štrba
 src/lib/VSDDocumentStructure.h |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit fd6c528dfb263f4bc6d288afd469089cfba0ef15
Author: Fridrich Å trba 
Date:   Wed Jan 18 16:02:15 2017 +0100

Wrong code for VSD_USER_DEFINED_CELLS

Change-Id: I056e7e8fdc4b858bcfc8e992d12278ca08f44610

diff --git a/src/lib/VSDDocumentStructure.h b/src/lib/VSDDocumentStructure.h
index ec5c0fb..1f022b7 100644
--- a/src/lib/VSDDocumentStructure.h
+++ b/src/lib/VSDDocumentStructure.h
@@ -100,7 +100,7 @@
 #define VSD_ACT_ID 0xa9
 #define VSD_CONTROL 0xaa
 
-#define VSD_USER_DEFINED_CELLS 0xb5
+#define VSD_USER_DEFINED_CELLS 0xb4
 #define VSD_TABS_DATA_4 0xb5
 #define VSD_CUSTOM_PROPS 0xb6
 #define VSD_RULER_GRID 0xb7
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2016-05-29 Thread Julien Nabet
 src/lib/VSDContentCollector.cpp |   10 +-
 1 file changed, 5 insertions(+), 5 deletions(-)

New commits:
commit 10f1e175b2dc83cc486614ac5a7a3b286eea7c0a
Author: Julien Nabet 
Date:   Sun May 29 15:52:38 2016 +0200

cppcheck: Prefer prefix ++/-- operators for non-primitive types

Change-Id: Ib375053b5830f8120dccdfa4278c4138b02deba8

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index fb216b0..3178937 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -760,11 +760,11 @@ void libvisio::VSDContentCollector::_flushText()
  * last one. */
 if (!paraNumRemaining)
 {
-  paraIt++;
+  ++paraIt;
   if (paraIt != m_paraFormats.end())
 paraNumRemaining = paraIt->charCount;
   else
-paraIt--;
+--paraIt;
 }
 
 /* Decrease the count of remaining characters in the same span,
@@ -777,7 +777,7 @@ void libvisio::VSDContentCollector::_flushText()
  * the last one. */
 if (!charNumRemaining)
 {
-  charIt++;
+  ++charIt;
   if (charIt != m_charFormats.end())
   {
 charNumRemaining = charIt->charCount;
@@ -791,7 +791,7 @@ void libvisio::VSDContentCollector::_flushText()
 }
   }
   else
-charIt--;
+--charIt;
 }
 
 /* Decrease the count of remaining characters using the same
@@ -802,7 +802,7 @@ void libvisio::VSDContentCollector::_flushText()
  * last one. */
 if (!tabNumRemaining)
 {
-  tabIt++;
+  ++tabIt;
   if (tabIt != m_tabSets.end())
 tabNumRemaining = tabIt->m_numChars;
   else
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2016-04-18 Thread Fridrich Štrba
 src/lib/VSD6Parser.cpp |   35 +++
 src/lib/VSDParser.cpp  |   40 +---
 2 files changed, 72 insertions(+), 3 deletions(-)

New commits:
commit 21027b7349a17cc18f74b28e9f1b32358e47135f
Author: Fridrich Å trba 
Date:   Mon Apr 18 20:50:00 2016 +0200

Some reading of shape ids of shapes that a connector connects

Change-Id: I0492fea6ad37a590580ec2c2a05ef2e990f9efa1

diff --git a/src/lib/VSD6Parser.cpp b/src/lib/VSD6Parser.cpp
index 8f2bb0b..34cde71 100644
--- a/src/lib/VSD6Parser.cpp
+++ b/src/lib/VSD6Parser.cpp
@@ -401,11 +401,46 @@ void 
libvisio::VSD6Parser::readTextField(librevenge::RVNGInputStream *input)
 
 void libvisio::VSD6Parser::readMisc(librevenge::RVNGInputStream *input)
 {
+  unsigned long initialPosition = input->tell();
   unsigned char flags = readU8(input);
   if (flags & 0x20)
 m_shape.m_misc.m_hideText = true;
   else
 m_shape.m_misc.m_hideText = false;
+
+  input->seek(initialPosition+23, librevenge::RVNG_SEEK_SET);
+  while (!input->isEnd() && (unsigned long) input->tell() < (unsigned 
long)(initialPosition+m_header.dataLength+m_header.trailer))
+  {
+unsigned long inputPos = input->tell();
+unsigned length = readU32(input);
+if (!length)
+  break;
+unsigned blockType = readU8(input);
+input->seek(1, librevenge::RVNG_SEEK_CUR);
+if (blockType == 2)
+{
+  if (0x74 == readU8(input))
+  {
+if (0x604e == readU32(input))
+{
+  unsigned shapeId = readU32(input);
+  if (0x7a == readU8(input))
+  {
+if (0x4073 == readU32(input))
+{
+  if (!m_shape.m_xform1d)
+m_shape.m_xform1d = new XForm1D();
+  if (m_shape.m_xform1d->beginId == MINUS_ONE)
+m_shape.m_xform1d->beginId = shapeId;
+  else if (m_shape.m_xform1d->endId == MINUS_ONE)
+m_shape.m_xform1d->endId = shapeId;
+}
+  }
+}
+  }
+}
+input->seek(inputPos + length, librevenge::RVNG_SEEK_SET);
+  }
 }
 
 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index 22b356e..26b1d9c 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -1119,9 +1119,8 @@ void 
libvisio::VSDParser::readXFormData(librevenge::RVNGInputStream *input)
 
 void libvisio::VSDParser::readXForm1D(librevenge::RVNGInputStream *input)
 {
-  if (m_shape.m_xform1d)
-delete m_shape.m_xform1d;
-  m_shape.m_xform1d = new XForm1D();
+  if (!m_shape.m_xform1d)
+m_shape.m_xform1d = new XForm1D();
   input->seek(1, librevenge::RVNG_SEEK_CUR);
   m_shape.m_xform1d->beginX = readDouble(input);
   input->seek(1, librevenge::RVNG_SEEK_CUR);
@@ -2155,11 +2154,46 @@ void 
libvisio::VSDParser::readTextField(librevenge::RVNGInputStream *input)
 
 void libvisio::VSDParser::readMisc(librevenge::RVNGInputStream *input)
 {
+  unsigned long initialPosition = input->tell();
   unsigned char flags = readU8(input);
   if (flags & 0x20)
 m_shape.m_misc.m_hideText = true;
   else
 m_shape.m_misc.m_hideText = false;
+
+  input->seek(initialPosition+45, librevenge::RVNG_SEEK_SET);
+  while (!input->isEnd() && (unsigned long) input->tell() < (unsigned 
long)(initialPosition+m_header.dataLength+m_header.trailer))
+  {
+unsigned long inputPos = input->tell();
+unsigned length = readU32(input);
+if (!length)
+  break;
+unsigned blockType = readU8(input);
+input->seek(1, librevenge::RVNG_SEEK_CUR);
+if (blockType == 2)
+{
+  if (0x74 == readU8(input))
+  {
+if (0x604e == readU32(input))
+{
+  unsigned shapeId = readU32(input);
+  if (0x7a == readU8(input))
+  {
+if (0x4073 == readU32(input))
+{
+  if (!m_shape.m_xform1d)
+m_shape.m_xform1d = new XForm1D();
+  if (m_shape.m_xform1d->beginId == MINUS_ONE)
+m_shape.m_xform1d->beginId = shapeId;
+  else if (m_shape.m_xform1d->endId == MINUS_ONE)
+m_shape.m_xform1d->endId = shapeId;
+}
+  }
+}
+  }
+}
+input->seek(inputPos + length, librevenge::RVNG_SEEK_SET);
+  }
 }
 
 libvisio::Colour libvisio::VSDParser::_colourFromIndex(unsigned idx)
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2016-03-22 Thread David Tardon
 src/lib/VisioDocument.cpp |   15 ---
 1 file changed, 15 deletions(-)

New commits:
commit be8436672d46c5d2870b27265355e493fc7c86be
Author: David Tardon 
Date:   Tue Mar 22 14:59:03 2016 +0100

tdf#98791 remove namespace check for VDX

... to allow import of documents created by 3rd-party applications that
cannot be bothered to produce a valid XML (like lucidchart.com).

Change-Id: I70dda9a7d6e90e84d0eb78bd4dfa153e3e093528

diff --git a/src/lib/VisioDocument.cpp b/src/lib/VisioDocument.cpp
index 6304391..b8099e5 100644
--- a/src/lib/VisioDocument.cpp
+++ b/src/lib/VisioDocument.cpp
@@ -271,21 +271,6 @@ static bool isXmlVisioDocument(librevenge::RVNGInputStream 
*input)
 {
   return false;
 }
-
-// Checking the two possible namespaces of VDX documents. This may be a 
bit strict
-// and filter out some of third party VDX documents. If that happens, 
commenting out
-// this block could be an option.
-const xmlChar *nsname = xmlTextReaderConstNamespaceUri(reader.get());
-if (!nsname)
-{
-  return false;
-}
-if (!xmlStrEqual(nsname, 
BAD_CAST("urn:schemas-microsoft-com:office:visio"))
-&& !xmlStrEqual(nsname, 
BAD_CAST("http://schemas.microsoft.com/visio/2003/core;)))
-{
-  return false;
-}
-
 return true;
   }
   catch (...)
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2016-01-18 Thread Fridrich Štrba
 src/lib/VSD5Parser.cpp  |9 +
 src/lib/VSD6Parser.cpp  |9 +
 src/lib/VSDCharacterList.cpp|   16 
 src/lib/VSDCharacterList.h  |2 +-
 src/lib/VSDCollector.h  |7 ---
 src/lib/VSDContentCollector.cpp |   21 -
 src/lib/VSDContentCollector.h   |7 ---
 src/lib/VSDParser.cpp   |   11 ++-
 src/lib/VSDStyles.h |   20 
 src/lib/VSDStylesCollector.cpp  |6 +++---
 src/lib/VSDStylesCollector.h|7 ---
 src/lib/VSDXMLParserBase.cpp|   11 +++
 12 files changed, 71 insertions(+), 55 deletions(-)

New commits:
commit e076cd1b5a400b32a8aa49fc87feaf3b1d3ba52e
Author: Fridrich Å trba 
Date:   Mon Jan 18 12:26:52 2016 +0100

Read and use the information about scaling of the width of font

Change-Id: Ica723149a7165577323a7eb6a258cd8bd79026b3

diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index 31cc1c0..7900fa5 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -296,7 +296,8 @@ void 
libvisio::VSD5Parser::readCharIX(librevenge::RVNGInputStream *input)
   if (fontMod & 1) superscript = true;
   if (fontMod & 2) subscript = true;
 
-  input->seek(4, librevenge::RVNG_SEEK_CUR);
+  double scaleWidth = (double)(readU16(input)) / 1.0;
+  input->seek(2, librevenge::RVNG_SEEK_CUR);
   double fontSize = readDouble(input);
 
 #if 0
@@ -309,7 +310,7 @@ void 
libvisio::VSD5Parser::readCharIX(librevenge::RVNGInputStream *input)
   if (m_isInStyles)
 m_collector->collectCharIXStyle(m_header.id, m_header.level, charCount, 
font, fontColour, fontSize,
 bold, italic, underline, doubleunderline, 
strikeout, doublestrikeout,
-allcaps, initcaps, smallcaps, superscript, 
subscript);
+allcaps, initcaps, smallcaps, superscript, 
subscript, scaleWidth);
   else
   {
 if (m_isStencilStarted)
@@ -319,10 +320,10 @@ void 
libvisio::VSD5Parser::readCharIX(librevenge::RVNGInputStream *input)
 
 m_shape.m_charStyle.override(VSDOptionalCharStyle(charCount, font, 
fontColour, fontSize,
   bold, italic, underline, 
doubleunderline, strikeout, doublestrikeout,
-  allcaps, initcaps, 
smallcaps, superscript, subscript));
+  allcaps, initcaps, 
smallcaps, superscript, subscript, scaleWidth));
 m_shape.m_charList.addCharIX(m_header.id, m_header.level, charCount, font, 
fontColour, fontSize,
  bold, italic, underline, doubleunderline, 
strikeout, doublestrikeout,
- allcaps, initcaps, smallcaps, superscript, 
subscript);
+ allcaps, initcaps, smallcaps, superscript, 
subscript, scaleWidth);
   }
 }
 
diff --git a/src/lib/VSD6Parser.cpp b/src/lib/VSD6Parser.cpp
index d126433..c5d8b79 100644
--- a/src/lib/VSD6Parser.cpp
+++ b/src/lib/VSD6Parser.cpp
@@ -139,7 +139,8 @@ void 
libvisio::VSD6Parser::readCharIX(librevenge::RVNGInputStream *input)
   if (fontMod & 1) superscript = true;
   if (fontMod & 2) subscript = true;
 
-  input->seek(4, librevenge::RVNG_SEEK_CUR);
+  double scaleWidth = (double)(readU16(input)) / 1.0;
+  input->seek(2, librevenge::RVNG_SEEK_CUR);
   double fontSize = readDouble(input);
 
   fontMod = readU8(input);
@@ -150,7 +151,7 @@ void 
libvisio::VSD6Parser::readCharIX(librevenge::RVNGInputStream *input)
   if (m_isInStyles)
 m_collector->collectCharIXStyle(m_header.id, m_header.level, charCount, 
font, fontColour, fontSize,
 bold, italic, underline, doubleunderline, 
strikeout, doublestrikeout,
-allcaps, initcaps, smallcaps, superscript, 
subscript);
+allcaps, initcaps, smallcaps, superscript, 
subscript, scaleWidth);
   else
   {
 if (m_isStencilStarted)
@@ -160,10 +161,10 @@ void 
libvisio::VSD6Parser::readCharIX(librevenge::RVNGInputStream *input)
 
 m_shape.m_charStyle.override(VSDOptionalCharStyle(charCount, font, 
fontColour, fontSize,
   bold, italic, underline, 
doubleunderline, strikeout, doublestrikeout,
-  allcaps, initcaps, 
smallcaps, superscript, subscript));
+  allcaps, initcaps, 
smallcaps, superscript, subscript, scaleWidth));
 m_shape.m_charList.addCharIX(m_header.id, m_header.level, charCount, font, 
fontColour, fontSize,
  bold, italic, underline, doubleunderline, 
strikeout, doublestrikeout,
- allcaps, initcaps, smallcaps, superscript, 
subscript);
+ 

[Libreoffice-commits] libvisio.git: src/lib

2016-01-15 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp |7 +++
 src/lib/VSDParser.cpp   |3 +++
 2 files changed, 10 insertions(+)

New commits:
commit 49e7e5482d979866ac92981af0cf83d09610bc80
Author: Fridrich Å trba 
Date:   Fri Jan 15 12:03:21 2016 +0100

Consider stencil txtxform in binary formats (fixes tdf#67914)

Change-Id: I45de3aab09de8320999476fb91814f048274a905

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 3018b89..e65359d 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -2253,6 +2253,13 @@ void 
libvisio::VSDContentCollector::collectShape(unsigned id, unsigned level, un
   m_stencilNames[iterData->first] = nameString;
 }
 
+if (m_stencilShape->m_txtxform)
+{
+  if (m_txtxform)
+delete m_txtxform;
+  m_txtxform = new XForm(*(m_stencilShape->m_txtxform));
+}
+
 m_stencilFields = m_stencilShape->m_fields;
 for (unsigned i = 0; i < m_stencilFields.size(); i++)
 {
diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index e82a678..fd85a2c 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -1280,6 +1280,9 @@ void 
libvisio::VSDParser::readShape(librevenge::RVNGInputStream *input)
   {
 if (tmpShape->m_foreign)
   m_shape.m_foreign = new ForeignData(*(tmpShape->m_foreign));
+m_shape.m_xform = tmpShape->m_xform;
+if (tmpShape->m_txtxform)
+  m_shape.m_txtxform = new XForm(*(tmpShape->m_txtxform));
 m_shape.m_tabSets = tmpShape->m_tabSets;
 m_shape.m_text = tmpShape->m_text;
 m_shape.m_textFormat = tmpShape->m_textFormat;
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2016-01-02 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp |   63 +++-
 1 file changed, 30 insertions(+), 33 deletions(-)

New commits:
commit 2f36fc6cc89d5778f7f57632cecd516d06fc8d84
Author: Fridrich Å trba 
Date:   Sat Jan 2 13:27:16 2016 +0100

Extract logic in order to not repeat oneself

Change-Id: I130ec67a55c486c5b3a0a9e4fb00bd7d1f22a057

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index c20e626..8ded8c8 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -31,7 +31,30 @@ static unsigned bitmapId = 0;
 #define M_PI 3.14159265358979323846
 #endif
 
-#define SURROGATE_VALUE(h,l) (((h) - 0xd800) * 0x400 + (l) - 0xdc00 + 0x1)
+namespace
+{
+
+void computeRounding(double , double , double x0, double y0, 
double x, double y, double rounding,
+ double , double , double , double , 
double )
+{
+  double halfLength = sqrt((y-y0)*(y-y0)+(x-x0)*(x-x0)) / 2.0;
+  if (maxRounding > halfLength)
+maxRounding = halfLength;
+  if (maxRounding > rounding)
+maxRounding = rounding;
+  double lambda1 = atan2(y0-prevY, x0-prevX);
+  newX0 = x0-maxRounding*cos(lambda1);
+  newY0 = y0-maxRounding*sin(lambda1);
+  double lambda2 = atan2(y-y0, x-x0);
+  newX = x0+maxRounding*cos(lambda2);
+  newY = y0+maxRounding*sin(lambda2);
+  prevX = newX;
+  prevY = newY;
+  maxRounding = halfLength;
+
+}
+
+} // anonymous namespace
 
 libvisio::VSDContentCollector::VSDContentCollector(
   librevenge::RVNGDrawingInterface *painter,
@@ -396,19 +419,8 @@ void libvisio::VSDContentCollector::_convertToPath(const 
std::vectorgetDouble() : 0.0;
   double y = segmentVector[i+1]["svg:y"] ? 
segmentVector[i+1]["svg:y"]->getDouble() : 0.0;
-  if (maxRounding > rounding)
-maxRounding = sqrt((y0-prevY)*(y0-prevY) + (x0-prevX)*(x0-prevX)) 
/ 2.0;
-  double halfLength = sqrt((y-y0)*(y-y0)+(x-x0)*(x-x0)) / 2.0;
-  if (maxRounding > halfLength)
-maxRounding = halfLength;
-  if (maxRounding > rounding)
-maxRounding = rounding;
-  double lambda = atan2(y0-prevY, x0-prevX);
-  double newX0 = x0-maxRounding*cos(lambda);
-  double newY0 = y0-maxRounding*sin(lambda);
-  lambda = atan2(y-y0, x-x0);
-  double newX = x0+maxRounding*cos(lambda);
-  double newY = y0+maxRounding*sin(lambda);
+  double newX0, newY0, newX, newY;
+  computeRounding(prevX, prevY, x0, y0, x, y, rounding, newX0, newY0, 
newX, newY, maxRounding);
   tmpSegment.back().insert("svg:x", newX0);
   tmpSegment.back().insert("svg:y", newY0);
   librevenge::RVNGPropertyList q;
@@ -418,9 +430,6 @@ void libvisio::VSDContentCollector::_convertToPath(const 
std::vectorgetStr() == "Z")
 {
@@ -430,19 +439,10 @@ void libvisio::VSDContentCollector::_convertToPath(const 
std::vectorgetStr() == "L")
   {
-double lineX = segmentVector[moveIndex+1]["svg:x"] ? 
segmentVector[moveIndex+1]["svg:x"]->getDouble() : 0.0;
-double lineY = segmentVector[moveIndex+1]["svg:y"] ? 
segmentVector[moveIndex+1]["svg:y"]->getDouble() : 0.0;
-double halfLength = 
sqrt((lineY-y0)*(lineY-y0)+(lineX-x0)*(lineX-x0)) / 2.0;
-if (maxRounding > halfLength)
-  maxRounding = halfLength;
-if (maxRounding > rounding)
-  maxRounding = rounding;
-double lambda = atan2(y0-prevY, x0-prevX);
-double newX0 = x0-maxRounding*cos(lambda);
-double newY0 = y0-maxRounding*sin(lambda);
-lambda = atan2(lineY-y0, lineX-x0);
-double newX = x0+maxRounding*cos(lambda);
-double newY = y0+maxRounding*sin(lambda);
+double x = segmentVector[moveIndex+1]["svg:x"] ? 
segmentVector[moveIndex+1]["svg:x"]->getDouble() : 0.0;
+double y = segmentVector[moveIndex+1]["svg:y"] ? 
segmentVector[moveIndex+1]["svg:y"]->getDouble() : 0.0;
+double newX0, newY0, newX, newY;
+computeRounding(prevX, prevY, x0, y0, x, y, rounding, newX0, 
newY0, newX, newY, maxRounding);
 tmpSegment.back().insert("svg:x", newX0);
 tmpSegment.back().insert("svg:y", newY0);
 librevenge::RVNGPropertyList q;
@@ -454,9 +454,6 @@ void libvisio::VSDContentCollector::_convertToPath(const 
std::vector___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2016-01-02 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp |   55 +---
 1 file changed, 29 insertions(+), 26 deletions(-)

New commits:
commit 683bfbe077060b4b9321ccb08004e487b2c05ace
Author: Fridrich Å trba 
Date:   Sat Jan 2 19:19:48 2016 +0100

Try even more look like visio for line rounding (not using arcs yet though)

Change-Id: Ieadd5cc4ec26689f69d57c99fd5413b645adce38

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 583ab9a..3018b89 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -34,31 +34,38 @@ static unsigned bitmapId = 0;
 namespace
 {
 
-void computeRounding(double , double , double x0, double y0, 
double x, double y, double rounding,
- double , double , double , double , 
double )
+void computeRounding(double , double , double x0, double y0, 
double x, double y, double ,
+ double , double , double , double , 
bool )
 {
   double prevHalfLength = sqrt((y0-prevY)*(y0-prevY)+(x0-prevX)*(x0-prevX)) / 
2.0;
   double halfLength = sqrt((y-y0)*(y-y0)+(x-x0)*(x-x0)) / 2.0;
-  maxRounding = prevHalfLength;
-  if (maxRounding > halfLength)
-maxRounding = halfLength;
   double lambda1 = atan2(y0-prevY, x0-prevX);
   double lambda2 = atan2(y-y0, x-x0);
   double angle = M_PI - lambda2 + lambda1;
   if (angle < 0.0)
 angle += 2.0*M_PI;
   if (angle > M_PI)
+  {
 angle -= M_PI;
+sweep = !sweep;
+  }
   double q = fabs(rounding / tan(angle / 2.0));
-  if (maxRounding > q)
-maxRounding = q;
-  newX0 = x0-maxRounding*cos(lambda1);
-  newY0 = y0-maxRounding*sin(lambda1);
-  newX = x0+maxRounding*cos(lambda2);
-  newY = y0+maxRounding*sin(lambda2);
+  if (q > prevHalfLength)
+  {
+q = prevHalfLength;
+rounding = fabs(q*tan(angle / 2.0));
+  }
+  if (q > halfLength)
+  {
+q = halfLength;
+rounding = fabs(q*tan(angle / 2.0));
+  }
+  newX0 = x0-q*cos(lambda1);
+  newY0 = y0-q*sin(lambda1);
+  newX = x0+q*cos(lambda2);
+  newY = y0+q*sin(lambda2);
   prevX = x0;
   prevY = y0;
-  maxRounding = halfLength;
 }
 
 } // anonymous namespace
@@ -401,7 +408,6 @@ void libvisio::VSDContentCollector::_convertToPath(const 
std::vectorgetDouble() : 0.0;
 double prevY = segmentVector[0]["svg:y"] ? 
segmentVector[0]["svg:y"]->getDouble() : 0.0;
 unsigned moveIndex = 0;
-double maxRounding = DBL_MAX;
 std::vector tmpSegment;
 for (unsigned i = 0; i < segmentVector.size(); ++i)
 {
@@ -416,7 +422,6 @@ void libvisio::VSDContentCollector::_convertToPath(const 
std::vectorgetDouble() : 0.0;
 prevY = segmentVector[i]["svg:y"] ? 
segmentVector[i]["svg:y"]->getDouble() : 0.0;
 moveIndex = i;
-maxRounding = DBL_MAX;
   }
   else if (segmentVector[i]["librevenge:path-action"] && 
segmentVector[i]["librevenge:path-action"]->getStr() == "L")
   {
@@ -427,7 +432,9 @@ void libvisio::VSDContentCollector::_convertToPath(const 
std::vectorgetDouble() : 0.0;
   double y = segmentVector[i+1]["svg:y"] ? 
segmentVector[i+1]["svg:y"]->getDouble() : 0.0;
   double newX0, newY0, newX, newY;
-  computeRounding(prevX, prevY, x0, y0, x, y, rounding, newX0, newY0, 
newX, newY, maxRounding);
+  double tmpRounding(rounding);
+  bool sweep(true);
+  computeRounding(prevX, prevY, x0, y0, x, y, tmpRounding, newX0, 
newY0, newX, newY, sweep);
   tmpSegment.back().insert("svg:x", newX0);
   tmpSegment.back().insert("svg:y", newY0);
   librevenge::RVNGPropertyList q;
@@ -441,15 +448,17 @@ void libvisio::VSDContentCollector::_convertToPath(const 
std::vectorgetStr() == "Z")
 {
   if (tmpSegment.size() >= 2 &&
-  tmpSegment[0]["librevenge:path-action"] &&
-  tmpSegment[0]["librevenge:path-action"]->getStr() == "M" &&
-  tmpSegment[1]["librevenge:path-action"] &&
-  tmpSegment[1]["librevenge:path-action"]->getStr() == "L")
+  segmentVector[moveIndex]["librevenge:path-action"] &&
+  segmentVector[moveIndex]["librevenge:path-action"]->getStr() == 
"M" &&
+  segmentVector[moveIndex+1]["librevenge:path-action"] &&
+  segmentVector[moveIndex+1]["librevenge:path-action"]->getStr() 
== "L")
   {
 double x = segmentVector[moveIndex+1]["svg:x"] ? 
segmentVector[moveIndex+1]["svg:x"]->getDouble() : 0.0;
 double y = segmentVector[moveIndex+1]["svg:y"] ? 
segmentVector[moveIndex+1]["svg:y"]->getDouble() : 0.0;
 double newX0, newY0, newX, newY;
-computeRounding(prevX, prevY, x0, y0, x, y, rounding, newX0, 
newY0, newX, newY, maxRounding);
+double tmpRounding(rounding);
+bool sweep(true);
+computeRounding(prevX, prevY, x0, y0, x, y, tmpRounding, newX0, 
newY0, newX, newY, sweep);
 tmpSegment.back().insert("svg:x", newX0);
 

[Libreoffice-commits] libvisio.git: src/lib

2015-12-29 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp |   22 +-
 1 file changed, 21 insertions(+), 1 deletion(-)

New commits:
commit e5e30daf905fc6d41caa3c50d78ebc66b9e70c05
Author: Fridrich Å trba 
Date:   Tue Dec 29 18:17:06 2015 +0100

Try to sort out 0-length path segments

Change-Id: Icaf05be1675850e9b0ff233be0cc4cb5bf86ca6a

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index da6b073..c20e626 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -481,8 +481,28 @@ void libvisio::VSDContentCollector::_convertToPath(const 
std::vectorgetDouble();
+y = segmentVector[i]["svg:y"]->getDouble();
+  }
+  // skip segment that have length 0.0
+  if (!VSD_ALMOST_ZERO(x-prevX) || !VSD_ALMOST_ZERO(y-prevY))
+  {
+path.append(segmentVector[i]);
+prevX = x;
+prevY = y;
+  }
+}
   }
 }
 
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-28 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp |   30 --
 1 file changed, 30 deletions(-)

New commits:
commit 9df045f04190ed87d49a619821e6c16557a518cf
Author: Fridrich Å trba 
Date:   Mon Dec 28 13:28:34 2015 +0100

Remove unnecessary code. This works the same without it.

Change-Id: I971775f35c8a4fc2d1955dd79e84f8486df9629e

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 899c837..f24673c 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -432,36 +432,6 @@ void libvisio::VSDContentCollector::_flushText()
 m_tabSets.back().m_numChars = 0;
   }
 
-  unsigned numCharsInText = (unsigned)m_currentText.len();
-
-  for (unsigned iChar = 0; iChar < m_charFormats.size(); iChar++)
-  {
-if (m_charFormats[iChar].charCount)
-  numCharsInText -= m_charFormats[iChar].charCount;
-else
-  m_charFormats[iChar].charCount = numCharsInText;
-  }
-
-  numCharsInText = (unsigned)m_currentText.len();
-
-  for (unsigned iPara = 0; iPara < m_paraFormats.size(); iPara++)
-  {
-if (m_paraFormats[iPara].charCount)
-  numCharsInText -= m_paraFormats[iPara].charCount;
-else
-  m_paraFormats[iPara].charCount = numCharsInText;
-  }
-
-  numCharsInText = (unsigned)m_currentText.len();
-
-  for (unsigned iTab = 0; iTab < m_tabSets.size(); iTab++)
-  {
-if (m_tabSets[iTab].m_numChars)
-  numCharsInText -= m_tabSets[iTab].m_numChars;
-else
-  m_tabSets[iTab].m_numChars = numCharsInText;
-  }
-
   _appendVisibleAndPrintable(textBlockProps);
 
   m_shapeOutputText->addStartTextObject(textBlockProps);
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-28 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp |   60 
 1 file changed, 48 insertions(+), 12 deletions(-)

New commits:
commit bd9f4c565f7af41b0e32f399430e3e20bb1c8797
Author: Fridrich Å trba 
Date:   Mon Dec 28 13:29:35 2015 +0100

Annotate the _flushText in order to extract it from Dr. Alzheimer's 
influence

Change-Id: Icf2dc7b397688f464bc0de01d00c08992c82f88b

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index f24673c..8365984 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -365,9 +365,11 @@ void libvisio::VSDContentCollector::_flushCurrentPath()
 
 void libvisio::VSDContentCollector::_flushText()
 {
+  /* Do not output empty text objects. */
   if (m_currentText.empty() || m_misc.m_hideText)
 return;
 
+  /* Fill the text object/frame properties */
   double xmiddle = m_txtxform ? m_txtxform->width / 2.0 : m_xform.width / 2.0;
   double ymiddle = m_txtxform ? m_txtxform->height / 2.0 : m_xform.height / 
2.0;
 
@@ -416,6 +418,13 @@ void libvisio::VSDContentCollector::_flushText()
 break;
   }
 
+  _appendVisibleAndPrintable(textBlockProps);
+
+  /* Start the text object. */
+  m_shapeOutputText->addStartTextObject(textBlockProps);
+
+  /* Assure that the different styles have at least one element,
+   * corresponding to the default style. */
   if (m_charFormats.empty())
   {
 m_charFormats.push_back(m_defaultCharStyle);
@@ -432,29 +441,28 @@ void libvisio::VSDContentCollector::_flushText()
 m_tabSets.back().m_numChars = 0;
   }
 
-  _appendVisibleAndPrintable(textBlockProps);
-
-  m_shapeOutputText->addStartTextObject(textBlockProps);
+  /* Helper variables used to iterate over the text buffer */
+  std::vector::const_iterator paraIt = m_paraFormats.begin();
+  std::vector::const_iterator charIt = m_charFormats.begin();
+  std::vector::const_iterator tabIt = m_tabSets.begin();
 
   bool isParagraphOpened(false);
   bool isSpanOpened(false);
   bool isParagraphWithoutSpan(false);
 
-  std::vector::const_iterator paraIt = m_paraFormats.begin();
-  std::vector::const_iterator charIt = m_charFormats.begin();
-  std::vector::const_iterator tabIt = m_tabSets.begin();
-
   VSDBullet currentBullet;
 
   unsigned paraNumRemaining(paraIt->charCount);
   unsigned charNumRemaining(charIt->charCount);
   unsigned tabNumRemaining(tabIt->m_numChars);
 
-  librevenge::RVNGString::Iter textIt(m_currentText);
   librevenge::RVNGString sOutputText;
-  // Iterate over the text
+
+  /* Iterate over the text character by character */
+  librevenge::RVNGString::Iter textIt(m_currentText);
   for (textIt.rewind(); textIt.next();)
   {
+/* Any character will cause a paragraph to open if it is not yet opened. */
 if (!isParagraphOpened)
 {
   librevenge::RVNGPropertyList paraProps;
@@ -468,12 +476,15 @@ void libvisio::VSDContentCollector::_flushText()
   VSDBullet bullet;
   _bulletFromParaFormat(bullet, *paraIt);
 
+  /* Bullet definition changed with regard to the last paragraph style. */
   if (bullet != currentBullet)
   {
+/* If the previous paragraph style had a bullet, close the list level. 
*/
 if (!!currentBullet)
   m_shapeOutputText->addCloseUnorderedListLevel();
 
 currentBullet = bullet;
+/* If the current paragraph style has a bullet, open a new list level. 
*/
 if (!!currentBullet)
 {
   librevenge::RVNGPropertyList bulletList;
@@ -490,9 +501,9 @@ void libvisio::VSDContentCollector::_flushText()
   isParagraphWithoutSpan = true;
 }
 
-/* Avoid empty span but also a paragraph without span at all.
- * This allows editing of the empty paragraph after the import,
- * using the original span properties. */
+/* Any character will cause a span to open if it is not yet opened.
+ * The additional conditions aim to avoid superfluous empty span but
+ * also a paragraph without span at all. */
 if (!isSpanOpened && ((*(textIt()) != '\n') || isParagraphWithoutSpan))
 {
   librevenge::RVNGPropertyList textProps;
@@ -512,6 +523,8 @@ void libvisio::VSDContentCollector::_flushText()
   isParagraphWithoutSpan = false;
 }
 
+/* Current character is a paragraph break,
+ * which will cause the paragraph to close. */
 if (*(textIt()) == '\n')
 {
   if (!sOutputText.empty())
@@ -532,6 +545,8 @@ void libvisio::VSDContentCollector::_flushText()
 isParagraphOpened = false;
   }
 }
+/* Current character is a tabulator. We have to output
+ * the current text buffer and insert the tab. */
 else if (*(textIt()) == '\t')
 {
   if (!sOutputText.empty())
@@ -539,16 +554,25 @@ void libvisio::VSDContentCollector::_flushText()
   sOutputText.clear();
   m_shapeOutputText->addInsertTab();
 }
+/* Current character is a field placeholder. We append
+ * to the current text 

[Libreoffice-commits] libvisio.git: src/lib

2015-12-28 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp |   13 +
 src/lib/VSDContentCollector.h   |2 ++
 2 files changed, 11 insertions(+), 4 deletions(-)

New commits:
commit c006852738bc5ffa6cffd125e980b5cdd9ade7ba
Author: Fridrich Å trba 
Date:   Mon Dec 28 20:14:10 2015 +0100

Extract part of the path generation to be able to add rounding in next steps

Change-Id: I6ce348c7b14ff324f106be9ab615dbfae546a178

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 8365984..1a34b51 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -267,8 +267,7 @@ void libvisio::VSDContentCollector::_flushCurrentPath()
 if (!tmpPath.empty())
 {
   librevenge::RVNGPropertyListVector path;
-  for (unsigned i = 0; i < tmpPath.size(); ++i)
-path.append(tmpPath[i]);
+  _convertToPath(tmpPath, path, m_lineStyle.rounding);
   m_shapeOutputDrawing->addStyle(fillPathProps);
   librevenge::RVNGPropertyList propList;
   propList.insert("svg:d", path);
@@ -351,8 +350,7 @@ void libvisio::VSDContentCollector::_flushCurrentPath()
 if (!tmpPath.empty())
 {
   librevenge::RVNGPropertyListVector path;
-  for (unsigned i = 0; i < tmpPath.size(); ++i)
-path.append(tmpPath[i]);
+  _convertToPath(tmpPath, path, m_lineStyle.rounding);
   m_shapeOutputDrawing->addStyle(linePathProps);
   librevenge::RVNGPropertyList propList;
   propList.insert("svg:d", path);
@@ -363,6 +361,13 @@ void libvisio::VSDContentCollector::_flushCurrentPath()
   m_currentLineGeometry.clear();
 }
 
+void libvisio::VSDContentCollector::_convertToPath(const 
std::vector ,
+   
librevenge::RVNGPropertyListVector , double /* rounding */)
+{
+  for (unsigned i = 0; i < segmentVector.size(); ++i)
+path.append(segmentVector[i]);
+}
+
 void libvisio::VSDContentCollector::_flushText()
 {
   /* Do not output empty text objects. */
diff --git a/src/lib/VSDContentCollector.h b/src/lib/VSDContentCollector.h
index 3497681..ca7a73e 100644
--- a/src/lib/VSDContentCollector.h
+++ b/src/lib/VSDContentCollector.h
@@ -229,6 +229,8 @@ private:
   void _fillParagraphProperties(librevenge::RVNGPropertyList , const 
VSDParaStyle );
   void _fillTabSet(librevenge::RVNGPropertyList , const VSDTabSet 
);
   void _fillCharProperties(librevenge::RVNGPropertyList , const 
VSDCharStyle );
+  void _convertToPath(const std::vector 
,
+  librevenge::RVNGPropertyListVector , double 
rounding);
 
   bool m_isPageStarted;
   double m_pageWidth;
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-27 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp |   31 ---
 src/lib/VSDContentCollector.h   |1 +
 2 files changed, 17 insertions(+), 15 deletions(-)

New commits:
commit 46377333551996128b0b1b4a4d25eedbc35eee31
Author: Fridrich Å trba 
Date:   Sun Dec 27 09:25:05 2015 +0100

Use U+FFFC as field placeholder and output field only in one place

Change-Id: I617ffd23b8577ae6ca71cfde07822a67cd683204

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 97be554..e0cff20 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -53,7 +53,7 @@ libvisio::VSDContentCollector::VSDContentCollector(
   m_currentPageNumber(0), m_shapeOutputDrawing(0), m_shapeOutputText(0),
   m_pageOutputDrawing(), m_pageOutputText(), 
m_documentPageShapeOrders(documentPageShapeOrders),
   m_pageShapeOrder(m_documentPageShapeOrders.begin()), 
m_isFirstGeometry(true), m_NURBSData(), m_polylineData(),
-  m_textStream(), m_names(), m_stencilNames(), m_fields(), m_stencilFields(), 
m_fieldIndex(0),
+  m_textStream(), m_currentText(), m_names(), m_stencilNames(), m_fields(), 
m_stencilFields(), m_fieldIndex(0),
   m_textFormat(VSD_TEXT_ANSI), m_charFormats(), m_paraFormats(), 
m_lineStyle(), m_fillStyle(), m_textBlockStyle(),
   m_themeReference(), m_defaultCharStyle(), m_defaultParaStyle(), 
m_currentStyleSheet(0), m_styles(styles),
   m_stencils(stencils), m_stencilShape(0), m_isStencilStarted(false), 
m_currentGeometryCount(0),
@@ -647,6 +647,11 @@ void libvisio::VSDContentCollector::_flushText()
   m_shapeOutputText->addInsertTab();
   sOutputText.clear();
 }
+else if (strlen(i()) == 3 &&
+ i()[0] == (char)0xef &&
+ i()[1] == (char)0xbf &&
+ i()[2] == (char)0xbc)
+  _appendField(sOutputText);
 else
   sOutputText.append(i());
   }
@@ -2113,9 +2118,6 @@ void libvisio::VSDContentCollector::collectShape(unsigned 
id, unsigned level, un
   _handleForeignData(m_stencilShape->m_foreign->data);
 }
 
-// m_textStream = m_stencilShape->m_text;
-// m_textFormat = m_stencilShape->m_textFormat;
-
 for (std::map< unsigned, VSDName>::const_iterator iterData = 
m_stencilShape->m_names.begin(); iterData != m_stencilShape->m_names.end(); 
++iterData)
 {
   librevenge::RVNGString nameString;
@@ -,6 +2224,13 @@ void libvisio::VSDContentCollector::collectText(unsigned 
level, const librevenge
 
   m_textStream = textStream;
   m_textFormat = format;
+  m_currentText.clear();
+  if (!m_textStream.empty())
+  {
+std::vector tmpBuffer(textStream.size());
+memcpy([0], textStream.getDataBuffer(), textStream.size());
+appendCharacters(m_currentText, tmpBuffer, format);
+  }
 }
 
 void libvisio::VSDContentCollector::collectParaIX(unsigned /* id */ , unsigned 
level, unsigned charCount, const boost::optional ,
@@ -3174,10 +3183,7 @@ void 
libvisio::VSDContentCollector::appendCharacters(librevenge::RVNGString 
  iter != characters.end(); ++iter)
 {
   if (0x1e == ucs4Character)
-  {
-_appendField(text);
-continue;
-  }
+ucs4Character = 0xfffc;
   else if (*iter < 0x20)
 ucs4Character = 0x20;
   else
@@ -3244,7 +3250,7 @@ void 
libvisio::VSDContentCollector::appendCharacters(librevenge::RVNGString 
 if (U_SUCCESS(status) && U_IS_UNICODE_CHAR(ucs4Character))
 {
   if (0x1e == ucs4Character)
-_appendField(text);
+appendUCS4(text, 0xfffc);
   else
 appendUCS4(text, ucs4Character);
 }
@@ -3268,12 +3274,7 @@ void 
libvisio::VSDContentCollector::appendCharacters(librevenge::RVNGString 
 {
   UChar32 ucs4Character = ucnv_getNextUChar(conv, , srcLimit, );
   if (U_SUCCESS(status) && U_IS_UNICODE_CHAR(ucs4Character))
-  {
-if (0xfffc == ucs4Character)
-  _appendField(text);
-else
-  appendUCS4(text, ucs4Character);
-  }
+appendUCS4(text, ucs4Character);
 }
   }
   if (conv)
diff --git a/src/lib/VSDContentCollector.h b/src/lib/VSDContentCollector.h
index 9a956db..c3aaff2 100644
--- a/src/lib/VSDContentCollector.h
+++ b/src/lib/VSDContentCollector.h
@@ -276,6 +276,7 @@ private:
   std::map m_NURBSData;
   std::map m_polylineData;
   librevenge::RVNGBinaryData m_textStream;
+  librevenge::RVNGString m_currentText;
   std::map m_names, m_stencilNames;
   std::vector m_fields;
   VSDFieldList m_stencilFields;
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-27 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp |  318 +---
 src/lib/VSDContentCollector.h   |2 
 2 files changed, 141 insertions(+), 179 deletions(-)

New commits:
commit 24a9ae3175685a60079547bfdea65a4a4c7eabc4
Author: Fridrich Å trba 
Date:   Sun Dec 27 21:31:53 2015 +0100

Trying to simplify the _flushText function and make it a bit more readable

Change-Id: I5a94a699ecca68df7957bcd7506ed87ed2162f87

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index e0cff20..17a6a38 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -53,8 +53,8 @@ libvisio::VSDContentCollector::VSDContentCollector(
   m_currentPageNumber(0), m_shapeOutputDrawing(0), m_shapeOutputText(0),
   m_pageOutputDrawing(), m_pageOutputText(), 
m_documentPageShapeOrders(documentPageShapeOrders),
   m_pageShapeOrder(m_documentPageShapeOrders.begin()), 
m_isFirstGeometry(true), m_NURBSData(), m_polylineData(),
-  m_textStream(), m_currentText(), m_names(), m_stencilNames(), m_fields(), 
m_stencilFields(), m_fieldIndex(0),
-  m_textFormat(VSD_TEXT_ANSI), m_charFormats(), m_paraFormats(), 
m_lineStyle(), m_fillStyle(), m_textBlockStyle(),
+  m_currentText(), m_names(), m_stencilNames(), m_fields(), m_stencilFields(), 
m_fieldIndex(0),
+  m_charFormats(), m_paraFormats(), m_lineStyle(), m_fillStyle(), 
m_textBlockStyle(),
   m_themeReference(), m_defaultCharStyle(), m_defaultParaStyle(), 
m_currentStyleSheet(0), m_styles(styles),
   m_stencils(stencils), m_stencilShape(0), m_isStencilStarted(false), 
m_currentGeometryCount(0),
   m_backgroundPageID(MINUS_ONE), m_currentPageID(0), m_currentPage(), 
m_pages(), m_layerList(),
@@ -179,7 +179,7 @@ void libvisio::VSDContentCollector::_flushShape()
 numPathElements++;
   if (m_currentForeignData.size() && 
m_currentForeignProps["librevenge:mime-type"] && m_foreignWidth != 0.0 && 
m_foreignHeight != 0.0)
 numForeignElements++;
-  if (m_textStream.size())
+  if (!m_currentText.empty())
 numTextElements++;
 
   if (numPathElements+numForeignElements+numTextElements > 1)
@@ -365,7 +365,7 @@ void libvisio::VSDContentCollector::_flushCurrentPath()
 
 void libvisio::VSDContentCollector::_flushText()
 {
-  if (!m_textStream.size() || m_misc.m_hideText)
+  if (m_currentText.empty() || m_misc.m_hideText)
 return;
 
   double xmiddle = m_txtxform ? m_txtxform->width / 2.0 : m_xform.width / 2.0;
@@ -417,11 +417,22 @@ void libvisio::VSDContentCollector::_flushText()
   }
 
   if (m_charFormats.empty())
+  {
 m_charFormats.push_back(m_defaultCharStyle);
+m_charFormats.back().charCount = 0;
+  }
   if (m_paraFormats.empty())
+  {
 m_paraFormats.push_back(m_defaultParaStyle);
+m_paraFormats.back().charCount = 0;
+  }
+  if (m_tabSets.empty())
+  {
+m_tabSets.push_back(VSDTabSet());
+m_tabSets.back().m_numChars = 0;
+  }
 
-  unsigned numCharsInText = (unsigned)(m_textFormat == VSD_TEXT_UTF16 ? 
m_textStream.size() / 2 : m_textStream.size());
+  unsigned numCharsInText = (unsigned)m_currentText.len();
 
   for (unsigned iChar = 0; iChar < m_charFormats.size(); iChar++)
   {
@@ -431,7 +442,7 @@ void libvisio::VSDContentCollector::_flushText()
   m_charFormats[iChar].charCount = numCharsInText;
   }
 
-  numCharsInText = (unsigned)(m_textFormat == VSD_TEXT_UTF16 ? 
m_textStream.size() / 2 : m_textStream.size());
+  numCharsInText = (unsigned)m_currentText.len();
 
   for (unsigned iPara = 0; iPara < m_paraFormats.size(); iPara++)
   {
@@ -441,7 +452,7 @@ void libvisio::VSDContentCollector::_flushText()
   m_paraFormats[iPara].charCount = numCharsInText;
   }
 
-  numCharsInText = (unsigned)(m_textFormat == VSD_TEXT_UTF16 ? 
m_textStream.size() / 2 : m_textStream.size());
+  numCharsInText = (unsigned)m_currentText.len();
 
   for (unsigned iTab = 0; iTab < m_tabSets.size(); iTab++)
   {
@@ -455,81 +466,62 @@ void libvisio::VSDContentCollector::_flushText()
 
   m_shapeOutputText->addStartTextObject(textBlockProps);
 
-  unsigned charIndex = 0;
-  unsigned tabIndex = 0;
-  unsigned paraCharCount = 0;
-  unsigned long textBufferPosition = 0;
-  const unsigned char *pTextBuffer = m_textStream.getDataBuffer();
-  const unsigned long nTextBufferLength = m_textStream.size();
+  bool isParagraphOpened(false);
+  bool isSpanOpened(false);
 
-  VSDBullet currentBullet;
-
-  for (std::vector::iterator paraIt = m_paraFormats.begin();
-   paraIt != m_paraFormats.end() && charIndex < m_charFormats.size(); 
++paraIt)
-  {
-librevenge::RVNGPropertyList paraProps;
-_fillParagraphProperties(paraProps, *paraIt);
+  std::vector::const_iterator paraIt = m_paraFormats.begin();
+  std::vector::const_iterator charIt = m_charFormats.begin();
+  std::vector::const_iterator tabIt = m_tabSets.begin();
 
-if (m_textBlockStyle.defaultTabStop > 0.0)
-  paraProps.insert("style:tab-stop-distance", 
m_textBlockStyle.defaultTabStop);
+  VSDBullet currentBullet;

[Libreoffice-commits] libvisio.git: src/lib

2015-12-27 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp |8 +++-
 1 file changed, 7 insertions(+), 1 deletion(-)

New commits:
commit f81b6a04609f1164ea4a006af43c2e9ce6dbf242
Author: Fridrich Å trba 
Date:   Sun Dec 27 22:55:40 2015 +0100

Avoid paragraphs without span and thus fix make check

Change-Id: Id9376f0c4f63d092771d6c505b0ef9989e531005

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 17a6a38..899c837 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -468,6 +468,7 @@ void libvisio::VSDContentCollector::_flushText()
 
   bool isParagraphOpened(false);
   bool isSpanOpened(false);
+  bool isParagraphWithoutSpan(false);
 
   std::vector::const_iterator paraIt = m_paraFormats.begin();
   std::vector::const_iterator charIt = m_charFormats.begin();
@@ -516,9 +517,13 @@ void libvisio::VSDContentCollector::_flushText()
   else
 m_shapeOutputText->addOpenListElement(paraProps);
   isParagraphOpened = true;
+  isParagraphWithoutSpan = true;
 }
 
-if (!isSpanOpened && (*(textIt()) != '\n')) // Avoid an empty span
+/* Avoid empty span but also a paragraph without span at all.
+ * This allows editing of the empty paragraph after the import,
+ * using the original span properties. */
+if (!isSpanOpened && ((*(textIt()) != '\n') || isParagraphWithoutSpan))
 {
   librevenge::RVNGPropertyList textProps;
   _fillCharProperties(textProps, *charIt);
@@ -534,6 +539,7 @@ void libvisio::VSDContentCollector::_flushText()
   }
   m_shapeOutputText->addOpenSpan(textProps);
   isSpanOpened = true;
+  isParagraphWithoutSpan = false;
 }
 
 if (*(textIt()) == '\n')
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-26 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp |   12 
 src/lib/VSDContentCollector.h   |1 +
 2 files changed, 9 insertions(+), 4 deletions(-)

New commits:
commit 31b0d9f6c9008c9e7b16cf79136afffc650a9fa9
Author: Fridrich Å trba 
Date:   Sat Dec 26 22:38:51 2015 +0100

WIP[0]: sanitize the _flushText mess

Change-Id: I31f533ae26714317512167c7075fbc737d5b833e

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 1e59e86..d6f03ba 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -53,7 +53,7 @@ libvisio::VSDContentCollector::VSDContentCollector(
   m_currentPageNumber(0), m_shapeOutputDrawing(0), m_shapeOutputText(0),
   m_pageOutputDrawing(), m_pageOutputText(), 
m_documentPageShapeOrders(documentPageShapeOrders),
   m_pageShapeOrder(m_documentPageShapeOrders.begin()), 
m_isFirstGeometry(true), m_NURBSData(), m_polylineData(),
-  m_textStream(), m_names(), m_stencilNames(), m_fields(), m_stencilFields(), 
m_fieldIndex(0),
+  m_textStream(), m_currentText(), m_names(), m_stencilNames(), m_fields(), 
m_stencilFields(), m_fieldIndex(0),
   m_textFormat(VSD_TEXT_ANSI), m_charFormats(), m_paraFormats(), 
m_lineStyle(), m_fillStyle(), m_textBlockStyle(),
   m_themeReference(), m_defaultCharStyle(), m_defaultParaStyle(), 
m_currentStyleSheet(0), m_styles(styles),
   m_stencils(stencils), m_stencilShape(0), m_isStencilStarted(false), 
m_currentGeometryCount(0),
@@ -2097,9 +2097,6 @@ void libvisio::VSDContentCollector::collectShape(unsigned 
id, unsigned level, un
   _handleForeignData(m_stencilShape->m_foreign->data);
 }
 
-// m_textStream = m_stencilShape->m_text;
-// m_textFormat = m_stencilShape->m_textFormat;
-
 for (std::map< unsigned, VSDName>::const_iterator iterData = 
m_stencilShape->m_names.begin(); iterData != m_stencilShape->m_names.end(); 
++iterData)
 {
   librevenge::RVNGString nameString;
@@ -2206,6 +2203,13 @@ void libvisio::VSDContentCollector::collectText(unsigned 
level, const librevenge
 
   m_textStream = textStream;
   m_textFormat = format;
+  m_currentText.clear();
+  if (!m_textStream.empty())
+  {
+std::vector tmpBuffer(textStream.size());
+memcpy([0], textStream.getDataBuffer(), textStream.size());
+appendCharacters(m_currentText, tmpBuffer, format);
+  }
 }
 
 void libvisio::VSDContentCollector::collectParaIX(unsigned /* id */ , unsigned 
level, unsigned charCount, const boost::optional ,
diff --git a/src/lib/VSDContentCollector.h b/src/lib/VSDContentCollector.h
index 67decfb..d9a7796 100644
--- a/src/lib/VSDContentCollector.h
+++ b/src/lib/VSDContentCollector.h
@@ -273,6 +273,7 @@ private:
   std::map m_NURBSData;
   std::map m_polylineData;
   librevenge::RVNGBinaryData m_textStream;
+  librevenge::RVNGString m_currentText;
   std::map m_names, m_stencilNames;
   std::vector m_fields;
   VSDFieldList m_stencilFields;
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-26 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp |  196 +---
 src/lib/VSDContentCollector.h   |3 
 2 files changed, 109 insertions(+), 90 deletions(-)

New commits:
commit 4785b4f9e40e72f0175e711121dc65ea96b298a1
Author: Fridrich Å trba 
Date:   Sat Dec 26 23:04:44 2015 +0100

WIP[1]: sanitize the _flushText mess

Change-Id: I7e02cd0da6bcf5c2525d418c5fe07018f93c334e

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index d6f03ba..939a6d0 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -468,42 +468,10 @@ void libvisio::VSDContentCollector::_flushText()
paraIt != m_paraFormats.end() && charIndex < m_charFormats.size(); 
++paraIt)
   {
 librevenge::RVNGPropertyList paraProps;
+_fillParagraphProperties(paraProps, *paraIt);
 
-paraProps.insert("fo:text-indent", (*paraIt).indFirst);
-paraProps.insert("fo:margin-left", (*paraIt).indLeft);
-paraProps.insert("fo:margin-right", (*paraIt).indRight);
-paraProps.insert("fo:margin-top", (*paraIt).spBefore);
-paraProps.insert("fo:margin-bottom", (*paraIt).spAfter);
 if (m_textBlockStyle.defaultTabStop > 0.0)
   paraProps.insert("style:tab-stop-distance", 
m_textBlockStyle.defaultTabStop);
-switch ((*paraIt).align)
-{
-case 0: // left
-  if (!(*paraIt).flags)
-paraProps.insert("fo:text-align", "left");
-  else
-paraProps.insert("fo:text-align", "end");
-  break;
-case 2: // right
-  if (!(*paraIt).flags)
-paraProps.insert("fo:text-align", "end");
-  else
-paraProps.insert("fo:text-align", "left");
-  break;
-case 3: // justify
-  paraProps.insert("fo:text-align", "justify");
-  break;
-case 4: // full
-  paraProps.insert("fo:text-align", "full");
-  break;
-default: // center
-  paraProps.insert("fo:text-align", "center");
-  break;
-}
-if ((*paraIt).spLine > 0)
-  paraProps.insert("fo:line-height", (*paraIt).spLine);
-else
-  paraProps.insert("fo:line-height", -(*paraIt).spLine, 
librevenge::RVNG_PERCENT);
 
 paraCharCount = (*paraIt).charCount;
 
@@ -519,32 +487,7 @@ void libvisio::VSDContentCollector::_flushText()
 m_tabSets[tabIndex+1].m_numChars -= paraCharCount;
   }
 
-  librevenge::RVNGPropertyListVector tmpTabSet;
-  for (std::map::const_iterator iterTS = 
m_tabSets[tabIndex].m_tabStops.begin();
-   iterTS != m_tabSets[tabIndex].m_tabStops.end(); ++iterTS)
-  {
-librevenge::RVNGPropertyList tmpTabStop;
-tmpTabStop.insert("style:position", iterTS->second.m_position);
-switch (iterTS->second.m_alignment)
-{
-case 0:
-  tmpTabStop.insert("style:type", "left");
-  break;
-case 1:
-  tmpTabStop.insert("style:type", "center");
-  break;
-case 2:
-  tmpTabStop.insert("style:type", "right");
-  break;
-default:
-  tmpTabStop.insert("style:type", "char");
-  tmpTabStop.insert("style:char", ".");
-  break;
-}
-tmpTabSet.append(tmpTabStop);
-  }
-  if (!tmpTabSet.empty())
-paraProps.insert("style:tab-stops", tmpTabSet);
+  _fillTabSet(paraProps, m_tabSets[tabIndex]);
 }
 
 VSDBullet bullet;
@@ -564,7 +507,6 @@ void libvisio::VSDContentCollector::_flushText()
 _listLevelFromBullet(bulletList, bullet);
 m_shapeOutputText->addOpenUnorderedListLevel(bulletList);
   }
-
 }
 
 if (!currentBullet)
@@ -587,37 +529,8 @@ void libvisio::VSDContentCollector::_flushText()
   paraCharCount -= m_charFormats[charIndex].charCount;
 
   librevenge::RVNGPropertyList textProps;
+  _fillCharProperties(textProps, m_charFormats[charIndex]);
 
-  librevenge::RVNGString fontName;
-  if (m_charFormats[charIndex].font.m_data.size())
-_convertDataToString(fontName, m_charFormats[charIndex].font.m_data, 
m_charFormats[charIndex].font.m_format);
-  else
-fontName = "Arial";
-
-  textProps.insert("style:font-name", fontName);
-
-  if (m_charFormats[charIndex].bold) textProps.insert("fo:font-weight", 
"bold");
-  if (m_charFormats[charIndex].italic) textProps.insert("fo:font-style", 
"italic");
-  if (m_charFormats[charIndex].underline) 
textProps.insert("style:text-underline-type", "single");
-  if (m_charFormats[charIndex].doubleunderline) 
textProps.insert("style:text-underline-type", "double");
-  if (m_charFormats[charIndex].strikeout) 
textProps.insert("style:text-line-through-type", "single");
-  if (m_charFormats[charIndex].doublestrikeout) 
textProps.insert("style:text-line-through-type", "double");
-  if (m_charFormats[charIndex].allcaps) 
textProps.insert("fo:text-transform", "uppercase");
-  if (m_charFormats[charIndex].initcaps) 

[Libreoffice-commits] libvisio.git: src/lib

2015-12-26 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp |   12 
 src/lib/VSDContentCollector.h   |1 -
 2 files changed, 4 insertions(+), 9 deletions(-)

New commits:
commit b33285f43cc30d1a464f55c25aee548761b9c0f0
Author: Fridrich Å trba 
Date:   Sat Dec 26 23:33:19 2015 +0100

Revert "WIP[0]: sanitize the _flushText mess"

This reverts commit 31b0d9f6c9008c9e7b16cf79136afffc650a9fa9.

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 939a6d0..97be554 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -53,7 +53,7 @@ libvisio::VSDContentCollector::VSDContentCollector(
   m_currentPageNumber(0), m_shapeOutputDrawing(0), m_shapeOutputText(0),
   m_pageOutputDrawing(), m_pageOutputText(), 
m_documentPageShapeOrders(documentPageShapeOrders),
   m_pageShapeOrder(m_documentPageShapeOrders.begin()), 
m_isFirstGeometry(true), m_NURBSData(), m_polylineData(),
-  m_textStream(), m_currentText(), m_names(), m_stencilNames(), m_fields(), 
m_stencilFields(), m_fieldIndex(0),
+  m_textStream(), m_names(), m_stencilNames(), m_fields(), m_stencilFields(), 
m_fieldIndex(0),
   m_textFormat(VSD_TEXT_ANSI), m_charFormats(), m_paraFormats(), 
m_lineStyle(), m_fillStyle(), m_textBlockStyle(),
   m_themeReference(), m_defaultCharStyle(), m_defaultParaStyle(), 
m_currentStyleSheet(0), m_styles(styles),
   m_stencils(stencils), m_stencilShape(0), m_isStencilStarted(false), 
m_currentGeometryCount(0),
@@ -2113,6 +2113,9 @@ void libvisio::VSDContentCollector::collectShape(unsigned 
id, unsigned level, un
   _handleForeignData(m_stencilShape->m_foreign->data);
 }
 
+// m_textStream = m_stencilShape->m_text;
+// m_textFormat = m_stencilShape->m_textFormat;
+
 for (std::map< unsigned, VSDName>::const_iterator iterData = 
m_stencilShape->m_names.begin(); iterData != m_stencilShape->m_names.end(); 
++iterData)
 {
   librevenge::RVNGString nameString;
@@ -2219,13 +,6 @@ void libvisio::VSDContentCollector::collectText(unsigned 
level, const librevenge
 
   m_textStream = textStream;
   m_textFormat = format;
-  m_currentText.clear();
-  if (!m_textStream.empty())
-  {
-std::vector tmpBuffer(textStream.size());
-memcpy([0], textStream.getDataBuffer(), textStream.size());
-appendCharacters(m_currentText, tmpBuffer, format);
-  }
 }
 
 void libvisio::VSDContentCollector::collectParaIX(unsigned /* id */ , unsigned 
level, unsigned charCount, const boost::optional ,
diff --git a/src/lib/VSDContentCollector.h b/src/lib/VSDContentCollector.h
index c3aaff2..9a956db 100644
--- a/src/lib/VSDContentCollector.h
+++ b/src/lib/VSDContentCollector.h
@@ -276,7 +276,6 @@ private:
   std::map m_NURBSData;
   std::map m_polylineData;
   librevenge::RVNGBinaryData m_textStream;
-  librevenge::RVNGString m_currentText;
   std::map m_names, m_stencilNames;
   std::vector m_fields;
   VSDFieldList m_stencilFields;
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-23 Thread Fridrich Štrba
 src/lib/VSD5Parser.cpp  |   11 +++---
 src/lib/VSD6Parser.cpp  |   11 +++---
 src/lib/VSDCollector.h  |3 ++
 src/lib/VSDContentCollector.cpp |   30 +++--
 src/lib/VSDContentCollector.h   |5 +++-
 src/lib/VSDParagraphList.cpp|   31 ++
 src/lib/VSDParagraphList.h  |1 
 src/lib/VSDParser.cpp   |   25 +++-
 src/lib/VSDStyles.h |   28 +++
 src/lib/VSDStylesCollector.cpp  |5 +++-
 src/lib/VSDStylesCollector.h|5 +++-
 src/lib/VSDTypes.h  |   14 +++--
 src/lib/VSDXMLParserBase.cpp|   41 
 src/lib/tokens.txt  |2 +
 14 files changed, 166 insertions(+), 46 deletions(-)

New commits:
commit dd3e1aa57823acd021c8c37076bc2624b6946bfe
Author: Fridrich Å trba 
Date:   Wed Dec 23 10:21:10 2015 +0100

Parse bulletFont and bulletFontSize where applicable

Change-Id: Ibc5ad36a379a3a5bac0c8d561d1d2b33fbde9f91

diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index 20c4430..31cc1c0 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -237,12 +237,15 @@ void 
libvisio::VSD5Parser::readParaIX(librevenge::RVNGInputStream *input)
 
   unsigned char bullet(0);
   VSDName bulletStr;
+  VSDName bulletFont;
+  double bulletFontSize(0.0);
   double textPosAfterTab(0.0);
   unsigned flags(0);
 
   if (m_isInStyles)
 m_collector->collectParaIXStyle(m_header.id, m_header.level, charCount, 
indFirst, indLeft, indRight,
-spLine, spBefore, spAfter, align, bullet, 
bulletStr, textPosAfterTab, flags);
+spLine, spBefore, spAfter, align, bullet, 
bulletStr,
+bulletFont, bulletFontSize, 
textPosAfterTab, flags);
   else
   {
 if (m_isStencilStarted)
@@ -252,9 +255,11 @@ void 
libvisio::VSD5Parser::readParaIX(librevenge::RVNGInputStream *input)
 
 m_shape.m_paraStyle.override(VSDOptionalParaStyle(charCount, indFirst, 
indLeft, indRight,
   spLine, spBefore, 
spAfter, align, bullet,
-  bulletStr, 
textPosAfterTab, flags));
+  bulletStr, bulletFont, 
bulletFontSize,
+  textPosAfterTab, flags));
 m_shape.m_paraList.addParaIX(m_header.id, m_header.level, charCount, 
indFirst, indLeft, indRight,
- spLine, spBefore, spAfter, align, bullet, 
bulletStr, textPosAfterTab, flags);
+ spLine, spBefore, spAfter, align, bullet, 
bulletStr, bulletFont,
+ bulletFontSize, textPosAfterTab, flags);
   }
 }
 
diff --git a/src/lib/VSD6Parser.cpp b/src/lib/VSD6Parser.cpp
index e8707c6..d126433 100644
--- a/src/lib/VSD6Parser.cpp
+++ b/src/lib/VSD6Parser.cpp
@@ -192,6 +192,9 @@ void 
libvisio::VSD6Parser::readParaIX(librevenge::RVNGInputStream *input)
   long remainingData = m_header.dataLength - input->tell() + startPosition;
   unsigned blockLength = 0;
   VSDName bulletStr;
+  VSDName bulletFont;
+  double bulletFontSize(0.0);
+  double textPosAfterBullet(0.0);
 
   while (remainingData >= 4 && (blockLength = readU32(input)))
   {
@@ -219,7 +222,8 @@ void 
libvisio::VSD6Parser::readParaIX(librevenge::RVNGInputStream *input)
 
   if (m_isInStyles)
 m_collector->collectParaIXStyle(m_header.id, m_header.level, charCount, 
indFirst, indLeft, indRight,
-spLine, spBefore, spAfter, align, bullet, 
bulletStr, 0.0, flags);
+spLine, spBefore, spAfter, align, bullet, 
bulletStr, bulletFont,
+bulletFontSize, textPosAfterBullet, flags);
   else
   {
 if (m_isStencilStarted)
@@ -229,9 +233,10 @@ void 
libvisio::VSD6Parser::readParaIX(librevenge::RVNGInputStream *input)
 
 m_shape.m_paraStyle.override(VSDOptionalParaStyle(charCount, indFirst, 
indLeft, indRight,
   spLine, spBefore, 
spAfter, align, bullet,
-  bulletStr, 0.0, flags));
+  bulletStr,bulletFont, 
bulletFontSize, textPosAfterBullet, flags));
 m_shape.m_paraList.addParaIX(m_header.id, m_header.level, charCount, 
indFirst, indLeft, indRight,
- spLine, spBefore, spAfter, align, bullet, 
bulletStr, 0.0, flags);
+ spLine, spBefore, spAfter, align, bullet, 
bulletStr, bulletFont,
+ bulletFontSize, textPosAfterBullet, flags);
   }
 }
 
diff --git a/src/lib/VSDCollector.h b/src/lib/VSDCollector.h
index 56f6b82..201a759 

[Libreoffice-commits] libvisio.git: src/lib

2015-12-22 Thread Fridrich Štrba
 src/lib/VSD5Parser.cpp |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit 1dfe3f4841700eddcbc4960f1a7d0a20916f7a36
Author: Fridrich Å trba 
Date:   Tue Dec 22 14:10:19 2015 +0100

Use a variable

Change-Id: I10fc7bfaa565e229e953dda55c3dd7bdd57fef39

diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index 102be85..20c4430 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -252,7 +252,7 @@ void 
libvisio::VSD5Parser::readParaIX(librevenge::RVNGInputStream *input)
 
 m_shape.m_paraStyle.override(VSDOptionalParaStyle(charCount, indFirst, 
indLeft, indRight,
   spLine, spBefore, 
spAfter, align, bullet,
-  bulletStr, 
textPosAfterTab, 0));
+  bulletStr, 
textPosAfterTab, flags));
 m_shape.m_paraList.addParaIX(m_header.id, m_header.level, charCount, 
indFirst, indLeft, indRight,
  spLine, spBefore, spAfter, align, bullet, 
bulletStr, textPosAfterTab, flags);
   }
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-21 Thread Fridrich Štrba
 src/lib/VSD5Parser.cpp |   28 
 1 file changed, 28 deletions(-)

New commits:
commit d75f197aec002592b3923550f90c25a1d1c6be20
Author: Fridrich Å trba 
Date:   Mon Dec 21 09:37:23 2015 +0100

At least Visio 1 and Visio 2 do not support bullets

Change-Id: Ic1206d889247f27d7b81e6815af7caeae258d5e7

diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index 601313d..4a3393f 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -220,7 +220,6 @@ void 
libvisio::VSD5Parser::readLine(librevenge::RVNGInputStream *input)
 
 void libvisio::VSD5Parser::readParaIX(librevenge::RVNGInputStream *input)
 {
-  // long startPosition = input->tell();
   unsigned charCount = readU16(input);
   input->seek(1, librevenge::RVNG_SEEK_CUR);
   double indFirst = readDouble(input);
@@ -242,34 +241,7 @@ void 
libvisio::VSD5Parser::readParaIX(librevenge::RVNGInputStream *input)
   VSDName bulletStr;
   double textPosAfterTab(0.0);
   unsigned flags(0);
-  /*
-long remainingData = m_header.dataLength - input->tell() + startPosition;
-unsigned blockLength = 0;
 
-while (remainingData >= 2 && (blockLength = readU16(input)))
-{
-  long blockEnd = blockLength-2 + input->tell();
-  unsigned char blockType = readU8(input);
-  unsigned char blockIdx = readU8(input);
-  if (blockType == 2 && blockIdx == 8)
-  {
-input->seek(1, librevenge::RVNG_SEEK_CUR);
-unsigned long numBytes = readU8(input);
-unsigned long numBytesRead = 0;
-const unsigned char *tmpBuffer = input->read(numBytes, numBytesRead);
-if (tmpBuffer && numBytesRead)
-{
-  librevenge::RVNGBinaryData tmpBulletString(tmpBuffer, numBytesRead);
-  bulletStr = VSDName(tmpBulletString, libvisio::VSD_TEXT_ANSI);
-}
-  }
-  else if (blockType == 2 && blockIdx == 3)
-  {
-  };
-  input->seek(blockEnd, librevenge::RVNG_SEEK_SET);
-  remainingData -= blockLength;
-}
-  */
   if (m_isInStyles)
 m_collector->collectParaIXStyle(m_header.id, m_header.level, charCount, 
indFirst, indLeft, indRight,
 spLine, spBefore, spAfter, align, bullet, 
bulletStr, textPosAfterTab, flags);
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-21 Thread Fridrich Štrba
 src/lib/VSD5Parser.cpp |4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

New commits:
commit 3d988f7dfeb7d1d15640b6b9df114122bd0e6036
Author: Fridrich Å trba 
Date:   Mon Dec 21 09:43:39 2015 +0100

At least Visio 1 and Visio 2 do not support bullets

Change-Id: I3884028ab40c7106cbe51cb51036ec213d2b8a60

diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index 4a3393f..102be85 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -234,10 +234,8 @@ void 
libvisio::VSD5Parser::readParaIX(librevenge::RVNGInputStream *input)
   input->seek(1, librevenge::RVNG_SEEK_CUR);
   double spAfter = readDouble(input);
   unsigned char align = readU8(input);
-  unsigned char bullet = 0;
-  readU8(input);
-  input->seek(1, librevenge::RVNG_SEEK_CUR);
 
+  unsigned char bullet(0);
   VSDName bulletStr;
   double textPosAfterTab(0.0);
   unsigned flags(0);
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-20 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp  |   36 ++
 src/lib/VSDOutputElementList.cpp |   97 +--
 src/lib/VSDOutputElementList.h   |2 
 3 files changed, 91 insertions(+), 44 deletions(-)

New commits:
commit 303ad7bc004636c9008d3ca4314b731c6a4f9dde
Author: Fridrich Å trba 
Date:   Sun Dec 20 18:51:31 2015 +0100

0x0a is a paragraph break and not line break in visio

Change-Id: Ib9f63146b408f7aec63fc7bc5bae82a8f8aec912

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 5b2ecb4..8854ddf 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -704,7 +704,41 @@ void libvisio::VSDContentCollector::_flushText()
 
   VSD_DEBUG_MSG(("Text: %s\n", text.cstr()));
   m_shapeOutputText->addOpenSpan(textProps);
-  m_shapeOutputText->addInsertText(text);
+
+  librevenge::RVNGString::Iter i(text);
+  i.rewind();
+  librevenge::RVNGString sOutputText;
+  for (i.rewind(); i.next();)
+  {
+if (*(i()) == '\n')
+{
+  m_shapeOutputText->addInsertText(sOutputText);
+  m_shapeOutputText->addCloseSpan();
+  if (!currentBullet)
+  {
+m_shapeOutputText->addCloseParagraph();
+m_shapeOutputText->addOpenParagraph(paraProps);
+  }
+  else
+  {
+m_shapeOutputText->addCloseListElement();
+m_shapeOutputText->addOpenListElement(paraProps);
+  }
+  m_shapeOutputText->addOpenSpan(textProps);
+  sOutputText.clear();
+}
+else if (*(i()) == '\t')
+{
+  if (!sOutputText.empty())
+m_shapeOutputText->addInsertText(sOutputText);
+  m_shapeOutputText->addInsertTab();
+  sOutputText.clear();
+}
+else
+  sOutputText.append(i());
+  }
+
+  m_shapeOutputText->addInsertText(sOutputText);
   m_shapeOutputText->addCloseSpan();
 
   charIndex++;
diff --git a/src/lib/VSDOutputElementList.cpp b/src/lib/VSDOutputElementList.cpp
index 73ddef4..5b06fb8 100644
--- a/src/lib/VSDOutputElementList.cpp
+++ b/src/lib/VSDOutputElementList.cpp
@@ -15,47 +15,6 @@ namespace libvisio
 namespace
 {
 
-static void separateTabsAndInsertText(librevenge::RVNGDrawingInterface *iface, 
const librevenge::RVNGString )
-{
-  if (!iface || text.empty())
-return;
-  librevenge::RVNGString tmpText;
-  librevenge::RVNGString::Iter i(text);
-  for (i.rewind(); i.next();)
-  {
-if (*(i()) == '\t')
-{
-  if (!tmpText.empty())
-  {
-if (iface)
-  iface->insertText(tmpText);
-tmpText.clear();
-  }
-
-  if (iface)
-iface->insertTab();
-}
-else if (*(i()) == '\n')
-{
-  if (!tmpText.empty())
-  {
-if (iface)
-  iface->insertText(tmpText);
-tmpText.clear();
-  }
-
-  if (iface)
-iface->insertLineBreak();
-}
-else
-{
-  tmpText.append(i());
-}
-  }
-  if (iface && !tmpText.empty())
-iface->insertText(tmpText);
-}
-
 static void separateSpacesAndInsertText(librevenge::RVNGDrawingInterface 
*iface, const librevenge::RVNGString )
 {
   if (!iface)
@@ -79,7 +38,7 @@ static void 
separateSpacesAndInsertText(librevenge::RVNGDrawingInterface *iface,
 {
   if (!tmpText.empty())
   {
-separateTabsAndInsertText(iface, tmpText);
+iface->insertText(tmpText);
 tmpText.clear();
   }
 
@@ -91,7 +50,7 @@ static void 
separateSpacesAndInsertText(librevenge::RVNGDrawingInterface *iface,
   tmpText.append(i());
 }
   }
-  separateTabsAndInsertText(iface, tmpText);
+  iface->insertText(tmpText);
 }
 
 } // anonymous namespace
@@ -239,6 +198,32 @@ private:
 };
 
 
+class VSDInsertLineBreakOutputElement : public VSDOutputElement
+{
+public:
+  VSDInsertLineBreakOutputElement();
+  virtual ~VSDInsertLineBreakOutputElement() {}
+  virtual void draw(librevenge::RVNGDrawingInterface *painter);
+  virtual VSDOutputElement *clone()
+  {
+return new VSDInsertLineBreakOutputElement();
+  }
+};
+
+
+class VSDInsertTabOutputElement : public VSDOutputElement
+{
+public:
+  VSDInsertTabOutputElement();
+  virtual ~VSDInsertTabOutputElement() {}
+  virtual void draw(librevenge::RVNGDrawingInterface *painter);
+  virtual VSDOutputElement *clone()
+  {
+return new VSDInsertTabOutputElement();
+  }
+};
+
+
 class VSDCloseSpanOutputElement : public VSDOutputElement
 {
 public:
@@ -422,6 +407,22 @@ void 
libvisio::VSDInsertTextOutputElement::draw(librevenge::RVNGDrawingInterface
 separateSpacesAndInsertText(painter, m_text);
 }
 
+libvisio::VSDInsertLineBreakOutputElement::VSDInsertLineBreakOutputElement() {}
+
+void 
libvisio::VSDInsertLineBreakOutputElement::draw(librevenge::RVNGDrawingInterface
 *painter)
+{
+  if (painter)
+painter->insertLineBreak();
+}
+

[Libreoffice-commits] libvisio.git: src/lib

2015-12-20 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp |5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

New commits:
commit 21bf4036d74cde752fc3cea6ce3cd7fca2d27829
Author: Fridrich Å trba 
Date:   Sun Dec 20 18:58:33 2015 +0100

Default value of this one is 0.25 inch

Change-Id: Ifffa10e36836a27a48b74b19c9a947a99d1d0bd6

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 8854ddf..190eb84 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -3382,7 +3382,10 @@ void 
libvisio::VSDContentCollector::_listLevelFromBullet(librevenge::RVNGPropert
   propList.insert("librevenge:level", 1);
   propList.insert("text:bullet-char", bullet.m_bulletStr);
   propList.insert("fo:font-size", 1.0, librevenge::RVNG_PERCENT);
-  propList.insert("text:min-label-width", bullet.m_textPosAfterBullet);
+  if (bullet.m_textPosAfterBullet > 0.0)
+propList.insert("text:min-label-width", bullet.m_textPosAfterBullet);
+  else
+propList.insert("text:min-label-width", 0.25);
 }
 
 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-19 Thread Fridrich Štrba
 src/lib/VSD5Parser.cpp |8 +---
 1 file changed, 5 insertions(+), 3 deletions(-)

New commits:
commit 5bc423adc427f85a3ca7909c0639770543dd88de
Author: Fridrich Å trba 
Date:   Sat Dec 19 19:19:59 2015 +0100

Fix warnings about explicit constructors of boost optional

Change-Id: Icb7e6533a1b69e7a02b2c606ce8f65b466d2527e

diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index 58d62b3..601313d 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -240,6 +240,8 @@ void 
libvisio::VSD5Parser::readParaIX(librevenge::RVNGInputStream *input)
   input->seek(1, librevenge::RVNG_SEEK_CUR);
 
   VSDName bulletStr;
+  double textPosAfterTab(0.0);
+  unsigned flags(0);
   /*
 long remainingData = m_header.dataLength - input->tell() + startPosition;
 unsigned blockLength = 0;
@@ -270,7 +272,7 @@ void 
libvisio::VSD5Parser::readParaIX(librevenge::RVNGInputStream *input)
   */
   if (m_isInStyles)
 m_collector->collectParaIXStyle(m_header.id, m_header.level, charCount, 
indFirst, indLeft, indRight,
-spLine, spBefore, spAfter, align, bullet, 
bulletStr, 0.0, 0);
+spLine, spBefore, spAfter, align, bullet, 
bulletStr, textPosAfterTab, flags);
   else
   {
 if (m_isStencilStarted)
@@ -280,9 +282,9 @@ void 
libvisio::VSD5Parser::readParaIX(librevenge::RVNGInputStream *input)
 
 m_shape.m_paraStyle.override(VSDOptionalParaStyle(charCount, indFirst, 
indLeft, indRight,
   spLine, spBefore, 
spAfter, align, bullet,
-  bulletStr, 0.0, 0));
+  bulletStr, 
textPosAfterTab, 0));
 m_shape.m_paraList.addParaIX(m_header.id, m_header.level, charCount, 
indFirst, indLeft, indRight,
- spLine, spBefore, spAfter, align, bullet, 
bulletStr, 0.0, 0);
+ spLine, spBefore, spAfter, align, bullet, 
bulletStr, textPosAfterTab, flags);
   }
 }
 
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-19 Thread Fridrich Štrba
 src/lib/Makefile.am |3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

New commits:
commit bf21d868c539d1664cbdd9d9ac15946637c6e6bd
Author: Fridrich Å trba 
Date:   Sat Dec 19 19:55:00 2015 +0100

Fix build with recent clang that chokes on "register" keyword

Change-Id: Ifbcdae2035b906c37576ffe6c8bd5ad864bb3fda

diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 7585770..75c50a5 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -87,7 +87,8 @@ tokens.h : tokens.gperf
 
 tokenhash.h : tokens.gperf
$(GPERF) --compare-strncmp -C -m 20 tokens.gperf \
-   | $(SED) -e 's/(char\*)0/(char\*)0, 0/g' > tokenhash.h
+   | $(SED) -e 's/(char\*)0/(char\*)0, 0/g' \
+   | $(SED) -e 's/register //g' > tokenhash.h
 
 tokens.gperf : $(top_srcdir)/src/lib/tokens.txt 
$(top_srcdir)/src/lib/gentoken.pl
$(PERL) $(top_srcdir)/src/lib/gentoken.pl 
$(top_srcdir)/src/lib/tokens.txt \
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-19 Thread Fridrich Štrba
 src/lib/Makefile.am |3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

New commits:
commit a41a69b78aa8a5407f6cdec419c5e7433388388b
Author: Fridrich Å trba 
Date:   Sat Dec 19 19:57:02 2015 +0100

Better looking fix

Change-Id: I263f6eaa2c2506212948451cc3946e9b25756422

diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 75c50a5..5442d99 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -87,8 +87,7 @@ tokens.h : tokens.gperf
 
 tokenhash.h : tokens.gperf
$(GPERF) --compare-strncmp -C -m 20 tokens.gperf \
-   | $(SED) -e 's/(char\*)0/(char\*)0, 0/g' \
-   | $(SED) -e 's/register //g' > tokenhash.h
+   | $(SED) -e 's/(char\*)0/(char\*)0, 0/g' -e 's/register //g' > 
tokenhash.h
 
 tokens.gperf : $(top_srcdir)/src/lib/tokens.txt 
$(top_srcdir)/src/lib/gentoken.pl
$(PERL) $(top_srcdir)/src/lib/gentoken.pl 
$(top_srcdir)/src/lib/tokens.txt \
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-18 Thread Fridrich Štrba
 src/lib/VSD5Parser.cpp |   50 +
 1 file changed, 26 insertions(+), 24 deletions(-)

New commits:
commit 3c23f01aa8947f7fc43db98f8b2987b1e1b87637
Author: Fridrich Å trba 
Date:   Fri Dec 18 18:10:44 2015 +0100

Disable bullets for vsd5 for the while

Change-Id: Iac61f5d477b2d732785b6bfbb4b8a9a152f7b281

diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index 1c116f6..58d62b3 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -220,7 +220,7 @@ void 
libvisio::VSD5Parser::readLine(librevenge::RVNGInputStream *input)
 
 void libvisio::VSD5Parser::readParaIX(librevenge::RVNGInputStream *input)
 {
-  long startPosition = input->tell();
+  // long startPosition = input->tell();
   unsigned charCount = readU16(input);
   input->seek(1, librevenge::RVNG_SEEK_CUR);
   double indFirst = readDouble(input);
@@ -235,37 +235,39 @@ void 
libvisio::VSD5Parser::readParaIX(librevenge::RVNGInputStream *input)
   input->seek(1, librevenge::RVNG_SEEK_CUR);
   double spAfter = readDouble(input);
   unsigned char align = readU8(input);
-  unsigned char bullet = readU8(input);
+  unsigned char bullet = 0;
+  readU8(input);
   input->seek(1, librevenge::RVNG_SEEK_CUR);
 
-  long remainingData = m_header.dataLength - input->tell() + startPosition;
-  unsigned blockLength = 0;
   VSDName bulletStr;
+  /*
+long remainingData = m_header.dataLength - input->tell() + startPosition;
+unsigned blockLength = 0;
 
-  while (remainingData >= 2 && (blockLength = readU16(input)))
-  {
-long blockEnd = blockLength-2 + input->tell();
-unsigned char blockType = readU8(input);
-unsigned char blockIdx = readU8(input);
-if (blockType == 2 && blockIdx == 8)
+while (remainingData >= 2 && (blockLength = readU16(input)))
 {
-  input->seek(1, librevenge::RVNG_SEEK_CUR);
-  unsigned long numBytes = readU8(input);
-  unsigned long numBytesRead = 0;
-  const unsigned char *tmpBuffer = input->read(numBytes, numBytesRead);
-  if (tmpBuffer && numBytesRead)
+  long blockEnd = blockLength-2 + input->tell();
+  unsigned char blockType = readU8(input);
+  unsigned char blockIdx = readU8(input);
+  if (blockType == 2 && blockIdx == 8)
   {
-librevenge::RVNGBinaryData tmpBulletString(tmpBuffer, numBytesRead);
-bulletStr = VSDName(tmpBulletString, libvisio::VSD_TEXT_ANSI);
+input->seek(1, librevenge::RVNG_SEEK_CUR);
+unsigned long numBytes = readU8(input);
+unsigned long numBytesRead = 0;
+const unsigned char *tmpBuffer = input->read(numBytes, numBytesRead);
+if (tmpBuffer && numBytesRead)
+{
+  librevenge::RVNGBinaryData tmpBulletString(tmpBuffer, numBytesRead);
+  bulletStr = VSDName(tmpBulletString, libvisio::VSD_TEXT_ANSI);
+}
   }
+  else if (blockType == 2 && blockIdx == 3)
+  {
+  };
+  input->seek(blockEnd, librevenge::RVNG_SEEK_SET);
+  remainingData -= blockLength;
 }
-else if (blockType == 2 && blockIdx == 3)
-{
-};
-input->seek(blockEnd, librevenge::RVNG_SEEK_SET);
-remainingData -= blockLength;
-  }
-
+  */
   if (m_isInStyles)
 m_collector->collectParaIXStyle(m_header.id, m_header.level, charCount, 
indFirst, indLeft, indRight,
 spLine, spBefore, spAfter, align, bullet, 
bulletStr, 0.0, 0);
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-18 Thread Fridrich Štrba
 src/lib/VSD5Parser.cpp   |   66 
 src/lib/VSD5Parser.h |1 
 src/lib/VSD6Parser.cpp   |   43 +++--
 src/lib/VSDCollector.h   |   10 ++-
 src/lib/VSDContentCollector.cpp  |  126 ++-
 src/lib/VSDContentCollector.h|   10 ++-
 src/lib/VSDOutputElementList.cpp |  114 +++
 src/lib/VSDOutputElementList.h   |   10 ++-
 src/lib/VSDParagraphList.cpp |   37 +++
 src/lib/VSDParagraphList.h   |3 
 src/lib/VSDParser.cpp|   47 --
 src/lib/VSDStyles.h  |   37 ---
 src/lib/VSDStylesCollector.cpp   |   20 --
 src/lib/VSDStylesCollector.h |8 +-
 src/lib/VSDTypes.h   |   23 +++
 src/lib/VSDXMLParserBase.cpp |   33 --
 src/lib/tokens.txt   |3 
 17 files changed, 523 insertions(+), 68 deletions(-)

New commits:
commit 0766a97602f3dd8e68b47fd838d3897f20dc58da
Author: Fridrich Å trba 
Date:   Fri Dec 18 17:26:42 2015 +0100

BIPU support of bullets

Change-Id: If859332ac564522fdad06c081b644fba0759880b

diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index be47174..1c116f6 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -218,6 +218,72 @@ void 
libvisio::VSD5Parser::readLine(librevenge::RVNGInputStream *input)
 m_shape.m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, c, 
linePattern, startMarker, endMarker, lineCap, rounding));
 }
 
+void libvisio::VSD5Parser::readParaIX(librevenge::RVNGInputStream *input)
+{
+  long startPosition = input->tell();
+  unsigned charCount = readU16(input);
+  input->seek(1, librevenge::RVNG_SEEK_CUR);
+  double indFirst = readDouble(input);
+  input->seek(1, librevenge::RVNG_SEEK_CUR);
+  double indLeft = readDouble(input);
+  input->seek(1, librevenge::RVNG_SEEK_CUR);
+  double indRight = readDouble(input);
+  input->seek(1, librevenge::RVNG_SEEK_CUR);
+  double spLine = readDouble(input);
+  input->seek(1, librevenge::RVNG_SEEK_CUR);
+  double spBefore = readDouble(input);
+  input->seek(1, librevenge::RVNG_SEEK_CUR);
+  double spAfter = readDouble(input);
+  unsigned char align = readU8(input);
+  unsigned char bullet = readU8(input);
+  input->seek(1, librevenge::RVNG_SEEK_CUR);
+
+  long remainingData = m_header.dataLength - input->tell() + startPosition;
+  unsigned blockLength = 0;
+  VSDName bulletStr;
+
+  while (remainingData >= 2 && (blockLength = readU16(input)))
+  {
+long blockEnd = blockLength-2 + input->tell();
+unsigned char blockType = readU8(input);
+unsigned char blockIdx = readU8(input);
+if (blockType == 2 && blockIdx == 8)
+{
+  input->seek(1, librevenge::RVNG_SEEK_CUR);
+  unsigned long numBytes = readU8(input);
+  unsigned long numBytesRead = 0;
+  const unsigned char *tmpBuffer = input->read(numBytes, numBytesRead);
+  if (tmpBuffer && numBytesRead)
+  {
+librevenge::RVNGBinaryData tmpBulletString(tmpBuffer, numBytesRead);
+bulletStr = VSDName(tmpBulletString, libvisio::VSD_TEXT_ANSI);
+  }
+}
+else if (blockType == 2 && blockIdx == 3)
+{
+};
+input->seek(blockEnd, librevenge::RVNG_SEEK_SET);
+remainingData -= blockLength;
+  }
+
+  if (m_isInStyles)
+m_collector->collectParaIXStyle(m_header.id, m_header.level, charCount, 
indFirst, indLeft, indRight,
+spLine, spBefore, spAfter, align, bullet, 
bulletStr, 0.0, 0);
+  else
+  {
+if (m_isStencilStarted)
+{
+  VSD_DEBUG_MSG(("Found stencil paragraph style\n"));
+}
+
+m_shape.m_paraStyle.override(VSDOptionalParaStyle(charCount, indFirst, 
indLeft, indRight,
+  spLine, spBefore, 
spAfter, align, bullet,
+  bulletStr, 0.0, 0));
+m_shape.m_paraList.addParaIX(m_header.id, m_header.level, charCount, 
indFirst, indLeft, indRight,
+ spLine, spBefore, spAfter, align, bullet, 
bulletStr, 0.0, 0);
+  }
+}
+
 void libvisio::VSD5Parser::readCharIX(librevenge::RVNGInputStream *input)
 {
   unsigned charCount = readU16(input);
diff --git a/src/lib/VSD5Parser.h b/src/lib/VSD5Parser.h
index 08e8497..914f93d 100644
--- a/src/lib/VSD5Parser.h
+++ b/src/lib/VSD5Parser.h
@@ -43,6 +43,7 @@ protected:
   virtual void readFillAndShadow(librevenge::RVNGInputStream *input);
   virtual void readTextBlock(librevenge::RVNGInputStream *input);
   virtual void readCharIX(librevenge::RVNGInputStream *input);
+  virtual void readParaIX(librevenge::RVNGInputStream *input);
   virtual void readTextField(librevenge::RVNGInputStream *input);
 
   virtual void readShape(librevenge::RVNGInputStream *input);
diff --git a/src/lib/VSD6Parser.cpp b/src/lib/VSD6Parser.cpp
index d38454e..e8707c6 100644
--- a/src/lib/VSD6Parser.cpp
+++ 

[Libreoffice-commits] libvisio.git: src/lib

2015-12-16 Thread Fridrich Štrba
 src/lib/VSDParser.cpp |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit 90c35b861c65ee1e4dfd12136ff0d7c65f8337f5
Author: Fridrich Å trba 
Date:   Thu Dec 17 07:53:06 2015 +0100

Fix tab reading for VSD5 and lower

Change-Id: I226205030e458d9661a845cb87c1ac920341679c

diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index 72dfe00..47e58b4 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -773,7 +773,7 @@ void 
libvisio::VSDParser::readOLEData(librevenge::RVNGInputStream *input)
 
 void libvisio::VSDParser::readTabsData(librevenge::RVNGInputStream *input)
 {
-  m_shape.m_tabSets[m_header.id].m_numChars = readU32(input);
+  m_shape.m_tabSets[m_header.id].m_numChars = getUInt(input);
   unsigned char numStops = readU8(input);
   m_shape.m_tabSets[m_header.id].m_tabStops.clear();
   for (unsigned char i = 0; i < numStops; ++i)
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-15 Thread Fridrich Štrba
 src/lib/VSDXParser.cpp |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

New commits:
commit eb215fd49bd9dff8bbf3e5f37aede7036afffec9
Author: Fridrich Å trba 
Date:   Tue Dec 15 18:23:24 2015 +0100

micro-optimization

Change-Id: If726061c9e4f543a4f174b35a40fc79d333d9fcc

diff --git a/src/lib/VSDXParser.cpp b/src/lib/VSDXParser.cpp
index b8ef91b..55b2d20 100644
--- a/src/lib/VSDXParser.cpp
+++ b/src/lib/VSDXParser.cpp
@@ -576,9 +576,9 @@ int libvisio::VSDXParser::getElementToken(xmlTextReaderPtr 
reader)
   tokenId = VSDXMLTokenMap::getTokenId(stringValue);
   if (tokenId == XML_TOKEN_INVALID)
   {
-if (!strncmp((char *)stringValue, "Position", 8))
+if (*stringValue == 'P' && !strncmp((char *)stringValue, "Position", 
8))
   tokenId = XML_POSITION;
-else if (!strncmp((char *)stringValue, "Alignment", 9))
+else if (*stringValue == 'A' && !strncmp((char *)stringValue, 
"Alignment", 9))
   tokenId = XML_ALIGNMENT;
   }
 }
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-15 Thread Fridrich Štrba
 src/lib/VSDXParser.cpp |7 +++
 1 file changed, 7 insertions(+)

New commits:
commit fce884985c0fdec7b6bdb18ad2ee38bce821cc0b
Author: Fridrich Å trba 
Date:   Tue Dec 15 17:52:24 2015 +0100

Work around the VSDX format stupidity

Change-Id: Ida105c55f1810e1230b6ccd6b975e13ed77da719

diff --git a/src/lib/VSDXParser.cpp b/src/lib/VSDXParser.cpp
index 1bdd33f..1460f88 100644
--- a/src/lib/VSDXParser.cpp
+++ b/src/lib/VSDXParser.cpp
@@ -574,6 +574,13 @@ int libvisio::VSDXParser::getElementToken(xmlTextReaderPtr 
reader)
 if (stringValue)
 {
   tokenId = VSDXMLTokenMap::getTokenId(stringValue);
+  if (tokenId == XML_TOKEN_INVALID)
+  {
+if (!strncmp((char *)stringValue, "Position", 8))
+  tokenId = XML_POSITION;
+else if (!strncmp((char *)stringValue, "Alignment", 9))
+  tokenId = XML_ALIGNMENT;
+  }
   xmlFree(stringValue);
 }
 return tokenId;
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-14 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp |  141 +++-
 1 file changed, 140 insertions(+), 1 deletion(-)

New commits:
commit 8ce3cd43bfb1190574296b7fad873fe3fa16007d
Author: Fridrich Å trba 
Date:   Mon Dec 14 10:57:48 2015 +0100

BIPU support of hatch fill

Change-Id: Ia0eadd391e820f03795ca0742934b49b283153e9

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 79d351f..a1ef3ff 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -2476,6 +2476,145 @@ void 
libvisio::VSDContentCollector::_fillAndShadowProperties(const VSDFillStyle
 else
   styleProps.remove("draw:opacity");
   }
+  else if (style.pattern >= 2 && style.pattern <= 24)
+  {
+styleProps.insert("draw:fill", "hatch");
+if (style.bgTransparency == 1)
+  styleProps.insert("draw:fill-hatch-solid", "false");
+else
+{
+  styleProps.insert("draw:fill-hatch-solid", "true");
+  styleProps.insert("draw:opacity", (1 - (std::max)(style.fgTransparency, 
style.bgTransparency)), librevenge::RVNG_PERCENT);
+  styleProps.insert("draw:fill-color", getColourString(style.bgColour));
+}
+
+styleProps.insert("draw:color", getColourString(style.fgColour));
+if (style.pattern == 2)
+{
+  styleProps.insert("draw:style", "single");
+  styleProps.insert("draw:rotation", 45);
+  styleProps.insert("draw:distance", 0.1, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 3)
+{
+  styleProps.insert("draw:style", "double");
+  styleProps.insert("draw:distance", 0.1, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 4)
+{
+  styleProps.insert("draw:style", "double");
+  styleProps.insert("draw:rotation", 45);
+  styleProps.insert("draw:distance", 0.1, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 5)
+{
+  styleProps.insert("draw:style", "single");
+  styleProps.insert("draw:rotation", 315);
+  styleProps.insert("draw:distance", 0.1, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 6)
+{
+  styleProps.insert("draw:style", "single");
+  styleProps.insert("draw:distance", 0.1, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 7)
+{
+  styleProps.insert("draw:style", "single");
+  styleProps.insert("draw:rotation", 90);
+  styleProps.insert("draw:distance", 0.1, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 8)
+{
+  styleProps.insert("draw:style", "triple");
+  styleProps.insert("draw:distance", 0.05, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 9)
+{
+  styleProps.insert("draw:style", "triple");
+  styleProps.insert("draw:distance", 0.05, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 10)
+{
+  styleProps.insert("draw:style", "triple");
+  styleProps.insert("draw:distance", 0.05, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 11)
+{
+  styleProps.insert("draw:style", "triple");
+  styleProps.insert("draw:distance", 0.05, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 12)
+{
+  styleProps.insert("draw:style", "triple");
+  styleProps.insert("draw:distance", 0.05, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 13)
+{
+  styleProps.insert("draw:style", "single");
+  styleProps.insert("draw:distance", 0.05, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 14)
+{
+  styleProps.insert("draw:style", "single");
+  styleProps.insert("draw:rotation", 90);
+  styleProps.insert("draw:distance", 0.05, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 15)
+{
+  styleProps.insert("draw:style", "single");
+  styleProps.insert("draw:rotation", 315);
+  styleProps.insert("draw:distance", 0.05, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 16)
+{
+  styleProps.insert("draw:style", "single");
+  styleProps.insert("draw:rotation", 45);
+  styleProps.insert("draw:distance", 0.05, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 17)
+{
+  styleProps.insert("draw:style", "triple");
+  styleProps.insert("draw:distance", 0.05, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 18)
+{
+  styleProps.insert("draw:style", "triple");
+  styleProps.insert("draw:distance", 0.05, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 19)
+{
+  styleProps.insert("draw:style", "single");
+  styleProps.insert("draw:distance", 0.05, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 20)
+{
+  styleProps.insert("draw:style", "single");
+  styleProps.insert("draw:rotation", 90);
+  styleProps.insert("draw:distance", 0.05, librevenge::RVNG_INCH);
+}
+else if (style.pattern == 21)
+{
+  styleProps.insert("draw:style", "single");
+ 

[Libreoffice-commits] libvisio.git: src/lib

2015-12-14 Thread Fridrich Štrba
 src/lib/VDXParser.cpp   |9 +++--
 src/lib/VSD5Parser.cpp  |8 +---
 src/lib/VSDCollector.h  |4 ++--
 src/lib/VSDContentCollector.cpp |   22 +-
 src/lib/VSDContentCollector.h   |4 ++--
 src/lib/VSDParser.cpp   |   10 ++
 src/lib/VSDStyles.h |   21 +
 src/lib/VSDStylesCollector.cpp  |   28 +---
 src/lib/VSDStylesCollector.h|4 ++--
 src/lib/VSDXMLParserBase.cpp|2 +-
 src/lib/VSDXParser.cpp  |9 +++--
 src/lib/tokens.txt  |1 +
 12 files changed, 76 insertions(+), 46 deletions(-)

New commits:
commit 7b04394d01b5dfa227b213e0efac55dfd8d77c9d
Author: Fridrich Å trba 
Date:   Tue Dec 15 07:59:06 2015 +0100

Read rounding in line properties

Change-Id: Ib08f7625f7a41d7f37e8abce60a94b87bc742ecf

diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp
index b2da904..d09aff1 100644
--- a/src/lib/VDXParser.cpp
+++ b/src/lib/VDXParser.cpp
@@ -316,6 +316,7 @@ void libvisio::VDXParser::readLine(xmlTextReaderPtr reader)
   boost::optional startMarker;
   boost::optional endMarker;
   boost::optional lineCap;
+  boost::optional rounding;
 
   unsigned level = (unsigned)getElementDepth(reader);
   int ret = 1;
@@ -344,6 +345,10 @@ void libvisio::VDXParser::readLine(xmlTextReaderPtr reader)
   if (XML_READER_TYPE_ELEMENT == tokenType)
 ret = readByteData(linePattern, reader);
   break;
+case XML_ROUNDING:
+  if (XML_READER_TYPE_ELEMENT == tokenType)
+ret = readDoubleData(rounding, reader);
+  break;
 case XML_BEGINARROW:
   if (XML_READER_TYPE_ELEMENT == tokenType)
 ret = readByteData(startMarker, reader);
@@ -363,9 +368,9 @@ void libvisio::VDXParser::readLine(xmlTextReaderPtr reader)
   while ((XML_LINE != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) && 
1 == ret && (!m_watcher || !m_watcher->isError()));
 
   if (m_isInStyles)
-m_collector->collectLineStyle(level, strokeWidth, colour, linePattern, 
startMarker, endMarker, lineCap);
+m_collector->collectLineStyle(level, strokeWidth, colour, linePattern, 
startMarker, endMarker, lineCap, rounding);
   else
-m_shape.m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, colour, 
linePattern, startMarker, endMarker, lineCap));
+m_shape.m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, colour, 
linePattern, startMarker, endMarker, lineCap, rounding));
 }
 
 void libvisio::VDXParser::readFillAndShadow(xmlTextReaderPtr reader)
diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index 7120c79..7a014be 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -199,15 +199,17 @@ void 
libvisio::VSD5Parser::readLine(librevenge::RVNGInputStream *input)
   unsigned char colourIndex = readU8(input);
   Colour c = _colourFromIndex(colourIndex);
   unsigned char linePattern = readU8(input);
-  input->seek(10, librevenge::RVNG_SEEK_CUR);
+  input->seek(1, librevenge::RVNG_SEEK_CUR);
+  double rounding = readDouble(input);
+  input->seek(1, librevenge::RVNG_SEEK_CUR);
   unsigned char startMarker = readU8(input);
   unsigned char endMarker = readU8(input);
   unsigned char lineCap = readU8(input);
 
   if (m_isInStyles)
-m_collector->collectLineStyle(m_header.level, strokeWidth, c, linePattern, 
startMarker, endMarker, lineCap);
+m_collector->collectLineStyle(m_header.level, strokeWidth, c, linePattern, 
startMarker, endMarker, lineCap, rounding);
   else
-m_shape.m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, c, 
linePattern, startMarker, endMarker, lineCap));
+m_shape.m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, c, 
linePattern, startMarker, endMarker, lineCap, rounding));
 }
 
 void libvisio::VSD5Parser::readCharIX(librevenge::RVNGInputStream *input)
diff --git a/src/lib/VSDCollector.h b/src/lib/VSDCollector.h
index 35034f9..81914b6 100644
--- a/src/lib/VSDCollector.h
+++ b/src/lib/VSDCollector.h
@@ -30,7 +30,7 @@ public:
   virtual void collectEllipse(unsigned id, unsigned level, double cx, double 
cy, double xleft, double yleft, double xtop, double ytop) = 0;
   virtual void collectLine(unsigned level, const boost::optional 
, const boost::optional , const boost::optional ,
const boost::optional , 
const boost::optional ,
-   const boost::optional ) = 0;
+   const boost::optional , 
const boost::optional ) = 0;
   virtual void collectFillAndShadow(unsigned level, const 
boost::optional , const boost::optional ,
 const boost::optional 
, const boost::optional ,
 const boost::optional 
, const boost::optional ,
@@ -109,7 +109,7 @@ public:
   virtual void collectStyleSheet(unsigned id, unsigned level,unsigned 
parentLineStyle, unsigned parentFillStyle, unsigned parentTextStyle) = 0;
   

[Libreoffice-commits] libvisio.git: src/lib

2015-12-14 Thread Fridrich Štrba
 src/lib/VSDGeometryList.cpp |   42 +-
 src/lib/VSDGeometryList.h   |5 +++--
 2 files changed, 24 insertions(+), 23 deletions(-)

New commits:
commit 59862251d109604ec0b6f196193734810334de03
Author: Fridrich Å trba 
Date:   Mon Dec 14 19:12:48 2015 +0100

Try to prepare the VSDGeometryList to the rounded rectangles

Change-Id: I7b322532fe88b53f6ec2ea66bc39d5104733f6bf

diff --git a/src/lib/VSDGeometryList.cpp b/src/lib/VSDGeometryList.cpp
index 50cfb7e..e11a22a 100644
--- a/src/lib/VSDGeometryList.cpp
+++ b/src/lib/VSDGeometryList.cpp
@@ -20,7 +20,7 @@ class VSDGeometry : public VSDGeometryListElement
 public:
   VSDGeometry(unsigned id, unsigned level, const boost::optional ,
   const boost::optional , const boost::optional 
) :
-VSDGeometryListElement(id, level), m_noFill(FROM_OPTIONAL(noFill, false)),
+VSDGeometryListElement(id, level, 0.0), m_noFill(FROM_OPTIONAL(noFill, 
false)),
 m_noLine(FROM_OPTIONAL(noLine, false)), m_noShow(FROM_OPTIONAL(noShow, 
false)) {}
   virtual ~VSDGeometry() {}
   void handle(VSDCollector *collector) const;
@@ -34,7 +34,7 @@ class VSDEmpty : public VSDGeometryListElement
 {
 public:
   VSDEmpty(unsigned id, unsigned level) :
-VSDGeometryListElement(id, level) {}
+VSDGeometryListElement(id, level, 0.0) {}
   virtual ~VSDEmpty() {}
   void handle(VSDCollector *collector) const;
   VSDGeometryListElement *clone();
@@ -44,7 +44,7 @@ class VSDMoveTo : public VSDGeometryListElement
 {
 public:
   VSDMoveTo(unsigned id, unsigned level, const boost::optional , 
const boost::optional ) :
-VSDGeometryListElement(id, level), m_x(FROM_OPTIONAL(x, 0.0)), 
m_y(FROM_OPTIONAL(y, 0.0)) {}
+VSDGeometryListElement(id, level, 0.0), m_x(FROM_OPTIONAL(x, 0.0)), 
m_y(FROM_OPTIONAL(y, 0.0)) {}
   virtual ~VSDMoveTo() {}
   void handle(VSDCollector *collector) const;
   VSDGeometryListElement *clone();
@@ -55,7 +55,7 @@ class VSDLineTo : public VSDGeometryListElement
 {
 public:
   VSDLineTo(unsigned id, unsigned level, const boost::optional , 
const boost::optional ) :
-VSDGeometryListElement(id, level), m_x(FROM_OPTIONAL(x, 0.0)), 
m_y(FROM_OPTIONAL(y, 0.0)) {}
+VSDGeometryListElement(id, level, 0.0), m_x(FROM_OPTIONAL(x, 0.0)), 
m_y(FROM_OPTIONAL(y, 0.0)) {}
   virtual ~VSDLineTo() {}
   void handle(VSDCollector *collector) const;
   VSDGeometryListElement *clone();
@@ -66,7 +66,7 @@ class VSDArcTo : public VSDGeometryListElement
 {
 public:
   VSDArcTo(unsigned id, unsigned level, const boost::optional , 
const boost::optional , const boost::optional ) :
-VSDGeometryListElement(id, level), m_x2(FROM_OPTIONAL(x2, 0.0)), 
m_y2(FROM_OPTIONAL(y2, 0.0)), m_bow(FROM_OPTIONAL(bow, 0.0)) {}
+VSDGeometryListElement(id, level, 0.0), m_x2(FROM_OPTIONAL(x2, 0.0)), 
m_y2(FROM_OPTIONAL(y2, 0.0)), m_bow(FROM_OPTIONAL(bow, 0.0)) {}
   virtual ~VSDArcTo() {}
   void handle(VSDCollector *collector) const;
   VSDGeometryListElement *clone();
@@ -79,7 +79,7 @@ public:
   VSDEllipse(unsigned id, unsigned level, const boost::optional , 
const boost::optional ,
  const boost::optional , const 
boost::optional ,
  const boost::optional , const 
boost::optional ) :
-VSDGeometryListElement(id, level), m_cx(FROM_OPTIONAL(cx, 0.0)), 
m_cy(FROM_OPTIONAL(cy, 0.0)),
+VSDGeometryListElement(id, level, 0.0), m_cx(FROM_OPTIONAL(cx, 0.0)), 
m_cy(FROM_OPTIONAL(cy, 0.0)),
 m_xleft(FROM_OPTIONAL(xleft, 0.0)), m_yleft(FROM_OPTIONAL(yleft, 0.0)), 
m_xtop(FROM_OPTIONAL(xtop, 0.0)),
 m_ytop(FROM_OPTIONAL(ytop, 0.0)) {}
   virtual ~VSDEllipse() {}
@@ -94,7 +94,7 @@ public:
   VSDEllipticalArcTo(unsigned id, unsigned level, const 
boost::optional , const boost::optional ,
  const boost::optional , const 
boost::optional ,
  const boost::optional , const 
boost::optional ) :
-VSDGeometryListElement(id, level), m_x3(FROM_OPTIONAL(x3, 0.0)), 
m_y3(FROM_OPTIONAL(y3, 0.0)), m_x2(FROM_OPTIONAL(x2, 0.0)),
+VSDGeometryListElement(id, level, 0.0), m_x3(FROM_OPTIONAL(x3, 0.0)), 
m_y3(FROM_OPTIONAL(y3, 0.0)), m_x2(FROM_OPTIONAL(x2, 0.0)),
 m_y2(FROM_OPTIONAL(y2, 0.0)), m_angle(FROM_OPTIONAL(angle, 0.0)), 
m_ecc(FROM_OPTIONAL(ecc, 1.0)) {}
   virtual ~VSDEllipticalArcTo() {}
   void handle(VSDCollector *collector) const;
@@ -107,7 +107,7 @@ class VSDNURBSTo1 : public VSDGeometryListElement
 public:
   VSDNURBSTo1(unsigned id, unsigned level, double x2, double y2, unsigned char 
xType, unsigned char yType, unsigned degree,
   std::vector > controlPoints, 
std::vector knotVector, std::vector weights) :
-VSDGeometryListElement(id, level), m_x2(x2), m_y2(y2), m_xType(xType), 
m_yType(yType), m_degree(degree), m_controlPoints(controlPoints), 
m_knotVector(knotVector), m_weights(weights) {}
+VSDGeometryListElement(id, level, 0.0), m_x2(x2), m_y2(y2), 
m_xType(xType), 

[Libreoffice-commits] libvisio.git: src/lib

2015-12-14 Thread Fridrich Štrba
 src/lib/VSDGeometryList.cpp |   42 +-
 src/lib/VSDGeometryList.h   |5 ++---
 2 files changed, 23 insertions(+), 24 deletions(-)

New commits:
commit 516f4f64d96e5880fdad683610af39a1d93900bc
Author: Fridrich Å trba 
Date:   Mon Dec 14 19:14:46 2015 +0100

Revert "Try to prepare the VSDGeometryList to the rounded rectangles"

This commit was just plain silly and I should have taken just a bit
more of coffee instead. So, we kick it out again.

This reverts commit 59862251d109604ec0b6f196193734810334de03.

Change-Id: Ie2267aa8af22e76a02b2e08527dafbd1cc175c95

diff --git a/src/lib/VSDGeometryList.cpp b/src/lib/VSDGeometryList.cpp
index e11a22a..50cfb7e 100644
--- a/src/lib/VSDGeometryList.cpp
+++ b/src/lib/VSDGeometryList.cpp
@@ -20,7 +20,7 @@ class VSDGeometry : public VSDGeometryListElement
 public:
   VSDGeometry(unsigned id, unsigned level, const boost::optional ,
   const boost::optional , const boost::optional 
) :
-VSDGeometryListElement(id, level, 0.0), m_noFill(FROM_OPTIONAL(noFill, 
false)),
+VSDGeometryListElement(id, level), m_noFill(FROM_OPTIONAL(noFill, false)),
 m_noLine(FROM_OPTIONAL(noLine, false)), m_noShow(FROM_OPTIONAL(noShow, 
false)) {}
   virtual ~VSDGeometry() {}
   void handle(VSDCollector *collector) const;
@@ -34,7 +34,7 @@ class VSDEmpty : public VSDGeometryListElement
 {
 public:
   VSDEmpty(unsigned id, unsigned level) :
-VSDGeometryListElement(id, level, 0.0) {}
+VSDGeometryListElement(id, level) {}
   virtual ~VSDEmpty() {}
   void handle(VSDCollector *collector) const;
   VSDGeometryListElement *clone();
@@ -44,7 +44,7 @@ class VSDMoveTo : public VSDGeometryListElement
 {
 public:
   VSDMoveTo(unsigned id, unsigned level, const boost::optional , 
const boost::optional ) :
-VSDGeometryListElement(id, level, 0.0), m_x(FROM_OPTIONAL(x, 0.0)), 
m_y(FROM_OPTIONAL(y, 0.0)) {}
+VSDGeometryListElement(id, level), m_x(FROM_OPTIONAL(x, 0.0)), 
m_y(FROM_OPTIONAL(y, 0.0)) {}
   virtual ~VSDMoveTo() {}
   void handle(VSDCollector *collector) const;
   VSDGeometryListElement *clone();
@@ -55,7 +55,7 @@ class VSDLineTo : public VSDGeometryListElement
 {
 public:
   VSDLineTo(unsigned id, unsigned level, const boost::optional , 
const boost::optional ) :
-VSDGeometryListElement(id, level, 0.0), m_x(FROM_OPTIONAL(x, 0.0)), 
m_y(FROM_OPTIONAL(y, 0.0)) {}
+VSDGeometryListElement(id, level), m_x(FROM_OPTIONAL(x, 0.0)), 
m_y(FROM_OPTIONAL(y, 0.0)) {}
   virtual ~VSDLineTo() {}
   void handle(VSDCollector *collector) const;
   VSDGeometryListElement *clone();
@@ -66,7 +66,7 @@ class VSDArcTo : public VSDGeometryListElement
 {
 public:
   VSDArcTo(unsigned id, unsigned level, const boost::optional , 
const boost::optional , const boost::optional ) :
-VSDGeometryListElement(id, level, 0.0), m_x2(FROM_OPTIONAL(x2, 0.0)), 
m_y2(FROM_OPTIONAL(y2, 0.0)), m_bow(FROM_OPTIONAL(bow, 0.0)) {}
+VSDGeometryListElement(id, level), m_x2(FROM_OPTIONAL(x2, 0.0)), 
m_y2(FROM_OPTIONAL(y2, 0.0)), m_bow(FROM_OPTIONAL(bow, 0.0)) {}
   virtual ~VSDArcTo() {}
   void handle(VSDCollector *collector) const;
   VSDGeometryListElement *clone();
@@ -79,7 +79,7 @@ public:
   VSDEllipse(unsigned id, unsigned level, const boost::optional , 
const boost::optional ,
  const boost::optional , const 
boost::optional ,
  const boost::optional , const 
boost::optional ) :
-VSDGeometryListElement(id, level, 0.0), m_cx(FROM_OPTIONAL(cx, 0.0)), 
m_cy(FROM_OPTIONAL(cy, 0.0)),
+VSDGeometryListElement(id, level), m_cx(FROM_OPTIONAL(cx, 0.0)), 
m_cy(FROM_OPTIONAL(cy, 0.0)),
 m_xleft(FROM_OPTIONAL(xleft, 0.0)), m_yleft(FROM_OPTIONAL(yleft, 0.0)), 
m_xtop(FROM_OPTIONAL(xtop, 0.0)),
 m_ytop(FROM_OPTIONAL(ytop, 0.0)) {}
   virtual ~VSDEllipse() {}
@@ -94,7 +94,7 @@ public:
   VSDEllipticalArcTo(unsigned id, unsigned level, const 
boost::optional , const boost::optional ,
  const boost::optional , const 
boost::optional ,
  const boost::optional , const 
boost::optional ) :
-VSDGeometryListElement(id, level, 0.0), m_x3(FROM_OPTIONAL(x3, 0.0)), 
m_y3(FROM_OPTIONAL(y3, 0.0)), m_x2(FROM_OPTIONAL(x2, 0.0)),
+VSDGeometryListElement(id, level), m_x3(FROM_OPTIONAL(x3, 0.0)), 
m_y3(FROM_OPTIONAL(y3, 0.0)), m_x2(FROM_OPTIONAL(x2, 0.0)),
 m_y2(FROM_OPTIONAL(y2, 0.0)), m_angle(FROM_OPTIONAL(angle, 0.0)), 
m_ecc(FROM_OPTIONAL(ecc, 1.0)) {}
   virtual ~VSDEllipticalArcTo() {}
   void handle(VSDCollector *collector) const;
@@ -107,7 +107,7 @@ class VSDNURBSTo1 : public VSDGeometryListElement
 public:
   VSDNURBSTo1(unsigned id, unsigned level, double x2, double y2, unsigned char 
xType, unsigned char yType, unsigned degree,
   std::vector > controlPoints, 
std::vector knotVector, std::vector weights) :
-VSDGeometryListElement(id, level, 0.0), m_x2(x2), m_y2(y2), 

[Libreoffice-commits] libvisio.git: src/lib

2015-12-13 Thread Fridrich Štrba
 src/lib/VSD6Parser.cpp  |4 +++-
 src/lib/VSDContentCollector.cpp |4 ++--
 2 files changed, 5 insertions(+), 3 deletions(-)

New commits:
commit 037e82fcaaacb3b6b68e54f424398e7260d64a62
Author: Fridrich Å trba 
Date:   Mon Dec 14 03:22:58 2015 +0100

Improved handling of stencil text

Change-Id: I8fdae37eec051998b9e4b88b0a6116167da71eae

diff --git a/src/lib/VSD6Parser.cpp b/src/lib/VSD6Parser.cpp
index a9e91fa..d38454e 100644
--- a/src/lib/VSD6Parser.cpp
+++ b/src/lib/VSD6Parser.cpp
@@ -78,8 +78,10 @@ void 
libvisio::VSD6Parser::readText(librevenge::RVNGInputStream *input)
 }
 textStream.append(tmpBuffer, numBytesRead);
 m_shape.m_text = textStream;
-m_shape.m_textFormat = libvisio::VSD_TEXT_ANSI;
   }
+  else
+m_shape.m_text.clear();
+  m_shape.m_textFormat = libvisio::VSD_TEXT_ANSI;
 }
 
 void libvisio::VSD6Parser::readLayerMem(librevenge::RVNGInputStream *input)
diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 0037bd2..79d351f 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -1977,8 +1977,8 @@ void libvisio::VSDContentCollector::collectShape(unsigned 
id, unsigned level, un
   _handleForeignData(m_stencilShape->m_foreign->data);
 }
 
-m_textStream = m_stencilShape->m_text;
-m_textFormat = m_stencilShape->m_textFormat;
+// m_textStream = m_stencilShape->m_text;
+// m_textFormat = m_stencilShape->m_textFormat;
 
 for (std::map< unsigned, VSDName>::const_iterator iterData = 
m_stencilShape->m_names.begin(); iterData != m_stencilShape->m_names.end(); 
++iterData)
 {
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-13 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp |   21 
 src/lib/VSDContentCollector.h   |1 
 src/lib/VSDLayerList.cpp|   42 +---
 src/lib/VSDLayerList.h  |4 +++
 src/lib/VSDParser.cpp   |3 ++
 src/lib/VSDXMLParserBase.cpp|6 +
 src/lib/tokens.txt  |2 +
 7 files changed, 76 insertions(+), 3 deletions(-)

New commits:
commit e7806e9b217fcd195b5f8297091fa83b40b8a95d
Author: Fridrich Å trba 
Date:   Mon Dec 14 00:21:17 2015 +0100

Consider layer visibility and printability

Change-Id: Ie47bd7d066673ddc322826d7f33f99eadfbe1e16

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index aee5456..e66984a 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -272,6 +272,7 @@ void libvisio::VSDContentCollector::_flushCurrentPath()
   m_shapeOutputDrawing->addStyle(fillPathProps);
   librevenge::RVNGPropertyList propList;
   propList.insert("svg:d", path);
+  _appendVisibleAndPrintable(propList);
   m_shapeOutputDrawing->addPath(propList);
 }
   }
@@ -355,6 +356,7 @@ void libvisio::VSDContentCollector::_flushCurrentPath()
   m_shapeOutputDrawing->addStyle(linePathProps);
   librevenge::RVNGPropertyList propList;
   propList.insert("svg:d", path);
+  _appendVisibleAndPrintable(propList);
   m_shapeOutputDrawing->addPath(propList);
 }
   }
@@ -439,6 +441,8 @@ void libvisio::VSDContentCollector::_flushText()
   m_paraFormats[iPara].charCount = numCharsInText;
   }
 
+  _appendVisibleAndPrintable(textBlockProps);
+
   m_shapeOutputText->addStartTextObject(textBlockProps);
 
   unsigned int charIndex = 0;
@@ -670,6 +674,8 @@ void 
libvisio::VSDContentCollector::_flushCurrentForeignData()
   if (angle != 0.0)
 m_currentForeignProps.insert("librevenge:rotate", angle * 180 / M_PI, 
librevenge::RVNG_GENERIC);
 
+  _appendVisibleAndPrintable(m_currentForeignProps);
+
   if (m_currentForeignData.size() && 
m_currentForeignProps["librevenge:mime-type"] && m_foreignWidth != 0.0 && 
m_foreignHeight != 0.0)
   {
 m_shapeOutputDrawing->addStyle(styleProps);
@@ -3019,4 +3025,19 @@ void 
libvisio::VSDContentCollector::collectLayer(unsigned id, unsigned level, co
   m_currentLayerList.addLayer(id, layer);
 }
 
+void 
libvisio::VSDContentCollector::_appendVisibleAndPrintable(librevenge::RVNGPropertyList
 )
+{
+  bool visible = m_currentLayerList.getVisible(m_currentLayerMem);
+  bool printable = m_currentLayerList.getPrintable(m_currentLayerMem);
+
+  if (visible && printable)
+return;
+  else if (!visible && !printable)
+propList.insert("draw:display", "none");
+  else if (!visible && printable)
+propList.insert("draw:display", "printer");
+  else if (visible && !printable)
+propList.insert("draw:display", "screen");
+}
+
 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff --git a/src/lib/VSDContentCollector.h b/src/lib/VSDContentCollector.h
index 02304b2..4b920f8 100644
--- a/src/lib/VSDContentCollector.h
+++ b/src/lib/VSDContentCollector.h
@@ -215,6 +215,7 @@ private:
   void _outputCubicBezierSegment(const std::vector > 
);
   void _outputQuadraticBezierSegment(const std::vector > );
   void _outputLinearBezierSegment(const std::vector 
> );
+  void _appendVisibleAndPrintable(librevenge::RVNGPropertyList );
 
   bool m_isPageStarted;
   double m_pageWidth;
diff --git a/src/lib/VSDLayerList.cpp b/src/lib/VSDLayerList.cpp
index 6ebbbd6..d858e4e 100644
--- a/src/lib/VSDLayerList.cpp
+++ b/src/lib/VSDLayerList.cpp
@@ -9,9 +9,10 @@
 
 #include "VSDLayerList.h"
 
-libvisio::VSDLayer::VSDLayer() : m_colour() {}
+libvisio::VSDLayer::VSDLayer() : m_colour(), m_visible(1), m_printable(1) {}
 
-libvisio::VSDLayer::VSDLayer(const VSDLayer ) : m_colour(layer.m_colour) 
{}
+libvisio::VSDLayer::VSDLayer(const VSDLayer ) :
+  m_colour(layer.m_colour), m_visible(layer.m_visible), 
m_printable(layer.m_printable) {}
 
 libvisio::VSDLayer::~VSDLayer() {}
 
@@ -20,6 +21,8 @@ libvisio::VSDLayer ::VSDLayer::operator=(const 
libvisio::VSDLayer 
   if (this != )
   {
 m_colour = layer.m_colour;
+m_visible = layer.m_visible;
+m_printable = layer.m_printable;
   }
   return *this;
 }
@@ -71,7 +74,7 @@ const libvisio::Colour 
*libvisio::VSDLayerList::getColour(const std::vector::const_iterator iterMap = 
m_elements.find(*iter);
 // It is enough that one layer does not override colour and the original 
colour is used
-if (!iterMap->second.m_colour)
+if (iterMap == m_elements.end() || !iterMap->second.m_colour)
   return 0;
 // This means we are reading the first layer and it overrides colour
 else if (iterColour == m_elements.end())
@@ -85,4 +88,37 @@ const libvisio::Colour 
*libvisio::VSDLayerList::getColour(const std::vectorsecond.m_colour.get_ptr();
 }
 
+bool 

[Libreoffice-commits] libvisio.git: src/lib

2015-12-13 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp |4 
 1 file changed, 4 insertions(+)

New commits:
commit 0ef93c0af5304b7876813a6fcff7cdaabc380cee
Author: Fridrich Å trba 
Date:   Mon Dec 14 01:00:30 2015 +0100

Consider transparency in the solid fill we use instead of hatching

Change-Id: I429d20b2bad02781d22282f4eee7c19e31f3

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index e66984a..0037bd2 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -2609,6 +2609,10 @@ void 
libvisio::VSDContentCollector::_fillAndShadowProperties(const VSDFillStyle
   {
 styleProps.insert("draw:fill", "solid");
 styleProps.insert("draw:fill-color", getColourString(style.bgColour));
+if (style.bgTransparency > 0)
+  styleProps.insert("draw:opacity", 1 - style.bgTransparency, 
librevenge::RVNG_PERCENT);
+else
+  styleProps.remove("draw:opacity");
   }
 
   if (style.shadowPattern)
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-12 Thread Fridrich Štrba
 src/lib/VSDLayerList.cpp |   36 +---
 src/lib/VSDLayerList.h   |5 ++---
 src/lib/VSDParser.cpp|   16 +++-
 src/lib/VSDTypes.h   |6 +++---
 src/lib/VSDXMLParserBase.cpp |7 +--
 src/lib/VSDXParser.cpp   |8 
 6 files changed, 22 insertions(+), 56 deletions(-)

New commits:
commit 06df5223293979bee7e781e8c88d76b4c3fe134b
Author: Fridrich Å trba 
Date:   Sat Dec 12 10:04:48 2015 +0100

Some improvements to the layer colours + make xml parsers work

Change-Id: I78bfed0ec539fc1c034123c90ad27a9e48693232

diff --git a/src/lib/VSDLayerList.cpp b/src/lib/VSDLayerList.cpp
index ca638d4..6ebbbd6 100644
--- a/src/lib/VSDLayerList.cpp
+++ b/src/lib/VSDLayerList.cpp
@@ -9,11 +9,9 @@
 
 #include "VSDLayerList.h"
 
-libvisio::VSDLayer::VSDLayer() :
-  m_colourId(MINUS_ONE), m_colour() {}
+libvisio::VSDLayer::VSDLayer() : m_colour() {}
 
-libvisio::VSDLayer::VSDLayer(const VSDLayer ) :
-  m_colourId(layer.m_colourId), m_colour(layer.m_colour) {}
+libvisio::VSDLayer::VSDLayer(const VSDLayer ) : m_colour(layer.m_colour) 
{}
 
 libvisio::VSDLayer::~VSDLayer() {}
 
@@ -21,7 +19,6 @@ libvisio::VSDLayer ::VSDLayer::operator=(const 
libvisio::VSDLayer 
 {
   if (this != )
   {
-m_colourId = layer.m_colourId;
 m_colour = layer.m_colour;
   }
   return *this;
@@ -67,48 +64,25 @@ void libvisio::VSDLayerList::addLayer(unsigned id, const 
libvisio::VSDLayer 
   m_elements[id] = layer;
 }
 
-unsigned libvisio::VSDLayerList::getColourId(const std::vector )
-{
-  unsigned colourId = MINUS_ONE;
-  for (std::vector::const_iterator iter = ids.begin(); iter != 
ids.end(); ++iter)
-  {
-std::map::const_iterator iterMap = 
m_elements.find(*iter);
-// It is enough that one layer does not override colour and the original 
colour is used
-if (iterMap->second.m_colourId == MINUS_ONE)
-  return MINUS_ONE;
-// This means we are reading the first layer and it overrides colour
-else if (colourId == MINUS_ONE)
-  colourId = iterMap->second.m_colourId;
-// If two layers override colour to two different values, the original 
colour is used
-else if (colourId != iterMap->second.m_colourId)
-  return MINUS_ONE;
-  }
-  return colourId;
-}
-
 const libvisio::Colour *libvisio::VSDLayerList::getColour(const 
std::vector )
 {
-  unsigned colourId = MINUS_ONE;
   std::map::const_iterator iterColour = 
m_elements.end();
   for (std::vector::const_iterator iter = ids.begin(); iter != 
ids.end(); ++iter)
   {
 std::map::const_iterator iterMap = 
m_elements.find(*iter);
 // It is enough that one layer does not override colour and the original 
colour is used
-if (iterMap->second.m_colourId == MINUS_ONE)
+if (!iterMap->second.m_colour)
   return 0;
 // This means we are reading the first layer and it overrides colour
 else if (iterColour == m_elements.end())
-{
-  colourId = iterMap->second.m_colourId;
   iterColour = iterMap;
-}
 // If two layers override colour to two different values, the original 
colour is used
-else if (colourId != iterMap->second.m_colourId)
+else if (!iterColour->second.m_colour || iterColour->second.m_colour.get() 
!= iterMap->second.m_colour.get())
   return 0;
   }
   if (iterColour == m_elements.end())
 return 0;
-  return &(iterColour->second.m_colour);
+  return iterColour->second.m_colour.get_ptr();
 }
 
 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff --git a/src/lib/VSDLayerList.h b/src/lib/VSDLayerList.h
index aa45e14..c9cbb43 100644
--- a/src/lib/VSDLayerList.h
+++ b/src/lib/VSDLayerList.h
@@ -12,6 +12,7 @@
 
 #include 
 #include 
+#include 
 #include "VSDTypes.h"
 
 namespace libvisio
@@ -24,8 +25,7 @@ struct VSDLayer
   ~VSDLayer();
   VSDLayer =(const VSDLayer );
 
-  unsigned m_colourId;
-  Colour m_colour;
+  boost::optional m_colour;
 };
 
 class VSDLayerList
@@ -40,7 +40,6 @@ public:
 
   void addLayer(unsigned id, const VSDLayer );
 
-  unsigned getColourId(const std::vector );
   const Colour *getColour(const std::vector );
 
 private:
diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index 4ecf8d4..e3cd622 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -960,21 +960,19 @@ void 
libvisio::VSDParser::readLayerList(librevenge::RVNGInputStream *input)
 
 void libvisio::VSDParser::readLayer(librevenge::RVNGInputStream *input)
 {
-  VSDLayer layer;
+  libvisio::VSDLayer layer;
   input->seek(8, librevenge::RVNG_SEEK_CUR);
   unsigned char colourId = readU8(input);
   if (colourId == 0xff)
-  {
-layer.m_colourId = MINUS_ONE;
 input->seek(4, librevenge::RVNG_SEEK_CUR);
-  }
   else
   {
-layer.m_colourId = colourId;
-layer.m_colour.r = readU8(input);
-layer.m_colour.g = readU8(input);
-layer.m_colour.b = readU8(input);
-

[Libreoffice-commits] libvisio.git: src/lib

2015-12-12 Thread Fridrich Štrba
 src/lib/VSDXMLParserBase.cpp |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

New commits:
commit 1dbfd0fd94dea802ae45bd0560e2b91b0f0d6f38
Author: Fridrich Å trba 
Date:   Sat Dec 12 16:48:41 2015 +0100

Distinguish correctly when no colour override was given for a given layer

Change-Id: I8db51e89f837c36ad9adcc62c611a76578d0f59b

diff --git a/src/lib/VSDXMLParserBase.cpp b/src/lib/VSDXMLParserBase.cpp
index 5eb1fea..9e20a7c 100644
--- a/src/lib/VSDXMLParserBase.cpp
+++ b/src/lib/VSDXMLParserBase.cpp
@@ -1367,9 +1367,9 @@ void 
libvisio::VSDXMLParserBase::readLayerIX(xmlTextReaderPtr reader)
   if (XML_READER_TYPE_ELEMENT == tokenType)
   {
 Colour colour;
-long idx;
+long idx = -2;
 ret = readExtendedColourData(colour, idx, reader);
-if (idx != 255)
+if (idx != -1)
   layer.m_colour = colour;
   }
   break;
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-11 Thread Fridrich Štrba
 src/lib/VDXParser.cpp   |4 
 src/lib/VSDCollector.h  |1 +
 src/lib/VSDContentCollector.cpp |8 +++-
 src/lib/VSDContentCollector.h   |3 +++
 src/lib/VSDParser.cpp   |   22 +-
 src/lib/VSDParser.h |3 +++
 src/lib/VSDStylesCollector.cpp  |5 +
 src/lib/VSDStylesCollector.h|1 +
 src/lib/VSDXMLParserBase.cpp|   37 +
 src/lib/VSDXMLParserBase.h  |1 +
 src/lib/VSDXParser.cpp  |   25 +
 src/lib/VSDXParser.h|1 +
 src/lib/tokens.txt  |1 +
 13 files changed, 110 insertions(+), 2 deletions(-)

New commits:
commit b5c9438c238c17a7128cbd37249ff284a3e46f94
Author: Fridrich Å trba 
Date:   Fri Dec 11 11:53:09 2015 +0100

Reading some of the layer information in xml parsers too

Change-Id: Ifae38d2131e3f9bae403f93f3f15cfe2bb9f7982

diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp
index a409b11..e644999 100644
--- a/src/lib/VDXParser.cpp
+++ b/src/lib/VDXParser.cpp
@@ -241,6 +241,10 @@ void libvisio::VDXParser::processXmlNode(xmlTextReaderPtr 
reader)
 if (XML_READER_TYPE_ELEMENT == tokenType)
   readGeometry(reader);
 break;
+  case XML_LAYER:
+if (XML_READER_TYPE_ELEMENT == tokenType)
+  readLayerIX(reader);
+break;
   case XML_PARA:
 if (XML_READER_TYPE_ELEMENT == tokenType)
   readParaIX(reader);
diff --git a/src/lib/VSDCollector.h b/src/lib/VSDCollector.h
index 594fcf0..814e377 100644
--- a/src/lib/VSDCollector.h
+++ b/src/lib/VSDCollector.h
@@ -102,6 +102,7 @@ public:
   virtual void collectName(unsigned id, unsigned level,  const 
librevenge::RVNGBinaryData , TextFormat format) = 0;
   virtual void collectPageSheet(unsigned id, unsigned level) = 0;
   virtual void collectMisc(unsigned level, const VSDMisc ) = 0;
+  virtual void collectLayerList(unsigned level, const VSDLayerList ) 
= 0;
 
   // Style collectors
   virtual void collectStyleSheet(unsigned id, unsigned level,unsigned 
parentLineStyle, unsigned parentFillStyle, unsigned parentTextStyle) = 0;
diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 8f2759a..fdcf9fa 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -57,7 +57,7 @@ libvisio::VSDContentCollector::VSDContentCollector(
   m_textFormat(VSD_TEXT_ANSI), m_charFormats(), m_paraFormats(), 
m_lineStyle(), m_fillStyle(), m_textBlockStyle(),
   m_themeReference(), m_defaultCharStyle(), m_defaultParaStyle(), 
m_currentStyleSheet(0), m_styles(styles),
   m_stencils(stencils), m_stencilShape(0), m_isStencilStarted(false), 
m_currentGeometryCount(0),
-  m_backgroundPageID(MINUS_ONE), m_currentPageID(0), m_currentPage(), 
m_pages(),
+  m_backgroundPageID(MINUS_ONE), m_currentPageID(0), m_currentPage(), 
m_pages(), m_layerList(),
   m_splineControlPoints(), m_splineKnotVector(), m_splineX(0.0), 
m_splineY(0.0),
   m_splineLastKnot(0.0), m_splineDegree(0), m_splineLevel(0), 
m_currentShapeLevel(0),
   m_isBackgroundPage(false)
@@ -2973,4 +2973,10 @@ void libvisio::VSDContentCollector::collectMisc(unsigned 
level, const VSDMisc 
   m_misc = misc;
 }
 
+void libvisio::VSDContentCollector::collectLayerList(unsigned level, const 
VSDLayerList )
+{
+  _handleLevelChange(level);
+  m_layerList = layerList;
+}
+
 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff --git a/src/lib/VSDContentCollector.h b/src/lib/VSDContentCollector.h
index a7d148a..7836935 100644
--- a/src/lib/VSDContentCollector.h
+++ b/src/lib/VSDContentCollector.h
@@ -122,6 +122,7 @@ public:
   void collectName(unsigned id, unsigned level,  const 
librevenge::RVNGBinaryData , TextFormat format);
   void collectPageSheet(unsigned id, unsigned level);
   void collectMisc(unsigned level, const VSDMisc );
+  void collectLayerList(unsigned level, const VSDLayerList );
 
 
   // Style collectors
@@ -292,6 +293,8 @@ private:
   VSDPage m_currentPage;
   VSDPages m_pages;
 
+  VSDLayerList m_layerList;
+
   std::vector > m_splineControlPoints;
   std::vector m_splineKnotVector;
   double m_splineX, m_splineY;
diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index b348cbf..7d7ec48 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -24,7 +24,7 @@
 libvisio::VSDParser::VSDParser(librevenge::RVNGInputStream *input, 
librevenge::RVNGDrawingInterface *painter, librevenge::RVNGInputStream 
*container)
   : m_input(input), m_painter(painter), m_container(container), m_header(), 
m_collector(0), m_shapeList(), m_currentLevel(0),
 m_stencils(), m_currentStencil(0), m_shape(), m_isStencilStarted(false), 
m_isInStyles(false),
-m_currentShapeLevel(0), m_currentShapeID(MINUS_ONE), 
m_extractStencils(false), m_colours(),
+m_currentShapeLevel(0), m_currentShapeID(MINUS_ONE), 
m_currentLayerListLevel(0), m_extractStencils(false), m_colours(),
 

[Libreoffice-commits] libvisio.git: src/lib

2015-12-11 Thread Fridrich Štrba
 src/lib/VSDLayerList.cpp |   24 
 src/lib/VSDLayerList.h   |   14 ++
 2 files changed, 30 insertions(+), 8 deletions(-)

New commits:
commit e51525145ebd369093a60ecb902a2739518dca31
Author: Fridrich Å trba 
Date:   Fri Dec 11 10:05:57 2015 +0100

Some useful functions for the VSDLayerList

Change-Id: Icf8e1535adaa8fda02bd1cc89c8d4c42a2d0045c

diff --git a/src/lib/VSDLayerList.cpp b/src/lib/VSDLayerList.cpp
index 3ca5037..73fd233 100644
--- a/src/lib/VSDLayerList.cpp
+++ b/src/lib/VSDLayerList.cpp
@@ -62,4 +62,28 @@ void libvisio::VSDLayerList::clear()
   m_elements.clear();
 }
 
+void libvisio::VSDLayerList::addLayer(unsigned id, const libvisio::VSDLayer 
)
+{
+  m_elements[id] = layer;
+}
+
+unsigned libvisio::VSDLayerList::getColourId(const std::vector )
+{
+  unsigned colourId = MINUS_ONE;
+  for (std::vector::const_iterator iter = ids.begin(); iter != 
ids.end(); ++iter)
+  {
+std::map::const_iterator iterMap = 
m_elements.find(*iter);
+// It is enough that one layer does not override colour and the original 
colour is used
+if (iterMap->second.m_colourId == MINUS_ONE)
+  return MINUS_ONE;
+// This means we are reading the first layer and it overrides colour
+else if (colourId == MINUS_ONE)
+  colourId = iterMap->second.m_colourId;
+// If two layers override colour to two different values, the original 
colour is used
+else if (colourId != iterMap->second.m_colourId)
+  return MINUS_ONE;
+  }
+  return colourId;
+}
+
 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff --git a/src/lib/VSDLayerList.h b/src/lib/VSDLayerList.h
index bc5154b..7267c2a 100644
--- a/src/lib/VSDLayerList.h
+++ b/src/lib/VSDLayerList.h
@@ -11,6 +11,7 @@
 #define __VSDLAYERLIST_H__
 
 #include 
+#include 
 #include "VSDTypes.h"
 
 namespace libvisio
@@ -36,14 +37,11 @@ public:
   VSDLayerList =(const VSDLayerList );
 
   void clear();
-  unsigned long size() const
-  {
-return (unsigned long)m_elements.size();
-  }
-  bool empty() const
-  {
-return (m_elements.empty());
-  }
+
+  void addLayer(unsigned id, const VSDLayer );
+
+  unsigned getColourId(const std::vector );
+
 private:
   std::map m_elements;
 };
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-11 Thread Fridrich Štrba
 src/lib/VSD6Parser.cpp  |   17 +
 src/lib/VSD6Parser.h|1 +
 src/lib/VSDCollector.h  |1 +
 src/lib/VSDContentCollector.cpp |   33 -
 src/lib/VSDContentCollector.h   |3 ++-
 src/lib/VSDParser.cpp   |   22 ++
 src/lib/VSDParser.h |1 +
 src/lib/VSDStencils.cpp |7 +--
 src/lib/VSDStencils.h   |1 +
 src/lib/VSDStylesCollector.cpp  |5 +
 src/lib/VSDStylesCollector.h|1 +
 11 files changed, 88 insertions(+), 4 deletions(-)

New commits:
commit 63841a8aa1798a0cb012fbaed3acae11f54f3485
Author: Fridrich Å trba 
Date:   Fri Dec 11 19:00:52 2015 +0100

Parsing layer membership for binary parsers

Change-Id: Ieaecf3764d4f0dc2cf33a3f69f5b89ba7874ae2c

diff --git a/src/lib/VSD6Parser.cpp b/src/lib/VSD6Parser.cpp
index 9e845eb..a9e91fa 100644
--- a/src/lib/VSD6Parser.cpp
+++ b/src/lib/VSD6Parser.cpp
@@ -82,6 +82,23 @@ void 
libvisio::VSD6Parser::readText(librevenge::RVNGInputStream *input)
   }
 }
 
+void libvisio::VSD6Parser::readLayerMem(librevenge::RVNGInputStream *input)
+{
+  input->seek(13, librevenge::RVNG_SEEK_CUR);
+  unsigned textLength = readU8(input);
+
+  librevenge::RVNGBinaryData  textStream;
+  unsigned long numBytesRead = 0;
+  const unsigned char *tmpBuffer = input->read(textLength, numBytesRead);
+  if (numBytesRead)
+  {
+textStream.append(tmpBuffer, numBytesRead);
+m_shape.m_layerMem.m_data = textStream;
+m_shape.m_layerMem.m_format = libvisio::VSD_TEXT_ANSI;
+  }
+
+}
+
 void libvisio::VSD6Parser::readCharIX(librevenge::RVNGInputStream *input)
 {
   unsigned charCount = readU32(input);
diff --git a/src/lib/VSD6Parser.h b/src/lib/VSD6Parser.h
index 7750441..ea7d072 100644
--- a/src/lib/VSD6Parser.h
+++ b/src/lib/VSD6Parser.h
@@ -34,6 +34,7 @@ private:
   virtual void readName(librevenge::RVNGInputStream *input);
   virtual void readName2(librevenge::RVNGInputStream *input);
   virtual void readTextField(librevenge::RVNGInputStream *input);
+  virtual void readLayerMem(librevenge::RVNGInputStream *input);
 
   VSD6Parser();
   VSD6Parser(const VSDParser &);
diff --git a/src/lib/VSDCollector.h b/src/lib/VSDCollector.h
index f118d14..35034f9 100644
--- a/src/lib/VSDCollector.h
+++ b/src/lib/VSDCollector.h
@@ -103,6 +103,7 @@ public:
   virtual void collectPageSheet(unsigned id, unsigned level) = 0;
   virtual void collectMisc(unsigned level, const VSDMisc ) = 0;
   virtual void collectLayer(unsigned id, unsigned level, const VSDLayer 
) = 0;
+  virtual void collectLayerMem(unsigned level, const VSDName ) = 0;
 
   // Style collectors
   virtual void collectStyleSheet(unsigned id, unsigned level,unsigned 
parentLineStyle, unsigned parentFillStyle, unsigned parentTextStyle) = 0;
diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 79e884a..48d483f 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -60,7 +60,7 @@ libvisio::VSDContentCollector::VSDContentCollector(
   m_backgroundPageID(MINUS_ONE), m_currentPageID(0), m_currentPage(), 
m_pages(), m_layerList(),
   m_splineControlPoints(), m_splineKnotVector(), m_splineX(0.0), 
m_splineY(0.0),
   m_splineLastKnot(0.0), m_splineDegree(0), m_splineLevel(0), 
m_currentShapeLevel(0),
-  m_isBackgroundPage(false), m_currentLayerList()
+  m_isBackgroundPage(false), m_currentLayerList(), m_currentLayerMem()
 {
 }
 
@@ -2974,6 +2974,37 @@ void libvisio::VSDContentCollector::collectMisc(unsigned 
level, const VSDMisc 
   m_misc = misc;
 }
 
+void libvisio::VSDContentCollector::collectLayerMem(unsigned level, const 
VSDName )
+{
+  using namespace ::boost::spirit::classic;
+
+  _handleLevelChange(level);
+  librevenge::RVNGString text;
+  std::vector tmpData(layerMem.m_data.size());
+  memcpy([0], layerMem.m_data.getDataBuffer(), layerMem.m_data.size());
+  appendCharacters(text, tmpData, layerMem.m_format);
+
+  m_currentLayerMem.clear();
+
+  bool bRes = parse(text.cstr(),
+//  Begin grammar
+(
+  // parse comma-delimited list of doubles (have to use the
+  // 'direct' variant, as otherwise spirit refactors our
+  // parser to push both real num and comma to push_back_a)
+  list_p.direct
+  (
+int_p[push_back_a(m_currentLayerMem)],
+';'
+  )
+) >> end_p,
+//  End grammar
+space_p).full;
+
+  if (!bRes)
+m_currentLayerMem.clear();
+}
+
 void libvisio::VSDContentCollector::collectLayer(unsigned id, unsigned level, 
const VSDLayer )
 {
   _handleLevelChange(level);
diff --git a/src/lib/VSDContentCollector.h b/src/lib/VSDContentCollector.h
index fc60a40..02304b2 100644
--- a/src/lib/VSDContentCollector.h
+++ 

[Libreoffice-commits] libvisio.git: src/lib

2015-12-11 Thread Fridrich Štrba
 src/lib/VSDCollector.h  |2 -
 src/lib/VSDContentCollector.cpp |7 +++--
 src/lib/VSDContentCollector.h   |4 ++-
 src/lib/VSDParser.cpp   |   47 +++-
 src/lib/VSDParser.h |2 -
 src/lib/VSDStylesCollector.cpp  |2 -
 src/lib/VSDStylesCollector.h|2 -
 src/lib/VSDXMLParserBase.cpp|   21 ++---
 8 files changed, 60 insertions(+), 27 deletions(-)

New commits:
commit b689fb10a62927b4325661e7783c4f9cb670b000
Author: Fridrich Å trba 
Date:   Fri Dec 11 13:50:12 2015 +0100

Some little changes to parse the layerlist the same way everywhere

Change-Id: Ie7814f465f8f62c5f921f2042c1c305d1a975713

diff --git a/src/lib/VSDCollector.h b/src/lib/VSDCollector.h
index 814e377..f118d14 100644
--- a/src/lib/VSDCollector.h
+++ b/src/lib/VSDCollector.h
@@ -102,7 +102,7 @@ public:
   virtual void collectName(unsigned id, unsigned level,  const 
librevenge::RVNGBinaryData , TextFormat format) = 0;
   virtual void collectPageSheet(unsigned id, unsigned level) = 0;
   virtual void collectMisc(unsigned level, const VSDMisc ) = 0;
-  virtual void collectLayerList(unsigned level, const VSDLayerList ) 
= 0;
+  virtual void collectLayer(unsigned id, unsigned level, const VSDLayer 
) = 0;
 
   // Style collectors
   virtual void collectStyleSheet(unsigned id, unsigned level,unsigned 
parentLineStyle, unsigned parentFillStyle, unsigned parentTextStyle) = 0;
diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index fdcf9fa..79e884a 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -60,7 +60,7 @@ libvisio::VSDContentCollector::VSDContentCollector(
   m_backgroundPageID(MINUS_ONE), m_currentPageID(0), m_currentPage(), 
m_pages(), m_layerList(),
   m_splineControlPoints(), m_splineKnotVector(), m_splineX(0.0), 
m_splineY(0.0),
   m_splineLastKnot(0.0), m_splineDegree(0), m_splineLevel(0), 
m_currentShapeLevel(0),
-  m_isBackgroundPage(false)
+  m_isBackgroundPage(false), m_currentLayerList()
 {
 }
 
@@ -2158,6 +2158,7 @@ void 
libvisio::VSDContentCollector::collectPageSheet(unsigned /* id */, unsigned
 {
   _handleLevelChange(level);
   m_currentShapeLevel = level;
+  m_currentLayerList.clear();
 }
 
 void libvisio::VSDContentCollector::collectStyleSheet(unsigned id, unsigned 
level, unsigned lineStyleParent, unsigned fillStyleParent, unsigned 
textStyleParent)
@@ -2973,10 +2974,10 @@ void 
libvisio::VSDContentCollector::collectMisc(unsigned level, const VSDMisc 
   m_misc = misc;
 }
 
-void libvisio::VSDContentCollector::collectLayerList(unsigned level, const 
VSDLayerList )
+void libvisio::VSDContentCollector::collectLayer(unsigned id, unsigned level, 
const VSDLayer )
 {
   _handleLevelChange(level);
-  m_layerList = layerList;
+  m_currentLayerList.addLayer(id, layer);
 }
 
 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff --git a/src/lib/VSDContentCollector.h b/src/lib/VSDContentCollector.h
index 7836935..fc60a40 100644
--- a/src/lib/VSDContentCollector.h
+++ b/src/lib/VSDContentCollector.h
@@ -122,7 +122,7 @@ public:
   void collectName(unsigned id, unsigned level,  const 
librevenge::RVNGBinaryData , TextFormat format);
   void collectPageSheet(unsigned id, unsigned level);
   void collectMisc(unsigned level, const VSDMisc );
-  void collectLayerList(unsigned level, const VSDLayerList );
+  void collectLayer(unsigned id, unsigned level, const VSDLayer );
 
 
   // Style collectors
@@ -303,6 +303,8 @@ private:
   unsigned m_splineLevel;
   unsigned m_currentShapeLevel;
   bool m_isBackgroundPage;
+
+  VSDLayerList m_currentLayerList;
 };
 
 } // namespace libvisio
diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index 7d7ec48..cbb8192 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -27,7 +27,7 @@ libvisio::VSDParser::VSDParser(librevenge::RVNGInputStream 
*input, librevenge::R
 m_currentShapeLevel(0), m_currentShapeID(MINUS_ONE), 
m_currentLayerListLevel(0), m_extractStencils(false), m_colours(),
 m_isBackgroundPage(false), m_isShapeStarted(false), m_shadowOffsetX(0.0), 
m_shadowOffsetY(0.0),
 m_currentGeometryList(0), m_currentGeomListCount(0), m_fonts(), m_names(), 
m_namesMapMap(),
-m_currentPageName(), m_currentLayerList()
+m_currentPageName()
 {}
 
 libvisio::VSDParser::~VSDParser()
@@ -676,10 +676,6 @@ void libvisio::VSDParser::_handleLevelChange(unsigned 
level)
 {
   if (level == m_currentLevel)
 return;
-  if (level <= m_currentLayerListLevel)
-  {
-m_collector->collectLayerList(level, m_currentLayerList);
-  }
   if (level <= m_currentShapeLevel+1)
   {
 if (!m_shape.m_geometries.empty() && m_currentGeometryList && 
m_currentGeometryList->empty())
@@ -913,7 +909,6 @@ void 
libvisio::VSDParser::readCharList(librevenge::RVNGInputStream *input)
 
 m_shape.m_charList.setElementsOrder(characterOrder);
   }
-
 }
 
 void 

[Libreoffice-commits] libvisio.git: src/lib

2015-12-11 Thread Fridrich Štrba
 src/lib/VSDContentCollector.cpp |   12 ++--
 src/lib/VSDLayerList.cpp|   25 +
 src/lib/VSDLayerList.h  |1 +
 3 files changed, 36 insertions(+), 2 deletions(-)

New commits:
commit 69ae3cb64d39575cb1875acc705763e3dabfb99a
Author: Fridrich Å trba 
Date:   Fri Dec 11 19:54:24 2015 +0100

Account for layer membership for stroke colour and for text colour

Change-Id: I137c039f548b42003f2b0de94d6efd09d8f1a212

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 48d483f..aee5456 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -517,7 +517,11 @@ void libvisio::VSDContentCollector::_flushText()
   if (m_charFormats[charIndex].superscript) 
textProps.insert("style:text-position", "super");
   if (m_charFormats[charIndex].subscript) 
textProps.insert("style:text-position", "sub");
   textProps.insert("fo:font-size", m_charFormats[charIndex].size*72.0, 
librevenge::RVNG_POINT);
-  textProps.insert("fo:color", 
getColourString(m_charFormats[charIndex].colour));
+  Colour colour = m_charFormats[charIndex].colour;
+  const Colour *pColour = m_currentLayerList.getColour(m_currentLayerMem);
+  if (pColour)
+colour = *pColour;
+  textProps.insert("fo:color", getColourString(colour));
   double opacity = 1.0;
   if (m_charFormats[charIndex].colour.a)
 opacity -= (double)(m_charFormats[charIndex].colour.a)/255.0;
@@ -2237,7 +2241,11 @@ void 
libvisio::VSDContentCollector::_lineProperties(const VSDLineStyle , l
   }
 
   styleProps.insert("svg:stroke-width", m_scale*style.width);
-  styleProps.insert("svg:stroke-color", getColourString(style.colour));
+  libvisio::Colour colour = style.colour;
+  const Colour *pColour = m_currentLayerList.getColour(m_currentLayerMem);
+  if (pColour)
+colour = *pColour;
+  styleProps.insert("svg:stroke-color", getColourString(colour));
   if (style.colour.a)
 styleProps.insert("svg:stroke-opacity", (1 - style.colour.a/255.0), 
librevenge::RVNG_PERCENT);
   else
diff --git a/src/lib/VSDLayerList.cpp b/src/lib/VSDLayerList.cpp
index 73fd233..ca638d4 100644
--- a/src/lib/VSDLayerList.cpp
+++ b/src/lib/VSDLayerList.cpp
@@ -86,4 +86,29 @@ unsigned libvisio::VSDLayerList::getColourId(const 
std::vector )
   return colourId;
 }
 
+const libvisio::Colour *libvisio::VSDLayerList::getColour(const 
std::vector )
+{
+  unsigned colourId = MINUS_ONE;
+  std::map::const_iterator iterColour = 
m_elements.end();
+  for (std::vector::const_iterator iter = ids.begin(); iter != 
ids.end(); ++iter)
+  {
+std::map::const_iterator iterMap = 
m_elements.find(*iter);
+// It is enough that one layer does not override colour and the original 
colour is used
+if (iterMap->second.m_colourId == MINUS_ONE)
+  return 0;
+// This means we are reading the first layer and it overrides colour
+else if (iterColour == m_elements.end())
+{
+  colourId = iterMap->second.m_colourId;
+  iterColour = iterMap;
+}
+// If two layers override colour to two different values, the original 
colour is used
+else if (colourId != iterMap->second.m_colourId)
+  return 0;
+  }
+  if (iterColour == m_elements.end())
+return 0;
+  return &(iterColour->second.m_colour);
+}
+
 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff --git a/src/lib/VSDLayerList.h b/src/lib/VSDLayerList.h
index 7267c2a..aa45e14 100644
--- a/src/lib/VSDLayerList.h
+++ b/src/lib/VSDLayerList.h
@@ -41,6 +41,7 @@ public:
   void addLayer(unsigned id, const VSDLayer );
 
   unsigned getColourId(const std::vector );
+  const Colour *getColour(const std::vector );
 
 private:
   std::map m_elements;
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-11 Thread Fridrich Štrba
 src/lib/VDXParser.cpp|   31 +++
 src/lib/VDXParser.h  |2 ++
 src/lib/VSDXMLParserBase.cpp |   22 +-
 src/lib/VSDXMLParserBase.h   |2 ++
 src/lib/VSDXParser.cpp   |4 
 src/lib/VSDXParser.h |1 +
 src/lib/tokens.txt   |2 ++
 7 files changed, 63 insertions(+), 1 deletion(-)

New commits:
commit 0099751db287f87e6d5b1dee5d2ef2479040d188
Author: Fridrich Å trba 
Date:   Fri Dec 11 22:07:50 2015 +0100

Some layer in xml parsers WIP

Change-Id: Ic5a85349aeecfbc3885e61e668c50fb9e9c568f6

diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp
index e644999..b2da904 100644
--- a/src/lib/VDXParser.cpp
+++ b/src/lib/VDXParser.cpp
@@ -269,6 +269,10 @@ void libvisio::VDXParser::processXmlNode(xmlTextReaderPtr 
reader)
 if (XML_READER_TYPE_ELEMENT == tokenType)
   readXForm1D(reader);
 break;
+  case XML_LAYERMEM:
+if (XML_READER_TYPE_ELEMENT == tokenType)
+  readLayerMem(reader);
+break;
   default:
 break;
   }
@@ -538,6 +542,33 @@ void libvisio::VDXParser::readXFormData(xmlTextReaderPtr 
reader)
   while ((XML_XFORM != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) && 
1 == ret && (!m_watcher || !m_watcher->isError()));
 }
 
+void libvisio::VDXParser::readLayerMem(xmlTextReaderPtr reader)
+{
+  int ret = 1;
+  int tokenId = XML_TOKEN_INVALID;
+  int tokenType = -1;
+  do
+  {
+ret = xmlTextReaderRead(reader);
+tokenId = getElementToken(reader);
+if (XML_TOKEN_INVALID == tokenId)
+{
+  VSD_DEBUG_MSG(("VDXParser::readLayerMem: unknown token %s\n", 
xmlTextReaderConstName(reader)));
+}
+tokenType = xmlTextReaderNodeType(reader);
+switch (tokenId)
+{
+case XML_LAYERMEMBER:
+  if (XML_READER_TYPE_ELEMENT == tokenType)
+ret = readStringData(m_shape.m_layerMem, reader);
+  break;
+default:
+  break;
+}
+  }
+  while ((XML_LAYERMEM != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) 
&& 1 == ret && (!m_watcher || !m_watcher->isError()));
+}
+
 void libvisio::VDXParser::readTxtXForm(xmlTextReaderPtr reader)
 {
   int ret = 1;
diff --git a/src/lib/VDXParser.h b/src/lib/VDXParser.h
index 5bca33d..a56954d 100644
--- a/src/lib/VDXParser.h
+++ b/src/lib/VDXParser.h
@@ -24,6 +24,7 @@ class VDXParser : public VSDXMLParserBase
   using VSDXMLParserBase::readDoubleData;
   using VSDXMLParserBase::readBoolData;
   using VSDXMLParserBase::readLongData;
+  using VSDXMLParserBase::readStringData;
 
 public:
   explicit VDXParser(librevenge::RVNGInputStream *input, 
librevenge::RVNGDrawingInterface *painter);
@@ -60,6 +61,7 @@ private:
   void readFonts(xmlTextReaderPtr reader);
   void readTextBlock(xmlTextReaderPtr reader);
   void readForeignInfo(xmlTextReaderPtr reader);
+  void readLayerMem(xmlTextReaderPtr reader);
 
   void getBinaryData(xmlTextReaderPtr reader);
 
diff --git a/src/lib/VSDXMLParserBase.cpp b/src/lib/VSDXMLParserBase.cpp
index 1394f15..2db6b39 100644
--- a/src/lib/VSDXMLParserBase.cpp
+++ b/src/lib/VSDXMLParserBase.cpp
@@ -1060,7 +1060,9 @@ void 
libvisio::VSDXMLParserBase::readPage(xmlTextReaderPtr reader)
   const shared_ptr id(xmlTextReaderGetAttribute(reader, 
BAD_CAST("ID")), xmlFree);
   const shared_ptr bgndPage(xmlTextReaderGetAttribute(reader, 
BAD_CAST("BackPage")), xmlFree);
   const shared_ptr background(xmlTextReaderGetAttribute(reader, 
BAD_CAST("Background")), xmlFree);
-  const shared_ptr pageName(xmlTextReaderGetAttribute(reader, 
BAD_CAST("Name")), xmlFree);
+  shared_ptr pageName(xmlTextReaderGetAttribute(reader, 
BAD_CAST("Name")), xmlFree);
+  if (!pageName.get())
+pageName.reset(xmlTextReaderGetAttribute(reader, BAD_CAST("NameU")), 
xmlFree);
   if (id)
   {
 unsigned nId = (unsigned)xmlStringToLong(id);
@@ -1677,6 +1679,8 @@ void libvisio::VSDXMLParserBase::_flushShape()
 
   m_collector->collectXFormData(m_currentShapeLevel+2, m_shape.m_xform);
 
+  m_collector->collectLayerMem(m_currentShapeLevel+2, m_shape.m_layerMem);
+
   m_collector->collectMisc(m_currentShapeLevel+2, m_shape.m_misc);
 
   if (m_shape.m_txtxform)
@@ -1971,6 +1975,22 @@ int libvisio::VSDXMLParserBase::readDoubleData(double 
, xmlTextReaderPtr r
   return -1;
 }
 
+int libvisio::VSDXMLParserBase::readStringData(libvisio::VSDName , 
xmlTextReaderPtr reader)
+{
+  const shared_ptr stringValue(readStringData(reader), xmlFree);
+  if (stringValue)
+  {
+VSD_DEBUG_MSG(("VSDXMLParserBase::readStringData stringValue %s\n", (const 
char *)stringValue.get()));
+if (!xmlStrEqual(stringValue.get(), BAD_CAST("Themed")))
+{
+  text.m_data = librevenge::RVNGBinaryData(stringValue.get(), 
xmlStrlen(stringValue.get()));
+  text.m_format = VSD_TEXT_UTF8;
+}
+return 1;
+  }
+  return -1;
+}
+
 int libvisio::VSDXMLParserBase::readDoubleData(boost::optional , 
xmlTextReaderPtr reader)
 {
   const shared_ptr stringValue(readStringData(reader), xmlFree);
diff 

[Libreoffice-commits] libvisio.git: src/lib

2015-12-10 Thread Fridrich Štrba
 src/lib/VSDXMLParserBase.cpp |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit ad09e022b555cd18197ce76f05d86e522fd15037
Author: Fridrich Å trba 
Date:   Thu Dec 10 12:41:08 2015 +0100

This is the name that appears in UI

Change-Id: I4b463a3f757d9d2a774bed86eb003771f4093815

diff --git a/src/lib/VSDXMLParserBase.cpp b/src/lib/VSDXMLParserBase.cpp
index 7953d3c..7f38bca 100644
--- a/src/lib/VSDXMLParserBase.cpp
+++ b/src/lib/VSDXMLParserBase.cpp
@@ -1060,7 +1060,7 @@ void 
libvisio::VSDXMLParserBase::readPage(xmlTextReaderPtr reader)
   const shared_ptr id(xmlTextReaderGetAttribute(reader, 
BAD_CAST("ID")), xmlFree);
   const shared_ptr bgndPage(xmlTextReaderGetAttribute(reader, 
BAD_CAST("BackPage")), xmlFree);
   const shared_ptr background(xmlTextReaderGetAttribute(reader, 
BAD_CAST("Background")), xmlFree);
-  const shared_ptr pageName(xmlTextReaderGetAttribute(reader, 
BAD_CAST("NameU")), xmlFree);
+  const shared_ptr pageName(xmlTextReaderGetAttribute(reader, 
BAD_CAST("Name")), xmlFree);
   if (id)
   {
 unsigned nId = (unsigned)xmlStringToLong(id);
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-10 Thread Fridrich Štrba
 src/lib/Makefile.am |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

New commits:
commit c48b74568ae2e202d087def28fe4130e67f21bda
Author: Fridrich Å trba 
Date:   Thu Dec 10 11:35:13 2015 +0100

Put the CXXFLAGS in the same place and make the gperf dependency work again

Change-Id: I2616512253ccfd2a03e67902ab37b6e5f881aaea

diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 6946b0a..b98aa9c 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -15,6 +15,8 @@ AM_CXXFLAGS = \
-I$(top_srcdir)/inc \
-I$(top_srcdir)/src/lib \
-I$(top_builddir)/src/lib \
+   -DBOOST_ERROR_CODE_HEADER_ONLY \
+   -DBOOST_SYSTEM_NO_DEPRECATED \
$(LIBVISIO_CXXFLAGS) \
$(DEBUG_CXXFLAGS)
 
@@ -22,7 +24,6 @@ generated_files = \
$(top_builddir)/src/lib/tokens.h \
$(top_builddir)/src/lib/tokenhash.h
 
-libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_CPPFLAGS = 
-DBOOST_ERROR_CODE_HEADER_ONLY -DBOOST_SYSTEM_NO_DEPRECATED
 libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_LIBADD  = $(LIBVISIO_LIBS) 
@LIBVISIO_WIN32_RESOURCE@
 libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_DEPENDENCIES = 
@LIBVISIO_WIN32_RESOURCE@
 libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_LDFLAGS = $(version_info) 
-export-dynamic -no-undefined
@@ -82,7 +83,6 @@ libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_SOURCES = 
\
libvisio_xml.cpp \
libvisio_xml.h \
$(generated_files)
-   
 
 VDXParser.lo : $(generated_files)
 VSDXMLParserBase.lo : $(generated_files)
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-12-10 Thread Fridrich Štrba
 src/lib/VSDParser.cpp |1 -
 1 file changed, 1 deletion(-)

New commits:
commit c0b47ee2cbc759076a006f480c7f736dd73ef36b
Author: Fridrich Å trba 
Date:   Thu Dec 10 13:40:56 2015 +0100

Don't bail out in the case of mismatch

Change-Id: I010bed6b45167850613d277cfb49541577360799

diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index 3074784..ce9cbd5 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -760,7 +760,6 @@ void 
libvisio::VSDParser::readNameIDX(librevenge::RVNGInputStream *input)
 if (nameId != readU32(input))
 {
   VSD_DEBUG_MSG(("VSDParser::readNameIDX --> mismatch of first two 
dwords\n"));
-  return;
 }
 unsigned elementId = readU32(input);
 input->seek(1, librevenge::RVNG_SEEK_CUR);
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-08-30 Thread David Tardon
 src/lib/Makefile.am |1 +
 1 file changed, 1 insertion(+)

New commits:
commit 2968c3dff8572b4734cb42c7bd5b00222f7fb288
Author: David Tardon dtar...@redhat.com
Date:   Sun Aug 30 13:59:23 2015 +0200

fix build with boost 1.59

Change-Id: I21eebdfa99d379e57949bfe4bf7eb83aec16f916

diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index dc0f8fd..6946b0a 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -22,6 +22,7 @@ generated_files = \
$(top_builddir)/src/lib/tokens.h \
$(top_builddir)/src/lib/tokenhash.h
 
+libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_CPPFLAGS = 
-DBOOST_ERROR_CODE_HEADER_ONLY -DBOOST_SYSTEM_NO_DEPRECATED
 libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_LIBADD  = $(LIBVISIO_LIBS) 
@LIBVISIO_WIN32_RESOURCE@
 libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_DEPENDENCIES = 
@LIBVISIO_WIN32_RESOURCE@
 libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_LDFLAGS = $(version_info) 
-export-dynamic -no-undefined
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-07-21 Thread Fridrich Štrba
 src/lib/VSDXMLParserBase.cpp |   42 +-
 src/lib/VSDXParser.cpp   |   12 ++--
 2 files changed, 27 insertions(+), 27 deletions(-)

New commits:
commit 392d2d609d4f9aa1738e30da18385e832da2f379
Author: Fridrich Å trba fridrich.st...@bluewin.ch
Date:   Tue Jul 21 19:57:36 2015 +0200

Fix dereferencing of uninitialized memory

Change-Id: Ic4d3c56257dec467325edd934c70074b656b31f4

diff --git a/src/lib/VSDXMLParserBase.cpp b/src/lib/VSDXMLParserBase.cpp
index 03fa396..7953d3c 100644
--- a/src/lib/VSDXMLParserBase.cpp
+++ b/src/lib/VSDXMLParserBase.cpp
@@ -31,7 +31,7 @@ libvisio::VSDXMLParserBase::VSDXMLParserBase()
 m_currentShapeLevel(0), m_colours(), m_fieldList(), m_shapeList(),
 m_currentBinaryData(), m_shapeStack(), m_shapeLevelStack(),
 m_isShapeStarted(false), m_isPageStarted(false), m_currentGeometryList(0),
-m_currentGeometryListIndex(MINUS_ONE), m_fonts()
+m_currentGeometryListIndex(MINUS_ONE), m_fonts(), m_watcher(0)
 {
   initColours();
 }
@@ -162,7 +162,7 @@ void 
libvisio::VSDXMLParserBase::readGeometry(xmlTextReaderPtr reader)
   break;
 }
   }
-  while (((XML_GEOM != tokenId  XML_SECTION != tokenId) || 
XML_READER_TYPE_END_ELEMENT != tokenType)  1 == ret  !m_watcher-isError());
+  while (((XML_GEOM != tokenId  XML_SECTION != tokenId) || 
XML_READER_TYPE_END_ELEMENT != tokenType)  1 == ret  (!m_watcher || 
!m_watcher-isError()));
   if (ret == 1)
 m_currentGeometryList-addGeometry(0, level+1, noFill, noLine, noShow);
 }
@@ -212,7 +212,7 @@ void 
libvisio::VSDXMLParserBase::readMoveTo(xmlTextReaderPtr reader)
   break;
 }
   }
-  while (((XML_MOVETO != tokenId  XML_ROW != tokenId) || 
XML_READER_TYPE_END_ELEMENT != tokenType)  1 == ret  !m_watcher-isError());
+  while (((XML_MOVETO != tokenId  XML_ROW != tokenId) || 
XML_READER_TYPE_END_ELEMENT != tokenType)  1 == ret  (!m_watcher || 
!m_watcher-isError()));
   if (ret == 1)
 m_currentGeometryList-addMoveTo(ix, level, x, y);
 }
@@ -262,7 +262,7 @@ void 
libvisio::VSDXMLParserBase::readLineTo(xmlTextReaderPtr reader)
   break;
 }
   }
-  while (((XML_LINETO != tokenId  XML_ROW != tokenId) || 
XML_READER_TYPE_END_ELEMENT != tokenType)  1 == ret  !m_watcher-isError());
+  while (((XML_LINETO != tokenId  XML_ROW != tokenId) || 
XML_READER_TYPE_END_ELEMENT != tokenType)  1 == ret  (!m_watcher || 
!m_watcher-isError()));
   if (ret == 1)
 m_currentGeometryList-addLineTo(ix, level, x, y);
 }
@@ -316,7 +316,7 @@ void libvisio::VSDXMLParserBase::readArcTo(xmlTextReaderPtr 
reader)
   break;
 }
   }
-  while (((XML_ARCTO != tokenId  XML_ROW != tokenId) || 
XML_READER_TYPE_END_ELEMENT != tokenType)  1 == ret  !m_watcher-isError());
+  while (((XML_ARCTO != tokenId  XML_ROW != tokenId) || 
XML_READER_TYPE_END_ELEMENT != tokenType)  1 == ret  (!m_watcher || 
!m_watcher-isError()));
   if (ret == 1)
 m_currentGeometryList-addArcTo(ix, level, x, y, a);
 }
@@ -382,7 +382,7 @@ void 
libvisio::VSDXMLParserBase::readEllipticalArcTo(xmlTextReaderPtr reader)
   break;
 }
   }
-  while (((XML_ELLIPTICALARCTO != tokenId  XML_ROW != tokenId) || 
XML_READER_TYPE_END_ELEMENT != tokenType)  1 == ret  !m_watcher-isError());
+  while (((XML_ELLIPTICALARCTO != tokenId  XML_ROW != tokenId) || 
XML_READER_TYPE_END_ELEMENT != tokenType)  1 == ret  (!m_watcher || 
!m_watcher-isError()));
   if (ret == 1)
 m_currentGeometryList-addEllipticalArcTo(ix, level, x, y, a, b, c, d);
 }
@@ -448,7 +448,7 @@ void 
libvisio::VSDXMLParserBase::readEllipse(xmlTextReaderPtr reader)
   break;
 }
   }
-  while (((XML_ELLIPSE != tokenId  XML_ROW != tokenId) || 
XML_READER_TYPE_END_ELEMENT != tokenType)  1 == ret  !m_watcher-isError());
+  while (((XML_ELLIPSE != tokenId  XML_ROW != tokenId) || 
XML_READER_TYPE_END_ELEMENT != tokenType)  1 == ret  (!m_watcher || 
!m_watcher-isError()));
   if (ret == 1)
 m_currentGeometryList-addEllipse(ix, level, x, y, a, b, c, d);
 }
@@ -518,7 +518,7 @@ void 
libvisio::VSDXMLParserBase::readNURBSTo(xmlTextReaderPtr reader)
   break;
 }
   }
-  while (((XML_NURBSTO != tokenId  XML_ROW != tokenId) || 
XML_READER_TYPE_END_ELEMENT != tokenType)  1 == ret  !m_watcher-isError());
+  while (((XML_NURBSTO != tokenId  XML_ROW != tokenId) || 
XML_READER_TYPE_END_ELEMENT != tokenType)  1 == ret  (!m_watcher || 
!m_watcher-isError()));
 
   if (ret == 1)
 m_currentGeometryList-addNURBSTo(ix, level, x, y, knot, knotPrev, weight, 
weightPrev, nurbsData);
@@ -573,7 +573,7 @@ void 
libvisio::VSDXMLParserBase::readPolylineTo(xmlTextReaderPtr reader)
   break;
 }
   }
-  while (((XML_POLYLINETO != tokenId  XML_ROW != tokenId) || 
XML_READER_TYPE_END_ELEMENT != tokenType)  1 == ret  !m_watcher-isError());
+  while (((XML_POLYLINETO != tokenId  XML_ROW != tokenId) || 
XML_READER_TYPE_END_ELEMENT != tokenType)  1 == ret  (!m_watcher || 
!m_watcher-isError()));
   if (ret == 1)
 

[Libreoffice-commits] libvisio.git: src/lib

2015-07-21 Thread David Tardon
 src/lib/VSDParser.cpp |9 +++--
 1 file changed, 3 insertions(+), 6 deletions(-)

New commits:
commit 23c914ca9e0e913ac4fde07522074f4e1f47b7ee
Author: David Tardon dtar...@redhat.com
Date:   Tue Jul 21 21:49:14 2015 +0200

plug a leak

Change-Id: Iece1e905a696df09b75a3a90483f76c52d6396d5

diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index 6ce32eb..9bdb7c6 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -163,12 +163,9 @@ void libvisio::VSDParser::parseMetaData() try
 delete sumaryInfo;
   }
 
-  librevenge::RVNGInputStream *docSumaryInfo = 
m_container-getSubStreamByName(\005DocumentSummaryInformation);
-  if (docSumaryInfo)
-  {
-metaData.parse(docSumaryInfo);
-delete docSumaryInfo;
-  }
+  RVNGInputStreamPtr_t 
docSumaryInfo(m_container-getSubStreamByName(\005DocumentSummaryInformation));
+  if (bool(docSumaryInfo))
+metaData.parse(docSumaryInfo.get());
 
   m_container-seek(0, librevenge::RVNG_SEEK_SET);
   metaData.parseTimes(m_container);
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-07-21 Thread Fridrich Štrba
 src/lib/VDXParser.cpp |   22 +++---
 1 file changed, 11 insertions(+), 11 deletions(-)

New commits:
commit a85ef598bb5bd8cb656482354bff0bd857fcc8f9
Author: Fridrich Å trba fridrich.st...@bluewin.ch
Date:   Tue Jul 21 20:20:25 2015 +0200

Make the conditions the same for VDXParser too

Change-Id: I325e1653250cf8e583a52aea9f2bf6275df9bff1

diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp
index a64c5fc..a409b11 100644
--- a/src/lib/VDXParser.cpp
+++ b/src/lib/VDXParser.cpp
@@ -205,7 +205,7 @@ void libvisio::VDXParser::processXmlNode(xmlTextReaderPtr 
reader)
 tokenId = getElementToken(reader);
 tokenType = xmlTextReaderNodeType(reader);
   }
-  while ((XML_SOLUTIONXML != tokenId || XML_READER_TYPE_END_ELEMENT != 
tokenType)  1 == ret);
+  while ((XML_SOLUTIONXML != tokenId || XML_READER_TYPE_END_ELEMENT != 
tokenType)  1 == ret  (!m_watcher || !m_watcher-isError()));
 }
 break;
   case XML_STYLESHEET:
@@ -352,7 +352,7 @@ void libvisio::VDXParser::readLine(xmlTextReaderPtr reader)
   break;
 }
   }
-  while ((XML_LINE != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType)  
1 == ret);
+  while ((XML_LINE != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType)  
1 == ret  (!m_watcher || !m_watcher-isError()));
 
   if (m_isInStyles)
 m_collector-collectLineStyle(level, strokeWidth, colour, linePattern, 
startMarker, endMarker, lineCap);
@@ -432,7 +432,7 @@ void 
libvisio::VDXParser::readFillAndShadow(xmlTextReaderPtr reader)
   break;
 }
   }
-  while ((XML_FILL != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType)  
1 == ret);
+  while ((XML_FILL != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType)  
1 == ret  (!m_watcher || !m_watcher-isError()));
 
   if (m_isInStyles)
 m_collector-collectFillStyle(level, fillColourFG, fillColourBG, 
fillPattern, fillFGTransparency,
@@ -472,7 +472,7 @@ void libvisio::VDXParser::readMisc(xmlTextReaderPtr reader)
   break;
 }
   }
-  while ((XML_MISC != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType)  
1 == ret);
+  while ((XML_MISC != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType)  
1 == ret  (!m_watcher || !m_watcher-isError()));
 }
 
 void libvisio::VDXParser::readXFormData(xmlTextReaderPtr reader)
@@ -531,7 +531,7 @@ void libvisio::VDXParser::readXFormData(xmlTextReaderPtr 
reader)
   break;
 }
   }
-  while ((XML_XFORM != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType)  
1 == ret);
+  while ((XML_XFORM != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType)  
1 == ret  (!m_watcher || !m_watcher-isError()));
 }
 
 void libvisio::VDXParser::readTxtXForm(xmlTextReaderPtr reader)
@@ -610,7 +610,7 @@ void libvisio::VDXParser::readTxtXForm(xmlTextReaderPtr 
reader)
   break;
 }
   }
-  while ((XML_TEXTXFORM != tokenId || XML_READER_TYPE_END_ELEMENT != 
tokenType)  1 == ret);
+  while ((XML_TEXTXFORM != tokenId || XML_READER_TYPE_END_ELEMENT != 
tokenType)  1 == ret  (!m_watcher || !m_watcher-isError()));
 }
 
 void libvisio::VDXParser::readXForm1D(xmlTextReaderPtr reader)
@@ -665,7 +665,7 @@ void libvisio::VDXParser::readXForm1D(xmlTextReaderPtr 
reader)
   break;
 }
   }
-  while ((XML_XFORM1D != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) 
 1 == ret);
+  while ((XML_XFORM1D != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) 
 1 == ret  (!m_watcher || !m_watcher-isError()));
 }
 
 void libvisio::VDXParser::readPageProps(xmlTextReaderPtr reader)
@@ -720,7 +720,7 @@ void libvisio::VDXParser::readPageProps(xmlTextReaderPtr 
reader)
   break;
 }
   }
-  while ((XML_PAGEPROPS != tokenId || XML_READER_TYPE_END_ELEMENT != 
tokenType)  1 == ret);
+  while ((XML_PAGEPROPS != tokenId || XML_READER_TYPE_END_ELEMENT != 
tokenType)  1 == ret  (!m_watcher || !m_watcher-isError()));
 
   if (m_isStencilStarted)
   {
@@ -763,7 +763,7 @@ void libvisio::VDXParser::readFonts(xmlTextReaderPtr reader)
   xmlFree(id);
 }
   }
-  while ((XML_FACENAMES != tokenId || XML_READER_TYPE_END_ELEMENT != 
tokenType)  1 == ret);
+  while ((XML_FACENAMES != tokenId || XML_READER_TYPE_END_ELEMENT != 
tokenType)  1 == ret  (!m_watcher || !m_watcher-isError()));
 }
 
 void libvisio::VDXParser::readTextBlock(xmlTextReaderPtr reader)
@@ -838,7 +838,7 @@ void libvisio::VDXParser::readTextBlock(xmlTextReaderPtr 
reader)
   break;
 }
   }
-  while ((XML_TEXTBLOCK != tokenId || XML_READER_TYPE_END_ELEMENT != 
tokenType)  1 == ret);
+  while ((XML_TEXTBLOCK != tokenId || XML_READER_TYPE_END_ELEMENT != 
tokenType)  1 == ret  (!m_watcher || !m_watcher-isError()));
 
   if (m_isInStyles)
 m_collector-collectTextBlockStyle(level, leftMargin, rightMargin, 
topMargin, bottomMargin,
@@ -942,7 +942,7 @@ void libvisio::VDXParser::readForeignInfo(xmlTextReaderPtr 
reader)
   break;
 }
   }
-  while ((XML_FOREIGN != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) 
 1 == ret);
+  while ((XML_FOREIGN != tokenId || 

[Libreoffice-commits] libvisio.git: src/lib

2015-07-21 Thread Miklos Vajna
 src/lib/VSDMetaData.cpp |3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

New commits:
commit c6223727c94e83a7eb852ff5ae07a3610942cbd1
Author: Miklos Vajna vmik...@collabora.co.uk
Date:   Tue Jul 21 09:32:10 2015 +0200

VSDMetaData: need space for the terminating null-character

Change-Id: Ie9cab1687dd3187819ec8e3e89b3e9355da9b255

diff --git a/src/lib/VSDMetaData.cpp b/src/lib/VSDMetaData.cpp
index 6449384..e8d4919 100644
--- a/src/lib/VSDMetaData.cpp
+++ b/src/lib/VSDMetaData.cpp
@@ -109,7 +109,8 @@ void 
libvisio::VSDMetaData::readPropertySetStream(librevenge::RVNGInputStream *i
   {
 data4[i] = readU8(input);
   }
-  char FMTID0[36];
+  // Pretty-printed GUID is 36 bytes + the terminating null-character.
+  char FMTID0[37];
   sprintf(FMTID0, %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x, data1, 
data2, data3,
   data4[0], data4[1], data4[2], data4[3], data4[4], data4[5], 
data4[6], data4[7]);
 
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib src/test

2015-02-27 Thread Mihai Varga
 src/lib/VSDMetaData.cpp  |  152 +--
 src/lib/VSDMetaData.h|4 -
 src/lib/VSDParser.cpp|   26 +---
 src/lib/VSDXMetaData.cpp |   21 ++
 src/lib/VSDXParser.cpp   |   38 ---
 src/lib/VSDXParser.h |2 
 src/lib/tokens.txt   |5 +
 src/test/Makefile.am |2 
 src/test/data/dwg.vsd|binary
 src/test/data/dwg.vsdx   |binary
 src/test/importtest.cpp  |   21 ++
 11 files changed, 219 insertions(+), 52 deletions(-)

New commits:
commit 3a8a08caebd5c8fbbc28ff34b0d7d0979662a56a
Author: Mihai Varga mihai.va...@collabora.com
Date:   Fri Feb 27 14:32:11 2015 +0200

More metadata extracted from VSD/VSDX files

Template, language, company and category metadata are extracted from
VSD/VSDX files. Company and category are set as custom properties.
I've also added unit tests for those 4 new document properties.

Change-Id: Ic14bfa11a2a8253c79dd4c4466afc7f6b2ce4ea9
Signed-off-by: Miklos Vajna vmik...@collabora.co.uk

diff --git a/src/lib/VSDMetaData.cpp b/src/lib/VSDMetaData.cpp
index 4235b56..6449384 100644
--- a/src/lib/VSDMetaData.cpp
+++ b/src/lib/VSDMetaData.cpp
@@ -9,6 +9,8 @@
 
 #include VSDMetaData.h
 #include cmath
+#include cstring
+#include string
 #include unicode/ucnv.h
 #include ctime
 
@@ -21,6 +23,60 @@ libvisio::VSDMetaData::~VSDMetaData()
 {
 }
 
+enum PIDDSI
+{
+  PIDDSI_CODEPAGE  = 0x0001,
+  PIDDSI_CATEGORY  = 0x0002,
+  PIDDSI_PRESFORMAT= 0x0003,
+  PIDDSI_BYTECOUNT = 0x0004,
+  PIDDSI_LINECOUNT = 0x0005,
+  PIDDSI_PARACOUNT = 0x0006,
+  PIDDSI_SLIDECOUNT= 0x0007,
+  PIDDSI_NOTECOUNT = 0x0008,
+  PIDDSI_HIDDENCOUNT   = 0x0009,
+  PIDDSI_MMCLIPCOUNT   = 0x000A,
+  PIDDSI_SCALE = 0x000B,
+  PIDDSI_HEADINGPAIR   = 0x000C,
+  PIDDSI_DOCPARTS  = 0x000D,
+  PIDDSI_MANAGER   = 0x000E,
+  PIDDSI_COMPANY   = 0x000F,
+  PIDDSI_LINKSDIRTY= 0x0010,
+  PIDDSI_CCHWITHSPACES = 0x0011,
+  PIDDSI_SHAREDDOC = 0x0013,
+  PIDDSI_LINKBASE  = 0x0014,
+  PIDDSI_HLINKS= 0x0015,
+  PIDDSI_HYPERLINKSCHANGED = 0x0016,
+  PIDDSI_VERSION   = 0x0017,
+  PIDDSI_DIGSIG= 0x0018,
+  PIDDSI_CONTENTTYPE   = 0x001A,
+  PIDDSI_CONTENTSTATUS = 0x001B,
+  PIDDSI_LANGUAGE  = 0x001C,
+  PIDDSI_DOCVERSION= 0x001D
+};
+
+enum PIDSI
+{
+  CODEPAGE_PROPERTY_IDENTIFIER = 0x0001,
+  PIDSI_TITLE  = 0x0002,
+  PIDSI_SUBJECT= 0x0003,
+  PIDSI_AUTHOR = 0x0004,
+  PIDSI_KEYWORDS   = 0x0005,
+  PIDSI_COMMENTS   = 0x0006,
+  PIDSI_TEMPLATE   = 0x0007,
+  PIDSI_LASTAUTHOR = 0x0008,
+  PIDSI_REVNUMBER  = 0x0009,
+  PIDSI_EDITTIME   = 0x000A,
+  PIDSI_LASTPRINTED= 0x000B,
+  PIDSI_CREATE_DTM = 0x000C,
+  PIDSI_LASTSAVE_DTM   = 0x000D,
+  PIDSI_PAGECOUNT  = 0x000E,
+  PIDSI_WORDCOUNT  = 0x000F,
+  PIDSI_CHARCOUNT  = 0x0010,
+  PIDSI_THUMBNAIL  = 0x0011,
+  PIDSI_APPNAME= 0x0012,
+  PIDSI_DOC_SECURITY   = 0x0013
+};
+
 bool libvisio::VSDMetaData::parse(librevenge::RVNGInputStream *input)
 {
   if (!input)
@@ -44,12 +100,24 @@ void 
libvisio::VSDMetaData::readPropertySetStream(librevenge::RVNGInputStream *i
   // NumPropertySets
   input-seek(4, librevenge::RVNG_SEEK_CUR);
   // FMTID0
-  input-seek(16, librevenge::RVNG_SEEK_CUR);
+  //input-seek(16, librevenge::RVNG_SEEK_CUR);
+  uint32_t data1 = readU32(input);
+  uint16_t data2 = readU16(input);
+  uint16_t data3 = readU16(input);
+  uint8_t data4[8];
+  for (int i = 0; i  8; i++)
+  {
+data4[i] = readU8(input);
+  }
+  char FMTID0[36];
+  sprintf(FMTID0, %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x, data1, 
data2, data3,
+  data4[0], data4[1], data4[2], data4[3], data4[4], data4[5], 
data4[6], data4[7]);
+
   uint32_t offset0 = readU32(input);
-  readPropertySet(input, offset0);
+  readPropertySet(input, offset0, FMTID0);
 }
 
-void libvisio::VSDMetaData::readPropertySet(librevenge::RVNGInputStream 
*input, uint32_t offset)
+void libvisio::VSDMetaData::readPropertySet(librevenge::RVNGInputStream 
*input, uint32_t offset, char *FMTID)
 {
   input-seek(offset, librevenge::RVNG_SEEK_SET);
 
@@ -62,17 +130,15 @@ void 
libvisio::VSDMetaData::readPropertySet(librevenge::RVNGInputStream *input,
   {
 if (i = m_idsAndOffsets.size())
   break;
-readTypedPropertyValue(input, i, offset + m_idsAndOffsets[i].second);
+readTypedPropertyValue(input, i, offset + m_idsAndOffsets[i].second, 
FMTID);
   }
 }
 
-#define CODEPAGE_PROPERTY_IDENTIFIER 0x0001
-
 uint32_t 

[Libreoffice-commits] libvisio.git: src/lib

2015-02-16 Thread Richard PALO
 src/lib/VSDMetaData.cpp |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit 9686192d63bd208df1c6b53c892ba5a680cdc4b6
Author: Richard PALO rich...@netbsd.org
Date:   Fri Feb 13 17:58:07 2015 +0100

use std::pow in order to avoid compile time errors like:
error: call of overloaded 'pow(int, uint16_t)' is ambiguous

as seen on SunOS 5.11

Change-Id: I2ac60caa2b0c3731064cdea6150523a00647036e
Reviewed-on: https://gerrit.libreoffice.org/14481
Tested-by: David Tardon dtar...@redhat.com
Reviewed-by: David Tardon dtar...@redhat.com

diff --git a/src/lib/VSDMetaData.cpp b/src/lib/VSDMetaData.cpp
index dac4c97..4235b56 100644
--- a/src/lib/VSDMetaData.cpp
+++ b/src/lib/VSDMetaData.cpp
@@ -210,7 +210,7 @@ bool 
libvisio::VSDMetaData::parseTimes(librevenge::RVNGInputStream *input)
   uint32_t firstDirSectorLocation = readU32(input);
 
   // Seek to the Root Directory Entry
-  size_t sectorSize = pow(2, sectorShift);
+  size_t sectorSize = std::pow(2, sectorShift);
   input-seek((firstDirSectorLocation + 1) * sectorSize, 
librevenge::RVNG_SEEK_SET);
   // DirectoryEntryName: 64 bytes
   // DirectoryEntryNameLength: 2 bytes
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib src/test

2015-01-28 Thread Miklos Vajna
 src/lib/VSDXMetaData.cpp |3 +++
 src/lib/tokens.txt   |1 +
 src/test/importtest.cpp  |1 +
 3 files changed, 5 insertions(+)

New commits:
commit 1bda66b9c0c1cc2b9dcf323a0a45e314b5d4410f
Author: Miklos Vajna vmik...@collabora.co.uk
Date:   Sun Jan 18 11:52:35 2015 +0100

VSDX: import cp:category as librevenge:category

Change-Id: Idb2367009d24c49d111227b8dca1b6e40045f8c9

diff --git a/src/lib/VSDXMetaData.cpp b/src/lib/VSDXMetaData.cpp
index 8516690..4987cb2 100644
--- a/src/lib/VSDXMetaData.cpp
+++ b/src/lib/VSDXMetaData.cpp
@@ -82,6 +82,9 @@ void 
libvisio::VSDXMetaData::readCoreProperties(xmlTextReaderPtr reader)
 case XML_CP_LASTMODIFIEDBY:
   m_metaData.insert(dc:creator, readString(reader, 
XML_CP_LASTMODIFIEDBY));
   break;
+case XML_CP_CATEGORY:
+  m_metaData.insert(librevenge:category, readString(reader, 
XML_CP_CATEGORY));
+  break;
 default:
   break;
 }
diff --git a/src/lib/tokens.txt b/src/lib/tokens.txt
index 2d0022b..6b01690 100644
--- a/src/lib/tokens.txt
+++ b/src/lib/tokens.txt
@@ -235,3 +235,4 @@ dcterms:created
 dcterms:modified
 dc:description
 cp:lastModifiedBy
+cp:category
diff --git a/src/test/importtest.cpp b/src/test/importtest.cpp
index 2b1aec6..29b99fd 100644
--- a/src/test/importtest.cpp
+++ b/src/test/importtest.cpp
@@ -176,6 +176,7 @@ void ImportTest::testVsdxMetadataTitle()
   assertXPath(m_doc, /document/setDocumentMetaData, keyword, mytag);
   assertXPath(m_doc, /document/setDocumentMetaData, description, 
mycomment);
   assertXPath(m_doc, /document/setDocumentMetaData, creator, vmiklos 
modifier);
+  assertXPath(m_doc, /document/setDocumentMetaData, category, 
mycategory);
 }
 
 void ImportTest::testVsdMetadataTitleMs1252()
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib

2015-01-05 Thread Caolán McNamara
 src/lib/VSDContentCollector.cpp |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

New commits:
commit 49c0d44063c452f0927e8938951f065e1e488ecb
Author: Caolán McNamara caol...@redhat.com
Date:   Mon Jan 5 17:33:26 2015 +0100

workaround error C2589: ´(´ : illegal token on right side of ´::´

Change-Id: I653ef7386ac4bd77bce40601bae5d2fd84764c83

diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index d7365b0..1d98798 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -2256,14 +2256,14 @@ void 
libvisio::VSDContentCollector::_lineProperties(const VSDLineStyle style, l
 styleProps.insert(draw:marker-start-viewbox, 
_linePropertiesMarkerViewbox(style.startMarker));
 styleProps.insert(draw:marker-start-path, 
_linePropertiesMarkerPath(style.startMarker));
 double w =  
m_scale*_linePropertiesMarkerScale(style.startMarker)*(0.1/(style.width*style.width+1)+2.54*style.width);
-styleProps.insert(draw:marker-start-width, std::max(w, 0.05));
+styleProps.insert(draw:marker-start-width, (std::max)(w, 0.05));
   }
   if (style.endMarker  0)
   {
 styleProps.insert(draw:marker-end-viewbox, 
_linePropertiesMarkerViewbox(style.endMarker));
 styleProps.insert(draw:marker-end-path, 
_linePropertiesMarkerPath(style.endMarker));
 double w =  
m_scale*_linePropertiesMarkerScale(style.endMarker)*(0.1/(style.width*style.width+1)+2.54*style.width);
-styleProps.insert(draw:marker-end-width, std::max(w, 0.05));
+styleProps.insert(draw:marker-end-width, (std::max)(w, 0.05));
   }
 
   int dots1 = 0;
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] libvisio.git: src/lib src/test

2015-01-01 Thread David Tardon
 src/lib/VSDXMetaData.cpp |3 ---
 src/lib/tokens.txt   |1 -
 src/test/importtest.cpp  |1 -
 3 files changed, 5 deletions(-)

New commits:
commit bec680b235f06b439340fbc25b20b2f5a131300f
Author: David Tardon dtar...@redhat.com
Date:   Thu Jan 1 09:30:56 2015 +0100

Revert VSDX: import cp:category

We do not want multi-level property names.

This reverts commit 5753f7e98d02bde80d9e712d298372933c4a28e6.

diff --git a/src/lib/VSDXMetaData.cpp b/src/lib/VSDXMetaData.cpp
index b7e485d..8516690 100644
--- a/src/lib/VSDXMetaData.cpp
+++ b/src/lib/VSDXMetaData.cpp
@@ -82,9 +82,6 @@ void 
libvisio::VSDXMetaData::readCoreProperties(xmlTextReaderPtr reader)
 case XML_CP_LASTMODIFIEDBY:
   m_metaData.insert(dc:creator, readString(reader, 
XML_CP_LASTMODIFIEDBY));
   break;
-case XML_CP_CATEGORY:
-  m_metaData.insert(meta:user-defined:category, readString(reader, 
XML_CP_CATEGORY));
-  break;
 default:
   break;
 }
diff --git a/src/lib/tokens.txt b/src/lib/tokens.txt
index 6b01690..2d0022b 100644
--- a/src/lib/tokens.txt
+++ b/src/lib/tokens.txt
@@ -235,4 +235,3 @@ dcterms:created
 dcterms:modified
 dc:description
 cp:lastModifiedBy
-cp:category
diff --git a/src/test/importtest.cpp b/src/test/importtest.cpp
index 3e20d7a..ad3722b 100644
--- a/src/test/importtest.cpp
+++ b/src/test/importtest.cpp
@@ -174,7 +174,6 @@ void ImportTest::testVsdxMetadataTitle()
   assertXPath(m_doc, /document/setDocumentMetaData, keyword, mytag);
   assertXPath(m_doc, /document/setDocumentMetaData, description, 
mycomment);
   assertXPath(m_doc, /document/setDocumentMetaData, creator, vmiklos 
modifier);
-  assertXPathContent(m_doc, 
/document/setDocumentMetaData/user-defined[@name='category'], mycategory);
 }
 
 void ImportTest::testVsdMetadataTitleMs1252()
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


  1   2   >