libvisio: upgrade to 0.1.8

Generated with:
./autogen.sh
./configure
make dist-xz

Change-Id: I6ff112ab2669d8ca7903f685486b5cd0f0348fd2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/175442
Tested-by: Jenkins
Reviewed-by: Bartosz Kosiorek <gang65@poczta.onet.pl>
(cherry picked from commit 0ffb4c7391)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/175434
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
This commit is contained in:
Xisco Fauli 2024-10-22 17:22:09 +02:00 committed by Michael Stahl
parent 04c2823100
commit 0125817662
4 changed files with 2 additions and 216 deletions

View file

@ -607,8 +607,8 @@ TWAIN_DSM_TARBALL := twaindsm_2.4.1.orig.tar.gz
# three static lines
# so that git cherry-pick
# will not run into conflicts
VISIO_SHA256SUM := 8faf8df870cb27b09a787a1959d6c646faa44d0d8ab151883df408b7166bea4c
VISIO_TARBALL := libvisio-0.1.7.tar.xz
VISIO_SHA256SUM := b4098ffbf4dcb9e71213fa0acddbd928f27bed30db2d80234813b15d53d0405b
VISIO_TARBALL := libvisio-0.1.8.tar.xz
# three static lines
# so that git cherry-pick
# will not run into conflicts

View file

@ -15,9 +15,4 @@ $(eval $(call gb_UnpackedTarball_set_patchlevel,libvisio,0))
$(eval $(call gb_UnpackedTarball_update_autoconf_configs,libvisio))
$(eval $(call gb_UnpackedTarball_add_patches,libvisio, \
external/libvisio/ubsan.patch \
external/libvisio/solid-fill-style.patch \
))
# vim: set noet sw=4 ts=4:

View file

@ -1,198 +0,0 @@
--- src/lib/VSDStyles.h
+++ src/lib/VSDStyles.h
@@ -179,14 +177,13 @@ struct VSDFillStyle
ASSIGN_OPTIONAL(style.qsFillMatrix, qsFillMatrix);
if (theme)
{
- if (!!style.qsFillColour && style.qsFillColour.get() >= 0)
- ASSIGN_OPTIONAL(theme->getThemeColour(style.qsFillColour.get()), fgColour);
-
- if (!!style.qsFillColour && style.qsFillColour.get() >= 0)
- ASSIGN_OPTIONAL(theme->getThemeColour(style.qsFillColour.get()), bgColour);
-
- if (!!style.qsShadowColour && style.qsShadowColour.get() >= 0)
- ASSIGN_OPTIONAL(theme->getThemeColour(style.qsShadowColour.get()), shadowFgColour);
+ // Quick Style Colour 100 is special. It is the default,
+ // and it is not saved explicitely in the VSDX file.
+ ASSIGN_OPTIONAL(theme->getThemeColour(style.qsFillColour.value_or(100)), fgColour);
+ ASSIGN_OPTIONAL(theme->getThemeColour(style.qsFillColour.value_or(100)), bgColour);
+ ASSIGN_OPTIONAL(theme->getThemeColour(style.qsShadowColour.value_or(100)), shadowFgColour);
+ if (!!style.qsFillMatrix && style.qsFillMatrix.get() >= 0)
+ ASSIGN_OPTIONAL(theme->getFillStyleColour(style.qsFillMatrix.get()), fgColour);
}
ASSIGN_OPTIONAL(style.fgColour, fgColour);
ASSIGN_OPTIONAL(style.bgColour, bgColour);
--- src/lib/VSDXTheme.cpp
+++ src/lib/VSDXTheme.cpp
@@ -63,7 +63,8 @@ libvisio::VSDXFontScheme::VSDXFontScheme()
libvisio::VSDXTheme::VSDXTheme()
: m_clrScheme(),
- m_fontScheme()
+ m_fontScheme(),
+ m_fillStyleLst(std::vector<boost::optional<libvisio::Colour>>(6))
{
}
@@ -102,6 +103,9 @@ bool libvisio::VSDXTheme::parse(librevenge::RVNGInputStream *input)
case XML_A_FONTSCHEME:
readFontScheme(reader.get());
break;
+ case XML_A_FMTSCHEME:
+ readFmtScheme(reader.get());
+ break;
default:
break;
}
@@ -320,7 +324,7 @@ void libvisio::VSDXTheme::readClrScheme(xmlTextReaderPtr reader)
while ((XML_A_CLRSCHEME != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) && 1 == ret);
}
-void libvisio::VSDXTheme::readThemeColour(xmlTextReaderPtr reader, int idToken, Colour &clr)
+bool libvisio::VSDXTheme::readThemeColour(xmlTextReaderPtr reader, int idToken, Colour &clr)
{
int ret = 1;
int tokenId = XML_TOKEN_INVALID;
@@ -350,7 +354,11 @@ void libvisio::VSDXTheme::readThemeColour(xmlTextReaderPtr reader, int idToken,
while ((idToken != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) && 1 == ret);
if (colour)
+ {
clr = *colour;
+ return true;
+ }
+ return false;
}
void libvisio::VSDXTheme::readVariationClrSchemeLst(xmlTextReaderPtr reader)
@@ -491,4 +499,96 @@ boost::optional<libvisio::Colour> libvisio::VSDXTheme::getThemeColour(unsigned v
return boost::optional<libvisio::Colour>();
}
+void libvisio::VSDXTheme::readFmtScheme(xmlTextReaderPtr reader)
+{
+ VSD_DEBUG_MSG(("VSDXTheme::readFmtScheme\n"));
+ int ret = 1;
+ int tokenId = XML_TOKEN_INVALID;
+ int tokenType = -1;
+ do
+ {
+ ret = xmlTextReaderRead(reader);
+ tokenId = getElementToken(reader);
+ if (XML_TOKEN_INVALID == tokenId)
+ {
+ VSD_DEBUG_MSG(("VSDXTheme::readFmtScheme: unknown token %s\n", xmlTextReaderConstName(reader)));
+ }
+ tokenType = xmlTextReaderNodeType(reader);
+ switch (tokenId)
+ {
+ case XML_A_FILLSTYLELST:
+ {
+ readFillStyleLst(reader);
+ break;
+ }
+ default:
+ // Other style lists not implemented
+ break;
+ }
+ } while ((XML_A_FMTSCHEME != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) && 1 == ret);
+}
+
+void libvisio::VSDXTheme::skipUnimplemented(xmlTextReaderPtr reader, int idToken)
+{
+ int ret = 1;
+ int tokenId = XML_TOKEN_INVALID;
+ int tokenType = -1;
+ do
+ {
+ ret = xmlTextReaderRead(reader);
+ tokenId = getElementToken(reader);
+ if (XML_TOKEN_INVALID == tokenId)
+ {
+ VSD_DEBUG_MSG(("VSDXTheme::skipUnimplemented: unknown token %s\n", xmlTextReaderConstName(reader)));
+ }
+ tokenType = xmlTextReaderNodeType(reader);
+ } while ((idToken != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) && 1 == ret);
+}
+
+void libvisio::VSDXTheme::readFillStyleLst(xmlTextReaderPtr reader)
+{
+ VSD_DEBUG_MSG(("VSDXTheme::readFillStyleLst\n"));
+ int ret = xmlTextReaderRead(reader);
+ int tokenId = getElementToken(reader);
+ if (XML_TOKEN_INVALID == tokenId)
+ {
+ VSD_DEBUG_MSG(("VSDXTheme::readFillStyleLst: unknown token %s\n", xmlTextReaderConstName(reader)));
+ }
+ int tokenType = xmlTextReaderNodeType(reader);
+ int i = 0;
+ while ((XML_A_FILLSTYLELST != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) && 1 == ret)
+ {
+ switch (tokenId)
+ {
+ case XML_A_SOLIDFILL:
+ {
+ Colour colour;
+ if (readThemeColour(reader, tokenId, colour))
+ {
+ m_fillStyleLst[i] = colour;
+ }
+ break;
+ }
+ default:
+ // Skip unimplemented fill type
+ skipUnimplemented(reader, tokenId);
+ break;
+ }
+ ret = xmlTextReaderRead(reader);
+ tokenId = getElementToken(reader);
+ if (XML_TOKEN_INVALID == tokenId)
+ {
+ VSD_DEBUG_MSG(("VSDXTheme::readFillStyleLst: unknown token %s\n", xmlTextReaderConstName(reader)));
+ }
+ tokenType = xmlTextReaderNodeType(reader);
+ }
+}
+
+boost::optional<libvisio::Colour> libvisio::VSDXTheme::getFillStyleColour(unsigned value) const
+{
+ if (value == 0 || value > m_fillStyleLst.size())
+ return boost::optional<libvisio::Colour>();
+ return m_fillStyleLst[value - 1];
+}
+
/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
--- src/lib/VSDXTheme.h
+++ src/lib/VSDXTheme.h
@@ -80,6 +80,7 @@ public:
~VSDXTheme();
bool parse(librevenge::RVNGInputStream *input);
boost::optional<Colour> getThemeColour(unsigned value, unsigned variationIndex = 0) const;
+ boost::optional<Colour> getFillStyleColour(unsigned value) const;
private:
VSDXTheme(const VSDXTheme &);
@@ -89,18 +90,22 @@ private:
boost::optional<Colour> readSysClr(xmlTextReaderPtr reader);
void readClrScheme(xmlTextReaderPtr reader);
- void readThemeColour(xmlTextReaderPtr reader, int idToken, Colour &clr);
+ bool readThemeColour(xmlTextReaderPtr reader, int idToken, Colour &clr);
void readVariationClrSchemeLst(xmlTextReaderPtr reader);
void readVariationClrScheme(xmlTextReaderPtr reader, VSDXVariationClrScheme &varClrSch);
void readFontScheme(xmlTextReaderPtr reader);
void readFont(xmlTextReaderPtr reader, int idToken, VSDXFont &font);
bool readTypeFace(xmlTextReaderPtr reader, librevenge::RVNGString &typeFace);
bool readTypeFace(xmlTextReaderPtr reader, int &script, librevenge::RVNGString &typeFace);
+ void readFmtScheme(xmlTextReaderPtr reader);
+ void readFillStyleLst(xmlTextReaderPtr reader);
int getElementToken(xmlTextReaderPtr reader);
+ void skipUnimplemented(xmlTextReaderPtr reader, int idToken);
VSDXClrScheme m_clrScheme;
VSDXFontScheme m_fontScheme;
+ std::vector<boost::optional<Colour>> m_fillStyleLst;
};
} // namespace libvisio

View file

@ -1,11 +0,0 @@
--- src/lib/VSDContentCollector.cpp
+++ src/lib/VSDContentCollector.cpp
@@ -3220,7 +3220,7 @@
}
if (U_SUCCESS(status) && conv)
{
- const auto *src = (const char *)&characters[0];
+ const auto *src = (const char *)characters.data();
const char *srcLimit = (const char *)src + characters.size();
while (src < srcLimit)
{