src/lib/VSDXMetaData.cpp | 6 ++++++ src/lib/tokens.txt | 1 + src/test/importtest.cpp | 27 +++++++++++++++++++++++++++ src/test/xmldrawinggenerator.cpp | 24 +++++++++++++++++++++++- 4 files changed, 57 insertions(+), 1 deletion(-)
New commits: commit 5753f7e98d02bde80d9e712d298372933c4a28e6 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Wed Dec 31 14:43:48 2014 +0100 VSDX: import <cp:category> Change-Id: If1f520da6d9180862409af63296a1f90bad971e1 diff --git a/src/lib/VSDXMetaData.cpp b/src/lib/VSDXMetaData.cpp index 8516690..b7e485d 100644 --- a/src/lib/VSDXMetaData.cpp +++ b/src/lib/VSDXMetaData.cpp @@ -82,6 +82,9 @@ void libvisio::VSDXMetaData::readCoreProperties(xmlTextReaderPtr reader) case XML_CP_LASTMODIFIEDBY: m_metaData.insert("dc:creator", readString(reader, XML_CP_LASTMODIFIEDBY)); break; + case XML_CP_CATEGORY: + m_metaData.insert("meta:user-defined:category", readString(reader, XML_CP_CATEGORY)); + break; default: break; } diff --git a/src/lib/tokens.txt b/src/lib/tokens.txt index 2d0022b..6b01690 100644 --- a/src/lib/tokens.txt +++ b/src/lib/tokens.txt @@ -235,3 +235,4 @@ dcterms:created dcterms:modified dc:description cp:lastModifiedBy +cp:category diff --git a/src/test/importtest.cpp b/src/test/importtest.cpp index ad3722b..3e20d7a 100644 --- a/src/test/importtest.cpp +++ b/src/test/importtest.cpp @@ -174,6 +174,7 @@ void ImportTest::testVsdxMetadataTitle() assertXPath(m_doc, "/document/setDocumentMetaData", "keyword", "mytag"); assertXPath(m_doc, "/document/setDocumentMetaData", "description", "mycomment"); assertXPath(m_doc, "/document/setDocumentMetaData", "creator", "vmiklos modifier"); + assertXPathContent(m_doc, "/document/setDocumentMetaData/user-defined[@name='category']", "mycategory"); } void ImportTest::testVsdMetadataTitleMs1252() commit d6f6a4f6d7444177eaebc00198ed166f30540cbb Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Wed Dec 31 14:41:52 2014 +0100 libvisio::XmlDrawingGenerator: handle user-defined metadata Change-Id: I63c4cf75009ae8303efd031c66570514180f2d9d diff --git a/src/test/importtest.cpp b/src/test/importtest.cpp index 85a7175..ad3722b 100644 --- a/src/test/importtest.cpp +++ b/src/test/importtest.cpp @@ -66,6 +66,32 @@ void assertXPath(xmlDocPtr doc, const librevenge::RVNGString &xpath, const libre CPPUNIT_ASSERT_EQUAL_MESSAGE(message.cstr(), expectedValue, actualValue); } +/// Same as the assertXPathContent(), but don't assert: return the string instead. +librevenge::RVNGString getXPathContent(xmlDocPtr doc, const librevenge::RVNGString &xpath) +{ + xmlXPathObjectPtr xpathObject = getXPathNode(doc, xpath); + xmlNodeSetPtr nodeset = xpathObject->nodesetval; + + librevenge::RVNGString message("XPath '"); + message.append(xpath); + message.append("': not found."); + CPPUNIT_ASSERT_MESSAGE(message.cstr(), xmlXPathNodeSetGetLength(nodeset) > 0); + + xmlNodePtr node = nodeset->nodeTab[0]; + librevenge::RVNGString s(reinterpret_cast<char *>((node->children[0]).content)); + xmlXPathFreeObject(xpathObject); + return s; +} + +/// Assert that xpath exists, and its content equals to content. +void assertXPathContent(xmlDocPtr doc, const librevenge::RVNGString &xpath, const librevenge::RVNGString &content) +{ + librevenge::RVNGString message("XPath '"); + message.append(xpath); + message.append("': contents of child does not match."); + CPPUNIT_ASSERT_EQUAL_MESSAGE(message.cstr(), content, getXPathContent(doc, xpath)); +} + /// Paints an XML representation of filename into buffer, then returns the parsed buffer content. xmlDocPtr parse(const char *filename, xmlBufferPtr buffer) { diff --git a/src/test/xmldrawinggenerator.cpp b/src/test/xmldrawinggenerator.cpp index 5711c64..78484e0 100644 --- a/src/test/xmldrawinggenerator.cpp +++ b/src/test/xmldrawinggenerator.cpp @@ -9,6 +9,11 @@ #include "xmldrawinggenerator.h" +#include <cstring> +#include <string> +#include <utility> +#include <vector> + namespace libvisio { @@ -45,8 +50,25 @@ void XmlDrawingGenerator::setDocumentMetaData(const librevenge::RVNGPropertyList { xmlTextWriterStartElement(m_writer, BAD_CAST("setDocumentMetaData")); librevenge::RVNGPropertyList::Iter i(propList); + std::vector< std::pair<std::string, std::string> > userDefined; for (i.rewind(); i.next();) - xmlTextWriterWriteFormatAttribute(m_writer, BAD_CAST(i.key()), "%s", i()->getStr().cstr()); + { + if (strncmp(i.key(), "meta:user-defined:", 18)) + xmlTextWriterWriteFormatAttribute(m_writer, BAD_CAST(i.key()), "%s", i()->getStr().cstr()); + else + userDefined.push_back(std::make_pair(i.key() + 18, i()->getStr().cstr())); + } + + if (!userDefined.empty()) + { + for (size_t idx = 0; idx < userDefined.size(); ++idx) + { + xmlTextWriterStartElement(m_writer, BAD_CAST("user-defined")); + xmlTextWriterWriteAttribute(m_writer, BAD_CAST("name"), BAD_CAST(userDefined[idx].first.c_str())); + xmlTextWriterWriteString(m_writer, BAD_CAST(userDefined[idx].second.c_str())); + xmlTextWriterEndElement(m_writer); + } + } xmlTextWriterEndElement(m_writer); } commit ce94c3eda0f65e965001fdb946b3db829fea2fbd Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Wed Dec 31 13:22:11 2014 +0100 VSDXMetaData: missing breaks Change-Id: I6f1c1827761a532941fc699e912054966561978a diff --git a/src/lib/VSDXMetaData.cpp b/src/lib/VSDXMetaData.cpp index fd38811..8516690 100644 --- a/src/lib/VSDXMetaData.cpp +++ b/src/lib/VSDXMetaData.cpp @@ -75,10 +75,13 @@ void libvisio::VSDXMetaData::readCoreProperties(xmlTextReaderPtr reader) break; case XML_CP_KEYWORDS: m_metaData.insert("meta:keyword", readString(reader, XML_CP_KEYWORDS)); + break; case XML_DC_DESCRIPTION: m_metaData.insert("dc:description", readString(reader, XML_DC_DESCRIPTION)); + break; case XML_CP_LASTMODIFIEDBY: m_metaData.insert("dc:creator", readString(reader, XML_CP_LASTMODIFIEDBY)); + break; default: break; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits