summaryrefslogtreecommitdiff
path: root/source/XMPCore/XMPUtils.hpp
blob: e1c7e78d01d62021c43299b746f3a96848f85e08 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
#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__