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_
const char * name_
Dataset name.
Definition: datasets.hpp:73
const char * desc_
Record description.
Definition: datasets.hpp:53
const char * photoshop_
Photoshop string.
Definition: datasets.hpp:82
uint32_t maxbytes_
Maximum number of bytes.
Definition: datasets.hpp:79
std::map< std::string, std::string > Dictionary
typedef for string:string map
Definition: datasets.hpp:364
Details of an IPTC record.
Definition: datasets.hpp:48
TypeId
Exiv2 value type identifiers.
Definition: types.hpp:130
Uint32Vector::const_iterator Uint32Vector_i
typedef for Uint32Vector iterator
Definition: datasets.hpp:411
Dictionary::const_iterator Dictionary_i
typedef for Dictionary iterator
Definition: datasets.hpp:372
std::vector< std::string > StringVector
typedef for string vector
Definition: datasets.hpp:390
Abstract base class defining the Key of a metadatum. Keys are used to identify and group metadata...
Definition: metadatum.hpp:55
uint16_t recordId_
Record id.
Definition: datasets.hpp:51
Provides abstract base classes Metadatum and Key.
std::vector< uint32_t > Uint32Vector
typedef for uint32_t vector
Definition: datasets.hpp:403
bool mandatory_
True if dataset is mandatory.
Definition: datasets.hpp:76
StringVector * StringVector_p
typedef for StringVector pointer
Definition: datasets.hpp:394
bool repeatable_
True if dataset is repeatable.
Definition: datasets.hpp:77
IPTC dataset reference, implemented as a static class.
Definition: datasets.hpp:86
Concrete keys for IPTC metadata.
Definition: datasets.hpp:275
StringSet * StringSet_p
typedef for StringSet*
Definition: datasets.hpp:381
const char * name_
Record name (one word)
Definition: datasets.hpp:52
const char * title_
Dataset title or label.
Definition: datasets.hpp:74
std::set< std::string >::const_iterator StringSet_i
Class to provide a StringSet iterator.
Definition: datasets.hpp:385
const char * groupName(IfdId ifdId)
Return the group name for a group id.
Definition: tags_int.cpp:2155
uint16_t number_
Dataset number.
Definition: datasets.hpp:72
IPTC string type.
Definition: types.hpp:147
TypeId type_
Exiv2 default type.
Definition: datasets.hpp:80
const char * desc_
Dataset description.
Definition: datasets.hpp:75
Uint32Vector * Uint32Vector_p
typedef for Uint32Vector pointer
Definition: datasets.hpp:407
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition: asfvideo.hpp:36
Dictionary * Dictionary_p
typedef for Dictionary*
Definition: datasets.hpp:368
uint32_t minbytes_
Minimum number of bytes.
Definition: datasets.hpp:78
EXIV2API std::ostream & operator<<(std::ostream &os, const DataSet &dataSet)
Output operator for dataSet.
Definition: datasets.cpp:709
std::set< std::string > StringSet
typedef for string set (unique strings)
Definition: datasets.hpp:377
uint16_t recordId_
Record id.
Definition: datasets.hpp:81
Details of an IPTC dataset.
Definition: datasets.hpp:57
StringVector::const_iterator StringVector_i
Class to provide a StringVector iterator.
Definition: datasets.hpp:398
std::auto_ptr< IptcKey > AutoPtr
Shortcut for an IptcKey auto pointer.
Definition: datasets.hpp:278