[Libreoffice-commits] libmspub.git: 3 commits - src/lib
David Tardon
dtardon at redhat.com
Fri Dec 26 08:39:16 PST 2014
src/lib/EmbeddedFontInfo.h | 4 +-
src/lib/MSPUBCollector.cpp | 61 +++++++++++++++++++++++++--------------------
src/lib/MSPUBCollector.h | 2 -
src/lib/MSPUBParser.cpp | 24 ++++++++++-------
src/lib/MSPUBParser2k.cpp | 2 -
src/lib/MSPUBParser97.cpp | 2 -
src/lib/PolygonUtils.cpp | 6 ++--
src/lib/ShapeInfo.h | 4 +-
8 files changed, 59 insertions(+), 46 deletions(-)
New commits:
commit b99d016d1e43d9ef99c6f3f94a345a189212a117
Author: David Tardon <dtardon at redhat.com>
Date: Fri Dec 26 12:45:57 2014 +0100
simplify this
Change-Id: I6a39f76a0019d057b20a4abb29479754ad622b39
diff --git a/src/lib/EmbeddedFontInfo.h b/src/lib/EmbeddedFontInfo.h
index f74484a..1200e81 100644
--- a/src/lib/EmbeddedFontInfo.h
+++ b/src/lib/EmbeddedFontInfo.h
@@ -18,8 +18,8 @@ struct EmbeddedFontInfo
{
librevenge::RVNGString m_name;
librevenge::RVNGBinaryData m_blob;
- EmbeddedFontInfo(const librevenge::RVNGString &name) :
- m_name(name), m_blob()
+ EmbeddedFontInfo(const librevenge::RVNGString &name, const librevenge::RVNGBinaryData &data) :
+ m_name(name), m_blob(data)
{
}
};
diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp
index 82a86c0..53ef937 100644
--- a/src/lib/MSPUBCollector.cpp
+++ b/src/lib/MSPUBCollector.cpp
@@ -105,10 +105,9 @@ static void separateSpacesAndInsertText(librevenge::RVNGDrawingInterface *iface,
} // anonymous namespace
-librevenge::RVNGBinaryData &MSPUBCollector::addEOTFont(const librevenge::RVNGString &name)
+void MSPUBCollector::addEOTFont(const librevenge::RVNGString &name, const librevenge::RVNGBinaryData &data)
{
- m_embeddedFonts.push_back(EmbeddedFontInfo(name));
- return m_embeddedFonts.back().m_blob;
+ m_embeddedFonts.push_back(EmbeddedFontInfo(name, data));
}
void MSPUBCollector::setShapePictureRecolor(unsigned seqNum,
diff --git a/src/lib/MSPUBCollector.h b/src/lib/MSPUBCollector.h
index d2d18be..b66e317 100644
--- a/src/lib/MSPUBCollector.h
+++ b/src/lib/MSPUBCollector.h
@@ -95,7 +95,7 @@ public:
// Microsoft "Embedded OpenType" ... need to figure out how to convert
// this to a sane format and how to get LibreOffice to understand embedded fonts.
- librevenge::RVNGBinaryData &addEOTFont(const librevenge::RVNGString &name);
+ void addEOTFont(const librevenge::RVNGString &name, const librevenge::RVNGBinaryData &data);
void beginGroup();
bool endGroup();
diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp
index 9473049..f0e8d65 100644
--- a/src/lib/MSPUBParser.cpp
+++ b/src/lib/MSPUBParser.cpp
@@ -497,7 +497,7 @@ bool MSPUBParser::parseFontChunk(
// skip length, we've already read that
// TODO: Why do we not read the data as part of the block info?
input->seek(eotOffset.get() + 4, librevenge::RVNG_SEEK_SET);
- librevenge::RVNGBinaryData &data = m_collector->addEOTFont(name.get());
+ librevenge::RVNGBinaryData data;
unsigned long toRead = eotLength;
while (toRead > 0 && stillReading(input, (unsigned long)-1))
{
@@ -506,6 +506,7 @@ bool MSPUBParser::parseFontChunk(
data.append(buf, howManyRead);
toRead -= howManyRead;
}
+ m_collector->addEOTFont(name.get(), data);
input->seek(subInfo.dataOffset + subInfo.dataLength, librevenge::RVNG_SEEK_SET);
}
}
commit 525d9d714be08629ac8c70bf415f2231c4f910b3
Author: David Tardon <dtardon at redhat.com>
Date: Fri Dec 26 12:41:15 2014 +0100
replace double negation by bool()
Change-Id: Ibd72d22c86e8960dd3553fa1406098c8138dae36
diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp
index fa199af..82a86c0 100644
--- a/src/lib/MSPUBCollector.cpp
+++ b/src/lib/MSPUBCollector.cpp
@@ -407,7 +407,7 @@ std::vector<int> MSPUBCollector::getShapeAdjustValues(const ShapeInfo &info) con
boost::optional<std::vector<TextParagraph> > MSPUBCollector::getShapeText(const ShapeInfo &info) const
{
- if (!!info.m_textId)
+ if (bool(info.m_textId))
{
unsigned stringId = info.m_textId.get();
const std::vector<TextParagraph> *ptr_str = getIfExists_const(m_textStringsById, stringId);
@@ -424,11 +424,11 @@ void MSPUBCollector::setupShapeStructures(ShapeGroupElement &elt)
ShapeInfo *ptr_info = getIfExists(m_shapeInfosBySeqNum, elt.getSeqNum());
if (ptr_info)
{
- if (!!ptr_info->m_imgIndex)
+ if (bool(ptr_info->m_imgIndex))
{
unsigned index = ptr_info->m_imgIndex.get();
int rot = 0;
- if (!!ptr_info->m_innerRotation)
+ if (bool(ptr_info->m_innerRotation))
rot = ptr_info->m_innerRotation.get();
if (index - 1 < m_images.size())
{
@@ -463,7 +463,7 @@ boost::function<void(void)> MSPUBCollector::paintShape(const ShapeInfo &info, co
bool hasStroke = false;
bool hasBorderArt = false;
boost::optional<unsigned> maybeBorderImg = info.m_borderImgIndex;
- if (!!maybeBorderImg && !info.m_lines.empty())
+ if (bool(maybeBorderImg) && !info.m_lines.empty())
{
hasStroke = true;
hasBorderArt = true;
@@ -482,7 +482,7 @@ boost::function<void(void)> MSPUBCollector::paintShape(const ShapeInfo &info, co
librevenge::RVNGString fill = graphicsProps["draw:fill"] ? graphicsProps["draw:fill"]->getStr() : "none";
bool hasFill = fill != "none";
boost::optional<std::vector<TextParagraph> > maybeText = getShapeText(info);
- bool hasText = !!maybeText;
+ bool hasText = bool(maybeText);
bool makeLayer = hasBorderArt ||
(hasStroke && hasFill) || (hasStroke && hasText) || (hasFill && hasText);
if (makeLayer)
@@ -505,7 +505,7 @@ boost::function<void(void)> MSPUBCollector::paintShape(const ShapeInfo &info, co
BorderPosition borderPosition =
hasBorderArt ? INSIDE_SHAPE : info.m_borderPosition.get_value_or(HALF_INSIDE_SHAPE);
ShapeType type;
- if (!!info.m_cropType)
+ if (bool(info.m_cropType))
{
type = info.m_cropType.get();
}
@@ -533,7 +533,7 @@ boost::function<void(void)> MSPUBCollector::paintShape(const ShapeInfo &info, co
width -= 2 * borderImgWidth;
}
}
- if (!!info.m_pictureRecolor)
+ if (bool(info.m_pictureRecolor))
{
Color obc = info.m_pictureRecolor.get().getFinalColor(m_paletteColors);
graphicsProps.insert("draw:color-mode", "greyscale");
@@ -544,10 +544,10 @@ boost::function<void(void)> MSPUBCollector::paintShape(const ShapeInfo &info, co
graphicsProps.insert("draw:green",
static_cast<double>(obc.g) / 255.0, librevenge::RVNG_PERCENT);
}
- if (!!info.m_pictureBrightness)
+ if (bool(info.m_pictureBrightness))
graphicsProps.insert("draw:luminance", static_cast<double>(info.m_pictureBrightness.get() + 32768.0) / 65536.0, librevenge::RVNG_PERCENT);
bool shadowPropsInserted = false;
- if (!!info.m_shadow)
+ if (bool(info.m_shadow))
{
const Shadow &s = info.m_shadow.get();
if (!needsEmulation(s))
@@ -567,14 +567,14 @@ boost::function<void(void)> MSPUBCollector::paintShape(const ShapeInfo &info, co
writeCustomShape(type, graphicsProps, m_painter, x, y, height, width,
true, foldedTransform,
std::vector<Line>(), boost::bind(&MSPUBCollector::getCalculationValue, this, info, _1, false, adjustValues), m_paletteColors, info.getCustomShape());
- if (!!info.m_pictureRecolor)
+ if (bool(info.m_pictureRecolor))
{
graphicsProps.remove("draw:color-mode");
graphicsProps.remove("draw:red");
graphicsProps.remove("draw:blue");
graphicsProps.remove("draw:green");
}
- if (!!info.m_pictureBrightness)
+ if (bool(info.m_pictureBrightness))
graphicsProps.remove("draw:luminance");
if (shadowPropsInserted)
{
@@ -656,7 +656,7 @@ boost::function<void(void)> MSPUBCollector::paintShape(const ShapeInfo &info, co
m_painter->drawRectangle(leftRectProps);
std::vector<unsigned>::const_iterator iOffset = ba.m_offsets.begin();
boost::optional<Color> oneBitColor;
- if (!!info.m_lineBackColor)
+ if (bool(info.m_lineBackColor))
{
oneBitColor = info.m_lineBackColor.get().getFinalColor(m_paletteColors);
}
@@ -808,7 +808,7 @@ boost::function<void(void)> MSPUBCollector::paintShape(const ShapeInfo &info, co
height = strokeCoord.getHeightIn();
width = strokeCoord.getWidthIn();
graphicsProps.insert("draw:fill", "none");
- if (!!info.m_dash && !info.m_dash.get().m_dots.empty())
+ if (bool(info.m_dash) && !info.m_dash.get().m_dots.empty())
{
const Dash &dash = info.m_dash.get();
graphicsProps.insert("draw:stroke", "dash");
@@ -829,7 +829,7 @@ boost::function<void(void)> MSPUBCollector::paintShape(const ShapeInfo &info, co
librevenge::RVNGString dots;
dots.sprintf("draw:dots%d", i + 1);
graphicsProps.insert(dots.cstr(), static_cast<int>(dash.m_dots[i].m_count));
- if (!!dash.m_dots[i].m_length)
+ if (bool(dash.m_dots[i].m_length))
{
librevenge::RVNGString length;
length.sprintf("draw:dots%d-length", i + 1);
@@ -869,7 +869,7 @@ boost::function<void(void)> MSPUBCollector::paintShape(const ShapeInfo &info, co
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 (!!info.m_verticalAlign)
+ if (bool(info.m_verticalAlign))
{
switch (info.m_verticalAlign.get())
{
@@ -925,7 +925,7 @@ boost::function<void(void)> MSPUBCollector::paintShape(const ShapeInfo &info, co
const char *MSPUBCollector::getCalculatedEncoding() const
{
- if (!!m_calculatedEncoding)
+ if (bool(m_calculatedEncoding))
{
return m_calculatedEncoding.get();
}
@@ -996,7 +996,7 @@ void MSPUBCollector::writeImage(double x, double y,
boost::optional<Color> oneBitColor) const
{
librevenge::RVNGPropertyList props;
- if (!!oneBitColor)
+ if (bool(oneBitColor))
{
Color obc = oneBitColor.get();
props.insert("draw:color-mode", "greyscale");
@@ -1217,7 +1217,7 @@ void MSPUBCollector::addFont(std::vector<unsigned char> name)
librevenge::RVNGPropertyList MSPUBCollector::getParaStyleProps(const ParagraphStyle &style, boost::optional<unsigned> defaultParaStyleIndex) const
{
ParagraphStyle _nothing;
- const ParagraphStyle &defaultStyle = !!defaultParaStyleIndex && defaultParaStyleIndex.get() < m_defaultParaStyles.size() ? m_defaultParaStyles[defaultParaStyleIndex.get()] : _nothing;
+ const ParagraphStyle &defaultStyle = bool(defaultParaStyleIndex) && defaultParaStyleIndex.get() < m_defaultParaStyles.size() ? m_defaultParaStyles[defaultParaStyleIndex.get()] : _nothing;
librevenge::RVNGPropertyList ret;
Alignment align = style.m_align.get_value_or(
defaultStyle.m_align.get_value_or(LEFT));
@@ -1318,11 +1318,11 @@ librevenge::RVNGPropertyList MSPUBCollector::getCharStyleProps(const CharacterSt
{
ret.insert("style:text-underline-type", "single");
}
- if (!!style.textSizeInPt)
+ if (bool(style.textSizeInPt))
{
ret.insert("fo:font-size", style.textSizeInPt.get() / POINTS_IN_INCH);
}
- else if (!!defaultCharStyle.textSizeInPt)
+ else if (bool(defaultCharStyle.textSizeInPt))
{
ret.insert("fo:font-size", defaultCharStyle.textSizeInPt.get()
/ POINTS_IN_INCH);
@@ -1339,7 +1339,7 @@ librevenge::RVNGPropertyList MSPUBCollector::getCharStyleProps(const CharacterSt
{
ret.insert("fo:color", getColorString(Color(0, 0, 0))); // default color is black
}
- if (!!style.fontIndex &&
+ if (bool(style.fontIndex) &&
style.fontIndex.get() < m_fonts.size())
{
librevenge::RVNGString str;
@@ -1347,7 +1347,7 @@ librevenge::RVNGPropertyList MSPUBCollector::getCharStyleProps(const CharacterSt
getCalculatedEncoding());
ret.insert("style:font-name", str);
}
- else if (!!defaultCharStyle.fontIndex &&
+ else if (bool(defaultCharStyle.fontIndex) &&
defaultCharStyle.fontIndex.get() < m_fonts.size())
{
librevenge::RVNGString str;
@@ -1437,7 +1437,7 @@ void MSPUBCollector::writePage(unsigned pageSeqNum) const
{
m_painter->startPage(pageProps);
boost::optional<unsigned> masterSeqNum = getMasterPageSeqNum(pageSeqNum);
- bool hasMaster = !!masterSeqNum;
+ bool hasMaster = bool(masterSeqNum);
if (hasMaster)
{
writePageBackground(masterSeqNum.get());
diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp
index 364d5b6..9473049 100644
--- a/src/lib/MSPUBParser.cpp
+++ b/src/lib/MSPUBParser.cpp
@@ -492,7 +492,7 @@ bool MSPUBParser::parseFontChunk(
eotLength = subSubInfo.dataLength;
}
}
- if (!!name && !!eotOffset)
+ if (bool(name) && bool(eotOffset))
{
// skip length, we've already read that
// TODO: Why do we not read the data as part of the block info?
@@ -679,7 +679,7 @@ bool MSPUBParser::parseShape(librevenge::RVNGInputStream *input,
rowcolArrayOffset = info.dataOffset;
}
}
- if (!!cellsSeqNum && !!numRows && !!numCols && !!rowcolArrayOffset)
+ if (bool(cellsSeqNum) && bool(numRows) && bool(numCols) && bool(rowcolArrayOffset))
{
unsigned nr = numRows.get();
unsigned nc = numCols.get();
@@ -1515,7 +1515,7 @@ void MSPUBParser::parseEscherShape(librevenge::RVNGInputStream *input, const Esc
{
maybe_tertiaryFoptValues = extractEscherValues(input, cTertiaryFopt);
}
- if (!!maybe_tertiaryFoptValues)
+ if (bool(maybe_tertiaryFoptValues))
{
const std::map<unsigned short, unsigned> &tertiaryFoptValues =
maybe_tertiaryFoptValues.get();
@@ -1581,7 +1581,7 @@ void MSPUBParser::parseEscherShape(librevenge::RVNGInputStream *input, const Esc
}
else
{
- if (!!maybe_tertiaryFoptValues)
+ if (bool(maybe_tertiaryFoptValues))
{
std::map<unsigned short, unsigned> &tertiaryFoptValues =
maybe_tertiaryFoptValues.get();
@@ -1698,7 +1698,7 @@ void MSPUBParser::parseEscherShape(librevenge::RVNGInputStream *input, const Esc
dotStyle));
}
- if (!!maybe_tertiaryFoptValues)
+ if (bool(maybe_tertiaryFoptValues))
{
std::map<unsigned short, unsigned> &tertiaryFoptValues = maybe_tertiaryFoptValues.get();
unsigned *ptr_numColumns = getIfExists(tertiaryFoptValues, FIELDID_NUM_COLUMNS);
diff --git a/src/lib/MSPUBParser2k.cpp b/src/lib/MSPUBParser2k.cpp
index a206c63..a6ae02b 100644
--- a/src/lib/MSPUBParser2k.cpp
+++ b/src/lib/MSPUBParser2k.cpp
@@ -447,7 +447,7 @@ bool MSPUBParser2k::parseContents(librevenge::RVNGInputStream *input)
bool MSPUBParser2k::parseDocument(librevenge::RVNGInputStream *input)
{
- if (!!m_documentChunkIndex)
+ if (bool(m_documentChunkIndex))
{
input->seek(m_contentChunks[m_documentChunkIndex.get()].offset, librevenge::RVNG_SEEK_SET);
input->seek(0x14, librevenge::RVNG_SEEK_CUR);
diff --git a/src/lib/MSPUBParser97.cpp b/src/lib/MSPUBParser97.cpp
index 3e4adce..29614ba 100644
--- a/src/lib/MSPUBParser97.cpp
+++ b/src/lib/MSPUBParser97.cpp
@@ -50,7 +50,7 @@ bool MSPUBParser97::parse()
bool MSPUBParser97::parseDocument(librevenge::RVNGInputStream *input)
{
- if (!!m_documentChunkIndex)
+ if (bool(m_documentChunkIndex))
{
input->seek(m_contentChunks[m_documentChunkIndex.get()].offset + 0x12, librevenge::RVNG_SEEK_SET);
unsigned short coordinateSystemMark = readU16(input);
diff --git a/src/lib/PolygonUtils.cpp b/src/lib/PolygonUtils.cpp
index b6f40ab..9ef8466 100644
--- a/src/lib/PolygonUtils.cpp
+++ b/src/lib/PolygonUtils.cpp
@@ -6016,7 +6016,7 @@ void writeCustomShape(ShapeType shapeType, librevenge::RVNGPropertyList &graphic
bool modifier = cmd.m_command == ELLIPTICALQUADRANTX ? true : false;
const Vertex &curr = shape->mp_vertices[vertexIndex];
Vector2D curr2D(x + scaleX * getSpecialIfNecessary(calculator, curr.m_x), y + scaleY * getSpecialIfNecessary(calculator, curr.m_y));
- if (!!lastPoint)
+ if (bool(lastPoint))
{
if (!pathBegin)
{
@@ -6338,7 +6338,7 @@ void writeCustomShape(ShapeType shapeType, librevenge::RVNGPropertyList &graphic
//intentionally no break
case ENDSUBPATH:
MSPUB_DEBUG_MSG(("ENDSUBPATH\n"));
- if (closeEverything && !!pathBegin)
+ if (closeEverything && bool(pathBegin))
{
librevenge::RVNGPropertyList end;
end.insert("librevenge:path-action", "Z");
@@ -6359,7 +6359,7 @@ void writeCustomShape(ShapeType shapeType, librevenge::RVNGPropertyList &graphic
}
if (hasUnclosedElements && closeEverything)
{
- if (!!pathBegin)
+ if (bool(pathBegin))
{
librevenge::RVNGPropertyList end;
end.insert("librevenge:path-action", "Z");
diff --git a/src/lib/ShapeInfo.h b/src/lib/ShapeInfo.h
index 4c208ab..d960917 100644
--- a/src/lib/ShapeInfo.h
+++ b/src/lib/ShapeInfo.h
@@ -78,11 +78,11 @@ struct ShapeInfo
}
boost::shared_ptr<const CustomShape> getCustomShape() const
{
- if (!!m_customShape)
+ if (bool(m_customShape))
{
return getFromDynamicCustomShape(m_customShape.get());
}
- if (!!m_cropType)
+ if (bool(m_cropType))
{
return boost::shared_ptr<const CustomShape>(
libmspub::getCustomShape(m_cropType.get()),
commit cc3724d73551b23dc370f865652c14a739e45a00
Author: David Tardon <dtardon at redhat.com>
Date: Fri Dec 26 12:36:13 2014 +0100
handle embedded fonts
Change-Id: Ifeb92312aaadf17284c47c25109737cf7ffb6024
diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp
index 6a22f17..fa199af 100644
--- a/src/lib/MSPUBCollector.cpp
+++ b/src/lib/MSPUBCollector.cpp
@@ -1497,6 +1497,16 @@ bool MSPUBCollector::go()
addBlackToPaletteIfNecessary();
assignShapesToPages();
m_painter->startDocument(librevenge::RVNGPropertyList());
+
+ for (std::list<EmbeddedFontInfo>::const_iterator i = m_embeddedFonts.begin(); i != m_embeddedFonts.end(); ++i)
+ {
+ librevenge::RVNGPropertyList props;
+ props.insert("librevenge:name", i->m_name);
+ props.insert("librevenge:mime-type", "application/vnd.ms-fontobject");
+ props.insert("office:binary-data",i->m_blob);
+ m_painter->defineEmbeddedFont(props);
+ }
+
if (m_pageSeqNumsOrdered.empty())
{
for (std::map<unsigned, PageInfo>::const_iterator i = m_pagesBySeqNum.begin();
diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp
index e7b297c..364d5b6 100644
--- a/src/lib/MSPUBParser.cpp
+++ b/src/lib/MSPUBParser.cpp
@@ -476,6 +476,7 @@ bool MSPUBParser::parseFontChunk(
{
boost::optional<librevenge::RVNGString> name;
boost::optional<unsigned> eotOffset;
+ unsigned eotLength = 0;
input->seek(subInfo.dataOffset + 4, librevenge::RVNG_SEEK_SET);
while (stillReading(input, subInfo.dataOffset + subInfo.dataLength))
{
@@ -483,19 +484,21 @@ bool MSPUBParser::parseFontChunk(
if (subSubInfo.id == EMBEDDED_FONT_NAME)
{
name = librevenge::RVNGString();
- appendCharacters(name.get(), subSubInfo.stringData, "UTF-16");
+ appendCharacters(name.get(), subSubInfo.stringData, "UTF-16LE");
}
else if (subSubInfo.id == EMBEDDED_EOT)
{
eotOffset = subSubInfo.dataOffset;
+ eotLength = subSubInfo.dataLength;
}
}
if (!!name && !!eotOffset)
{
- input->seek(eotOffset.get(), librevenge::RVNG_SEEK_SET);
- MSPUBBlockInfo eotRecord = parseBlock(input, true);
+ // skip length, we've already read that
+ // TODO: Why do we not read the data as part of the block info?
+ input->seek(eotOffset.get() + 4, librevenge::RVNG_SEEK_SET);
librevenge::RVNGBinaryData &data = m_collector->addEOTFont(name.get());
- unsigned long toRead = eotRecord.dataLength;
+ unsigned long toRead = eotLength;
while (toRead > 0 && stillReading(input, (unsigned long)-1))
{
unsigned long howManyRead = 0;
More information about the Libreoffice-commits
mailing list