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-2007 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 // ================================================================================================ 00041 // ================================================================================================ 00042 00043 template <class tStringObj> 00044 class TXMPUtils { 00045 00046 public: 00047 00048 // ============================================================================================= 00049 // No constructors or destructor declared or needed 00050 // ================================================ 00051 00052 // ============================================================================================= 00053 // ============================================================================================= 00054 00055 // ============================================================================================ 00087 00088 // -------------------------------------------------------------------------------------------- 00103 00104 static void 00105 ComposeArrayItemPath ( XMP_StringPtr schemaNS, 00106 XMP_StringPtr arrayName, 00107 XMP_Index itemIndex, 00108 tStringObj * fullPath ); 00109 00110 // -------------------------------------------------------------------------------------------- 00126 00127 static void 00128 ComposeStructFieldPath ( XMP_StringPtr schemaNS, 00129 XMP_StringPtr structName, 00130 XMP_StringPtr fieldNS, 00131 XMP_StringPtr fieldName, 00132 tStringObj * fullPath ); 00133 00134 // -------------------------------------------------------------------------------------------- 00152 00153 static void 00154 ComposeQualifierPath ( XMP_StringPtr schemaNS, 00155 XMP_StringPtr propName, 00156 XMP_StringPtr qualNS, 00157 XMP_StringPtr qualName, 00158 tStringObj * fullPath ); 00159 00160 // -------------------------------------------------------------------------------------------- 00184 00185 static void 00186 ComposeLangSelector ( XMP_StringPtr schemaNS, 00187 XMP_StringPtr arrayName, 00188 XMP_StringPtr langName, 00189 tStringObj * fullPath ); 00190 00191 // -------------------------------------------------------------------------------------------- 00194 00195 static void 00196 ComposeLangSelector ( XMP_StringPtr schemaNS, 00197 XMP_StringPtr arrayName, 00198 const tStringObj & langName, 00199 tStringObj * fullPath ); 00200 00201 // -------------------------------------------------------------------------------------------- 00235 00236 static void 00237 ComposeFieldSelector ( XMP_StringPtr schemaNS, 00238 XMP_StringPtr arrayName, 00239 XMP_StringPtr fieldNS, 00240 XMP_StringPtr fieldName, 00241 XMP_StringPtr fieldValue, 00242 tStringObj * fullPath ); 00243 00244 // -------------------------------------------------------------------------------------------- 00247 00248 static void 00249 ComposeFieldSelector ( XMP_StringPtr schemaNS, 00250 XMP_StringPtr arrayName, 00251 XMP_StringPtr fieldNS, 00252 XMP_StringPtr fieldName, 00253 const tStringObj & fieldValue, 00254 tStringObj * fullPath ); 00255 00257 00258 // ============================================================================================= 00259 // ============================================================================================= 00260 00261 // ============================================================================================ 00264 00265 // -------------------------------------------------------------------------------------------- 00272 00273 static void 00274 ConvertFromBool ( bool binValue, 00275 tStringObj * strValue ); 00276 00277 // -------------------------------------------------------------------------------------------- 00285 00286 static void 00287 ConvertFromInt ( long binValue, 00288 XMP_StringPtr format, 00289 tStringObj * strValue ); 00290 00291 static void 00292 ConvertFromInt64 ( long long binValue, 00293 XMP_StringPtr format, 00294 tStringObj * strValue ); 00295 00296 // -------------------------------------------------------------------------------------------- 00304 00305 static void 00306 ConvertFromFloat ( double binValue, 00307 XMP_StringPtr format, 00308 tStringObj * strValue ); 00309 00310 // -------------------------------------------------------------------------------------------- 00339 00340 static void 00341 ConvertFromDate ( const XMP_DateTime & binValue, 00342 tStringObj * strValue ); 00343 00344 // -------------------------------------------------------------------------------------------- 00352 00353 static bool 00354 ConvertToBool ( XMP_StringPtr strValue ); 00355 00356 // -------------------------------------------------------------------------------------------- 00359 00360 static bool 00361 ConvertToBool ( const tStringObj & strValue ); 00362 00363 // -------------------------------------------------------------------------------------------- 00369 00370 static long 00371 ConvertToInt ( XMP_StringPtr strValue ); 00372 00373 // -------------------------------------------------------------------------------------------- 00376 00377 static long 00378 ConvertToInt ( const tStringObj & strValue ); 00379 00380 // -------------------------------------------------------------------------------------------- 00386 00387 static long long 00388 ConvertToInt64 ( XMP_StringPtr strValue ); 00389 00390 // -------------------------------------------------------------------------------------------- 00393 00394 static long long 00395 ConvertToInt64 ( const tStringObj & strValue ); 00396 00397 // -------------------------------------------------------------------------------------------- 00403 00404 static double 00405 ConvertToFloat ( XMP_StringPtr strValue ); 00406 00407 // -------------------------------------------------------------------------------------------- 00410 00411 static double 00412 ConvertToFloat ( const tStringObj & strValue ); 00413 00414 // -------------------------------------------------------------------------------------------- 00444 00445 static void 00446 ConvertToDate ( XMP_StringPtr strValue, 00447 XMP_DateTime * binValue ); 00448 00449 // -------------------------------------------------------------------------------------------- 00452 00453 static void 00454 ConvertToDate ( const tStringObj & strValue, 00455 XMP_DateTime * binValue ); 00456 00458 00459 // ============================================================================================= 00460 // ============================================================================================= 00461 00462 // ============================================================================================ 00465 00466 // -------------------------------------------------------------------------------------------- 00472 00473 static void 00474 CurrentDateTime ( XMP_DateTime * time ); 00475 00476 // -------------------------------------------------------------------------------------------- 00481 00482 static void 00483 SetTimeZone ( XMP_DateTime * time ); 00484 00485 // -------------------------------------------------------------------------------------------- 00490 00491 static void 00492 ConvertToUTCTime ( XMP_DateTime * time ); 00493 00494 // -------------------------------------------------------------------------------------------- 00499 00500 static void 00501 ConvertToLocalTime ( XMP_DateTime * time ); 00502 00503 // -------------------------------------------------------------------------------------------- 00514 00515 static int 00516 CompareDateTime ( const XMP_DateTime & left, 00517 const XMP_DateTime & right ); 00518 00520 00521 // ============================================================================================= 00522 // ============================================================================================= 00523 00524 // ============================================================================================ 00527 00528 // -------------------------------------------------------------------------------------------- 00536 00537 static void 00538 EncodeToBase64 ( XMP_StringPtr rawStr, 00539 XMP_StringLen rawLen, 00540 tStringObj * encodedStr ); 00541 00542 // -------------------------------------------------------------------------------------------- 00545 00546 static void 00547 EncodeToBase64 ( const tStringObj & rawStr, 00548 tStringObj * encodedStr ); 00549 00550 // -------------------------------------------------------------------------------------------- 00558 00559 static void 00560 DecodeFromBase64 ( XMP_StringPtr encodedStr, 00561 XMP_StringLen encodedLen, 00562 tStringObj * rawStr ); 00563 00564 // -------------------------------------------------------------------------------------------- 00567 00568 static void 00569 DecodeFromBase64 ( const tStringObj & encodedStr, 00570 tStringObj * rawStr ); 00571 00573 00574 // ============================================================================================= 00575 // ============================================================================================= 00576 00577 // ============================================================================================ 00582 00583 // -------------------------------------------------------------------------------------------- 00595 00596 static void 00597 PackageForJPEG ( const TXMPMeta<tStringObj> & xmpObj, 00598 tStringObj * standardXMP, 00599 tStringObj * extendedXMP, 00600 tStringObj * extendedDigest ); 00601 00602 // -------------------------------------------------------------------------------------------- 00608 00609 static void 00610 MergeFromJPEG ( TXMPMeta<tStringObj> * fullXMP, 00611 const TXMPMeta<tStringObj> & extendedXMP ); 00612 00614 00615 // ============================================================================================= 00616 // ============================================================================================= 00617 00618 // ============================================================================================ 00622 00623 // -------------------------------------------------------------------------------------------- 00644 00645 static void 00646 CatenateArrayItems ( const TXMPMeta<tStringObj> & xmpObj, 00647 XMP_StringPtr schemaNS, 00648 XMP_StringPtr arrayName, 00649 XMP_StringPtr separator, 00650 XMP_StringPtr quotes, 00651 XMP_OptionBits options, 00652 tStringObj * catedStr ); 00653 00654 // -------------------------------------------------------------------------------------------- 00669 00670 static void 00671 SeparateArrayItems ( TXMPMeta<tStringObj> * xmpObj, 00672 XMP_StringPtr schemaNS, 00673 XMP_StringPtr arrayName, 00674 XMP_OptionBits options, 00675 XMP_StringPtr catedStr ); 00676 00677 // -------------------------------------------------------------------------------------------- 00680 00681 static void 00682 SeparateArrayItems ( TXMPMeta<tStringObj> * xmpObj, 00683 XMP_StringPtr schemaNS, 00684 XMP_StringPtr arrayName, 00685 XMP_OptionBits options, 00686 const tStringObj & catedStr ); 00687 00688 // -------------------------------------------------------------------------------------------- 00719 00720 static void 00721 RemoveProperties ( TXMPMeta<tStringObj> * xmpObj, 00722 XMP_StringPtr schemaNS = 0, 00723 XMP_StringPtr propName = 0, 00724 XMP_OptionBits options = 0 ); 00725 00726 // -------------------------------------------------------------------------------------------- 00800 00801 static void 00802 AppendProperties ( const TXMPMeta<tStringObj> & source, 00803 TXMPMeta<tStringObj> * dest, 00804 XMP_OptionBits options = 0 ); 00805 00806 // -------------------------------------------------------------------------------------------- 00826 00827 static void 00828 DuplicateSubtree ( const TXMPMeta<tStringObj> & source, 00829 TXMPMeta<tStringObj> * dest, 00830 XMP_StringPtr sourceNS, 00831 XMP_StringPtr sourceRoot, 00832 XMP_StringPtr destNS = 0, 00833 XMP_StringPtr destRoot = 0, 00834 XMP_OptionBits options = 0 ); 00835 00836 00838 00839 // ============================================================================================= 00840 00841 }; // class TXMPUtils 00842 00843 // ================================================================================================= 00844 00845 #endif // __TXMPUtils_hpp__