|
|
|
#ifndef __TXMPMeta_hpp__
|
|
|
|
#define __TXMPMeta_hpp__ 1
|
|
|
|
|
|
|
|
#if ( ! __XMP_hpp__ )
|
|
|
|
#error "Do not directly include, use XMPSDK.hpp"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// =================================================================================================
|
|
|
|
// ADOBE SYSTEMS INCORPORATED
|
|
|
|
// Copyright 2002-2007 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.
|
|
|
|
// =================================================================================================
|
|
|
|
|
|
|
|
// ================================================================================================
|
|
|
|
/// \file TXMPMeta.hpp
|
|
|
|
/// \brief Template class for the XMP Toolkit core services.
|
|
|
|
///
|
|
|
|
/// TXMPMeta is the template class providing the core services of the XMP Toolkit. It should be
|
|
|
|
/// instantiated with a string class such as <tt>std::string</tt>. Please read the general toolkit
|
|
|
|
/// usage notes for information about the overall architecture of the XMP API.
|
|
|
|
// ================================================================================================
|
|
|
|
|
|
|
|
// ================================================================================================
|
|
|
|
/// \class TXMPMeta TXMPMeta.hpp
|
|
|
|
/// \brief Template class for the XMP Toolkit core services.
|
|
|
|
///
|
|
|
|
/// \c TXMPMeta is the template class providing the core services of the XMP Toolkit. It should be
|
|
|
|
/// instantiated with a string class such as std::string. Please read the general toolkit usage notes
|
|
|
|
/// for information about the overall architecture of the XMP API.
|
|
|
|
///
|
|
|
|
/// This template wraps a string object class around the raw XMP API. This provides two significant
|
|
|
|
/// benefits, output strings are automatically copied and access is fully thread safe. The
|
|
|
|
/// umbrella header, \c XMPSDK.hpp, provides an \c SXMPMeta typedef for the instantiated template. String
|
|
|
|
/// objects are only necessary for output strings. Input string are literals and passed as typical
|
|
|
|
/// C <tt>const char *</tt>.
|
|
|
|
///
|
|
|
|
/// The template parameter, class \c TtStringObj, is described in the XMPSDK.hpp umbrella header.
|
|
|
|
///
|
|
|
|
/// <b>Be aware that the \c TXMPMeta class is a normal C++ template, it is instantiated and local to
|
|
|
|
/// each client executable. As are the other TXMP* classes. Different clients might not even use the
|
|
|
|
/// same string type to instantiate \c TXMPMeta.</b>
|
|
|
|
///
|
|
|
|
/// Because of this you should not pass \c SXMPMeta objects, or pointers to \c SXMPMeta objects,
|
|
|
|
/// across DLL boundaries. There is a safe internal reference that you can pass, then construct a
|
|
|
|
/// local object on the callee side. This construction does not create a cloned XMP tree, it is the
|
|
|
|
/// same underlying XMP object safely wrapped in each client's \c SXMPMeta object.
|
|
|
|
///
|
|
|
|
/// Use GetInternalRef and the associated constructor like this:
|
|
|
|
/// \code
|
|
|
|
/// --- The callee's header contains:
|
|
|
|
/// CalleeMethod ( XMPMetaRef xmpRef );
|
|
|
|
///
|
|
|
|
/// --- The caller's code contains:
|
|
|
|
/// SXMPMeta callerXMP;
|
|
|
|
/// CalleeMethod ( callerXMP.GetInternalRef() );
|
|
|
|
///
|
|
|
|
/// --- The callee's code contains:
|
|
|
|
/// SXMPMeta calleeXMP ( xmpRef );
|
|
|
|
/// \endcode
|
|
|
|
// ================================================================================================
|
|
|
|
|
|
|
|
template <class tStringObj> class TXMPIterator;
|
|
|
|
template <class tStringObj> class TXMPUtils;
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
template <class tStringObj>
|
|
|
|
class TXMPMeta {
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
// =============================================================================================
|
|
|
|
// Initialization and termination
|
|
|
|
// ==============================
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \name Initialization and termination
|
|
|
|
/// @{
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief Obtain version information.
|
|
|
|
|
|
|
|
static void
|
|
|
|
GetVersionInfo ( XMP_VersionInfo * info );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief Initialize the XMP Toolkit.
|
|
|
|
///
|
|
|
|
/// The XMP Toolkit may be explicitly initialized before use. The allocate/delete parameters must
|
|
|
|
/// be either both null (0), or both non-null.
|
|
|
|
|
|
|
|
static bool
|
|
|
|
Initialize();
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief Terminate the XMP Toolkit.
|
|
|
|
|
|
|
|
static void
|
|
|
|
Terminate();
|
|
|
|
|
|
|
|
/// @}
|
|
|
|
|
|
|
|
// =============================================================================================
|
|
|
|
// Constuctors and destructor
|
|
|
|
// =========================
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \name Constructors and destructor
|
|
|
|
/// @{
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief Default constructor, creates an empty object.
|
|
|
|
///
|
|
|
|
/// The default constructor creates a new empty \c TXMPMeta object.
|
|
|
|
|
|
|
|
TXMPMeta();
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief Copy constructor, creates a client object refering to the same internal object.
|
|
|
|
///
|
|
|
|
/// The copy constructor creates a new \c TXMPMeta object that refers to the same internal XMP object.
|
|
|
|
|
|
|
|
TXMPMeta ( const TXMPMeta<tStringObj> & original );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief Assignment operator, assigns the internal ref and increments the ref count.
|
|
|
|
///
|
|
|
|
/// The assignment operator assigns the internal ref from the rhs object and increments the
|
|
|
|
/// reference count on the underlying internal XMP object.
|
|
|
|
|
|
|
|
void operator= ( const TXMPMeta<tStringObj> & rhs );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief Reconstruct an XMP object from an internal ref.
|
|
|
|
///
|
|
|
|
/// This constructor creates a new \c TXMPMeta object that refers to the underlying \c xmpRef,
|
|
|
|
/// which was obtained from some other XMP object by the \c GetInternalRef method. This is used
|
|
|
|
/// to safely pass XMP objects across DLL boundaries.
|
|
|
|
|
|
|
|
TXMPMeta ( XMPMetaRef xmpRef );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief Construct an object and parse one buffer of RDF into it.
|
|
|
|
///
|
|
|
|
/// This constructor creates a new \c TXMPMeta object and populates it with metadata from a
|
|
|
|
/// buffer containing serialized RDF. This buffer must be a complete RDF parse stream. Pass
|
|
|
|
/// (0,0) to construct an empty \c TXMPMeta object. The result of an actual parse is identical
|
|
|
|
/// to creating an empty object then calling <tt>TXMPMeta::ParseFromBuffer</tt>. The RDF must be
|
|
|
|
/// complete. If you need to parse with multiple buffers, create an empty object and use
|
|
|
|
/// \c TXMPMeta::ParseFromBuffer.
|
|
|
|
///
|
|
|
|
/// \param buffer A pointer to the buffer of RDF to be parsed. May be null if the length is 0.
|
|
|
|
///
|
|
|
|
/// \param xmpSize The length in bytes of the buffer.
|
|
|
|
|
|
|
|
TXMPMeta ( XMP_StringPtr buffer,
|
|
|
|
XMP_StringLen xmpSize );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief Destructor, typical virtual destructor.
|
|
|
|
|
|
|
|
virtual ~TXMPMeta() throw();
|
|
|
|
|
|
|
|
/// @}
|
|
|
|
|
|
|
|
// =============================================================================================
|
|
|
|
// Global state functions
|
|
|
|
// ======================
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \name Global option flags
|
|
|
|
/// @{
|
|
|
|
/// The global option flags affect the overall behavior of the XMP Toolkit. The available options
|
|
|
|
/// are declared in <tt>XMP_Const.h</tt>. <b>(There are none at present.)</b>
|
|
|
|
|
|
|
|
/// \brief GetGlobalOptions returns the set of global option flags.
|
|
|
|
|
|
|
|
static XMP_OptionBits
|
|
|
|
GetGlobalOptions();
|
|
|
|
|
|
|
|
/// \brief \c SetGlobalOptions updates the set of global option flags. The entire set is
|
|
|
|
/// replaced with the new values. If only one flag is to be modified, use \c GetGlobalOptions
|
|
|
|
/// to obtain the current set, modify the desired flag, then use \c SetGlobalOptions.
|
|
|
|
///
|
|
|
|
/// \note There are no options to set yet.
|
|
|
|
|
|
|
|
static void
|
|
|
|
SetGlobalOptions ( XMP_OptionBits options );
|
|
|
|
|
|
|
|
/// @}
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \name Internal data structure dump utilities
|
|
|
|
/// @{
|
|
|
|
/// These are debugging utilities that dump internal data structures. The output callback is
|
|
|
|
/// described in <tt>XMP_Const.h</tt>.
|
|
|
|
|
|
|
|
/// \brief \c DumpNamespaces dumps the list of registered namespace URIs and prefixes.
|
|
|
|
|
|
|
|
static XMP_Status
|
|
|
|
DumpNamespaces ( XMP_TextOutputProc outProc,
|
|
|
|
void * refCon );
|
|
|
|
|
|
|
|
/// \brief \c DumpAliases dumps the list of registered aliases and corresponding actuals.
|
|
|
|
|
|
|
|
static XMP_Status
|
|
|
|
DumpAliases ( XMP_TextOutputProc outProc,
|
|
|
|
void * refCon );
|
|
|
|
|
|
|
|
/// @}
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \name Namespace Functions
|
|
|
|
/// @{
|
|
|
|
/// Namespaces must be registered before use in namespace URI parameters or path expressions.
|
|
|
|
/// Within the XMP Toolkit the registered namespace URIs and prefixes must be unique. Additional
|
|
|
|
/// namespaces encountered when parsing RDF are automatically registered.
|
|
|
|
///
|
|
|
|
/// The namespace URI should always end in an XML name separator such as '/' or '#'. This is
|
|
|
|
/// because some forms of RDF shorthand catenate a namespace URI with an element name to form a
|
|
|
|
/// new URI.
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief Register a namespace URI with a suggested prefix.
|
|
|
|
///
|
|
|
|
/// It is not an error if the URI is already registered, no matter what the prefix is. If the
|
|
|
|
/// URI is not registered but the suggested prefix is in use, a unique prefix is created from
|
|
|
|
/// the suggested one. The actual registeed prefix is always returned. The function result
|
|
|
|
/// tells if the registered prefix is the suggested one.
|
|
|
|
///
|
|
|
|
/// \param namespaceURI The URI for the namespace. Must be a valid XML URI.
|
|
|
|
///
|
|
|
|
/// \param suggestedPrefix The suggested prefix to be used if the URI is not yet registered.
|
|
|
|
/// Must be a valid XML name.
|
|
|
|
///
|
|
|
|
/// \param registeredPrefix Returns the prefix actually registered for this URI.
|
|
|
|
///
|
|
|
|
/// \result Returns true if the registered prefix matches the suggested prefix.
|
|
|
|
///
|
|
|
|
/// \note No checking is presently done on either the URI or the prefix.
|
|
|
|
|
|
|
|
static bool
|
|
|
|
RegisterNamespace ( XMP_StringPtr namespaceURI,
|
|
|
|
XMP_StringPtr suggestedPrefix,
|
|
|
|
tStringObj * registeredPrefix );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief Obtain the prefix for a registered namespace URI.
|
|
|
|
///
|
|
|
|
/// It is not an error if the namespace URI is not registered. The output \c namespacePrefix
|
|
|
|
/// string is not modified if the namespace URI is not registered.
|
|
|
|
///
|
|
|
|
/// \param namespaceURI The URI for the namespace. Must not be null or the empty string.
|
|
|
|
///
|
|
|
|
/// \param namespacePrefix Returns the prefix registered for this URI, with a terminating ':'.
|
|
|
|
///
|
|
|
|
/// \result Returns true if the namespace URI is registered.
|
|
|
|
|
|
|
|
static bool
|
|
|
|
GetNamespacePrefix ( XMP_StringPtr namespaceURI,
|
|
|
|
tStringObj * namespacePrefix );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief Obtain the URI for a registered namespace prefix.
|
|
|
|
///
|
|
|
|
/// It is not an error if the namespace prefix is not registered. The output \c namespaceURI
|
|
|
|
/// string is not modified if the namespace prefix is not registered.
|
|
|
|
///
|
|
|
|
/// \param namespacePrefix The prefix for the namespace. Must not be null or the empty string.
|
|
|
|
///
|
|
|
|
/// \param namespaceURI Returns the URI registered for this prefix.
|
|
|
|
///
|
|
|
|
/// \result Returns true if the namespace prefix is registered.
|
|
|
|
|
|
|
|
static bool
|
|
|
|
GetNamespaceURI ( XMP_StringPtr namespacePrefix,
|
|
|
|
tStringObj * namespaceURI );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief Delete a namespace from the registry.
|
|
|
|
///
|
|
|
|
/// Does nothing if the URI is not registered, or if the \c namespaceURI parameter is null or the
|
|
|
|
/// empty string.
|
|
|
|
///
|
|
|
|
/// \param namespaceURI The URI for the namespace.
|
|
|
|
///
|
|
|
|
/// \note <b>Not yet implemented.</b>
|
|
|
|
|
|
|
|
static void
|
|
|
|
DeleteNamespace ( XMP_StringPtr namespaceURI );
|
|
|
|
|
|
|
|
/// @}
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \name Alias Functions
|
|
|
|
/// @{
|
|
|
|
/// Aliases in XMP serve the same purpose as Windows file shortcuts, Macintosh file aliases, or
|
|
|
|
/// UNIX file symbolic links. The aliases are simply multiple names for the same property. One
|
|
|
|
/// distinction of XMP aliases is that they are ordered, there is an alias name pointing to an
|
|
|
|
/// actual name. The primary significance of the actual name is that it is the preferred name
|
|
|
|
/// for output, generally the most widely recognized name.
|
|
|
|
///
|
|
|
|
/// The names that can be aliased in XMP are restricted. The alias must be a top level property
|
|
|
|
/// name, not a field within a structure or an element within an array. The actual may be a top
|
|
|
|
/// level property name, the first element within a top level array, or the default element in
|
|
|
|
/// an alt-text array. This does not mean the alias can only be a simple property. It is OK to
|
|
|
|
/// alias a top level structure or array to an identical top level structure or array, or to the
|
|
|
|
/// first item of an array of structures.
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief Associates an alias name with an actual name.
|
|
|
|
///
|
|
|
|
/// Define a alias mapping from one namespace/property to another. Both property names must be
|
|
|
|
/// simple names. An alias can be a direct mapping, where the alias and actual have the same
|
|
|
|
/// data type. It is also possible to map a simple alias to an item in an array. This can either
|
|
|
|
/// be to the first item in the array, or to the 'x-default' item in an alt-text array. Multiple
|
|
|
|
/// alias names may map to the same actual, as long as the forms match. It is a no-op to
|
|
|
|
/// reregister an alias in an identical fashion.
|
|
|
|
///
|
|
|
|
/// \param aliasNS The namespace URI for the alias. Must not be null or the empty string.
|
|
|
|
///
|
|
|
|
/// \param aliasProp The name of the alias. Must be a simple name, not null or the empty string
|
|
|
|
/// and not a general path expression.
|
|
|
|
///
|
|
|
|
/// \param actualNS The namespace URI for the actual. Must not be null or the empty string.
|
|
|
|
///
|
|
|
|
/// \param actualProp The name of the actual. Must be a simple name, not null or the empty string
|
|
|
|
/// and not a general path expression.
|
|
|
|
///
|
|
|
|
/// \param arrayForm Provides the array form for simple aliases to an array item. This is needed
|
|
|
|
/// to know what kind of array to create if set for the first time via the simple alias. Pass
|
|
|
|
/// \c kXMP_NoOptions, the default value, for all direct aliases regardless of whether the actual
|
|
|
|
/// data type is an array or not.
|
|
|
|
///
|
|
|
|
/// Constants for the arrayForm parameter:
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_NoOptions - This is a direct mapping. The actual data type does not matter.
|
|
|
|
/// \li \c kXMP_PropValueIsArray - The actual is an unordered array, the alias is to the first
|
|
|
|
/// element of the array.
|
|
|
|
/// \li \c kXMP_PropArrayIsOrdered - The actual is an ordered array, the alias is to the first
|
|
|
|
/// element of the array.
|
|
|
|
/// \li \c kXMP_PropArrayIsAlternate - The actual is an alternate array, the alias is to the first
|
|
|
|
/// element of the array.
|
|
|
|
/// \li \c kXMP_PropArrayIsAltText - The actual is an alternate text array, the alias is to the
|
|
|
|
/// 'x-default' element of the array.
|
|
|
|
|
|
|
|
static void
|
|
|
|
RegisterAlias ( XMP_StringPtr aliasNS,
|
|
|
|
XMP_StringPtr aliasProp,
|
|
|
|
XMP_StringPtr actualNS,
|
|
|
|
XMP_StringPtr actualProp,
|
|
|
|
XMP_OptionBits arrayForm = kXMP_NoOptions );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief Determines if a name is an alias, and what it is aliased to.
|
|
|
|
///
|
|
|
|
/// \param aliasNS The namespace URI for the alias. Must not be null or the empty string.
|
|
|
|
///
|
|
|
|
/// \param aliasProp The name of the alias. May be an arbitrary path expression path, must not
|
|
|
|
/// null or the empty string.
|
|
|
|
///
|
|
|
|
/// \param actualNS Untouched if <tt>aliasNS:aliasProp</tt> is not an alias. Otherwise returns
|
|
|
|
/// the namespace URI for the actual. May be null if the namespace URI is not wanted.
|
|
|
|
///
|
|
|
|
/// \param actualProp Untouched if <tt>aliasNS:aliasProp</tt> is not an alias. Otherwise
|
|
|
|
/// returns the path of the actual. May be null if the actual's path is not wanted.
|
|
|
|
///
|
|
|
|
/// \param arrayForm Untouched if <tt>aliasNS:aliasProp</tt> is not an alias. Otherwise returns
|
|
|
|
/// the form of the actual. This is 0 (\c kXMP_NoOptions) if the alias and actual forms match,
|
|
|
|
/// otherwise it is the options passed to <tt>TXMPMeta::RegisterAlias</tt>. May be null if the
|
|
|
|
/// actual's form is not wanted.
|
|
|
|
///
|
|
|
|
/// \result Returns true if the input is an alias.
|
|
|
|
///
|
|
|
|
/// \note The client output strings are not written until return, so a call like the following
|
|
|
|
/// may be used to "reduce" a path to the base form:
|
|
|
|
/// \code
|
|
|
|
/// isAlias = SXMPMeta::ResolveAlias ( ns.c_str(), path.c_str(), &ns, &path, 0 );
|
|
|
|
/// \endcode
|
|
|
|
|
|
|
|
static bool
|
|
|
|
ResolveAlias ( XMP_StringPtr aliasNS,
|
|
|
|
XMP_StringPtr aliasProp,
|
|
|
|
tStringObj * actualNS,
|
|
|
|
tStringObj * actualProp,
|
|
|
|
XMP_OptionBits * arrayForm );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief Delete an alias.
|
|
|
|
///
|
|
|
|
/// This only deletes the registration of the alias, it does not delete the actual property. It
|
|
|
|
/// does delete any view of the property through the alias name. It is OK to attempt to delete
|
|
|
|
/// an alias that does not exist, that is if the alias name is not registered as an alias.
|
|
|
|
///
|
|
|
|
/// \param aliasNS The namespace URI for the alias. Must not be null or the empty string.
|
|
|
|
///
|
|
|
|
/// \param aliasProp The name of the alias. Must be a simple name, not null or the empty string
|
|
|
|
/// and not a general path expression.
|
|
|
|
|
|
|
|
static void
|
|
|
|
DeleteAlias ( XMP_StringPtr aliasNS,
|
|
|
|
XMP_StringPtr aliasProp );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief Registers all of the built-in aliases for a standard namespace.
|
|
|
|
///
|
|
|
|
/// The built-in aliases are documented in the XMP Specification. This registers the aliases in
|
|
|
|
/// the given namespace, that is the aliases from this namespace to actuals in other namespaces.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the aliases. Must not be null or the empty string.
|
|
|
|
|
|
|
|
static void
|
|
|
|
RegisterStandardAliases ( XMP_StringPtr schemaNS );
|
|
|
|
|
|
|
|
/// @}
|
|
|
|
|
|
|
|
// =============================================================================================
|
|
|
|
// Basic property manipulation functions
|
|
|
|
// =====================================
|
|
|
|
|
|
|
|
// *** Should add discussion of schemaNS and propName prefix usage.
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \name Functions for getting property values
|
|
|
|
/// @{
|
|
|
|
/// The property value "getters" all take a property specification, The first two parameters
|
|
|
|
/// are always the top level namespace URI (the "schema" namespace) and the basic name of the
|
|
|
|
/// property being referenced. See the introductory discussion of path expression usage for
|
|
|
|
/// more information.
|
|
|
|
///
|
|
|
|
/// All of the functions return a Boolean result telling if the property exists, and if it does
|
|
|
|
/// they also return option flags describing the property. If the property exists and has a
|
|
|
|
/// value, the string value is also returned. The string is Unicode in UTF-8 encoding. Arrays
|
|
|
|
/// and the non-leaf levels of structs do not have values. The possible option flags that
|
|
|
|
/// describe properties are:
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropValueIsURI - The property value is a URI. It is serialized to RDF using the
|
|
|
|
/// <tt>rdf:resource</tt> attribute. Not mandatory for URIs, but considered RDF-savvy.
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropHasQualifiers - The property has qualifiers. These could be an
|
|
|
|
/// <tt>xml:lang</tt> attribute, an <tt>rdf:type</tt> property, or a general qualifier. See the
|
|
|
|
/// introductory discussion of qualified properties for more information.
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropIsQualifier - This property is a qualifier for some other property. Note
|
|
|
|
/// that if the qualifier itself has a structured value, this flag is only set for the top node
|
|
|
|
/// of the qualifier's subtree. Qualifiers may have arbitrary structure, and may even have
|
|
|
|
/// qualifiers.
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropHasLang - This property has an <tt>xml:lang</tt> qualifier.
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropHasType - This property has an <tt>rdf:type</tt> qualifier.
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropValueIsStruct - This property contains nested fields (models a C struct).
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropValueIsArray - This property is an array. By itself (no ...ArrayIs... flags),
|
|
|
|
/// this indicates a general unordered array. It is serialized using an <tt>rdf:Bag</tt> container.
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropArrayIsOrdered - This property is an ordered array. Appears in conjunction
|
|
|
|
/// with \c kXMP_PropValueIsArray. It is serialized using an <tt>rdf:Seq</tt> container.
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropArrayIsAlternate - This property is an alternative array. Appears in
|
|
|
|
/// conjunction with \c kXMP_PropValueIsArray. It is serialized using an <tt>rdf:Alt</tt> container.
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropArrayIsAltText - This property is an alt-text array. Appears in conjunction
|
|
|
|
/// with \c kXMP_PropArrayIsAlternate. It is serialized using an <tt>rdf:Alt</tt> container. Each
|
|
|
|
/// array element is a simple property with an <tt>xml:lang</tt> attribute.
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropIsAlias - The given property name is an alias. This is only returned by
|
|
|
|
/// \c GetProperty and then only if the property name is simple, not an path expression.
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropHasAliases - The given property name has aliases. This is only returned by
|
|
|
|
/// \c GetProperty and then only if the property name is simple, not an path expression.
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropIsStable - The value of this property is not related to the document
|
|
|
|
/// content.
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropIsDerived - The value of this property is derived from the document
|
|
|
|
/// content.
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropIsInternal - The value of this property is "owned" by the application, it
|
|
|
|
/// should not generally be editable in a UI.
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c GetProperty is the simplest property getter, mainly for top level simple
|
|
|
|
/// properties or after using the path composition functions in \c TXMPUtils.
|
|
|
|
///
|
|
|
|
/// \result Returns true if the property exists.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the property. May be null or the empty string if the
|
|
|
|
/// first component of the propName path contains a namespace prefix. The URI must be for a
|
|
|
|
/// registered namespace.
|
|
|
|
///
|
|
|
|
/// \param propName The name of the property. May be a general path expression, must not be
|
|
|
|
/// null or the empty string. Using a namespace prefix on the first component is optional. If
|
|
|
|
/// present without a \c schemaNS value then the prefix specifies the namespace. The prefix
|
|
|
|
/// must be for a registered namespace. If both a \c schemaNS URI and \c propName prefix are
|
|
|
|
/// present, they must be corresponding parts of a registered namespace.
|
|
|
|
///
|
|
|
|
/// \param propValue A pointer to the string that is assigned the value of the property, if
|
|
|
|
/// the property has a value. Arrays and non-leaf levels of structs do not have values. May be
|
|
|
|
/// null if the value is not wanted.
|
|
|
|
///
|
|
|
|
/// \param options A pointer to the \c XMP_OptionBits variable that is assigned option flags
|
|
|
|
/// describing the property. May be null if the flags are not wanted.
|
|
|
|
|
|
|
|
bool
|
|
|
|
GetProperty ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName,
|
|
|
|
tStringObj * propValue,
|
|
|
|
XMP_OptionBits * options ) const;
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c GetArrayItem provides access to items within an array. The index is passed as an
|
|
|
|
/// integer, you need not worry about the path string syntax for array items, convert a loop
|
|
|
|
/// index to a string, etc.
|
|
|
|
///
|
|
|
|
/// \result Returns true if the array item exists.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the array. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param arrayName The name of the array. May be a general path expression, must not be null
|
|
|
|
/// or the empty string. Has the same namespace prefix usage as \c propName in \c GeProperty.
|
|
|
|
///
|
|
|
|
/// \param itemIndex The index of the desired item. Arrays in XMP are indexed from 1. The constant
|
|
|
|
/// \c kXMP_ArrayLastItem always refers to the last existing array item.
|
|
|
|
///
|
|
|
|
/// \param itemValue A pointer to the string that is assigned the value of the array item, if
|
|
|
|
/// the array item has a value. Arrays and non-leaf levels of structs do not have values. May be
|
|
|
|
/// null if the value is not wanted.
|
|
|
|
///
|
|
|
|
/// \param options A pointer to the \c XMP_OptionBits variable that is assigned option flags
|
|
|
|
/// describing the array item. May be null if the flags are not wanted.
|
|
|
|
|
|
|
|
bool
|
|
|
|
GetArrayItem ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr arrayName,
|
|
|
|
XMP_Index itemIndex,
|
|
|
|
tStringObj * itemValue,
|
|
|
|
XMP_OptionBits * options ) const;
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c GetStructField provides access to fields within a nested structure. The namespace
|
|
|
|
/// for the field is passed as a URI, you need not worry about the path string syntax.
|
|
|
|
///
|
|
|
|
/// The names of fields should be XML qualified names, that is within an XML namespace. The path
|
|
|
|
/// syntax for a qualified name uses the namespace prefix. This is unreliable since the prefix
|
|
|
|
/// is never guaranteed. The URI is the formal name, the prefix is just a local shorthand in a
|
|
|
|
/// given sequence of XML text.
|
|
|
|
///
|
|
|
|
/// \result Returns true if the field exists.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the struct. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param structName The name of the struct. May be a general path expression, must not be null
|
|
|
|
/// or the empty string. Has the same namespace prefix usage as \c propName in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param fieldNS The namespace URI for the field. Has the same URI and prefix usage as the
|
|
|
|
/// \c schemaNS parameter.
|
|
|
|
///
|
|
|
|
/// \param fieldName The name of the field. Must be a single XML name, must not be null or the
|
|
|
|
/// empty string. Has the same namespace prefix usage as the \c structName parameter.
|
|
|
|
///
|
|
|
|
/// \param fieldValue A pointer to the string that is assigned the value of the field, if
|
|
|
|
/// the field has a value. Arrays and non-leaf levels of structs do not have values. May be
|
|
|
|
/// null if the value is not wanted.
|
|
|
|
///
|
|
|
|
/// \param options A pointer to the \c XMP_OptionBits variable that is assigned option flags
|
|
|
|
/// describing the field. May be null if the flags are not wanted.
|
|
|
|
|
|
|
|
bool
|
|
|
|
GetStructField ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr structName,
|
|
|
|
XMP_StringPtr fieldNS,
|
|
|
|
XMP_StringPtr fieldName,
|
|
|
|
tStringObj * fieldValue,
|
|
|
|
XMP_OptionBits * options ) const;
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c GetQualifier provides access to a qualifier attached to a property. The namespace
|
|
|
|
/// for the qualifier is passed as a URI, you need not worry about the path string syntax. In
|
|
|
|
/// many regards qualifiers are like struct fields. See the introductory discussion of
|
|
|
|
/// qualified properties for more information.
|
|
|
|
///
|
|
|
|
/// The names of qualifiers should be XML qualified names, that is within an XML namespace. The
|
|
|
|
/// path syntax for a qualified name uses the namespace prefix. This is unreliable since the
|
|
|
|
/// prefix is never guaranteed. The URI is the formal name, the prefix is just a local shorthand
|
|
|
|
/// in a given sequence of XML text.
|
|
|
|
///
|
|
|
|
/// \note Qualifiers are only supported for simple leaf properties at this time.
|
|
|
|
///
|
|
|
|
/// \result Returns true if the qualifier exists.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the struct. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propName The name of the property to which the qualifier is attached. May be a general
|
|
|
|
/// path expression, must not be null or the empty string. Has the same namespace prefix usage
|
|
|
|
/// as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param qualNS The namespace URI for the qualifier. Has the same URI and prefix usage as the
|
|
|
|
/// \c schemaNS parameter.
|
|
|
|
///
|
|
|
|
/// \param qualName The name of the qualifier. Must be a single XML name, must not be null or the
|
|
|
|
/// empty string. Has the same namespace prefix usage as the \c propName parameter.
|
|
|
|
///
|
|
|
|
/// \param qualValue A pointer to the string that is assigned the value of the qualifier, if
|
|
|
|
/// the qualifier has a value. Arrays and non-leaf levels of structs do not have values. May be
|
|
|
|
/// null if the value is not wanted.
|
|
|
|
///
|
|
|
|
/// \param options A pointer to the \c XMP_OptionBits variable that is assigned option flags
|
|
|
|
/// describing the qualifier. May be null if the flags are not wanted.
|
|
|
|
|
|
|
|
bool
|
|
|
|
GetQualifier ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName,
|
|
|
|
XMP_StringPtr qualNS,
|
|
|
|
XMP_StringPtr qualName,
|
|
|
|
tStringObj * qualValue,
|
|
|
|
XMP_OptionBits * options ) const;
|
|
|
|
|
|
|
|
/// @}
|
|
|
|
|
|
|
|
// =============================================================================================
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \name Functions for setting property values
|
|
|
|
/// @{
|
|
|
|
/// The property value "setters" all take a property specification, their differences are in
|
|
|
|
/// the form of this. The first two parameters are always the top level namespace URI (the
|
|
|
|
/// "schema" namespace) and the basic name of the property being referenced. See the
|
|
|
|
/// introductory discussion of path expression usage for more information.
|
|
|
|
///
|
|
|
|
/// All of the functions take a string value for the property and option flags describing the
|
|
|
|
/// property. The value must be Unicode in UTF-8 encoding. Arrays and non-leaf levels of
|
|
|
|
/// structs do not have values. Empty arrays and structs may be created using appropriate
|
|
|
|
/// option flags. All levels of structs that is assigned implicitly are created if necessary.
|
|
|
|
/// \c AppendArayItem implicitly creates the named array if necessary.
|
|
|
|
///
|
|
|
|
/// The canonical form of these functions take the value as an \c XMP_StringPtr, a pointer to a
|
|
|
|
/// null terminated string. (\c XMP_StringPtr is a typedef for <tt>const char *</tt>.) They
|
|
|
|
/// also have overloaded forms that take a string object. These are implemented in the template
|
|
|
|
/// instantiation as a call to the canonical form, using <tt>value.c_str()</tt> to obtain the
|
|
|
|
/// \c XMP_StringPtr.
|
|
|
|
///
|
|
|
|
/// The possible option flags are:
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropValueIsURI - The property value is a URI. It is serialized to RDF using the
|
|
|
|
/// <tt>rdf:resource</tt> attribute. Not mandatory for URIs, but considered RDF-savvy.
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropValueIsStruct - This property contains nested fields (models a C struct).
|
|
|
|
/// Not necessary, may be used to create an empty struct. A struct is implicitly created when
|
|
|
|
/// first field is set.
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropValueIsArray - This property is an array. By itself (no ...ArrayIs...
|
|
|
|
/// flags), this indicates a general unordered array. It is serialized using an
|
|
|
|
/// <tt>rdf:Bag</tt> container.
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropArrayIsOrdered - This property is an ordered array. Implies \c
|
|
|
|
/// kXMP_PropValueIsArray, may be used together. It is serialized using an <tt>rdf:Seq</tt>
|
|
|
|
/// container.
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropArrayIsAlternate - This property is an alternative array. Implies \c
|
|
|
|
/// kXMP_PropArrayIsOrdered, may be used together. It is serialized using an <tt>rdf:Alt</tt>
|
|
|
|
/// container.
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_PropArrayIsAltText - This property is an alt-text array. Implies \c
|
|
|
|
/// kXMP_PropArrayIsAlternate, may be used together. It is serialized using an <tt>rdf:Alt</tt>
|
|
|
|
/// container. Each array element must be a simple property with an <tt>xml:lang</tt> attribute.
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c SetProperty is the simplest property setter, mainly for top level simple
|
|
|
|
/// properties or after using the path composition functions in \c TXMPUtils.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propName The name of the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propValue A pointer to the null terminated UTF-8 string that is the value of the
|
|
|
|
/// property, if the property has a value. Arrays and non-leaf levels of structs do not have
|
|
|
|
/// values. Must be null if the value is not relevant.
|
|
|
|
///
|
|
|
|
/// \param options Option flags describing the property. See the earlier description.
|
|
|
|
|
|
|
|
void
|
|
|
|
SetProperty ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName,
|
|
|
|
XMP_StringPtr propValue,
|
|
|
|
XMP_OptionBits options = 0 );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief This form of \c SetProperty is a simple overload in the template that calls the above
|
|
|
|
/// form passing <tt>propValue.c_str()</tt>.
|
|
|
|
|
|
|
|
void
|
|
|
|
SetProperty ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName,
|
|
|
|
const tStringObj & propValue,
|
|
|
|
XMP_OptionBits options = 0 );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c SetArrayItem provides access to items within an array. The index is passed as an
|
|
|
|
/// integer, you need not worry about the path string syntax for array items, convert a loop
|
|
|
|
/// index to a string, etc. The array passed to \c SetArrayItem must already exist. See also
|
|
|
|
/// \c AppendArrayItem.
|
|
|
|
///
|
|
|
|
/// In normal usage the selected array item is modified. A new item is automatically
|
|
|
|
/// appended if the index is the array size plus 1. A new item may be inserted before or after
|
|
|
|
/// any item by using one of the following option flags:
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_InsertBeforeItem - Insert a new array item before the selected one.
|
|
|
|
/// \li \c kXMP_InsertAfterItem - Insert a new array item after the selected one.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the array. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param arrayName The name of the array. May be a general path expression, must not be null
|
|
|
|
/// or the empty string. Has the same namespace prefix usage as \c propName in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param itemIndex The index of the desired item. Arrays in XMP are indexed from 1. The
|
|
|
|
/// constant \c kXMP_ArrayLastItem always refers to the last existing array item.
|
|
|
|
///
|
|
|
|
/// \param itemValue A pointer to the null terminated UTF-8 string that is the value of the array
|
|
|
|
/// item, if the array item has a value. Has the same usage as \c propValue in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param options Option flags describing the item. See the earlier description.
|
|
|
|
|
|
|
|
void
|
|
|
|
SetArrayItem ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr arrayName,
|
|
|
|
XMP_Index itemIndex,
|
|
|
|
XMP_StringPtr itemValue,
|
|
|
|
XMP_OptionBits options = 0 );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief This form of \c SetArrayItem is a simple overload in the template that calls the above
|
|
|
|
/// form passing <tt>itemValue.c_str()</tt>.
|
|
|
|
|
|
|
|
void
|
|
|
|
SetArrayItem ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr arrayName,
|
|
|
|
XMP_Index itemIndex,
|
|
|
|
const tStringObj & itemValue,
|
|
|
|
XMP_OptionBits options = 0 );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c AppendArrayItem simplifies construction of an array by not requiring that you
|
|
|
|
/// pre-create an empty array. The array that is assigned is created automatically if it does
|
|
|
|
/// not yet exist. Each call to \c AppendArrayItem appends an item to the array. The
|
|
|
|
/// corresponding parameters have the same use as \c SetArrayItem. The \c arrayOptions
|
|
|
|
/// parameter is used to specify what kind of array. If the array exists, it must have the
|
|
|
|
/// specified form.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the array. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param arrayName The name of the array. May be a general path expression, must not be null
|
|
|
|
/// or the empty string. Has the same namespace prefix usage as \c propPath in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param arrayOptions Option flags describing the array form. The only valid bits are those
|
|
|
|
/// that are part of \c kXMP_PropArrayFormMask: \c kXMP_PropValueIsArray, \c
|
|
|
|
/// kXMP_PropArrayIsOrdered, \c kXMP_PropArrayIsAlternate, or \c kXMP_PropArrayIsAltText.
|
|
|
|
///
|
|
|
|
/// \param itemValue A pointer to the null terminated UTF-8 string that is the value of the
|
|
|
|
/// array item, if the array item has a value. Has the same usage as \c propValue in \c
|
|
|
|
/// GetProperty.
|
|
|
|
///
|
|
|
|
/// \param itemOptions Option flags describing the item. See the earlier description.
|
|
|
|
|
|
|
|
void
|
|
|
|
AppendArrayItem ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr arrayName,
|
|
|
|
XMP_OptionBits arrayOptions,
|
|
|
|
XMP_StringPtr itemValue,
|
|
|
|
XMP_OptionBits itemOptions = 0 );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief This form of \c AppendArrayItem is a simple overload in the template that calls the
|
|
|
|
/// above form passing <tt>itemValue.c_str()</tt>.
|
|
|
|
|
|
|
|
void
|
|
|
|
AppendArrayItem ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr arrayName,
|
|
|
|
XMP_OptionBits arrayOptions,
|
|
|
|
const tStringObj & itemValue,
|
|
|
|
XMP_OptionBits itemOptions = 0 );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c SetStructField provides access to fields within a nested structure. The namespace
|
|
|
|
/// for the field is passed as a URI, you need not worry about the path string syntax.
|
|
|
|
///
|
|
|
|
/// The names of fields should be XML qualified names, that is within an XML namespace. The
|
|
|
|
/// path syntax for a qualified name uses the namespace prefix, which is unreliable because
|
|
|
|
/// the prefix is never guaranteed. The URI is the formal name, the prefix is just a local
|
|
|
|
/// shorthand in a given sequence of XML text.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the struct. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param structName The name of the struct. May be a general path expression, must not be
|
|
|
|
/// null or the empty string. Has the same namespace prefix usage as \c propName in \c
|
|
|
|
/// GetProperty.
|
|
|
|
///
|
|
|
|
/// \param fieldNS The namespace URI for the field. Has the same URI and prefix usage as the \c
|
|
|
|
/// schemaNS parameter.
|
|
|
|
///
|
|
|
|
/// \param fieldName The name of the field. Must be a single XML name, must not be null or the
|
|
|
|
/// empty string. Has the same namespace prefix usage as the \c structName parameter.
|
|
|
|
///
|
|
|
|
/// \param fieldValue A pointer to the null terminated UTF-8 string that is the value of the
|
|
|
|
/// field, if the field has a value. Has the same usage as \c propValue in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param options Option flags describing the field. See the earlier description.
|
|
|
|
|
|
|
|
void
|
|
|
|
SetStructField ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr structName,
|
|
|
|
XMP_StringPtr fieldNS,
|
|
|
|
XMP_StringPtr fieldName,
|
|
|
|
XMP_StringPtr fieldValue,
|
|
|
|
XMP_OptionBits options = 0 );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief This form of \c SetStructField is a simple overload in the template that calls the
|
|
|
|
/// above form passing <tt>fieldValue.c_str()</tt>.
|
|
|
|
|
|
|
|
void
|
|
|
|
SetStructField ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr structName,
|
|
|
|
XMP_StringPtr fieldNS,
|
|
|
|
XMP_StringPtr fieldName,
|
|
|
|
const tStringObj & fieldValue,
|
|
|
|
XMP_OptionBits options = 0 );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c SetQualifier provides access to a qualifier attached to a property. The namespace
|
|
|
|
/// for the qualifier is passed as a URI, you need not worry about the path string syntax. In
|
|
|
|
/// many regards qualifiers are like struct fields. See the introductory discussion of
|
|
|
|
/// qualified properties for more information.
|
|
|
|
///
|
|
|
|
/// The names of qualifiers should be XML qualified names, that is within an XML namespace. The
|
|
|
|
/// path syntax for a qualified name uses the namespace prefix, which is unreliable because
|
|
|
|
/// the prefix is never guaranteed. The URI is the formal name, the prefix is just a local
|
|
|
|
/// shorthand in a given sequence of XML text.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the struct. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propName The name of the property to which the qualifier is attached. Has the same
|
|
|
|
/// usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param qualNS The namespace URI for the qualifier. Has the same URI and prefix usage as the
|
|
|
|
/// \c schemaNS parameter.
|
|
|
|
///
|
|
|
|
/// \param qualName The name of the qualifier. Must be a single XML name, must not be null or
|
|
|
|
/// the empty string. Has the same namespace prefix usage as the \c propName parameter.
|
|
|
|
///
|
|
|
|
/// \param qualValue A pointer to the null terminated UTF-8 string that is the value of the
|
|
|
|
/// qualifier, if the qualifier has a value. Has the same usage as \c propValue in \c
|
|
|
|
/// GetProperty.
|
|
|
|
///
|
|
|
|
/// \param options Option flags describing the qualifier. See the earlier description.
|
|
|
|
|
|
|
|
void
|
|
|
|
SetQualifier ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName,
|
|
|
|
XMP_StringPtr qualNS,
|
|
|
|
XMP_StringPtr qualName,
|
|
|
|
XMP_StringPtr qualValue,
|
|
|
|
XMP_OptionBits options = 0 );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief This form of \c SetQualifier is a simple overload in the template that calls the above
|
|
|
|
/// form passing <tt>qualValue.c_str()</tt>.
|
|
|
|
|
|
|
|
void
|
|
|
|
SetQualifier ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName,
|
|
|
|
XMP_StringPtr qualNS,
|
|
|
|
XMP_StringPtr qualName,
|
|
|
|
const tStringObj & qualValue,
|
|
|
|
XMP_OptionBits options = 0 );
|
|
|
|
|
|
|
|
/// @}
|
|
|
|
|
|
|
|
// =============================================================================================
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \name Functions for deleting and detecting properties.
|
|
|
|
/// @{
|
|
|
|
/// These should be obvious from the descriptions of the getters and setters.
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c DeleteProperty deletes the given XMP subtree rooted at the given property. It is
|
|
|
|
/// not an error if the property does not exist.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propName The name of the property. Has the same usage as in \c GetProperty.
|
|
|
|
|
|
|
|
void
|
|
|
|
DeleteProperty ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c DeleteArrayItem deletes the given XMP subtree rooted at the given array item. It
|
|
|
|
/// is not an error if the array item does not exist.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the array. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param arrayName The name of the array. May be a general path expression, must not be null
|
|
|
|
/// or the empty string. Has the same namespace prefix usage as \c propName in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param itemIndex The index of the desired item. Arrays in XMP are indexed from 1. The
|
|
|
|
/// constant \c kXMP_ArrayLastItem always refers to the last existing array item.
|
|
|
|
|
|
|
|
void
|
|
|
|
DeleteArrayItem ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr arrayName,
|
|
|
|
XMP_Index itemIndex );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c DeleteStructField deletes the given XMP subtree rooted at the given struct field.
|
|
|
|
/// It is not an error if the field does not exist.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the struct. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param structName The name of the struct. May be a general path expression, must not be null
|
|
|
|
/// or the empty string. Has the same namespace prefix usage as \c propName in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param fieldNS The namespace URI for the field. Has the same URI and prefix usage as the
|
|
|
|
/// \c schemaNS parameter.
|
|
|
|
///
|
|
|
|
/// \param fieldName The name of the field. Must be a single XML name, must not be null or the
|
|
|
|
/// empty string. Has the same namespace prefix usage as the \c structName parameter.
|
|
|
|
|
|
|
|
void
|
|
|
|
DeleteStructField ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr structName,
|
|
|
|
XMP_StringPtr fieldNS,
|
|
|
|
XMP_StringPtr fieldName );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c DeleteQualifier deletes the given XMP subtree rooted at the given qualifier. It
|
|
|
|
/// is not an error if the qualifier does not exist.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the struct. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propName The name of the property to which the qualifier is attached. Has the same
|
|
|
|
/// usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param qualNS The namespace URI for the qualifier. Has the same URI and prefix usage as the
|
|
|
|
/// \c schemaNS parameter.
|
|
|
|
///
|
|
|
|
/// \param qualName The name of the qualifier. Must be a single XML name, must not be null or the
|
|
|
|
/// empty string. Has the same namespace prefix usage as the \c propName parameter.
|
|
|
|
|
|
|
|
void
|
|
|
|
DeleteQualifier ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName,
|
|
|
|
XMP_StringPtr qualNS,
|
|
|
|
XMP_StringPtr qualName );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c DoesPropertyExist tells if the property exists.
|
|
|
|
///
|
|
|
|
/// \result Returns true if the property exists.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propName The name of the property. Has the same usage as in \c GetProperty.
|
|
|
|
|
|
|
|
bool
|
|
|
|
DoesPropertyExist ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName ) const;
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c DoesArrayItemExist tells if the array item exists.
|
|
|
|
///
|
|
|
|
/// \result Returns true if the array item exists.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the array. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param arrayName The name of the array. May be a general path expression, must not be null
|
|
|
|
/// or the empty string. Has the same namespace prefix usage as \c propName in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param itemIndex The index of the desired item. Arrays in XMP are indexed from 1. The
|
|
|
|
/// constant \c kXMP_ArrayLastItem always refers to the last existing array item.
|
|
|
|
|
|
|
|
bool
|
|
|
|
DoesArrayItemExist ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr arrayName,
|
|
|
|
XMP_Index itemIndex ) const;
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c DoesStructFieldExist tells if the struct field exists.
|
|
|
|
///
|
|
|
|
/// \result Returns true if the field exists.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the struct. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param structName The name of the struct. May be a general path expression, must not be null
|
|
|
|
/// or the empty string. Has the same namespace prefix usage as \c propName in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param fieldNS The namespace URI for the field. Has the same URI and prefix usage as the
|
|
|
|
/// \c schemaNS parameter.
|
|
|
|
///
|
|
|
|
/// \param fieldName The name of the field. Must be a single XML name, must not be null or the
|
|
|
|
/// empty string. Has the same namespace prefix usage as the \c structName parameter.
|
|
|
|
|
|
|
|
bool
|
|
|
|
DoesStructFieldExist ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr structName,
|
|
|
|
XMP_StringPtr fieldNS,
|
|
|
|
XMP_StringPtr fieldName ) const;
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c DoesQualifierExist tells if the qualifier exists.
|
|
|
|
///
|
|
|
|
/// \result Returns true if the qualifier exists.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the struct. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propName The name of the property to which the qualifier is attached. Has the same
|
|
|
|
/// usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param qualNS The namespace URI for the qualifier. Has the same URI and prefix usage as the
|
|
|
|
/// \c schemaNS parameter.
|
|
|
|
///
|
|
|
|
/// \param qualName The name of the qualifier. Must be a single XML name, must not be null or the
|
|
|
|
/// empty string. Has the same namespace prefix usage as the \c propName parameter.
|
|
|
|
|
|
|
|
bool
|
|
|
|
DoesQualifierExist ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName,
|
|
|
|
XMP_StringPtr qualNS,
|
|
|
|
XMP_StringPtr qualName ) const;
|
|
|
|
|
|
|
|
/// @}
|
|
|
|
|
|
|
|
// =============================================================================================
|
|
|
|
// Specialized Get and Set functions
|
|
|
|
// =================================
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \name Functions for accessing localized text (alt-text) properties.
|
|
|
|
/// @{
|
|
|
|
/// These functions provide convenient support for localized text properties, including a number
|
|
|
|
/// of special and obscure aspects. Localized text properties are stored in alt-text arrays.
|
|
|
|
/// They allow multiple concurrent localizations of a property value, for example a document
|
|
|
|
/// title or copyright in several languages.
|
|
|
|
///
|
|
|
|
/// The most important aspect of these functions is that they select an appropriate array item
|
|
|
|
/// based on one or two RFC 3066 language tags. One of these languages, the "specific" language,
|
|
|
|
/// is preferred and selected if there is an exact match. For many languages it is also possible
|
|
|
|
/// to define a "generic" language that may be used if there is no specific language match. The
|
|
|
|
/// generic language must be a valid RFC 3066 primary subtag, or the empty string.
|
|
|
|
///
|
|
|
|
/// For example, a specific language of "en-US" should be used in the US, and a specific language
|
|
|
|
/// of "en-UK" should be used in England. It is also appropriate to use "en" as the generic
|
|
|
|
/// language in each case. If a US document goes to England, the "en-US" title is selected
|
|
|
|
/// by using the "en" generic language and the "en-UK" specific language.
|
|
|
|
///
|
|
|
|
/// It is considered poor practice, but allowed, to pass a specific language that is just an
|
|
|
|
/// RFC 3066 primary tag. For example "en" is not a good specific language, it should only be
|
|
|
|
/// used as a generic language. Passing "i" or "x" as the generic language is also considered
|
|
|
|
/// poor practice but allowed.
|
|
|
|
///
|
|
|
|
/// Advice from the W3C about the use of RFC 3066 language tags can be found at:
|
|
|
|
/// \li http://www.w3.org/International/articles/language-tags/
|
|
|
|
///
|
|
|
|
/// \note RFC 3066 language tags must be treated in a case insensitive manner. The XMP toolkit
|
|
|
|
/// does this by normalizing their capitalization:
|
|
|
|
///
|
|
|
|
/// \li The primary subtag is lower case, the suggested practice of ISO 639.
|
|
|
|
/// \li All 2 letter secondary subtags are upper case, the suggested practice of ISO 3166.
|
|
|
|
/// \li All other subtags are lower case.
|
|
|
|
///
|
|
|
|
/// The XMP specification defines an artificial language, "x-default", that is used to
|
|
|
|
/// explicitly denote a default item in an alt-text array. The XMP toolkit normalizes alt-text
|
|
|
|
/// arrays such that the x-default item is the first item. The \c SetLocalizedText function has
|
|
|
|
/// several special features related to the x-default item, see its description for details.
|
|
|
|
///
|
|
|
|
/// The selection of the array item is the same for \c GetLocalizedText and \c SetLocalizedText:
|
|
|
|
///
|
|
|
|
/// \li Look for an exact match with the specific language.
|
|
|
|
/// \li If a generic language is given, look for a partial match.
|
|
|
|
/// \li Look for an x-default item.
|
|
|
|
/// \li Choose the first item.
|
|
|
|
///
|
|
|
|
/// A partial match with the generic language is where the start of the item's language matches
|
|
|
|
/// the generic string and the next character is '-'. An exact match is also recognized as a
|
|
|
|
/// degenerate case.
|
|
|
|
///
|
|
|
|
/// It is fine to pass x-default as the specific language. In this case, selection of an x-default
|
|
|
|
/// item is an exact match by the first rule, not a selection by the 3rd rule. The last 2 rules
|
|
|
|
/// are fallbacks used when the specific and generic languages fail to produce a match.
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c GetLocalizedText returns information about a selected item in an alt-text array.
|
|
|
|
/// The array item is selected according to the rules given above.
|
|
|
|
///
|
|
|
|
/// \result Returns true if an appropriate array item exists.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the alt-text array. Has the same usage as in \c
|
|
|
|
/// GetProperty.
|
|
|
|
///
|
|
|
|
/// \param altTextName The name of the alt-text array. May be a general path expression, must
|
|
|
|
/// not be null or the empty string. Has the same namespace prefix usage as \c propName in \c
|
|
|
|
/// GetProperty.
|
|
|
|
///
|
|
|
|
/// \param genericLang The name of the generic language as an RFC 3066 primary subtag. May be
|
|
|
|
/// null or the empty string if no generic language is wanted.
|
|
|
|
///
|
|
|
|
/// \param specificLang The name of the specific language as an RFC 3066 tag. Must not be null
|
|
|
|
/// or the empty string.
|
|
|
|
///
|
|
|
|
/// \param actualLang A pointer to the string that is assigned the language of the selected
|
|
|
|
/// array item, if an appropriate array item is found. May be null if the language is not
|
|
|
|
/// wanted.
|
|
|
|
///
|
|
|
|
/// \param itemValue A pointer to the string that is assigned the value of the array item, if
|
|
|
|
/// an appropriate array item is found. May be null if the value is not wanted.
|
|
|
|
///
|
|
|
|
/// \param options A pointer to the \c XMP_OptionBits variable that is assigned option flags
|
|
|
|
/// describing the array item. May be null if the flags are not wanted.
|
|
|
|
|
|
|
|
bool
|
|
|
|
GetLocalizedText ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr altTextName,
|
|
|
|
XMP_StringPtr genericLang,
|
|
|
|
XMP_StringPtr specificLang,
|
|
|
|
tStringObj * actualLang,
|
|
|
|
tStringObj * itemValue,
|
|
|
|
XMP_OptionBits * options ) const;
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c SetLocalizedText modifies the value of a selected item in an alt-text array.
|
|
|
|
/// Creates an appropriate array item if necessary, and handles special cases for the x-default
|
|
|
|
/// item.
|
|
|
|
///
|
|
|
|
/// If the selected item is from a match with the specific language, the value of that item is
|
|
|
|
/// modified. If the existing value of that item matches the existing value of the x-default
|
|
|
|
/// item, the x-default item is also modified. If the array only has 1 existing item (which is
|
|
|
|
/// not x-default), an x-default item is added with the given value.
|
|
|
|
///
|
|
|
|
/// If the selected item is from a match with the generic language and there are no other
|
|
|
|
/// generic matches, the value of that item is modified. If the existing value of that item
|
|
|
|
/// matches the existing value of the x-default item, the x-default item is also modified. If
|
|
|
|
/// the array only has 1 existing item (which is not x-default), an x-default item is added
|
|
|
|
/// with the given value.
|
|
|
|
///
|
|
|
|
/// If the selected item is from a partial match with the generic language and there are other
|
|
|
|
/// partial matches, a new item is created for the specific language. The x-default item is not
|
|
|
|
/// modified.
|
|
|
|
///
|
|
|
|
/// If the selected item is from the last 2 rules then a new item is created for the specific
|
|
|
|
/// language. If the array only had an x-default item, the x-default item is also modified. If
|
|
|
|
/// the array was empty, items are created for the specific language and x-default.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the alt-text array. Has the same usage as in \c
|
|
|
|
/// GetProperty.
|
|
|
|
///
|
|
|
|
/// \param altTextName The name of the alt-text array. May be a general path expression, must
|
|
|
|
/// not be null or the empty string. Has the same namespace prefix usage as \c propName in \c
|
|
|
|
/// GetProperty.
|
|
|
|
///
|
|
|
|
/// \param genericLang The name of the generic language as an RFC 3066 primary subtag. May be
|
|
|
|
/// null or the empty string if no generic language is wanted.
|
|
|
|
///
|
|
|
|
/// \param specificLang The name of the specific language as an RFC 3066 tag. Must not be null
|
|
|
|
/// or the empty string.
|
|
|
|
///
|
|
|
|
/// \param itemValue A pointer to the null terminated UTF-8 string that is the new value for
|
|
|
|
/// the appropriate array item.
|
|
|
|
///
|
|
|
|
/// \param options Option flags, none are defined at present.
|
|
|
|
|
|
|
|
void
|
|
|
|
SetLocalizedText ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr altTextName,
|
|
|
|
XMP_StringPtr genericLang,
|
|
|
|
XMP_StringPtr specificLang,
|
|
|
|
XMP_StringPtr itemValue,
|
|
|
|
XMP_OptionBits options = 0 );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief This form of \c SetLocalizedText is a simple overload in the template that calls the
|
|
|
|
/// above form passing <tt>itemValue.c_str()</tt>.
|
|
|
|
|
|
|
|
void
|
|
|
|
SetLocalizedText ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr altTextName,
|
|
|
|
XMP_StringPtr genericLang,
|
|
|
|
XMP_StringPtr specificLang,
|
|
|
|
const tStringObj & itemValue,
|
|
|
|
XMP_OptionBits options = 0 );
|
|
|
|
|
|
|
|
/// @}
|
|
|
|
|
|
|
|
// =============================================================================================
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \name Functions accessing properties as binary values.
|
|
|
|
/// @{
|
|
|
|
/// These are very similar to \c GetProperty and \c SetProperty above, but the value is
|
|
|
|
/// returned or
|
|
|
|
/// provided in binary form instead of as a UTF-8 string. The path composition functions in
|
|
|
|
/// \c TXMPUtils may be used to compose an path expression for fields in nested structures, items
|
|
|
|
/// in arrays, or qualifiers.
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c GetProperty_Bool returns the value of a Boolean property as a C++ bool.
|
|
|
|
///
|
|
|
|
/// \result Returns true if the property exists.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propName The name of the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propValue A pointer to the bool variable that is assigned the value of the property.
|
|
|
|
/// May be null if the value is not wanted.
|
|
|
|
///
|
|
|
|
/// \param options A pointer to the \c XMP_OptionBits variable that is assigned option flags
|
|
|
|
/// describing the property. May be null if the flags are not wanted.
|
|
|
|
|
|
|
|
bool
|
|
|
|
GetProperty_Bool ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName,
|
|
|
|
bool * propValue,
|
|
|
|
XMP_OptionBits * options ) const;
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c GetProperty_Int returns the value of an integer property as a C long integer.
|
|
|
|
///
|
|
|
|
/// \result Returns true if the property exists.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propName The name of the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propValue A pointer to the long integer variable that is assigned the value of
|
|
|
|
/// the property. May be null if the value is not wanted.
|
|
|
|
///
|
|
|
|
/// \param options A pointer to the \c XMP_OptionBits variable that is assigned option flags
|
|
|
|
/// describing the property. May be null if the flags are not wanted.
|
|
|
|
|
|
|
|
bool
|
|
|
|
GetProperty_Int ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName,
|
|
|
|
long * propValue,
|
|
|
|
XMP_OptionBits * options ) const;
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c GetProperty_Int64 returns the value of an integer property as a C long long integer.
|
|
|
|
///
|
|
|
|
/// \result Returns true if the property exists.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propName The name of the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propValue A pointer to the long long integer variable that is assigned the value of
|
|
|
|
/// the property. May be null if the value is not wanted.
|
|
|
|
///
|
|
|
|
/// \param options A pointer to the \c XMP_OptionBits variable that is assigned option flags
|
|
|
|
/// describing the property. May be null if the flags are not wanted.
|
|
|
|
|
|
|
|
bool
|
|
|
|
GetProperty_Int64 ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName,
|
|
|
|
long long * propValue,
|
|
|
|
XMP_OptionBits * options ) const;
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c GetProperty_Float returns the value of a flaoting point property as a C double float.
|
|
|
|
///
|
|
|
|
/// \result Returns true if the property exists.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propName The name of the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propValue A pointer to the double float variable that is assigned the value of
|
|
|
|
/// the property. May be null if the value is not wanted.
|
|
|
|
///
|
|
|
|
/// \param options A pointer to the \c XMP_OptionBits variable that is assigned option flags
|
|
|
|
/// describing the property. May be null if the flags are not wanted.
|
|
|
|
|
|
|
|
bool
|
|
|
|
GetProperty_Float ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName,
|
|
|
|
double * propValue,
|
|
|
|
XMP_OptionBits * options ) const;
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c GetProperty_Date returns the value of a date/time property as an \c XMP_DateTime struct.
|
|
|
|
///
|
|
|
|
/// \result Returns true if the property exists.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propName The name of the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propValue A pointer to the \c XMP_DateTime variable that is assigned the value of
|
|
|
|
/// the property. May be null if the value is not wanted.
|
|
|
|
///
|
|
|
|
/// \param options A pointer to the \c XMP_OptionBits variable that is assigned option flags
|
|
|
|
/// describing the property. May be null if the flags are not wanted.
|
|
|
|
|
|
|
|
bool
|
|
|
|
GetProperty_Date ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName,
|
|
|
|
XMP_DateTime * propValue,
|
|
|
|
XMP_OptionBits * options ) const;
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c SetProperty_Bool sets the value of a Boolean property from a C++ bool.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propName The name of the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propValue The bool value to be assigned to the property.
|
|
|
|
///
|
|
|
|
/// \param options A pointer to the \c XMP_OptionBits variable that is assigned option flags
|
|
|
|
/// describing the property. May be null if the flags are not wanted.
|
|
|
|
|
|
|
|
void
|
|
|
|
SetProperty_Bool ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName,
|
|
|
|
bool propValue,
|
|
|
|
XMP_OptionBits options = 0 );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c SetProperty_Int sets the value of an integer property from a C long integer.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propName The name of the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propValue The long integer value to be assigned to the property.
|
|
|
|
///
|
|
|
|
/// \param options Option flags describing the property.
|
|
|
|
|
|
|
|
void
|
|
|
|
SetProperty_Int ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName,
|
|
|
|
long propValue,
|
|
|
|
XMP_OptionBits options = 0 );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c SetProperty_Int64 sets the value of an integer property from a C long long integer.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propName The name of the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propValue The long long integer value to be assigned to the property.
|
|
|
|
///
|
|
|
|
/// \param options Option flags describing the property.
|
|
|
|
|
|
|
|
void
|
|
|
|
SetProperty_Int64 ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName,
|
|
|
|
long long propValue,
|
|
|
|
XMP_OptionBits options = 0 );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c SetProperty_Float sets the value of a floating point property from a C double float.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propName The name of the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propValue The double float value to be assigned to the property.
|
|
|
|
///
|
|
|
|
/// \param options Option flags describing the property.
|
|
|
|
|
|
|
|
void
|
|
|
|
SetProperty_Float ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName,
|
|
|
|
double propValue,
|
|
|
|
XMP_OptionBits options = 0 );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c SetProperty_Date sets the value of a date/time property from an \c XMP_DateTime struct.
|
|
|
|
///
|
|
|
|
/// \param schemaNS The namespace URI for the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propName The name of the property. Has the same usage as in \c GetProperty.
|
|
|
|
///
|
|
|
|
/// \param propValue The \c XMP_DateTime value to be assigned to the property.
|
|
|
|
///
|
|
|
|
/// \param options Option flags describing the property.
|
|
|
|
|
|
|
|
void
|
|
|
|
SetProperty_Date ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr propName,
|
|
|
|
const XMP_DateTime & propValue,
|
|
|
|
XMP_OptionBits options = 0 );
|
|
|
|
|
|
|
|
/// @}
|
|
|
|
|
|
|
|
// =============================================================================================
|
|
|
|
// Miscellaneous Member Functions
|
|
|
|
// ==============================
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \name Misceallaneous functions.
|
|
|
|
/// @{
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief GetInternalRef Returns an internal reference that may be safely passed across DLL
|
|
|
|
/// boundaries and reconstructed.
|
|
|
|
|
|
|
|
XMPMetaRef
|
|
|
|
GetInternalRef() const;
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief GetObjectName --TBD--
|
|
|
|
|
|
|
|
void
|
|
|
|
GetObjectName ( tStringObj * name ) const;
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief SetObjectName --TBD--
|
|
|
|
|
|
|
|
void
|
|
|
|
SetObjectName ( XMP_StringPtr name );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief SetObjectName --TBD--
|
|
|
|
|
|
|
|
void
|
|
|
|
SetObjectName ( tStringObj name );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief GetObjectOptions --TBD--
|
|
|
|
|
|
|
|
XMP_OptionBits
|
|
|
|
GetObjectOptions() const;
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief SetObjectOptions --TBD--
|
|
|
|
///
|
|
|
|
/// \note <b>Not yet implemented.</b> File a bug if you need this.
|
|
|
|
|
|
|
|
void
|
|
|
|
SetObjectOptions ( XMP_OptionBits options );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c Clone creates a deep clone of the XMP object.
|
|
|
|
///
|
|
|
|
/// This function creates a deep clone of the XMP object. Assignment and copy constructors do
|
|
|
|
/// not, they just increment a reference count. Note that \c Clone returns an object, not a
|
|
|
|
/// pointer. This is easy to misuse:
|
|
|
|
///
|
|
|
|
/// \code
|
|
|
|
/// SXMPMeta * clone1 = &sourceXMP.Clone(); // ! This does not work!
|
|
|
|
/// SXMPMeta * clone2 = new SXMPMeta ( sourceXMP.Clone() ); // This works.
|
|
|
|
/// SXMPMeta clone3 ( sourceXMP.Clone ); // This works also. (Not a pointer.)
|
|
|
|
/// \endcode
|
|
|
|
///
|
|
|
|
/// In the code above, the assignment to \c clone1 creates a temporary object, initializes it
|
|
|
|
/// with the clone, assigns the address of the temporary to \c clone1, then deletes the
|
|
|
|
/// temporary. The \c clone3 example also works, you do not have to use an explicit pointer.
|
|
|
|
/// This is good for local usage, you don't have to worry about memory leaks.
|
|
|
|
///
|
|
|
|
/// \param options Option flags, not are defined at present.
|
|
|
|
///
|
|
|
|
/// \result An XMP object cloned from the original.
|
|
|
|
|
|
|
|
TXMPMeta
|
|
|
|
Clone ( XMP_OptionBits options = 0 ) const;
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief CountArrayItems --TBD--
|
|
|
|
|
|
|
|
XMP_Index
|
|
|
|
CountArrayItems ( XMP_StringPtr schemaNS,
|
|
|
|
XMP_StringPtr arrayName ) const;
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c DumpObject dumps the content of an XMP object.
|
|
|
|
|
|
|
|
XMP_Status
|
|
|
|
DumpObject ( XMP_TextOutputProc outProc,
|
|
|
|
void * refCon ) const;
|
|
|
|
|
|
|
|
/// @}
|
|
|
|
|
|
|
|
// =============================================================================================
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \name Functions for parsing and serializing.
|
|
|
|
/// @{
|
|
|
|
/// These functions support parsing serialized RDF into an XMP object, and serailizing an XMP
|
|
|
|
/// object into RDF. The input for parsing may be any valid Unicode encoding. ISO Latin-1 is
|
|
|
|
/// also recognized, but its use is strongly discouraged. Serialization is always as UTF-8.
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c ParseFromBuffer parses RDF from a series of input buffers. The buffers may be any
|
|
|
|
/// length. The buffer boundaries need not respect XML tokens or even Unicode characters.
|
|
|
|
///
|
|
|
|
/// \param buffer A pointer to a buffer of input. May be null if \c bufferSize is 0.
|
|
|
|
///
|
|
|
|
/// \param bufferSize The length of this buffer in bytes. Zero is a valid value. Termination of
|
|
|
|
/// an input loop is convenient by passing \c kXMP_ParseMoreBuffers for all real input, then
|
|
|
|
/// having a final call with a zero length and \c kXMP_NoOptions.
|
|
|
|
///
|
|
|
|
/// \param options Options controlling the parsing.
|
|
|
|
///
|
|
|
|
/// The available options are:
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_ParseMoreBuffers - This is not the last buffer of input, more calls follow.
|
|
|
|
/// \li \c kXMP_RequireXMPMeta - The x:xmpmeta XML element is required around <tt>rdf:RDF</tt>.
|
|
|
|
/// \li \c kXMP_StrictAliasing - Do not reconcile alias differences, throw an exception.
|
|
|
|
///
|
|
|
|
/// \note The \c kXMP_StrictAliasing option is not yet implemented.
|
|
|
|
|
|
|
|
void
|
|
|
|
ParseFromBuffer ( XMP_StringPtr buffer,
|
|
|
|
XMP_StringLen bufferSize,
|
|
|
|
XMP_OptionBits options = 0 );
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief \c SerializeToBuffer serializes an XMP object into a string as RDF.
|
|
|
|
///
|
|
|
|
/// \param rdfString A pointer to the string to receive the serialized RDF. Must not be null.
|
|
|
|
///
|
|
|
|
/// \param options Option flags to control the serialization.
|
|
|
|
///
|
|
|
|
/// \param padding The amount of padding to be added if a writeable XML packet is created. If
|
|
|
|
/// zero is passed (the default) an appropriate amount of padding is computed.
|
|
|
|
///
|
|
|
|
/// \param newline The string to be used as a line terminator. If empty it defaults to
|
|
|
|
/// linefeed, U+000A, the standard XML newline.
|
|
|
|
///
|
|
|
|
/// \param indent The string to be used for each level of indentation in the serialized RDF. If
|
|
|
|
/// empty it defaults to two ASCII spaces, U+0020.
|
|
|
|
///
|
|
|
|
/// \param baseIndent The number of levels of indentation to be used for the outermost XML
|
|
|
|
/// element in the serialized RDF. This is convenient when embedding the RDF in other text.
|
|
|
|
///
|
|
|
|
/// The available option flags are:
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_OmitPacketWrapper - Do not include an XML packet wrapper.
|
|
|
|
/// \li \c kXMP_ReadOnlyPacket - Create a read-only XML packet wapper.
|
|
|
|
/// \li \c kXMP_UseCompactFormat - Use a highly compact RDF syntax and layout.
|
|
|
|
/// \li \c kXMP_WriteAliasComments - Include XML comments for aliases.
|
|
|
|
/// \li \c kXMP_IncludeThumbnailPad - Include typical space for a JPEG thumbnail in the padding
|
|
|
|
/// if no <tt>xmp:Thumbnails</tt> property is present.
|
|
|
|
/// \li \c kXMP_ExactPacketLength - The padding parameter provides the overall packet length.
|
|
|
|
/// The actual amount of padding is computed. An exception is thrown if the packet exceeds this
|
|
|
|
/// length with no padding.
|
|
|
|
///
|
|
|
|
/// The specified options must be logically consistent, an exception is thrown if not. You
|
|
|
|
/// cannot specify both \c kXMP_OmitPacketWrapper along with \c kXMP_ReadOnlyPacket, \c
|
|
|
|
/// kXMP_IncludeThumbnailPad, or \c kXMP_ExactPacketLength.
|
|
|
|
///
|
|
|
|
/// In addition, one of the following encoding options may be included:
|
|
|
|
///
|
|
|
|
/// \li \c kXMP_EncodeUTF8 - Encode as UTF-8, the default.
|
|
|
|
/// \li \c kXMP_EncodeUTF16Big - Encode as big-endian UTF-16.
|
|
|
|
/// \li \c kXMP_EncodeUTF16Little - Encode as little-endian UTF-16.
|
|
|
|
/// \li \c kXMP_EncodeUTF32Big - Encode as big-endian UTF-32.
|
|
|
|
/// \li \c kXMP_EncodeUTF32Little - Encode as little-endian UTF-32.
|
|
|
|
|
|
|
|
void
|
|
|
|
SerializeToBuffer ( tStringObj * rdfString,
|
|
|
|
XMP_OptionBits options,
|
|
|
|
XMP_StringLen padding,
|
|
|
|
XMP_StringPtr newline,
|
|
|
|
XMP_StringPtr indent = "",
|
|
|
|
XMP_Index baseIndent = 0 ) const;
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
/// \brief This form of \c SerializeToBuffer is a simple overload in the template that calls the
|
|
|
|
/// above form passing default values for the \c newline, \c indent, and \c baseIndent
|
|
|
|
/// parameters.
|
|
|
|
|
|
|
|
void
|
|
|
|
SerializeToBuffer ( tStringObj * rdfString,
|
|
|
|
XMP_OptionBits options = 0,
|
|
|
|
XMP_StringLen padding = 0 ) const;
|
|
|
|
|
|
|
|
/// @}
|
|
|
|
|
|
|
|
// =============================================================================================
|
|
|
|
|
|
|
|
XMPMetaRef xmpRef; // *** Should be private, see below.
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
#if 0 // *** VS.Net and gcc seem to not handle the friend declarations properly.
|
|
|
|
friend class TXMPIterator <class tStringObj>;
|
|
|
|
friend class TXMPUtils <class tStringObj>;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
}; // class TXMPMeta
|
|
|
|
|
|
|
|
#endif // __TXMPMeta_hpp__
|