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

Fridrich Å trba fridrich.strba at bluewin.ch
Wed Apr 10 16:58:34 PDT 2013


 src/lib/CDRParser.cpp    |   25 ++++++++++++++-----------
 src/lib/CDRTypes.h       |    5 +++--
 src/lib/CommonParser.cpp |    9 +++++++++
 src/lib/CommonParser.h   |    1 +
 4 files changed, 27 insertions(+), 13 deletions(-)

New commits:
commit 188956efa91e06b2196c2444ab4936b39405a33b
Author: Fridrich Å trba <fridrich.strba at bluewin.ch>
Date:   Thu Apr 11 01:58:07 2013 +0200

    Styd for v 5 and 6

diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp
index 4f99566..83fe45b 100644
--- a/src/lib/CDRParser.cpp
+++ b/src/lib/CDRParser.cpp
@@ -2958,14 +2958,14 @@ void libcdr::CDRParser::readStyd(WPXInputStream *input)
     CDR_DEBUG_MSG(("Styd should not be present in this file version\n"));
     return;
   }
-  /* unsigned styleId = */ readU16(input);
+  unsigned styleId = readUnsigned(input);
   long startPosition = input->tell();
   unsigned chunkLength = readUnsigned(input);
   unsigned numOfArgs = readUnsigned(input);
   unsigned startOfArgs = readUnsigned(input);
   unsigned startOfArgTypes = readUnsigned(input);
-  /* unsigned parentId = */
-  readUnsigned(input);
+  CDRCharacterStyle charStyle;
+  charStyle.m_parentId =  readUnsigned(input);
   std::vector<unsigned> argOffsets(numOfArgs, 0);
   std::vector<unsigned> argTypes(numOfArgs, 0);
   unsigned i = 0;
@@ -2976,8 +2976,6 @@ void libcdr::CDRParser::readStyd(WPXInputStream *input)
   while (i>0)
     argTypes[--i] = readUnsigned(input);
 
-  unsigned fillId = 0;
-  unsigned outlId = 0;
   for (i=0; i < argTypes.size(); i++)
   {
     input->seek(startPosition+argOffsets[i], WPX_SEEK_SET);
@@ -2987,14 +2985,22 @@ void libcdr::CDRParser::readStyd(WPXInputStream *input)
     case STYD_NAME:
       break;
     case STYD_FILL_ID:
-      fillId = readUnsigned(input);
+      charStyle.m_fillId = readUnsigned(input);
       break;
     case STYD_OUTL_ID:
-      outlId = readUnsigned(input);
+      charStyle.m_outlId = readUnsigned(input);
       break;
     case STYD_FONTS:
+      if (m_version >= 600)
+        input->seek(4, WPX_SEEK_CUR);
+      charStyle.m_fontId = readUnsignedShort(input);
+      charStyle.m_charSet = readUnsignedShort(input);
+      if (m_version >= 600)
+        input->seek(8, WPX_SEEK_CUR);
+      charStyle.m_fontSize = readCoordinate(input);
       break;
     case STYD_ALIGN:
+      charStyle.m_align = readUnsigned(input);
       break;
     case STYD_BULLETS:
       break;
@@ -3014,11 +3020,8 @@ void libcdr::CDRParser::readStyd(WPXInputStream *input)
       break;
     }
   }
-  fillId++;
-  fillId--;
-  outlId++;
-  outlId--;
   input->seek(startPosition+chunkLength, WPX_SEEK_SET);
+  m_collector->collectStld(styleId, charStyle);
 }
 
 void libcdr::CDRParser::readArtisticText(WPXInputStream * /*input*/)
diff --git a/src/lib/CDRTypes.h b/src/lib/CDRTypes.h
index 7d4e710..361932f 100644
--- a/src/lib/CDRTypes.h
+++ b/src/lib/CDRTypes.h
@@ -159,11 +159,12 @@ struct CDRCharacterStyle
   double m_leftIndent, m_firstIndent, m_rightIndent;
   unsigned m_outlId, m_fillId, m_parentId;
   CDRCharacterStyle()
-    : m_charSet(0), m_fontId(0), m_fontSize(0.0), m_align(0), m_leftIndent(0.0), m_firstIndent(0.0),
+    : m_charSet((unsigned short)-1), m_fontId((unsigned short)-1),
+      m_fontSize(0.0), m_align(0), m_leftIndent(0.0), m_firstIndent(0.0),
       m_rightIndent(0.0), m_outlId(0), m_fillId(0), m_parentId(0) {}
   void overrideCharacterStyle(const CDRCharacterStyle &override)
   {
-    if (override.m_charSet || override.m_fontId)
+    if (override.m_charSet != (unsigned short)-1 || override.m_fontId != (unsigned short)-1)
     {
       m_charSet = override.m_charSet;
       m_fontId = override.m_fontId;
diff --git a/src/lib/CommonParser.cpp b/src/lib/CommonParser.cpp
index c8784ca..9a8bfaf 100644
--- a/src/lib/CommonParser.cpp
+++ b/src/lib/CommonParser.cpp
@@ -60,6 +60,15 @@ unsigned libcdr::CommonParser::readUnsigned(WPXInputStream *input, bool bigEndia
   return readU32(input, bigEndian);
 }
 
+unsigned short libcdr::CommonParser::readUnsignedShort(WPXInputStream *input, bool bigEndian)
+{
+  if (m_precision == PRECISION_UNKNOWN)
+    throw UnknownPrecisionException();
+  else if (m_precision == PRECISION_16BIT)
+    return (unsigned short)readU8(input, bigEndian);
+  return readU16(input, bigEndian);
+}
+
 int libcdr::CommonParser::readInteger(WPXInputStream *input, bool bigEndian)
 {
   if (m_precision == PRECISION_UNKNOWN)
diff --git a/src/lib/CommonParser.h b/src/lib/CommonParser.h
index 3e25130..14d757b 100644
--- a/src/lib/CommonParser.h
+++ b/src/lib/CommonParser.h
@@ -56,6 +56,7 @@ protected:
   double readRectCoord(WPXInputStream *input, bool bigEndian = false);
   double readCoordinate(WPXInputStream *input, bool bigEndian = false);
   unsigned readUnsigned(WPXInputStream *input, bool bigEndian = false);
+  unsigned short readUnsignedShort(WPXInputStream *input, bool bigEndian = false);
   int readInteger(WPXInputStream *input, bool bigEndian = false);
   double readAngle(WPXInputStream *input, bool bigEndian = false);
 


More information about the Libreoffice-commits mailing list