src/lib/MSPUBCollector.cpp | 17 +++++++---------- src/lib/MSPUBCollector.h | 4 ++-- src/lib/MSPUBParser.cpp | 7 +++++-- src/lib/ShapeInfo.h | 3 +-- 4 files changed, 15 insertions(+), 16 deletions(-)
New commits: commit 630ed6296456fe14c08a25dda703a221280a00c2 Author: David Tardon <[email protected]> Date: Mon Dec 29 21:53:11 2014 +0100 fix parsing of docs with multiple tables Change-Id: I4f8141a6fe71db283b698b67819e5ed00aed3860 diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp index 98d34cc..71e3846 100644 --- a/src/lib/MSPUBCollector.cpp +++ b/src/lib/MSPUBCollector.cpp @@ -282,8 +282,6 @@ void MSPUBCollector::setShapeTableInfo(unsigned seqNum, const TableInfo &ti) { m_shapeInfosBySeqNum[seqNum].m_tableInfo = ti; - if (!m_tableCellTextEndsVector.empty()) - m_shapeInfosBySeqNum[seqNum].m_tableCellTextEnds = m_tableCellTextEndsVector.back(); } void MSPUBCollector::setShapeNumColumns(unsigned seqNum, @@ -380,7 +378,7 @@ MSPUBCollector::MSPUBCollector(librevenge::RVNGDrawingInterface *painter) : m_shapeInfosBySeqNum(), m_masterPages(), m_shapesWithCoordinatesRotated90(), m_masterPagesByPageSeqNum(), - m_tableCellTextEndsVector(), m_stringOffsetsByTextId(), + m_tableCellTextEndsByTextId(), m_stringOffsetsByTextId(), m_calculationValuesSeen(), m_pageSeqNumsOrdered(), m_encodingHeuristic(false), m_allText(), m_calculatedEncoding() @@ -393,10 +391,10 @@ void MSPUBCollector::setTextStringOffset( m_stringOffsetsByTextId[textId] = offset; } -void MSPUBCollector::setNextTableCellTextEnds( - const std::vector<unsigned> &ends) +void MSPUBCollector::setTableCellTextEnds( + const unsigned textId, const std::vector<unsigned> &ends) { - m_tableCellTextEndsVector.push_back(ends); + m_tableCellTextEndsByTextId[textId] = ends; } void MSPUBCollector::useEncodingHeuristic() @@ -1003,9 +1001,8 @@ boost::function<void(void)> MSPUBCollector::paintShape(const ShapeInfo &info, co { m_painter->startTableObject(props); - std::vector<unsigned> tableCellTextEnds; - if (bool(info.m_tableCellTextEnds)) - tableCellTextEnds = get(info.m_tableCellTextEnds); + const std::map<unsigned, std::vector<unsigned> >::const_iterator it = m_tableCellTextEndsByTextId.find(get(info.m_textId)); + const std::vector<unsigned> &tableCellTextEnds = (it != m_tableCellTextEndsByTextId.end()) ? it->second : std::vector<unsigned>(); TableLayout tableLayout(boost::extents[get(info.m_tableInfo).m_numRows][get(info.m_tableInfo).m_numColumns]); createTableLayout(get(info.m_tableInfo).m_cells, tableLayout); diff --git a/src/lib/MSPUBCollector.h b/src/lib/MSPUBCollector.h index b66e317..7e4b953 100644 --- a/src/lib/MSPUBCollector.h +++ b/src/lib/MSPUBCollector.h @@ -121,7 +121,7 @@ public: void useEncodingHeuristic(); - void setNextTableCellTextEnds(const std::vector<unsigned> &ends); + void setTableCellTextEnds(unsigned textId, const std::vector<unsigned> &ends); void setTextStringOffset(unsigned textId, unsigned offset); bool go(); @@ -165,7 +165,7 @@ private: std::set<unsigned> m_masterPages; std::set<unsigned> m_shapesWithCoordinatesRotated90; std::map<unsigned, unsigned> m_masterPagesByPageSeqNum; - std::vector<std::vector<unsigned> > m_tableCellTextEndsVector; + std::map<unsigned, std::vector<unsigned> > m_tableCellTextEndsByTextId; std::map<unsigned, unsigned> m_stringOffsetsByTextId; mutable std::vector<bool> m_calculationValuesSeen; std::vector<unsigned> m_pageSeqNumsOrdered; diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp index d2f3baa..1810152 100644 --- a/src/lib/MSPUBParser.cpp +++ b/src/lib/MSPUBParser.cpp @@ -973,6 +973,7 @@ bool MSPUBParser::parseQuill(librevenge::RVNGInputStream *input) std::vector<unsigned> textLengths; std::vector<unsigned> textIDs; std::vector<unsigned> textOffsets; + std::map<unsigned, std::vector<unsigned> > tableCellTextEnds; unsigned textOffsetAccum = 0; std::vector<TextSpanReference> spans; std::vector<TextParagraphReference> paras; @@ -1045,8 +1046,7 @@ bool MSPUBParser::parseQuill(librevenge::RVNGInputStream *input) else if (i->name == "TCD ") { input->seek(i->offset, librevenge::RVNG_SEEK_SET); - std::vector<unsigned> ends = parseTableCellDefinitions(input, *i); - m_collector->setNextTableCellTextEnds(ends); + tableCellTextEnds[i->id] = parseTableCellDefinitions(input, *i); } } if (parsedStrs && parsedSyid && parsedFdpc && parsedFdpp && parsedStsh && parsedFont && textChunkReference != chunkReferences.end()) @@ -1106,6 +1106,9 @@ bool MSPUBParser::parseQuill(librevenge::RVNGInputStream *input) } m_collector->addTextString(readParas, textIDs[j]); m_collector->setTextStringOffset(textIDs[j], textOffsets[j]); + const std::map<unsigned, std::vector<unsigned> >::const_iterator it = tableCellTextEnds.find(j); + if (it != tableCellTextEnds.end()) + m_collector->setTableCellTextEnds(textIDs[j], it->second); } textChunkReference = chunkReferences.end(); } diff --git a/src/lib/ShapeInfo.h b/src/lib/ShapeInfo.h index d960917..372191e 100644 --- a/src/lib/ShapeInfo.h +++ b/src/lib/ShapeInfo.h @@ -53,7 +53,6 @@ struct ShapeInfo boost::optional<ColorReference> m_lineBackColor; boost::optional<Dash> m_dash; boost::optional<TableInfo> m_tableInfo; - boost::optional<std::vector<unsigned> > m_tableCellTextEnds; boost::optional<unsigned> m_numColumns; unsigned m_columnSpacing; boost::optional<Arrow> m_beginArrow; @@ -71,7 +70,7 @@ struct ShapeInfo m_rotation(), m_flips(), m_margins(), m_borderPosition(), m_fill(), m_customShape(), m_stretchBorderArt(false), m_lineBackColor(), m_dash(), m_tableInfo(), - m_tableCellTextEnds(), m_numColumns(), + m_numColumns(), m_columnSpacing(0), m_beginArrow(), m_endArrow(), m_verticalAlign(), m_pictureRecolor(), m_shadow(), m_innerRotation(), m_clipPath(), m_pictureBrightness(), m_pictureContrast() { commit f2062c912b0deb340cb7d4c55d027e7d26cf0f59 Author: David Tardon <[email protected]> Date: Mon Dec 29 21:52:50 2014 +0100 astyle Change-Id: Ifd955b803ca0ab6b1c3fb93c947320d846c537ed diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp index 5bc7e62..98d34cc 100644 --- a/src/lib/MSPUBCollector.cpp +++ b/src/lib/MSPUBCollector.cpp @@ -1053,7 +1053,7 @@ boost::function<void(void)> MSPUBCollector::paintShape(const ShapeInfo &info, co m_painter->closeSpan(); } - m_painter->closeParagraph(); + m_painter->closeParagraph(); } } _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
