src/lib/CMXParser.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/lib/CMXParser.h | 12 +++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-)
New commits: commit c5c804ea40039b2e6ce9b603a65fcb79d4a36178 Author: Fridrich Å trba <fridrich.st...@bluewin.ch> Date: Sat Jul 2 18:10:25 2016 +0200 rott reader Change-Id: I1d22bf5e5f02eedb0f799516bd91a58569b7f352 diff --git a/src/lib/CMXParser.cpp b/src/lib/CMXParser.cpp index bff21c4..371b746 100644 --- a/src/lib/CMXParser.cpp +++ b/src/lib/CMXParser.cpp @@ -130,6 +130,9 @@ void libcdr::CMXParser::readRecord(unsigned fourCC, unsigned &length, librevenge case CDR_FOURCC_rdot: readRdot(input); break; + case CDR_FOURCC_rott: + readRott(input); + break; default: break; } @@ -1191,6 +1194,49 @@ void libcdr::CMXParser::readRdot(librevenge::RVNGInputStream *input) } } +void libcdr::CMXParser::readRott(librevenge::RVNGInputStream *input) +{ + unsigned numRecords = readU16(input, m_bigEndian); + CDR_DEBUG_MSG(("CMXParser::readRott - numRecords %i\n", numRecords)); + for (unsigned j = 1; j < numRecords+1; ++j) + { + CMXLineStyle lineStyle; + if (m_precision == libcdr::PRECISION_32BIT) + { + unsigned char tagId = 0; + do + { + long offset = input->tell(); + tagId = readU8(input, m_bigEndian); + if (tagId == CMX_Tag_EndTag) + break; + unsigned short tagLength = readU16(input, m_bigEndian); + switch (tagId) + { + case CMX_Tag_DescrSection_LineStyle: + { + lineStyle.m_spec = readU8(input, m_bigEndian); + lineStyle.m_capAndJoin = readU8(input, m_bigEndian); + break; + } + default: + break; + } + input->seek(offset+tagLength, librevenge::RVNG_SEEK_SET); + } + while (tagId != CMX_Tag_EndTag); + } + else if (m_precision == libcdr::PRECISION_16BIT) + { + lineStyle.m_spec = readU8(input, m_bigEndian); + lineStyle.m_capAndJoin = readU8(input, m_bigEndian); + } + else + return; + m_parserState.m_lineStyles[j] = lineStyle; + } +} + libcdr::CDRColor libcdr::CMXParser::getPaletteColor(unsigned id) { const std::map<unsigned, libcdr::CDRColor>::const_iterator iter = m_parserState.m_colorPalette.find(id); diff --git a/src/lib/CMXParser.h b/src/lib/CMXParser.h index 4b05fa1..b713fbb 100644 --- a/src/lib/CMXParser.h +++ b/src/lib/CMXParser.h @@ -23,11 +23,20 @@ namespace libcdr class CDRCollector; +struct CMXLineStyle +{ + CMXLineStyle() : m_spec(0), M_capAndJoin(0) {} + unsigned char m_spec; + unsigned char m_capAndJoin; +}; + struct CMXParserState { - CMXParserState() : m_colorPalette(), m_dashArrays() {} + CMXParserState() + : m_colorPalette(), m_dashArrays(), m_lineStyles() {} std::map<unsigned, CDRColor> m_colorPalette; std::map<unsigned, std::vector<unsigned> > m_dashArrays; + std::map<unsigned, CMXLineStyle> m_lineStyles; }; class CMXParser : protected CommonParser @@ -49,6 +58,7 @@ private: void readCcmm(librevenge::RVNGInputStream *input, long &recordEnd); void readPage(librevenge::RVNGInputStream *input, unsigned length); void readRclr(librevenge::RVNGInputStream *input); + void readRott(librevenge::RVNGInputStream *input); void readRdot(librevenge::RVNGInputStream *input); // Command readers
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits