src/lib/CDRParser.cpp | 52 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 7 deletions(-)
New commits: commit 6808b992d6ad569312fa6341ac24a5d18a64c1ac Author: Fridrich Å trba <fridrich.st...@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.st...@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)
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits