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.st...@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);
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits