[SCM] exiv2 packaging branch, master, updated. debian/0.25-3.1-3734-gdcbc29a

Maximiliano Curia maxy at moszumanska.debian.org
Thu Jul 13 17:38:44 UTC 2017


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/exiv2.git;a=commitdiff;h=71c87ce

The following commit has been merged in the master branch:
commit 71c87ce89ea130f8ef4bf78849b9205e9b47b31d
Author: Andreas Huggel <ahuggel at gmx.net>
Date:   Thu Sep 20 18:17:57 2007 +0000

    Bugfixes for XMP array handling.
---
 src/value.cpp | 23 +++++++++++++++--------
 src/value.hpp |  3 +++
 src/xmp.cpp   | 56 ++++++++++++++++++++++++++++++++++++++++----------------
 3 files changed, 58 insertions(+), 24 deletions(-)

diff --git a/src/value.cpp b/src/value.cpp
index 6ef9451..44995a3 100644
--- a/src/value.cpp
+++ b/src/value.cpp
@@ -440,6 +440,20 @@ namespace Exiv2 {
         return xmpArrayType_;
     }
 
+    XmpValue::XmpArrayType XmpValue::xmpArrayType(TypeId typeId)
+    {
+        XmpArrayType xa = xaNone;
+        switch (typeId) {
+        case xmpAlt: xa = xaAlt; break;
+        case xmpBag: xa = xaBag; break;
+        case xmpSeq: xa = xaSeq; break;
+        default:
+            throw Error(48, TypeInfo::typeName(typeId));
+            break;
+        }
+        return xa;
+    }
+
     XmpValue::XmpStruct XmpValue::xmpStruct() const
     {
         return xmpStruct_;
@@ -530,14 +544,7 @@ namespace Exiv2 {
     XmpArrayValue::XmpArrayValue(TypeId typeId)
         : XmpValue(typeId)
     {
-        switch (typeId) {
-        case xmpAlt: setXmpArrayType(xaAlt); break;
-        case xmpBag: setXmpArrayType(xaBag); break;
-        case xmpSeq: setXmpArrayType(xaSeq); break;
-        default:
-            throw Error(48, TypeInfo::typeName(typeId));
-            break;
-        }
+        setXmpArrayType(xmpArrayType(typeId));
     }
 
     int XmpArrayValue::read(const std::string& buf)
diff --git a/src/value.hpp b/src/value.hpp
index aea81aa..f5f5956 100644
--- a/src/value.hpp
+++ b/src/value.hpp
@@ -673,6 +673,9 @@ namespace Exiv2 {
         virtual int read(const std::string& buf) =0;
         //@}
 
+        //! Return XMP array type for an array Value TypeId
+        static XmpArrayType xmpArrayType(TypeId typeId);
+
     protected:
         /*!
           @brief Assignment operator. Protected so that it can only be used
diff --git a/src/xmp.cpp b/src/xmp.cpp
index 58ab787..7eac790 100644
--- a/src/xmp.cpp
+++ b/src/xmp.cpp
@@ -76,6 +76,9 @@ namespace {
     //! Convert Value::XmpStruct to XMP Toolkit array option bits
     XMP_OptionBits xmpOptionBits(Exiv2::XmpValue::XmpStruct xs);
 
+    //! Convert XMP Toolkit array option bits to array TypeId
+    Exiv2::TypeId arrayValueTypeId(const XMP_OptionBits& opt);
+
     //! Convert XMP Toolkit array option bits to Value::XmpArrayType
     Exiv2::XmpValue::XmpArrayType xmpArrayType(const XMP_OptionBits& opt);
 
@@ -471,17 +474,13 @@ namespace Exiv2 {
                         ||  XMP_NodeIsSchema(aOpt)
                         ||  XMP_PropIsAlias(aOpt)) {
                         simpleArray = false;
-
-                        std::cerr << "NOT SO SIMPLE ==> " << propPath << ", " << aPropPath << "
";
-
                         break;
                     }
                 }
                 if (simpleArray) {
                     // Read the array into an XmpArrayValue
-                    XmpArrayValue::AutoPtr val(new XmpArrayValue);
+                    XmpArrayValue::AutoPtr val(new XmpArrayValue(arrayValueTypeId(opt)));
                     XMP_Index count = meta.CountArrayItems(schemaNs.c_str(), propPath.c_str());
-                    val->setXmpArrayType(xmpArrayType(opt));
                     while (count-- > 0) {
                         iter.Next(&schemaNs, &propPath, &propValue, &opt);
 #ifdef DEBUG
@@ -568,6 +567,9 @@ namespace Exiv2 {
                 int idx = 1;
                 for (LangAltValue::ValueType::const_iterator k = la->value_.begin();
                      k != la->value_.end(); ++k) {
+#ifdef DEBUG
+                    printNode(ns, i->tagName(), k->second, 0);
+#endif
                     meta.AppendArrayItem(ns.c_str(), i->tagName().c_str(), kXMP_PropArrayIsAltText, k->second.c_str());
                     const std::string item = i->tagName() + "[" + toString(idx++) + "]";
                     meta.SetQualifier(ns.c_str(), item.c_str(), kXMP_NS_XML, "lang", k->first.c_str());
@@ -582,17 +584,29 @@ namespace Exiv2 {
             if (   i->typeId() == xmpBag
                 || i->typeId() == xmpSeq
                 || i->typeId() == xmpAlt) {
+#ifdef DEBUG
+                printNode(ns, i->tagName(), "", options);
+#endif
                 meta.SetProperty(ns.c_str(), i->tagName().c_str(), 0, options);
                 for (int idx = 0; idx < i->count(); ++idx) {
                     const std::string item = i->tagName() + "[" + toString(idx + 1) + "]";
+#ifdef DEBUG
+                    printNode(ns, item, i->toString(idx), 0);
+#endif
                     meta.SetProperty(ns.c_str(), item.c_str(), i->toString(idx).c_str());
                 }
             }
             if (i->typeId() == xmpText) {
                 if (i->count() == 0) {
+#ifdef DEBUG
+                    printNode(ns, i->tagName(), "", options);
+#endif
                     meta.SetProperty(ns.c_str(), i->tagName().c_str(), 0, options);
                 }
                 else {
+#ifdef DEBUG
+                    printNode(ns, i->tagName(), i->toString(0), options);
+#endif
                     meta.SetProperty(ns.c_str(), i->tagName().c_str(), i->toString(0).c_str(), options);
                 }
             }
@@ -658,15 +672,20 @@ namespace {
         return var;
     }
 
-    Exiv2::XmpValue::XmpArrayType xmpArrayType(const XMP_OptionBits& opt)
+    Exiv2::TypeId arrayValueTypeId(const XMP_OptionBits& opt)
     {
-        Exiv2::XmpValue::XmpArrayType var(Exiv2::XmpValue::xaNone);
+        Exiv2::TypeId typeId(Exiv2::invalidTypeId);
         if (XMP_PropIsArray(opt)) {
-            if (XMP_ArrayIsAlternate(opt))      var = Exiv2::XmpValue::xaAlt;
-            else if (XMP_ArrayIsOrdered(opt))   var = Exiv2::XmpValue::xaSeq;
-            else if (XMP_ArrayIsUnordered(opt)) var = Exiv2::XmpValue::xaBag;
+            if (XMP_ArrayIsAlternate(opt))      typeId = Exiv2::xmpAlt;
+            else if (XMP_ArrayIsOrdered(opt))   typeId = Exiv2::xmpSeq;
+            else if (XMP_ArrayIsUnordered(opt)) typeId = Exiv2::xmpBag;
         }
-        return var;
+        return typeId;
+    }
+
+    Exiv2::XmpValue::XmpArrayType xmpArrayType(const XMP_OptionBits& opt)
+    {
+        return Exiv2::XmpValue::xmpArrayType(arrayValueTypeId(opt));
     }
 
     XMP_OptionBits xmpOptionBits(Exiv2::XmpValue::XmpArrayType xat)
@@ -690,7 +709,7 @@ namespace {
         return var;
     }
 
-# ifdef DEBUG
+#ifdef DEBUG
     void printNode(const std::string& schemaNs,
                    const std::string& propPath,
                    const std::string& propValue,
@@ -699,10 +718,12 @@ namespace {
         static bool first = true;
         if (first) {
             first = false;
-            std::cout << "ashisaas
"
-                      << "lcqqtrti
";
+            std::cout << "ashisabsals
"
+                      << "lcqqtrgqlai
";
         }
-        enum { alia=0, sche, hasq, isqu, stru, arra, lang, simp, len };
+        enum { alia=0, sche, hasq, isqu, stru, arra,
+               abag, aseq, aalt, lang, simp, len };
+
         std::string opts(len, '.');
         if (XMP_PropIsAlias(opt))       opts[alia] = 'X';
         if (XMP_NodeIsSchema(opt))      opts[sche] = 'X';
@@ -710,6 +731,9 @@ namespace {
         if (XMP_PropIsQualifier(opt))   opts[isqu] = 'X';
         if (XMP_PropIsStruct(opt))      opts[stru] = 'X';
         if (XMP_PropIsArray(opt))       opts[arra] = 'X';
+        if (XMP_ArrayIsUnordered(opt))  opts[abag] = 'X';
+        if (XMP_ArrayIsOrdered(opt))    opts[aseq] = 'X';
+        if (XMP_ArrayIsAlternate(opt))  opts[aalt] = 'X';
         if (XMP_ArrayIsAltText(opt))    opts[lang] = 'X';
         if (XMP_PropIsSimple(opt))      opts[simp] = 'X';
 
@@ -722,7 +746,7 @@ namespace {
         }
         std::cout << std::endl;
     }
-# endif // DEBUG
+#endif // DEBUG
 #endif // EXV_HAVE_XMP_TOOLKIT
 
     Exiv2::XmpKey::AutoPtr makeXmpKey(const std::string& schemaNs,

-- 
exiv2 packaging



More information about the pkg-kde-commits mailing list