#ifndef __XMPUtils_hpp__
#define __XMPUtils_hpp__
// =================================================================================================
// 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.
// =================================================================================================
#include "XMP_Environment.h"
#include "XMP_Const.h"
#include "XMPMeta.hpp"
#include "XMPCore_Impl.hpp"
#include "client-glue/WXMPUtils.hpp"
// -------------------------------------------------------------------------------------------------
extern XMP_VarString * sComposedPath; // *** Only really need 1 string. Shrink periodically?
extern XMP_VarString * sConvertedValue;
extern XMP_VarString * sBase64Str;
extern XMP_VarString * sCatenatedItems;
extern XMP_VarString * sStandardXMP;
extern XMP_VarString * sExtendedXMP;
extern XMP_VarString * sExtendedDigest;
// -------------------------------------------------------------------------------------------------
class XMPUtils {
public:
static bool
Initialize(); // ! For internal use only!
static void
Terminate() RELEASE_NO_THROW; // ! For internal use only!
static void
Unlock ( XMP_OptionBits options );
// ---------------------------------------------------------------------------------------------
static void
ComposeArrayItemPath ( XMP_StringPtr schemaNS,
XMP_StringPtr arrayName,
XMP_Index itemIndex,
XMP_StringPtr * fullPath,
XMP_StringLen * pathSize );
static void
ComposeStructFieldPath ( XMP_StringPtr schemaNS,
XMP_StringPtr structName,
XMP_StringPtr fieldNS,
XMP_StringPtr fieldName,
XMP_StringPtr * fullPath,
XMP_StringLen * pathSize );
static void
ComposeQualifierPath ( XMP_StringPtr schemaNS,
XMP_StringPtr propName,
XMP_StringPtr qualNS,
XMP_StringPtr qualName,
XMP_StringPtr * fullPath,
XMP_StringLen * pathSize );
static void
ComposeLangSelector ( XMP_StringPtr schemaNS,
XMP_StringPtr arrayName,
XMP_StringPtr langName,
XMP_StringPtr * fullPath,
XMP_StringLen * pathSize );
static void
ComposeFieldSelector ( XMP_StringPtr schemaNS,
XMP_StringPtr arrayName,
XMP_StringPtr fieldNS,
XMP_StringPtr fieldName,
XMP_StringPtr fieldValue,
XMP_StringPtr * fullPath,
XMP_StringLen * pathSize );
// ---------------------------------------------------------------------------------------------
static void
ConvertFromBool ( bool binValue,
XMP_StringPtr * strValue,
XMP_StringLen * strSize );
static void
ConvertFromInt ( XMP_Int32 binValue,
XMP_StringPtr format,
XMP_StringPtr * strValue,
XMP_StringLen * strSize );
static void
ConvertFromInt64 ( XMP_Int64 binValue,
XMP_StringPtr format,
XMP_StringPtr * strValue,
XMP_StringLen * strSize );
static void
ConvertFromFloat ( double binValue,
XMP_StringPtr format,
XMP_StringPtr * strValue,
XMP_StringLen * strSize );
static void
ConvertFromDate ( const XMP_DateTime & binValue,
XMP_StringPtr * strValue,
XMP_StringLen * strSize );
// ---------------------------------------------------------------------------------------------
static bool
ConvertToBool ( XMP_StringPtr strValue );
static XMP_Int32
ConvertToInt ( XMP_StringPtr strValue );
static XMP_Int64
ConvertToInt64 ( XMP_StringPtr strValue );
static double
ConvertToFloat ( XMP_StringPtr strValue );
static void
ConvertToDate ( XMP_StringPtr strValue,
XMP_DateTime * binValue );
// ---------------------------------------------------------------------------------------------
static void
CurrentDateTime ( XMP_DateTime * time );
static void
SetTimeZone ( XMP_DateTime * time );
static void
ConvertToUTCTime ( XMP_DateTime * time );
static void
ConvertToLocalTime ( XMP_DateTime * time );
static int
CompareDateTime ( const XMP_DateTime & left,
const XMP_DateTime & right );
// ---------------------------------------------------------------------------------------------
static void
EncodeToBase64 ( XMP_StringPtr rawStr,
XMP_StringLen rawLen,
XMP_StringPtr * encodedStr,
XMP_StringLen * encodedLen );
static void
DecodeFromBase64 ( XMP_StringPtr encodedStr,
XMP_StringLen encodedLen,
XMP_StringPtr * rawStr,
XMP_StringLen * rawLen );
// ---------------------------------------------------------------------------------------------
static void
PackageForJPEG ( const XMPMeta & xmpObj,
XMP_StringPtr * stdStr,
XMP_StringLen * stdLen,
XMP_StringPtr * extStr,
XMP_StringLen * extLen,
XMP_StringPtr * digestStr,
XMP_StringLen * digestLen );
static void
MergeFromJPEG ( XMPMeta * fullXMP,
const XMPMeta & extendedXMP );
// ---------------------------------------------------------------------------------------------
static void
CatenateArrayItems ( const XMPMeta & xmpObj,
XMP_StringPtr schemaNS,
XMP_StringPtr arrayName,
XMP_StringPtr separator,
XMP_StringPtr quotes,
XMP_OptionBits options,
XMP_StringPtr * catedStr,
XMP_StringLen * catedLen );
static void
SeparateArrayItems ( XMPMeta * xmpObj,
XMP_StringPtr schemaNS,
XMP_StringPtr arrayName,
XMP_OptionBits options,
XMP_StringPtr catedStr );
static void
RemoveProperties ( XMPMeta * xmpObj,
XMP_StringPtr schemaNS,
XMP_StringPtr propName,
XMP_OptionBits options );
static void
AppendProperties ( const XMPMeta & source,
XMPMeta * dest,
XMP_OptionBits options );
static void
DuplicateSubtree ( const XMPMeta & source,
XMPMeta * dest,
XMP_StringPtr sourceNS,
XMP_StringPtr sourceRoot,
XMP_StringPtr destNS,
XMP_StringPtr destRoot,
XMP_OptionBits options );
}; // XMPUtils
// =================================================================================================
#endif // __XMPUtils_hpp__