Exiv2
Loading...
Searching...
No Matches
properties.hpp
Go to the documentation of this file.
1// ***************************************************************** -*- C++ -*-
2/*
3 * Copyright (C) 2004-2018 Exiv2 authors
4 * This program is part of the Exiv2 distribution.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
19 */
31#ifndef PROPERTIES_HPP_
32#define PROPERTIES_HPP_
33
34// *****************************************************************************
35#include "exiv2lib_export.h"
36
37// included header files
38#include "datasets.hpp"
39#include "rwlock.hpp"
40
41// *****************************************************************************
42// namespace extensions
43namespace Exiv2 {
44
45// *****************************************************************************
46// class declarations
47 class XmpKey;
48
49// *****************************************************************************
50// class definitions
51
53 enum XmpCategory { xmpInternal, xmpExternal };
54
56 struct EXIV2API XmpPropertyInfo {
58 bool operator==(const std::string& name) const;
59
60 const char* name_;
61 const char* title_;
62 const char* xmpValueType_;
65 const char* desc_;
66 };
67
69 struct EXIV2API XmpNsInfo {
71 struct Prefix {
73 explicit Prefix(const std::string& prefix);
75 std::string prefix_;
76 };
78 struct Ns {
80 explicit Ns(const std::string& ns);
82 std::string ns_;
83 };
85 bool operator==(const Ns& ns) const;
87 bool operator==(const Prefix& prefix) const;
88
89 const char* ns_;
90 const char* prefix_;
92 const char* desc_;
93 };
94
96 class EXIV2API XmpProperties {
100 XmpProperties(const XmpProperties& rhs);
102 XmpProperties& operator=(const XmpProperties& rhs);
103
104 private:
105 static const XmpNsInfo* nsInfoUnsafe(const std::string& prefix);
106 static void unregisterNsUnsafe(const std::string& ns);
107 static const XmpNsInfo* lookupNsRegistryUnsafe(const XmpNsInfo::Prefix& prefix);
108
109 public:
116 static const char* propertyTitle(const XmpKey& key);
123 static const char* propertyDesc(const XmpKey& key);
130 static TypeId propertyType(const XmpKey& key);
142 static const XmpPropertyInfo* propertyInfo(const XmpKey& key);
150 static std::string ns(const std::string& prefix);
158 static const char* nsDesc(const std::string& prefix);
166 static const XmpPropertyInfo* propertyList(const std::string& prefix);
174 static const XmpNsInfo* nsInfo(const std::string& prefix);
175
182 static std::string prefix(const std::string& ns);
184 static void printProperties(std::ostream& os, const std::string& prefix);
185
187 static std::ostream& printProperty(std::ostream& os,
188 const std::string& key,
189 const Value& value);
198 static void registerNs(const std::string& ns, const std::string& prefix);
207 static void unregisterNs(const std::string& ns);
208
211
220 static void unregisterNs();
222 typedef std::map<std::string, XmpNsInfo> NsRegistry;
226 static const XmpNsInfo* lookupNsRegistry(const XmpNsInfo::Prefix& prefix);
227
228 // DATA
230
235
236 }; // class XmpProperties
237
241 class EXIV2API XmpKey : public Key
242 {
243 public:
245 typedef std::auto_ptr<XmpKey> AutoPtr;
246
248
249
257 explicit XmpKey(const std::string& key);
267 XmpKey(const std::string& prefix, const std::string& property);
269 XmpKey(const XmpKey& rhs);
271 virtual ~XmpKey();
273
275
276
277 XmpKey& operator=(const XmpKey& rhs);
279
281
282 virtual std::string key() const;
283 virtual const char* familyName() const;
288 virtual std::string groupName() const;
289 virtual std::string tagName() const;
290 virtual std::string tagLabel() const;
292 virtual uint16_t tag() const;
293
294 AutoPtr clone() const;
295
296 // Todo: Should this be removed? What about tagLabel then?
298 std::string ns() const;
300
301 private:
303 virtual XmpKey* clone_() const;
304
305 private:
306 // Pimpl idiom
307 struct Impl;
308 std::auto_ptr<Impl> p_;
309
310 }; // class XmpKey
311
312 // *****************************************************************************
313 // free functions
314
316 EXIV2API std::ostream& operator<<(std::ostream& os, const XmpPropertyInfo& propertyInfo);
317
318} // namespace Exiv2
319
320#endif // #ifndef PROPERTIES_HPP_
Abstract base class defining the Key of a metadatum. Keys are used to identify and group metadata.
Definition metadatum.hpp:55
Class to provide a Read-Write Lock.
Definition rwlock.hpp:90
Common interface for all types of values used with metadata.
Definition value.hpp:60
Concrete keys for XMP metadata.
Definition properties.hpp:242
virtual std::string tagName() const
Return the name of the tag (which is also the third part of the key)
virtual ~XmpKey()
Virtual destructor.
XmpKey(const XmpKey &rhs)
Copy constructor.
virtual uint16_t tag() const
Properties don't have a tag number. Return 0.
virtual const char * familyName() const
Return an identifier for the type of metadata (the first part of the key)
std::string ns() const
Return the schema namespace for the prefix of the key.
std::auto_ptr< XmpKey > AutoPtr
Shortcut for an XmpKey auto pointer.
Definition properties.hpp:245
virtual std::string groupName() const
Return the name of the group (the second part of the key). For XMP keys, the group name is the schema...
XmpKey & operator=(const XmpKey &rhs)
Assignment operator.
XmpKey(const std::string &key)
Constructor to create an XMP key from a key string.
virtual std::string key() const
Return the key of the metadatum as a string. The key is of the form 'familyName.groupName....
XmpKey(const std::string &prefix, const std::string &property)
Constructor to create an XMP key from a schema prefix and a property name.
virtual std::string tagLabel() const
Return a label for the tag.
XMP property reference, implemented as a static class.
Definition properties.hpp:96
static const char * nsDesc(const std::string &prefix)
Return the namespace description for the schema associated with prefix.
static TypeId propertyType(const XmpKey &key)
Return the type for property key. The default for unknown keys is xmpText.
static const char * propertyDesc(const XmpKey &key)
Return the description of the property.
static NsRegistry nsRegistry_
Namespace registry.
Definition properties.hpp:229
static const XmpNsInfo * lookupNsRegistry(const XmpNsInfo::Prefix &prefix)
Get the registered namespace for a specific prefix from the registry.
static void unregisterNs()
Unregister all custom namespaces.
static std::string ns(const std::string &prefix)
Return the namespace name for the schema associated with prefix.
static void unregisterNs(const std::string &ns)
Unregister a custom namespace ns.
static const XmpPropertyInfo * propertyInfo(const XmpKey &key)
Return information for the property for key.
static Exiv2::RWLock rwLock_
lock to be used while modifying properties
Definition properties.hpp:210
static std::string prefix(const std::string &ns)
Return the (preferred) prefix for schema namespace ns.
static const XmpPropertyInfo * propertyList(const std::string &prefix)
Return read-only list of built-in properties for prefix.
static void printProperties(std::ostream &os, const std::string &prefix)
Print a list of properties of a schema namespace to output stream os.
static void registeredNamespaces(Exiv2::Dictionary &nsDict)
Get all registered namespaces (for both Exiv2 and XMPsdk)
static std::ostream & printProperty(std::ostream &os, const std::string &key, const Value &value)
Interpret and print the value of an XMP property.
static const char * propertyTitle(const XmpKey &key)
Return the title (label) of the property.
std::map< std::string, XmpNsInfo > NsRegistry
Type for the namespace registry.
Definition properties.hpp:222
static void registerNs(const std::string &ns, const std::string &prefix)
Register namespace ns with preferred prefix prefix.
static const XmpNsInfo * nsInfo(const std::string &prefix)
Return information about a schema namespace for prefix. Always returns a valid pointer.
IPTC dataset and type information.
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition asfvideo.hpp:36
EXIV2API std::ostream & operator<<(std::ostream &os, const DataSet &dataSet)
Output operator for dataSet.
Definition datasets.cpp:709
TypeId
Exiv2 value type identifiers.
Definition types.hpp:130
XmpCategory
Category of an XMP property.
Definition properties.hpp:53
std::map< std::string, std::string > Dictionary
typedef for string:string map
Definition datasets.hpp:364
For comparison with namespace.
Definition properties.hpp:78
Ns(const std::string &ns)
Constructor.
std::string ns_
The namespace string.
Definition properties.hpp:82
For comparison with prefix.
Definition properties.hpp:71
std::string prefix_
The prefix string.
Definition properties.hpp:75
Prefix(const std::string &prefix)
Constructor.
Structure mapping XMP namespaces and (preferred) prefixes.
Definition properties.hpp:69
const XmpPropertyInfo * xmpPropertyInfo_
List of known properties.
Definition properties.hpp:91
bool operator==(const Prefix &prefix) const
Comparison operator for prefix.
const char * desc_
Brief description of the namespace.
Definition properties.hpp:92
const char * prefix_
(Preferred) prefix
Definition properties.hpp:90
const char * ns_
Namespace.
Definition properties.hpp:89
bool operator==(const Ns &ns) const
Comparison operator for namespace.
Information about one XMP property.
Definition properties.hpp:56
const char * name_
Property name.
Definition properties.hpp:60
const char * desc_
Property description.
Definition properties.hpp:65
const char * title_
Property title or label.
Definition properties.hpp:61
bool operator==(const std::string &name) const
Comparison operator for name.
XmpCategory xmpCategory_
Category (internal or external)
Definition properties.hpp:64
const char * xmpValueType_
XMP value type (for info only)
Definition properties.hpp:62
TypeId typeId_
Exiv2 default type for the property.
Definition properties.hpp:63