/*****************************************************************************/
// Copyright 2006-2008 Adobe Systems Incorporated
// All Rights Reserved.
//
// NOTICE:  Adobe permits you to use, modify, and distribute this file in
// accordance with the terms of the Adobe license agreement accompanying it.
/*****************************************************************************/

/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_iptc.h#1 $ */ 
/* $DateTime: 2012/05/30 13:28:51 $ */
/* $Change: 832332 $ */
/* $Author: tknoll $ */

/** \file
 * Support for IPTC metadata within DNG files.
 */

/*****************************************************************************/

#ifndef __dng_iptc__
#define __dng_iptc__

/*****************************************************************************/

#include "dng_date_time.h"
#include "dng_string.h"
#include "dng_string_list.h"

/*****************************************************************************/

/// \brief Class for reading and holding IPTC metadata associated with a DNG file.
///
/// See the \ref spec_iptc "IPTC specification"
/// for information on member fields of this class.

class dng_iptc
	{
	
	public:
	
		dng_string fTitle;

		int32 fUrgency;
		
		dng_string fCategory;
		
		dng_string_list fSupplementalCategories;
		
		dng_string_list fKeywords;
		
		dng_string fInstructions;
		
		dng_date_time_info fDateTimeCreated;
		
		dng_date_time_info fDigitalCreationDateTime;
		
		dng_string_list fAuthors;
		
		dng_string fAuthorsPosition;
		
		dng_string fCity;
		dng_string fState;
		dng_string fCountry;
		dng_string fCountryCode;
		
		dng_string fLocation;
		
		dng_string fTransmissionReference;
		
		dng_string fHeadline;
		
		dng_string fCredit;
		
		dng_string fSource;
		
		dng_string fCopyrightNotice;
		
		dng_string fDescription;
		dng_string fDescriptionWriter;
		
	protected:
		
		enum DataSet
			{
			kRecordVersionSet					= 0,
			kObjectNameSet						= 5,
			kUrgencySet							= 10,
			kCategorySet						= 15,
			kSupplementalCategoriesSet			= 20,
			kKeywordsSet						= 25,
			kSpecialInstructionsSet				= 40,
			kDateCreatedSet						= 55,
			kTimeCreatedSet						= 60,
			kDigitalCreationDateSet				= 62,
			kDigitalCreationTimeSet				= 63,
			kBylineSet							= 80,
			kBylineTitleSet						= 85,
			kCitySet							= 90,
			kSublocationSet						= 92,
			kProvinceStateSet					= 95,
			kCountryCodeSet						= 100,
			kCountryNameSet						= 101,
			kOriginalTransmissionReferenceSet	= 103,
			kHeadlineSet						= 105,
			kCreditSet							= 110,
			kSourceSet							= 115,
			kCopyrightNoticeSet					= 116,
			kCaptionSet							= 120,
			kCaptionWriterSet					= 122
			};
			
		enum CharSet
			{
			kCharSetUnknown						= 0,
			kCharSetUTF8						= 1
			};
	
	public:
	
		dng_iptc ();
		
		virtual ~dng_iptc ();

		/// Test if IPTC metadata exists.
		/// \retval true if no IPTC metadata exists for this DNG.

		bool IsEmpty () const;
		
		/// Test if IPTC metadata exists.
		/// \retval true if IPTC metadata exists for this DNG.

		bool NotEmpty () const
			{
			return !IsEmpty ();
			}

		/// Parse a complete block of IPTC data.
		/// \param blockData The block of IPTC data.
		/// \param blockSize Size in bytes of data block.
		/// \param offsetInOriginalFile Used to enable certain file patching operations such as updating date/time in place.

		void Parse (const void *blockData,
					uint32 blockSize,
					uint64 offsetInOriginalFile);

		/// Serialize IPTC data to a memory block.
		/// \param allocator Memory allocator used to acquire memory block.
		/// \param padForTIFF Forces length of block to be a multiple of four bytes in accordance with TIFF standard.
		/// \retval Memory block 

		dng_memory_block * Spool (dng_memory_allocator &allocator,
								  bool padForTIFF);
					
	protected:
	
		void ParseString (dng_stream &stream,
						  dng_string &s,
						  CharSet charSet);
		
		void SpoolString (dng_stream &stream,
						  const dng_string &s,
						  uint8 dataSet,
						  uint32 maxChars,
						  CharSet charSet);
						  
	};

/*****************************************************************************/

#endif
	
/*****************************************************************************/
