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

Fridrich Štrba fridrich.strba at bluewin.ch
Tue Dec 15 08:11:10 PST 2015


 src/lib/VSD5Parser.cpp |    8 +++++++-
 src/lib/VSD5Parser.h   |    1 +
 src/lib/VSDParser.cpp  |   47 +++++++++++++++++++++++++++++++++++++++++++++++
 src/lib/VSDParser.h    |    2 ++
 src/lib/VSDTypes.h     |   11 +++++++++++
 src/lib/tokens.txt     |   36 ++++++++++++++++++++----------------
 6 files changed, 88 insertions(+), 17 deletions(-)

New commits:
commit 28e14efb6e036b2e75052f219136658f99b18957
Author: Fridrich Štrba <fridrich.strba at bluewin.ch>
Date:   Tue Dec 15 17:10:46 2015 +0100

    Some function to read tab stops in binary parsers
    
    Change-Id: Ibfe37737600f2e8f61a3fca6839178b1812355ea

diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index 7a014be..be47174 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -109,7 +109,7 @@ void libvisio::VSD5Parser::handleChunkRecords(librevenge::RVNGInputStream *input
   if (long(endOffset) > (headerPosition - startPosition))
     endOffset = unsigned(headerPosition - startPosition); // try to read something anyway
   std::map<unsigned, ChunkHeader> records;
-  input->seek(endPosition-4*(numRecords+1), librevenge::RVNG_SEEK_SET);
+  input->seek(headerPosition, librevenge::RVNG_SEEK_SET);
   unsigned i = 0;
   for (i = 0; i < numRecords; ++i)
   {
@@ -192,6 +192,12 @@ void libvisio::VSD5Parser::readNameList2(librevenge::RVNGInputStream *input)
   readList(input);
 }
 
+void libvisio::VSD5Parser::readTabsDataList(librevenge::RVNGInputStream *input)
+{
+  VSD_DEBUG_MSG(("VSD5Parser::readTabsDataList\n"));
+  readList(input);
+}
+
 void libvisio::VSD5Parser::readLine(librevenge::RVNGInputStream *input)
 {
   input->seek(1, librevenge::RVNG_SEEK_CUR);
diff --git a/src/lib/VSD5Parser.h b/src/lib/VSD5Parser.h
index d312e44..08e8497 100644
--- a/src/lib/VSD5Parser.h
+++ b/src/lib/VSD5Parser.h
@@ -37,6 +37,7 @@ protected:
   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);
diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index d3e6a0b..019b27a 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -599,6 +599,14 @@ void libvisio::VSDParser::handleChunk(librevenge::RVNGInputStream *input)
   case VSD_LAYER_MEMBERSHIP:
     readLayerMem(input);
     break;
+  case VSD_TABS_DATA_LIST:
+    readTabsDataList(input);
+    break;
+  case VSD_TABS_DATA_1:
+  case VSD_TABS_DATA_2:
+  case VSD_TABS_DATA_3:
+    readTabsData(input);
+    break;
   default:
     m_collector->collectUnhandledChunk(m_header.id, m_header.level);
   }
@@ -761,6 +769,22 @@ void libvisio::VSDParser::readOLEData(librevenge::RVNGInputStream *input)
 
 }
 
+void libvisio::VSDParser::readTabsData(librevenge::RVNGInputStream *input)
+{
+  /* unsigned charCount = */ readU32(input);
+  unsigned char numStops = readU8(input);
+  std::vector<VSDTabStop> tabStops;
+  for (unsigned char i = 0; i < numStops; ++i)
+  {
+    VSDTabStop tabStop;
+    input->seek(1, librevenge::RVNG_SEEK_CUR);
+    tabStop.m_position = readDouble(input);
+    tabStop.m_alignment = readU8(input);
+    tabStop.m_lead = readU8(input);
+    tabStops.push_back(tabStop);
+  }
+}
+
 void libvisio::VSDParser::readNameIDX(librevenge::RVNGInputStream *input)
 {
   std::map<unsigned, VSDName> names;
@@ -942,6 +966,29 @@ void libvisio::VSDParser::readPropList(librevenge::RVNGInputStream * /* input */
 {
 }
 
+void libvisio::VSDParser::readTabsDataList(librevenge::RVNGInputStream *input)
+{
+  // We want the collectors to still get the level information
+  if (!m_isStencilStarted)
+    m_collector->collectUnhandledChunk(m_header.id, m_header.level);
+
+  if (m_header.trailer)
+  {
+    uint32_t subHeaderLength = readU32(input);
+    uint32_t childrenListLength = readU32(input);
+    input->seek(subHeaderLength, librevenge::RVNG_SEEK_CUR);
+    std::vector<unsigned> tabsOrder;
+    tabsOrder.reserve(childrenListLength / sizeof(uint32_t));
+    printf("Fridrich");
+    for (unsigned i = 0; i < (childrenListLength / sizeof(uint32_t)); i++)
+    {
+      tabsOrder.push_back(readU32(input));
+      printf(" %i", tabsOrder.back());
+    }
+    printf("\n");
+  }
+}
+
 void libvisio::VSDParser::readLayerList(librevenge::RVNGInputStream *input)
 {
   // We want the collectors to still get the level information
diff --git a/src/lib/VSDParser.h b/src/lib/VSDParser.h
index fbf167e..8cec7f3 100644
--- a/src/lib/VSDParser.h
+++ b/src/lib/VSDParser.h
@@ -86,6 +86,8 @@ protected:
   virtual void readCharIX(librevenge::RVNGInputStream *input);
   virtual void readParaIX(librevenge::RVNGInputStream *input);
   virtual void readTextBlock(librevenge::RVNGInputStream *input);
+  virtual void readTabsDataList(librevenge::RVNGInputStream *input);
+  virtual void readTabsData(librevenge::RVNGInputStream *input);
 
   void readNameList(librevenge::RVNGInputStream *input);
   virtual void readName(librevenge::RVNGInputStream *input);
diff --git a/src/lib/VSDTypes.h b/src/lib/VSDTypes.h
index 9492844..6790fa4 100644
--- a/src/lib/VSDTypes.h
+++ b/src/lib/VSDTypes.h
@@ -209,6 +209,17 @@ struct VSDMisc
   VSDMisc(const VSDMisc &misc) : m_hideText(misc.m_hideText) {}
 };
 
+struct VSDTabStop
+{
+  double m_position;
+  unsigned char m_alignment;
+  unsigned char m_lead;
+  VSDTabStop() : m_position(0.0), m_alignment(0), m_lead(0) {}
+  VSDTabStop(const VSDTabStop &tabStop) :
+    m_position(tabStop.m_position), m_alignment(tabStop.m_alignment),
+    m_lead(tabStop.m_lead) {}
+};
+
 } // namespace libvisio
 
 #endif /* VSDTYPES_H */
commit 067605a0cd9688ed31d77a85b292d81a501c5c16
Author: Fridrich Štrba <fridrich.strba at bluewin.ch>
Date:   Tue Dec 15 17:10:11 2015 +0100

    sort using "sort -u"
    
    Change-Id: Ie22405d4b578b310403c5e76214116a54069b23b

diff --git a/src/lib/tokens.txt b/src/lib/tokens.txt
index 0fc8b5a..d732a47 100644
--- a/src/lib/tokens.txt
+++ b/src/lib/tokens.txt
@@ -28,6 +28,7 @@ a:gs
 a:gsLst
 a:hlink
 a:latin
+Alignment
 a:lin
 a:ln
 a:lnStyleLst
@@ -63,9 +64,22 @@ Character
 Color
 ColorEntry
 Colors
+Company
 cp
+cp:category
+cp:coreProperties
+cp:keywords
+cp:lastModifiedBy
 D
 DblUnderline
+dc:creator
+dc:description
+dc:language
+dc:subject
+dc:template
+dcterms:created
+dcterms:modified
+dc:title
 DefaultTabStop
 DoubleStrikethrough
 DrawingScale
@@ -107,6 +121,7 @@ InfiniteLine
 Layer
 LayerMem
 LayerMember
+Leader
 LeftMargin
 Line
 LineCap
@@ -138,8 +153,10 @@ PinX
 PinY
 PolylineTo
 Pos
+Position
 pp
 Print
+Properties
 QuickStyleEffectsMatrix
 QuickStyleFillColor
 QuickStyleFillMatrix
@@ -149,7 +166,6 @@ QuickStyleLineMatrix
 QuickStyleShadowColor
 QuickStyleType
 QuickStyleVariation
-QuickStyleShadowColor
 Rel
 RelCubBezTo
 RelEllipticalArcTo
@@ -181,6 +197,9 @@ Strikethru
 Style
 StyleSheet
 StyleSheets
+Tab
+Tabs
+Template
 Text
 TextBkgnd
 TextBkgndTrans
@@ -232,18 +251,3 @@ X
 XForm
 XForm1D
 Y
-cp:coreProperties
-cp:keywords
-dc:creator
-dc:subject
-dc:title
-dcterms:created
-dcterms:modified
-dc:description
-dc:template
-cp:lastModifiedBy
-cp:category
-Company
-Properties
-Template
-dc:language


More information about the Libreoffice-commits mailing list