Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/configure.ac b/configure.ac
- index 018a540..699954a 100644
- --- a/configure.ac
- +++ b/configure.ac
- @@ -7,7 +7,7 @@ AC_PREREQ([2.65])
- # ====================
- m4_define([libvisio_version_major],[0])
- m4_define([libvisio_version_minor],[0])
- -m4_define([libvisio_version_micro],[17])
- +m4_define([libvisio_version_micro],[18])
- m4_define([libvisio_version],[libvisio_version_major.libvisio_version_minor.libvisio_version_micro])
- # =============
- @@ -78,11 +78,13 @@ AS_CASE([$host],
- native_win32=yes
- LIBVISIO_WIN32_RESOURCE=libvisio-win32res.lo
- VSD2RAW_WIN32_RESOURCE=vsd2raw-win32res.lo
- + VSD2TEXT_WIN32_RESOURCE=vsd2raw-win32res.lo
- VSD2XHTML_WIN32_RESOURCE=vsd2xhtml-win32res.lo
- ], [
- native_win32=no
- LIBVISIO_WIN32_RESOURCE=
- VSD2RAW_WIN32_RESOURCE=
- + VSD2TEXT_WIN32_RESOURCE=
- VSD2XHTML_WIN32_RESOURCE=
- ]
- )
- @@ -90,6 +92,7 @@ AC_MSG_RESULT([$native_win32])
- AM_CONDITIONAL(OS_WIN32, [test "x$native_win32" = "xyes"])
- AC_SUBST(LIBVISIO_WIN32_RESOURCE)
- AC_SUBST(VSD2RAW_WIN32_RESOURCE)
- +AC_SUBST(VSD2TEXT_WIN32_RESOURCE)
- AC_SUBST(VSD2XHTML_WIN32_RESOURCE)
- AC_MSG_CHECKING([for Win32 platform in general])
- AS_CASE([$host],
- @@ -132,13 +135,13 @@ AS_IF([test "x$native_win32" = "xyes"], [
- AC_MSG_WARN([produced libraries might be incompatible with MSVC-compiled code])
- ])
- ])
- - CFLAGS="$CFLAGS -Wall -pedantic"
- - CXXFLAGS="$CXXFLAGS -Wall -pedantic"
- + CFLAGS="$CFLAGS -Wall -Wextra -pedantic"
- + CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wshadow -pedantic"
- ], [
- AS_IF([test x"$GCC" = xyes], [
- # Be tough with warnings and produce less careless code
- - CFLAGS="$CFLAGS -Wall -pedantic"
- - CXXFLAGS="$CXXFLAGS -Wall -pedantic -Weffc++"
- + CFLAGS="$CFLAGS -Wall -Wextra -pedantic"
- + CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wshadow -pedantic -Weffc++"
- ])
- ])
- LIBVISIO_CXXFLAGS="$LIBVISIO_CFLAGS"
- @@ -154,6 +157,8 @@ AC_ARG_ENABLE([debug],
- )
- AS_IF([test "x$enable_debug" = "xyes"], [
- DEBUG_CXXFLAGS="-DDEBUG -g"
- + CXXFLAGS="$CXXFLAGS -O0"
- + CFLAGS="$CFLAGS -O0"
- ], [
- DEBUG_CXXFLAGS="-DNDEBUG"
- ])
- @@ -203,6 +208,8 @@ src/conv/raw/Makefile
- src/conv/raw/vsd2raw.rc
- src/conv/svg/Makefile
- src/conv/svg/vsd2xhtml.rc
- +src/conv/text/Makefile
- +src/conv/text/vsd2text.rc
- src/lib/Makefile
- src/lib/libvisio.rc
- build/Makefile
- diff --git a/src/conv/Makefile.am b/src/conv/Makefile.am
- index 2295b76..189bcd4 100644
- --- a/src/conv/Makefile.am
- +++ b/src/conv/Makefile.am
- @@ -1 +1 @@
- -SUBDIRS = raw svg
- +SUBDIRS = raw svg text
- diff --git a/src/conv/text/.gitignore b/src/conv/text/.gitignore
- new file mode 100644
- index 0000000..e772592
- --- /dev/null
- +++ b/src/conv/text/.gitignore
- @@ -0,0 +1,9 @@
- +.deps
- +.libs
- +*.lo
- +*.la
- +*.o
- +Makefile
- +Makefile.in
- +vsd2text
- +*.rc
- diff --git a/src/conv/text/Makefile.am b/src/conv/text/Makefile.am
- new file mode 100644
- index 0000000..0350218
- --- /dev/null
- +++ b/src/conv/text/Makefile.am
- @@ -0,0 +1,30 @@
- +bin_PROGRAMS = vsd2text
- +
- +AM_CXXFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib $(LIBVISIO_CXXFLAGS) $(DEBUG_CXXFLAGS)
- +
- +vsd2text_DEPENDENCIES = @VSD2TEXT_WIN32_RESOURCE@
- +
- +if STATIC_TOOLS
- +vsd2text_LDADD = ../../lib/@VSD_OBJDIR@/libvisio-@VSD_MAJOR_VERSION@.@VSD_MINOR_VERSION@.a $(LIBVISIO_LIBS) @VSD2TEXT_WIN32_RESOURCE@
- +vsd2text_LDFLAGS = -all-static
- +else
- +vsd2text_LDADD = ../../lib/libvisio-@VSD_MAJOR_VERSION@.@VSD_MINOR_VERSION@.la $(LIBVISIO_LIBS) @VSD2TEXT_WIN32_RESOURCE@
- +endif
- +
- +vsd2text_SOURCES = \
- + vsd2text.cpp
- +
- +if OS_WIN32
- +
- +@VSD2TEXT_WIN32_RESOURCE@ : vsd2text.rc $(vsd2text_OBJECTS)
- + chmod +x $(top_srcdir)/build/win32/*compile-resource
- + WINDRES=@WINDRES@ $(top_srcdir)/build/win32/lt-compile-resource vsd2text.rc @VSD2TEXT_WIN32_RESOURCE@
- +endif
- +
- +EXTRA_DIST = \
- + $(vsd2text_SOURCES) \
- + vsd2text.rc.in
- +
- +# These may be in the builddir too
- +BUILD_EXTRA_DIST = \
- + vsd2text.rc
- diff --git a/src/conv/text/vsd2text.cpp b/src/conv/text/vsd2text.cpp
- new file mode 100644
- index 0000000..f0e17f9
- --- /dev/null
- +++ b/src/conv/text/vsd2text.cpp
- @@ -0,0 +1,131 @@
- +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- +/* libvisio
- + * Version: MPL 1.1 / GPLv2+ / LGPLv2+
- + *
- + * The contents of this file are subject to the Mozilla Public License Version
- + * 1.1 (the "License"); you may not use this file except in compliance with
- + * the License or as specified alternatively below. You may obtain a copy of
- + * the License at http://www.mozilla.org/MPL/
- + *
- + * Software distributed under the License is distributed on an "AS IS" basis,
- + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- + * for the specific language governing rights and limitations under the
- + * License.
- + *
- + * Major Contributor(s):
- + * Copyright (C) 2011 Fridrich Strba <fridrich.strba@bluewin.ch>
- + * Copyright (C) 2011 Eilidh McAdam <tibbylickle@gmail.com>
- + *
- + *
- + * All Rights Reserved.
- + *
- + * For minor contributions see the git repository.
- + *
- + * Alternatively, the contents of this file may be used under the terms of
- + * either the GNU General Public License Version 2 or later (the "GPLv2+"), or
- + * the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
- + * in which case the provisions of the GPLv2+ or the LGPLv2+ are applicable
- + * instead of those above.
- + */
- +
- +#include <stdio.h>
- +#include <string.h>
- +
- +#include "libvisio.h"
- +#include <libwpd-stream/libwpd-stream.h>
- +#include <libwpd/libwpd.h>
- +
- +class TextPainter : public libwpg::WPGPaintInterface
- +{
- +public:
- + TextPainter();
- +
- + void startGraphics(const ::WPXPropertyList &) {}
- + void endGraphics() {}
- + void startLayer(const ::WPXPropertyList &) {}
- + void endLayer() {}
- + void startEmbeddedGraphics(const ::WPXPropertyList &) {}
- + void endEmbeddedGraphics() {}
- +
- + void setStyle(const ::WPXPropertyList &, const ::WPXPropertyListVector &) {}
- +
- + void drawRectangle(const ::WPXPropertyList &) {}
- + void drawEllipse(const ::WPXPropertyList &) {}
- + void drawPolyline(const ::WPXPropertyListVector &) {}
- + void drawPolygon(const ::WPXPropertyListVector &) {}
- + void drawPath(const ::WPXPropertyListVector &) {}
- + void drawGraphicObject(const ::WPXPropertyList &, const ::WPXBinaryData &) {}
- + void startTextObject(const ::WPXPropertyList &, const ::WPXPropertyListVector &) {}
- + void endTextObject() {}
- + void startTextLine(const ::WPXPropertyList &) {}
- + void endTextLine();
- + void startTextSpan(const ::WPXPropertyList &) {}
- + void endTextSpan() {}
- + void insertText(const ::WPXString &str);
- +};
- +
- +TextPainter::TextPainter(): libwpg::WPGPaintInterface()
- +{
- +}
- +
- +void TextPainter::insertText(const ::WPXString &str)
- +{
- + printf("%s", str.cstr());
- +}
- +
- +void TextPainter::endTextLine()
- +{
- + printf("\n");
- +}
- +
- +namespace
- +{
- +
- +int printUsage()
- +{
- + printf("Usage: vsd2text [OPTION] <Visio Document File>\n");
- + printf("\n");
- + printf("Options:\n");
- + printf("--help Shows this help message\n");
- + return -1;
- +}
- +
- +} // anonymous namespace
- +
- +int main(int argc, char *argv[])
- +{
- + if (argc < 2)
- + return printUsage();
- +
- + char *file = 0;
- +
- + for (int i = 1; i < argc; i++)
- + {
- + if (!file && strncmp(argv[i], "--", 2))
- + file = argv[i];
- + else
- + return printUsage();
- + }
- +
- + if (!file)
- + return printUsage();
- +
- + WPXFileStream input(file);
- +
- + if (!libvisio::VisioDocument::isSupported(&input))
- + {
- + fprintf(stderr, "ERROR: Unsupported file format (unsupported version) or file is encrypted!\n");
- + return 1;
- + }
- +
- + TextPainter painter;
- + if (!libvisio::VisioDocument::parse(&input, &painter))
- + {
- + fprintf(stderr, "ERROR: Parsing of document failed!\n");
- + return 1;
- + }
- +
- + return 0;
- +}
- +
- +/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
- diff --git a/src/conv/text/vsd2text.rc.in b/src/conv/text/vsd2text.rc.in
- new file mode 100644
- index 0000000..b02bc0a
- --- /dev/null
- +++ b/src/conv/text/vsd2text.rc.in
- @@ -0,0 +1,31 @@
- +#include <winver.h>
- +
- +VS_VERSION_INFO VERSIONINFO
- + FILEVERSION @VSD_MAJOR_VERSION@,@VSD_MINOR_VERSION@,@VSD_MICRO_VERSION@,BUILDNUMBER
- + PRODUCTVERSION @VSD_MAJOR_VERSION@,@VSD_MINOR_VERSION@,@VSD_MICRO_VERSION@,0
- + FILEFLAGSMASK 0
- + FILEFLAGS 0
- + FILEOS VOS__WINDOWS32
- + FILETYPE VFT_APP
- + FILESUBTYPE VFT2_UNKNOWN
- + BEGIN
- + BLOCK "StringFileInfo"
- + BEGIN
- + BLOCK "040904B0"
- + BEGIN
- + VALUE "CompanyName", "The libvisio developer community"
- + VALUE "FileDescription", "vsd2text"
- + VALUE "FileVersion", "@VSD_MAJOR_VERSION@.@VSD_MINOR_VERSION@.@VSD_MICRO_VERSION@.BUILDNUMBER"
- + VALUE "InternalName", "vsd2text"
- + VALUE "LegalCopyright", "Copyright (C) 2011 Fridrich Strba, other contribut0rs"
- + VALUE "OriginalFilename", "vsd2text.exe"
- + VALUE "ProductName", "libvisio"
- + VALUE "ProductVersion", "@VSD_MAJOR_VERSION@.@VSD_MINOR_VERSION@.@VSD_MICRO_VERSION@"
- + END
- + END
- + BLOCK "VarFileInfo"
- + BEGIN
- + VALUE "Translation", 0x409, 1200
- + END
- + END
- +
- diff --git a/src/lib/VSD11Parser.cpp b/src/lib/VSD11Parser.cpp
- index 3f4847f..9d848a8 100644
- --- a/src/lib/VSD11Parser.cpp
- +++ b/src/lib/VSD11Parser.cpp
- @@ -123,7 +123,7 @@ void libvisio::VSD11Parser::readText(WPXInputStream *input)
- void libvisio::VSD11Parser::readCharIX(WPXInputStream *input)
- {
- - WPXString fontFace("Arial");
- + VSDXFont fontFace;
- unsigned charCount = readU32(input);
- unsigned short fontID = readU16(input);
- input->seek(1, WPX_SEEK_CUR); // Color ID
- @@ -164,23 +164,20 @@ void libvisio::VSD11Parser::readCharIX(WPXInputStream *input)
- if (fontMod & 4) strikeout = true;
- if (fontMod & 0x20) doublestrikeout = true;
- - input->seek(42, WPX_SEEK_CUR);
- - unsigned langId = readU32(input);
- -
- if (m_isInStyles)
- - m_collector->collectCharIXStyle(m_header.id, m_header.level, charCount, fontID, fontColour, langId, fontSize,
- + m_collector->collectCharIXStyle(m_header.id, m_header.level, charCount, fontID, fontColour, fontSize,
- bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
- allcaps, initcaps, smallcaps, superscript, subscript, fontFace);
- else if (m_isStencilStarted)
- {
- VSD_DEBUG_MSG(("Found stencil character style\n"));
- if (!m_stencilShape.m_charStyle)
- - m_stencilShape.m_charStyle= new VSDXCharStyle(charCount, fontID, fontColour, langId, fontSize,
- + m_stencilShape.m_charStyle= new VSDXCharStyle(charCount, fontID, fontColour, fontSize,
- bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
- allcaps, initcaps, smallcaps, superscript, subscript, fontFace);
- }
- else
- - m_charList->addCharIX(m_header.id, m_header.level, charCount, fontID, fontColour, langId, fontSize,
- + m_charList->addCharIX(m_header.id, m_header.level, charCount, fontID, fontColour, fontSize,
- bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
- allcaps, initcaps, smallcaps, superscript, subscript, fontFace);
- }
- diff --git a/src/lib/VSD6Parser.cpp b/src/lib/VSD6Parser.cpp
- index c09543b..2ed034f 100644
- --- a/src/lib/VSD6Parser.cpp
- +++ b/src/lib/VSD6Parser.cpp
- @@ -104,7 +104,7 @@ void libvisio::VSD6Parser::readText(WPXInputStream *input)
- void libvisio::VSD6Parser::readCharIX(WPXInputStream *input)
- {
- - WPXString fontFace = "Arial";
- + VSDXFont fontFace;
- unsigned charCount = readU32(input);
- unsigned short fontID = readU16(input);
- input->seek(1, WPX_SEEK_CUR); // Color ID
- @@ -145,23 +145,20 @@ void libvisio::VSD6Parser::readCharIX(WPXInputStream *input)
- if (fontMod & 4) strikeout = true;
- if (fontMod & 0x20) doublestrikeout = true;
- - input->seek(42, WPX_SEEK_CUR);
- - unsigned langId = readU32(input);
- -
- if (m_isInStyles)
- - m_collector->collectCharIXStyle(m_header.id, m_header.level, charCount, fontID, fontColour, langId, fontSize,
- + m_collector->collectCharIXStyle(m_header.id, m_header.level, charCount, fontID, fontColour, fontSize,
- bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
- allcaps, initcaps, smallcaps, superscript, subscript, fontFace);
- else if (m_isStencilStarted)
- {
- VSD_DEBUG_MSG(("Found stencil character style\n"));
- if (!m_stencilShape.m_charStyle)
- - m_stencilShape.m_charStyle= new VSDXCharStyle(charCount, fontID, fontColour, langId, fontSize,
- + m_stencilShape.m_charStyle= new VSDXCharStyle(charCount, fontID, fontColour, fontSize,
- bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
- allcaps, initcaps, smallcaps, superscript, subscript, fontFace);
- }
- else
- - m_charList->addCharIX(m_header.id, m_header.level, charCount, fontID, fontColour, langId, fontSize,
- + m_charList->addCharIX(m_header.id, m_header.level, charCount, fontID, fontColour, fontSize,
- bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
- allcaps, initcaps, smallcaps, superscript, subscript, fontFace);
- }
- diff --git a/src/lib/VSDSVGGenerator.cpp b/src/lib/VSDSVGGenerator.cpp
- index d4072b4..b39779a 100644
- --- a/src/lib/VSDSVGGenerator.cpp
- +++ b/src/lib/VSDSVGGenerator.cpp
- @@ -336,7 +336,9 @@ void libvisio::VSDSVGGenerator::setStyle(const ::WPXPropertyList &propList, cons
- void libvisio::VSDSVGGenerator::startLayer(const ::WPXPropertyList &propList)
- {
- - m_outputSink << "<svg:g id=\"Layer" << propList["svg:id"]->getInt() << "\"";
- + m_outputSink << "<svg:g";
- + if (propList["svg:id"])
- + m_outputSink << " id=\"Layer" << propList["svg:id"]->getInt() << "\"";
- if (propList["svg:fill-rule"])
- m_outputSink << " fill-rule=\"" << propList["svg:fill-rule"]->getStr().cstr() << "\"";
- m_outputSink << " >\n";
- @@ -505,7 +507,6 @@ void libvisio::VSDSVGGenerator::startTextObject(const ::WPXPropertyList &propLis
- {
- double x = 0.0;
- double y = 0.0;
- - double width = 0.0;
- double height = 0.0;
- m_outputSink << "<svg:text ";
- if (propList["svg:x"] && propList["svg:y"])
- @@ -519,7 +520,7 @@ void libvisio::VSDSVGGenerator::startTextObject(const ::WPXPropertyList &propLis
- if (propList["svg:width"])
- {
- - width = propList["svg:width"]->getDouble();
- + double width = propList["svg:width"]->getDouble();
- xmiddle += width / 2.0;
- }
- diff --git a/src/lib/VSDStringVector.cpp b/src/lib/VSDStringVector.cpp
- index 26bb5cd..ae3a9e0 100644
- --- a/src/lib/VSDStringVector.cpp
- +++ b/src/lib/VSDStringVector.cpp
- @@ -59,6 +59,9 @@ libvisio::VSDStringVector::~VSDStringVector()
- libvisio::VSDStringVector &libvisio::VSDStringVector::operator=(const VSDStringVector &vec)
- {
- + // Check for self-assignment
- + if (this == &vec)
- + return *this;
- if (m_pImpl)
- delete m_pImpl;
- m_pImpl = new VSDStringVectorImpl(*(vec.m_pImpl));
- diff --git a/src/lib/VSDXCharacterList.cpp b/src/lib/VSDXCharacterList.cpp
- index b88cf20..6aa2edc 100644
- --- a/src/lib/VSDXCharacterList.cpp
- +++ b/src/lib/VSDXCharacterList.cpp
- @@ -46,12 +46,12 @@ public:
- class VSDXCharIX : public VSDXCharacterListElement
- {
- public:
- - VSDXCharIX(unsigned id , unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour, unsigned langId,
- - double fontSize, bool bold, bool italic, bool underline, bool doubleunderline, bool strikeout, bool doublestrikeout,
- - bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, WPXString fontFace) :
- - m_id(id), m_level(level), m_charCount(charCount), m_fontID(fontID), m_fontColour(fontColour), m_langId(langId),
- - m_fontSize(fontSize), m_bold(bold), m_italic(italic), m_underline(underline), m_doubleunderline(doubleunderline),
- - m_strikeout(strikeout), m_doublestrikeout(doublestrikeout), m_allcaps(allcaps), m_initcaps(initcaps), m_smallcaps(smallcaps),
- + VSDXCharIX(unsigned id , unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour, double fontSize,
- + bool bold, bool italic, bool underline, bool doubleunderline, bool strikeout, bool doublestrikeout,
- + bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, VSDXFont fontFace) :
- + m_id(id), m_level(level), m_charCount(charCount), m_fontID(fontID), m_fontColour(fontColour), m_fontSize(fontSize),
- + m_bold(bold), m_italic(italic), m_underline(underline), m_doubleunderline(doubleunderline), m_strikeout(strikeout),
- + m_doublestrikeout(doublestrikeout), m_allcaps(allcaps), m_initcaps(initcaps), m_smallcaps(smallcaps),
- m_superscript(superscript), m_subscript(subscript), m_fontFace(fontFace) {}
- ~VSDXCharIX() {}
- void handle(VSDXCollector *collector);
- @@ -61,25 +61,24 @@ private:
- unsigned m_charCount;
- unsigned short m_fontID;
- Colour m_fontColour;
- - unsigned m_langId;
- double m_fontSize;
- bool m_bold, m_italic, m_underline, m_doubleunderline, m_strikeout, m_doublestrikeout;
- bool m_allcaps, m_initcaps, m_smallcaps, m_superscript, m_subscript;
- - WPXString m_fontFace;
- + VSDXFont m_fontFace;
- };
- } // namespace libvisio
- void libvisio::VSDXCharIX::handle(VSDXCollector *collector)
- {
- - collector->collectVSDXCharStyle(m_id, m_level, m_charCount, m_fontID, m_fontColour, m_langId, m_fontSize, m_bold, m_italic, m_underline,
- + collector->collectVSDXCharStyle(m_id, m_level, m_charCount, m_fontID, m_fontColour, m_fontSize, m_bold, m_italic, m_underline,
- m_doubleunderline, m_strikeout, m_doublestrikeout, m_allcaps, m_initcaps, m_smallcaps,
- m_superscript, m_subscript, m_fontFace);
- }
- libvisio::VSDXCharacterListElement *libvisio::VSDXCharIX::clone()
- {
- - return new VSDXCharIX(m_id, m_level, m_charCount, m_fontID, m_fontColour, m_langId, m_fontSize, m_bold, m_italic, m_underline,
- + return new VSDXCharIX(m_id, m_level, m_charCount, m_fontID, m_fontColour, m_fontSize, m_bold, m_italic, m_underline,
- m_doubleunderline, m_strikeout, m_doublestrikeout, m_allcaps, m_initcaps, m_smallcaps,
- m_superscript, m_subscript, m_fontFace);
- }
- @@ -115,11 +114,11 @@ libvisio::VSDXCharacterList::~VSDXCharacterList()
- clear();
- }
- -void libvisio::VSDXCharacterList::addCharIX(unsigned id , unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour, unsigned langId,
- +void libvisio::VSDXCharacterList::addCharIX(unsigned id , unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour,
- double fontSize, bool bold, bool italic, bool underline, bool doubleunderline, bool strikeout, bool doublestrikeout,
- - bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, WPXString fontFace)
- + bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, VSDXFont fontFace)
- {
- - m_elements[id] = new VSDXCharIX(id, level, charCount, fontID, fontColour, langId, fontSize, bold, italic, underline, doubleunderline,
- + m_elements[id] = new VSDXCharIX(id, level, charCount, fontID, fontColour, fontSize, bold, italic, underline, doubleunderline,
- strikeout, doublestrikeout, allcaps, initcaps, smallcaps, superscript, subscript, fontFace);
- }
- diff --git a/src/lib/VSDXCharacterList.h b/src/lib/VSDXCharacterList.h
- index bd737c5..1ceed63 100644
- --- a/src/lib/VSDXCharacterList.h
- +++ b/src/lib/VSDXCharacterList.h
- @@ -33,6 +33,7 @@
- #include <vector>
- #include <map>
- +#include "VSDXTypes.h"
- namespace libvisio
- {
- @@ -47,15 +48,15 @@ public:
- VSDXCharacterList(const VSDXCharacterList &charList);
- ~VSDXCharacterList();
- VSDXCharacterList &operator=(const VSDXCharacterList &charList);
- - void addCharIX(unsigned id, unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour, unsigned langId, double fontSize,
- + void addCharIX(unsigned id, unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour, double fontSize,
- bool bold, bool italic, bool underline, bool doubleunderline, bool strikeout, bool doublestrikeout,
- - bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, WPXString fontFace);
- + bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, VSDXFont fontFace);
- void setElementsOrder(const std::vector<unsigned> &m_elementsOrder);
- void handle(VSDXCollector *collector);
- void clear();
- bool empty() const
- {
- - return (!m_elements.size());
- + return (m_elements.empty());
- }
- private:
- std::map<unsigned, VSDXCharacterListElement *> m_elements;
- diff --git a/src/lib/VSDXCollector.h b/src/lib/VSDXCollector.h
- index 615fedf..5bf198f 100644
- --- a/src/lib/VSDXCollector.h
- +++ b/src/lib/VSDXCollector.h
- @@ -83,9 +83,9 @@ public:
- virtual void collectColours(const std::vector<Colour> &colours) = 0;
- virtual void collectFont(unsigned short fontID, const ::WPXBinaryData &textStream, TextFormat format) = 0;
- virtual void collectText(unsigned id, unsigned level, const ::WPXBinaryData &textStream, TextFormat format) = 0;
- - virtual void collectVSDXCharStyle(unsigned id , unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour, unsigned langId,
- - double fontSize, bool bold, bool italic, bool underline, bool doubleunderline, bool strikeout, bool doublestrikeout,
- - bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, WPXString fontFace) = 0;
- + virtual void collectVSDXCharStyle(unsigned id , unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour, double fontSize,
- + bool bold, bool italic, bool underline, bool doubleunderline, bool strikeout, bool doublestrikeout,
- + bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, VSDXFont fontFace) = 0;
- virtual void collectVSDXParaStyle(unsigned id , unsigned level, unsigned charCount, double indFirst, double indLeft, double indRight,
- double spLine, double spBefore, double spAfter, unsigned char align, unsigned flags) = 0;
- virtual void collectTextBlock(unsigned id, unsigned level, double leftMargin, double rightMargin, double topMargin, double bottomMargin,
- @@ -102,9 +102,9 @@ public:
- double shadowOffsetX, double shadowOffsetY) = 0;
- virtual void collectFillStyle(unsigned id, unsigned level, unsigned char colourIndexFG, unsigned char colourIndexBG, unsigned char fillPattern,
- unsigned char fillFGTransparency, unsigned char fillBGTransparency, unsigned char shadowPattern, Colour shfgc) = 0;
- - virtual void collectCharIXStyle(unsigned id , unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour, unsigned langId,
- - double fontSize, bool bold, bool italic, bool underline, bool doubleunderline, bool strikeout, bool doublestrikeout,
- - bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, WPXString fontFace) = 0;
- + virtual void collectCharIXStyle(unsigned id , unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour, double fontSize,
- + bool bold, bool italic, bool underline, bool doubleunderline, bool strikeout, bool doublestrikeout,
- + bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, VSDXFont fontFace) = 0;
- virtual void collectParaIXStyle(unsigned id , unsigned level, unsigned charCount, double indFirst, double indLeft, double indRight,
- double spLine, double spBefore, double spAfter, unsigned char align, unsigned flags) = 0;
- virtual void collectTextBlockStyle(unsigned id, unsigned level, double leftMargin, double rightMargin, double topMargin, double bottomMargin,
- diff --git a/src/lib/VSDXContentCollector.cpp b/src/lib/VSDXContentCollector.cpp
- index ec25fb4..d1ae0b6 100644
- --- a/src/lib/VSDXContentCollector.cpp
- +++ b/src/lib/VSDXContentCollector.cpp
- @@ -28,6 +28,7 @@
- * instead of those above.
- */
- +#include <string.h> // for memcpy
- #include <stack>
- #include <boost/spirit/include/classic.hpp>
- @@ -46,6 +47,62 @@ static unsigned bitmapId = 0;
- #define M_PI 3.14159265358979323846
- #endif
- +#define SURROGATE_VALUE(h,l) (((h) - 0xd800) * 0x400 + (l) - 0xdc00 + 0x10000)
- +
- +namespace
- +{
- +
- +static void _appendUCS4(WPXString &text, unsigned ucs4Character)
- +{
- + unsigned char first;
- + int len;
- + if (ucs4Character < 0x80)
- + {
- + first = 0;
- + len = 1;
- + }
- + else if (ucs4Character < 0x800)
- + {
- + first = 0xc0;
- + len = 2;
- + }
- + else if (ucs4Character < 0x10000)
- + {
- + first = 0xe0;
- + len = 3;
- + }
- + else if (ucs4Character < 0x200000)
- + {
- + first = 0xf0;
- + len = 4;
- + }
- + else if (ucs4Character < 0x4000000)
- + {
- + first = 0xf8;
- + len = 5;
- + }
- + else
- + {
- + first = 0xfc;
- + len = 6;
- + }
- +
- + unsigned char outbuf[6] = { 0, 0, 0, 0, 0, 0 };
- + int i;
- + for (i = len - 1; i > 0; --i)
- + {
- + outbuf[i] = (ucs4Character & 0x3f) | 0x80;
- + ucs4Character >>= 6;
- + }
- + outbuf[0] = (ucs4Character & 0xff) | first;
- +
- + for (i = 0; i < len; i++)
- + text.append(outbuf[i]);
- +}
- +
- +} // anonymous namespace
- +
- +
- libvisio::VSDXContentCollector::VSDXContentCollector(
- libwpg::WPGPaintInterface *painter,
- std::vector<std::map<unsigned, XForm> > &groupXFormsSequence,
- @@ -91,7 +148,12 @@ void libvisio::VSDXContentCollector::_fillAndShadowProperties(unsigned colourInd
- else if (m_fillPattern == 1)
- {
- m_fillType = "solid";
- - m_styleProps.insert("draw:fill-color", getColourString(m_colours[colourIndexFG]));
- + if (colourIndexFG < m_colours.size())
- + m_styleProps.insert("draw:fill-color", getColourString(m_colours[colourIndexFG]));
- +#ifdef DEBUG
- + else
- + VSD_DEBUG_MSG(("_fillAndShadowProperties: colourIndexFG out of bonds\n"));
- +#endif
- if (m_fillFGTransparency > 0)
- m_styleProps.insert("draw:opacity", (double)(1 - m_fillFGTransparency/255.0), WPX_PERCENT);
- else
- @@ -101,8 +163,18 @@ void libvisio::VSDXContentCollector::_fillAndShadowProperties(unsigned colourInd
- {
- m_fillType = "gradient";
- m_styleProps.insert("draw:style", "axial");
- - m_styleProps.insert("draw:start-color", getColourString(m_colours[colourIndexFG]));
- - m_styleProps.insert("draw:end-color", getColourString(m_colours[colourIndexBG]));
- + if (colourIndexFG < m_colours.size())
- + m_styleProps.insert("draw:start-color", getColourString(m_colours[colourIndexFG]));
- +#ifdef DEBUG
- + else
- + VSD_DEBUG_MSG(("_fillAndShadowProperties: colourIndexFG out of bonds\n"));
- +#endif
- + if (colourIndexBG < m_colours.size())
- + m_styleProps.insert("draw:end-color", getColourString(m_colours[colourIndexBG]));
- +#ifdef DEBUG
- + else
- + VSD_DEBUG_MSG(("_fillAndShadowProperties: colourIndexBG out of bonds\n"));
- +#endif
- m_styleProps.remove("draw:opacity");
- if (m_fillBGTransparency > 0)
- m_styleProps.insert("libwpg:start-opacity", (double)(1 - m_fillBGTransparency/255.0), WPX_PERCENT);
- @@ -123,8 +195,18 @@ void libvisio::VSDXContentCollector::_fillAndShadowProperties(unsigned colourInd
- {
- m_fillType = "gradient";
- m_styleProps.insert("draw:style", "linear");
- - m_styleProps.insert("draw:start-color", getColourString(m_colours[colourIndexBG]));
- - m_styleProps.insert("draw:end-color", getColourString(m_colours[colourIndexFG]));
- + if (colourIndexBG < m_colours.size())
- + m_styleProps.insert("draw:start-color", getColourString(m_colours[colourIndexBG]));
- +#ifdef DEBUG
- + else
- + VSD_DEBUG_MSG(("_fillAndShadowProperties: colourIndexBG out of bonds\n"));
- +#endif
- + if (colourIndexFG < m_colours.size())
- + m_styleProps.insert("draw:end-color", getColourString(m_colours[colourIndexFG]));
- +#ifdef DEBUG
- + else
- + VSD_DEBUG_MSG(("_fillAndShadowProperties: colourIndexFG out of bonds\n"));
- +#endif
- m_styleProps.remove("draw:opacity");
- if (m_fillBGTransparency > 0)
- m_styleProps.insert("libwpg:start-opacity", (double)(1 - m_fillBGTransparency/255.0), WPX_PERCENT);
- @@ -170,8 +252,18 @@ void libvisio::VSDXContentCollector::_fillAndShadowProperties(unsigned colourInd
- m_styleProps.insert("draw:style", "rectangular");
- m_styleProps.insert("svg:cx", 0.5, WPX_PERCENT);
- m_styleProps.insert("svg:cy", 0.5, WPX_PERCENT);
- - m_styleProps.insert("draw:start-color", getColourString(m_colours[colourIndexBG]));
- - m_styleProps.insert("draw:end-color", getColourString(m_colours[colourIndexFG]));
- + if (colourIndexBG < m_colours.size())
- + m_styleProps.insert("draw:start-color", getColourString(m_colours[colourIndexBG]));
- +#ifdef DEBUG
- + else
- + VSD_DEBUG_MSG(("_fillAndShadowProperties: colourIndexBG out of bonds\n"));
- +#endif
- + if (colourIndexFG < m_colours.size())
- + m_styleProps.insert("draw:end-color", getColourString(m_colours[colourIndexFG]));
- +#ifdef DEBUG
- + else
- + VSD_DEBUG_MSG(("_fillAndShadowProperties: colourIndexFG out of bonds\n"));
- +#endif
- m_styleProps.remove("draw:opacity");
- if (m_fillBGTransparency > 0)
- m_styleProps.insert("libwpg:start-opacity", (double)(1 - m_fillBGTransparency/255.0), WPX_PERCENT);
- @@ -188,8 +280,18 @@ void libvisio::VSDXContentCollector::_fillAndShadowProperties(unsigned colourInd
- {
- m_fillType = "gradient";
- m_styleProps.insert("draw:style", "radial");
- - m_styleProps.insert("draw:start-color", getColourString(m_colours[colourIndexBG]));
- - m_styleProps.insert("draw:end-color", getColourString(m_colours[colourIndexFG]));
- + if (colourIndexBG < m_colours.size())
- + m_styleProps.insert("draw:start-color", getColourString(m_colours[colourIndexBG]));
- +#ifdef DEBUG
- + else
- + VSD_DEBUG_MSG(("_fillAndShadowProperties: colourIndexBG out of bonds\n"));
- +#endif
- + if (colourIndexFG < m_colours.size())
- + m_styleProps.insert("draw:end-color", getColourString(m_colours[colourIndexFG]));
- +#ifdef DEBUG
- + else
- + VSD_DEBUG_MSG(("_fillAndShadowProperties: colourIndexFG out of bonds\n"));
- +#endif
- m_styleProps.remove("draw:opacity");
- if (m_fillBGTransparency > 0)
- m_styleProps.insert("libwpg:start-opacity", (double)(1 - m_fillBGTransparency/255.0), WPX_PERCENT);
- @@ -229,7 +331,12 @@ void libvisio::VSDXContentCollector::_fillAndShadowProperties(unsigned colourInd
- // fill types we don't handle right, but let us approximate with solid fill
- {
- m_fillType = "solid";
- - m_styleProps.insert("draw:fill-color", getColourString(m_colours[colourIndexBG]));
- + if (colourIndexBG < m_colours.size())
- + m_styleProps.insert("draw:fill-color", getColourString(m_colours[colourIndexBG]));
- +#ifdef DEBUG
- + else
- + VSD_DEBUG_MSG(("_fillAndShadowProperties: colourIndexBG out of bonds\n"));
- +#endif
- }
- if (shadowPattern != 0)
- @@ -574,8 +681,6 @@ void libvisio::VSDXContentCollector::_flushCurrentPath()
- fillPathProps.insert("draw:stroke", "none");
- WPXPropertyList linePathProps(m_styleProps);
- linePathProps.insert("draw:fill", "none");
- - bool firstPoint = true;
- - bool wasMove = false;
- bool needsGroup = true;
- if (!m_styleProps["draw:fill"] || m_styleProps["draw:fill"]->getStr() == "none")
- @@ -592,6 +697,8 @@ void libvisio::VSDXContentCollector::_flushCurrentPath()
- if (m_styleProps["draw:fill"] && m_styleProps["draw:fill"]->getStr() != "none")
- {
- + bool firstPoint = true;
- + bool wasMove = false;
- for (unsigned i = 0; i < m_currentFillGeometry.size(); i++)
- {
- if (firstPoint)
- @@ -770,50 +877,24 @@ void libvisio::VSDXContentCollector::_flushText()
- m_shapeOutputText->addStartTextLine(paraProps);
- paraCharCount = (*paraIt).charCount;
- +
- + TextFormat encoding = libvisio::VSD_TEXT_ANSI;
- // Find char format that overlaps
- while (charIndex < m_charFormats.size() && paraCharCount)
- {
- paraCharCount -= m_charFormats[charIndex].charCount;
- - WPXString text;
- -
- - if (m_textFormat == VSD_TEXT_UTF16)
- + WPXPropertyList textProps;
- + if (m_fonts[m_charFormats[charIndex].faceID].name == "")
- {
- - unsigned long max = m_charFormats[charIndex].charCount <= (m_textStream.size()/2) ? m_charFormats[charIndex].charCount : (m_textStream.size()/2);
- - VSD_DEBUG_MSG(("Charcount: %d, max: %lu, stream size: %lu\n", m_charFormats[charIndex].charCount, max, (unsigned long)m_textStream.size()));
- - max = (m_charFormats[charIndex].charCount == 0 && m_textStream.size()) ? m_textStream.size()/2 : max;
- - VSD_DEBUG_MSG(("Charcount: %d, max: %lu, stream size: %lu\n", m_charFormats[charIndex].charCount, max, (unsigned long)m_textStream.size()));
- - VSDInternalStream tmpStream(&pTextBuffer[textBufferPosition], max*2);
- - _appendUTF16LE(text, &tmpStream);
- - textBufferPosition += max*2;
- + textProps.insert("style:font-name", m_charFormats[charIndex].face.name);
- + encoding = m_charFormats[charIndex].face.encoding;
- }
- else
- {
- - unsigned long max = m_charFormats[charIndex].charCount <= m_textStream.size() ? m_charFormats[charIndex].charCount : m_textStream.size();
- - max = (m_charFormats[charIndex].charCount == 0 && m_textStream.size()) ? m_textStream.size() : max;
- - VSDInternalStream tmpStream(&pTextBuffer[textBufferPosition], max);
- - while (!tmpStream.atEOS())
- - {
- - unsigned char character = readU8(&tmpStream);
- - if (character == 0x1e)
- - {
- - if (m_fieldIndex < m_fields.size())
- - text.append(m_fields[m_fieldIndex++].cstr());
- - else
- - m_fieldIndex++;
- - }
- - else if (character <= 0x20)
- - _appendUCS4(text, (unsigned) 0x20);
- - else
- - _appendUCS4(text, (unsigned) character);
- - }
- - textBufferPosition += max;
- + textProps.insert("style:font-name", m_fonts[m_charFormats[charIndex].faceID].name);
- + encoding = m_fonts[m_charFormats[charIndex].faceID].encoding;
- }
- - WPXPropertyList textProps;
- - if (m_fonts[m_charFormats[charIndex].faceID] == "")
- - textProps.insert("style:font-name", m_charFormats[charIndex].face);
- - else
- - textProps.insert("style:font-name", m_fonts[m_charFormats[charIndex].faceID]);
- if (m_charFormats[charIndex].bold) textProps.insert("fo:font-weight", "bold");
- if (m_charFormats[charIndex].italic) textProps.insert("fo:font-style", "italic");
- @@ -843,6 +924,29 @@ void libvisio::VSDXContentCollector::_flushText()
- #endif
- }
- + WPXString text;
- +
- + if (m_textFormat == VSD_TEXT_UTF16)
- + {
- + unsigned long max = m_charFormats[charIndex].charCount <= (m_textStream.size()/2) ? m_charFormats[charIndex].charCount : (m_textStream.size()/2);
- + VSD_DEBUG_MSG(("Charcount: %d, max: %lu, stream size: %lu\n", m_charFormats[charIndex].charCount, max, (unsigned long)m_textStream.size()));
- + max = (m_charFormats[charIndex].charCount == 0 && m_textStream.size()) ? m_textStream.size()/2 : max;
- + VSD_DEBUG_MSG(("Charcount: %d, max: %lu, stream size: %lu\n", m_charFormats[charIndex].charCount, max, (unsigned long)m_textStream.size()));
- + std::vector<unsigned char> tmpBuffer(max*2);
- + memcpy(&tmpBuffer[0], &pTextBuffer[textBufferPosition], max*2);
- + appendCharacters(text, tmpBuffer);
- + textBufferPosition += max*2;
- + }
- + else
- + {
- + unsigned long max = m_charFormats[charIndex].charCount <= m_textStream.size() ? m_charFormats[charIndex].charCount : m_textStream.size();
- + max = (m_charFormats[charIndex].charCount == 0 && m_textStream.size()) ? m_textStream.size() : max;
- + std::vector<unsigned char> tmpBuffer(max);
- + memcpy(&tmpBuffer[0], &pTextBuffer[textBufferPosition], max);
- + appendCharacters(text, tmpBuffer, encoding);
- + textBufferPosition += max;
- + }
- +
- VSD_DEBUG_MSG(("Text: %s\n", text.cstr()));
- m_shapeOutputText->addStartTextSpan(textProps);
- m_shapeOutputText->addInsertText(text);
- @@ -1131,14 +1235,17 @@ void libvisio::VSDXContentCollector::collectInfiniteLine(unsigned /* id */, unsi
- if (x <= m_pageWidth && x >= 0)
- points[x] = y;
- - xmove = points.begin()->first;
- - ymove = points.begin()->second;
- - for (std::map<double, double>::iterator iter = points.begin(); iter != points.end(); ++iter)
- + if (!points.empty())
- {
- - if (iter->first != xmove || iter->second != ymove)
- + xmove = points.begin()->first;
- + ymove = points.begin()->second;
- + for (std::map<double, double>::iterator iter = points.begin(); iter != points.end(); ++iter)
- {
- - xline = iter->first;
- - yline = iter->second;
- + if (iter->first != xmove || iter->second != ymove)
- + {
- + xline = iter->first;
- + yline = iter->second;
- + }
- }
- }
- }
- @@ -1429,7 +1536,10 @@ void libvisio::VSDXContentCollector::collectNURBSTo(unsigned /* id */, unsigned
- // Fill in end knots
- while (knotVector.size() < (controlPoints.size() + degree + 2))
- - knotVector.push_back(knotVector.back());
- + {
- + double tmpBack = knotVector.back();
- + knotVector.push_back(tmpBack);
- + }
- // Convert control points to static co-ordinates
- for (std::vector<std::pair<double, double> >::iterator it = controlPoints.begin();
- @@ -1598,6 +1708,7 @@ void libvisio::VSDXContentCollector::collectPolylineTo(unsigned /* id */ , unsig
- void libvisio::VSDXContentCollector::collectPolylineTo(unsigned id, unsigned level, double x, double y, unsigned dataID)
- {
- std::map<unsigned, PolylineData>::const_iterator iter;
- + std::map<unsigned, PolylineData>::const_iterator iterEnd;
- if (dataID == 0xFFFFFFFE) // Use stencil polyline data
- {
- if (!m_stencilShape || m_stencilShape->m_geometries.size() < m_currentGeometryCount)
- @@ -1610,13 +1721,15 @@ void libvisio::VSDXContentCollector::collectPolylineTo(unsigned id, unsigned lev
- VSDXGeometryListElement *element = m_stencilShape->m_geometries[m_currentGeometryCount-1].getElement(id);
- dataID = dynamic_cast<VSDXPolylineTo2 *>(element)->m_dataID;
- iter = m_stencilShape->m_polylineData.find(dataID);
- + iterEnd = m_stencilShape->m_polylineData.end();
- }
- else // No stencils involved, directly get dataID
- {
- iter = m_polylineData.find(dataID);
- + iterEnd = m_polylineData.end();
- }
- - if (iter != m_polylineData.end())
- + if (iter != iterEnd)
- {
- PolylineData data = iter->second;
- collectPolylineTo(id, level, x, y, data.xType, data.yType, data.points);
- @@ -1969,9 +2082,10 @@ void libvisio::VSDXContentCollector::collectColours(const std::vector<Colour> &c
- void libvisio::VSDXContentCollector::collectFont(unsigned short fontID, const WPXBinaryData &textStream, TextFormat format)
- {
- - WPXString fontname;
- - _convertDataToString(fontname, textStream, format);
- - m_fonts[fontID] = fontname;
- + VSDXFont font;
- + _convertDataToString(font.name, textStream, format);
- + font.encoding = format;
- + m_fonts[fontID] = font;
- }
- @@ -1998,7 +2112,7 @@ void libvisio::VSDXContentCollector::collectSplineKnot(unsigned /* id */, unsign
- void libvisio::VSDXContentCollector::collectSplineEnd()
- {
- - if (!m_splineKnotVector.size() || !m_splineControlPoints.size())
- + if (m_splineKnotVector.empty() || m_splineControlPoints.empty())
- {
- m_splineKnotVector.clear();
- m_splineControlPoints.clear();
- @@ -2030,13 +2144,13 @@ void libvisio::VSDXContentCollector::collectVSDXParaStyle(unsigned /* id */ , un
- m_paraFormats.push_back(format);
- }
- -void libvisio::VSDXContentCollector::collectVSDXCharStyle(unsigned /*id*/ , unsigned level, unsigned charCount, unsigned short fontID,
- - Colour fontColour, unsigned langId, double fontSize, bool bold, bool italic,
- +void libvisio::VSDXContentCollector::collectVSDXCharStyle(unsigned /*id*/ , unsigned level, unsigned charCount,
- + unsigned short fontID, Colour fontColour, double fontSize, bool bold, bool italic,
- bool underline, bool doubleunderline, bool strikeout, bool doublestrikeout,
- - bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, WPXString fontFace)
- + bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, VSDXFont fontFace)
- {
- _handleLevelChange(level);
- - VSDXCharStyle format(charCount, fontID, fontColour, langId, fontSize, bold, italic,
- + VSDXCharStyle format(charCount, fontID, fontColour, fontSize, bold, italic,
- underline, doubleunderline, strikeout, doublestrikeout,
- allcaps, initcaps, smallcaps, superscript, subscript, fontFace);
- m_charFormats.push_back(format);
- @@ -2059,22 +2173,11 @@ void libvisio::VSDXContentCollector::collectNameList(unsigned /*id*/, unsigned l
- void libvisio::VSDXContentCollector::_convertDataToString(WPXString &result, const WPXBinaryData &data, TextFormat format)
- {
- - WPXInputStream *pStream = const_cast<WPXInputStream *>(data.getDataStream());
- - if (format == VSD_TEXT_ANSI)
- - {
- - while (!pStream->atEOS())
- - {
- - unsigned char character = readU8(pStream);
- - if (character <= 0x20)
- - _appendUCS4(result, (unsigned) 0x20);
- - else
- - _appendUCS4(result, (unsigned) character);
- - }
- - }
- - else if (format == VSD_TEXT_UTF16)
- - {
- - _appendUTF16LE(result, pStream);
- - }
- + if (!data.size())
- + return;
- + std::vector<unsigned char> tmpData(data.size());
- + memcpy(&tmpData[0], data.getDataBuffer(), data.size());
- + appendCharacters(result, tmpData, format);
- }
- void libvisio::VSDXContentCollector::collectName(unsigned id, unsigned level, const WPXBinaryData &name, TextFormat format)
- @@ -2106,9 +2209,9 @@ void libvisio::VSDXContentCollector::collectFillStyle(unsigned /*id*/, unsigned
- _handleLevelChange(level);
- }
- -void libvisio::VSDXContentCollector::collectCharIXStyle(unsigned /*id*/ , unsigned level, unsigned /*charCount*/, unsigned short /*fontID*/, Colour /*fontColour*/, unsigned /*langId*/, double /*fontSize*/,
- +void libvisio::VSDXContentCollector::collectCharIXStyle(unsigned /*id*/ , unsigned level, unsigned /*charCount*/, unsigned short /*fontID*/, Colour /*fontColour*/, double /*fontSize*/,
- bool /*bold*/, bool /*italic*/, bool /*underline*/, bool /* doubleunderline */, bool /* strikeout */, bool /* doublestrikeout */,
- - bool /* allcaps */, bool /* initcaps */, bool /* smallcaps */, bool /* superscript */, bool /* subscript */, WPXString /*fontFace*/)
- + bool /* allcaps */, bool /* initcaps */, bool /* smallcaps */, bool /* superscript */, bool /* subscript */, VSDXFont /*fontFace*/)
- {
- _handleLevelChange(level);
- }
- @@ -2256,7 +2359,6 @@ void libvisio::VSDXContentCollector::_handleLevelChange(unsigned level)
- m_currentLevel = level;
- }
- -
- void libvisio::VSDXContentCollector::startPage()
- {
- if (m_isShapeStarted)
- @@ -2301,24 +2403,324 @@ void libvisio::VSDXContentCollector::endPages(const std::vector<unsigned> &pageO
- m_pages.draw(m_painter);
- }
- -#define SURROGATE_VALUE(h,l) (((h) - 0xd800) * 0x400 + (l) - 0xdc00 + 0x10000)
- +bool libvisio::VSDXContentCollector::parseFormatId( const char *formatString, unsigned short &result )
- +{
- + using namespace ::boost::spirit::classic;
- +
- + result = 0xffff;
- +
- + uint_parser<unsigned short,10,1,5> ushort_p;
- + if (parse(formatString,
- + // Begin grammar
- + (
- + (
- + str_p("{<") >>
- + ushort_p[assign_a(result)]
- + >> str_p(">}")
- + )
- + |
- + (
- + str_p("esc(") >>
- + ushort_p[assign_a(result)]
- + >> ')'
- + )
- + )>> end_p,
- + // End grammar
- + space_p).full )
- + {
- + return true;
- + }
- + return false;
- +}
- -void libvisio::VSDXContentCollector::_appendUTF16LE(WPXString &text, WPXInputStream *input)
- +void libvisio::VSDXContentCollector::appendCharacters(WPXString &text, const std::vector<unsigned char> &characters, TextFormat format)
- {
- - while (!input->atEOS())
- + if (format == VSD_TEXT_UTF16)
- + return appendCharacters(text, characters);
- +
- + static const unsigned short cp874map[] =
- + {
- + 0x20AC, 0x0020, 0x0020, 0x0020, 0x0020, 0x2026, 0x0020, 0x0020,
- + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
- + 0x0020, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
- + 0x00A0, 0x0E01, 0x0E02, 0x0E03, 0x0E04, 0x0E05, 0x0E06, 0x0E07,
- + 0x0E08, 0x0E09, 0x0E0A, 0x0E0B, 0x0E0C, 0x0E0D, 0x0E0E, 0x0E0F,
- + 0x0E10, 0x0E11, 0x0E12, 0x0E13, 0x0E14, 0x0E15, 0x0E16, 0x0E17,
- + 0x0E18, 0x0E19, 0x0E1A, 0x0E1B, 0x0E1C, 0x0E1D, 0x0E1E, 0x0E1F,
- + 0x0E20, 0x0E21, 0x0E22, 0x0E23, 0x0E24, 0x0E25, 0x0E26, 0x0E27,
- + 0x0E28, 0x0E29, 0x0E2A, 0x0E2B, 0x0E2C, 0x0E2D, 0x0E2E, 0x0E2F,
- + 0x0E30, 0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37,
- + 0x0E38, 0x0E39, 0x0E3A, 0x0020, 0x0020, 0x0020, 0x0020, 0x0E3F,
- + 0x0E40, 0x0E41, 0x0E42, 0x0E43, 0x0E44, 0x0E45, 0x0E46, 0x0E47,
- + 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D, 0x0E4E, 0x0E4F,
- + 0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57,
- + 0x0E58, 0x0E59, 0x0E5A, 0x0E5B, 0x0020, 0x0020, 0x0020, 0x0020
- + };
- +
- + static const unsigned short cp1250map[] =
- + {
- + 0x20AC, 0x0020, 0x201A, 0x0020, 0x201E, 0x2026, 0x2020, 0x2021,
- + 0x0020, 0x2030, 0x0160, 0x2039, 0x015A, 0x0164, 0x017D, 0x0179,
- + 0x0020, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- + 0x0020, 0x2122, 0x0161, 0x203A, 0x015B, 0x0165, 0x017E, 0x017A,
- + 0x00A0, 0x02C7, 0x02D8, 0x0141, 0x00A4, 0x0104, 0x00A6, 0x00A7,
- + 0x00A8, 0x00A9, 0x015E, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x017B,
- + 0x00B0, 0x00B1, 0x02DB, 0x0142, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- + 0x00B8, 0x0105, 0x015F, 0x00BB, 0x013D, 0x02DD, 0x013E, 0x017C,
- + 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7,
- + 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E,
- + 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7,
- + 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF,
- + 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7,
- + 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F,
- + 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7,
- + 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9
- + };
- +
- + static const unsigned short cp1251map[] =
- + {
- + 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021,
- + 0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F,
- + 0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- + 0x0020, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F,
- + 0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7,
- + 0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407,
- + 0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7,
- + 0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457,
- + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
- + 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
- + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
- + 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
- + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
- + 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
- + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
- + 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F
- + };
- +
- + static const unsigned short cp1252map[] =
- + {
- + 0x20AC, 0x0020, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- + 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0020, 0x017D, 0x0020,
- + 0x0020, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- + 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0020, 0x017E, 0x0178,
- + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
- + 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
- + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- + 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
- + 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
- + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
- + 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
- + 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
- + 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
- + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
- + 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
- + 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
- + };
- +
- + static const unsigned short cp1253map[] =
- + {
- + 0x20AC, 0x0020, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- + 0x0020, 0x2030, 0x0020, 0x2039, 0x0020, 0x0020, 0x0020, 0x0020,
- + 0x0020, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- + 0x0020, 0x2122, 0x0020, 0x203A, 0x0020, 0x0020, 0x0020, 0x0020,
- + 0x00A0, 0x0385, 0x0386, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
- + 0x00A8, 0x00A9, 0x0020, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x2015,
- + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x00B5, 0x00B6, 0x00B7,
- + 0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F,
- + 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
- + 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
- + 0x03A0, 0x03A1, 0x0020, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7,
- + 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF,
- + 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7,
- + 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
- + 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7,
- + 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0x0020
- + };
- +
- + static const unsigned short cp1254map[] =
- + {
- + 0x20AC, 0x0020, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- + 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0020, 0x0020, 0x0020,
- + 0x0020, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- + 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0020, 0x0020, 0x0178,
- + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
- + 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
- + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- + 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
- + 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
- + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
- + 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
- + 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF,
- + 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
- + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
- + 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
- + 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF
- + };
- +
- + static const unsigned short cp1255map[] =
- + {
- + 0x20AC, 0x0020, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- + 0x02C6, 0x2030, 0x0020, 0x2039, 0x0020, 0x0020, 0x0020, 0x0020,
- + 0x0020, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- + 0x02DC, 0x2122, 0x0020, 0x203A, 0x0020, 0x0020, 0x0020, 0x0020,
- + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AA, 0x00A5, 0x00A6, 0x00A7,
- + 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
- + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- + 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
- + 0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7,
- + 0x05B8, 0x05B9, 0x0020, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF,
- + 0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05F0, 0x05F1, 0x05F2, 0x05F3,
- + 0x05F4, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
- + 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7,
- + 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
- + 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7,
- + 0x05E8, 0x05E9, 0x05EA, 0x0020, 0x0020, 0x200E, 0x200F, 0x0020
- + };
- +
- + static const unsigned short cp1256map[] =
- + {
- + 0x20AC, 0x067E, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- + 0x02C6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688,
- + 0x06AF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- + 0x06A9, 0x2122, 0x0691, 0x203A, 0x0153, 0x200C, 0x200D, 0x06BA,
- + 0x00A0, 0x060C, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
- + 0x00A8, 0x00A9, 0x06BE, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
- + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- + 0x00B8, 0x00B9, 0x061B, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x061F,
- + 0x06C1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
- + 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F,
- + 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00D7,
- + 0x0637, 0x0638, 0x0639, 0x063A, 0x0640, 0x0641, 0x0642, 0x0643,
- + 0x00E0, 0x0644, 0x00E2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00E7,
- + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0649, 0x064A, 0x00EE, 0x00EF,
- + 0x064B, 0x064C, 0x064D, 0x064E, 0x00F4, 0x064F, 0x0650, 0x00F7,
- + 0x0651, 0x00F9, 0x0652, 0x00FB, 0x00FC, 0x200E, 0x200F, 0x06D2
- + };
- +
- + static const unsigned short cp1257map[] =
- + {
- + 0x20AC, 0x0020, 0x201A, 0x0020, 0x201E, 0x2026, 0x2020, 0x2021,
- + 0x0020, 0x2030, 0x0020, 0x2039, 0x0020, 0x00A8, 0x02C7, 0x00B8,
- + 0x0020, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- + 0x0020, 0x2122, 0x0020, 0x203A, 0x0020, 0x00AF, 0x02DB, 0x0020,
- + 0x00A0, 0x0020, 0x00A2, 0x00A3, 0x00A4, 0x0020, 0x00A6, 0x00A7,
- + 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6,
- + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- + 0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6,
- + 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112,
- + 0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B,
- + 0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7,
- + 0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF,
- + 0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113,
- + 0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C,
- + 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7,
- + 0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x02D9
- + };
- +
- + static const unsigned short cp1258map[] =
- + {
- + 0x20AC, 0x0020, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- + 0x02C6, 0x2030, 0x0020, 0x2039, 0x0152, 0x0020, 0x0020, 0x0020,
- + 0x0020, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- + 0x02DC, 0x2122, 0x0020, 0x203A, 0x0153, 0x0020, 0x0020, 0x0178,
- + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
- + 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
- + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- + 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
- + 0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
- + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x0300, 0x00CD, 0x00CE, 0x00CF,
- + 0x0110, 0x00D1, 0x0309, 0x00D3, 0x00D4, 0x01A0, 0x00D6, 0x00D7,
- + 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x01AF, 0x0303, 0x00DF,
- + 0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
- + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0301, 0x00ED, 0x00EE, 0x00EF,
- + 0x0111, 0x00F1, 0x0323, 0x00F3, 0x00F4, 0x01A1, 0x00F6, 0x00F7,
- + 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x01B0, 0x20AB, 0x00FF
- + };
- +
- + std::vector<unsigned char>::const_iterator iter = characters.begin();
- + while (iter != characters.end())
- + {
- + uint32_t ucs4Character = 0;
- + if (*iter == 0x1e)
- + {
- + if (m_fieldIndex < m_fields.size())
- + text.append(m_fields[m_fieldIndex++].cstr());
- + else
- + m_fieldIndex++;
- + }
- + else if (*iter < 0x20)
- + {
- + ucs4Character = 0x20;
- + ++iter;
- + }
- + else if (*iter >= 0x20 && *iter < 0x7f)
- + ucs4Character = *iter++;
- + else if (*iter == 0x7f)
- + {
- + ucs4Character = 0x20;
- + ++iter;
- + }
- + else
- + {
- + switch (format)
- + {
- + case VSD_TEXT_ANSI:
- + ucs4Character = cp1252map[*iter++ - 0x80];
- + break;
- + case VSD_TEXT_GREEK:
- + ucs4Character = cp1253map[*iter++ - 0x80];
- + break;
- + case VSD_TEXT_TURKISH:
- + ucs4Character = cp1254map[*iter++ - 0x80];
- + break;
- + case VSD_TEXT_VIETNAMESE:
- + ucs4Character = cp1258map[*iter++ - 0x80];
- + break;
- + case VSD_TEXT_HEBREW:
- + ucs4Character = cp1255map[*iter++ - 0x80];
- + break;
- + case VSD_TEXT_ARABIC:
- + ucs4Character = cp1256map[*iter++ - 0x80];
- + break;
- + case VSD_TEXT_BALTIC:
- + ucs4Character = cp1257map[*iter++ - 0x80];
- + break;
- + case VSD_TEXT_RUSSIAN:
- + ucs4Character = cp1251map[*iter++ - 0x80];
- + break;
- + case VSD_TEXT_THAI:
- + ucs4Character = cp874map[*iter++ - 0x80];
- + break;
- + case VSD_TEXT_CENTRAL_EUROPE:
- + ucs4Character = cp1250map[*iter++ - 0x80];
- + break;
- + default:
- + ucs4Character = *iter++;
- + break;
- + }
- + }
- + _appendUCS4(text, ucs4Character);
- + }
- +}
- +
- +void libvisio::VSDXContentCollector::appendCharacters(WPXString &text, const std::vector<unsigned char> &characters)
- +{
- + for (std::vector<unsigned char>::const_iterator iter = characters.begin();
- + iter != characters.end();)
- {
- uint16_t high_surrogate = 0;
- bool fail = false;
- uint32_t ucs4Character = 0;
- - uint16_t character = 0;
- while (true)
- {
- - if (input->atEOS())
- + if (iter == characters.end())
- {
- fail = true;
- break;
- }
- - character = readU16(input);
- + uint16_t character = *iter++;
- + character |= (uint16_t)(*iter++) << 8;
- if (character == 0xfffc)
- {
- if (m_fieldIndex < m_fields.size())
- @@ -2357,88 +2759,10 @@ void libvisio::VSDXContentCollector::_appendUTF16LE(WPXString &text, WPXInputStr
- }
- }
- if (fail)
- - throw GenericException();
- + throw libvisio::GenericException();
- _appendUCS4(text, ucs4Character);
- }
- }
- -void libvisio::VSDXContentCollector::_appendUCS4(WPXString &text, unsigned ucs4Character)
- -{
- - unsigned char first;
- - int len;
- - if (ucs4Character < 0x80)
- - {
- - first = 0;
- - len = 1;
- - }
- - else if (ucs4Character < 0x800)
- - {
- - first = 0xc0;
- - len = 2;
- - }
- - else if (ucs4Character < 0x10000)
- - {
- - first = 0xe0;
- - len = 3;
- - }
- - else if (ucs4Character < 0x200000)
- - {
- - first = 0xf0;
- - len = 4;
- - }
- - else if (ucs4Character < 0x4000000)
- - {
- - first = 0xf8;
- - len = 5;
- - }
- - else
- - {
- - first = 0xfc;
- - len = 6;
- - }
- -
- - unsigned char outbuf[6] = { 0, 0, 0, 0, 0, 0 };
- - int i;
- - for (i = len - 1; i > 0; --i)
- - {
- - outbuf[i] = (ucs4Character & 0x3f) | 0x80;
- - ucs4Character >>= 6;
- - }
- - outbuf[0] = (ucs4Character & 0xff) | first;
- -
- - for (i = 0; i < len; i++)
- - text.append(outbuf[i]);
- -}
- -
- -bool libvisio::VSDXContentCollector::parseFormatId( const char *formatString, unsigned short &result )
- -{
- - using namespace ::boost::spirit::classic;
- -
- - result = 0xffff;
- -
- - uint_parser<unsigned short,10,1,5> ushort_p;
- - if (parse(formatString,
- - // Begin grammar
- - (
- - (
- - str_p("{<") >>
- - ushort_p[assign_a(result)]
- - >> str_p(">}")
- - )
- - |
- - (
- - str_p("esc(") >>
- - ushort_p[assign_a(result)]
- - >> ')'
- - )
- - )>> end_p,
- - // End grammar
- - space_p).full )
- - {
- - return true;
- - }
- - return false;
- -}
- -
- /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
- diff --git a/src/lib/VSDXContentCollector.h b/src/lib/VSDXContentCollector.h
- index c381610..b786a2a 100644
- --- a/src/lib/VSDXContentCollector.h
- +++ b/src/lib/VSDXContentCollector.h
- @@ -105,9 +105,9 @@ public:
- void collectColours(const std::vector<Colour> &colours);
- void collectFont(unsigned short fontID, const WPXBinaryData &textStream, TextFormat format);
- void collectText(unsigned id, unsigned level, const WPXBinaryData &textStream, TextFormat format);
- - void collectVSDXCharStyle(unsigned id , unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour, unsigned langId,
- - double fontSize, bool bold, bool italic, bool underline, bool doubleunderline, bool strikeout, bool doublestrikeout,
- - bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, WPXString fontFace);
- + void collectVSDXCharStyle(unsigned id , unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour, double fontSize,
- + bool bold, bool italic, bool underline, bool doubleunderline, bool strikeout, bool doublestrikeout,
- + bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, VSDXFont fontFace);
- void collectVSDXParaStyle(unsigned id , unsigned level, unsigned charCount, double indFirst, double indLeft, double indRight,
- double spLine, double spBefore, double spAfter, unsigned char align, unsigned flags);
- void collectTextBlock(unsigned id, unsigned level, double leftMargin, double rightMargin, double topMargin, double bottomMargin, unsigned char verticalAlign,
- @@ -124,9 +124,9 @@ public:
- double shadowOffsetX, double shadowOffsetY);
- void collectFillStyle(unsigned id, unsigned level, unsigned char colourIndexFG, unsigned char colourIndexBG, unsigned char fillPattern,
- unsigned char fillFGTransparency, unsigned char fillBGTransparency, unsigned char shadowPattern, Colour shfgc);
- - void collectCharIXStyle(unsigned id , unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour, unsigned langId,
- - double fontSize, bool bold, bool italic, bool underline, bool doubleunderline, bool strikeout, bool doublestrikeout,
- - bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, WPXString fontFace);
- + void collectCharIXStyle(unsigned id , unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour, double fontSize,
- + bool bold, bool italic, bool underline, bool doubleunderline, bool strikeout, bool doublestrikeout,
- + bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, VSDXFont fontFace);
- void collectParaIXStyle(unsigned id , unsigned level, unsigned charCount, double indFirst, double indLeft, double indRight,
- double spLine, double spBefore, double spAfter, unsigned char align, unsigned flags);
- void collectTextBlockStyle(unsigned id, unsigned level, double leftMargin, double rightMargin, double topMargin, double bottomMargin, unsigned char verticalAlign,
- @@ -161,8 +161,6 @@ private:
- void _flushCurrentPage();
- void _handleLevelChange(unsigned level);
- - void _appendUTF16LE(WPXString &text, WPXInputStream *input);
- - void _appendUCS4(WPXString &text, unsigned ucs4Character);
- void _handleForeignData(const WPXBinaryData &data);
- @@ -180,6 +178,8 @@ private:
- unsigned fillFGTransparency, unsigned fillBGTransparency,
- unsigned shadowPattern, Colour shfgc, double shadowOffsetX, double shadowOffsetY);
- + void appendCharacters(WPXString &text, const std::vector<unsigned char> &characters, TextFormat format);
- + void appendCharacters(WPXString &text, const std::vector<unsigned char> &characters);
- void _convertDataToString(WPXString &result, const WPXBinaryData &data, TextFormat format);
- bool parseFormatId( const char *formatString, unsigned short &result );
- @@ -219,7 +219,7 @@ private:
- bool m_noFill;
- bool m_noShow;
- std::vector<Colour> m_colours;
- - std::map<unsigned short, WPXString> m_fonts;
- + std::map<unsigned short, VSDXFont> m_fonts;
- unsigned m_currentLevel;
- bool m_isShapeStarted;
- std::map<unsigned, unsigned> &m_groupMemberships;
- diff --git a/src/lib/VSDXFieldList.h b/src/lib/VSDXFieldList.h
- index 7a9e9cd..7ae9cd8 100644
- --- a/src/lib/VSDXFieldList.h
- +++ b/src/lib/VSDXFieldList.h
- @@ -119,7 +119,7 @@ public:
- }
- bool empty() const
- {
- - return (!m_elements.size());
- + return (m_elements.empty());
- }
- VSDXFieldListElement *getElement(unsigned index);
- private:
- diff --git a/src/lib/VSDXGeometryList.h b/src/lib/VSDXGeometryList.h
- index 3d53816..af96a38 100644
- --- a/src/lib/VSDXGeometryList.h
- +++ b/src/lib/VSDXGeometryList.h
- @@ -66,7 +66,7 @@ public:
- void clear();
- bool empty() const
- {
- - return (!m_elements.size());
- + return (m_elements.empty());
- }
- VSDXGeometryListElement *getElement(unsigned index) const;
- std::vector<unsigned> getElementsOrder() const
- diff --git a/src/lib/VSDXParagraphList.h b/src/lib/VSDXParagraphList.h
- index dd1c893..1df29ec 100644
- --- a/src/lib/VSDXParagraphList.h
- +++ b/src/lib/VSDXParagraphList.h
- @@ -55,7 +55,7 @@ public:
- void clear();
- bool empty() const
- {
- - return (!m_elements.size());
- + return (m_elements.empty());
- }
- private:
- std::map<unsigned, VSDXParagraphListElement *> m_elements;
- diff --git a/src/lib/VSDXParser.cpp b/src/lib/VSDXParser.cpp
- index 9085cb7..4764686 100644
- --- a/src/lib/VSDXParser.cpp
- +++ b/src/lib/VSDXParser.cpp
- @@ -134,7 +134,6 @@ bool libvisio::VSDXParser::parseDocument(WPXInputStream *input)
- if (ptr.Type == VSD_FONTFACES)
- PtrList.insert(PtrList.begin(),ptr);
- -// PtrList.push_back(ptr);
- else if (ptr.Type != 0)
- PtrList.push_back(ptr);
- }
- @@ -1669,7 +1668,9 @@ void libvisio::VSDXParser::readFont(WPXInputStream *input, unsigned fontID)
- void libvisio::VSDXParser::readFontIX(WPXInputStream *input)
- {
- - input->seek(6, WPX_SEEK_CUR);
- + input->seek(2, WPX_SEEK_CUR);
- + unsigned char codePage = readU8(input);
- + input->seek(3, WPX_SEEK_CUR);
- ::WPXBinaryData textStream;
- for (unsigned i = 0; i < m_header.dataLength - 6; i++)
- @@ -1679,7 +1680,43 @@ void libvisio::VSDXParser::readFontIX(WPXInputStream *input)
- break;
- textStream.append(curchar);
- }
- - m_collector->collectFont((unsigned short) m_header.id, textStream, libvisio::VSD_TEXT_ANSI);
- + TextFormat format = libvisio::VSD_TEXT_ANSI;
- + switch (codePage)
- + {
- + case 0: // ANSI
- + format = libvisio::VSD_TEXT_ANSI;
- + break;
- + case 0xa1: // GREEK
- + format = libvisio::VSD_TEXT_GREEK;
- + break;
- + case 0xa2: // TURKISH
- + format = libvisio::VSD_TEXT_TURKISH;
- + break;
- + case 0xa3: // VIETNAMESE
- + format = libvisio::VSD_TEXT_VIETNAMESE;
- + break;
- + case 0xb1: // HEBREW
- + format = libvisio::VSD_TEXT_HEBREW;
- + break;
- + case 0xb2: // ARABIC
- + format = libvisio::VSD_TEXT_ARABIC;
- + break;
- + case 0xba: // BALTIC
- + format = libvisio::VSD_TEXT_BALTIC;
- + break;
- + case 0xcc: // RUSSIAN
- + format = libvisio::VSD_TEXT_RUSSIAN;
- + break;
- + case 0xde: // THAI
- + format = libvisio::VSD_TEXT_THAI;
- + break;
- + case 0xee: // CENTRAL EUROPE
- + format = libvisio::VSD_TEXT_CENTRAL_EUROPE;
- + break;
- + default:
- + break;
- + }
- + m_collector->collectFont((unsigned short) m_header.id, textStream, format);
- }
- /* StyleSheet readers */
- diff --git a/src/lib/VSDXShapeList.h b/src/lib/VSDXShapeList.h
- index 6bb6967..17ae708 100644
- --- a/src/lib/VSDXShapeList.h
- +++ b/src/lib/VSDXShapeList.h
- @@ -50,7 +50,7 @@ public:
- void clear();
- bool empty() const
- {
- - return (!m_elements.size());
- + return (m_elements.empty());
- }
- private:
- std::map<unsigned, VSDXShapeListElement *> m_elements;
- diff --git a/src/lib/VSDXStyles.h b/src/lib/VSDXStyles.h
- index a58990c..3d610aa 100644
- --- a/src/lib/VSDXStyles.h
- +++ b/src/lib/VSDXStyles.h
- @@ -89,7 +89,6 @@ struct VSDXCharStyle
- charCount(0),
- faceID(0),
- colour(),
- - langID(0),
- size(12.0/72.0),
- bold(false),
- italic(false),
- @@ -102,12 +101,11 @@ struct VSDXCharStyle
- smallcaps(false),
- superscript(false),
- subscript(false),
- - face("Arial") {}
- - VSDXCharStyle(unsigned cc, unsigned short id, Colour c, unsigned lang, double s, bool b, bool i, bool u, bool du, bool so, bool dso, bool ac, bool ic, bool sc, bool super, bool sub, WPXString f) :
- + face() {}
- + VSDXCharStyle(unsigned cc, unsigned short id, Colour c, double s, bool b, bool i, bool u, bool du, bool so, bool dso, bool ac, bool ic, bool sc, bool super, bool sub, VSDXFont f) :
- charCount(cc),
- faceID(id),
- colour(c),
- - langID(lang),
- size(s),
- bold(b),
- italic(i),
- @@ -125,7 +123,6 @@ struct VSDXCharStyle
- unsigned charCount;
- unsigned short faceID;
- Colour colour;
- - unsigned langID;
- double size;
- bool bold;
- bool italic;
- @@ -138,7 +135,7 @@ struct VSDXCharStyle
- bool smallcaps;
- bool superscript;
- bool subscript;
- - WPXString face;
- + VSDXFont face;
- };
- struct VSDXParaStyle
- diff --git a/src/lib/VSDXStylesCollector.cpp b/src/lib/VSDXStylesCollector.cpp
- index 74ea41c..402cf62 100644
- --- a/src/lib/VSDXStylesCollector.cpp
- +++ b/src/lib/VSDXStylesCollector.cpp
- @@ -243,10 +243,10 @@ void libvisio::VSDXStylesCollector::collectVSDXParaStyle(unsigned /* id */ , uns
- _handleLevelChange(level);
- }
- -void libvisio::VSDXStylesCollector::collectVSDXCharStyle(unsigned /*id*/ , unsigned level, unsigned /*charCount*/, unsigned short /*fontID*/, Colour /*fontColour*/,
- - unsigned /*langId*/, double /*fontSize*/, bool /*bold*/, bool /*italic*/, bool /*underline*/,
- +void libvisio::VSDXStylesCollector::collectVSDXCharStyle(unsigned /*id*/ , unsigned level, unsigned /*charCount*/, unsigned short /*fontID*/,
- + Colour /*fontColour*/, double /*fontSize*/, bool /*bold*/, bool /*italic*/, bool /*underline*/,
- bool /* doubleunderline */, bool /* strikeout */, bool /* doublestrikeout */, bool /* allcaps */,
- - bool /* initcaps */, bool /* smallcaps */, bool /* superscript */, bool /* subscript */, WPXString /*fontFace*/)
- + bool /* initcaps */, bool /* smallcaps */, bool /* superscript */, bool /* subscript */, VSDXFont /*fontFace*/)
- {
- _handleLevelChange(level);
- }
- @@ -324,14 +324,14 @@ void libvisio::VSDXStylesCollector::collectParaIXStyle(unsigned /*id*/, unsigned
- }
- -void libvisio::VSDXStylesCollector::collectCharIXStyle(unsigned /*id*/ , unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour,
- - unsigned langID, double fontSize, bool bold, bool italic, bool underline, bool doubleunderline,
- +void libvisio::VSDXStylesCollector::collectCharIXStyle(unsigned /*id*/ , unsigned level, unsigned charCount, unsigned short fontID,
- + Colour fontColour, double fontSize, bool bold, bool italic, bool underline, bool doubleunderline,
- bool strikeout, bool doublestrikeout, bool allcaps, bool initcaps, bool smallcaps,
- - bool superscript, bool subscript, WPXString fontFace)
- + bool superscript, bool subscript, VSDXFont fontFace)
- {
- _handleLevelChange(level);
- if (!m_charStyle)
- - m_charStyle = new VSDXCharStyle(charCount, fontID, fontColour, langID, fontSize, bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
- + m_charStyle = new VSDXCharStyle(charCount, fontID, fontColour, fontSize, bold, italic, underline, doubleunderline, strikeout, doublestrikeout,
- allcaps, initcaps, smallcaps, superscript, subscript, fontFace);
- }
- diff --git a/src/lib/VSDXStylesCollector.h b/src/lib/VSDXStylesCollector.h
- index 9aa8497..302d41f 100644
- --- a/src/lib/VSDXStylesCollector.h
- +++ b/src/lib/VSDXStylesCollector.h
- @@ -96,9 +96,9 @@ public:
- void collectFont(unsigned short fontID, const ::WPXBinaryData &textStream, TextFormat format);
- void collectText(unsigned id, unsigned level, const ::WPXBinaryData &textStream, TextFormat format);
- - void collectVSDXCharStyle(unsigned id , unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour, unsigned langId,
- + void collectVSDXCharStyle(unsigned id , unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour,
- double fontSize, bool bold, bool italic, bool underline, bool doubleunderline, bool strikeout, bool doublestrikeout,
- - bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, WPXString fontFace);
- + bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, VSDXFont fontFace);
- void collectVSDXParaStyle(unsigned id , unsigned level, unsigned charCount, double indFirst, double indLeft, double indRight,
- double spLine, double spBefore, double spAfter, unsigned char align, unsigned flags);
- void collectTextBlock(unsigned id, unsigned level, double leftMargin, double rightMargin, double topMargin, double bottomMargin, unsigned char verticalAlign,
- @@ -117,9 +117,9 @@ public:
- double shadowOffsetX, double shadowOffsetY);
- void collectFillStyle(unsigned id, unsigned level, unsigned char colourIndexFG, unsigned char colourIndexBG, unsigned char fillPattern,
- unsigned char fillFGTransparency, unsigned char fillBGTransparency, unsigned char shadowPattern, Colour shfgc);
- - void collectCharIXStyle(unsigned id , unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour, unsigned langId,
- + void collectCharIXStyle(unsigned id , unsigned level, unsigned charCount, unsigned short fontID, Colour fontColour,
- double fontSize, bool bold, bool italic, bool underline, bool doubleunderline, bool strikeout, bool doublestrikeout,
- - bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, WPXString fontFace);
- + bool allcaps, bool initcaps, bool smallcaps, bool superscript, bool subscript, VSDXFont fontFace);
- void collectParaIXStyle(unsigned id , unsigned level, unsigned charCount, double indFirst, double indLeft, double indRight,
- double spLine, double spBefore, double spAfter, unsigned char align, unsigned flags);
- void collectTextBlockStyle(unsigned id, unsigned level, double leftMargin, double rightMargin, double topMargin, double bottomMargin, unsigned char verticalAlign,
- diff --git a/src/lib/VSDXTypes.h b/src/lib/VSDXTypes.h
- index 4c9b8d2..4d5d0c3 100644
- --- a/src/lib/VSDXTypes.h
- +++ b/src/lib/VSDXTypes.h
- @@ -176,7 +176,20 @@ struct ForeignData
- data(fd.data) {}
- };
- -enum TextFormat { VSD_TEXT_ANSI, VSD_TEXT_UTF16 };
- +enum TextFormat
- +{
- + VSD_TEXT_ANSI = 0,
- + VSD_TEXT_GREEK,
- + VSD_TEXT_TURKISH,
- + VSD_TEXT_VIETNAMESE,
- + VSD_TEXT_HEBREW,
- + VSD_TEXT_ARABIC,
- + VSD_TEXT_BALTIC,
- + VSD_TEXT_RUSSIAN,
- + VSD_TEXT_THAI,
- + VSD_TEXT_CENTRAL_EUROPE,
- + VSD_TEXT_UTF16
- +};
- class VSDXName
- {
- @@ -198,6 +211,13 @@ public:
- TextFormat m_format;
- };
- +struct VSDXFont
- +{
- + WPXString name;
- + TextFormat encoding;
- + VSDXFont() : name("Arial"), encoding(libvisio::VSD_TEXT_ANSI) {}
- +};
- +
- } // namespace libvisio
- #endif /* VSDXTYPES_H */
- diff --git a/src/lib/libvisio_utils.cpp b/src/lib/libvisio_utils.cpp
- index 05e04cf..f881bdb 100644
- --- a/src/lib/libvisio_utils.cpp
- +++ b/src/lib/libvisio_utils.cpp
- @@ -108,4 +108,5 @@ double libvisio::readDouble(WPXInputStream *input)
- return tmpUnion.d;
- }
- +
- /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
- diff --git a/src/lib/libvisio_utils.h b/src/lib/libvisio_utils.h
- index 23dd559..593e419 100644
- --- a/src/lib/libvisio_utils.h
- +++ b/src/lib/libvisio_utils.h
- @@ -31,7 +31,10 @@
- #ifndef __LIBVISIO_UTILS_H__
- #define __LIBVISIO_UTILS_H__
- +#include <vector>
- #include <stdio.h>
- +#include <libwpd/libwpd.h>
- +#include "VSDXTypes.h"
- #ifdef _MSC_VER
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement