[Libreoffice-commits] libmspub.git: 2 commits - src/lib
src/lib/MSPUBParser.cpp |6 ++ 1 file changed, 2 insertions(+), 4 deletions(-) New commits: commit 2be062bd914c000899a03822664f9a523d435f3e Author: David TardonDate: Thu Feb 15 10:42:06 2018 +0100 drop unnecessary variables Change-Id: If3d15512433406399716e458c666b81dc7aa41ef diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp index da4de8b..1f6fa95 100644 --- a/src/lib/MSPUBParser.cpp +++ b/src/lib/MSPUBParser.cpp @@ -1973,12 +1973,10 @@ void MSPUBParser::parseEscherShape(librevenge::RVNGInputStream *input, const Esc } if (rotated90) { -int initialX = absolute.m_xs; -int initialY = absolute.m_ys; int initialWidth = int64_t(absolute.m_xe) - absolute.m_xs; int initialHeight = int64_t(absolute.m_ye) - absolute.m_ys; -int centerX = int64_t(initialX) + initialWidth / 2; -int centerY = int64_t(initialY) + initialHeight / 2; +int centerX = int64_t(absolute.m_xs) + initialWidth / 2; +int centerY = int64_t(absolute.m_ys) + initialHeight / 2; int xs = centerX - initialHeight / 2; int ys = centerY - initialWidth / 2; int xe = xs + initialHeight; commit a500976df2557c4c4c5f90bda0a401319573ceff Author: David Tardon Date: Thu Feb 15 10:41:20 2018 +0100 ofz#6339 avoid signed int overflow Change-Id: I6459deafb6d0dabc47e6e446457165b6814f348e diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp index 1078eda..da4de8b 100644 --- a/src/lib/MSPUBParser.cpp +++ b/src/lib/MSPUBParser.cpp @@ -1977,8 +1977,8 @@ void MSPUBParser::parseEscherShape(librevenge::RVNGInputStream *input, const Esc int initialY = absolute.m_ys; int initialWidth = int64_t(absolute.m_xe) - absolute.m_xs; int initialHeight = int64_t(absolute.m_ye) - absolute.m_ys; -int centerX = initialX + initialWidth / 2; -int centerY = initialY + initialHeight / 2; +int centerX = int64_t(initialX) + initialWidth / 2; +int centerY = int64_t(initialY) + initialHeight / 2; int xs = centerX - initialHeight / 2; int ys = centerY - initialWidth / 2; int xe = xs + initialHeight; ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] libmspub.git: 2 commits - src/lib
src/lib/MSPUBBlockID.h |7 +++ src/lib/MSPUBCollector.cpp | 102 ++--- src/lib/MSPUBParser.cpp| 93 ++--- src/lib/MSPUBParser97.cpp | 24 +- src/lib/MSPUBTypes.h | 44 --- 5 files changed, 241 insertions(+), 29 deletions(-) New commits: commit df9a3b0cc2d2af14f2816477f2ca2e65320234a4 Author: David TardonDate: Sat Dec 30 14:26:06 2017 +0100 fix parsing of bold and italic in mspub 2002 docs Change-Id: I3945cdf240cd23c593d413d7d964d33e288d873b diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp index 40cb694..b6d6bbb 100644 --- a/src/lib/MSPUBParser.cpp +++ b/src/lib/MSPUBParser.cpp @@ -1476,8 +1476,12 @@ CharacterStyle MSPUBParser::getCharacterStyle(librevenge::RVNGInputStream *input { dTextSize = textSize1 * (double(POINTS_IN_INCH) / EMUS_IN_INCH); } - style.italic = seenItalic1 && seenItalic2; - style.bold = seenBold1 && seenBold2; + // FIXME: What's this with foo1 && foo2? I've only seen foo1 in 2k2 + // files and either just foo1 or foo1+foo2 in 2k7 files... + style.italic = seenItalic1; // && seenItalic2; + style.bold = seenBold1; // && seenBold2; + (void) seenItalic2; + (void) seenBold2; style.textSizeInPt = dTextSize; style.colorIndex = getColorIndexByQuillEntry(colorIndex); style.fontIndex = fontIndex; commit 45832739afa9280d180d50b34041c4930eb7fd24 Author: David Tardon Date: Sat Dec 30 13:31:52 2017 +0100 parse more text formatting properties Change-Id: I25aef81ba5b3beaa57726d85b57c7acab79198d1 diff --git a/src/lib/MSPUBBlockID.h b/src/lib/MSPUBBlockID.h index 4420e05..bf92664 100644 --- a/src/lib/MSPUBBlockID.h +++ b/src/lib/MSPUBBlockID.h @@ -35,6 +35,13 @@ enum MSPUBBlockID // Don't be alarmed by multiple elements with the same value; ITALIC_1_ID = 0x03, ITALIC_2_ID = 0x38, UNDERLINE_ID = 0x1E, + OUTLINE_ID = 0x4, + SHADOW_ID = 0x5, + SMALL_CAPS_ID = 0x13, + ALL_CAPS_ID = 0x14, + EMBOSS_ID = 0x16, + ENGRAVE_ID = 0x17, + SCALING_ID = 0x20, TEXT_SIZE_1_ID = 0x0C, TEXT_SIZE_2_ID = 0x39, COLOR_INDEX_CONTAINER_ID = 0x44, diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp index dafe561..24c8d08 100644 --- a/src/lib/MSPUBCollector.cpp +++ b/src/lib/MSPUBCollector.cpp @@ -238,6 +238,82 @@ void mapTableTextToCells( assert(paraToCellMap.size() <= tableCellTextEnds.size()); } +void fillUnderline(librevenge::RVNGPropertyList , const Underline underline) +{ + switch (underline) + { + case Underline::None: +return; + case Underline::Single: + case Underline::WordsOnly: + case Underline::Double: + case Underline::Thick: +props.insert("style:text-underline-style", "solid"); +break; + case Underline::Dotted: + case Underline::ThickDot: +props.insert("style:text-underline-style", "dotted"); +break; + case Underline::Dash: + case Underline::ThickDash: +props.insert("style:text-underline-style", "dash"); +break; + case Underline::DotDash: + case Underline::ThickDotDash: +props.insert("style:text-underline-style", "dot-dash"); +break; + case Underline::DotDotDash: + case Underline::ThickDotDotDash: +props.insert("style:text-underline-style", "dot-dot-dash"); +break; + case Underline::Wave: + case Underline::ThickWave: + case Underline::DoubleWave: +props.insert("style:text-underline-style", "wave"); +break; + case Underline::LongDash: + case Underline::ThickLongDash: +props.insert("style:text-underline-style", "long-dash"); +break; + } + + switch (underline) + { + case Underline::Double: + case Underline::DoubleWave: +props.insert("style:text-underline-type", "double"); +break; + default: +props.insert("style:text-underline-type", "single"); +break; + } + + switch (underline) + { + case Underline::Thick: + case Underline::ThickWave: + case Underline::ThickDot: + case Underline::ThickDash: + case Underline::ThickDotDash: + case Underline::ThickDotDotDash: +props.insert("style:text-underline-width", "bold"); +break; + default: +props.insert("style:text-underline-width", "auto"); +break; + } + + switch (underline) + { + case Underline::WordsOnly: +props.insert("style:text-underline-mode", "skip-white-space"); +break; + default: +props.insert("style:text-underline-mode", "continuous"); +break; + } +} + } // anonymous namespace void MSPUBCollector::collectMetaData(const librevenge::RVNGPropertyList ) @@ -1514,7 +1590,7 @@ librevenge::RVNGPropertyList MSPUBCollector::getParaStyleProps(const ParagraphSt librevenge::RVNGPropertyList MSPUBCollector::getCharStyleProps(const CharacterStyle , boost::optional defaultCharStyleIndex) const { - CharacterStyle _nothing = CharacterStyle(false, false, false); + CharacterStyle _nothing; if (!defaultCharStyleIndex) {
[Libreoffice-commits] libmspub.git: 2 commits - src/lib
src/lib/MSPUBCollector.cpp |2 +- src/lib/MSPUBMetaData.cpp |4 ++-- src/lib/PolygonUtils.cpp | 12 ++-- src/lib/libmspub_utils.cpp | 14 +++--- 4 files changed, 16 insertions(+), 16 deletions(-) New commits: commit 77655b7e8dfd05669c3bc1c691a882fa45251cf5 Author: David TardonDate: Sat Jul 29 12:54:50 2017 +0200 use vector::data() Change-Id: I8ff2210e36df47c3fcc34a2357425668d6bbfb03 diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp index b071cb6..981d345 100644 --- a/src/lib/MSPUBCollector.cpp +++ b/src/lib/MSPUBCollector.cpp @@ -1174,7 +1174,7 @@ const char *MSPUBCollector::getCalculatedEncoding() const goto csd_fail; } // don't worry, the below call doesn't require a null-terminated string. - ucsdet_setText(ucd, (const char *)(_allText[0]), m_allText.size(), ); + ucsdet_setText(ucd, (const char *)m_allText.data(), m_allText.size(), ); if (U_FAILURE(status)) { goto csd_fail; diff --git a/src/lib/PolygonUtils.cpp b/src/lib/PolygonUtils.cpp index 5a9c3d1..7020b69 100644 --- a/src/lib/PolygonUtils.cpp +++ b/src/lib/PolygonUtils.cpp @@ -6381,19 +6381,19 @@ bool isShapeTypeRectangle(ShapeType type) std::shared_ptr getFromDynamicCustomShape(const DynamicCustomShape ) { return std::shared_ptr(new CustomShape( - dcs.m_vertices.empty() ? NULL : _vertices[0], + dcs.m_vertices.empty() ? NULL : dcs.m_vertices.data(), dcs.m_vertices.size(), - dcs.m_elements.empty() ? NULL : _elements[0], + dcs.m_elements.empty() ? NULL : dcs.m_elements.data(), dcs.m_elements.size(), - dcs.m_calculations.empty() ? NULL : _calculations[0], + dcs.m_calculations.empty() ? NULL : dcs.m_calculations.data(), dcs.m_calculations.size(), dcs.m_defaultAdjustValues.empty() ? NULL : - _defaultAdjustValues[0], + dcs.m_defaultAdjustValues.data(), dcs.m_defaultAdjustValues.size(), - dcs.m_textRectangles.empty() ? NULL : _textRectangles[0], + dcs.m_textRectangles.empty() ? NULL : dcs.m_textRectangles.data(), dcs.m_textRectangles.size(), dcs.m_coordWidth, dcs.m_coordHeight, - dcs.m_gluePoints.empty() ? NULL : _gluePoints[0], + dcs.m_gluePoints.empty() ? NULL : dcs.m_gluePoints.data(), dcs.m_gluePoints.size(), dcs.m_adjustShiftMask )); diff --git a/src/lib/libmspub_utils.cpp b/src/lib/libmspub_utils.cpp index 05627a9..1540e21 100644 --- a/src/lib/libmspub_utils.cpp +++ b/src/lib/libmspub_utils.cpp @@ -333,7 +333,7 @@ void readNBytes(librevenge::RVNGInputStream *input, unsigned long length, std::v return; } out = std::vector(numBytesRead); - memcpy([0], tmpBuffer, numBytesRead); + memcpy(out.data(), tmpBuffer, numBytesRead); return; } @@ -387,7 +387,7 @@ void appendCharacters(librevenge::RVNGString , const std::vector Date: Sat Jul 29 12:46:16 2017 +0200 do not append UTF-8 string by code units Change-Id: I7b8f01fb875336d7d736cf24553fbb82e44fa5ec diff --git a/src/lib/MSPUBMetaData.cpp b/src/lib/MSPUBMetaData.cpp index c298bd1..f9ffb8f 100644 --- a/src/lib/MSPUBMetaData.cpp +++ b/src/lib/MSPUBMetaData.cpp @@ -252,8 +252,8 @@ librevenge::RVNGString libmspub::MSPUBMetaData::readCodePageString(librevenge::R { // http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130%28v=vs.85%29.aspx // says this is UTF-8. -for (std::vector::const_iterator i = characters.begin(); i != characters.end(); ++i) - string.append((const char)*i); +characters.push_back(0); +string.append(reinterpret_cast(characters.data())); } else { diff --git a/src/lib/libmspub_utils.cpp b/src/lib/libmspub_utils.cpp index 00a6f30..05627a9 100644 --- a/src/lib/libmspub_utils.cpp +++ b/src/lib/libmspub_utils.cpp @@ -237,17 +237,17 @@ static void _appendUCS4(librevenge::RVNGString , unsigned ucs4Character) len = 6; } - unsigned char outbuf[6] = { 0, 0, 0, 0, 0, 0 }; + char outbuf[7] = { 0 }; int i; for (i = len - 1; i > 0; --i) { -outbuf[i] = (ucs4Character & 0x3f)
[Libreoffice-commits] libmspub.git: 2 commits - src/lib
src/lib/MSPUBCollector.cpp | 11 --- 1 file changed, 4 insertions(+), 7 deletions(-) New commits: commit 860883fa6fa861f808c091a3cecd03aa351d87a8 Author: David TardonDate: Tue May 9 12:40:16 2017 +0200 use existing conv. functions Change-Id: Ia2f5ab36ae42321771fd43e77b96b5a0b9452412 diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp index d703549..b071cb6 100644 --- a/src/lib/MSPUBCollector.cpp +++ b/src/lib/MSPUBCollector.cpp @@ -310,11 +310,8 @@ void MSPUBCollector::setShapeStretchBorderArt(unsigned seqNum) void MSPUBCollector::setRectCoordProps(Coordinate coord, librevenge::RVNGPropertyList *props) const { - int xs = coord.m_xs, ys = coord.m_ys; - double x_center = m_width / 2; - double y_center = m_height / 2; - props->insert("svg:x", x_center + (double)xs / EMUS_IN_INCH); - props->insert("svg:y", y_center + (double)ys / EMUS_IN_INCH); + props->insert("svg:x", coord.getXIn(m_width)); + props->insert("svg:y", coord.getYIn(m_width)); props->insert("svg:width", coord.getWidthIn()); props->insert("svg:height", coord.getHeightIn()); } commit b14004f95982560820f63a44b18d99ff64438f64 Author: David Tardon Date: Tue May 9 12:39:21 2017 +0200 ofz#1357 avoid integer overflow Change-Id: I60b2118c0fad45c3bba2006f60636f20bb95eaf0 diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp index d900893..d703549 100644 --- a/src/lib/MSPUBCollector.cpp +++ b/src/lib/MSPUBCollector.cpp @@ -310,13 +310,13 @@ void MSPUBCollector::setShapeStretchBorderArt(unsigned seqNum) void MSPUBCollector::setRectCoordProps(Coordinate coord, librevenge::RVNGPropertyList *props) const { - int xs = coord.m_xs, ys = coord.m_ys, xe = coord.m_xe, ye = coord.m_ye; + int xs = coord.m_xs, ys = coord.m_ys; double x_center = m_width / 2; double y_center = m_height / 2; props->insert("svg:x", x_center + (double)xs / EMUS_IN_INCH); props->insert("svg:y", y_center + (double)ys / EMUS_IN_INCH); - props->insert("svg:width", (double)(xe - xs) / EMUS_IN_INCH); - props->insert("svg:height", (double)(ye - ys) / EMUS_IN_INCH); + props->insert("svg:width", coord.getWidthIn()); + props->insert("svg:height", coord.getHeightIn()); } Coordinate getFudgedCoordinates(Coordinate coord, const std::vector , bool makeBigger, BorderPosition borderPosition) ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] libmspub.git: 2 commits - src/lib
src/lib/Coordinate.h |4 ++-- src/lib/MSPUBParser97.cpp | 12 +--- 2 files changed, 7 insertions(+), 9 deletions(-) New commits: commit fcfdbdf6d0481e8c709f8033181e8da09142cff9 Author: David TardonDate: Tue May 2 16:31:18 2017 +0200 ofz#1004 fix signed integer overflow Change-Id: I2cb4414464fe62c2b88b6cdcda3a9ba52cf82800 diff --git a/src/lib/Coordinate.h b/src/lib/Coordinate.h index f15ffb4..336eb09 100644 --- a/src/lib/Coordinate.h +++ b/src/lib/Coordinate.h @@ -27,11 +27,11 @@ struct Coordinate } double getWidthIn() const { -return double(m_xe - m_xs) / EMUS_IN_INCH; +return double(int64_t(m_xe) - m_xs) / EMUS_IN_INCH; } double getHeightIn() const { -return double(m_ye - m_ys) / EMUS_IN_INCH; +return double(int64_t(m_ye) - m_ys) / EMUS_IN_INCH; } }; } commit 6a7bc865eac08ab145b15e504b931e040700015e Author: David Tardon Date: Tue May 2 16:26:40 2017 +0200 ofz#1288 fix signed integer overflow Change-Id: I282a6c1b1c5d4ce95d73e6bc59c4e5be574f0802 diff --git a/src/lib/MSPUBParser97.cpp b/src/lib/MSPUBParser97.cpp index f3b29a2..867a1cf 100644 --- a/src/lib/MSPUBParser97.cpp +++ b/src/lib/MSPUBParser97.cpp @@ -9,6 +9,7 @@ #include "MSPUBParser97.h" +#include #include #include @@ -263,14 +264,11 @@ MSPUBParser97::TextInfo97 MSPUBParser97::getTextInfo(librevenge::RVNGInputStream int MSPUBParser97::translateCoordinateIfNecessary(int coordinate) const { - if (m_isBanner) - { -return coordinate - 120 * EMUS_IN_INCH; - } + const int offset = (m_isBanner ? 120 : 25) * EMUS_IN_INCH; + if (std::numeric_limits::min() + offset > coordinate) +return std::numeric_limits::min(); else - { -return coordinate - 25 * EMUS_IN_INCH; - } +return coordinate - offset; } unsigned MSPUBParser97::getFirstLineOffset() const ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] libmspub.git: 2 commits - src/lib
src/lib/MSPUBMetaData.cpp |2 +- 1 file changed, 1 insertion(+), 1 deletion(-) New commits: commit 84aa593e58a2a3cc28e6e36086d0c99f59e42757 Author: David Tardon dtar...@redhat.com Date: Tue Jan 6 13:44:05 2015 +0100 why is this variable static? Change-Id: Ib3108e1f4a0a4caa2df9685ee58a9ea6e7f7634e diff --git a/src/lib/MSPUBMetaData.cpp b/src/lib/MSPUBMetaData.cpp index c52fcd7..7e5888e 100644 --- a/src/lib/MSPUBMetaData.cpp +++ b/src/lib/MSPUBMetaData.cpp @@ -210,7 +210,7 @@ bool libmspub::MSPUBMetaData::parseTimes(librevenge::RVNGInputStream *input) uint64_t modifiedTime = readU64(input); // modifiedTime is number of 100ns since Jan 1 1601 - static const uint64_t epoch = uint64_t(116444736UL) * 100; + const uint64_t epoch = uint64_t(116444736UL) * 100; time_t sec = (modifiedTime / 1000) - epoch; const struct tm *time = localtime(sec); if (time) commit 4a642d5ab5d9822168ff49580e1349f422ef4481 Author: David Tardon dtar...@redhat.com Date: Tue Jan 6 13:43:21 2015 +0100 workaround build error on some old 32-bit systems error: integer constant is too large for 'long' type Change-Id: I7f6a169059ca3dcd4d9977c6af1522799f1df051 diff --git a/src/lib/MSPUBMetaData.cpp b/src/lib/MSPUBMetaData.cpp index eca048b..c52fcd7 100644 --- a/src/lib/MSPUBMetaData.cpp +++ b/src/lib/MSPUBMetaData.cpp @@ -210,7 +210,7 @@ bool libmspub::MSPUBMetaData::parseTimes(librevenge::RVNGInputStream *input) uint64_t modifiedTime = readU64(input); // modifiedTime is number of 100ns since Jan 1 1601 - static const uint64_t epoch = 11644473600; + static const uint64_t epoch = uint64_t(116444736UL) * 100; time_t sec = (modifiedTime / 1000) - epoch; const struct tm *time = localtime(sec); if (time) ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] libmspub.git: 2 commits - src/lib
src/lib/MSPUBCollector.cpp | 101 - 1 file changed, 74 insertions(+), 27 deletions(-) New commits: commit b3ac66dd7a7a4d9d1ed92ffc34a456fef695127e Author: David Tardon dtar...@redhat.com Date: Mon Dec 29 19:18:49 2014 +0100 cells are not always saved in L-R T-B order As an additional bonus, this simplifies the output loop. Change-Id: I2ae1eab52d3681c02e790af950c82a7f01d3aa11 diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp index c157b33..5bc7e62 100644 --- a/src/lib/MSPUBCollector.cpp +++ b/src/lib/MSPUBCollector.cpp @@ -108,11 +108,13 @@ static void separateSpacesAndInsertText(librevenge::RVNGDrawingInterface *iface, struct TableLayoutCell { TableLayoutCell() -: m_rowSpan(0) +: m_cell(0) +, m_rowSpan(0) , m_colSpan(0) { } + unsigned m_cell; unsigned m_rowSpan; unsigned m_colSpan; }; @@ -173,11 +175,66 @@ void createTableLayout(const std::vectorCellInfo cells, TableLayout tableLay } TableLayoutCell layoutCell = tableLayout[it-m_startRow][it-m_startColumn]; +layoutCell.m_cell = unsigned(int(it - cells.begin())); layoutCell.m_rowSpan = rowSpan; layoutCell.m_colSpan = colSpan; } } +typedef std::vectorstd::pairunsigned, unsigned ParagraphToCellMap_t; +typedef std::vectorlibrevenge::RVNGString SpanTexts_t; +typedef std::vectorSpanTexts_t ParagraphTexts_t; + +void mapTableTextToCells( + const std::vectorTextParagraph text, + const std::vectorunsigned tableCellTextEnds, + const char *const encoding, + ParagraphToCellMap_t paraToCellMap, + ParagraphTexts_t paraTexts +) +{ + assert(paraToCellMap.empty()); + assert(paraTexts.empty()); + + paraToCellMap.reserve(tableCellTextEnds.size()); + paraTexts.reserve(tableCellTextEnds.size()); + + unsigned firstPara = 0; + unsigned offset = 1; + for (unsigned para = 0; para != text.size(); ++para) + { +paraTexts.push_back(SpanTexts_t()); +paraTexts.back().reserve(text[para].spans.size()); + +for (unsigned i_spans = 0; i_spans != text[para].spans.size(); ++i_spans) +{ + librevenge::RVNGString textString; + appendCharacters(textString, text[para].spans[i_spans].chars, encoding); + offset += textString.len(); + // TODO: why do we not drop these during parse already? + if ((i_spans == text[para].spans.size() - 1) (textString == \r)) +continue; + paraTexts.back().push_back(textString); +} + +assert(paraTexts.back().size() = text[para].spans.size()); + +if ((paraToCellMap.size() tableCellTextEnds.size())) +{ + if (offset tableCellTextEnds[paraToCellMap.size()]) + { +MSPUB_DEBUG_MSG((text of cell %u ends in the middle of a paragraph!\n, unsigned(paraToCellMap.size(; + } + + paraToCellMap.push_back(std::make_pair(firstPara, para)); + firstPara = para + 1; +} + } + + assert(paraTexts.size() == text.size()); + assert(paraToCellMap.size() = tableCellTextEnds.size()); +} + } // anonymous namespace void MSPUBCollector::addEOTFont(const librevenge::RVNGString name, const librevenge::RVNGBinaryData data) @@ -949,12 +1006,14 @@ boost::functionvoid(void) MSPUBCollector::paintShape(const ShapeInfo info, co std::vectorunsigned tableCellTextEnds; if (bool(info.m_tableCellTextEnds)) tableCellTextEnds = get(info.m_tableCellTextEnds); + TableLayout tableLayout(boost::extents[get(info.m_tableInfo).m_numRows][get(info.m_tableInfo).m_numColumns]); createTableLayout(get(info.m_tableInfo).m_cells, tableLayout); - unsigned cell = 0; - unsigned para = 0; - unsigned offset = 1; + ParagraphToCellMap_t paraToCellMap; + ParagraphTexts_t paraTexts; + mapTableTextToCells(text, tableCellTextEnds, getCalculatedEncoding(), paraToCellMap, paraTexts); + for (unsigned row = 0; row != tableLayout.shape()[0]; ++row) { m_painter-openTableRow(librevenge::RVNGPropertyList()); @@ -978,38 +1037,26 @@ boost::functionvoid(void) MSPUBCollector::paintShape(const ShapeInfo info, co m_painter-openTableCell(cellProps); -if (cell tableCellTextEnds.size()) +if (tableLayout[row][col].m_cell paraToCellMap.size()) { - const unsigned cellEnd = tableCellTextEnds[cell]; - while ((para text.size()) (offset cellEnd)) + const std::pairunsigned, unsigned cellParas = paraToCellMap[tableLayout[row][col].m_cell]; + for (unsigned para = cellParas.first; para = cellParas.second; ++para) { librevenge::RVNGPropertyList paraProps = getParaStyleProps(text[para].style, text[para].style.m_defaultCharStyleIndex); m_painter-openParagraph(paraProps); -for (unsigned i_spans = 0; (i_spans text[para].spans.size()) (offset cellEnd); ++i_spans) + +for (unsigned i_spans = 0;
[Libreoffice-commits] libmspub.git: 2 commits - src/lib
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 dtar...@redhat.com 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::vectorunsigned ends) +void MSPUBCollector::setTableCellTextEnds( + const unsigned textId, const std::vectorunsigned ends) { - m_tableCellTextEndsVector.push_back(ends); + m_tableCellTextEndsByTextId[textId] = ends; } void MSPUBCollector::useEncodingHeuristic() @@ -1003,9 +1001,8 @@ boost::functionvoid(void) MSPUBCollector::paintShape(const ShapeInfo info, co { m_painter-startTableObject(props); - std::vectorunsigned tableCellTextEnds; - if (bool(info.m_tableCellTextEnds)) -tableCellTextEnds = get(info.m_tableCellTextEnds); + const std::mapunsigned, std::vectorunsigned ::const_iterator it = m_tableCellTextEndsByTextId.find(get(info.m_textId)); + const std::vectorunsigned tableCellTextEnds = (it != m_tableCellTextEndsByTextId.end()) ? it-second : std::vectorunsigned(); 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::vectorunsigned ends); + void setTableCellTextEnds(unsigned textId, const std::vectorunsigned ends); void setTextStringOffset(unsigned textId, unsigned offset); bool go(); @@ -165,7 +165,7 @@ private: std::setunsigned m_masterPages; std::setunsigned m_shapesWithCoordinatesRotated90; std::mapunsigned, unsigned m_masterPagesByPageSeqNum; - std::vectorstd::vectorunsigned m_tableCellTextEndsVector; + std::mapunsigned, std::vectorunsigned m_tableCellTextEndsByTextId; std::mapunsigned, unsigned m_stringOffsetsByTextId; mutable std::vectorbool m_calculationValuesSeen; std::vectorunsigned 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::vectorunsigned textLengths; std::vectorunsigned textIDs; std::vectorunsigned textOffsets; + std::mapunsigned, std::vectorunsigned tableCellTextEnds; unsigned textOffsetAccum = 0; std::vectorTextSpanReference spans; std::vectorTextParagraphReference 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::vectorunsigned 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::mapunsigned, std::vectorunsigned ::const_iterator it = tableCellTextEnds.find(j); + if (it != tableCellTextEnds.end()) +
[Libreoffice-commits] libmspub.git: 2 commits - src/lib
src/lib/MSPUBCollector.cpp | 160 - src/lib/MSPUBParser.cpp|7 + 2 files changed, 124 insertions(+), 43 deletions(-) New commits: commit 82f18199d17bb4da46b2728f7dfc477eac984bc2 Author: David Tardon dtar...@redhat.com Date: Sun Dec 28 14:05:49 2014 +0100 BIPU handling of tables Change-Id: I99b127f651c20d7024a3f7db881b386424f334d0 diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp index 53ef937..04f5b6c 100644 --- a/src/lib/MSPUBCollector.cpp +++ b/src/lib/MSPUBCollector.cpp @@ -150,6 +150,8 @@ 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, @@ -482,6 +484,7 @@ boost::functionvoid(void) MSPUBCollector::paintShape(const ShapeInfo info, co bool hasFill = fill != none; boost::optionalstd::vectorTextParagraph maybeText = getShapeText(info); bool hasText = bool(maybeText); + const bool isTable = bool(info.m_tableInfo); bool makeLayer = hasBorderArt || (hasStroke hasFill) || (hasStroke hasText) || (hasFill hasText); if (makeLayer) @@ -863,57 +866,128 @@ boost::functionvoid(void) MSPUBCollector::paintShape(const ShapeInfo info, co { props.insert(librevenge:rotate, textRotation * 180 / M_PI); } -Margins margins = info.m_margins.get_value_or(Margins()); -props.insert(fo:padding-left, (double)margins.m_left / EMUS_IN_INCH); -props.insert(fo:padding-top, (double)margins.m_top / EMUS_IN_INCH); -props.insert(fo:padding-right, (double)margins.m_right / EMUS_IN_INCH); -props.insert(fo:padding-bottom, (double)margins.m_bottom / EMUS_IN_INCH); -if (bool(info.m_verticalAlign)) + +if (isTable) { - switch (info.m_verticalAlign.get()) + m_painter-startTableObject(props); + + std::vectorunsigned tableCellTextEnds; + if (bool(info.m_tableCellTextEnds)) +tableCellTextEnds = get(info.m_tableCellTextEnds); + unsigned row = 0; + unsigned column = 0; + unsigned para = 0; + unsigned offset = 1; + for (unsigned cell = 0; cell != get(info.m_tableInfo).m_numColumns * get(info.m_tableInfo).m_numRows; ++cell) { - default: - case TOP: -props.insert(draw:textarea-vertical-align, top); -break; - case MIDDLE: -props.insert(draw:textarea-vertical-align, middle); -break; - case BOTTOM: -props.insert(draw:textarea-vertical-align, bottom); -break; +assert(row get(info.m_tableInfo).m_numRows); +assert(column get(info.m_tableInfo).m_numColumns); + +if (column == 0) + m_painter-openTableRow(librevenge::RVNGPropertyList()); + +librevenge::RVNGPropertyList cellProps; +cellProps.insert(librevenge:column, int(column)); +cellProps.insert(librevenge:row, int(row)); +m_painter-openTableCell(cellProps); + +if (cell tableCellTextEnds.size()) +{ + const unsigned cellEnd = tableCellTextEnds[cell]; + while ((para text.size()) (offset cellEnd)) + { +librevenge::RVNGPropertyList paraProps = getParaStyleProps(text[para].style, text[para].style.m_defaultCharStyleIndex); +m_painter-openParagraph(paraProps); +for (unsigned i_spans = 0; (i_spans text[para].spans.size()) (offset cellEnd); ++i_spans) +{ + librevenge::RVNGString textString; + appendCharacters(textString, text[para].spans[i_spans].chars, + getCalculatedEncoding()); + offset += textString.len(); + // TODO: why do we not drop these during parse already? + if ((i_spans == text[para].spans.size() - 1) (textString == \r)) +continue; + librevenge::RVNGPropertyList charProps = getCharStyleProps(text[para].spans[i_spans].style, text[para].style.m_defaultCharStyleIndex); + m_painter-openSpan(charProps); + separateSpacesAndInsertText(m_painter, textString); + m_painter-closeSpan(); +} + +if (offset cellEnd) +{ + MSPUB_DEBUG_MSG((cell text ends in the middle of a span!\n)); +} +m_painter-closeParagraph(); +++para; + } +} + +m_painter-closeTableCell(); +++column; +if (column == get(info.m_tableInfo).m_numColumns) +{ + m_painter-closeTableRow(); + ++row; + column = 0; +} } + + m_painter-endTableObject(); } -if (info.m_numColumns) -{ - unsigned ncols =
[Libreoffice-commits] libmspub.git: 2 commits - src/lib
src/lib/MSPUBParser.cpp |2 +- 1 file changed, 1 insertion(+), 1 deletion(-) New commits: commit 0ab2f4869b5d5f43a3793ae7e556bd5825609552 Author: David Tardon dtar...@redhat.com Date: Tue Nov 25 15:27:51 2014 +0100 do not dereference past-the-end iterator Change-Id: I93b300e79163c9fb6a6f32f937c75e6265f1c5b7 diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp index 2797845..ee30d91 100644 --- a/src/lib/MSPUBParser.cpp +++ b/src/lib/MSPUBParser.cpp @@ -967,13 +967,13 @@ bool MSPUBParser::parseQuill(librevenge::RVNGInputStream *input) unsigned bytesRead = 0; std::vectorTextSpanReference::iterator currentTextSpan = spans.begin(); std::vectorTextParagraphReference::iterator currentTextPara = paras.begin(); -for (unsigned j = 0; j textIDs.size() j textLengths.size() currentTextPara != paras.end(); ++j) +for (unsigned j = 0; j textIDs.size() j textLengths.size(); ++j) { MSPUB_DEBUG_MSG((Parsing a text block.\n)); std::vectorTextParagraph readParas; std::vectorTextSpan readSpans; std::vectorunsigned char text; - for (unsigned k = 0; k textLengths[j] currentTextSpan != spans.end(); ++k) + for (unsigned k = 0; k textLengths[j] currentTextPara != paras.end() currentTextSpan != spans.end(); ++k) { text.push_back(readU8(input)); text.push_back(readU8(input)); commit b33edc1675cec963340466627973fba070d2747d Author: David Tardon dtar...@redhat.com Date: Tue Nov 25 15:22:30 2014 +0100 do not dereference past-the-end iterator Change-Id: Icef6e8a324f85c51c27dd03a03ca1c37e4b01bc1 diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp index 091f2b5..2797845 100644 --- a/src/lib/MSPUBParser.cpp +++ b/src/lib/MSPUBParser.cpp @@ -967,13 +967,13 @@ bool MSPUBParser::parseQuill(librevenge::RVNGInputStream *input) unsigned bytesRead = 0; std::vectorTextSpanReference::iterator currentTextSpan = spans.begin(); std::vectorTextParagraphReference::iterator currentTextPara = paras.begin(); -for (unsigned j = 0; j textIDs.size() j textLengths.size(); ++j) +for (unsigned j = 0; j textIDs.size() j textLengths.size() currentTextPara != paras.end(); ++j) { MSPUB_DEBUG_MSG((Parsing a text block.\n)); std::vectorTextParagraph readParas; std::vectorTextSpan readSpans; std::vectorunsigned char text; - for (unsigned k = 0; k textLengths[j]; ++k) + for (unsigned k = 0; k textLengths[j] currentTextSpan != spans.end(); ++k) { text.push_back(readU8(input)); text.push_back(readU8(input)); ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] libmspub.git: 2 commits - src/lib
src/lib/MSPUBCollector.cpp |2 - src/lib/MSPUBParser.cpp| 10 +++--- src/lib/MSPUBParser2k.cpp | 74 ++--- src/lib/PolygonUtils.cpp |4 +- 4 files changed, 46 insertions(+), 44 deletions(-) New commits: commit 4a37910aafea0a69be1377045239244d1ce0f7e0 Author: Fridrich Å trba fridrich.st...@bluewin.ch Date: Wed Nov 20 16:56:01 2013 +0100 Astyle Change-Id: Iefe93634d0573d57a95c1c0b96848db2f4ec2b8c diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp index c3bf61d..d6cc2c7 100644 --- a/src/lib/MSPUBParser.cpp +++ b/src/lib/MSPUBParser.cpp @@ -1618,16 +1618,16 @@ void libmspub::MSPUBParser::parseEscherShape(librevenge::RVNGInputStream *input, m_collector-addShapeLine(*shapeSeqNum, topExists ? Line(ColorReference(*ptr_topColor), ptr_topWidth ? *ptr_topWidth : 9525, true) : - Line(ColorReference(0), 0, false)); +Line(ColorReference(0), 0, false)); m_collector-addShapeLine(*shapeSeqNum, rightExists ? Line(ColorReference(*ptr_rightColor), ptr_rightWidth ? *ptr_rightWidth : 9525, true) : - Line(ColorReference(0), 0, false)); +Line(ColorReference(0), 0, false)); m_collector-addShapeLine(*shapeSeqNum, bottomExists ? Line(ColorReference(*ptr_bottomColor), ptr_bottomWidth ? *ptr_bottomWidth : 9525, true) : - Line(ColorReference(0), 0, false)); +Line(ColorReference(0), 0, false)); m_collector-addShapeLine(*shapeSeqNum, leftExists ? Line(ColorReference(*ptr_leftColor), ptr_leftWidth ? *ptr_leftWidth : 9525, true) : - Line(ColorReference(0), 0, false)); +Line(ColorReference(0), 0, false)); // Amazing feat of Microsoft engineering: // The detailed interaction of four flags describes ONE true/false property! @@ -1636,7 +1636,7 @@ void libmspub::MSPUBParser::parseEscherShape(librevenge::RVNGInputStream *input, (*ptr_leftFlags FLAG_USE_LEFT_INSET_PEN) (!(*ptr_leftFlags FLAG_USE_LEFT_INSET_PEN_OK) || (*ptr_leftFlags FLAG_LEFT_INSET_PEN_OK)) (*ptr_leftFlags FLAG_LEFT_INSET_PEN)) -{ + { m_collector-setShapeBorderPosition(*shapeSeqNum, INSIDE_SHAPE); } else diff --git a/src/lib/MSPUBParser2k.cpp b/src/lib/MSPUBParser2k.cpp index 90a2780..974a310 100644 --- a/src/lib/MSPUBParser2k.cpp +++ b/src/lib/MSPUBParser2k.cpp @@ -240,10 +240,10 @@ libmspub::ShapeType libmspub::MSPUBParser2k::getShapeType(unsigned char shapeSpe { case 0x1: return RIGHT_TRIANGLE; -/* -case 0x2: - return GENERAL_TRIANGLE; -*/ + /* + case 0x2: +return GENERAL_TRIANGLE; + */ case 0x3: return UP_ARROW; case 0x4: @@ -254,10 +254,10 @@ libmspub::ShapeType libmspub::MSPUBParser2k::getShapeType(unsigned char shapeSpe return ISOCELES_TRIANGLE; case 0x7: return PARALLELOGRAM; -/* -case 0x8: - return TILTED_TRAPEZOID; -*/ + /* + case 0x8: +return TILTED_TRAPEZOID; + */ case 0x9: return UP_DOWN_ARROW; case 0xA: @@ -274,41 +274,41 @@ libmspub::ShapeType libmspub::MSPUBParser2k::getShapeType(unsigned char shapeSpe return BENT_ARROW; case 0x10: return SEAL_24; -/* -case 0x11: - return PIE; -*/ + /* + case 0x11: +return PIE; + */ case 0x12: return PENTAGON; case 0x13: return HOME_PLATE; -/* -case 0x14: - return NOTCHED_TRIANGLE; -*/ + /* + case 0x14: +return NOTCHED_TRIANGLE; + */ case 0x15: return U_TURN_ARROW; case 0x16: return IRREGULAR_SEAL_1; -/* -case 0x17: - return CHORD; -*/ + /* + case 0x17: +return CHORD; + */ case 0x18: return HEXAGON; -/* -case 0x19: - return NOTCHED_RECTANGLE; -*/ -/* -case 0x1A: - return W_SHAPE; //This is a bizarre shape; the number of vertices depends on one of the adjust values. - //We need to refactor our escher shape drawing routines before we can handle it. -*/ -/* -case 0x1B: - return ROUND_RECT_CALLOUT_2K; //This is not quite the same as the round rect. found in 2k2 and above. -*/ + /* + case 0x19: +return NOTCHED_RECTANGLE; + */ + /* + case 0x1A: +return W_SHAPE; //This is a bizarre shape; the number of vertices depends on
[Libreoffice-commits] libmspub.git: 2 commits - src/lib
src/lib/MSPUBCollector.cpp|6 +++--- src/lib/MSPUBSVGGenerator.cpp | 35 +++ 2 files changed, 26 insertions(+), 15 deletions(-) New commits: commit b4c7fe03433a0db5a625e76fa7fa81e4a41f85c6 Author: Franz Schmid fr...@linux-hp-i7.site Date: Fri Apr 19 20:49:01 2013 +0200 First Line left indent is signed not unsigned. diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp index 4af4969..a8d55ca 100644 --- a/src/lib/MSPUBCollector.cpp +++ b/src/lib/MSPUBCollector.cpp @@ -1167,8 +1167,8 @@ WPXPropertyList libmspub::MSPUBCollector::getParaStyleProps(const ParagraphStyle defaultStyle.m_spaceAfterEmu.get_value_or(0)); unsigned spaceBeforeEmu = style.m_spaceBeforeEmu.get_value_or( defaultStyle.m_spaceBeforeEmu.get_value_or(0)); - unsigned firstLineIndentEmu = style.m_firstLineIndentEmu.get_value_or( - defaultStyle.m_firstLineIndentEmu.get_value_or(0)); + int firstLineIndentEmu = style.m_firstLineIndentEmu.get_value_or( + defaultStyle.m_firstLineIndentEmu.get_value_or(0)); unsigned leftIndentEmu = style.m_leftIndentEmu.get_value_or( defaultStyle.m_leftIndentEmu.get_value_or(0)); unsigned rightIndentEmu = style.m_rightIndentEmu.get_value_or( commit 826cb95f46f0853bfaec885ca2b9f8b88f036771 Author: Franz Schmid fr...@linux-hp-i7.site Date: Wed Apr 17 22:48:01 2013 +0200 Fixed crash when converting files with dashed lines to svg. diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp index 895b736..4af4969 100644 --- a/src/lib/MSPUBCollector.cpp +++ b/src/lib/MSPUBCollector.cpp @@ -743,7 +743,7 @@ boost::functionvoid(void) libmspub::MSPUBCollector::paintShape(const ShapeInfo graphicsProps.insert(svg:stroke-linecap, round); break; case RECT_DOT: - graphicsProps.insert(svg:stroke-linecap, rect); + graphicsProps.insert(svg:stroke-linecap, butt); break; default: break; diff --git a/src/lib/MSPUBSVGGenerator.cpp b/src/lib/MSPUBSVGGenerator.cpp index 7546230..4b5482f 100644 --- a/src/lib/MSPUBSVGGenerator.cpp +++ b/src/lib/MSPUBSVGGenerator.cpp @@ -546,9 +546,10 @@ void libmspub::MSPUBSVGGenerator::writeStyle(bool /* isClosed */) { m_outputSink style=\; + double width = 1.0 / 72.0; if (m_style[svg:stroke-width]) { -double width = m_style[svg:stroke-width]-getDouble(); +width = m_style[svg:stroke-width]-getDouble(); if (width == 0.0 m_style[draw:stroke] m_style[draw:stroke]-getStr() != none) width = 0.2 / 72.0; // reasonable hairline m_outputSink stroke-width: doubleToString(72*width) ; ; @@ -562,29 +563,39 @@ void libmspub::MSPUBSVGGenerator::writeStyle(bool /* isClosed */) } if (m_style[draw:stroke] m_style[draw:stroke]-getStr() == solid) -m_outputSink stroke-dasharray: solid; ; - else if (m_style[draw:stroke] m_style[draw:stroke]-getStr() == dash) +m_outputSink stroke-dasharray: none; ; + if (m_style[draw:stroke] m_style[draw:stroke]-getStr() == dash) { -int dots1 = m_style[draw:dots1]-getInt(); -int dots2 = m_style[draw:dots2]-getInt(); -double dots1len = m_style[draw:dots1-length]-getDouble(); -double dots2len = m_style[draw:dots2-length]-getDouble(); -double gap = m_style[draw:distance]-getDouble(); +int dots1 = 0; +if (m_style[draw:dots1]) + dots1 = m_style[draw:dots1]-getInt(); +int dots2 = 0; +if (m_style[draw:dots2]) + dots2 = m_style[draw:dots2]-getInt(); +double dots1len = width * 72.0; +double dots2len = width * 72.0; +double gap = width * 72.0; +if (m_style[draw:dots1-length]) + dots1len = m_style[draw:dots1-length]-getDouble() * 72.0; +if (m_style[draw:dots2-length]) + dots2len = m_style[draw:dots2-length]-getDouble() * 72.0; +if (m_style[draw:distance]) + gap = m_style[draw:distance]-getDouble() * 72.0; m_outputSink stroke-dasharray: ; for (int i = 0; i dots1; i++) { if (i) m_outputSink , ; - m_outputSink (int)dots1len; + m_outputSink dots1len; m_outputSink , ; - m_outputSink (int)gap; + m_outputSink gap; } for (int j = 0; j dots2; j++) { m_outputSink , ; - m_outputSink (int)dots2len; + m_outputSink dots2len; m_outputSink , ; - m_outputSink (int)gap; + m_outputSink gap; } m_outputSink ; ; } ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] libmspub.git: 2 commits - src/lib
src/lib/MSPUBCollector.cpp | 53 +++-- src/lib/MSPUBCollector.h |2 - src/lib/MSPUBParser.cpp| 15 +--- src/lib/MSPUBParser2k.cpp |2 - src/lib/MSPUBParser97.cpp |2 - src/lib/PolygonUtils.cpp | 14 +-- src/lib/ShapeInfo.h|7 ++--- 7 files changed, 43 insertions(+), 52 deletions(-) New commits: commit 45093bd820c2e7863aebed9b106488021a641061 Author: Fridrich Å trba fridrich.st...@bluewin.ch Date: Tue Apr 16 09:25:20 2013 +0200 *.is_initialized() - status diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp index 36f51ca..895b736 100644 --- a/src/lib/MSPUBCollector.cpp +++ b/src/lib/MSPUBCollector.cpp @@ -333,7 +333,7 @@ std::vectorint libmspub::MSPUBCollector::getShapeAdjustValues(const ShapeInfo boost::optionalstd::vectorlibmspub::TextParagraph libmspub::MSPUBCollector::getShapeText(const ShapeInfo info) const { - if (info.m_textId.is_initialized()) + if (!!info.m_textId) { unsigned stringId = info.m_textId.get(); const std::vectorTextParagraph *ptr_str = getIfExists_const(m_textStringsById, stringId); @@ -350,11 +350,11 @@ void libmspub::MSPUBCollector::setupShapeStructures(ShapeGroupElement elt) ShapeInfo *ptr_info = getIfExists(m_shapeInfosBySeqNum, elt.getSeqNum()); if (ptr_info) { -if (ptr_info-m_imgIndex.is_initialized()) +if (!!ptr_info-m_imgIndex) { unsigned index = ptr_info-m_imgIndex.get(); int rot = 0; - if (ptr_info-m_innerRotation.is_initialized()) + if (!!ptr_info-m_innerRotation) rot = ptr_info-m_innerRotation.get(); if (index - 1 m_images.size()) { @@ -390,7 +390,7 @@ boost::functionvoid(void) libmspub::MSPUBCollector::paintShape(const ShapeInfo bool hasStroke = false; bool hasBorderArt = false; boost::optionalunsigned maybeBorderImg = info.m_borderImgIndex; - if (maybeBorderImg.is_initialized() !info.m_lines.empty()) + if (!!maybeBorderImg !info.m_lines.empty()) { hasStroke = true; hasBorderArt = true; @@ -409,7 +409,7 @@ boost::functionvoid(void) libmspub::MSPUBCollector::paintShape(const ShapeInfo WPXString fill = graphicsProps[draw:fill] ? graphicsProps[draw:fill]-getStr() : none; bool hasFill = fill != none; boost::optionalstd::vectorTextParagraph maybeText = getShapeText(info); - bool hasText = maybeText.is_initialized(); + bool hasText = !!maybeText; bool makeLayer = hasBorderArt || (hasStroke hasFill) || (hasStroke hasText) || (hasFill hasText); if (makeLayer) @@ -432,7 +432,7 @@ boost::functionvoid(void) libmspub::MSPUBCollector::paintShape(const ShapeInfo BorderPosition borderPosition = hasBorderArt ? INSIDE_SHAPE : info.m_borderPosition.get_value_or(HALF_INSIDE_SHAPE); ShapeType type; - if (info.m_cropType.is_initialized()) + if (!!info.m_cropType) { type = info.m_cropType.get(); } @@ -460,7 +460,7 @@ boost::functionvoid(void) libmspub::MSPUBCollector::paintShape(const ShapeInfo width -= 2 * borderImgWidth; } } -if (info.m_pictureRecolor.is_initialized()) +if (!!info.m_pictureRecolor) { Color obc = info.m_pictureRecolor.get().getFinalColor(m_paletteColors); graphicsProps.insert(draw:color-mode, greyscale); @@ -472,7 +472,7 @@ boost::functionvoid(void) libmspub::MSPUBCollector::paintShape(const ShapeInfo static_castdouble(obc.g) / 255.0, WPX_PERCENT); } bool shadowPropsInserted = false; -if (info.m_shadow.is_initialized()) +if (!!info.m_shadow) { const Shadow s = info.m_shadow.get(); if (!needsEmulation(s)) @@ -496,7 +496,7 @@ boost::functionvoid(void) libmspub::MSPUBCollector::paintShape(const ShapeInfo writeCustomShape(type, graphicsProps, m_painter, x, y, height, width, true, foldedTransform, std::vectorLine(), boost::bind(libmspub::MSPUBCollector::getCalculationValue, this, info, _1, false, adjustValues), m_paletteColors, info.getCustomShape()); -if (info.m_pictureRecolor.is_initialized()) +if (!!info.m_pictureRecolor) { graphicsProps.remove(draw:color-mode); graphicsProps.remove(draw:red); @@ -581,7 +581,7 @@ boost::functionvoid(void) libmspub::MSPUBCollector::paintShape(const ShapeInfo m_painter-drawRectangle(leftRectProps); std::vectorunsigned::const_iterator iOffset = ba.m_offsets.begin(); boost::optionalColor oneBitColor; - if (info.m_lineBackColor.is_initialized()) + if (!!info.m_lineBackColor) { oneBitColor = info.m_lineBackColor.get().getFinalColor(m_paletteColors); } @@ -732,7 +732,7 @@ boost::functionvoid(void) libmspub::MSPUBCollector::paintShape(const ShapeInfo height = strokeCoord.getHeightIn(); width = strokeCoord.getWidthIn();
[Libreoffice-commits] libmspub.git: 2 commits - src/lib
src/lib/Fill.cpp | 28 +--- src/lib/Fill.h | 13 - src/lib/FillType.h |8 +++- src/lib/MSPUBCollector.cpp |8 ++-- src/lib/MSPUBParser.cpp| 15 +-- src/lib/ShapeInfo.h|3 ++- 6 files changed, 61 insertions(+), 14 deletions(-) New commits: commit c51d3825ee97cd563a4791f2b1b43e40c5272a7f Author: Fridrich Å trba fridrich.st...@bluewin.ch Date: Thu Apr 4 15:05:16 2013 +0200 Astyle stuff (astyle -b -k3 -y -n -s2 -r \*.cpp \*.h) diff --git a/src/lib/Fill.cpp b/src/lib/Fill.cpp index 66d55de..aeaeb37 100644 --- a/src/lib/Fill.cpp +++ b/src/lib/Fill.cpp @@ -54,11 +54,11 @@ WPXPropertyListVector ImgFill::getProperties(WPXPropertyList *out) const out-insert(style:repeat, stretch); } if (m_rotation != 0) - { - WPXString sValue; - sValue.sprintf(%d, m_rotation); - out-insert(libwpg:rotate, sValue); - } +{ + WPXString sValue; + sValue.sprintf(%d, m_rotation); + out-insert(libwpg:rotate, sValue); +} } return WPXPropertyListVector(); } @@ -133,19 +133,19 @@ WPXPropertyListVector GradientFill::getProperties(WPXPropertyList *out) const out-insert(draw:angle, -m_angle); // draw:angle is clockwise in odf format switch (m_type) { - case 4: - case 7: - out-insert(libmspub:shade, normal); - break; - case 5: - out-insert(libmspub:shade, center); - break; - case 6: - out-insert(libmspub:shade, shape); - break; - default: - out-insert(libmspub:shade, normal); - break; + case 4: + case 7: +out-insert(libmspub:shade, normal); +break; + case 5: +out-insert(libmspub:shade, center); +break; + case 6: +out-insert(libmspub:shade, shape); +break; + default: +out-insert(libmspub:shade, normal); +break; } for (unsigned i = 0; i m_stops.size(); ++i) { diff --git a/src/lib/FillType.h b/src/lib/FillType.h index 7b1f4cb..8978ebd 100644 --- a/src/lib/FillType.h +++ b/src/lib/FillType.h @@ -34,10 +34,10 @@ namespace libmspub enum FillType { SOLID, - GRADIENT = 0x07, // msofillShadeScale Similar to msofillShade, but the fillAngle - // is additionally scaled by the aspect ratio of - // the shape. If shape is square, it is the - // same as msofillShade + GRADIENT = 0x07, // msofillShadeScale Similar to msofillShade, but the fillAngle + // is additionally scaled by the aspect ratio of + // the shape. If shape is square, it is the + // same as msofillShade GRADIENTCENTER = 0x06, // msofillShadeShape Shade from shape outline to end point GRADIENTSHAPE = 0x05, // msofillShadeCenter Shade from bounding rectangle to end point GRADIENTNORMAL = 0x04, // msofillShade Shade from start to end points diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp index bbe229a..82b7cca 100644 --- a/src/lib/MSPUBCollector.cpp +++ b/src/lib/MSPUBCollector.cpp @@ -348,9 +348,9 @@ void libmspub::MSPUBCollector::setupShapeStructures(ShapeGroupElement elt) if (ptr_info-m_imgIndex.is_initialized()) { unsigned index = ptr_info-m_imgIndex.get(); - int rot = 0; - if (ptr_info-m_innerRotation.is_initialized()) - rot = ptr_info-m_innerRotation.get(); + int rot = 0; + if (ptr_info-m_innerRotation.is_initialized()) +rot = ptr_info-m_innerRotation.get(); if (index - 1 m_images.size()) { ptr_info-m_fill = boost::shared_ptrconst Fill(new ImgFill(index, this, false, rot)); @@ -424,7 +424,7 @@ boost::functionvoid(void) libmspub::MSPUBCollector::paintShape(const ShapeInfo { type = info.m_type.get_value_or(RECTANGLE); } - + if (hasFill) { double x, y, height, width; diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp index cdbc155..584c227 100644 --- a/src/lib/MSPUBParser.cpp +++ b/src/lib/MSPUBParser.cpp @@ -1894,13 +1894,13 @@ boost::shared_ptrlibmspub::Fill libmspub::MSPUBParser::getNewFill(const std::m case TEXTURE: case BITMAP: { - // in the case the shape is rotated we must rotate the image too +// in the case the shape is rotated we must rotate the image too int rotation = 0; const int *ptr_rotation = (const int *)getIfExists_const(foptProperties, FIELDID_ROTATION); if (ptr_rotation) { - rotation = (int)doubleModulo(toFixedPoint(*ptr_rotation), 360); - MSPUB_DEBUG_MSG((Rotation value %d\n, rotation)); + rotation = (int)doubleModulo(toFixedPoint(*ptr_rotation), 360); + MSPUB_DEBUG_MSG((Rotation value %d\n, rotation)); } const unsigned *ptr_bgPxId = getIfExists_const(foptProperties,