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

Fridrich Å trba fridrich.strba at bluewin.ch
Thu Apr 11 09:11:37 PDT 2013


 src/lib/CDRParser.cpp |   52 +++++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 45 insertions(+), 7 deletions(-)

New commits:
commit 6808b992d6ad569312fa6341ac24a5d18a64c1ac
Author: Fridrich Å trba <fridrich.strba at bluewin.ch>
Date:   Thu Apr 11 18:09:19 2013 +0200

    Fix text on curve for version 13+

diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp
index 3ee8870..a7b1108 100644
--- a/src/lib/CDRParser.cpp
+++ b/src/lib/CDRParser.cpp
@@ -2689,7 +2689,11 @@ void libcdr::CDRParser::readTxsm(WPXInputStream *input, unsigned length)
     if (m_version >= 800)
     {
       if (readU32(input))
+      {
         input->seek(32, WPX_SEEK_CUR);
+        if (m_version >= 1300)
+          input->seek(8, WPX_SEEK_CUR);
+      }
     }
     if (m_version >= 1500)
       input->seek(12, WPX_SEEK_CUR);
commit 2df5781d2ad924731bc981be6a2147c95b5498d0
Author: Fridrich Å trba <fridrich.strba at bluewin.ch>
Date:   Thu Apr 11 18:05:08 2013 +0200

    Txsm for version 5

diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp
index b436af8..3ee8870 100644
--- a/src/lib/CDRParser.cpp
+++ b/src/lib/CDRParser.cpp
@@ -2966,20 +2966,54 @@ void libcdr::CDRParser::readTxsm6(WPXInputStream *input)
 
 void libcdr::CDRParser::readTxsm5(WPXInputStream *input)
 {
-  input->seek(10, WPX_SEEK_CUR);
-  /* unsigned stlId = */
-  readU16(input);
+  input->seek(4, WPX_SEEK_CUR);
+  unsigned textId = readU16(input);
+  input->seek(4, WPX_SEEK_CUR);
+  unsigned stlId = readU16(input);
   unsigned numSt = readU16(input);
   unsigned i = 0;
+  std::map<unsigned, CDRCharacterStyle> charStyles;
   for (; i<numSt; ++i)
   {
-    input->seek(36, WPX_SEEK_CUR);
+    CDRCharacterStyle charStyle;
+    unsigned char flag = readU8(input);
+    input->seek(1, WPX_SEEK_CUR);
+    if (flag&0x01)
+    {
+      charStyle.m_fontId = readU8(input);
+      charStyle.m_charSet = readU8(input);
+    }
+    else
+      input->seek(2, WPX_SEEK_CUR);
+    input->seek(6, WPX_SEEK_CUR);
+    if (flag&0x04)
+      charStyle.m_fontSize = readCoordinate(input);
+    else
+      input->seek(2, WPX_SEEK_CUR);
+    input->seek(2, WPX_SEEK_CUR);
+    if (flag&0x10)
+      charStyle.m_fillId = readU32(input);
+    else
+      input->seek(4, WPX_SEEK_CUR);
+    if (flag&0x20)
+      charStyle.m_outlId = readU32(input);
+    else
+      input->seek(4, WPX_SEEK_CUR);
+    input->seek(14, WPX_SEEK_CUR);
+    charStyles[2*i] = charStyle;
   }
   unsigned numChars = readU16(input);
+  std::vector<unsigned char> textData;
+  std::vector<unsigned char> charDescriptions;
   for (i=0; i<numChars; ++i)
   {
-    input->seek(8, WPX_SEEK_CUR);
+    input->seek(4, WPX_SEEK_CUR);
+    textData.push_back(readU8(input));
+    input->seek(1, WPX_SEEK_CUR);
+    charDescriptions.push_back((readU16(input) >> 3) & 0xff);
   }
+  if (!textData.empty())
+    m_collector->collectText(textId, stlId, textData, charDescriptions, charStyles);
 }
 
 void libcdr::CDRParser::readStyd(WPXInputStream *input)
@@ -3017,10 +3051,10 @@ void libcdr::CDRParser::readStyd(WPXInputStream *input)
     case STYD_NAME:
       break;
     case STYD_FILL_ID:
-      charStyle.m_fillId = readUnsigned(input);
+      charStyle.m_fillId = readU32(input);
       break;
     case STYD_OUTL_ID:
-      charStyle.m_outlId = readUnsigned(input);
+      charStyle.m_outlId = readU32(input);
       break;
     case STYD_FONTS:
       if (m_version >= 600)


More information about the Libreoffice-commits mailing list