summaryrefslogtreecommitdiff
path: root/gpr/source/lib/xmp_core/XMPMeta.hpp
diff options
context:
space:
mode:
authorluxagraf <sng@luxagraf.net>2023-06-15 15:58:59 -0500
committerluxagraf <sng@luxagraf.net>2023-06-15 15:58:59 -0500
commitab987e10f154f5536bb8fd936ae0966e909fa969 (patch)
tree9de5076f38b71ececb1bc94f8d9d19170898d603 /gpr/source/lib/xmp_core/XMPMeta.hpp
added all my scriptssynced/master
Diffstat (limited to 'gpr/source/lib/xmp_core/XMPMeta.hpp')
-rw-r--r--gpr/source/lib/xmp_core/XMPMeta.hpp428
1 files changed, 428 insertions, 0 deletions
diff --git a/gpr/source/lib/xmp_core/XMPMeta.hpp b/gpr/source/lib/xmp_core/XMPMeta.hpp
new file mode 100644
index 0000000..2542f79
--- /dev/null
+++ b/gpr/source/lib/xmp_core/XMPMeta.hpp
@@ -0,0 +1,428 @@
+#ifndef __XMPMeta_hpp__
+#define __XMPMeta_hpp__
+
+// =================================================================================================
+// Copyright 2003 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 "public/include/XMP_Environment.h"
+#include "public/include/XMP_Const.h"
+#include "XMPCore_Impl.hpp"
+#include "XMLParserAdapter.hpp"
+
+// -------------------------------------------------------------------------------------------------
+
+#ifndef DumpXMLParseTree
+ #define DumpXMLParseTree 0
+#endif
+
+extern XMP_VarString * xdefaultName; // Needed in XMPMeta-Parse.cpp, MoveExplicitAliases.
+
+class XMPIterator;
+class XMPUtils;
+
+// -------------------------------------------------------------------------------------------------
+
+class XMPMeta {
+public:
+
+ static void
+ GetVersionInfo ( XMP_VersionInfo * info );
+
+ static bool
+ Initialize();
+ static void
+ Terminate() RELEASE_NO_THROW;
+
+ // ---------------------------------------------------------------------------------------------
+
+ XMPMeta();
+
+ virtual ~XMPMeta() RELEASE_NO_THROW;
+
+ // ---------------------------------------------------------------------------------------------
+
+ static XMP_OptionBits
+ GetGlobalOptions();
+
+ static void
+ SetGlobalOptions ( XMP_OptionBits options );
+
+ // ---------------------------------------------------------------------------------------------
+
+ static XMP_Status
+ DumpNamespaces ( XMP_TextOutputProc outProc,
+ void * refCon );
+
+ // ---------------------------------------------------------------------------------------------
+
+ static bool
+ RegisterNamespace ( XMP_StringPtr namespaceURI,
+ XMP_StringPtr suggestedPrefix,
+ XMP_StringPtr * registeredPrefix,
+ XMP_StringLen * prefixSize );
+
+ static bool
+ GetNamespacePrefix ( XMP_StringPtr namespaceURI,
+ XMP_StringPtr * namespacePrefix,
+ XMP_StringLen * prefixSize );
+
+ static bool
+ GetNamespaceURI ( XMP_StringPtr namespacePrefix,
+ XMP_StringPtr * namespaceURI,
+ XMP_StringLen * uriSize );
+
+ static void
+ DeleteNamespace ( XMP_StringPtr namespaceURI );
+
+ // ---------------------------------------------------------------------------------------------
+
+ bool
+ GetProperty ( XMP_StringPtr schemaNS,
+ XMP_StringPtr propName,
+ XMP_StringPtr * propValue,
+ XMP_StringLen * valueSize,
+ XMP_OptionBits * options ) const;
+
+ bool
+ GetArrayItem ( XMP_StringPtr schemaNS,
+ XMP_StringPtr arrayName,
+ XMP_Index itemIndex,
+ XMP_StringPtr * itemValue,
+ XMP_StringLen * valueSize,
+ XMP_OptionBits * options ) const;
+
+ bool
+ GetStructField ( XMP_StringPtr schemaNS,
+ XMP_StringPtr structName,
+ XMP_StringPtr fieldNS,
+ XMP_StringPtr fieldName,
+ XMP_StringPtr * fieldValue,
+ XMP_StringLen * valueSize,
+ XMP_OptionBits * options ) const;
+
+ bool
+ GetQualifier ( XMP_StringPtr schemaNS,
+ XMP_StringPtr propName,
+ XMP_StringPtr qualNS,
+ XMP_StringPtr qualName,
+ XMP_StringPtr * qualValue,
+ XMP_StringLen * valueSize,
+ XMP_OptionBits * options ) const;
+
+ // ---------------------------------------------------------------------------------------------
+
+ void
+ SetProperty ( XMP_StringPtr schemaNS,
+ XMP_StringPtr propName,
+ XMP_StringPtr propValue,
+ XMP_OptionBits options );
+
+ void
+ SetArrayItem ( XMP_StringPtr schemaNS,
+ XMP_StringPtr arrayName,
+ XMP_Index itemIndex,
+ XMP_StringPtr itemValue,
+ XMP_OptionBits options );
+
+ void
+ AppendArrayItem ( XMP_StringPtr schemaNS,
+ XMP_StringPtr arrayName,
+ XMP_OptionBits arrayOptions,
+ XMP_StringPtr itemValue,
+ XMP_OptionBits options );
+
+ void
+ SetStructField ( XMP_StringPtr schemaNS,
+ XMP_StringPtr structName,
+ XMP_StringPtr fieldNS,
+ XMP_StringPtr fieldName,
+ XMP_StringPtr fieldValue,
+ XMP_OptionBits options );
+
+ void
+ SetQualifier ( XMP_StringPtr schemaNS,
+ XMP_StringPtr propName,
+ XMP_StringPtr qualNS,
+ XMP_StringPtr qualName,
+ XMP_StringPtr qualValue,
+ XMP_OptionBits options );
+
+ // ---------------------------------------------------------------------------------------------
+
+ void
+ DeleteProperty ( XMP_StringPtr schemaNS,
+ XMP_StringPtr propName );
+
+ void
+ DeleteArrayItem ( XMP_StringPtr schemaNS,
+ XMP_StringPtr arrayName,
+ XMP_Index itemIndex );
+
+ void
+ DeleteStructField ( XMP_StringPtr schemaNS,
+ XMP_StringPtr structName,
+ XMP_StringPtr fieldNS,
+ XMP_StringPtr fieldName );
+
+ void
+ DeleteQualifier ( XMP_StringPtr schemaNS,
+ XMP_StringPtr propName,
+ XMP_StringPtr qualNS,
+ XMP_StringPtr qualName );
+
+ // ---------------------------------------------------------------------------------------------
+
+ bool
+ DoesPropertyExist ( XMP_StringPtr schemaNS,
+ XMP_StringPtr propName ) const;
+
+ bool
+ DoesArrayItemExist ( XMP_StringPtr schemaNS,
+ XMP_StringPtr arrayName,
+ XMP_Index itemIndex ) const;
+
+ bool
+ DoesStructFieldExist ( XMP_StringPtr schemaNS,
+ XMP_StringPtr structName,
+ XMP_StringPtr fieldNS,
+ XMP_StringPtr fieldName ) const;
+
+ bool
+ DoesQualifierExist ( XMP_StringPtr schemaNS,
+ XMP_StringPtr propName,
+ XMP_StringPtr qualNS,
+ XMP_StringPtr qualName ) const;
+
+ // ---------------------------------------------------------------------------------------------
+
+ bool
+ GetLocalizedText ( XMP_StringPtr schemaNS,
+ XMP_StringPtr altTextName,
+ XMP_StringPtr genericLang,
+ XMP_StringPtr specificLang,
+ XMP_StringPtr * actualLang,
+ XMP_StringLen * langSize,
+ XMP_StringPtr * itemValue,
+ XMP_StringLen * valueSize,
+ XMP_OptionBits * options ) const;
+
+ void
+ SetLocalizedText ( XMP_StringPtr schemaNS,
+ XMP_StringPtr altTextName,
+ XMP_StringPtr genericLang,
+ XMP_StringPtr specificLang,
+ XMP_StringPtr itemValue,
+ XMP_OptionBits options );
+
+ void
+ DeleteLocalizedText ( XMP_StringPtr schemaNS,
+ XMP_StringPtr altTextName,
+ XMP_StringPtr genericLang,
+ XMP_StringPtr specificLang);
+
+ // ---------------------------------------------------------------------------------------------
+
+ bool
+ GetProperty_Bool ( XMP_StringPtr schemaNS,
+ XMP_StringPtr propName,
+ bool * propValue,
+ XMP_OptionBits * options ) const;
+
+ bool
+ GetProperty_Int ( XMP_StringPtr schemaNS,
+ XMP_StringPtr propName,
+ XMP_Int32 * propValue,
+ XMP_OptionBits * options ) const;
+
+ bool
+ GetProperty_Int64 ( XMP_StringPtr schemaNS,
+ XMP_StringPtr propName,
+ XMP_Int64 * propValue,
+ XMP_OptionBits * options ) const;
+
+ bool
+ GetProperty_Float ( XMP_StringPtr schemaNS,
+ XMP_StringPtr propName,
+ double * propValue,
+ XMP_OptionBits * options ) const;
+
+ bool
+ GetProperty_Date ( XMP_StringPtr schemaNS,
+ XMP_StringPtr propName,
+ XMP_DateTime * propValue,
+ XMP_OptionBits * options ) const;
+
+ // ---------------------------------------------------------------------------------------------
+
+ void
+ SetProperty_Bool ( XMP_StringPtr schemaNS,
+ XMP_StringPtr propName,
+ bool propValue,
+ XMP_OptionBits options );
+
+ void
+ SetProperty_Int ( XMP_StringPtr schemaNS,
+ XMP_StringPtr propName,
+ XMP_Int32 propValue,
+ XMP_OptionBits options );
+
+ void
+ SetProperty_Int64 ( XMP_StringPtr schemaNS,
+ XMP_StringPtr propName,
+ XMP_Int64 propValue,
+ XMP_OptionBits options );
+
+ void
+ SetProperty_Float ( XMP_StringPtr schemaNS,
+ XMP_StringPtr propName,
+ double propValue,
+ XMP_OptionBits options );
+
+ void
+ SetProperty_Date ( XMP_StringPtr schemaNS,
+ XMP_StringPtr propName,
+ const XMP_DateTime & propValue,
+ XMP_OptionBits options );
+
+ // ---------------------------------------------------------------------------------------------
+
+ void
+ GetObjectName ( XMP_StringPtr * namePtr,
+ XMP_StringLen * nameLen ) const;
+
+ void
+ SetObjectName ( XMP_StringPtr name );
+
+ XMP_OptionBits
+ GetObjectOptions() const;
+
+ void
+ SetObjectOptions ( XMP_OptionBits options );
+
+ void
+ Sort();
+
+ void
+ Erase();
+
+ void
+ Clone ( XMPMeta * clone, XMP_OptionBits options ) const;
+
+ XMP_Index
+ CountArrayItems ( XMP_StringPtr schemaNS,
+ XMP_StringPtr arrayName ) const;
+
+ void
+ DumpObject ( XMP_TextOutputProc outProc,
+ void * refCon ) const;
+
+ // ---------------------------------------------------------------------------------------------
+
+ void
+ ParseFromBuffer ( XMP_StringPtr buffer,
+ XMP_StringLen bufferSize,
+ XMP_OptionBits options );
+
+ void
+ SerializeToBuffer ( XMP_VarString * rdfString,
+ XMP_OptionBits options,
+ XMP_StringLen padding,
+ XMP_StringPtr newline,
+ XMP_StringPtr indent,
+ XMP_Index baseIndent ) const;
+
+ // ---------------------------------------------------------------------------------------------
+
+ static void
+ SetDefaultErrorCallback ( XMPMeta_ErrorCallbackWrapper wrapperProc,
+ XMPMeta_ErrorCallbackProc clientProc,
+ void * context,
+ XMP_Uns32 limit );
+
+ void
+ SetErrorCallback ( XMPMeta_ErrorCallbackWrapper wrapperProc,
+ XMPMeta_ErrorCallbackProc clientProc,
+ void * context,
+ XMP_Uns32 limit );
+
+ void
+ ResetErrorCallbackLimit ( XMP_Uns32 limit );
+
+ class ErrorCallbackInfo : public GenericErrorCallback {
+ public:
+
+ XMPMeta_ErrorCallbackWrapper wrapperProc;
+ XMPMeta_ErrorCallbackProc clientProc;
+ void * context;
+
+ ErrorCallbackInfo() : wrapperProc(0), clientProc(0), context(0) {};
+
+ void Clear() { this->wrapperProc = 0; this->clientProc = 0; this->context = 0;
+ GenericErrorCallback::Clear(); };
+
+ bool CanNotify() const;
+ bool ClientCallbackWrapper ( XMP_StringPtr filePath, XMP_ErrorSeverity severity, XMP_Int32 cause, XMP_StringPtr messsage ) const;
+ };
+
+ // =============================================================================================
+
+ // ---------------------------------------------------------------------------------------------
+ // - Everything is built out of standard nodes. Each node has a name, value, option flags, a
+ // vector of child nodes, and a vector of qualifier nodes.
+ //
+ // - The option flags are those passed to SetProperty and returned from GetProperty. They tell
+ // if the node is simple, a struct or an array; whether it has qualifiers, etc.
+ //
+ // - The name of the node is an XML qualified name, of the form "prefix:simple-name". Since we
+ // force all namespaces to be known and to have unique prefixes, this is semantically equivalent
+ // to using a URI and simple name pair.
+ //
+ // - Although the value part is only for leaf properties and the children part is only for
+ // structs and arrays, it is easier to simply have them in every node. This keeps things visible
+ // so that debugging is easier
+ //
+ // - The top level node children are the namespaces that contain properties, the next level are
+ // the top level properties, lower levels are the fields of structs or items of arrays. The name
+ // of the top level nodes is just the namespace prefix, with the colon terminator. The name of
+ // top level properties includes the namespace prefix.
+ //
+ // - Any property node, at any level, can have qualifiers. These are themselves general property
+ // nodes. And could in fact themselves have qualifiers!
+
+ // ! Expose the implementation so that file static functions can see the data.
+
+ XMP_Int32 clientRefs; // ! Must be signed to allow decrement from 0.
+ XMP_ReadWriteLock lock;
+
+ // ! Any data member changes must be propagted to the Clone function!
+
+ XMP_Node tree;
+ XMLParserAdapter * xmlParser;
+ ErrorCallbackInfo errorCallback;
+
+ friend class XMPIterator;
+ friend class XMPUtils;
+
+private:
+
+ // ! These are hidden on purpose:
+ XMPMeta ( const XMPMeta & /* original */ ) : tree(XMP_Node(0,"",0)), clientRefs(0), xmlParser(0)
+ { XMP_Throw ( "Call to hidden constructor", kXMPErr_InternalFailure ); };
+ void operator= ( const XMPMeta & /* rhs */ )
+ { XMP_Throw ( "Call to hidden operator=", kXMPErr_InternalFailure ); };
+
+ // Special support routines for parsing, here to be able to access the errorCallback.
+ void ProcessXMLTree ( XMP_OptionBits options );
+ bool ProcessXMLBuffer ( XMP_StringPtr buffer, XMP_StringLen xmpSize, bool lastClientCall );
+ void ProcessRDF ( const XML_Node & xmlTree, XMP_OptionBits options );
+
+}; // class XMPMeta
+
+// =================================================================================================
+
+#endif // __XMPMeta_hpp__