00001 #ifndef __TXMPUtils_hpp__ 00002 #define __TXMPUtils_hpp__ 1 00003 00004 #if ( ! __XMP_hpp__ ) 00005 #error "Do not directly include, use XMP.hpp" 00006 #endif 00007 00008 // ================================================================================================= 00009 // ADOBE SYSTEMS INCORPORATED 00010 // Copyright 2002 Adobe Systems Incorporated 00011 // All Rights Reserved 00012 // 00013 // NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the terms 00014 // of the Adobe license agreement accompanying it. 00015 // ================================================================================================= 00016 00017 // ================================================================================================= 00024 // ================================================================================================= 00025 00026 // ================================================================================================= 00047 // ================================================================================================= 00048 00049 template <class tStringObj> class TXMPUtils { 00050 00051 public: 00052 00053 // ============================================================================================= 00054 // No constructors or destructor declared or needed 00055 // ================================================ 00056 00057 // ============================================================================================ 00092 00093 // --------------------------------------------------------------------------------------------- 00109 00110 static void ComposeArrayItemPath ( XMP_StringPtr schemaNS, 00111 XMP_StringPtr arrayName, 00112 XMP_Index itemIndex, 00113 tStringObj * fullPath ); 00114 00115 // --------------------------------------------------------------------------------------------- 00133 00134 static void ComposeStructFieldPath ( XMP_StringPtr schemaNS, 00135 XMP_StringPtr structName, 00136 XMP_StringPtr fieldNS, 00137 XMP_StringPtr fieldName, 00138 tStringObj * fullPath ); 00139 00140 // --------------------------------------------------------------------------------------------- 00159 00160 static void ComposeQualifierPath ( XMP_StringPtr schemaNS, 00161 XMP_StringPtr propName, 00162 XMP_StringPtr qualNS, 00163 XMP_StringPtr qualName, 00164 tStringObj * fullPath ); 00165 00166 // --------------------------------------------------------------------------------------------- 00190 00191 static void ComposeLangSelector ( XMP_StringPtr schemaNS, 00192 XMP_StringPtr arrayName, 00193 XMP_StringPtr langName, 00194 tStringObj * fullPath ); 00195 00196 // --------------------------------------------------------------------------------------------- 00220 00221 static void ComposeLangSelector ( XMP_StringPtr schemaNS, 00222 XMP_StringPtr arrayName, 00223 const tStringObj & langName, 00224 tStringObj * fullPath ); 00225 00226 // --------------------------------------------------------------------------------------------- 00260 00261 static void ComposeFieldSelector ( XMP_StringPtr schemaNS, 00262 XMP_StringPtr arrayName, 00263 XMP_StringPtr fieldNS, 00264 XMP_StringPtr fieldName, 00265 XMP_StringPtr fieldValue, 00266 tStringObj * fullPath ); 00267 00268 // --------------------------------------------------------------------------------------------- 00302 00303 static void ComposeFieldSelector ( XMP_StringPtr schemaNS, 00304 XMP_StringPtr arrayName, 00305 XMP_StringPtr fieldNS, 00306 XMP_StringPtr fieldName, 00307 const tStringObj & fieldValue, 00308 tStringObj * fullPath ); 00309 00311 00312 // ============================================================================================= 00324 00325 // --------------------------------------------------------------------------------------------- 00334 00335 static void ConvertFromBool ( bool binValue, 00336 tStringObj * strValue ); 00337 00338 // --------------------------------------------------------------------------------------------- 00346 00347 static void ConvertFromInt ( long binValue, 00348 XMP_StringPtr format, 00349 tStringObj * strValue ); 00350 // --------------------------------------------------------------------------------------------- 00358 00359 static void ConvertFromInt64 ( long long binValue, 00360 XMP_StringPtr format, 00361 tStringObj * strValue ); 00362 00363 // --------------------------------------------------------------------------------------------- 00371 00372 static void ConvertFromFloat ( double binValue, 00373 XMP_StringPtr format, 00374 tStringObj * strValue ); 00375 00376 // --------------------------------------------------------------------------------------------- 00409 00410 static void ConvertFromDate ( const XMP_DateTime & binValue, 00411 tStringObj * strValue ); 00412 00413 // --------------------------------------------------------------------------------------------- 00423 00424 static bool ConvertToBool ( XMP_StringPtr strValue ); 00425 00426 // --------------------------------------------------------------------------------------------- 00435 00436 static bool ConvertToBool ( const tStringObj & strValue ); 00437 00438 // --------------------------------------------------------------------------------------------- 00444 00445 static long ConvertToInt ( XMP_StringPtr strValue ); 00446 00447 // --------------------------------------------------------------------------------------------- 00456 00457 static long ConvertToInt ( const tStringObj & strValue ); 00458 00459 // --------------------------------------------------------------------------------------------- 00465 00466 static long long ConvertToInt64 ( XMP_StringPtr strValue ); 00467 00468 // --------------------------------------------------------------------------------------------- 00477 00478 static long long ConvertToInt64 ( const tStringObj & strValue ); 00479 00480 // --------------------------------------------------------------------------------------------- 00486 00487 static double ConvertToFloat ( XMP_StringPtr strValue ); 00488 00489 // --------------------------------------------------------------------------------------------- 00498 00499 static double ConvertToFloat ( const tStringObj & strValue ); 00500 00501 // --------------------------------------------------------------------------------------------- 00536 00537 static void ConvertToDate ( XMP_StringPtr strValue, 00538 XMP_DateTime * binValue ); 00539 00540 // --------------------------------------------------------------------------------------------- 00552 00553 static void ConvertToDate ( const tStringObj & strValue, 00554 XMP_DateTime * binValue ); 00555 00557 00558 // ============================================================================================= 00564 00565 // --------------------------------------------------------------------------------------------- 00573 00574 static void CurrentDateTime ( XMP_DateTime * time ); 00575 00576 // --------------------------------------------------------------------------------------------- 00582 00583 static void SetTimeZone ( XMP_DateTime * time ); 00584 00585 // --------------------------------------------------------------------------------------------- 00592 00593 static void ConvertToUTCTime ( XMP_DateTime * time ); 00594 00595 // --------------------------------------------------------------------------------------------- 00603 00604 static void ConvertToLocalTime ( XMP_DateTime * time ); 00605 00606 // --------------------------------------------------------------------------------------------- 00619 00620 static int CompareDateTime ( const XMP_DateTime & left, 00621 const XMP_DateTime & right ); 00622 00624 00625 // ============================================================================================= 00630 00631 // --------------------------------------------------------------------------------------------- 00639 00640 static void EncodeToBase64 ( XMP_StringPtr rawStr, 00641 XMP_StringLen rawLen, 00642 tStringObj * encodedStr ); 00643 00644 // --------------------------------------------------------------------------------------------- 00653 00654 static void EncodeToBase64 ( const tStringObj & rawStr, 00655 tStringObj * encodedStr ); 00656 00657 // --------------------------------------------------------------------------------------------- 00665 00666 static void DecodeFromBase64 ( XMP_StringPtr encodedStr, 00667 XMP_StringLen encodedLen, 00668 tStringObj * rawStr ); 00669 00670 // --------------------------------------------------------------------------------------------- 00679 00680 static void DecodeFromBase64 ( const tStringObj & encodedStr, 00681 tStringObj * rawStr ); 00682 00684 00685 // ============================================================================================= 00686 // ============================================================================================= 00694 00695 // --------------------------------------------------------------------------------------------- 00714 00715 static void PackageForJPEG ( const TXMPMeta<tStringObj> & xmpObj, 00716 tStringObj * standardXMP, 00717 tStringObj * extendedXMP, 00718 tStringObj * extendedDigest ); 00719 00720 // --------------------------------------------------------------------------------------------- 00734 00735 static void MergeFromJPEG ( TXMPMeta<tStringObj> * fullXMP, 00736 const TXMPMeta<tStringObj> & extendedXMP ); 00737 00739 00740 // ============================================================================================= 00747 00748 // --------------------------------------------------------------------------------------------- 00772 00773 static void CatenateArrayItems ( const TXMPMeta<tStringObj> & xmpObj, 00774 XMP_StringPtr schemaNS, 00775 XMP_StringPtr arrayName, 00776 XMP_StringPtr separator, 00777 XMP_StringPtr quotes, 00778 XMP_OptionBits options, 00779 tStringObj * catedStr ); 00780 00781 // --------------------------------------------------------------------------------------------- 00799 00800 static void SeparateArrayItems ( TXMPMeta<tStringObj> * xmpObj, 00801 XMP_StringPtr schemaNS, 00802 XMP_StringPtr arrayName, 00803 XMP_OptionBits options, 00804 XMP_StringPtr catedStr ); 00805 00806 // --------------------------------------------------------------------------------------------- 00812 00813 static void SeparateArrayItems ( TXMPMeta<tStringObj> * xmpObj, 00814 XMP_StringPtr schemaNS, 00815 XMP_StringPtr arrayName, 00816 XMP_OptionBits options, 00817 const tStringObj & catedStr ); 00818 00868 00883 00884 static void ApplyTemplate ( TXMPMeta<tStringObj> * workingXMP, 00885 const TXMPMeta<tStringObj> & templateXMP, 00886 XMP_OptionBits actions ); 00887 00888 // --------------------------------------------------------------------------------------------- 00919 00920 static void RemoveProperties ( TXMPMeta<tStringObj> * xmpObj, 00921 XMP_StringPtr schemaNS = 0, 00922 XMP_StringPtr propName = 0, 00923 XMP_OptionBits options = 0 ); 00924 00925 // --------------------------------------------------------------------------------------------- 00946 00947 static void DuplicateSubtree ( const TXMPMeta<tStringObj> & source, 00948 TXMPMeta<tStringObj> * dest, 00949 XMP_StringPtr sourceNS, 00950 XMP_StringPtr sourceRoot, 00951 XMP_StringPtr destNS = 0, 00952 XMP_StringPtr destRoot = 0, 00953 XMP_OptionBits options = 0 ); 00954 00956 00957 // ============================================================================================= 00958 00959 private: 00960 00961 static void SetClientString ( void * clientPtr, XMP_StringPtr valuePtr, XMP_StringLen valueLen ); 00962 00963 }; // class TXMPUtils 00964 00965 // ================================================================================================= 00966 00967 #endif // __TXMPUtils_hpp__