Exiv2
datasets.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  */
26 #ifndef DATASETS_HPP_
27 #define DATASETS_HPP_
28 
29 // *****************************************************************************
30 #include "exiv2lib_export.h"
31 
32 // included header files
33 #include "metadatum.hpp"
34 
35 // + standard includes
36 #include <set>
37 #include <vector>
38 #include <map>
39 
40 // *****************************************************************************
41 // namespace extensions
42 namespace Exiv2 {
43 
44 // *****************************************************************************
45 // class definitions
46 
48  struct EXIV2API RecordInfo {
50  RecordInfo(uint16_t recordId, const char* name, const char* desc);
51  uint16_t recordId_;
52  const char* name_;
53  const char* desc_;
54  };
55 
57  struct EXIV2API DataSet {
59  DataSet(
60  uint16_t number,
61  const char* name,
62  const char* title,
63  const char* desc,
64  bool mandatory,
65  bool repeatable,
66  uint32_t minbytes,
67  uint32_t maxbytes,
68  TypeId type,
69  uint16_t recordId,
70  const char* photoshop
71  );
72  uint16_t number_;
73  const char* name_;
74  const char* title_;
75  const char* desc_;
76  bool mandatory_;
77  bool repeatable_;
78  uint32_t minbytes_;
79  uint32_t maxbytes_;
81  uint16_t recordId_;
82  const char* photoshop_;
83  }; // struct DataSet
84 
86  class EXIV2API IptcDataSets {
87  public:
95  static const uint16_t invalidRecord = 0;
96  static const uint16_t envelope = 1;
97  static const uint16_t application2 = 2;
99 
101 
102  static const uint16_t ModelVersion = 0;
103  static const uint16_t Destination = 5;
104  static const uint16_t FileFormat = 20;
105  static const uint16_t FileVersion = 22;
106  static const uint16_t ServiceId = 30;
107  static const uint16_t EnvelopeNumber = 40;
108  static const uint16_t ProductId = 50;
109  static const uint16_t EnvelopePriority = 60;
110  static const uint16_t DateSent = 70;
111  static const uint16_t TimeSent = 80;
112  static const uint16_t CharacterSet = 90;
113  static const uint16_t UNO = 100;
114  static const uint16_t ARMId = 120;
115  static const uint16_t ARMVersion = 122;
116  static const uint16_t RecordVersion = 0;
117  static const uint16_t ObjectType = 3;
118  static const uint16_t ObjectAttribute = 4;
119  static const uint16_t ObjectName = 5;
120  static const uint16_t EditStatus = 7;
121  static const uint16_t EditorialUpdate = 8;
122  static const uint16_t Urgency = 10;
123  static const uint16_t Subject = 12;
124  static const uint16_t Category = 15;
125  static const uint16_t SuppCategory = 20;
126  static const uint16_t FixtureId = 22;
127  static const uint16_t Keywords = 25;
128  static const uint16_t LocationCode = 26;
129  static const uint16_t LocationName = 27;
130  static const uint16_t ReleaseDate = 30;
131  static const uint16_t ReleaseTime = 35;
132  static const uint16_t ExpirationDate = 37;
133  static const uint16_t ExpirationTime = 38;
134  static const uint16_t SpecialInstructions = 40;
135  static const uint16_t ActionAdvised = 42;
136  static const uint16_t ReferenceService = 45;
137  static const uint16_t ReferenceDate = 47;
138  static const uint16_t ReferenceNumber = 50;
139  static const uint16_t DateCreated = 55;
140  static const uint16_t TimeCreated = 60;
141  static const uint16_t DigitizationDate = 62;
142  static const uint16_t DigitizationTime = 63;
143  static const uint16_t Program = 65;
144  static const uint16_t ProgramVersion = 70;
145  static const uint16_t ObjectCycle = 75;
146  static const uint16_t Byline = 80;
147  static const uint16_t BylineTitle = 85;
148  static const uint16_t City = 90;
149  static const uint16_t SubLocation = 92;
150  static const uint16_t ProvinceState = 95;
151  static const uint16_t CountryCode = 100;
152  static const uint16_t CountryName = 101;
153  static const uint16_t TransmissionReference = 103;
154  static const uint16_t Headline = 105;
155  static const uint16_t Credit = 110;
156  static const uint16_t Source = 115;
157  static const uint16_t Copyright = 116;
158  static const uint16_t Contact = 118;
159  static const uint16_t Caption = 120;
160  static const uint16_t Writer = 122;
161  static const uint16_t RasterizedCaption = 125;
162  static const uint16_t ImageType = 130;
163  static const uint16_t ImageOrientation = 131;
164  static const uint16_t Language = 135;
165  static const uint16_t AudioType = 150;
166  static const uint16_t AudioRate = 151;
167  static const uint16_t AudioResolution = 152;
168  static const uint16_t AudioDuration = 153;
169  static const uint16_t AudioOutcue = 154;
170  static const uint16_t PreviewFormat = 200;
171  static const uint16_t PreviewVersion = 201;
172  static const uint16_t Preview = 202;
174 
175  private:
177  IptcDataSets() {}
179  IptcDataSets(const IptcDataSets& rhs);
181  IptcDataSets& operator=(const IptcDataSets& rhs);
182 
183  public:
192  static std::string dataSetName(uint16_t number, uint16_t recordId);
199  static const char* dataSetTitle(uint16_t number, uint16_t recordId);
206  static const char* dataSetDesc(uint16_t number, uint16_t recordId);
214  static const char* dataSetPsName(uint16_t number, uint16_t recordId);
221  static bool dataSetRepeatable(uint16_t number, uint16_t recordId);
232  static uint16_t dataSet(const std::string& dataSetName, uint16_t recordId);
234  static TypeId dataSetType(uint16_t number, uint16_t recordId);
242  static std::string recordName(uint16_t recordId);
248  static const char* recordDesc(uint16_t recordId);
255  static uint16_t recordId(const std::string& recordName);
257  static const DataSet* envelopeRecordList();
259  static const DataSet* application2RecordList();
261  static void dataSetList(std::ostream& os);
262 
263  private:
264  static int dataSetIdx(uint16_t number, uint16_t recordId);
265  static int dataSetIdx(const std::string& dataSetName, uint16_t recordId);
266 
267  static const DataSet* records_[];
268  static const RecordInfo recordInfo_[];
269 
270  }; // class IptcDataSets
271 
275  class EXIV2API IptcKey : public Key {
276  public:
278  typedef std::auto_ptr<IptcKey> AutoPtr;
279 
281 
282 
290  explicit IptcKey(const std::string& key);
296  IptcKey(uint16_t tag, uint16_t record);
298  IptcKey(const IptcKey& rhs);
300  virtual ~IptcKey();
302 
304 
305 
308  IptcKey& operator=(const IptcKey& rhs);
310 
312 
313  virtual std::string key() const;
314  virtual const char* familyName() const;
319  virtual std::string groupName() const;
320  virtual std::string tagName() const;
321  virtual std::string tagLabel() const;
322  virtual uint16_t tag() const;
323  AutoPtr clone() const;
325  std::string recordName() const;
327  uint16_t record() const;
329 
330  protected:
332 
333 
337  void makeKey();
345  void decomposeKey();
347 
348  private:
350  virtual IptcKey* clone_() const;
351 
352  // DATA
353  static const char* familyName_;
354 
355  uint16_t tag_;
356  uint16_t record_;
357  std::string key_;
358 
359  }; // class IptcKey
360 
364  typedef std::map<std::string,std::string> Dictionary;
372  typedef Dictionary::const_iterator Dictionary_i;
373 
377  typedef std::set<std::string> StringSet;
385  typedef std::set<std::string>::const_iterator StringSet_i;
386 
390  typedef std::vector<std::string> StringVector;
398  typedef StringVector::const_iterator StringVector_i;
399 
403  typedef std::vector<uint32_t> Uint32Vector ;
411  typedef Uint32Vector::const_iterator Uint32Vector_i;
412 
413 
414 // *****************************************************************************
415 // free functions
416 
418  EXIV2API std::ostream& operator<<(std::ostream& os, const DataSet& dataSet);
419 
420 } // namespace Exiv2
421 
422 #endif // #ifndef DATASETS_HPP_
Exiv2::Key::operator=
Key & operator=(const Key &rhs)
Assignment operator. Protected so that it can only be used by subclasses but not directly.
Definition: metadatum.cpp:49
Exiv2::StringVector_i
StringVector::const_iterator StringVector_i
Class to provide a StringVector iterator.
Definition: datasets.hpp:398
Exiv2::IptcDataSets::dataSet
static uint16_t dataSet(const std::string &dataSetName, uint16_t recordId)
Return the dataSet number for dataset name and record id.
Definition: datasets.cpp:524
Exiv2::IptcDataSets::dataSetDesc
static const char * dataSetDesc(uint16_t number, uint16_t recordId)
Return the description of the dataset.
Definition: datasets.cpp:503
Exiv2::DataSet::maxbytes_
uint32_t maxbytes_
Maximum number of bytes.
Definition: datasets.hpp:79
Exiv2::StringVector
std::vector< std::string > StringVector
typedef for string vector
Definition: datasets.hpp:390
Exiv2::StringSet_p
StringSet * StringSet_p
typedef for StringSet*
Definition: datasets.hpp:381
Exiv2::RecordInfo::desc_
const char * desc_
Record description.
Definition: datasets.hpp:53
metadatum.hpp
Provides abstract base classes Metadatum and Key.
Exiv2::IptcKey::~IptcKey
virtual ~IptcKey()
Destructor.
Definition: datasets.cpp:605
Exiv2::Uint32Vector
std::vector< uint32_t > Uint32Vector
typedef for uint32_t vector
Definition: datasets.hpp:403
types.hpp
Type definitions for Exiv2 and related functionality.
Exiv2::undefined
@ undefined
Exif UNDEFINED type, an 8-bit byte that may contain anything.
Definition: types.hpp:137
Exiv2::IptcDataSets::dataSetRepeatable
static bool dataSetRepeatable(uint16_t number, uint16_t recordId)
Check if a given dataset is repeatable.
Definition: datasets.cpp:517
Exiv2::Dictionary_i
Dictionary::const_iterator Dictionary_i
typedef for Dictionary iterator
Definition: datasets.hpp:372
Exiv2::StringSet
std::set< std::string > StringSet
typedef for string set (unique strings)
Definition: datasets.hpp:377
Exiv2::RecordInfo
Details of an IPTC record.
Definition: datasets.hpp:48
Exiv2::RecordInfo::name_
const char * name_
Record name (one word)
Definition: datasets.hpp:52
Exiv2::isHex
EXIV2API bool isHex(const std::string &str, size_t size=0, const std::string &prefix="")
Return true if str is a hex number starting with prefix followed by size hex digits,...
Definition: types.cpp:543
Exiv2::IptcDataSets::application2RecordList
static const DataSet * application2RecordList()
Return read-only list of built-in Application2 Record datasets.
Definition: datasets.cpp:435
Exiv2::DataSet::repeatable_
bool repeatable_
True if dataset is repeatable.
Definition: datasets.hpp:77
Exiv2::IptcDataSets
IPTC dataset reference, implemented as a static class.
Definition: datasets.hpp:86
Exiv2::Uint32Vector_p
Uint32Vector * Uint32Vector_p
typedef for Uint32Vector pointer
Definition: datasets.hpp:407
Exiv2::Uint32Vector_i
Uint32Vector::const_iterator Uint32Vector_i
typedef for Uint32Vector iterator
Definition: datasets.hpp:411
Exiv2::DataSet
Details of an IPTC dataset.
Definition: datasets.hpp:57
Exiv2::IptcKey::key
virtual std::string key() const
Return the key of the metadatum as a string. The key is of the form 'familyName.groupName....
Definition: datasets.cpp:619
Exiv2::IptcDataSets::dataSetType
static TypeId dataSetType(uint16_t number, uint16_t recordId)
Return the type for dataSet number and Record id.
Definition: datasets.cpp:478
Exiv2::DataSet::mandatory_
bool mandatory_
True if dataset is mandatory.
Definition: datasets.hpp:76
Exiv2::Internal::groupName
const char * groupName(IfdId ifdId)
Return the group name for a group id.
Definition: tags_int.cpp:2155
Exiv2::IptcKey::makeKey
void makeKey()
Set the key corresponding to the dataset and record id. The key is of the form 'Iptc....
Definition: datasets.cpp:699
Exiv2::IptcDataSets::dataSetPsName
static const char * dataSetPsName(uint16_t number, uint16_t recordId)
Return the photohsop name of a given dataset.
Definition: datasets.cpp:510
Exiv2::IptcDataSets::recordName
static std::string recordName(uint16_t recordId)
Return the name of the Record.
Definition: datasets.cpp:541
Exiv2::IptcKey::AutoPtr
std::auto_ptr< IptcKey > AutoPtr
Shortcut for an IptcKey auto pointer.
Definition: datasets.hpp:278
Exiv2::IptcDataSets::dataSetName
static std::string dataSetName(uint16_t number, uint16_t recordId)
Return the name of the dataset.
Definition: datasets.cpp:485
Exiv2::Key
Abstract base class defining the Key of a metadatum. Keys are used to identify and group metadata.
Definition: metadatum.hpp:55
Exiv2::IptcKey::IptcKey
IptcKey(const std::string &key)
Constructor to create an IPTC key from a key string.
Definition: datasets.cpp:588
Exiv2::IptcKey::recordName
std::string recordName() const
Return the name of the record.
Definition: datasets.cpp:649
Exiv2::StringSet_i
std::set< std::string >::const_iterator StringSet_i
Class to provide a StringSet iterator.
Definition: datasets.hpp:385
Exiv2::Dictionary_p
Dictionary * Dictionary_p
typedef for Dictionary*
Definition: datasets.hpp:368
Exiv2::DataSet::title_
const char * title_
Dataset title or label.
Definition: datasets.hpp:74
Exiv2::IptcDataSets::recordDesc
static const char * recordDesc(uint16_t recordId)
Return the description of a record.
Definition: datasets.cpp:553
Exiv2::operator<<
EXIV2API std::ostream & operator<<(std::ostream &os, const DataSet &dataSet)
Output operator for dataSet.
Definition: datasets.cpp:709
Exiv2::unsignedShort
@ unsignedShort
Exif SHORT type, 16-bit (2-byte) unsigned integer.
Definition: types.hpp:133
Exiv2
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition: asfvideo.hpp:36
Exiv2::DataSet::desc_
const char * desc_
Dataset description.
Definition: datasets.hpp:75
value.hpp
Value interface and concrete subclasses.
Exiv2::TypeId
TypeId
Exiv2 value type identifiers.
Definition: types.hpp:130
Exiv2::TypeInfo::typeName
static const char * typeName(TypeId typeId)
Return the name of the type, 0 if unknown.
Definition: types.cpp:107
Exiv2::DataSet::number_
uint16_t number_
Dataset number.
Definition: datasets.hpp:72
Exiv2::DataSet::type_
TypeId type_
Exiv2 default type.
Definition: datasets.hpp:80
Exiv2::DataSet::minbytes_
uint32_t minbytes_
Minimum number of bytes.
Definition: datasets.hpp:78
Exiv2::DataSet::DataSet
DataSet(uint16_t number, const char *name, const char *title, const char *desc, bool mandatory, bool repeatable, uint32_t minbytes, uint32_t maxbytes, TypeId type, uint16_t recordId, const char *photoshop)
Constructor.
Definition: datasets.cpp:43
Exiv2::time
@ time
IPTC time type.
Definition: types.hpp:149
Exiv2::date
@ date
IPTC date type.
Definition: types.hpp:148
Exiv2::IptcKey::familyName
virtual const char * familyName() const
Return an identifier for the type of metadata (the first part of the key)
Definition: datasets.cpp:624
Exiv2::IptcDataSets::envelopeRecordList
static const DataSet * envelopeRecordList()
Return read-only list of built-in Envelope Record datasets.
Definition: datasets.cpp:158
Exiv2::IptcKey::decomposeKey
void decomposeKey()
Parse and convert the key string into dataset and record id. Updates data members if the string can b...
Definition: datasets.cpp:669
Exiv2::IptcKey::groupName
virtual std::string groupName() const
Return the name of the group (the second part of the key). For IPTC keys, the group name is the recor...
Definition: datasets.cpp:629
Exiv2::IptcDataSets::dataSetTitle
static const char * dataSetTitle(uint16_t number, uint16_t recordId)
Return the title (label) of the dataset.
Definition: datasets.cpp:496
Exiv2::IptcKey::tagLabel
virtual std::string tagLabel() const
Return a label for the tag.
Definition: datasets.cpp:639
Exiv2::IptcKey::operator=
IptcKey & operator=(const IptcKey &rhs)
Assignment operator.
Definition: datasets.cpp:609
Exiv2::Error
BasicError< char > Error
Error class used for exceptions (std::string based)
Definition: error.hpp:323
Exiv2::IptcKey
Concrete keys for IPTC metadata.
Definition: datasets.hpp:275
Exiv2::DataSet::recordId_
uint16_t recordId_
Record id.
Definition: datasets.hpp:81
Exiv2::RecordInfo::recordId_
uint16_t recordId_
Record id.
Definition: datasets.hpp:51
Exiv2::StringVector_p
StringVector * StringVector_p
typedef for StringVector pointer
Definition: datasets.hpp:394
Exiv2::string
@ string
IPTC string type.
Definition: types.hpp:147
Exiv2::Dictionary
std::map< std::string, std::string > Dictionary
typedef for string:string map
Definition: datasets.hpp:364
Exiv2::RecordInfo::RecordInfo
RecordInfo(uint16_t recordId, const char *name, const char *desc)
Constructor.
Definition: datasets.cpp:63
datasets.hpp
IPTC dataset and type information.
Exiv2::IptcDataSets::dataSetList
static void dataSetList(std::ostream &os)
Print a list of all dataSets to output stream.
Definition: datasets.cpp:575
Exiv2::IptcKey::record
uint16_t record() const
Return the record id.
Definition: datasets.cpp:654
Exiv2::IptcKey::tag
virtual uint16_t tag() const
Return the tag number.
Definition: datasets.cpp:644
Exiv2::IptcKey::tagName
virtual std::string tagName() const
Return the name of the tag (which is also the third part of the key)
Definition: datasets.cpp:634
Exiv2::DataSet::name_
const char * name_
Dataset name.
Definition: datasets.hpp:73
error.hpp
Error class for exceptions, log message class.
Exiv2::IptcDataSets::recordId
static uint16_t recordId(const std::string &recordName)
Return the Id number of a record.
Definition: datasets.cpp:561
Exiv2::DataSet::photoshop_
const char * photoshop_
Photoshop string.
Definition: datasets.hpp:82