diff options
Diffstat (limited to 'public/include/XMP_Const.h')
-rw-r--r-- | public/include/XMP_Const.h | 1603 |
1 files changed, 1010 insertions, 593 deletions
diff --git a/public/include/XMP_Const.h b/public/include/XMP_Const.h index 57605bd..0316188 100644 --- a/public/include/XMP_Const.h +++ b/public/include/XMP_Const.h @@ -1,25 +1,19 @@ #ifndef __XMP_Const_h__ #define __XMP_Const_h__ 1 -/* --------------------------------------------------------------------------------------------- */ -/* ** IMPORTANT ** This file must be usable by strict ANSI C compilers. No "//" comments, etc. */ -/* --------------------------------------------------------------------------------------------- */ - -/* // ================================================================================================= -// Copyright 2002-2007 Adobe Systems Incorporated +// Copyright 2002-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. // ================================================================================================= -*/ #include "XMP_Environment.h" #include <stddef.h> -#if XMP_MacBuild /* ! No stdint.h on Windows and some UNIXes. */ +#if XMP_MacBuild // ! No stdint.h on Windows and some UNIXes. #include <stdint.h> #endif @@ -27,20 +21,18 @@ extern "C" { #endif +// ================================================================================================= +/// \file XMP_Const.h +/// \brief Common C/C++ types and constants for the XMP toolkit. +// ================================================================================================= -/** ================================================================================================ - * \file XMP_Const.h - * \brief Common C/C++ types and constants for the XMP toolkit. - */ - - -/* ============================================================================================== */ -/* Basic types and constants */ -/* ========================= */ +// ================================================================================================= +// Basic types and constants +// ========================= -/* The XMP_... types are used on the off chance that the ..._t types present a problem. In that */ -/* case only the declarations of the XMP_... types needs to change, not all of the uses. These */ -/* types are used where fixed sizes are required in order to have a known ABI for a DLL build. */ +// The XMP_... types are used on the off chance that the ..._t types present a problem. In that +// case only the declarations of the XMP_... types needs to change, not all of the uses. These +// types are used where fixed sizes are required in order to have a known ABI for a DLL build. #if XMP_MacBuild @@ -70,205 +62,183 @@ extern "C" { typedef XMP_Uns8 XMP_Bool; -/* Typedefs to preserve old, unfortunate spellings: */ - -#if 0 /* *** Enable after internal compiles work. */ -typedef XMP_Int8 XMPInt8; -typedef XMP_Int16 XMPInt16; -typedef XMP_Int32 XMPInt32; -typedef XMP_Int64 XMPInt64; -typedef XMP_Uns8 XMPUns8; -typedef XMP_Uns16 XMPUns16; -typedef XMP_Uns32 XMPUns32; -typedef XMP_Uns64 XMPUns64; -typedef XMP_Bool XMPBool; -#endif - -/** - * \typedef XMPMetaRef - * \brief An "ABI safe" pointer to the internal part of an XMP object. - * - * \c XMPMetaRef is an "ABI safe" pointer to the internal part of an XMP object. It should be used - * for passing an XMP object across client DLL boundaries. See the discussion in <tt>TXMPMeta.hpp</tt>. - */ - +/// An "ABI safe" pointer to the internal part of an XMP object. Use to pass an XMP object across +/// client DLL boundaries. See \c TXMPMeta::GetInternalRef(). typedef struct __XMPMeta__ * XMPMetaRef; + +/// An "ABI safe" pointer to the internal part of an XMP iteration object. Use to pass an XMP +/// iteration object across client DLL boundaries. See \c TXMPIterator. typedef struct __XMPIterator__ * XMPIteratorRef; + +/// An "ABI safe" pointer to the internal part of an XMP document operations object. Use to pass an +/// XMP document operations object across client DLL boundaries. See \c TXMPDocOps. +typedef struct __XMPDocOps__ * XMPDocOpsRef; + +/// An "ABI safe" pointer to the internal part of an XMP file-handling object. Use to pass an XMP +/// file-handling object across client DLL boundaries. See \c TXMPFiles. typedef struct __XMPFiles__ * XMPFilesRef; -/* ============================================================================================== */ - -/** - * \name General scalar types and constants - * @{ - */ - -/** - * \typedef XMP_StringPtr - * \brief The type for input string parameters. A <tt>const char *</tt>, a null-terminated UTF-8 string. - * - */ - -/** - * \typedef XMP_StringLen - * \brief The type for string length parameters. A 32-bit unsigned integer, as big as will be - * practically needed. - */ - -/** - * \typedef XMP_Index - * \brief The type for offsets and indices. A 32-bit signed integer. It is signed because that - * often makes loop termination tests safer. - */ - -/** - * \typedef XMP_OptionBits - * \brief The type for a collection of 32 flag bits. Individual flags are defined as enum value - * bit masks. A number of macros provide common set or set operations, e.g. \c XMP_PropIsSimple. - * For other tests use an expression like "options & kXMP_<theOption>". When passing multiple - * option flags use the bitwise-or operator. '|', not the arithmatic plus, '+'. - */ - -typedef const char * XMP_StringPtr; /* Points to a null terminated UTF-8 string. */ +// ================================================================================================= + +/// \name General scalar types and constants +/// @{ + +/// \typedef XMP_StringPtr +/// \brief The type for input string parameters. A <tt>const char *</tt>, a null-terminated UTF-8 +/// string. + +/// \typedef XMP_StringLen +/// \brief The type for string length parameters. A 32-bit unsigned integer, as big as will be +/// practically needed. + +/// \typedef XMP_Index +/// \brief The type for offsets and indices. A 32-bit signed integer. It is signed to allow -1 for +/// loop termination. + +/// \typedef XMP_OptionBits +/// \brief The type for a collection of 32 flag bits. Individual flags are defined as enum value bit +/// masks; see \c #kXMP_PropValueIsURI and following. A number of macros provide common set or set +/// operations, such as \c XMP_PropIsSimple. For other tests use an expression like <code>options & +/// kXMP_<theOption></code>. When passing multiple option flags use the bitwise-OR operator. '|', +/// not the arithmatic plus, '+'. + +typedef const char * XMP_StringPtr; // Points to a null terminated UTF-8 string. typedef XMP_Uns32 XMP_StringLen; -typedef XMP_Int32 XMP_Index; /* Signed, sometimes -1 is handy. */ -typedef XMP_Uns32 XMP_OptionBits; /* Used as 32 individual bits. */ - -/** - * \def kXMP_TrueStr - * \brief The canonical true string value for Booleans in serialized XMP. Code that converts - * from the string to a bool should be case insensitive, and even allow "1". - */ - -/** - * \def kXMP_FalseStr - * \brief The canonical false string value for Booleans in serialized XMP. Code that converts - * from the string to a bool should be case insensitive, and even allow "0". - */ - -#define kXMP_TrueStr "True" /* Serialized XMP spellings, not for the type bool. */ +typedef XMP_Int32 XMP_Index; // Signed, sometimes -1 is handy. +typedef XMP_Uns32 XMP_OptionBits; // Used as 32 individual bits. + +/// \def kXMP_TrueStr +/// \brief The canonical true string value for Booleans in serialized XMP. +/// +/// Code that converts from string to bool should be case insensitive, and also allow "1". + +/// \def kXMP_FalseStr +/// \brief The canonical false string value for Booleans in serialized XMP. +/// +/// Code that converts from string to bool should be case insensitive, and also allow "0". + +#define kXMP_TrueStr "True" // Serialized XMP spellings, not for the type bool. #define kXMP_FalseStr "False" -/** - * @} - */ - -/* ============================================================================================== */ - -/** - * \struct XMP_DateTime - * \brief The expanded type for a date and time. Dates and time in the serialized XMP are ISO 8601 - * strings. The \c XMP_DateTime struct allows easy conversion with other formats. - * - * All of the fields are 32 bit, even though most could be 8 bit. This avoids overflow when doing - * carries for arithmetic or normalization. All fields have signed values for the same reasons. - * - * The fields of the \c XMP_DateTime struct are: - * - * \li year- The year, can be negative. - * \li month - The month in the range 1..12. - * \li day - The day of the month in the range 1..31. - * \li hour - The hour in the range 0..23. - * \li minute - The minute in the range 0..59. - * \li second - The second in the range 0..59. - * \li tzSign - The "sign" of the time zone, 0 means UTC, -1 is west, +1 is east. - * \li tzHour - The time zone hour in the range 0..23. - * \li tzMinute - The time zone minute in the range 0..59. - * \li nanoSecond - Nanoseconds within a second, often left as zero. - * - * Constants for the \c tzSign are: - * - * \li \c kXMP_TimeIsUTC - The time is UTC. - * \li \c kXMP_TimeWestOfUTC - The time zone is west of UTC, behind in time. - * \li \c kXMP_TimeEastOfUTC - The time zone is east of UTC, ahead in time. - * - * DateTime values are occasionally used in cases with only a date or only a time component. A date - * without a time has zeros in the \c XMP_DateTime struct for all time fields. A time without a date - * has zeros for all date fields (year, month, and day). - */ +/// Type for yes/no/maybe answers. The values are picked to allow Boolean-like usage. The yes and +/// values are true (non-zero), the no value is false (zero). +enum { + /// The part or parts have definitely changed. + kXMPTS_Yes = 1, + /// The part or parts have definitely not changed. + kXMPTS_No = 0, + /// The part or parts might, or might not, have changed. + kXMPTS_Maybe = -1 +}; +typedef XMP_Int8 XMP_TriState; + +/// @} + +// ================================================================================================= + +/// \struct XMP_DateTime +/// \brief The expanded type for a date and time. +/// +/// Dates and time in the serialized XMP are ISO 8601 strings. The \c XMP_DateTime struct allows +/// easy conversion with other formats. +/// +/// All of the fields are 32 bit, even though most could be 8 bit. This avoids overflow when doing +/// carries for arithmetic or normalization. All fields have signed values for the same reasons. +/// +/// Date-time values are occasionally used with only a date or only a time component. A date without +/// a time has zeros in the \c XMP_DateTime struct for all time fields. A time without a date has +/// zeros for all date fields (year, month, and day). +/// +/// \c TXMPUtils provides utility functions for manipulating date-time values. +/// +/// @see \c TXMPUtils::ConvertToDate(), \c TXMPUtils::ConvertFromDate(), +/// \c TXMPUtils::CompareDateTime(), \c TXMPUtils::ConvertToLocalTime(), +/// \c TXMPUtils::ConvertToUTCTime(), \c TXMPUtils::CurrentDateTime(), +/// \c TXMPUtils::SetTimeZone() struct XMP_DateTime { + + /// The year, can be negative. XMP_Int32 year; - XMP_Int32 month; /* 1..12 */ - XMP_Int32 day; /* 1..31 */ - XMP_Int32 hour; /* 0..23 */ - XMP_Int32 minute; /* 0..59 */ - XMP_Int32 second; /* 0..59 */ - XMP_Int32 tzSign; /* -1..+1, 0 means UTC, -1 is west, +1 is east. */ - XMP_Int32 tzHour; /* 0..23 */ - XMP_Int32 tzMinute; /* 0..59 */ + + /// The month in the range 1..12. + XMP_Int32 month; + + /// The day of the month in the range 1..31. + XMP_Int32 day; + + /// The hour in the range 0..23. + XMP_Int32 hour; + + /// The minute in the range 0..59. + XMP_Int32 minute; + + /// The second in the range 0..59. + XMP_Int32 second; + + /// The "sign" of the time zone, \c #kXMP_TimeIsUTC (0) means UTC, \c #kXMP_TimeWestOfUTC (-1) + /// is west, \c #kXMP_TimeEastOfUTC (+1) is east. + XMP_Int32 tzSign; + + /// The time zone hour in the range 0..23. + XMP_Int32 tzHour; + + /// The time zone minute in the range 0..59. + XMP_Int32 tzMinute; + + /// Nanoseconds within a second, often left as zero. XMP_Int32 nanoSecond; + }; -enum { /* Values used for tzSign field. */ +/// Constant values for \c XMP_DateTime::tzSign field. +enum { + /// Time zone is west of UTC. kXMP_TimeWestOfUTC = -1, + /// UTC time. kXMP_TimeIsUTC = 0, + /// Time zone is east of UTC. kXMP_TimeEastOfUTC = +1 }; - -/* ============================================================================================== */ -/* Standard namespace URI constants */ -/* ================================ */ - -/** - * \name XML namespace constants for standard XMP schema. - * @{ - */ - -/** - * \def kXMP_NS_XMP - * \brief The XML namespace for the XMP "basic" schema. - */ - -/** - * \def kXMP_NS_XMP_Rights - * \brief The XML namespace for the XMP copyright schema. - */ - -/** - * \def kXMP_NS_XMP_MM - * \brief The XML namespace for the XMP digital asset management schema. - */ - -/** - * \def kXMP_NS_XMP_BJ - * \brief The XML namespace for the job management schema. - */ - -/** - * \def kXMP_NS_XMP_T - * \brief The XML namespace for the XMP text document schema. - */ - -/** - * \def kXMP_NS_XMP_T_PG - * \brief The XML namespace for the XMP paged document schema. - */ - -/** - * \def kXMP_NS_PDF - * \brief The XML namespace for the PDF schema. - */ - -/** - * \def kXMP_NS_Photoshop - * \brief The XML namespace for the Photoshop custom schema. - */ - -/** - * \def kXMP_NS_EXIF - * \brief The XML namespace for Adobe's EXIF schema. - */ - -/** - * \def kXMP_NS_TIFF - * \brief The XML namespace for Adobe's TIFF schema. - */ - -/** - * @} - */ +// ================================================================================================= +// Standard namespace URI constants +// ================================ + +/// \name XML namespace constants for standard XMP schema. +/// @{ +/// +/// \def kXMP_NS_XMP +/// \brief The XML namespace for the XMP "basic" schema. +/// +/// \def kXMP_NS_XMP_Rights +/// \brief The XML namespace for the XMP copyright schema. +/// +/// \def kXMP_NS_XMP_MM +/// \brief The XML namespace for the XMP digital asset management schema. +/// +/// \def kXMP_NS_XMP_BJ +/// \brief The XML namespace for the job management schema. +/// +/// \def kXMP_NS_XMP_T +/// \brief The XML namespace for the XMP text document schema. +/// +/// \def kXMP_NS_XMP_T_PG +/// \brief The XML namespace for the XMP paged document schema. +/// +/// \def kXMP_NS_PDF +/// \brief The XML namespace for the PDF schema. +/// +/// \def kXMP_NS_Photoshop +/// \brief The XML namespace for the Photoshop custom schema. +/// +/// \def kXMP_NS_EXIF +/// \brief The XML namespace for Adobe's EXIF schema. +/// +/// \def kXMP_NS_TIFF +/// \brief The XML namespace for Adobe's TIFF schema. +/// +/// @} #define kXMP_NS_XMP "http://ns.adobe.com/xap/1.0/" @@ -294,50 +264,33 @@ enum { /* Values used for tzSign field. */ #define kXMP_NS_XMP_Note "http://ns.adobe.com/xmp/note/" #define kXMP_NS_AdobeStockPhoto "http://ns.adobe.com/StockPhoto/1.0/" - -/** - * \name XML namespace constants for qualifiers and structured property fields. - * @{ - */ - -/** - * \def kXMP_NS_XMP_IdentifierQual - * \brief The XML namespace for qualifiers of the xmp:Identifier property. - */ - -/** - * \def kXMP_NS_XMP_Dimensions - * \brief The XML namespace for fields of the Dimensions type. - */ - -/** - * \def kXMP_NS_XMP_Image - * \brief The XML namespace for fields of a graphical image. Used for the Thumbnail type. - */ - -/** - * \def kXMP_NS_XMP_ResourceEvent - * \brief The XML namespace for fields of the ResourceEvent type. - */ - -/** - * \def kXMP_NS_XMP_ResourceRef - * \brief The XML namespace for fields of the ResourceRef type. - */ - -/** - * \def kXMP_NS_XMP_ST_Version - * \brief The XML namespace for fields of the Version type. - */ - -/** - * \def kXMP_NS_XMP_ST_Job - * \brief The XML namespace for fields of the JobRef type. - */ - -/** - * @} - */ +#define kXMP_NS_CreatorAtom "http://ns.adobe.com/creatorAtom/1.0/" + +/// \name XML namespace constants for qualifiers and structured property fields. +/// @{ +/// +/// \def kXMP_NS_XMP_IdentifierQual +/// \brief The XML namespace for qualifiers of the xmp:Identifier property. +/// +/// \def kXMP_NS_XMP_Dimensions +/// \brief The XML namespace for fields of the Dimensions type. +/// +/// \def kXMP_NS_XMP_Image +/// \brief The XML namespace for fields of a graphical image. Used for the Thumbnail type. +/// +/// \def kXMP_NS_XMP_ResourceEvent +/// \brief The XML namespace for fields of the ResourceEvent type. +/// +/// \def kXMP_NS_XMP_ResourceRef +/// \brief The XML namespace for fields of the ResourceRef type. +/// +/// \def kXMP_NS_XMP_ST_Version +/// \brief The XML namespace for fields of the Version type. +/// +/// \def kXMP_NS_XMP_ST_Job +/// \brief The XML namespace for fields of the JobRef type. +/// +/// @} #define kXMP_NS_XMP_IdentifierQual "http://ns.adobe.com/xmp/Identifier/qual/1.0/" #define kXMP_NS_XMP_Dimensions "http://ns.adobe.com/xap/1.0/sType/Dimensions#" @@ -352,43 +305,33 @@ enum { /* Values used for tzSign field. */ #define kXMP_NS_XMP_ST_Job "http://ns.adobe.com/xap/1.0/sType/Job#" #define kXMP_NS_XMP_ManifestItem "http://ns.adobe.com/xap/1.0/sType/ManifestItem#" -/* Deprecated constant names */ +// Deprecated XML namespace constants #define kXMP_NS_XMP_T "http://ns.adobe.com/xap/1.0/t/" #define kXMP_NS_XMP_T_PG "http://ns.adobe.com/xap/1.0/t/pg/" #define kXMP_NS_XMP_G_IMG "http://ns.adobe.com/xap/1.0/g/img/" -/** - * \name XML namespace constants from outside Adobe. - * @{ - */ - -/** - * \def kXMP_NS_DC - * \brief The XML namespace for the Dublin Core schema. - */ - -/** - * \def kXMP_NS_IPTCCore - * \brief The XML namespace for the IPTC Core schema. - */ - -/** - * \def kXMP_NS_RDF - * \brief The XML namespace for RDF. - */ - -/** - * \def kXMP_NS_XML - * \brief The XML namespace for XML. - */ - -/** - * @} - */ - -#define kXMP_NS_DC "http://purl.org/dc/elements/1.1/" - -#define kXMP_NS_IPTCCore "http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/" +/// \name XML namespace constants from outside Adobe. +/// @{ +/// +/// \def kXMP_NS_DC +/// \brief The XML namespace for the Dublin Core schema. +/// +/// \def kXMP_NS_IPTCCore +/// \brief The XML namespace for the IPTC Core schema. +/// +/// \def kXMP_NS_RDF +/// \brief The XML namespace for RDF. +/// +/// \def kXMP_NS_XML +/// \brief The XML namespace for XML. +/// +/// @} + +#define kXMP_NS_DC "http://purl.org/dc/elements/1.1/" + +#define kXMP_NS_IPTCCore "http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/" + +#define kXMP_NS_DICOM "http://ns.adobe.com/DICOM/" #define kXMP_NS_PDFA_Schema "http://www.aiim.org/pdfa/ns/schema#" #define kXMP_NS_PDFA_Property "http://www.aiim.org/pdfa/ns/property#" @@ -400,28 +343,127 @@ enum { /* Values used for tzSign field. */ #define kXMP_NS_PDFX "http://ns.adobe.com/pdfx/1.3/" #define kXMP_NS_PDFX_ID "http://www.npes.org/pdfx/ns/id/" -#define kXMP_NS_RDF "http://www.w3.org/1999/02/22-rdf-syntax-ns#" -#define kXMP_NS_XML "http://www.w3.org/XML/1998/namespace" - +#define kXMP_NS_RDF "http://www.w3.org/1999/02/22-rdf-syntax-ns#" +#define kXMP_NS_XML "http://www.w3.org/XML/1998/namespace" -/* ============================================================================================== */ -/* Enums and macros used for option bits */ -/* ===================================== */ +// ================================================================================================= +// Enums and macros used for option bits +// ===================================== + +/// \name Macros for standard option selections. +/// @{ +/// +/// \def kXMP_ArrayLastItem +/// \brief Options macro accesses last array item. +/// +/// \def kXMP_UseNullTermination +/// \brief Options macro sets string style. +/// +/// \def kXMP_NoOptions +/// \brief Options macro clears all property-type bits. +/// +/// @} #define kXMP_ArrayLastItem ((XMP_Index)(-1L)) #define kXMP_UseNullTermination ((XMP_StringLen)(~0UL)) - #define kXMP_NoOptions ((XMP_OptionBits)0UL) +/// \name Macros for setting and testing general option bits. +/// @{ +/// +/// \def XMP_SetOption +/// \brief Macro sets an option flag bit. +/// \param var A variable storing an options flag. +/// \param opt The bit-flag constant to set. +/// +/// \def XMP_ClearOption +/// \brief Macro clears an option flag bit. +/// \param var A variable storing an options flag. +/// \param opt The bit-flag constant to clear. +/// +/// \def XMP_TestOption +/// \brief Macro reports whether an option flag bit is set. +/// \param var A variable storing an options flag. +/// \param opt The bit-flag constant to test. +/// \return True if the bit is set. +/// +/// \def XMP_OptionIsSet +/// \brief Macro reports whether an option flag bit is set. +/// \param var A variable storing an options flag. +/// \param opt The bit-flag constant to test. +/// \return True if the bit is set. +/// +/// \def XMP_OptionIsClear +/// \brief Macro reports whether an option flag bit is clear. +/// \param var A variable storing an options flag. +/// \param opt The bit-flag constant to test. +/// \return True if the bit is clear. +/// +/// @} + #define XMP_SetOption(var,opt) var |= (opt) #define XMP_ClearOption(var,opt) var &= ~(opt) #define XMP_TestOption(var,opt) (((var) & (opt)) != 0) #define XMP_OptionIsSet(var,opt) (((var) & (opt)) != 0) #define XMP_OptionIsClear(var,opt) (((var) & (opt)) == 0) +/// \name Macros for setting and testing specific option bits. +/// @{ +/// +/// \def XMP_PropIsSimple +/// \brief Macro reports the property type specified by an options flag. +/// \param opt The options flag to check. +/// +/// \def XMP_PropIsStruct +/// \brief Macro reports the property type specified by an options flag. +/// \param opt The options flag to check. +/// +/// \def XMP_PropIsArray +/// \brief Macro reports the property type specified by an options flag. +/// \param opt The options flag to check. +/// +/// \def XMP_ArrayIsUnordered +/// \brief Macro reports the property type specified by an options flag. +/// \param opt The options flag to check. +/// +/// \def XMP_ArrayIsOrdered +/// \brief Macro reports the property type specified by an options flag. +/// \param opt The options flag to check. +/// +/// \def XMP_ArrayIsAlternate +/// \brief Macro reports the property type specified by an options flag. +/// \param opt The options flag to check. +/// +/// \def XMP_ArrayIsAltText +/// \brief Macro reports the property type specified by an options flag. +/// \param opt The options flag to check. +/// +/// \def XMP_PropHasQualifiers +/// \brief Macro reports the property type specified by an options flag. +/// \param opt The options flag to check. +/// +/// \def XMP_PropIsQualifier +/// \brief Macro reports the property type specified by an options flag. +/// \param opt The options flag to check. +/// +/// \def XMP_PropHasLang +/// \brief Macro reports the property type specified by an options flag. +/// \param opt The options flag to check. +/// +/// \def XMP_NodeIsSchema +/// \brief Macro reports the property type specified by an options flag. +/// \param opt The options flag to check. +/// +/// \def XMP_PropIsAlias +/// \brief Macro reports the property type specified by an options flag. +/// \param opt The options flag to check. +/// +/// @} + #define XMP_PropIsSimple(opt) (((opt) & kXMP_PropCompositeMask) == 0) #define XMP_PropIsStruct(opt) (((opt) & kXMP_PropValueIsStruct) != 0) #define XMP_PropIsArray(opt) (((opt) & kXMP_PropValueIsArray) != 0) + #define XMP_ArrayIsUnordered(opt) (((opt) & kXMP_PropArrayIsOrdered) == 0) #define XMP_ArrayIsOrdered(opt) (((opt) & kXMP_PropArrayIsOrdered) != 0) #define XMP_ArrayIsAlternate(opt) (((opt) & kXMP_PropArrayIsAlternate) != 0) @@ -434,480 +476,855 @@ enum { /* Values used for tzSign field. */ #define XMP_NodeIsSchema(opt) (((opt) & kXMP_SchemaNode) != 0) #define XMP_PropIsAlias(opt) (((opt) & kXMP_PropIsAlias) != 0) -/* ---------------------------------------------------------------------------------------------- */ - -enum { /* Option bits returned from the TXMPMeta::GetXyz functions. */ - - /* Options relating to the XML string form of the property value. */ - kXMP_PropValueIsURI = 0x00000002UL, /* The value is a URI, use rdf:resource attribute. DISCOURAGED */ - - /* Options relating to qualifiers attached to a property. */ - kXMP_PropHasQualifiers = 0x00000010UL, /* The property has qualifiers, includes rdf:type and xml:lang. */ - kXMP_PropIsQualifier = 0x00000020UL, /* This is a qualifier, includes rdf:type and xml:lang. */ - kXMP_PropHasLang = 0x00000040UL, /* Implies kXMP_PropHasQualifiers, property has xml:lang. */ - kXMP_PropHasType = 0x00000080UL, /* Implies kXMP_PropHasQualifiers, property has rdf:type. */ - - /* Options relating to the data structure form. */ - kXMP_PropValueIsStruct = 0x00000100UL, /* The value is a structure with nested fields. */ - kXMP_PropValueIsArray = 0x00000200UL, /* The value is an array (RDF alt/bag/seq). */ - kXMP_PropArrayIsUnordered = kXMP_PropValueIsArray, /* The item order does not matter. */ - kXMP_PropArrayIsOrdered = 0x00000400UL, /* Implies kXMP_PropValueIsArray, item order matters. */ - kXMP_PropArrayIsAlternate = 0x00000800UL, /* Implies kXMP_PropArrayIsOrdered, items are alternates. */ - - /* Additional struct and array options. */ - kXMP_PropArrayIsAltText = 0x00001000UL, /* Implies kXMP_PropArrayIsAlternate, items are localized text. */ - /* kXMP_InsertBeforeItem = 0x00004000UL, ! Used by SetXyz functions. */ - /* kXMP_InsertAfterItem = 0x00008000UL, ! Used by SetXyz functions. */ - - /* Other miscellaneous options. */ - kXMP_PropIsAlias = 0x00010000UL, /* This property is an alias name for another property. */ - kXMP_PropHasAliases = 0x00020000UL, /* This property is the base value for a set of aliases. */ - kXMP_PropIsInternal = 0x00040000UL, /* This property is an "internal" property, owned by applications. */ - kXMP_PropIsStable = 0x00100000UL, /* This property is not derived from the document content. */ - kXMP_PropIsDerived = 0x00200000UL, /* This property is derived from the document content. */ - /* kXMPUtil_AllowCommas = 0x10000000UL, ! Used by TXMPUtils::CatenateArrayItems and ::SeparateArrayItems. */ - /* kXMP_DeleteExisting = 0x20000000UL, ! Used by TXMPMeta::SetXyz functions to delete any pre-existing property. */ - /* kXMP_SchemaNode = 0x80000000UL, ! Returned by iterators - #define to avoid warnings */ - - /* Masks that are multiple flags. */ +// ------------------------------------------------------------------------------------------------- + +/// Option bit flags for the \c TXMPMeta property accessor functions. +enum { + + /// The XML string form of the property value is a URI, use rdf:resource attribute. DISCOURAGED + kXMP_PropValueIsURI = 0x00000002UL, + + // ------------------------------------------------------ + // Options relating to qualifiers attached to a property. + + /// The property has qualifiers, includes \c rdf:type and \c xml:lang. + kXMP_PropHasQualifiers = 0x00000010UL, + + /// This is a qualifier for some other property, includes \c rdf:type and \c xml:lang. + /// Qualifiers can have arbitrary structure, and can themselves have qualifiers. If the + /// qualifier itself has a structured value, this flag is only set for the top node of the + /// qualifier's subtree. + kXMP_PropIsQualifier = 0x00000020UL, + + /// Implies \c #kXMP_PropHasQualifiers, property has \c xml:lang. + kXMP_PropHasLang = 0x00000040UL, + + /// Implies \c #kXMP_PropHasQualifiers, property has \c rdf:type. + kXMP_PropHasType = 0x00000080UL, + + // -------------------------------------------- + // Options relating to the data structure form. + + /// The value is a structure with nested fields. + kXMP_PropValueIsStruct = 0x00000100UL, + + /// The value is an array (RDF alt/bag/seq). The "ArrayIs..." flags identify specific types + /// of array; default is a general unordered array, serialized using an \c rdf:Bag container. + kXMP_PropValueIsArray = 0x00000200UL, + + /// The item order does not matter. + kXMP_PropArrayIsUnordered = kXMP_PropValueIsArray, + + /// Implies \c #kXMP_PropValueIsArray, item order matters. It is serialized using an \c rdf:Seq container. + kXMP_PropArrayIsOrdered = 0x00000400UL, + + /// Implies \c #kXMP_PropArrayIsOrdered, items are alternates. It is serialized using an \c rdf:Alt container. + kXMP_PropArrayIsAlternate = 0x00000800UL, + + // ------------------------------------ + // Additional struct and array options. + + /// Implies \c #kXMP_PropArrayIsAlternate, items are localized text. Each array element is a + /// simple property with an \c xml:lang attribute. + kXMP_PropArrayIsAltText = 0x00001000UL, + + // kXMP_InsertBeforeItem = 0x00004000UL, ! Used by SetXyz functions. + // kXMP_InsertAfterItem = 0x00008000UL, ! Used by SetXyz functions. + + // ---------------------------- + // Other miscellaneous options. + + /// This property is an alias name for another property. This is only returned by + /// \c TXMPMeta::GetProperty() and then only if the property name is simple, not an path expression. + kXMP_PropIsAlias = 0x00010000UL, + + /// This property is the base value (actual) for a set of aliases.This is only returned by + /// \c TXMPMeta::GetProperty() and then only if the property name is simple, not an path expression. + kXMP_PropHasAliases = 0x00020000UL, + + /// The value of this property is "owned" by the application, and should not generally be editable in a UI. + kXMP_PropIsInternal = 0x00040000UL, + + /// The value of this property is not derived from the document content. + kXMP_PropIsStable = 0x00100000UL, + + /// The value of this property is derived from the document content. + kXMP_PropIsDerived = 0x00200000UL, + + // kXMPUtil_AllowCommas = 0x10000000UL, ! Used by TXMPUtils::CatenateArrayItems and ::SeparateArrayItems. + // kXMP_DeleteExisting = 0x20000000UL, ! Used by TXMPMeta::SetXyz functions to delete any pre-existing property. + // kXMP_SchemaNode = 0x80000000UL, ! Returned by iterators - #define to avoid warnings + + // ------------------------------ + // Masks that are multiple flags. + + /// Property type bit-flag mask for all array types kXMP_PropArrayFormMask = kXMP_PropValueIsArray | kXMP_PropArrayIsOrdered | kXMP_PropArrayIsAlternate | kXMP_PropArrayIsAltText, - kXMP_PropCompositeMask = kXMP_PropValueIsStruct | kXMP_PropArrayFormMask, /* Is it simple or composite (array or struct)? */ - kXMP_ImplReservedMask = 0x70000000L /* Reserved for transient use by the implementation. */ + + /// Property type bit-flag mask for composite types (array and struct) + kXMP_PropCompositeMask = kXMP_PropValueIsStruct | kXMP_PropArrayFormMask, + + /// Mask for bits that are reserved for transient use by the implementation. + kXMP_ImplReservedMask = 0x70000000L + }; #define kXMP_SchemaNode ((XMP_OptionBits)0x80000000UL) -enum { /* Option bits for the TXMPMeta::SetXyz functions. */ +/// Option bit flags for the \c TXMPMeta property setting functions. These option bits are shared +/// with the accessor functions: +/// \li \c #kXMP_PropValueIsURI +/// \li \c #kXMP_PropValueIsStruct +/// \li \c #kXMP_PropValueIsArray +/// \li \c #kXMP_PropArrayIsOrdered +/// \li \c #kXMP_PropArrayIsAlternate +/// \li \c #kXMP_PropArrayIsAltText +enum { - /* Options shared with GetXyz functions. */ - /* - kXMP_PropValueIsURI = 0x00000002UL, DISCOURAGED - kXMP_PropValueIsStruct = 0x00000100UL, - kXMP_PropValueIsArray = 0x00000200UL, - kXMP_PropArrayIsOrdered = 0x00000400UL, - kXMP_PropArrayIsAlternate = 0x00000800UL, - kXMP_PropArrayIsAltText = 0x00001000UL, - kXMP_PropValueIsCompact = 0x00002000UL, RESERVED - */ + /// Option for array item location: Insert a new item before the given index. + kXMP_InsertBeforeItem = 0x00004000UL, - /* Options for array item location. */ - kXMP_InsertBeforeItem = 0x00004000UL, /* Insert a new item before the given index. */ - kXMP_InsertAfterItem = 0x00008000UL, /* Insert a new item after the given index. */ + /// Option for array item location: Insert a new item after the given index. + kXMP_InsertAfterItem = 0x00008000UL, - /* Miscellaneous options */ - kXMP_DeleteExisting = 0x20000000UL, /* Delete any pre-existing property. */ + /// Delete any pre-existing property. + kXMP_DeleteExisting = 0x20000000UL, - /* Masks that are multiple flags. */ + /// Bit-flag mask for property-value option bits kXMP_PropValueOptionsMask = kXMP_PropValueIsURI, + + /// Bit-flag mask for array-item location bits kXMP_PropArrayLocationMask = kXMP_InsertBeforeItem | kXMP_InsertAfterItem }; -/* ---------------------------------------------------------------------------------------------- */ +// ------------------------------------------------------------------------------------------------- + +/// Option bit flags for \c TXMPMeta::ParseFromBuffer(). +enum { + + /// Require a surrounding \c x:xmpmeta element. + kXMP_RequireXMPMeta = 0x0001UL, + + /// This is the not last input buffer for this parse stream. + kXMP_ParseMoreBuffers = 0x0002UL, + + /// Do not reconcile alias differences, throw an exception. + kXMP_StrictAliasing = 0x0004UL -enum { /* Options for TXMPMeta::ParseFromBuffer. */ - kXMP_RequireXMPMeta = 0x0001UL, /* Require a surrounding x:xmpmeta element. */ - kXMP_ParseMoreBuffers = 0x0002UL, /* This is the not last input buffer for this parse stream. */ - kXMP_StrictAliasing = 0x0004UL /* Do not reconcile alias differences, throw an exception. */ }; -enum { /* Options for TXMPMeta::SerializeToBuffer. */ +/// Option bit flags for \c TXMPMeta::SerializeToBuffer(). +enum { + + // *** Option to remove empty struct/array, or leaf with empty value? + + /// Omit the XML packet wrapper. + kXMP_OmitPacketWrapper = 0x0010UL, + + /// Default is a writeable packet. + kXMP_ReadOnlyPacket = 0x0020UL, + + /// Use a compact form of RDF. + kXMP_UseCompactFormat = 0x0040UL, + + /// Include a padding allowance for a thumbnail image. + kXMP_IncludeThumbnailPad = 0x0100UL, - /* *** Option to remove empty struct/array, or leaf with empty value? */ + /// The padding parameter is the overall packet length. + kXMP_ExactPacketLength = 0x0200UL, - kXMP_OmitPacketWrapper = 0x0010UL, /* Omit the XML packet wrapper. */ - kXMP_ReadOnlyPacket = 0x0020UL, /* Default is a writeable packet. */ - kXMP_UseCompactFormat = 0x0040UL, /* Use a compact form of RDF. */ + /// Show aliases as XML comments. + kXMP_WriteAliasComments = 0x0400UL, - kXMP_IncludeThumbnailPad = 0x0100UL, /* Include a padding allowance for a thumbnail image. */ - kXMP_ExactPacketLength = 0x0200UL, /* The padding parameter is the overall packet length. */ - kXMP_WriteAliasComments = 0x0400UL, /* Show aliases as XML comments. */ - kXMP_OmitAllFormatting = 0x0800UL, /* Omit all formatting whitespace. */ + /// Omit all formatting whitespace. + kXMP_OmitAllFormatting = 0x0800UL, + + /// Omit the x:xmpmeta element surrounding the rdf:RDF element. + kXMP_OmitXMPMetaElement = 0x1000UL, - _XMP_LittleEndian_Bit = 0x0001UL, /* ! Don't use directly, see the combined values below! */ + _XMP_LittleEndian_Bit = 0x0001UL, // ! Don't use directly, see the combined values below! _XMP_UTF16_Bit = 0x0002UL, _XMP_UTF32_Bit = 0x0004UL, + /// Bit-flag mask for encoding-type bits kXMP_EncodingMask = 0x0007UL, + + /// Use UTF8 encoding kXMP_EncodeUTF8 = 0UL, + + /// Use UTF16 big-endian encoding kXMP_EncodeUTF16Big = _XMP_UTF16_Bit, + + /// Use UTF16 little-endian encoding kXMP_EncodeUTF16Little = _XMP_UTF16_Bit | _XMP_LittleEndian_Bit, + + /// Use UTF32 big-endian encoding kXMP_EncodeUTF32Big = _XMP_UTF32_Bit, + + /// Use UTF13 little-endian encoding kXMP_EncodeUTF32Little = _XMP_UTF32_Bit | _XMP_LittleEndian_Bit }; -/* ---------------------------------------------------------------------------------------------- */ +// ------------------------------------------------------------------------------------------------- -enum { /* Options for TXMPIterator construction. */ +/// Option bit flags for \c TXMPIterator construction. +enum { - kXMP_IterClassMask = 0x00FFUL, /* The low 8 bits are an enum of what data structure to iterate. */ - kXMP_IterProperties = 0x0000UL, /* Iterate the property tree of a TXMPMeta object. */ - kXMP_IterAliases = 0x0001UL, /* Iterate the global alias table. */ - kXMP_IterNamespaces = 0x0002UL, /* Iterate the global namespace table. */ - kXMP_IterJustChildren = 0x0100UL, /* Just do the immediate children of the root, default is subtree. */ - kXMP_IterJustLeafNodes = 0x0200UL, /* Just do the leaf nodes, default is all nodes in the subtree. */ - kXMP_IterJustLeafName = 0x0400UL, /* Return just the leaf part of the path, default is the full path. */ - kXMP_IterIncludeAliases = 0x0800UL, /* Include aliases, default is just actual properties. */ + /// The low 8 bits are an enum of what data structure to iterate. + kXMP_IterClassMask = 0x00FFUL, - kXMP_IterOmitQualifiers = 0x1000UL /* Omit all qualifiers. */ + /// Iterate the property tree of a TXMPMeta object. + kXMP_IterProperties = 0x0000UL, -}; + /// Iterate the global alias table. + kXMP_IterAliases = 0x0001UL, -enum { /* Options for TXMPIterator::Skip. */ - kXMP_IterSkipSubtree = 0x0001UL, /* Skip the subtree below the current node. */ - kXMP_IterSkipSiblings = 0x0002UL /* Skip the subtree below and remaining siblings of the current node. */ -}; + /// Iterate the global namespace table. + kXMP_IterNamespaces = 0x0002UL, -/* ---------------------------------------------------------------------------------------------- */ + /// Just do the immediate children of the root, default is subtree. + kXMP_IterJustChildren = 0x0100UL, -enum { /* Options for TXMPUtils::CatenateArrayItems and TXMPUtils::SeparateArrayItems. */ + /// Just do the leaf nodes, default is all nodes in the subtree. + kXMP_IterJustLeafNodes = 0x0200UL, - /* Options shared with GetXyz functions. */ - /* - kXMP_PropValueIsArray = 0x00000200UL, - kXMP_PropArrayIsOrdered = 0x00000400UL, - kXMP_PropArrayIsAlternate = 0x00000800UL, - kXMP_PropArrayIsAltText = 0x00001000UL, - */ + /// Return just the leaf part of the path, default is the full path. + kXMP_IterJustLeafName = 0x0400UL, - kXMPUtil_AllowCommas = 0x10000000UL /* Allow commas in item values, default is separator. */ + /// Include aliases, default is just actual properties. + kXMP_IterIncludeAliases = 0x0800UL, + + /// Omit all qualifiers. + kXMP_IterOmitQualifiers = 0x1000UL }; -enum { /* Options for TXMPUtils::RemoveProperties and TXMPUtils::AppendProperties. */ - kXMPUtil_DoAllProperties = 0x0001UL, /* Do all properties, default is just external properties. */ - kXMPUtil_ReplaceOldValues = 0x0002UL, /* Replace existing values, default is to leave them. */ - kXMPUtil_DeleteEmptyValues = 0x0004UL, /* Delete properties if the new value is empty. */ - kXMPUtil_IncludeAliases = 0x0800UL /* == kXMP_IterIncludeAliases */ +/// Option bit flags for \c TXMPIterator::Skip(). +enum { + + /// Skip the subtree below the current node. + kXMP_IterSkipSubtree = 0x0001UL, + + /// Skip the subtree below and remaining siblings of the current node. + kXMP_IterSkipSiblings = 0x0002UL + }; -/* ============================================================================================== */ -/* Types and Constants for XMP File Handler */ -/* ======================================== */ +// ------------------------------------------------------------------------------------------------- +/// Option bit flags for \c TXMPUtils::CatenateArrayItems() and \c TXMPUtils::SeparateArrayItems(). +/// These option bits are shared with the accessor functions: +/// \li \c #kXMP_PropValueIsArray, +/// \li \c #kXMP_PropArrayIsOrdered, +/// \li \c #kXMP_PropArrayIsAlternate, +/// \li \c #kXMP_PropArrayIsAltText +enum { + + /// Allow commas in item values, default is separator. + kXMPUtil_AllowCommas = 0x10000000UL +}; + +/// Option bit flags for \c TXMPUtils::RemoveProperties() and \c TXMPUtils::AppendProperties(). enum { - /* Public file formats. Hex used to avoid gcc warnings. */ - /* ! Leave them as big endian. There seems to be no decent way on UNIX to determine the target */ - /* ! endianness at compile time. Forcing it on the client isn't acceptable. */ + /// Do all properties, default is just external properties. + kXMPUtil_DoAllProperties = 0x0001UL, + + /// Replace existing values, default is to leave them. + kXMPUtil_ReplaceOldValues = 0x0002UL, - kXMP_PDFFile = 0x50444620UL, /* 'PDF ' */ - kXMP_PostScriptFile = 0x50532020UL, /* 'PS ', general PostScript following DSC conventions. */ - kXMP_EPSFile = 0x45505320UL, /* 'EPS ', encapsulated PostScript. */ + /// Delete properties if the new value is empty. + kXMPUtil_DeleteEmptyValues = 0x0004UL, + + /// Include aliases, default is just actual properties. + kXMPUtil_IncludeAliases = 0x0800UL + +}; - kXMP_JPEGFile = 0x4A504547UL, /* 'JPEG' */ - kXMP_JPEG2KFile = 0x4A505820UL, /* 'JPX ', ISO 15444-1 */ - kXMP_TIFFFile = 0x54494646UL, /* 'TIFF' */ - kXMP_GIFFile = 0x47494620UL, /* 'GIF ' */ - kXMP_PNGFile = 0x504E4720UL, /* 'PNG ' */ +// ================================================================================================= +// Types and Constants for XMPFiles +// ================================ + +/// File format constants for use with XMPFiles. +enum { - kXMP_SWFFile = 0x53574620UL, /* 'SWF ' */ - kXMP_FLAFile = 0x464C4120UL, /* 'FLA ' */ - kXMP_FLVFile = 0x464C5620UL, /* 'FLV ' */ - - kXMP_MOVFile = 0x4D4F5620UL, /* 'MOV ', Quicktime */ - kXMP_AVIFile = 0x41564920UL, /* 'AVI ' */ - kXMP_CINFile = 0x43494E20UL, /* 'CIN ', Cineon */ - kXMP_WAVFile = 0x57415620UL, /* 'WAV ' */ - kXMP_MP3File = 0x4D503320UL, /* 'MP3 ' */ - kXMP_SESFile = 0x53455320UL, /* 'SES ', Audition session */ - kXMP_CELFile = 0x43454C20UL, /* 'CEL ', Audition loop */ - kXMP_MPEGFile = 0x4D504547UL, /* 'MPEG' */ - kXMP_MPEG2File = 0x4D503220UL, /* 'MP2 ' */ - kXMP_MPEG4File = 0x4D503420UL, /* 'MP4 ', ISO 14494-12 and -14 */ - kXMP_WMAVFile = 0x574D4156UL, /* 'WMAV', Windows Media Audio and Video */ - kXMP_AIFFFile = 0x41494646UL, /* 'AIFF' */ - - kXMP_HTMLFile = 0x48544D4CUL, /* 'HTML' */ - kXMP_XMLFile = 0x584D4C20UL, /* 'XML ' */ - kXMP_TextFile = 0x74657874UL, /* 'text' */ - - /* Adobe application file formats. */ - - kXMP_PhotoshopFile = 0x50534420UL, /* 'PSD ' */ - kXMP_IllustratorFile = 0x41492020UL, /* 'AI ' */ - kXMP_InDesignFile = 0x494E4444UL, /* 'INDD' */ - kXMP_AEProjectFile = 0x41455020UL, /* 'AEP ' */ - kXMP_AEProjTemplateFile = 0x41455420UL, /* 'AET ', After Effects Project Template */ - kXMP_AEFilterPresetFile = 0x46465820UL, /* 'FFX ' */ - kXMP_EncoreProjectFile = 0x4E434F52UL, /* 'NCOR' */ - kXMP_PremiereProjectFile = 0x5052504AUL, /* 'PRPJ' */ - kXMP_PremiereTitleFile = 0x5052544CUL, /* 'PRTL' */ - - /* Catch all. */ - - kXMP_UnknownFile = 0x20202020UL /* ' ' */ + // ! Hex used to avoid gcc warnings. Leave the constants so the text reads big endian. There + // ! seems to be no decent way on UNIX to determine the target endianness at compile time. + // ! Forcing it on the client isn't acceptable. + + // -------------------- + // Public file formats. + + /// Public file format constant: 'PDF ' + kXMP_PDFFile = 0x50444620UL, + /// Public file format constant: 'PS ', general PostScript following DSC conventions + kXMP_PostScriptFile = 0x50532020UL, + /// Public file format constant: 'EPS ', encapsulated PostScript + kXMP_EPSFile = 0x45505320UL, + + /// Public file format constant: 'JPEG' + kXMP_JPEGFile = 0x4A504547UL, + /// Public file format constant: 'JPX ', JPEG 2000, ISO 15444-1 + kXMP_JPEG2KFile = 0x4A505820UL, + /// Public file format constant: 'TIFF' + kXMP_TIFFFile = 0x54494646UL, + /// Public file format constant: 'GIF ' + kXMP_GIFFile = 0x47494620UL, + /// Public file format constant: 'PNG ' + kXMP_PNGFile = 0x504E4720UL, + + /// Public file format constant: 'SWF ' + kXMP_SWFFile = 0x53574620UL, + /// Public file format constant: 'FLA ' + kXMP_FLAFile = 0x464C4120UL, + /// Public file format constant: 'FLV ' + kXMP_FLVFile = 0x464C5620UL, + + /// Public file format constant: 'MOV ', Quicktime + kXMP_MOVFile = 0x4D4F5620UL, + /// Public file format constant: 'AVI ' + kXMP_AVIFile = 0x41564920UL, + /// Public file format constant: 'CIN ', Cineon + kXMP_CINFile = 0x43494E20UL, + /// Public file format constant: 'WAV ' + kXMP_WAVFile = 0x57415620UL, + /// Public file format constant: 'MP3 ' + kXMP_MP3File = 0x4D503320UL, + /// Public file format constant: 'SES ', Audition session + kXMP_SESFile = 0x53455320UL, + /// Public file format constant: 'CEL ', Audition loop + kXMP_CELFile = 0x43454C20UL, + /// Public file format constant: 'MPEG' + kXMP_MPEGFile = 0x4D504547UL, + /// Public file format constant: 'MP2 ' + kXMP_MPEG2File = 0x4D503220UL, + /// Public file format constant: 'MP4 ', ISO 14494-12 and -14 + kXMP_MPEG4File = 0x4D503420UL, + /// Public file format constant: 'WMAV', Windows Media Audio and Video + kXMP_WMAVFile = 0x574D4156UL, + /// Public file format constant: 'AIFF' + kXMP_AIFFFile = 0x41494646UL, + /// Public file format constant: 'P2 ', a collection not really a single file + kXMP_P2File = 0x50322020UL, + /// Public file format constant: 'XDCF', a collection not really a single file + kXMP_XDCAM_FAMFile = 0x58444346UL, + /// Public file format constant: 'XDCS', a collection not really a single file + kXMP_XDCAM_SAMFile = 0x58444353UL, + /// Public file format constant: 'XDCX', a collection not really a single file + kXMP_XDCAM_EXFile = 0x58444358UL, + /// Public file format constant: 'AVHD', a collection not really a single file + kXMP_AVCHDFile = 0x41564844UL, + /// Public file format constant: 'SHDV', a collection not really a single file + kXMP_SonyHDVFile = 0x53484456UL, + + /// Public file format constant: 'HTML' + kXMP_HTMLFile = 0x48544D4CUL, + /// Public file format constant: 'XML ' + kXMP_XMLFile = 0x584D4C20UL, + /// Public file format constant: 'text' + kXMP_TextFile = 0x74657874UL, + + // ------------------------------- + // Adobe application file formats. + + /// Adobe application file format constant: 'PSD ' + kXMP_PhotoshopFile = 0x50534420UL, + /// Adobe application file format constant: 'AI ' + kXMP_IllustratorFile = 0x41492020UL, + /// Adobe application file format constant: 'INDD' + kXMP_InDesignFile = 0x494E4444UL, + /// Adobe application file format constant: 'AEP ' + kXMP_AEProjectFile = 0x41455020UL, + /// Adobe application file format constant: 'AET ', After Effects Project Template + kXMP_AEProjTemplateFile = 0x41455420UL, + /// Adobe application file format constant: 'FFX ' + kXMP_AEFilterPresetFile = 0x46465820UL, + /// Adobe application file format constant: 'NCOR' + kXMP_EncoreProjectFile = 0x4E434F52UL, + /// Adobe application file format constant: 'PRPJ' + kXMP_PremiereProjectFile = 0x5052504AUL, + /// Adobe application file format constant: 'PRTL' + kXMP_PremiereTitleFile = 0x5052544CUL, + /// Adobe application file format constant: 'UCF ', Universal Container Format + kXMP_UCFFile = 0x55434620UL, + + // ------- + // Others. + + /// Unknown file format constant: ' ' + kXMP_UnknownFile = 0x20202020UL }; + +/// Type for file format identification constants. See \c #kXMP_PDFFile and following. typedef XMP_Uns32 XMP_FileFormat; -/* ---------------------------------------------------------------------------------------------- */ +// ------------------------------------------------------------------------------------------------- +/// Byte-order masks, do not use directly enum { kXMP_CharLittleEndianMask = 1, - kXMP_Char16BitMask = 2, /* Don't use these directly. */ + kXMP_Char16BitMask = 2, kXMP_Char32BitMask = 4 }; -enum { /* The values allow easy testing for 16/32 bit and big/little endian. */ +/// Constants to allow easy testing for 16/32 bit and big/little endian. +enum { + /// 8-bit kXMP_Char8Bit = 0, + /// 16-bit big-endian kXMP_Char16BitBig = kXMP_Char16BitMask, + /// 16-bit little-endian kXMP_Char16BitLittle = kXMP_Char16BitMask | kXMP_CharLittleEndianMask, + /// 32-bit big-endian kXMP_Char32BitBig = kXMP_Char32BitMask, + /// 32-bit little-endian kXMP_Char32BitLittle = kXMP_Char32BitMask | kXMP_CharLittleEndianMask, - kXMP_CharUnknown = 1 /* ! A bit of a hack, for variable or not-yet-known cases. */ + /// Variable or not-yet-known cases + kXMP_CharUnknown = 1 }; +/// \name Macros to test components of the character form mask +/// @{ +/// +/// \def XMP_CharFormIs16Bit +/// \brief Macro reports the encoding of a character. +/// \param f The character to check. +/// +/// \def XMP_CharFormIs32Bit +/// \brief Macro reports the encoding of a character. +/// \param f The character to check. +/// +/// \def XMP_CharFormIsBigEndian +/// \brief Macro reports the byte-order of a character. +/// \param f The character to check. +/// +/// \def XMP_CharFormIsLittleEndian +/// \brief Macro reports the byte-order of a character. +/// \param f The character to check. +/// +/// \def XMP_GetCharSize +/// \brief Macro reports the byte-size of a character. +/// \param f The character to check. +/// +/// \def XMP_CharToSerializeForm +/// \brief Macro converts \c XMP_Uns8 to \c XMP_OptionBits. +/// \param cf The character to convert. +/// +/// \def XMP_CharFromSerializeForm +/// \brief Macro converts \c XMP_OptionBits to \c XMP_Uns8. +/// \param sf The character to convert. +/// +/// @} + #define XMP_CharFormIs16Bit(f) ( ((int)(f) & kXMP_Char16BitMask) != 0 ) #define XMP_CharFormIs32Bit(f) ( ((int)(f) & kXMP_Char32BitMask) != 0 ) - #define XMP_CharFormIsBigEndian(f) ( ((int)(f) & kXMP_CharLittleEndianMask) == 0 ) #define XMP_CharFormIsLittleEndian(f) ( ((int)(f) & kXMP_CharLittleEndianMask) != 0 ) - #define XMP_GetCharSize(f) ( ((int)(f)&6) == 0 ? 1 : (int)(f)&6 ) - #define XMP_CharToSerializeForm(cf) ( (XMP_OptionBits)(cf) ) #define XMP_CharFromSerializeForm(sf) ( (XMP_Uns8)(sf) ) +/// \def kXMPFiles_UnknownOffset +/// \brief Constant for an unknown packet offset within a file. +#define kXMPFiles_UnknownOffset ((XMP_Int64)-1) + +/// \def kXMPFiles_UnknownLength +/// \brief Constant for an unknown packet length within a file. +#define kXMPFiles_UnknownLength ((XMP_Int32)-1) + +/// XMP packet description struct XMP_PacketInfo { + + /// Packet offset in the file in bytes, -1 if unknown. XMP_Int64 offset; + /// Packet length in the file in bytes, -1 if unknown. XMP_Int32 length; - XMP_Int32 padSize; /* Zero if unknown. */ + /// Packet padding size in bytes, zero if unknown. + XMP_Int32 padSize; // Zero if unknown. + + /// Character format using the values \c kXMP_Char8Bit, \c kXMP_Char16BitBig, etc. XMP_Uns8 charForm; + /// True if there is a packet wrapper and the trailer says writeable by dumb packet scanners. XMP_Bool writeable; - XMP_Uns8 pad1, pad2; - #if __cplusplus - XMP_PacketInfo() : offset(0), length(0), padSize(0), charForm(0), writeable(0), pad1(0), pad2(0) {}; - #endif + /// True if there is a packet wrapper, the "<?xpacket...>" XML processing instructions. + XMP_Bool hasWrapper; + + /// Padding to make the struct's size be a multiple 4. + XMP_Uns8 pad; + + /// Default constructor. + XMP_PacketInfo() : offset(kXMPFiles_UnknownOffset), length(kXMPFiles_UnknownLength), + padSize(0), charForm(0), writeable(0), hasWrapper(0), pad(0) {}; + }; -#if ! __cplusplus - typedef struct XMP_PacketInfo XMP_PacketInfo; -#endif -enum { kXMP_PacketInfoVersion = 3 }; -/* ---------------------------------------------------------------------------------------------- */ +/// Version of the XMP_PacketInfo type +enum { + /// Version of the XMP_PacketInfo type + kXMP_PacketInfoVersion = 3 +}; + +// ------------------------------------------------------------------------------------------------- -enum { /* Values for XMP_ThumbnailInfo.tnailFormat. */ - kXMP_UnknownTNail = 0, /* The thumbnail data has an unknown format. */ - kXMP_JPEGTNail = 1, /* The thumbnail data is a JPEG stream, presumably compressed. */ - kXMP_TIFFTNail = 2, /* The thumbnail data is a TIFF stream, presumably uncompressed. */ - kXMP_PShopTNail = 3 /* The thumbnail data is in the format of Photoshop Image Resource 1036. */ +/// Values for \c XMP_ThumbnailInfo::tnailFormat. +enum { + /// The thumbnail data has an unknown format. + kXMP_UnknownTNail = 0, + /// The thumbnail data is a JPEG stream, presumably compressed. + kXMP_JPEGTNail = 1, + /// The thumbnail data is a TIFF stream, presumably uncompressed. + kXMP_TIFFTNail = 2, + /// The thumbnail data is in the format of Photoshop Image Resource 1036. + kXMP_PShopTNail = 3 }; +/// Thumbnail descriptor struct XMP_ThumbnailInfo { - XMP_FileFormat fileFormat; /* The format of the containing file. */ - XMP_Uns32 fullWidth, fullHeight; /* Full image size in pixels. */ - XMP_Uns32 tnailWidth, tnailHeight; /* Thumbnail image size in pixels. */ - XMP_Uns16 fullOrientation, tnailOrientation; /* Orientation of full image and thumbnail, as defined by Exif for tag 274. */ - const XMP_Uns8 * tnailImage; /* Raw data from the host file, valid for life of the owning XMPFiles object. Do not modify! */ - XMP_Uns32 tnailSize; /* The size in bytes of the tnailImage data. */ - XMP_Uns8 tnailFormat; /* The format of the tnailImage data. */ - XMP_Uns8 pad1, pad2, pad3; - #if __cplusplus - XMP_ThumbnailInfo() : fileFormat(kXMP_UnknownFile), fullWidth(0), fullHeight(0), - tnailWidth(0), tnailHeight(0), fullOrientation(0), tnailOrientation(0), - tnailImage(0), tnailSize(0), tnailFormat(kXMP_UnknownTNail) {}; - #endif -}; -#if ! __cplusplus - typedef struct XMP_ThumbnailInfo XMP_ThumbnailInfo; -#endif -enum { kXMP_ThumbnailInfoVersion = 1 }; -/* ---------------------------------------------------------------------------------------------- */ + /// The format of the containing file. + XMP_FileFormat fileFormat; + /// Full image size in pixels. + XMP_Uns32 fullWidth, fullHeight; + /// Thumbnail image size in pixels. + XMP_Uns32 tnailWidth, tnailHeight; + /// Orientation of full image and thumbnail, as defined by Exif for tag 274. + + XMP_Uns16 fullOrientation, tnailOrientation; + /// Raw image data from the host file, valid for life of the owning \c XMPFiles object. Do not modify! + const XMP_Uns8 * tnailImage; + /// The size in bytes of the thumbnail image data. + XMP_Uns32 tnailSize; + /// The format of the thumbnail image data. + XMP_Uns8 tnailFormat; + + /// Padding to make the struct's size be a multiple 4. + XMP_Uns8 pad1, pad2, pad3; -#define kXMPFiles_UnknownOffset ((XMP_Int64)-1) -#define kXMPFiles_UnknownLength ((XMP_Int32)-1) + /// Default constructor. + XMP_ThumbnailInfo() : fileFormat(kXMP_UnknownFile), fullWidth(0), fullHeight(0), + tnailWidth(0), tnailHeight(0), fullOrientation(0), tnailOrientation(0), + tnailImage(0), tnailSize(0), tnailFormat(kXMP_UnknownTNail) {}; -enum { /* Options for Initialize. */ - kXMPFiles_NoQuickTimeInit = 0x0001 /* Don't initialize QuickTime, the client will. */ }; -enum { /* Options for GetFormatInfo. */ - kXMPFiles_CanInjectXMP = 0x00000001, /* Can inject first-time XMP into an existing file. */ - kXMPFiles_CanExpand = 0x00000002, /* Can expand XMP or other metadata in an existing file. */ - kXMPFiles_CanRewrite = 0x00000004, /* Can copy one file to another, writing new metadata. */ - kXMPFiles_PrefersInPlace = 0x00000008, /* Can expand, but prefers in-place update. */ - kXMPFiles_CanReconcile = 0x00000010, /* Supports reconciliation between XMP and other forms. */ - kXMPFiles_AllowsOnlyXMP = 0x00000020, /* Allows access to just the XMP, ignoring other forms. */ - kXMPFiles_ReturnsRawPacket = 0x00000040, /* File handler returns raw XMP packet information. */ - kXMPFiles_ReturnsTNail = 0x00000080, /* File handler returns native thumbnail. */ - kXMPFiles_HandlerOwnsFile = 0x00000100, /* The file handler does the file open and close. */ - kXMPFiles_AllowsSafeUpdate = 0x00000200, /* The file handler allows crash-safe file updates. */ - kXMPFiles_NeedsReadOnlyPacket = 0x00000400, /* The file format needs the XMP packet to be read-only. */ - kXMPFiles_UsesSidecarXMP = 0x00000800 /* The file handler uses a "sidecar" file for the XMP. */ +/// Version of the XMP_ThumbnailInfo type +enum { + /// Version of the XMP_ThumbnailInfo type + kXMP_ThumbnailInfoVersion = 1 }; -enum { /* Options for OpenFile. */ - kXMPFiles_OpenForRead = 0x00000001, /* Open for read-only access. */ - kXMPFiles_OpenForUpdate = 0x00000002, /* Open for reading and writing. */ - kXMPFiles_OpenOnlyXMP = 0x00000004, /* Only the XMP is wanted, allows space/time optimizations. */ - kXMPFiles_OpenCacheTNail = 0x00000008, /* Cache thumbnail if possible, GetThumbnail will be called. */ - kXMPFiles_OpenStrictly = 0x00000010, /* Be strict about locating XMP and reconciling with other forms. */ - kXMPFiles_OpenUseSmartHandler = 0x00000020, /* Require the use of a smart handler. */ - kXMPFiles_OpenUsePacketScanning = 0x00000040, /* Force packet scanning, don't use a smart handler. */ - kXMPFiles_OpenLimitedScanning = 0x00000080, /* Only packet scan files "known" to need scanning. */ - kXMPFiles_OpenInBackground = 0x10000000 /* Set if calling from background thread. */ +// ------------------------------------------------------------------------------------------------- + +/// Option bit flags for \c TXMPFiles::Initialize(). +enum { + /// Do not initialize QuickTime, the client will. + kXMPFiles_NoQuickTimeInit = 0x0001 }; -/* A note about kXMPFiles_OpenInBackground. The XMPFiles handler for .mov files currently uses */ -/* QuickTime. On Macintosh, calls to Enter/ExitMovies versus Enter/ExitMoviesOnThread must be made. */ -/* This option is used to signal background use so that the .mov handler can behave appropriately. */ +/// Option bit flags for \c TXMPFiles::GetFormatInfo(). +enum { + + /// Can inject first-time XMP into an existing file. + kXMPFiles_CanInjectXMP = 0x00000001, + + /// Can expand XMP or other metadata in an existing file. + kXMPFiles_CanExpand = 0x00000002, + + /// Can copy one file to another, writing new metadata. + kXMPFiles_CanRewrite = 0x00000004, + + /// Can expand, but prefers in-place update. + kXMPFiles_PrefersInPlace = 0x00000008, + + /// Supports reconciliation between XMP and other forms. + kXMPFiles_CanReconcile = 0x00000010, + + /// Allows access to just the XMP, ignoring other forms. + kXMPFiles_AllowsOnlyXMP = 0x00000020, + + /// File handler returns raw XMP packet information. + kXMPFiles_ReturnsRawPacket = 0x00000040, + + /// File handler returns native thumbnail. + kXMPFiles_ReturnsTNail = 0x00000080, + + /// The file handler does the file open and close. + kXMPFiles_HandlerOwnsFile = 0x00000100, + + /// The file handler allows crash-safe file updates. + kXMPFiles_AllowsSafeUpdate = 0x00000200, + + /// The file format needs the XMP packet to be read-only. + kXMPFiles_NeedsReadOnlyPacket = 0x00000400, + + /// The file handler uses a "sidecar" file for the XMP. + kXMPFiles_UsesSidecarXMP = 0x00000800, + + /// The format is folder oriented, for example the P2 video format. + kXMPFiles_FolderBasedFormat = 0x00001000 -enum { /* Options for CloseFile. */ - kXMPFiles_UpdateSafely = 0x0001 /* Write into a temporary file and swap for crash safety. */ }; -/* ============================================================================================== */ -/* Exception codes */ -/* =============== */ - -/** - * \name Exception codes. - * @{ - * XMP tookit errors result in throwing an \c XMP_Error exception. Any exception thrown within the - * XMP toolkit is caught in the toolkit and rethrown as an \c XMP_Error. The \c XMP_Error struct - * contains a numeric code and an English explanation. New numeric codes may be added at any time. - * There are typically many possible explanations for each numeric code. The explanations try to - * be precise about the specific circumstances causing the error. - * - * \note The explanation string is for debugging use only. It must not be shown to users in a - * final product. It is written for developers not users, and never localized. - */ - -#if ! __cplusplus - - typedef struct XMP_Error { - XMP_Int32 id; - XMP_StringPtr errMsg; - } XMP_Error; +/// Option bit flags for \c TXMPFiles::OpenFile(). +enum { -#else + /// Open for read-only access. + kXMPFiles_OpenForRead = 0x00000001, - class XMP_Error { - public: - XMP_Error ( XMP_Int32 _id, XMP_StringPtr _errMsg ) : id(_id), errMsg(_errMsg) {}; - inline XMP_Int32 GetID() const { return id; }; - inline XMP_StringPtr GetErrMsg() const { return errMsg; }; - private: - XMP_Int32 id; - XMP_StringPtr errMsg; - }; + /// Open for reading and writing. + kXMPFiles_OpenForUpdate = 0x00000002, -#endif + /// Only the XMP is wanted, allows space/time optimizations. + kXMPFiles_OpenOnlyXMP = 0x00000004, + + /// Cache thumbnail if possible, \c TXMPFiles::GetThumbnail() will be called. + kXMPFiles_OpenCacheTNail = 0x00000008, + + /// Be strict about locating XMP and reconciling with other forms. + kXMPFiles_OpenStrictly = 0x00000010, + /// Require the use of a smart handler. + kXMPFiles_OpenUseSmartHandler = 0x00000020, + + /// Force packet scanning, do not use a smart handler. + kXMPFiles_OpenUsePacketScanning = 0x00000040, + + /// Only packet scan files "known" to need scanning. + kXMPFiles_OpenLimitedScanning = 0x00000080, + + /// Attempt to repair a file opened for update, default is to not open (throw an exception). + kXMPFiles_OpenRepairFile = 0x00000100, + + /// Set if calling from background thread. + kXMPFiles_OpenInBackground = 0x10000000 + +}; + +// A note about kXMPFiles_OpenInBackground. The XMPFiles handler for .mov files currently uses +// QuickTime. On Macintosh, calls to Enter/ExitMovies versus Enter/ExitMoviesOnThread must be made. +// This option is used to signal background use so that the .mov handler can behave appropriately. + +/// Option bit flags for \c TXMPFiles::CloseFile(). enum { + /// Write into a temporary file and swap for crash safety. + kXMPFiles_UpdateSafely = 0x0001 +}; + +// ================================================================================================= +// Exception codes +// =============== + +/// \name Errors Exception handling +/// @{ +/// +/// XMP Tookit errors result in throwing an \c XMP_Error exception. Any exception thrown within the +/// XMP Toolkit is caught in the toolkit and rethrown as an \c XMP_Error. +/// +/// The \c XMP_Error class contains a numeric code and an English explanation. New numeric codes may +/// be added at any time. There are typically many possible explanations for each numeric code. The +/// explanations try to be precise about the specific circumstances causing the error. +/// +/// \note The explanation string is for debugging use only. It must not be shown to users in a +/// final product. It is written for developers not users, and never localized. +/// + +/// XMP Toolkit error, associates an error code with a descriptive error string. +class XMP_Error { +public: + + /// @brief Constructor for an XMP_Error. + /// + /// @param _id The numeric code. + /// + /// @param _errMsg The descriptive string, for debugging use only. It must not be shown to users + /// in a final product. It is written for developers, not users, and never localized. + XMP_Error ( XMP_Int32 _id, XMP_StringPtr _errMsg ) : id(_id), errMsg(_errMsg) {}; + + /// Retrieves the numeric code from an XMP_Error. + inline XMP_Int32 GetID() const { return id; }; + + /// Retrieves the descriptive string from an XMP_Error. + inline XMP_StringPtr GetErrMsg() const { return errMsg; }; + +private: + /// Exception code. See constants \c #kXMPErr_Unknown and following. + XMP_Int32 id; + /// Descriptive string, for debugging use only. It must not be shown to users in a final + /// product. It is written for developers, not users, and never localized. + XMP_StringPtr errMsg; +}; - /* More or less generic error codes. */ +/// Exception code constants +enum { + + // -------------------- + // Generic error codes. + + /// Generic unknown error kXMPErr_Unknown = 0, + /// Generic undefined error kXMPErr_TBD = 1, + /// Generic unavailable error kXMPErr_Unavailable = 2, + /// Generic bad object error kXMPErr_BadObject = 3, + /// Generic bad parameter error kXMPErr_BadParam = 4, + /// Generic bad value error kXMPErr_BadValue = 5, + /// Generic assertion failure kXMPErr_AssertFailure = 6, + /// Generic enforcement failure kXMPErr_EnforceFailure = 7, + /// Generic unimplemented error kXMPErr_Unimplemented = 8, + /// Generic internal failure kXMPErr_InternalFailure = 9, + /// Generic deprecated error kXMPErr_Deprecated = 10, + /// Generic external failure kXMPErr_ExternalFailure = 11, + /// Generic user abort error kXMPErr_UserAbort = 12, + /// Generic standard exception kXMPErr_StdException = 13, + /// Generic unknown exception kXMPErr_UnknownException = 14, + /// Generic out-of-memory error kXMPErr_NoMemory = 15, - /* More specific parameter error codes. */ + // ------------------------------------ + // More specific parameter error codes. + + /// Bad schema parameter kXMPErr_BadSchema = 101, + /// Bad XPath parameter kXMPErr_BadXPath = 102, + /// Bad options parameter kXMPErr_BadOptions = 103, + /// Bad index parameter kXMPErr_BadIndex = 104, + /// Bad iteration position kXMPErr_BadIterPosition = 105, + /// XML parsing error kXMPErr_BadParse = 106, + /// Serialization error kXMPErr_BadSerialize = 107, + /// File format error kXMPErr_BadFileFormat = 108, + /// No file handler found for format kXMPErr_NoFileHandler = 109, + /// Data too large for JPEG file format kXMPErr_TooLargeForJPEG = 110, - /* File format and internal structure error codes. */ + // ----------------------------------------------- + // File format and internal structure error codes. + + /// XML format error kXMPErr_BadXML = 201, + /// RDF format error kXMPErr_BadRDF = 202, + /// XMP format error kXMPErr_BadXMP = 203, + /// Empty iterator kXMPErr_EmptyIterator = 204, + /// Unicode error kXMPErr_BadUnicode = 205, + /// TIFF format error kXMPErr_BadTIFF = 206, + /// JPEG format error kXMPErr_BadJPEG = 207, + /// PSD format error kXMPErr_BadPSD = 208, + /// PSIR format error kXMPErr_BadPSIR = 209, + /// IPTC format error kXMPErr_BadIPTC = 210, + /// MPEG format error kXMPErr_BadMPEG = 211 }; -/** - * @} - */ - - -/* ============================================================================================== */ -/* Client callbacks */ -/* ================ */ - +/// @} -/** - * \name Special purpose callback functions - * @{ - */ +// ================================================================================================= +// Client callbacks +// ================ -/** - * \typedef XMP_Status - * \brief A signed 32 bit integer used as a status result for the output callback routine. - * Zero means no error, all other values except -1 are private to the callback. The callback is - * wrapped to prevent exceptions being thrown across DLL boundaries. Any exceptions thrown out - * of the callback cause a return status of -1. - */ +// ------------------------------------------------------------------------------------------------- +/// \name Special purpose callback functions +/// @{ -/** - * \typedef XMP_TextOutputProc - * \brief Direct text output from the XMP toolkit, such as debugging dumps, is done using client - * supplied callbacks. The callback is invoked one or more times for each line of output. The - * end of a line is signaled by a '\n' character at the end of the buffer. Formatting newlines - * are never present in the middle of a buffer, but values of properties might contain any UTF-8 - * characters. A success/fail status is returned by the callback. Any failure result aborts - * the output. - */ +/// A signed 32-bit integer used as a status result for the output callback routine, +/// \c XMP_TextOutputProc. Zero means no error, all other values except -1 are private to the callback. +/// The callback is wrapped to prevent exceptions being thrown across DLL boundaries. Any exceptions +/// thrown out of the callback cause a return status of -1. typedef XMP_Int32 XMP_Status; +// ------------------------------------------------------------------------------------------------- +/// The signature of a client-defined callback for text output from XMP Toolkit debugging +/// operations. The callback is invoked one or more times for each line of output. The end of a line +/// is signaled by a '\\n' character at the end of the buffer. Formatting newlines are never present +/// in the middle of a buffer, but values of properties might contain any UTF-8 characters. +/// +/// @param refCon A pointer to client-defined data passed to the TextOutputProc. +/// +/// @param buffer A string containing one line of output. +/// +/// @param bufferSize The number of characters in the output buffer. +/// +/// @return A success/fail status value. Any failure result aborts the output. +/// +/// @see \c TXMPMeta::DumpObject() + typedef XMP_Status (* XMP_TextOutputProc) ( void * refCon, XMP_StringPtr buffer, XMP_StringLen bufferSize ); -/** - * @} - */ +// ------------------------------------------------------------------------------------------------- +/// The signature of a client-defined callback to check for a user request to abort a time-consuming +/// operation within XMPFiles. +/// +/// @param arg A pointer to caller-defined data passed from the registration call. +/// +/// @return True to abort the current operation, which results in an exception being thrown. +/// +/// @see \c TXMPFiles::SetAbortProc() + +typedef bool (* XMP_AbortProc) ( void * arg ); // Used by . +/// @} -/* ============================================================================================== */ -/* Stuff with no better place to be */ -/* ================================ */ +// ================================================================================================= +// Stuff with no better place to be +// ================================ +/// XMP Toolkit version information typedef struct XMP_VersionInfo { - XMP_Uns8 major; /* The primary release number, the "1" in version "1.2.3". */ - XMP_Uns8 minor; /* The secondary release number, the "2" in version "1.2.3". */ - XMP_Uns8 micro; /* The tertiary release number, the "3" in version "1.2.3". */ - XMP_Bool isDebug; /* Really a 0/1 bool value. True if this is a debug build. */ - XMP_Uns32 build; /* A rolling build number, monotonically increasing in a release. */ - XMP_Uns32 flags; /* Individual feature implementation flags. */ - XMP_StringPtr message; /* A comprehensive version information string. */ + /// The primary release number, the "1" in version "1.2.3". + XMP_Uns8 major; + /// The secondary release number, the "2" in version "1.2.3". + XMP_Uns8 minor; + /// The tertiary release number, the "3" in version "1.2.3". + XMP_Uns8 micro; + /// A 0/1 boolean value, true if this is a debug build. + XMP_Bool isDebug; + /// A rolling build number, monotonically increasing in a release. + XMP_Uns32 build; + /// Individual feature implementation flags. + XMP_Uns32 flags; + /// A comprehensive version information string. + XMP_StringPtr message; } XMP_VersionInfo; -typedef bool (* XMP_AbortProc) ( void * arg ); /* Used by SXMPFiles::SetAbortProc. */ - -/* ============================================================================================== */ +// ================================================================================================= #if __cplusplus -} /* extern "C" */ +} // extern "C" #endif -#endif /* __XMP_Const_h__ */ +#endif // __XMP_Const_h__ |