src/lib/CMXParser.cpp | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib/CMXParser.h | 1 2 files changed, 56 insertions(+)
New commits: commit 6c1e337b20f11b86e5356cc4b43ad0f715e77326 Author: Fridrich Å trba <fridrich.st...@bluewin.ch> Date: Sat Jul 2 19:34:03 2016 +0200 rotl reader Change-Id: I545b82951cb7af6338be16d134ed821deb24320e diff --git a/src/lib/CMXParser.cpp b/src/lib/CMXParser.cpp index 3ac725b..2d8459c 100644 --- a/src/lib/CMXParser.cpp +++ b/src/lib/CMXParser.cpp @@ -133,6 +133,9 @@ void libcdr::CMXParser::readRecord(unsigned fourCC, unsigned &length, librevenge case CDR_FOURCC_rott: readRott(input); break; + case CDR_FOURCC_rotl: + readRotl(input); + break; case CDR_FOURCC_rpen: readRpen(input); break; @@ -1237,6 +1240,58 @@ void libcdr::CMXParser::readRott(librevenge::RVNGInputStream *input) } } +void libcdr::CMXParser::readRotl(librevenge::RVNGInputStream *input) +{ + unsigned numRecords = readU16(input, m_bigEndian); + CDR_DEBUG_MSG(("CMXParser::readRotl - numRecords %i\n", numRecords)); + for (unsigned j = 1; j < numRecords+1; ++j) + { + CMXOutline outline; + 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_Outline: + { + outline.m_lineStyle = readU16(input, m_bigEndian); + outline.m_screen = readU16(input, m_bigEndian); + outline.m_color = readU16(input, m_bigEndian); + outline.m_arrowHeads = readU16(input, m_bigEndian); + outline.m_pen = readU16(input, m_bigEndian); + outline.m_dotDash = readU16(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) + { + outline.m_lineStyle = readU16(input, m_bigEndian); + outline.m_screen = readU16(input, m_bigEndian); + outline.m_color = readU16(input, m_bigEndian); + outline.m_arrowHeads = readU16(input, m_bigEndian); + outline.m_pen = readU16(input, m_bigEndian); + outline.m_dotDash = readU16(input, m_bigEndian); + break; + } + else + return; + m_parserState.m_outlines[j] = outline; + } +} + void libcdr::CMXParser::readRpen(librevenge::RVNGInputStream *input) { unsigned numRecords = readU16(input, m_bigEndian); diff --git a/src/lib/CMXParser.h b/src/lib/CMXParser.h index 48bc4e4..c858798 100644 --- a/src/lib/CMXParser.h +++ b/src/lib/CMXParser.h @@ -84,6 +84,7 @@ private: void readCcmm(librevenge::RVNGInputStream *input, long &recordEnd); void readPage(librevenge::RVNGInputStream *input, unsigned length); void readRclr(librevenge::RVNGInputStream *input); + void readRotl(librevenge::RVNGInputStream *input); void readRott(librevenge::RVNGInputStream *input); void readRdot(librevenge::RVNGInputStream *input); void readRpen(librevenge::RVNGInputStream *input);
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits