Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
6d382658
Kaydet (Commit)
6d382658
authored
Ock 02, 2015
tarafından
David Tardon
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
upload libvisio 0.1.1
Change-Id: I6587bd27d07ae39074d3c304614e3bc831afe8c8
üst
4cf326dd
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
2 additions
and
1170 deletions
+2
-1170
download.lst
download.lst
+2
-2
UnpackedTarball_libvisio.mk
external/libvisio/UnpackedTarball_libvisio.mk
+0
-6
libvisio_quote.patch.1
external/libvisio/libvisio_quote.patch.1
+0
-11
vsd-metadata.patch.1
external/libvisio/vsd-metadata.patch.1
+0
-651
vsdx-metadata.patch.1
external/libvisio/vsdx-metadata.patch.1
+0
-500
No files found.
download.lst
Dosyayı görüntüle @
6d382658
...
...
@@ -138,8 +138,8 @@ export SERF_TARBALL := serf-1.2.1.tar.bz2
export SWING_TARBALL := 35c94d2df8893241173de1d16b6034c0-swingExSrc.zip
export UCPP_TARBALL := 0168229624cfac409e766913506961a8-ucpp-1.3.2.tar.gz
export VIGRA_TARBALL := d62650a6f908e85643e557a236ea989c-vigra1.6.0.tar.gz
export VISIO_MD5SUM :=
931588332ba44682c9cd5eefbd358ab4
export VISIO_TARBALL := libvisio-0.1.
0
.tar.bz2
export VISIO_MD5SUM :=
726c1f5be65eb7d649e0d48b63d920e7
export VISIO_TARBALL := libvisio-0.1.
1
.tar.bz2
export WPD_MD5SUM := 0773d79a1f240ef9f4f20242b13c5bb7
export WPD_TARBALL := libwpd-0.10.0.tar.bz2
export WPG_MD5SUM := 17da9770cb8b317b7633f9807b32b71a
...
...
external/libvisio/UnpackedTarball_libvisio.mk
Dosyayı görüntüle @
6d382658
...
...
@@ -11,10 +11,4 @@ $(eval $(call gb_UnpackedTarball_UnpackedTarball,libvisio))
$(eval $(call gb_UnpackedTarball_set_tarball,libvisio,$(VISIO_TARBALL)))
$(eval $(call gb_UnpackedTarball_add_patches,libvisio,\
external/libvisio/libvisio_quote.patch.1 \
external/libvisio/vsdx-metadata.patch.1 \
external/libvisio/vsd-metadata.patch.1 \
))
# vim: set noet sw=4 ts=4:
external/libvisio/libvisio_quote.patch.1
deleted
100644 → 0
Dosyayı görüntüle @
4cf326dd
--- libvisio/src/lib/Makefile.in.orig 2014-06-01 22:54:30.212400000 +0200
+++ libvisio/src/lib/Makefile.in 2014-06-01 22:54:34.112400000 +0200
@@ -776,7 +776,7 @@
$(top_builddir)/src/lib/tokenhash.h : $(top_builddir)/src/lib/tokens.gperf
$(GPERF) --compare-strncmp -C -m 20 $(top_builddir)/src/lib/tokens.gperf \
- | $(SED) -e "s/(char\*)0/(char\*)0, 0/g" > $(top_builddir)/src/lib/tokenhash.h
+ | $(SED) -e 's/(char\*)0/(char\*)0, 0/g' > $(top_builddir)/src/lib/tokenhash.h
$(top_builddir)/src/lib/tokens.gperf : $(top_srcdir)/src/lib/tokens.txt gentoken.pl
perl $(top_srcdir)/src/lib/gentoken.pl $(top_srcdir)/src/lib/tokens.txt \
external/libvisio/vsd-metadata.patch.1
deleted
100644 → 0
Dosyayı görüntüle @
4cf326dd
commit a7f7ccbd4089965511dc59c3ae7869b360c8ca9f
Author: Miklos Vajna <vmiklos@collabora.co.uk>
Date: Tue Dec 2 17:05:23 2014 +0100
Move _appendUCS4() to libvisio_utils
diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 822a5f4..083fd91 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -11,7 +11,6 @@
#include <stack>
#include <boost/spirit/include/classic.hpp>
#include <unicode/ucnv.h>
-#include <unicode/utypes.h>
#include <unicode/utf8.h>
#include "VSDContentCollector.h"
@@ -33,27 +32,6 @@ static unsigned bitmapId = 0;
#define SURROGATE_VALUE(h,l) (((h) - 0xd800) * 0x400 + (l) - 0xdc00 + 0x10000)
-namespace
-{
-
-static void _appendUCS4(librevenge::RVNGString &text, UChar32 ucs4Character)
-{
- // Convert carriage returns to new line characters
- // Writerperfect/LibreOffice will replace them by <text:line-break>
- if (ucs4Character == (UChar32) 0x0d || ucs4Character == (UChar32) 0x0e)
- ucs4Character = (UChar32) '\n';
-
- unsigned char outbuf[U8_MAX_LENGTH+1];
- int i = 0;
- U8_APPEND_UNSAFE(&outbuf[0], i, ucs4Character);
- outbuf[i] = 0;
-
- text.append((char *)outbuf);
-}
-
-} // anonymous namespace
-
-
libvisio::VSDContentCollector::VSDContentCollector(
librevenge::RVNGDrawingInterface *painter,
std::vector<std::map<unsigned, XForm> > &groupXFormsSequence,
@@ -2870,7 +2848,7 @@ void libvisio::VSDContentCollector::appendCharacters(librevenge::RVNGString &tex
ucs4Character = 0x20;
else
ucs4Character = symbolmap[*iter - 0x20];
- _appendUCS4(text, ucs4Character);
+ appendUCS4(text, ucs4Character);
}
}
else
@@ -2934,7 +2912,7 @@ void libvisio::VSDContentCollector::appendCharacters(librevenge::RVNGString &tex
if (0x1e == ucs4Character)
_appendField(text);
else
- _appendUCS4(text, ucs4Character);
+ appendUCS4(text, ucs4Character);
}
}
}
@@ -2960,7 +2938,7 @@ void libvisio::VSDContentCollector::appendCharacters(librevenge::RVNGString &tex
if (0xfffc == ucs4Character)
_appendField(text);
else
- _appendUCS4(text, ucs4Character);
+ appendUCS4(text, ucs4Character);
}
}
}
diff --git a/src/lib/libvisio_utils.cpp b/src/lib/libvisio_utils.cpp
index b137e24..e622417 100644
--- a/src/lib/libvisio_utils.cpp
+++ b/src/lib/libvisio_utils.cpp
@@ -107,6 +107,20 @@ const librevenge::RVNGString libvisio::getColourString(const Colour &c)
return sColour;
}
+void libvisio::appendUCS4(librevenge::RVNGString &text, UChar32 ucs4Character)
+{
+ // Convert carriage returns to new line characters
+ // Writerperfect/LibreOffice will replace them by <text:line-break>
+ if (ucs4Character == (UChar32) 0x0d || ucs4Character == (UChar32) 0x0e)
+ ucs4Character = (UChar32) '\n';
+
+ unsigned char outbuf[U8_MAX_LENGTH+1];
+ int i = 0;
+ U8_APPEND_UNSAFE(&outbuf[0], i, ucs4Character);
+ outbuf[i] = 0;
+
+ text.append((char *)outbuf);
+}
/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff --git a/src/lib/libvisio_utils.h b/src/lib/libvisio_utils.h
index 08ebb04..60be13f 100644
--- a/src/lib/libvisio_utils.h
+++ b/src/lib/libvisio_utils.h
@@ -47,6 +47,7 @@ typedef unsigned __int64 uint64_t;
#include <librevenge/librevenge.h>
#include <librevenge-stream/librevenge-stream.h>
+#include <unicode/utypes.h>
// debug message includes source file and line number
//#define VERBOSE_DEBUG 1
@@ -79,6 +80,8 @@ double readDouble(librevenge::RVNGInputStream *input);
const librevenge::RVNGString getColourString(const Colour &c);
+void appendUCS4(librevenge::RVNGString &text, UChar32 ucs4Character);
+
class EndOfStreamException
{
};
commit 005b45ddf64a8320a0143336d431a016507d2085
Author: Miklos Vajna <vmiklos@collabora.co.uk>
Date: Tue Dec 2 17:01:35 2014 +0100
fdo#86729 VSD: import metadata
Only title as a start.
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 955aac4..f4d86fa 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -39,6 +39,7 @@ libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_SOURCES = \
VSDPages.cpp \
VSDParagraphList.cpp \
VSDParser.cpp \
+ VSDMetaData.cpp \
VSDShapeList.cpp \
VSDStencils.cpp \
VSDStyles.cpp \
@@ -58,6 +59,7 @@ libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_SOURCES = \
VSDPages.h \
VSDParagraphList.h \
VSDParser.h \
+ VSDMetaData.h \
VSDShapeList.h \
VSDStencils.h \
VSDStyles.h \
diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in
index a51ac14..0f8dd91 100644
--- a/src/lib/Makefile.in
+++ b/src/lib/Makefile.in
@@ -131,10 +131,10 @@ am_libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_OBJECTS = \
VSDInternalStream.lo VSDCharacterList.lo \
VSDContentCollector.lo VSDFieldList.lo VSDGeometryList.lo \
VSDOutputElementList.lo VSDPages.lo VSDParagraphList.lo \
- VSDParser.lo VSDShapeList.lo VSDStencils.lo VSDStyles.lo \
- VSDStylesCollector.lo VSDXMLHelper.lo VDXParser.lo \
- VSDXMLParserBase.lo VSDXMLTokenMap.lo VSDXParser.lo \
- VSDXTheme.lo VSDXMetaData.lo $(am__objects_1)
+ VSDParser.lo VSDMetaData.lo VSDShapeList.lo VSDStencils.lo \
+ VSDStyles.lo VSDStylesCollector.lo VSDXMLHelper.lo \
+ VDXParser.lo VSDXMLParserBase.lo VSDXMLTokenMap.lo \
+ VSDXParser.lo VSDXTheme.lo VSDXMetaData.lo $(am__objects_1)
libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_OBJECTS = $(am_libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -400,6 +400,7 @@ libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_SOURCES = \
VSDPages.cpp \
VSDParagraphList.cpp \
VSDParser.cpp \
+ VSDMetaData.cpp \
VSDShapeList.cpp \
VSDStencils.cpp \
VSDStyles.cpp \
@@ -419,6 +420,7 @@ libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_SOURCES = \
VSDPages.h \
VSDParagraphList.h \
VSDParser.h \
+ VSDMetaData.h \
VSDShapeList.h \
VSDStencils.h \
VSDStyles.h \
@@ -539,6 +541,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VSDFieldList.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VSDGeometryList.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VSDInternalStream.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VSDMetaData.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VSDOutputElementList.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VSDPages.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VSDParagraphList.Plo@am__quote@
diff --git a/src/lib/VSDMetaData.cpp b/src/lib/VSDMetaData.cpp
new file mode 100644
index 0000000..209cc34
--- /dev/null
+++ b/src/lib/VSDMetaData.cpp
@@ -0,0 +1,180 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * This file is part of the libvisio project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "VSDMetaData.h"
+#include <unicode/ucnv.h>
+
+libvisio::VSDMetaData::VSDMetaData()
+{
+}
+
+libvisio::VSDMetaData::~VSDMetaData()
+{
+}
+
+bool libvisio::VSDMetaData::parse(librevenge::RVNGInputStream *input)
+{
+ if (!input)
+ return false;
+
+ readPropertySetStream(input);
+
+ return true;
+}
+
+void libvisio::VSDMetaData::readPropertySetStream(librevenge::RVNGInputStream *input)
+{
+ // ByteOrder
+ input->seek(2, librevenge::RVNG_SEEK_CUR);
+ // Version
+ input->seek(2, librevenge::RVNG_SEEK_CUR);
+ // SystemIdentifier
+ input->seek(4, librevenge::RVNG_SEEK_CUR);
+ // CLSID
+ input->seek(16, librevenge::RVNG_SEEK_CUR);
+ // NumPropertySets
+ input->seek(4, librevenge::RVNG_SEEK_CUR);
+ // FMTID0
+ input->seek(16, librevenge::RVNG_SEEK_CUR);
+ uint32_t offset0 = readU32(input);
+ readPropertySet(input, offset0);
+}
+
+void libvisio::VSDMetaData::readPropertySet(librevenge::RVNGInputStream *input, uint32_t offset)
+{
+ input->seek(offset, librevenge::RVNG_SEEK_SET);
+
+ // Size
+ input->seek(4, librevenge::RVNG_SEEK_CUR);
+ uint32_t numProperties = readU32(input);
+ for (uint32_t i = 0; i < numProperties; ++i)
+ readPropertyIdentifierAndOffset(input);
+ for (uint32_t i = 0; i < numProperties; ++i)
+ {
+ if (i >= m_idsAndOffsets.size())
+ break;
+ readTypedPropertyValue(input, i, offset + m_idsAndOffsets[i].second);
+ }
+}
+
+#define CODEPAGE_PROPERTY_IDENTIFIER 0x00000001
+
+uint32_t libvisio::VSDMetaData::getCodePage()
+{
+ for (size_t i = 0; i < m_idsAndOffsets.size(); ++i)
+ {
+ if (m_idsAndOffsets[i].first == CODEPAGE_PROPERTY_IDENTIFIER)
+ {
+ if (i >= m_typedPropertyValues.size())
+ break;
+ return m_typedPropertyValues[i];
+ }
+ }
+
+ return 0;
+}
+
+void libvisio::VSDMetaData::readPropertyIdentifierAndOffset(librevenge::RVNGInputStream *input)
+{
+ uint32_t propertyIdentifier = readU32(input);
+ uint32_t offset = readU32(input);
+ m_idsAndOffsets.push_back(std::make_pair(propertyIdentifier, offset));
+}
+
+#define VT_I2 0x0002
+#define VT_LPSTR 0x001E
+
+#define PIDSI_TITLE 0x00000002
+
+void libvisio::VSDMetaData::readTypedPropertyValue(librevenge::RVNGInputStream *input, uint32_t index, uint32_t offset)
+{
+ input->seek(offset, librevenge::RVNG_SEEK_SET);
+ uint16_t type = readU16(input);
+ // Padding
+ input->seek(2, librevenge::RVNG_SEEK_CUR);
+
+ if (type == VT_I2)
+ {
+ uint16_t value = readU16(input);
+ m_typedPropertyValues[index] = value;
+ }
+ else if (type == VT_LPSTR)
+ {
+ librevenge::RVNGString string = readCodePageString(input);
+ if (!string.empty())
+ {
+ if (index >= m_idsAndOffsets.size())
+ return;
+
+ switch (m_idsAndOffsets[index].first)
+ {
+ case PIDSI_TITLE:
+ m_metaData.insert("dc:title", string);
+ break;
+ }
+ }
+ }
+}
+
+librevenge::RVNGString libvisio::VSDMetaData::readCodePageString(librevenge::RVNGInputStream *input)
+{
+ uint32_t size = readU32(input);
+
+ std::vector<unsigned char> characters;
+ for (uint32_t i = 0; i < size; ++i)
+ characters.push_back(readU8(input));
+
+ uint32_t codepage = getCodePage();
+ librevenge::RVNGString string;
+
+ if (codepage == 65001)
+ {
+ // http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130%28v=vs.85%29.aspx
+ // says this is UTF-8.
+ for (std::vector<unsigned char>::const_iterator i = characters.begin(); i != characters.end(); ++i)
+ string.append((const char)*i);
+ }
+ else
+ {
+ UErrorCode status = U_ZERO_ERROR;
+ UConverter *conv = 0;
+
+ switch (codepage)
+ {
+ case 1252:
+ // http://msdn.microsoft.com/en-us/goglobal/bb964654
+ conv = ucnv_open("windows-1252", &status);
+ break;
+ }
+
+ if (U_SUCCESS(status) && conv)
+ {
+ const char *src = (const char *)&characters[0];
+ const char *srcLimit = (const char *)src + characters.size();
+ while (src < srcLimit)
+ {
+ UChar32 ucs4Character = ucnv_getNextUChar(conv, &src, srcLimit, &status);
+ if (U_SUCCESS(status) && U_IS_UNICODE_CHAR(ucs4Character))
+ appendUCS4(string, ucs4Character);
+ }
+ }
+
+ if (conv)
+ ucnv_close(conv);
+ }
+
+ return string;
+}
+
+const librevenge::RVNGPropertyList &libvisio::VSDMetaData::getMetaData()
+{
+ return m_metaData;
+}
+
+/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff --git a/src/lib/VSDMetaData.h b/src/lib/VSDMetaData.h
new file mode 100644
index 0000000..c185894
--- /dev/null
+++ b/src/lib/VSDMetaData.h
@@ -0,0 +1,51 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * This file is part of the libvisio project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef __VSDMETADATA_H__
+#define __VSDMETADATA_H__
+
+#include <vector>
+#include <utility>
+#include <map>
+#include <librevenge-stream/librevenge-stream.h>
+#include <librevenge/librevenge.h>
+#include "libvisio_utils.h"
+
+namespace libvisio
+{
+
+class VSDMetaData
+{
+public:
+ VSDMetaData();
+ ~VSDMetaData();
+ bool parse(librevenge::RVNGInputStream *input);
+ const librevenge::RVNGPropertyList &getMetaData();
+
+private:
+ VSDMetaData(const VSDMetaData &);
+ VSDMetaData &operator=(const VSDMetaData &);
+
+ void readPropertySetStream(librevenge::RVNGInputStream *input);
+ void readPropertySet(librevenge::RVNGInputStream *input, uint32_t offset);
+ void readPropertyIdentifierAndOffset(librevenge::RVNGInputStream *input);
+ void readTypedPropertyValue(librevenge::RVNGInputStream *input, uint32_t index, uint32_t offset);
+ librevenge::RVNGString readCodePageString(librevenge::RVNGInputStream *input);
+
+ uint32_t getCodePage();
+
+ std::vector< std::pair<uint32_t, uint32_t> > m_idsAndOffsets;
+ std::map<uint16_t, uint16_t> m_typedPropertyValues;
+ librevenge::RVNGPropertyList m_metaData;
+};
+
+} // namespace libvisio
+
+#endif // __VSDMETADATA_H__
+/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index 1b8133f..9d6e175 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -19,9 +19,10 @@
#include "VSDDocumentStructure.h"
#include "VSDContentCollector.h"
#include "VSDStylesCollector.h"
+#include "VSDMetaData.h"
-libvisio::VSDParser::VSDParser(librevenge::RVNGInputStream *input, librevenge::RVNGDrawingInterface *painter)
- : m_input(input), m_painter(painter), m_header(), m_collector(0), m_shapeList(), m_currentLevel(0),
+libvisio::VSDParser::VSDParser(librevenge::RVNGInputStream *input, librevenge::RVNGDrawingInterface *painter, librevenge::RVNGInputStream *container)
+ : m_input(input), m_painter(painter), m_container(container), m_header(), m_collector(0), m_shapeList(), m_currentLevel(0),
m_stencils(), m_currentStencil(0), m_shape(), m_isStencilStarted(false), m_isInStyles(false),
m_currentShapeLevel(0), m_currentShapeID(MINUS_ONE), m_extractStencils(false), m_colours(),
m_isBackgroundPage(false), m_isShapeStarted(false), m_shadowOffsetX(0.0), m_shadowOffsetY(0.0),
@@ -136,6 +137,9 @@ bool libvisio::VSDParser::parseMain()
VSDContentCollector contentCollector(m_painter, groupXFormsSequence, groupMembershipsSequence, documentPageShapeOrders, styles, m_stencils);
m_collector = &contentCollector;
+ if (m_container)
+ parseMetaData();
+
VSD_DEBUG_MSG(("VSDParser::parseMain 2nd pass\n"));
if (!parseDocument(&trailerStream, shift))
return false;
@@ -143,6 +147,25 @@ bool libvisio::VSDParser::parseMain()
return true;
}
+bool libvisio::VSDParser::parseMetaData()
+{
+ if (!m_container)
+ return false;
+ m_container->seek(0, librevenge::RVNG_SEEK_SET);
+ if (!m_container->isStructured())
+ return false;
+ librevenge::RVNGInputStream *stream = m_container->getSubStreamByName("\x05SummaryInformation");
+ if (!stream)
+ return false;
+
+ VSDMetaData metaData;
+ metaData.parse(stream);
+ m_collector->collectMetaData(metaData.getMetaData());
+
+ delete stream;
+ return true;
+}
+
bool libvisio::VSDParser::parseDocument(librevenge::RVNGInputStream *input, unsigned shift)
{
try
diff --git a/src/lib/VSDParser.h b/src/lib/VSDParser.h
index aabb0db..b2bba54 100644
--- a/src/lib/VSDParser.h
+++ b/src/lib/VSDParser.h
@@ -45,7 +45,7 @@ struct Pointer
class VSDParser
{
public:
- explicit VSDParser(librevenge::RVNGInputStream *input, librevenge::RVNGDrawingInterface *painter);
+ explicit VSDParser(librevenge::RVNGInputStream *input, librevenge::RVNGDrawingInterface *painter, librevenge::RVNGInputStream *container = 0);
virtual ~VSDParser();
bool parseMain();
bool extractStencils();
@@ -113,6 +113,8 @@ protected:
// parser of one pass
bool parseDocument(librevenge::RVNGInputStream *input, unsigned shift);
+ bool parseMetaData();
+
// Stream handlers
void handleStreams(librevenge::RVNGInputStream *input, unsigned ptrType, unsigned shift, unsigned level);
void handleStream(const Pointer &ptr, unsigned idx, unsigned level);
@@ -133,6 +135,7 @@ protected:
librevenge::RVNGInputStream *m_input;
librevenge::RVNGDrawingInterface *m_painter;
+ librevenge::RVNGInputStream *m_container;
ChunkHeader m_header;
VSDCollector *m_collector;
VSDShapeList m_shapeList;
diff --git a/src/lib/VisioDocument.cpp b/src/lib/VisioDocument.cpp
index be14b68..f834478 100644
--- a/src/lib/VisioDocument.cpp
+++ b/src/lib/VisioDocument.cpp
@@ -158,7 +158,7 @@ static bool parseBinaryVisioDocument(librevenge::RVNGInputStream *input, libreve
parser = new libvisio::VSD6Parser(docStream, painter);
break;
case 11:
- parser = new libvisio::VSDParser(docStream, painter);
+ parser = new libvisio::VSDParser(docStream, painter, input);
break;
default:
break;
commit 2e467f4e487bd8fd8440057e1d79f89b2a966419
Author: Miklos Vajna <vmiklos@collabora.co.uk>
Date: Tue Dec 2 17:02:14 2014 +0100
fdo#86664 VSD: import Creation/ModifiedTime
diff --git a/src/lib/VSDMetaData.cpp b/src/lib/VSDMetaData.cpp
index 209cc34..3fd5bf9 100644
--- a/src/lib/VSDMetaData.cpp
+++ b/src/lib/VSDMetaData.cpp
@@ -8,6 +8,7 @@
*/
#include "VSDMetaData.h"
+#include <cmath>
#include <unicode/ucnv.h>
libvisio::VSDMetaData::VSDMetaData()
@@ -172,6 +173,58 @@ librevenge::RVNGString libvisio::VSDMetaData::readCodePageString(librevenge::RVN
return string;
}
+bool libvisio::VSDMetaData::parseTimes(librevenge::RVNGInputStream *input)
+{
+ // Parse the header
+ // HeaderSignature: 8 bytes
+ // HeaderCLSID: 16 bytes
+ // MinorVersion: 2 bytes
+ // MajorVersion: 2 bytes
+ // ByteOrder: 2 bytes
+ input->seek(30, librevenge::RVNG_SEEK_CUR);
+ uint16_t sectorShift = readU16(input);
+ // MiniSectorShift: 2 bytes
+ // Reserved: 6 bytes
+ // NumDirectorySectors: 4 bytes
+ // NumFATSectors: 4 bytes
+ input->seek(16, librevenge::RVNG_SEEK_CUR);
+ uint32_t firstDirSectorLocation = readU32(input);
+
+ // Seek to the Root Directory Entry
+ size_t sectorSize = pow(2, sectorShift);
+ input->seek((firstDirSectorLocation + 1) * sectorSize, librevenge::RVNG_SEEK_SET);
+ // DirectoryEntryName: 64 bytes
+ // DirectoryEntryNameLength: 2 bytes
+ // ObjectType: 1 byte
+ // ColorFlag: 1 byte
+ // LeftSiblingID: 4 bytes
+ // RightSiblingID: 4 bytes
+ // ChildID: 4 bytes
+ // CLSID: 16 bytes
+ // StateBits: 4 bytes
+ // CreationTime: 8 bytes
+ input->seek(108, librevenge::RVNG_SEEK_CUR);
+ uint64_t modifiedTime = readU64(input);
+
+ // modifiedTime is number of 100ns since Jan 1 1601
+ static const uint64_t epoch = 11644473600;
+ time_t sec = (modifiedTime / 10000000) - epoch;
+ const struct tm *time = localtime(&sec);
+ if (time)
+ {
+ static const int MAX_BUFFER = 1024;
+ char buffer[MAX_BUFFER];
+ strftime(&buffer[0], MAX_BUFFER-1, "%Y-%m-%dT%H:%M:%SZ", time);
+ librevenge::RVNGString result;
+ result.append(buffer);
+ // Visio UI uses modifiedTime for both purposes.
+ m_metaData.insert("meta:creation-date", result);
+ m_metaData.insert("dc:date", result);
+ return true;
+ }
+ return false;
+}
+
const librevenge::RVNGPropertyList &libvisio::VSDMetaData::getMetaData()
{
return m_metaData;
diff --git a/src/lib/VSDMetaData.h b/src/lib/VSDMetaData.h
index c185894..581b0a2 100644
--- a/src/lib/VSDMetaData.h
+++ b/src/lib/VSDMetaData.h
@@ -26,6 +26,7 @@ public:
VSDMetaData();
~VSDMetaData();
bool parse(librevenge::RVNGInputStream *input);
+ bool parseTimes(librevenge::RVNGInputStream *input);
const librevenge::RVNGPropertyList &getMetaData();
private:
diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index 9d6e175..3af5bd0 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -160,6 +160,8 @@ bool libvisio::VSDParser::parseMetaData()
VSDMetaData metaData;
metaData.parse(stream);
+ m_container->seek(0, librevenge::RVNG_SEEK_SET);
+ metaData.parseTimes(m_container);
m_collector->collectMetaData(metaData.getMetaData());
delete stream;
commit 89ccb97fedc69e4508581ddcd93c9ea6740855c1
Author: Miklos Vajna <vmiklos@collabora.co.uk>
Date: Tue Dec 2 18:50:16 2014 +0100
error C3861: ´localtime´: identifier not found
Change-Id: Ic0ccfc0b6cdd030772d09e7d235c63d440ba2f1b
diff --git a/src/lib/VSDMetaData.cpp b/src/lib/VSDMetaData.cpp
index 3fd5bf9..61f01a9 100644
--- a/src/lib/VSDMetaData.cpp
+++ b/src/lib/VSDMetaData.cpp
@@ -10,6 +10,7 @@
#include "VSDMetaData.h"
#include <cmath>
#include <unicode/ucnv.h>
+#include <ctime>
libvisio::VSDMetaData::VSDMetaData()
{
external/libvisio/vsdx-metadata.patch.1
deleted
100644 → 0
Dosyayı görüntüle @
4cf326dd
commit 1b1fd1b07728590c94694b4e8b1b00058ca02d52
Author: Miklos Vajna <vmiklos@collabora.co.uk>
Date: Tue Nov 25 09:49:05 2014 +0100
fdo#86664 VSDX: import metadata
Only title as a start.
Change-Id: Id1b92992c75058f99b9c0c72d53c254110917ed7
Reviewed-on: https://gerrit.libreoffice.org/13108
Reviewed-by: Fridrich Strba <fridrich@documentfoundation.org>
Tested-by: Fridrich Strba <fridrich@documentfoundation.org>
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 6080d31..955aac4 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -75,6 +75,8 @@ libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_SOURCES = \
VSDXParser.h \
VSDXTheme.cpp \
VSDXTheme.h \
+ VSDXMetaData.cpp \
+ VSDXMetaData.h \
$(generated_files)
@@ -83,6 +85,7 @@ VSDXMLParserBase.lo : $(generated_files)
VSDXMLTokenMap.lo : $(generated_files)
VSDXParser.lo : $(generated_files)
VSDXTheme.lo : $(generated_files)
+VSDXMetaData.lo : $(generated_files)
$(top_builddir)/src/lib/tokens.h : $(top_builddir)/src/lib/tokens.gperf
diff --git a/src/lib/VSDCollector.h b/src/lib/VSDCollector.h
index 26875f5..594fcf0 100644
--- a/src/lib/VSDCollector.h
+++ b/src/lib/VSDCollector.h
@@ -139,6 +139,9 @@ public:
virtual void collectTextField(unsigned id, unsigned level, int nameId, int formatStringId) = 0;
virtual void collectNumericField(unsigned id, unsigned level, unsigned short format, double number, int formatStringId) = 0;
+ // Metadata
+ virtual void collectMetaData(const librevenge::RVNGPropertyList &metaData) = 0;
+
// Temporary hack
virtual void startPage(unsigned pageId) = 0;
virtual void endPage() = 0;
diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 9de0d30..822a5f4 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -2730,6 +2730,11 @@ void libvisio::VSDContentCollector::_handleLevelChange(unsigned level)
m_currentLevel = level;
}
+void libvisio::VSDContentCollector::collectMetaData(const librevenge::RVNGPropertyList &metaData)
+{
+ m_pages.setMetaData(metaData);
+}
+
void libvisio::VSDContentCollector::startPage(unsigned pageId)
{
if (m_isShapeStarted)
diff --git a/src/lib/VSDContentCollector.h b/src/lib/VSDContentCollector.h
index 38c6f72..a7d148a 100644
--- a/src/lib/VSDContentCollector.h
+++ b/src/lib/VSDContentCollector.h
@@ -155,6 +155,8 @@ public:
void collectStyleThemeReference(unsigned level, const boost::optional<long> &lineColour, const boost::optional<long> &fillColour,
const boost::optional<long> &shadowColour, const boost::optional<long> &fontColour);
+ virtual void collectMetaData(const librevenge::RVNGPropertyList &metaData);
+
// Field list
void collectFieldList(unsigned id, unsigned level);
diff --git a/src/lib/VSDPages.cpp b/src/lib/VSDPages.cpp
index e4a7792..544123b 100644
--- a/src/lib/VSDPages.cpp
+++ b/src/lib/VSDPages.cpp
@@ -68,6 +68,11 @@ void libvisio::VSDPages::addBackgroundPage(const libvisio::VSDPage &page)
m_backgroundPages[page.m_currentPageID] = page;
}
+void libvisio::VSDPages::setMetaData(const librevenge::RVNGPropertyList &metaData)
+{
+ m_metaData = metaData;
+}
+
void libvisio::VSDPages::draw(librevenge::RVNGDrawingInterface *painter)
{
if (!painter)
@@ -76,6 +81,7 @@ void libvisio::VSDPages::draw(librevenge::RVNGDrawingInterface *painter)
return;
painter->startDocument(librevenge::RVNGPropertyList());
+ painter->setDocumentMetaData(m_metaData);
for (unsigned i = 0; i < m_pages.size(); ++i)
{
diff --git a/src/lib/VSDPages.h b/src/lib/VSDPages.h
index e87fd31..56358c2 100644
--- a/src/lib/VSDPages.h
+++ b/src/lib/VSDPages.h
@@ -39,10 +39,12 @@ public:
void addPage(const VSDPage &page);
void addBackgroundPage(const VSDPage &page);
void draw(librevenge::RVNGDrawingInterface *painter);
+ void setMetaData(const librevenge::RVNGPropertyList &metaData);
private:
void _drawWithBackground(librevenge::RVNGDrawingInterface *painter, const VSDPage &page);
std::vector<VSDPage> m_pages;
std::map<unsigned, VSDPage> m_backgroundPages;
+ librevenge::RVNGPropertyList m_metaData;
};
diff --git a/src/lib/VSDStylesCollector.h b/src/lib/VSDStylesCollector.h
index 38c9082..22f73a1 100644
--- a/src/lib/VSDStylesCollector.h
+++ b/src/lib/VSDStylesCollector.h
@@ -152,6 +152,8 @@ public:
void collectTextField(unsigned id, unsigned level, int nameId, int formatStringId);
void collectNumericField(unsigned id, unsigned level, unsigned short format, double number, int formatStringId);
+ virtual void collectMetaData(const librevenge::RVNGPropertyList &) { }
+
// Temporary hack
void startPage(unsigned pageID);
void endPage();
diff --git a/src/lib/VSDXMetaData.cpp b/src/lib/VSDXMetaData.cpp
new file mode 100644
index 0000000..3cbd61d
--- /dev/null
+++ b/src/lib/VSDXMetaData.cpp
@@ -0,0 +1,113 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * This file is part of the libvisio project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "VSDXMetaData.h"
+#include "VSDXMLTokenMap.h"
+#include "libvisio_utils.h"
+
+libvisio::VSDXMetaData::VSDXMetaData()
+{
+}
+
+libvisio::VSDXMetaData::~VSDXMetaData()
+{
+}
+
+void libvisio::VSDXMetaData::readTitle(xmlTextReaderPtr reader)
+{
+ int ret = 1;
+ int tokenId = XML_TOKEN_INVALID;
+ int tokenType = -1;
+ librevenge::RVNGString title;
+ do
+ {
+ ret = xmlTextReaderRead(reader);
+ tokenId = getElementToken(reader);
+ tokenType = xmlTextReaderNodeType(reader);
+ if (xmlTextReaderNodeType(reader) == XML_READER_TYPE_TEXT)
+ title.append((const char *)xmlTextReaderConstValue(reader));
+ }
+ while ((XML_DC_TITLE != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) && 1 == ret);
+ m_metaData.insert("dc:title", title);
+}
+
+void libvisio::VSDXMetaData::readCoreProperties(xmlTextReaderPtr reader)
+{
+ 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(("VSDXMetaData::readCoreProperties: unknown token %s\n", xmlTextReaderConstName(reader)));
+ }
+ tokenType = xmlTextReaderNodeType(reader);
+ switch (tokenId)
+ {
+ case XML_DC_TITLE:
+ if (tokenType == XML_READER_TYPE_ELEMENT)
+ readTitle(reader);
+ break;
+ default:
+ break;
+ }
+ }
+ while ((XML_CP_COREPROPERTIES != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) && 1 == ret);
+}
+
+bool libvisio::VSDXMetaData::parse(librevenge::RVNGInputStream *input)
+{
+ if (!input)
+ return false;
+
+ xmlTextReaderPtr reader = xmlReaderForStream(input, 0, 0, XML_PARSE_NOBLANKS|XML_PARSE_NOENT|XML_PARSE_NONET);
+ if (!reader)
+ return false;
+
+ try
+ {
+ int ret = xmlTextReaderRead(reader);
+ while (1 == ret)
+ {
+ int tokenId = getElementToken(reader);
+ switch (tokenId)
+ {
+ case XML_CP_COREPROPERTIES:
+ readCoreProperties(reader);
+ break;
+ default:
+ break;
+
+ }
+ ret = xmlTextReaderRead(reader);
+ }
+ }
+ catch (...)
+ {
+ xmlFreeTextReader(reader);
+ return false;
+ }
+ xmlFreeTextReader(reader);
+ return true;
+}
+
+int libvisio::VSDXMetaData::getElementToken(xmlTextReaderPtr reader)
+{
+ return VSDXMLTokenMap::getTokenId(xmlTextReaderConstName(reader));
+}
+
+const librevenge::RVNGPropertyList &libvisio::VSDXMetaData::getMetaData()
+{
+ return m_metaData;
+}
+
+/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff --git a/src/lib/VSDXMetaData.h b/src/lib/VSDXMetaData.h
new file mode 100644
index 0000000..15d22c1
--- /dev/null
+++ b/src/lib/VSDXMetaData.h
@@ -0,0 +1,41 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * This file is part of the libvisio project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef __VSDXMETADATA_H__
+#define __VSDXMETADATA_H__
+
+#include <librevenge-stream/librevenge-stream.h>
+#include "VSDXMLHelper.h"
+
+namespace libvisio
+{
+
+class VSDXMetaData
+{
+public:
+ VSDXMetaData();
+ ~VSDXMetaData();
+ bool parse(librevenge::RVNGInputStream *input);
+ const librevenge::RVNGPropertyList &getMetaData();
+
+private:
+ VSDXMetaData(const VSDXMetaData &);
+ VSDXMetaData &operator=(const VSDXMetaData &);
+
+ int getElementToken(xmlTextReaderPtr reader);
+ void readCoreProperties(xmlTextReaderPtr reader);
+ void readTitle(xmlTextReaderPtr reader);
+
+ librevenge::RVNGPropertyList m_metaData;
+};
+
+} // namespace libvisio
+
+#endif // __VSDXMETADATA_H__
+/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff --git a/src/lib/VSDXParser.cpp b/src/lib/VSDXParser.cpp
index 21e2d2c..4f676b0 100644
--- a/src/lib/VSDXParser.cpp
+++ b/src/lib/VSDXParser.cpp
@@ -18,6 +18,7 @@
#include "VSDStylesCollector.h"
#include "VSDXMLHelper.h"
#include "VSDXMLTokenMap.h"
+#include "VSDXMetaData.h"
namespace
{
@@ -92,6 +93,10 @@ bool libvisio::VSDXParser::parseMain()
VSDContentCollector contentCollector(m_painter, groupXFormsSequence, groupMembershipsSequence, documentPageShapeOrders, styles, m_stencils);
m_collector = &contentCollector;
+ const libvisio::VSDXRelationship *metaDataRel = rootRels.getRelationshipByType("http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties");
+ if (metaDataRel)
+ parseMetaData(m_input, metaDataRel->getTarget().c_str());
+
if (!parseDocument(m_input, rel->getTarget().c_str()))
return false;
@@ -275,6 +280,25 @@ bool libvisio::VSDXParser::parseTheme(librevenge::RVNGInputStream *input, const
return true;
}
+bool libvisio::VSDXParser::parseMetaData(librevenge::RVNGInputStream *input, const char *name)
+{
+ if (!input)
+ return false;
+ input->seek(0, librevenge::RVNG_SEEK_SET);
+ if (!input->isStructured())
+ return false;
+ librevenge::RVNGInputStream *stream = input->getSubStreamByName(name);
+ if (!stream)
+ return false;
+
+ VSDXMetaData metaData;
+ metaData.parse(stream);
+ m_collector->collectMetaData(metaData.getMetaData());
+
+ delete stream;
+ return true;
+}
+
void libvisio::VSDXParser::processXmlDocument(librevenge::RVNGInputStream *input, VSDXRelationships &rels)
{
if (!input)
diff --git a/src/lib/VSDXParser.h b/src/lib/VSDXParser.h
index 75119bc..8566403 100644
--- a/src/lib/VSDXParser.h
+++ b/src/lib/VSDXParser.h
@@ -54,6 +54,7 @@ private:
bool parsePages(librevenge::RVNGInputStream *input, const char *name);
bool parsePage(librevenge::RVNGInputStream *input, const char *name);
bool parseTheme(librevenge::RVNGInputStream *input, const char *name);
+ bool parseMetaData(librevenge::RVNGInputStream *input, const char *name);
void processXmlDocument(librevenge::RVNGInputStream *input, VSDXRelationships &rels);
void processXmlNode(xmlTextReaderPtr reader);
diff --git a/src/lib/tokens.txt b/src/lib/tokens.txt
index 4421b59..0392862 100644
--- a/src/lib/tokens.txt
+++ b/src/lib/tokens.txt
@@ -221,3 +221,5 @@ Width
X
XForm
Y
+cp:coreProperties
+dc:title
commit caf5129b16458493d7b67baf922b92fcc40ee1d0
Author: Miklos Vajna <vmiklos@collabora.co.uk>
Date: Tue Nov 25 12:08:53 2014 +0100
fdo#86664 VSDX: import <dcterms:created> and <dcterms:modified>
Change-Id: I7ff5f87729419853146d941903f88f9277106b27
diff --git a/src/lib/VSDXMetaData.cpp b/src/lib/VSDXMetaData.cpp
index 3cbd61d..19c9709 100644
--- a/src/lib/VSDXMetaData.cpp
+++ b/src/lib/VSDXMetaData.cpp
@@ -37,6 +37,42 @@ void libvisio::VSDXMetaData::readTitle(xmlTextReaderPtr reader)
m_metaData.insert("dc:title", title);
}
+void libvisio::VSDXMetaData::readCreated(xmlTextReaderPtr reader)
+{
+ int ret = 1;
+ int tokenId = XML_TOKEN_INVALID;
+ int tokenType = -1;
+ librevenge::RVNGString created;
+ do
+ {
+ ret = xmlTextReaderRead(reader);
+ tokenId = getElementToken(reader);
+ tokenType = xmlTextReaderNodeType(reader);
+ if (xmlTextReaderNodeType(reader) == XML_READER_TYPE_TEXT)
+ created.append((const char *)xmlTextReaderConstValue(reader));
+ }
+ while ((XML_DCTERMS_CREATED != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) && 1 == ret);
+ m_metaData.insert("meta:creation-date", created);
+}
+
+void libvisio::VSDXMetaData::readModified(xmlTextReaderPtr reader)
+{
+ int ret = 1;
+ int tokenId = XML_TOKEN_INVALID;
+ int tokenType = -1;
+ librevenge::RVNGString modified;
+ do
+ {
+ ret = xmlTextReaderRead(reader);
+ tokenId = getElementToken(reader);
+ tokenType = xmlTextReaderNodeType(reader);
+ if (xmlTextReaderNodeType(reader) == XML_READER_TYPE_TEXT)
+ modified.append((const char *)xmlTextReaderConstValue(reader));
+ }
+ while ((XML_DCTERMS_MODIFIED != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) && 1 == ret);
+ m_metaData.insert("dc:date", modified);
+}
+
void libvisio::VSDXMetaData::readCoreProperties(xmlTextReaderPtr reader)
{
int ret = 1;
@@ -57,6 +93,14 @@ void libvisio::VSDXMetaData::readCoreProperties(xmlTextReaderPtr reader)
if (tokenType == XML_READER_TYPE_ELEMENT)
readTitle(reader);
break;
+ case XML_DCTERMS_CREATED:
+ if (tokenType == XML_READER_TYPE_ELEMENT)
+ readCreated(reader);
+ break;
+ case XML_DCTERMS_MODIFIED:
+ if (tokenType == XML_READER_TYPE_ELEMENT)
+ readModified(reader);
+ break;
default:
break;
}
diff --git a/src/lib/VSDXMetaData.h b/src/lib/VSDXMetaData.h
index 15d22c1..5ef98b8 100644
--- a/src/lib/VSDXMetaData.h
+++ b/src/lib/VSDXMetaData.h
@@ -31,6 +31,8 @@ private:
int getElementToken(xmlTextReaderPtr reader);
void readCoreProperties(xmlTextReaderPtr reader);
void readTitle(xmlTextReaderPtr reader);
+ void readCreated(xmlTextReaderPtr reader);
+ void readModified(xmlTextReaderPtr reader);
librevenge::RVNGPropertyList m_metaData;
};
diff --git a/src/lib/tokens.txt b/src/lib/tokens.txt
index 0392862..d832604 100644
--- a/src/lib/tokens.txt
+++ b/src/lib/tokens.txt
@@ -223,3 +223,5 @@ XForm
Y
cp:coreProperties
dc:title
+dcterms:created
+dcterms:modified
diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in
index 1881b7d..a51ac14 100644
--- a/src/lib/Makefile.in
+++ b/src/lib/Makefile.in
@@ -134,7 +134,7 @@ am_libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_OBJECTS = \
VSDParser.lo VSDShapeList.lo VSDStencils.lo VSDStyles.lo \
VSDStylesCollector.lo VSDXMLHelper.lo VDXParser.lo \
VSDXMLParserBase.lo VSDXMLTokenMap.lo VSDXParser.lo \
- VSDXTheme.lo $(am__objects_1)
+ VSDXTheme.lo VSDXMetaData.lo $(am__objects_1)
libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_OBJECTS = $(am_libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -436,6 +436,8 @@ libvisio_@VSD_MAJOR_VERSION@_@VSD_MINOR_VERSION@_la_SOURCES = \
VSDXParser.h \
VSDXTheme.cpp \
VSDXTheme.h \
+ VSDXMetaData.cpp \
+ VSDXMetaData.h \
$(generated_files)
EXTRA_DIST = \
@@ -548,6 +550,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VSDXMLHelper.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VSDXMLParserBase.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VSDXMLTokenMap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VSDXMetaData.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VSDXParser.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VSDXTheme.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VisioDocument.Plo@am__quote@
@@ -771,6 +774,7 @@ VSDXMLParserBase.lo : $(generated_files)
VSDXMLTokenMap.lo : $(generated_files)
VSDXParser.lo : $(generated_files)
VSDXTheme.lo : $(generated_files)
+VSDXMetaData.lo : $(generated_files)
$(top_builddir)/src/lib/tokens.h : $(top_builddir)/src/lib/tokens.gperf
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment