xmp_toolkit_ruby 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. checksums.yaml +7 -0
  2. data/.idea/.gitignore +8 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +88 -0
  5. data/.ruby-gemset +1 -0
  6. data/.ruby-version +1 -0
  7. data/AGENTS.md +72 -0
  8. data/CHANGELOG.md +45 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +287 -0
  11. data/Rakefile +25 -0
  12. data/cliff.toml +138 -0
  13. data/docker/Dockerfile +87 -0
  14. data/docker/ProductConfig.cmake.patch +11 -0
  15. data/docker/ToolchainGCC.cmake.patch +11 -0
  16. data/exe/xmp_toolkit_ruby +8 -0
  17. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/LICENSE +31 -0
  18. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/build/XMP_BuildInfo.h +17 -0
  19. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/TXMPFiles.hpp +853 -0
  20. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/TXMPIterator.hpp +234 -0
  21. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/TXMPMeta.hpp +1753 -0
  22. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/TXMPUtils.hpp +967 -0
  23. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMP.hpp +98 -0
  24. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMP.incl_cpp +69 -0
  25. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/Interfaces/BaseInterfaces/IConfigurable.h +225 -0
  26. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/Interfaces/BaseInterfaces/ISharedObject.h +71 -0
  27. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/Interfaces/BaseInterfaces/IThreadSafe.h +76 -0
  28. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/Interfaces/BaseInterfaces/IVersionable.h +71 -0
  29. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/Interfaces/IConfigurationManager.h +167 -0
  30. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/Interfaces/IError.h +377 -0
  31. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/Interfaces/IErrorNotifier.h +52 -0
  32. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/Interfaces/IMemoryAllocator.h +65 -0
  33. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/Interfaces/IObjectFactory.h +90 -0
  34. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/Interfaces/IUTF8String.h +504 -0
  35. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/Utilities/TWrapperFunctions.h +252 -0
  36. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/Utilities/TWrapperFunctions2.h +564 -0
  37. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/XMPCommonDefines.h +194 -0
  38. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/XMPCommonErrorCodes.h +114 -0
  39. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/XMPCommonFwdDeclarations.h +158 -0
  40. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/XMPCommonLatestInterfaceVersions.h +51 -0
  41. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/source/IConfigurable.cpp +204 -0
  42. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/source/IConfigurationManager.cpp +92 -0
  43. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/source/IError.cpp +207 -0
  44. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/source/IErrorNotifier.cpp +26 -0
  45. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCommon/source/IUTF8String.cpp +299 -0
  46. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/Interfaces/IArrayNode.h +303 -0
  47. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/Interfaces/IClientDOMParser.h +88 -0
  48. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/Interfaces/IClientDOMSerializer.h +94 -0
  49. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/Interfaces/ICompositeNode.h +331 -0
  50. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/Interfaces/ICoreConfigurationManager.h +107 -0
  51. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/Interfaces/ICoreObjectFactory.h +279 -0
  52. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/Interfaces/IDOMImplementationRegistry.h +150 -0
  53. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/Interfaces/IDOMParser.h +181 -0
  54. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/Interfaces/IDOMSerializer.h +120 -0
  55. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/Interfaces/IMetadata.h +145 -0
  56. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/Interfaces/IMetadataConverterUtils.h +116 -0
  57. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/Interfaces/INameSpacePrefixMap.h +236 -0
  58. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/Interfaces/INode.h +582 -0
  59. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/Interfaces/INodeIterator.h +193 -0
  60. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/Interfaces/IPath.h +212 -0
  61. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/Interfaces/IPathSegment.h +225 -0
  62. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/Interfaces/ISimpleNode.h +150 -0
  63. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/Interfaces/IStructureNode.h +306 -0
  64. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/XMPCoreDefines.h +94 -0
  65. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/XMPCoreErrorCodes.h +116 -0
  66. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/XMPCoreFwdDeclarations.h +325 -0
  67. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/XMPCoreLatestInterfaceVersions.h +97 -0
  68. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/source/IArrayNode.cpp +163 -0
  69. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/source/IClientDOMParser.cpp +76 -0
  70. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/source/IClientDOMSerializer.cpp +73 -0
  71. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/source/ICompositeNode.cpp +121 -0
  72. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/source/ICoreConfigurationManager.cpp +88 -0
  73. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/source/ICoreObjectFactory.cpp +83 -0
  74. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/source/IDOMImplementationRegistry.cpp +122 -0
  75. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/source/IDOMParser.cpp +116 -0
  76. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/source/IDOMSerializer.cpp +109 -0
  77. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/source/IMetadata.cpp +113 -0
  78. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/source/IMetadataConverterUtils.cpp +92 -0
  79. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/source/INameSpacePrefixMap.cpp +187 -0
  80. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/source/INode.cpp +377 -0
  81. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/source/INodeIterator.cpp +105 -0
  82. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/source/IPath.cpp +157 -0
  83. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/source/IPathSegment.cpp +146 -0
  84. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/source/ISimpleNode.cpp +111 -0
  85. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMPCore/source/IStructureNode.cpp +104 -0
  86. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMP_Const.h +1590 -0
  87. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMP_Environment.h +223 -0
  88. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMP_IO.hpp +169 -0
  89. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/XMP_Version.h +52 -0
  90. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/client-glue/TXMPFiles.incl_cpp +484 -0
  91. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/client-glue/TXMPIterator.incl_cpp +223 -0
  92. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/client-glue/TXMPMeta.incl_cpp +917 -0
  93. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/client-glue/TXMPUtils.incl_cpp +445 -0
  94. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/client-glue/WXMPFiles.hpp +281 -0
  95. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/client-glue/WXMPIterator.hpp +74 -0
  96. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/client-glue/WXMPMeta.hpp +635 -0
  97. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/client-glue/WXMPUtils.hpp +314 -0
  98. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/include/client-glue/WXMP_Common.hpp +132 -0
  99. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/libraries/i80386linux_x64/debug/libXMPCore.so +0 -0
  100. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/libraries/i80386linux_x64/debug/libXMPCoreStatic.a +0 -0
  101. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/libraries/i80386linux_x64/debug/libXMPFiles.so +0 -0
  102. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/libraries/i80386linux_x64/debug/libXMPFilesStatic.a +0 -0
  103. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/libraries/macintosh/universal/Debug/libXMPCoreStatic.a +0 -0
  104. data/ext/xmp_toolkit_ruby/XMP-Toolkit-SDK/public/libraries/macintosh/universal/Debug/libXMPFilesStatic.a +0 -0
  105. data/ext/xmp_toolkit_ruby/extconf.rb +101 -0
  106. data/ext/xmp_toolkit_ruby/xmp_toolkit.cpp +321 -0
  107. data/ext/xmp_toolkit_ruby/xmp_toolkit.hpp +69 -0
  108. data/ext/xmp_toolkit_ruby/xmp_toolkit_ruby.cpp +44 -0
  109. data/lib/xmp_toolkit_ruby/cli.rb +95 -0
  110. data/lib/xmp_toolkit_ruby/namespaces.rb +77 -0
  111. data/lib/xmp_toolkit_ruby/plugins/LICENSE +31 -0
  112. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/i80386linux/i80386linux/PDF_Handler.resources/MODULE_IDENTIFIER.txt +1 -0
  113. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/i80386linux/i80386linux/PDF_Handler.resources/XMPPLUGINUIDS.txt +31 -0
  114. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/i80386linux/i80386linux/PDF_Handler.xpi +0 -0
  115. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/i80386linux/i80386linux/libMiniPDFL.so +0 -0
  116. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/i80386linux/i80386linux_x64/PDF_Handler.resources/MODULE_IDENTIFIER.txt +1 -0
  117. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/i80386linux/i80386linux_x64/PDF_Handler.resources/XMPPLUGINUIDS.txt +31 -0
  118. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/i80386linux/i80386linux_x64/PDF_Handler.xpi +0 -0
  119. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/i80386linux/i80386linux_x64/libMiniPDFL.so +0 -0
  120. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/PDF_Handler +0 -0
  121. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Resources/Info.plist +52 -0
  122. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Resources/MODULE_IDENTIFIER.txt +1 -0
  123. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Resources/MiniPDFL.framework/MiniPDFL +0 -0
  124. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Resources/MiniPDFL.framework/Resources/English.lproj/InfoPlist.strings +0 -0
  125. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Resources/MiniPDFL.framework/Resources/Info.plist +35 -0
  126. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Resources/MiniPDFL.framework/Versions/A/MiniPDFL +0 -0
  127. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Resources/MiniPDFL.framework/Versions/A/Resources/English.lproj/InfoPlist.strings +0 -0
  128. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Resources/MiniPDFL.framework/Versions/A/Resources/Info.plist +35 -0
  129. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Resources/MiniPDFL.framework/Versions/A/_CodeSignature/CodeResources +146 -0
  130. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Resources/MiniPDFL.framework/Versions/Current/MiniPDFL +0 -0
  131. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Resources/MiniPDFL.framework/Versions/Current/Resources/English.lproj/InfoPlist.strings +0 -0
  132. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Resources/MiniPDFL.framework/Versions/Current/Resources/Info.plist +35 -0
  133. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Resources/MiniPDFL.framework/Versions/Current/_CodeSignature/CodeResources +146 -0
  134. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Resources/XMPPLUGINUIDS.txt +31 -0
  135. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/A/PDF_Handler +0 -0
  136. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/A/Resources/Info.plist +52 -0
  137. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/A/Resources/MODULE_IDENTIFIER.txt +1 -0
  138. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/A/Resources/MiniPDFL.framework/MiniPDFL +0 -0
  139. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/A/Resources/MiniPDFL.framework/Resources/English.lproj/InfoPlist.strings +0 -0
  140. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/A/Resources/MiniPDFL.framework/Resources/Info.plist +35 -0
  141. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/A/Resources/MiniPDFL.framework/Versions/A/MiniPDFL +0 -0
  142. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/A/Resources/MiniPDFL.framework/Versions/A/Resources/English.lproj/InfoPlist.strings +0 -0
  143. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/A/Resources/MiniPDFL.framework/Versions/A/Resources/Info.plist +35 -0
  144. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/A/Resources/MiniPDFL.framework/Versions/A/_CodeSignature/CodeResources +146 -0
  145. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/A/Resources/MiniPDFL.framework/Versions/Current/MiniPDFL +0 -0
  146. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/A/Resources/MiniPDFL.framework/Versions/Current/Resources/English.lproj/InfoPlist.strings +0 -0
  147. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/A/Resources/MiniPDFL.framework/Versions/Current/Resources/Info.plist +35 -0
  148. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/A/Resources/MiniPDFL.framework/Versions/Current/_CodeSignature/CodeResources +146 -0
  149. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/A/Resources/XMPPLUGINUIDS.txt +31 -0
  150. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/A/_CodeSignature/CodeResources +216 -0
  151. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/Current/PDF_Handler +0 -0
  152. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/Current/Resources/Info.plist +52 -0
  153. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/Current/Resources/MODULE_IDENTIFIER.txt +1 -0
  154. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/Current/Resources/MiniPDFL.framework/MiniPDFL +0 -0
  155. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/Current/Resources/MiniPDFL.framework/Resources/English.lproj/InfoPlist.strings +0 -0
  156. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/Current/Resources/MiniPDFL.framework/Resources/Info.plist +35 -0
  157. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/Current/Resources/MiniPDFL.framework/Versions/A/MiniPDFL +0 -0
  158. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/Current/Resources/MiniPDFL.framework/Versions/A/Resources/English.lproj/InfoPlist.strings +0 -0
  159. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/Current/Resources/MiniPDFL.framework/Versions/A/Resources/Info.plist +35 -0
  160. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/Current/Resources/MiniPDFL.framework/Versions/A/_CodeSignature/CodeResources +146 -0
  161. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/Current/Resources/MiniPDFL.framework/Versions/Current/MiniPDFL +0 -0
  162. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/Current/Resources/MiniPDFL.framework/Versions/Current/Resources/English.lproj/InfoPlist.strings +0 -0
  163. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/Current/Resources/MiniPDFL.framework/Versions/Current/Resources/Info.plist +35 -0
  164. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/Current/Resources/MiniPDFL.framework/Versions/Current/_CodeSignature/CodeResources +146 -0
  165. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/Current/Resources/XMPPLUGINUIDS.txt +31 -0
  166. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/macintosh/universal/PDF_Handler.xpi/Versions/Current/_CodeSignature/CodeResources +216 -0
  167. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/resource/linux/PDF_Handler.exp +11 -0
  168. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/resource/mac/PDF_Handler.exp +2 -0
  169. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/resource/mac/PDF_Handler.plist +28 -0
  170. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/resource/mac/PDF_HandlerPList.h +12 -0
  171. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/resource/win/CopyPDFL.bat +14 -0
  172. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/resource/win/PDF_Handler-32.rc +8 -0
  173. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/resource/win/PDF_Handler-64.rc +8 -0
  174. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/resource/win/PDF_Handler.def +9 -0
  175. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/windows/windows_x64/MiniPDFL.dll +0 -0
  176. data/lib/xmp_toolkit_ruby/plugins/PDF_Handler/windows/windows_x64/PDF_Handler.xpi +0 -0
  177. data/lib/xmp_toolkit_ruby/version.rb +5 -0
  178. data/lib/xmp_toolkit_ruby/xmp_file_format.rb +87 -0
  179. data/lib/xmp_toolkit_ruby/xmp_file_handler_flags.rb +49 -0
  180. data/lib/xmp_toolkit_ruby.rb +237 -0
  181. data/sig/xmp_toolkit_ruby.rbs +4 -0
  182. data/tasks/changelog.rake +29 -0
  183. metadata +357 -0
@@ -0,0 +1,1590 @@
1
+ #ifndef __XMP_Const_h__
2
+ #define __XMP_Const_h__ 1
3
+
4
+ // =================================================================================================
5
+ // Copyright 2002 Adobe
6
+ // All Rights Reserved.
7
+ //
8
+ // NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the terms
9
+ // of the Adobe license agreement accompanying it.
10
+ // =================================================================================================
11
+
12
+ #include "XMP_Environment.h"
13
+
14
+ #include <stddef.h>
15
+
16
+ #if XMP_MacBuild | XMP_iOSBuild // ! No stdint.h on Windows and some UNIXes.
17
+ #include <stdint.h>
18
+ #endif
19
+ //Android has both inttypes and stdint. But inttypes includes stdint plus other functions
20
+ #if XMP_UNIXBuild | XMP_AndroidBuild // hopefully an inttypes.h on all UNIXes...
21
+ #include <inttypes.h>
22
+ #endif
23
+
24
+ #ifndef XMP_MARKER_EXTENSIBILITY_BACKWARD_COMPATIBILITY
25
+ #define XMP_MARKER_EXTENSIBILITY_BACKWARD_COMPATIBILITY 1
26
+ #endif
27
+
28
+ #if XMP_iOSBuild
29
+ #define __AVAILABILITY_INTERNAL_DEPRECATED_XMP __AVAILABILITY_INTERNAL_DEPRECATED
30
+ #else
31
+ #define __AVAILABILITY_INTERNAL_DEPRECATED_XMP
32
+ #endif
33
+
34
+ #if __cplusplus
35
+ extern "C" {
36
+ #endif
37
+
38
+ // =================================================================================================
39
+ /// \file XMP_Const.h
40
+ /// \brief Common C/C++ types and constants for the XMP toolkit.
41
+ // =================================================================================================
42
+
43
+ // =================================================================================================
44
+ // Basic types and constants
45
+ // =========================
46
+
47
+ // The XMP_... types are used on the off chance that the ..._t types present a problem. In that
48
+ // case only the declarations of the XMP_... types needs to change, not all of the uses. These
49
+ // types are used where fixed sizes are required in order to have a known ABI for a DLL build.
50
+
51
+ #if XMP_MacBuild | XMP_iOSBuild
52
+
53
+ typedef int8_t XMP_Int8;
54
+ typedef int16_t XMP_Int16;
55
+ typedef int32_t XMP_Int32;
56
+ typedef int64_t XMP_Int64;
57
+
58
+ typedef uint8_t XMP_Uns8;
59
+ typedef uint16_t XMP_Uns16;
60
+ typedef uint32_t XMP_Uns32;
61
+ typedef uint64_t XMP_Uns64;
62
+
63
+ #elif XMP_WinBuild
64
+
65
+ typedef signed char XMP_Int8;
66
+ typedef signed short XMP_Int16;
67
+ typedef signed long XMP_Int32;
68
+ typedef signed long long XMP_Int64;
69
+
70
+ typedef unsigned char XMP_Uns8;
71
+ typedef unsigned short XMP_Uns16;
72
+ typedef unsigned long XMP_Uns32;
73
+ typedef unsigned long long XMP_Uns64;
74
+
75
+ #elif XMP_UNIXBuild | XMP_AndroidBuild
76
+
77
+ #if ! XMP_64
78
+
79
+ typedef signed char XMP_Int8;
80
+ typedef signed short XMP_Int16;
81
+ typedef signed long XMP_Int32;
82
+ typedef signed long long XMP_Int64;
83
+
84
+ typedef unsigned char XMP_Uns8;
85
+ typedef unsigned short XMP_Uns16;
86
+ typedef unsigned long XMP_Uns32;
87
+ typedef unsigned long long XMP_Uns64;
88
+
89
+ #else
90
+
91
+ typedef signed char XMP_Int8;
92
+ typedef signed short XMP_Int16;
93
+ typedef signed int XMP_Int32;
94
+ typedef signed long long XMP_Int64;
95
+
96
+ typedef unsigned char XMP_Uns8;
97
+ typedef unsigned short XMP_Uns16;
98
+ typedef unsigned int XMP_Uns32;
99
+ typedef unsigned long long XMP_Uns64;
100
+
101
+ #endif
102
+
103
+ #else
104
+
105
+ #error "XMP environment error - must define one of XMP_MacBuild, XMP_WinBuild, XMP_UNIXBuild, XMP_AndroidBuild or XMP_iOSBuild"
106
+
107
+ #endif
108
+
109
+ typedef XMP_Uns8 XMP_Bool;
110
+
111
+ const XMP_Uns8 kXMP_Bool_False = 0;
112
+
113
+ #define ConvertXMP_BoolToBool(a) (a) != kXMP_Bool_False
114
+ #define ConvertBoolToXMP_Bool(a) (a) ? !kXMP_Bool_False : kXMP_Bool_False
115
+
116
+ static const XMP_Uns8 Min_XMP_Uns8 = ( (XMP_Uns8) 0x00 );
117
+ static const XMP_Uns8 Max_XMP_Uns8 = ( (XMP_Uns8) 0xFF );
118
+ static const XMP_Uns16 Min_XMP_Uns16 = ( (XMP_Uns16) 0x00 );
119
+ static const XMP_Uns16 Max_XMP_Uns16 = ( (XMP_Uns16) 0xFFFF );
120
+ static const XMP_Uns32 Min_XMP_Uns32 = ( (XMP_Uns32) 0x00 );
121
+ static const XMP_Uns32 Max_XMP_Uns32 = ( (XMP_Uns32) 0xFFFFFFFF );
122
+ static const XMP_Uns64 Min_XMP_Uns64 = ( (XMP_Uns64) 0x00 );
123
+ static const XMP_Uns64 Max_XMP_Uns64 = ( (XMP_Uns64) 0xFFFFFFFFFFFFFFFFLL );
124
+
125
+ static const XMP_Int8 Min_XMP_Int8 = ( (XMP_Int8) 0x80 );
126
+ static const XMP_Int8 Max_XMP_Int8 = ( (XMP_Int8) 0x7F );
127
+ static const XMP_Int16 Min_XMP_Int16 = ( (XMP_Int16) 0x8000 );
128
+ static const XMP_Int16 Max_XMP_Int16 = ( (XMP_Int16) 0x7FFF );
129
+ static const XMP_Int32 Min_XMP_Int32 = ( (XMP_Int32) 0x80000000 );
130
+ static const XMP_Int32 Max_XMP_Int32 = ( (XMP_Int32) 0x7FFFFFFF );
131
+ static const XMP_Int64 Min_XMP_Int64 = ( (XMP_Int64) 0x8000000000000000LL );
132
+ static const XMP_Int64 Max_XMP_Int64 = ( (XMP_Int64) 0x7FFFFFFFFFFFFFFFLL );
133
+
134
+
135
+ /// @brief An "ABI safe" pointer to the internal part of an XMP object. Use to pass an XMP object across
136
+ /// client DLL boundaries. See \c TXMPMeta::GetInternalRef().
137
+ typedef struct __XMPMeta__ * XMPMetaRef;
138
+
139
+ /// @brief An "ABI safe" pointer to the internal part of an XMP iteration object. Use to pass an XMP
140
+ /// iteration object across client DLL boundaries. See \c TXMPIterator.
141
+ typedef struct __XMPIterator__ * XMPIteratorRef;
142
+
143
+ /// @brief An "ABI safe" pointer to the internal part of an XMP document operations object. Use to pass an
144
+ /// XMP document operations object across client DLL boundaries. See \c TXMPDocOps.
145
+ typedef struct __XMPDocOps__ * XMPDocOpsRef;
146
+
147
+ /// @brief An "ABI safe" pointer to the internal part of an XMP file-handling object. Use to pass an XMP
148
+ /// file-handling object across client DLL boundaries. See \c TXMPFiles.
149
+ typedef struct __XMPFiles__ * XMPFilesRef;
150
+
151
+ // =================================================================================================
152
+
153
+ /// \name General scalar types and constants
154
+ /// @{
155
+
156
+ /// \typedef XMP_StringPtr
157
+ /// \brief The type for input string parameters. A <tt>const char *</tt>, a null-terminated UTF-8
158
+ /// string.
159
+
160
+ /// \typedef XMP_StringLen
161
+ /// \brief The type for string length parameters. A 32-bit unsigned integer, as big as will be
162
+ /// practically needed.
163
+
164
+ /// \typedef XMP_Index
165
+ /// \brief The type for offsets and indices. A 32-bit signed integer. It is signed to allow -1 for
166
+ /// loop termination.
167
+
168
+ /// \typedef XMP_OptionBits
169
+ /// \brief The type for a collection of 32 flag bits.
170
+ /// @details Individual flags are defined as enum value bit
171
+ /// masks; see \c #kXMP_PropValueIsURI and following. A number of macros provide common set or set
172
+ /// operations, such as \c XMP_PropIsSimple. For other tests use an expression like <code>options &
173
+ /// kXMP_<theOption></code>. When passing multiple option flags use the bitwise-OR operator. '|',
174
+ /// not the arithmatic plus, '+'.
175
+
176
+ typedef const char * XMP_StringPtr; // Points to a null terminated UTF-8 string.
177
+ typedef XMP_Uns32 XMP_StringLen;
178
+ typedef XMP_Int32 XMP_Index; // Signed, sometimes -1 is handy.
179
+ typedef XMP_Uns32 XMP_OptionBits; // Used as 32 individual bits.
180
+
181
+ /// \def kXMP_TrueStr
182
+ /// \brief The canonical true string value for Booleans in serialized XMP.
183
+ ///
184
+ /// Code that converts from string to bool should be case insensitive, and also allow "1".
185
+
186
+ /// \def kXMP_FalseStr
187
+ /// \brief The canonical false string value for Booleans in serialized XMP.
188
+ ///
189
+ /// Code that converts from string to bool should be case insensitive, and also allow "0".
190
+
191
+ #define kXMP_TrueStr "True" // Serialized XMP spellings, not for the type bool.
192
+ #define kXMP_FalseStr "False"
193
+
194
+ ///@brief Type for yes/no/maybe answers. The values are picked to allow Boolean-like usage. The yes
195
+ ///values are true (non-zero), the no value is false (zero).
196
+ enum {
197
+ /// The part or parts have definitely changed.
198
+ kXMPTS_Yes = 1,
199
+ /// The part or parts have definitely not changed.
200
+ kXMPTS_No = 0,
201
+ /// The part or parts might, or might not, have changed.
202
+ kXMPTS_Maybe = -1
203
+ };
204
+ typedef XMP_Int8 XMP_TriState;
205
+
206
+ /// @}
207
+
208
+ // =================================================================================================
209
+
210
+ /// \struct XMP_DateTime
211
+ /// \brief The expanded type for a date and time.
212
+ ///
213
+ /// Dates and time in the serialized XMP are ISO 8601 strings. The \c XMP_DateTime struct allows
214
+ /// easy conversion with other formats.
215
+ ///
216
+ /// All of the fields are 32 bit, even though most could be 8 bit. This avoids overflow when doing
217
+ /// carries for arithmetic or normalization. All fields have signed values for the same reasons.
218
+ ///
219
+ /// Date-time values are occasionally used with only a date or only a time component. A date without
220
+ /// a time has zeros in the \c XMP_DateTime struct for all time fields. A time without a date has
221
+ /// zeros for all date fields (year, month, and day).
222
+ ///
223
+ /// \c TXMPUtils provides utility functions for manipulating date-time values.
224
+ ///
225
+ /// @see \c TXMPUtils::ConvertToDate(), \c TXMPUtils::ConvertFromDate(),
226
+ /// \c TXMPUtils::CompareDateTime(), \c TXMPUtils::ConvertToLocalTime(),
227
+ /// \c TXMPUtils::ConvertToUTCTime(), \c TXMPUtils::CurrentDateTime(),
228
+ /// \c TXMPUtils::SetTimeZone()
229
+
230
+ struct XMP_DateTime {
231
+
232
+ /// The year, can be negative.
233
+ XMP_Int32 year;
234
+
235
+ /// The month in the range 1..12.
236
+ XMP_Int32 month;
237
+
238
+ /// The day of the month in the range 1..31.
239
+ XMP_Int32 day;
240
+
241
+ /// The hour in the range 0..23.
242
+ XMP_Int32 hour;
243
+
244
+ /// The minute in the range 0..59.
245
+ XMP_Int32 minute;
246
+
247
+ /// The second in the range 0..59.
248
+ XMP_Int32 second;
249
+
250
+ /// Is the date portion meaningful?
251
+ XMP_Bool hasDate;
252
+
253
+ /// Is the time portion meaningful?
254
+ XMP_Bool hasTime;
255
+
256
+ /// Is the time zone meaningful?
257
+ XMP_Bool hasTimeZone;
258
+
259
+ /// The "sign" of the time zone, \c #kXMP_TimeIsUTC (0) means UTC, \c #kXMP_TimeWestOfUTC (-1)
260
+ /// is west, \c #kXMP_TimeEastOfUTC (+1) is east.
261
+ XMP_Int8 tzSign;
262
+
263
+ /// The time zone hour in the range 0..23.
264
+ XMP_Int32 tzHour;
265
+
266
+ /// The time zone minute in the range 0..59.
267
+ XMP_Int32 tzMinute;
268
+
269
+ /// Nanoseconds within a second, often left as zero.
270
+ XMP_Int32 nanoSecond;
271
+
272
+ #if __cplusplus
273
+ XMP_DateTime() : year(0), month(0), day(0), hour(0), minute(0), second(0),
274
+ hasDate(false),hasTime(false), hasTimeZone(false), tzSign(0), tzHour(0), tzMinute(0), nanoSecond(0){};
275
+ #endif
276
+
277
+ };
278
+
279
+ /// Constant values for \c XMP_DateTime::tzSign field.
280
+ enum {
281
+ /// Time zone is west of UTC.
282
+ kXMP_TimeWestOfUTC = -1,
283
+ /// UTC time.
284
+ kXMP_TimeIsUTC = 0,
285
+ /// Time zone is east of UTC.
286
+ kXMP_TimeEastOfUTC = +1
287
+ };
288
+
289
+ #define XMPDateTime_IsDateOnly(dt) ((dt).hasDate & (! (dt).hasTime))
290
+ #define XMPDateTime_IsTimeOnly(dt) ((dt).hasTime & (! (dt).hasDate))
291
+
292
+ #define XMPDateTime_ClearTimeZone(dt) { (dt).hasTimeZone = (dt).tzSign = (dt).tzHour = (dt).tzMinute = 0; }
293
+
294
+ // =================================================================================================
295
+ // Standard namespace URI constants
296
+ // ================================
297
+
298
+ /// \name XML namespace constants for standard XMP schema.
299
+ /// @{
300
+ ///
301
+ /// \def kXMP_NS_XMP
302
+ /// \brief The XML namespace for the XMP "basic" schema.
303
+ ///
304
+ /// \def kXMP_NS_XMP_Rights
305
+ /// \brief The XML namespace for the XMP copyright schema.
306
+ ///
307
+ /// \def kXMP_NS_XMP_MM
308
+ /// \brief The XML namespace for the XMP digital asset management schema.
309
+ ///
310
+ /// \def kXMP_NS_XMP_BJ
311
+ /// \brief The XML namespace for the job management schema.
312
+ ///
313
+ /// \def kXMP_NS_XMP_T
314
+ /// \brief The XML namespace for the XMP text document schema.
315
+ ///
316
+ /// \def kXMP_NS_XMP_T_PG
317
+ /// \brief The XML namespace for the XMP paged document schema.
318
+ ///
319
+ /// \def kXMP_NS_PDF
320
+ /// \brief The XML namespace for the PDF schema.
321
+ ///
322
+ /// \def kXMP_NS_Photoshop
323
+ /// \brief The XML namespace for the Photoshop custom schema.
324
+ ///
325
+ /// \def kXMP_NS_EXIF
326
+ /// \brief The XML namespace for Adobe's EXIF schema.
327
+ ///
328
+ /// \def kXMP_NS_TIFF
329
+ /// \brief The XML namespace for Adobe's TIFF schema.
330
+ ///
331
+ /// @}
332
+
333
+ #define kXMP_NS_XMP "http://ns.adobe.com/xap/1.0/"
334
+
335
+ #define kXMP_NS_XMP_Rights "http://ns.adobe.com/xap/1.0/rights/"
336
+ #define kXMP_NS_XMP_MM "http://ns.adobe.com/xap/1.0/mm/"
337
+ #define kXMP_NS_XMP_BJ "http://ns.adobe.com/xap/1.0/bj/"
338
+
339
+ #define kXMP_NS_PDF "http://ns.adobe.com/pdf/1.3/"
340
+ #define kXMP_NS_Photoshop "http://ns.adobe.com/photoshop/1.0/"
341
+ #define kXMP_NS_PSAlbum "http://ns.adobe.com/album/1.0/"
342
+ #define kXMP_NS_EXIF "http://ns.adobe.com/exif/1.0/"
343
+ #define kXMP_NS_EXIF_Aux "http://ns.adobe.com/exif/1.0/aux/"
344
+ #define kXMP_NS_TIFF "http://ns.adobe.com/tiff/1.0/"
345
+ #define kXMP_NS_PNG "http://ns.adobe.com/png/1.0/"
346
+ #define kXMP_NS_SWF "http://ns.adobe.com/swf/1.0/"
347
+ #define kXMP_NS_JPEG "http://ns.adobe.com/jpeg/1.0/"
348
+ #define kXMP_NS_JP2K "http://ns.adobe.com/jp2k/1.0/"
349
+ #define kXMP_NS_CameraRaw "http://ns.adobe.com/camera-raw-settings/1.0/"
350
+ #define kXMP_NS_DM "http://ns.adobe.com/xmp/1.0/DynamicMedia/"
351
+ #define kXMP_NS_Script "http://ns.adobe.com/xmp/1.0/Script/"
352
+ #define kXMP_NS_ASF "http://ns.adobe.com/asf/1.0/"
353
+ #define kXMP_NS_WAV "http://ns.adobe.com/xmp/wav/1.0/"
354
+ #define kXMP_NS_BWF "http://ns.adobe.com/bwf/bext/1.0/"
355
+ #define kXMP_NS_AEScart "http://ns.adobe.com/aes/cart/"
356
+ #define kXMP_NS_RIFFINFO "http://ns.adobe.com/riff/info/"
357
+ #define kXMP_NS_iXML "http://ns.adobe.com/ixml/1.0/"
358
+ #define kXMP_NS_XMP_Note "http://ns.adobe.com/xmp/note/"
359
+
360
+ #define kXMP_NS_AdobeStockPhoto "http://ns.adobe.com/StockPhoto/1.0/"
361
+ #define kXMP_NS_CreatorAtom "http://ns.adobe.com/creatorAtom/1.0/"
362
+
363
+ #define kXMP_NS_ExifEX "http://cipa.jp/exif/1.0/"
364
+
365
+ /// \name XML namespace constants for qualifiers and structured property fields.
366
+ /// @{
367
+ ///
368
+ /// \def kXMP_NS_XMP_IdentifierQual
369
+ /// \brief The XML namespace for qualifiers of the xmp:Identifier property.
370
+ ///
371
+ /// \def kXMP_NS_XMP_Dimensions
372
+ /// \brief The XML namespace for fields of the Dimensions type.
373
+ ///
374
+ /// \def kXMP_NS_XMP_Image
375
+ /// \brief The XML namespace for fields of a graphical image. Used for the Thumbnail type.
376
+ ///
377
+ /// \def kXMP_NS_XMP_ResourceEvent
378
+ /// \brief The XML namespace for fields of the ResourceEvent type.
379
+ ///
380
+ /// \def kXMP_NS_XMP_ResourceRef
381
+ /// \brief The XML namespace for fields of the ResourceRef type.
382
+ ///
383
+ /// \def kXMP_NS_XMP_ST_Version
384
+ /// \brief The XML namespace for fields of the Version type.
385
+ ///
386
+ /// \def kXMP_NS_XMP_ST_Job
387
+ /// \brief The XML namespace for fields of the JobRef type.
388
+ ///
389
+ /// @}
390
+
391
+ #define kXMP_NS_XMP_IdentifierQual "http://ns.adobe.com/xmp/Identifier/qual/1.0/"
392
+ #define kXMP_NS_XMP_Dimensions "http://ns.adobe.com/xap/1.0/sType/Dimensions#"
393
+ #define kXMP_NS_XMP_Text "http://ns.adobe.com/xap/1.0/t/"
394
+ #define kXMP_NS_XMP_PagedFile "http://ns.adobe.com/xap/1.0/t/pg/"
395
+ #define kXMP_NS_XMP_Graphics "http://ns.adobe.com/xap/1.0/g/"
396
+ #define kXMP_NS_XMP_Image "http://ns.adobe.com/xap/1.0/g/img/"
397
+ #define kXMP_NS_XMP_Font "http://ns.adobe.com/xap/1.0/sType/Font#"
398
+ #define kXMP_NS_XMP_ResourceEvent "http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
399
+ #define kXMP_NS_XMP_ResourceRef "http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
400
+ #define kXMP_NS_XMP_ST_Version "http://ns.adobe.com/xap/1.0/sType/Version#"
401
+ #define kXMP_NS_XMP_ST_Job "http://ns.adobe.com/xap/1.0/sType/Job#"
402
+ #define kXMP_NS_XMP_ManifestItem "http://ns.adobe.com/xap/1.0/sType/ManifestItem#"
403
+
404
+ // Deprecated XML namespace constants
405
+ #define kXMP_NS_XMP_T "http://ns.adobe.com/xap/1.0/t/"
406
+ #define kXMP_NS_XMP_T_PG "http://ns.adobe.com/xap/1.0/t/pg/"
407
+ #define kXMP_NS_XMP_G_IMG "http://ns.adobe.com/xap/1.0/g/img/"
408
+
409
+ /// \name XML namespace constants from outside Adobe.
410
+ /// @{
411
+ ///
412
+ /// \def kXMP_NS_DC
413
+ /// \brief The XML namespace for the Dublin Core schema.
414
+ ///
415
+ /// \def kXMP_NS_IPTCCore
416
+ /// \brief The XML namespace for the IPTC Core schema.
417
+ ///
418
+ /// \def kXMP_NS_IPTCExt
419
+ /// \brief The XML namespace for the IPTC Extension schema.
420
+ ///
421
+ /// \def kXMP_NS_RDF
422
+ /// \brief The XML namespace for RDF.
423
+ ///
424
+ /// \def kXMP_NS_XML
425
+ /// \brief The XML namespace for XML.
426
+ ///
427
+ /// @}
428
+
429
+ #define kXMP_NS_DC "http://purl.org/dc/elements/1.1/"
430
+
431
+ #define kXMP_NS_IPTCCore "http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/"
432
+ #define kXMP_NS_IPTCExt "http://iptc.org/std/Iptc4xmpExt/2008-02-29/"
433
+
434
+ #define kXMP_NS_DICOM "http://ns.adobe.com/DICOM/"
435
+
436
+ #define kXMP_NS_PLUS "http://ns.useplus.org/ldf/xmp/1.0/"
437
+
438
+ #define kXMP_NS_PDFA_Schema "http://www.aiim.org/pdfa/ns/schema#"
439
+ #define kXMP_NS_PDFA_Property "http://www.aiim.org/pdfa/ns/property#"
440
+ #define kXMP_NS_PDFA_Type "http://www.aiim.org/pdfa/ns/type#"
441
+ #define kXMP_NS_PDFA_Field "http://www.aiim.org/pdfa/ns/field#"
442
+ #define kXMP_NS_PDFA_ID "http://www.aiim.org/pdfa/ns/id/"
443
+ #define kXMP_NS_PDFA_Extension "http://www.aiim.org/pdfa/ns/extension/"
444
+
445
+ #define kXMP_NS_PDFX "http://ns.adobe.com/pdfx/1.3/"
446
+ #define kXMP_NS_PDFX_ID "http://www.npes.org/pdfx/ns/id/"
447
+
448
+ #define kXMP_NS_RDF "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
449
+ #define kXMP_NS_XML "http://www.w3.org/XML/1998/namespace"
450
+
451
+ // =================================================================================================
452
+ // Enums and macros used for option bits
453
+ // =====================================
454
+
455
+ /// \name Macros for standard option selections.
456
+ /// @{
457
+ ///
458
+ /// \def kXMP_ArrayLastItem
459
+ /// \brief Options macro accesses last array item.
460
+ ///
461
+ /// \def kXMP_UseNullTermination
462
+ /// \brief Options macro sets string style.
463
+ ///
464
+ /// \def kXMP_NoOptions
465
+ /// \brief Options macro clears all property-type bits.
466
+ ///
467
+ /// @}
468
+
469
+ #define kXMP_ArrayLastItem ((XMP_Index)(-1L))
470
+ #define kXMP_UseNullTermination ((XMP_StringLen)(~0UL))
471
+ #define kXMP_NoOptions ((XMP_OptionBits)0UL)
472
+
473
+ /// \name Macros for setting and testing general option bits.
474
+ /// @{
475
+ ///
476
+ /// \def XMP_SetOption
477
+ /// \brief Macro sets an option flag bit.
478
+ /// \param var A variable storing an options flag.
479
+ /// \param opt The bit-flag constant to set.
480
+ ///
481
+ /// \def XMP_ClearOption
482
+ /// \brief Macro clears an option flag bit.
483
+ /// \param var A variable storing an options flag.
484
+ /// \param opt The bit-flag constant to clear.
485
+ ///
486
+ /// \def XMP_TestOption
487
+ /// \brief Macro reports whether an option flag bit is set.
488
+ /// \param var A variable storing an options flag.
489
+ /// \param opt The bit-flag constant to test.
490
+ /// \return True if the bit is set.
491
+ ///
492
+ /// \def XMP_OptionIsSet
493
+ /// \brief Macro reports whether an option flag bit is set.
494
+ /// \param var A variable storing an options flag.
495
+ /// \param opt The bit-flag constant to test.
496
+ /// \return True if the bit is set.
497
+ ///
498
+ /// \def XMP_OptionIsClear
499
+ /// \brief Macro reports whether an option flag bit is clear.
500
+ /// \param var A variable storing an options flag.
501
+ /// \param opt The bit-flag constant to test.
502
+ /// \return True if the bit is clear.
503
+ ///
504
+ /// @}
505
+
506
+ #define XMP_SetOption(var,opt) var |= (opt)
507
+ #define XMP_ClearOption(var,opt) var &= ~(opt)
508
+ #define XMP_TestOption(var,opt) (((var) & (opt)) != 0)
509
+ #define XMP_OptionIsSet(var,opt) (((var) & (opt)) != 0)
510
+ #define XMP_OptionIsClear(var,opt) (((var) & (opt)) == 0)
511
+
512
+ /// \name Macros for setting and testing specific option bits.
513
+ /// @{
514
+ ///
515
+ /// \def XMP_PropIsSimple
516
+ /// \brief Macro reports the property type specified by an options flag.
517
+ /// \param opt The options flag to check.
518
+ ///
519
+ /// \def XMP_PropIsStruct
520
+ /// \brief Macro reports the property type specified by an options flag.
521
+ /// \param opt The options flag to check.
522
+ ///
523
+ /// \def XMP_PropIsArray
524
+ /// \brief Macro reports the property type specified by an options flag.
525
+ /// \param opt The options flag to check.
526
+ ///
527
+ /// \def XMP_ArrayIsUnordered
528
+ /// \brief Macro reports the property type specified by an options flag.
529
+ /// \param opt The options flag to check.
530
+ ///
531
+ /// \def XMP_ArrayIsOrdered
532
+ /// \brief Macro reports the property type specified by an options flag.
533
+ /// \param opt The options flag to check.
534
+ ///
535
+ /// \def XMP_ArrayIsAlternate
536
+ /// \brief Macro reports the property type specified by an options flag.
537
+ /// \param opt The options flag to check.
538
+ ///
539
+ /// \def XMP_ArrayIsAltText
540
+ /// \brief Macro reports the property type specified by an options flag.
541
+ /// \param opt The options flag to check.
542
+ ///
543
+ /// \def XMP_PropHasQualifiers
544
+ /// \brief Macro reports the property type specified by an options flag.
545
+ /// \param opt The options flag to check.
546
+ ///
547
+ /// \def XMP_PropIsQualifier
548
+ /// \brief Macro reports the property type specified by an options flag.
549
+ /// \param opt The options flag to check.
550
+ ///
551
+ /// \def XMP_PropHasLang
552
+ /// \brief Macro reports the property type specified by an options flag.
553
+ /// \param opt The options flag to check.
554
+ ///
555
+ /// \def XMP_NodeIsSchema
556
+ /// \brief Macro reports the property type specified by an options flag.
557
+ /// \param opt The options flag to check.
558
+ ///
559
+ /// \def XMP_PropIsAlias
560
+ /// \brief Macro reports the property type specified by an options flag.
561
+ /// \param opt The options flag to check.
562
+ ///
563
+ /// @}
564
+
565
+ #define XMP_PropIsSimple(opt) (((opt) & kXMP_PropCompositeMask) == 0)
566
+ #define XMP_PropIsStruct(opt) (((opt) & kXMP_PropValueIsStruct) != 0)
567
+ #define XMP_PropIsArray(opt) (((opt) & kXMP_PropValueIsArray) != 0)
568
+
569
+ #define XMP_ArrayIsUnordered(opt) (((opt) & kXMP_PropArrayIsOrdered) == 0)
570
+ #define XMP_ArrayIsOrdered(opt) (((opt) & kXMP_PropArrayIsOrdered) != 0)
571
+ #define XMP_ArrayIsAlternate(opt) (((opt) & kXMP_PropArrayIsAlternate) != 0)
572
+ #define XMP_ArrayIsAltText(opt) (((opt) & kXMP_PropArrayIsAltText) != 0)
573
+
574
+ #define XMP_PropHasQualifiers(opt) (((opt) & kXMP_PropHasQualifiers) != 0)
575
+ #define XMP_PropIsQualifier(opt) (((opt) & kXMP_PropIsQualifier) != 0)
576
+ #define XMP_PropHasLang(opt) (((opt) & kXMP_PropHasLang) != 0)
577
+
578
+ #define XMP_NodeIsSchema(opt) (((opt) & kXMP_SchemaNode) != 0)
579
+ #define XMP_PropIsAlias(opt) (((opt) & kXMP_PropIsAlias) != 0)
580
+
581
+ // -------------------------------------------------------------------------------------------------
582
+
583
+ /// @brief Option bit flags for the \c TXMPMeta property accessor functions.
584
+ enum {
585
+
586
+ /// The XML string form of the property value is a URI, use rdf:resource attribute. DISCOURAGED
587
+ kXMP_PropValueIsURI = 0x00000002UL,
588
+
589
+ // ------------------------------------------------------
590
+ // Options relating to qualifiers attached to a property.
591
+
592
+ /// The property has qualifiers, includes \c rdf:type and \c xml:lang.
593
+ kXMP_PropHasQualifiers = 0x00000010UL,
594
+
595
+ /// This is a qualifier for some other property, includes \c rdf:type and \c xml:lang.
596
+ /// Qualifiers can have arbitrary structure, and can themselves have qualifiers. If the
597
+ /// qualifier itself has a structured value, this flag is only set for the top node of the
598
+ /// qualifier's subtree.
599
+ kXMP_PropIsQualifier = 0x00000020UL,
600
+
601
+ /// Implies \c #kXMP_PropHasQualifiers, property has \c xml:lang.
602
+ kXMP_PropHasLang = 0x00000040UL,
603
+
604
+ /// Implies \c #kXMP_PropHasQualifiers, property has \c rdf:type.
605
+ kXMP_PropHasType = 0x00000080UL,
606
+
607
+ // --------------------------------------------
608
+ // Options relating to the data structure form.
609
+
610
+ /// The value is a structure with nested fields.
611
+ kXMP_PropValueIsStruct = 0x00000100UL,
612
+
613
+ /// The value is an array (RDF alt/bag/seq). The "ArrayIs..." flags identify specific types
614
+ /// of array; default is a general unordered array, serialized using an \c rdf:Bag container.
615
+ kXMP_PropValueIsArray = 0x00000200UL,
616
+
617
+ /// The item order does not matter.
618
+ kXMP_PropArrayIsUnordered = kXMP_PropValueIsArray,
619
+
620
+ /// Implies \c #kXMP_PropValueIsArray, item order matters. It is serialized using an \c rdf:Seq container.
621
+ kXMP_PropArrayIsOrdered = 0x00000400UL,
622
+
623
+ /// Implies \c #kXMP_PropArrayIsOrdered, items are alternates. It is serialized using an \c rdf:Alt container.
624
+ kXMP_PropArrayIsAlternate = 0x00000800UL,
625
+
626
+ // ------------------------------------
627
+ // Additional struct and array options.
628
+
629
+ /// Implies \c #kXMP_PropArrayIsAlternate, items are localized text. Each array element is a
630
+ /// simple property with an \c xml:lang attribute.
631
+ kXMP_PropArrayIsAltText = 0x00001000UL,
632
+
633
+ // kXMP_InsertBeforeItem = 0x00004000UL, ! Used by SetXyz functions.
634
+ // kXMP_InsertAfterItem = 0x00008000UL, ! Used by SetXyz functions.
635
+
636
+ // ----------------------------
637
+ // Other miscellaneous options.
638
+
639
+ /// This property is an alias name for another property. This is only returned by
640
+ /// \c TXMPMeta::GetProperty() and then only if the property name is simple, not an path expression.
641
+ kXMP_PropIsAlias = 0x00010000UL,
642
+
643
+ /// This property is the base value (actual) for a set of aliases.This is only returned by
644
+ /// \c TXMPMeta::GetProperty() and then only if the property name is simple, not an path expression.
645
+ kXMP_PropHasAliases = 0x00020000UL,
646
+
647
+ /// The value of this property is "owned" by the application, and should not generally be editable in a UI.
648
+ kXMP_PropIsInternal = 0x00040000UL,
649
+
650
+ /// The value of this property is not derived from the document content.
651
+ kXMP_PropIsStable = 0x00100000UL,
652
+
653
+ /// The value of this property is derived from the document content.
654
+ kXMP_PropIsDerived = 0x00200000UL,
655
+
656
+ // kXMPUtil_AllowCommas = 0x10000000UL, ! Used by TXMPUtils::CatenateArrayItems and ::SeparateArrayItems.
657
+ // kXMP_DeleteExisting = 0x20000000UL, ! Used by TXMPMeta::SetXyz functions to delete any pre-existing property.
658
+ // kXMP_SchemaNode = 0x80000000UL, ! Returned by iterators - #define to avoid warnings
659
+
660
+ // ------------------------------
661
+ // Masks that are multiple flags.
662
+
663
+ /// Property type bit-flag mask for all array types
664
+ kXMP_PropArrayFormMask = kXMP_PropValueIsArray | kXMP_PropArrayIsOrdered | kXMP_PropArrayIsAlternate | kXMP_PropArrayIsAltText,
665
+
666
+ /// Property type bit-flag mask for composite types (array and struct)
667
+ kXMP_PropCompositeMask = kXMP_PropValueIsStruct | kXMP_PropArrayFormMask,
668
+
669
+ /// Mask for bits that are reserved for transient use by the implementation.
670
+ kXMP_ImplReservedMask = 0x70000000L
671
+
672
+ };
673
+
674
+ #define kXMP_SchemaNode ((XMP_OptionBits)0x80000000UL)
675
+
676
+ /// @brief Option bit flags for the \c TXMPMeta property setting functions.
677
+ /// @details These option bits are shared with the accessor functions:
678
+ /// \li \c #kXMP_PropValueIsURI
679
+ /// \li \c #kXMP_PropValueIsStruct
680
+ /// \li \c #kXMP_PropValueIsArray
681
+ /// \li \c #kXMP_PropArrayIsOrdered
682
+ /// \li \c #kXMP_PropArrayIsAlternate
683
+ /// \li \c #kXMP_PropArrayIsAltText
684
+ enum {
685
+
686
+ /// Option for array item location: Insert a new item before the given index.
687
+ kXMP_InsertBeforeItem = 0x00004000UL,
688
+
689
+ /// Option for array item location: Insert a new item after the given index.
690
+ kXMP_InsertAfterItem = 0x00008000UL,
691
+
692
+ /// Delete any pre-existing property.
693
+ kXMP_DeleteExisting = 0x20000000UL,
694
+
695
+ /// Bit-flag mask for property-value option bits
696
+ kXMP_PropValueOptionsMask = kXMP_PropValueIsURI,
697
+
698
+ /// Bit-flag mask for array-item location bits
699
+ kXMP_PropArrayLocationMask = kXMP_InsertBeforeItem | kXMP_InsertAfterItem
700
+
701
+ };
702
+
703
+ // -------------------------------------------------------------------------------------------------
704
+
705
+ /// @brief Option bit flags for \c TXMPMeta::ParseFromBuffer().
706
+ enum {
707
+
708
+ /// Require a surrounding \c x:xmpmeta element.
709
+ kXMP_RequireXMPMeta = 0x0001UL,
710
+
711
+ /// This is the not last input buffer for this parse stream.
712
+ kXMP_ParseMoreBuffers = 0x0002UL,
713
+
714
+ /// Do not reconcile alias differences, throw an exception.
715
+ kXMP_StrictAliasing = 0x0004UL
716
+
717
+ };
718
+
719
+ /// @brief Option bit flags for \c TXMPMeta::SerializeToBuffer().
720
+ enum {
721
+
722
+ // *** Option to remove empty struct/array, or leaf with empty value?
723
+
724
+ /// Omit the XML packet wrapper.
725
+ kXMP_OmitPacketWrapper = 0x0010UL,
726
+
727
+ /// Default is a writeable packet.
728
+ kXMP_ReadOnlyPacket = 0x0020UL,
729
+
730
+ /// Use a compact form of RDF.
731
+ kXMP_UseCompactFormat = 0x0040UL,
732
+
733
+ /// Use a canonical form of RDF.
734
+ kXMP_UseCanonicalFormat = 0x0080UL,
735
+
736
+ /// Include a padding allowance for a thumbnail image.
737
+ kXMP_IncludeThumbnailPad = 0x0100UL,
738
+
739
+ /// The padding parameter is the overall packet length.
740
+ kXMP_ExactPacketLength = 0x0200UL,
741
+
742
+ /// Omit all formatting whitespace.
743
+ kXMP_OmitAllFormatting = 0x0800UL,
744
+
745
+ /// Omit the x:xmpmeta element surrounding the rdf:RDF element.
746
+ kXMP_OmitXMPMetaElement = 0x1000UL,
747
+
748
+ /// Include a rdf Hash and Merged flag in x:xmpmeta element.
749
+ kXMP_IncludeRDFHash = 0x2000UL,
750
+
751
+ _XMP_LittleEndian_Bit = 0x0001UL, // ! Don't use directly, see the combined values below!
752
+ _XMP_UTF16_Bit = 0x0002UL,
753
+ _XMP_UTF32_Bit = 0x0004UL,
754
+
755
+ /// Bit-flag mask for encoding-type bits
756
+ kXMP_EncodingMask = 0x0007UL,
757
+
758
+ /// Use UTF8 encoding
759
+ kXMP_EncodeUTF8 = 0UL,
760
+
761
+ /// Use UTF16 big-endian encoding
762
+ kXMP_EncodeUTF16Big = _XMP_UTF16_Bit,
763
+
764
+ /// Use UTF16 little-endian encoding
765
+ kXMP_EncodeUTF16Little = _XMP_UTF16_Bit | _XMP_LittleEndian_Bit,
766
+
767
+ /// Use UTF32 big-endian encoding
768
+ kXMP_EncodeUTF32Big = _XMP_UTF32_Bit,
769
+
770
+ /// Use UTF13 little-endian encoding
771
+ kXMP_EncodeUTF32Little = _XMP_UTF32_Bit | _XMP_LittleEndian_Bit
772
+
773
+ };
774
+
775
+ // -------------------------------------------------------------------------------------------------
776
+
777
+ /// @brief Option bit flags for \c TXMPIterator construction.
778
+ enum {
779
+
780
+ /// The low 8 bits are an enum of what data structure to iterate.
781
+ kXMP_IterClassMask = 0x00FFUL,
782
+
783
+ /// Iterate the property tree of a TXMPMeta object.
784
+ kXMP_IterProperties = 0x0000UL,
785
+
786
+ /// Iterate the global alias table.
787
+ kXMP_IterAliases = 0x0001UL,
788
+
789
+ /// Iterate the global namespace table.
790
+ kXMP_IterNamespaces = 0x0002UL,
791
+
792
+ /// Just do the immediate children of the root, default is subtree.
793
+ kXMP_IterJustChildren = 0x0100UL,
794
+
795
+ /// Just do the leaf nodes, default is all nodes in the subtree.
796
+ kXMP_IterJustLeafNodes = 0x0200UL,
797
+
798
+ /// Return just the leaf part of the path, default is the full path.
799
+ kXMP_IterJustLeafName = 0x0400UL,
800
+
801
+ /// Omit all qualifiers.
802
+ kXMP_IterOmitQualifiers = 0x1000UL
803
+
804
+ };
805
+
806
+ /// @brief Option bit flags for \c TXMPIterator::Skip().
807
+ enum {
808
+
809
+ /// Skip the subtree below the current node.
810
+ kXMP_IterSkipSubtree = 0x0001UL,
811
+
812
+ /// Skip the subtree below and remaining siblings of the current node.
813
+ kXMP_IterSkipSiblings = 0x0002UL
814
+
815
+ };
816
+
817
+ // -------------------------------------------------------------------------------------------------
818
+
819
+ /// @brief Option bit flags for \c TXMPUtils::CatenateArrayItems() and \c TXMPUtils::SeparateArrayItems().
820
+ /// @details These option bits are shared with the accessor functions:
821
+ /// \li \c #kXMP_PropValueIsArray,
822
+ /// \li \c #kXMP_PropArrayIsOrdered,
823
+ /// \li \c #kXMP_PropArrayIsAlternate,
824
+ /// \li \c #kXMP_PropArrayIsAltText
825
+ enum {
826
+
827
+ /// Allow commas in item values, default is separator.
828
+ kXMPUtil_AllowCommas = 0x10000000UL
829
+
830
+ };
831
+
832
+ /// @brief Option bit flags for \c TXMPUtils::ApplyTemplate().
833
+ enum {
834
+
835
+ /// Do all properties, default is just external properties.
836
+ kXMPTemplate_IncludeInternalProperties = 0x0001UL,
837
+
838
+ /// Perform a Replace operation, add new properties and modify existing ones.
839
+ kXMPTemplate_ReplaceExistingProperties = 0x0002UL,
840
+
841
+ /// Similar to Replace, also delete if the template has an empty value.
842
+ kXMPTemplate_ReplaceWithDeleteEmpty = 0x0004UL,
843
+
844
+ /// Perform an Add operation, add properties if they don't already exist.
845
+ kXMPTemplate_AddNewProperties = 0x0008UL,
846
+
847
+ /// Perform a Clear operation, keep named properties and delete everything else.
848
+ kXMPTemplate_ClearUnnamedProperties = 0x0010UL
849
+
850
+ };
851
+
852
+ /// @brief Option bit flags for \c TXMPUtils::RemoveProperties() and \c TXMPUtils::AppendProperties().
853
+ enum {
854
+
855
+ /// Do all properties, default is just external properties.
856
+ kXMPUtil_DoAllProperties = 0x0001UL,
857
+
858
+ /// Replace existing values, default is to leave them.
859
+ kXMPUtil_ReplaceOldValues = 0x0002UL,
860
+
861
+ /// Delete properties if the new value is empty.
862
+ kXMPUtil_DeleteEmptyValues = 0x0004UL,
863
+
864
+ /// Include aliases, default is just actual properties.
865
+ kXMPUtil_IncludeAliases = 0x0800UL
866
+
867
+ };
868
+
869
+ // =================================================================================================
870
+ // Types and Constants for XMPFiles
871
+ // ================================
872
+
873
+ /// @brief Seek mode constants for use with XMP_IO and inside XMPFiles library code.
874
+ enum SeekMode { kXMP_SeekFromStart, kXMP_SeekFromCurrent, kXMP_SeekFromEnd };
875
+
876
+ /// @brief File format constants for use with XMPFiles.
877
+ enum {
878
+
879
+ // ! Hex used to avoid gcc warnings. Leave the constants so the text reads big endian. There
880
+ // ! seems to be no decent way on UNIX to determine the target endianness at compile time.
881
+ // ! Forcing it on the client isn't acceptable.
882
+
883
+ // --------------------
884
+ // Public file formats.
885
+
886
+ /// Public file format constant: 'PDF '
887
+ kXMP_PDFFile = 0x50444620UL,
888
+ /// Public file format constant: 'PS ', general PostScript following DSC conventions
889
+ kXMP_PostScriptFile = 0x50532020UL,
890
+ /// Public file format constant: 'EPS ', encapsulated PostScript
891
+ kXMP_EPSFile = 0x45505320UL,
892
+
893
+ /// Public file format constant: 'JPEG'
894
+ kXMP_JPEGFile = 0x4A504547UL,
895
+ /// Public file format constant: 'JPX ', JPEG 2000, ISO 15444-1
896
+ kXMP_JPEG2KFile = 0x4A505820UL,
897
+ /// Public file format constant: 'TIFF'
898
+ kXMP_TIFFFile = 0x54494646UL,
899
+ /// Public file format constant: 'GIF '
900
+ kXMP_GIFFile = 0x47494620UL,
901
+ /// Public file format constant: 'PNG '
902
+ kXMP_PNGFile = 0x504E4720UL,
903
+
904
+ /// Public file format constant: 'SWF '
905
+ kXMP_SWFFile = 0x53574620UL,
906
+ /// Public file format constant: 'FLA '
907
+ kXMP_FLAFile = 0x464C4120UL,
908
+ /// Public file format constant: 'FLV '
909
+ kXMP_FLVFile = 0x464C5620UL,
910
+
911
+ /// Public file format constant: 'MOV ', Quicktime
912
+ kXMP_MOVFile = 0x4D4F5620UL,
913
+ /// Public file format constant: 'AVI '
914
+ kXMP_AVIFile = 0x41564920UL,
915
+ /// Public file format constant: 'CIN ', Cineon
916
+ kXMP_CINFile = 0x43494E20UL,
917
+ /// Public file format constant: 'WAV '
918
+ kXMP_WAVFile = 0x57415620UL,
919
+ /// Public file format constant: 'MP3 '
920
+ kXMP_MP3File = 0x4D503320UL,
921
+ /// Public file format constant: 'SES ', Audition session
922
+ kXMP_SESFile = 0x53455320UL,
923
+ /// Public file format constant: 'CEL ', Audition loop
924
+ kXMP_CELFile = 0x43454C20UL,
925
+ /// Public file format constant: 'MPEG'
926
+ kXMP_MPEGFile = 0x4D504547UL,
927
+ /// Public file format constant: 'MP2 '
928
+ kXMP_MPEG2File = 0x4D503220UL,
929
+ /// Public file format constant: 'MP4 ', ISO 14494-12 and -14
930
+ kXMP_MPEG4File = 0x4D503420UL,
931
+ /// Public file format constant: 'MXF '
932
+ kXMP_MXFFile = 0x4D584620UL,
933
+ /// Public file format constant: 'WMAV', Windows Media Audio and Video
934
+ kXMP_WMAVFile = 0x574D4156UL,
935
+ /// Public file format constant: 'AIFF'
936
+ kXMP_AIFFFile = 0x41494646UL,
937
+ /// Public file format constant: 'RED ', RED file format
938
+ kXMP_REDFile = 0x52454420UL,
939
+ /// Public file format constant: 'ARRI', ARRI file format
940
+ kXMP_ARRIFile = 0x41525249UL,
941
+ /// Public file format constant: 'HEIF', HEIF file format
942
+ kXMP_HEIFFile = 0x48454946UL,
943
+ /// Public file format constant: 'P2 ', a collection not really a single file
944
+ kXMP_P2File = 0x50322020UL,
945
+ /// Public file format constant: 'XDCF', a collection not really a single file
946
+ kXMP_XDCAM_FAMFile = 0x58444346UL,
947
+ /// Public file format constant: 'XDCS', a collection not really a single file
948
+ kXMP_XDCAM_SAMFile = 0x58444353UL,
949
+ /// Public file format constant: 'XDCX', a collection not really a single file
950
+ kXMP_XDCAM_EXFile = 0x58444358UL,
951
+ /// Public file format constant: 'AVHD', a collection not really a single file
952
+ kXMP_AVCHDFile = 0x41564844UL,
953
+ /// Public file format constant: 'SHDV', a collection not really a single file
954
+ kXMP_SonyHDVFile = 0x53484456UL,
955
+ /// Public file format constant: 'CNXF', a collection not really a single file
956
+ kXMP_CanonXFFile = 0x434E5846UL,
957
+ /// Public file format constant: 'AVCU', a collection not really a single file
958
+ kXMP_AVCUltraFile = 0x41564355UL,
959
+
960
+ /// Public file format constant: 'HTML'
961
+ kXMP_HTMLFile = 0x48544D4CUL,
962
+ /// Public file format constant: 'XML '
963
+ kXMP_XMLFile = 0x584D4C20UL,
964
+ /// Public file format constant: 'text'
965
+ kXMP_TextFile = 0x74657874UL,
966
+ /// Public file format constant: 'SVG '
967
+ kXMP_SVGFile = 0x53564720UL,
968
+
969
+ // -------------------------------
970
+ // Adobe application file formats.
971
+
972
+ /// Adobe application file format constant: 'PSD '
973
+ kXMP_PhotoshopFile = 0x50534420UL,
974
+ /// Adobe application file format constant: 'AI '
975
+ kXMP_IllustratorFile = 0x41492020UL,
976
+ /// Adobe application file format constant: 'INDD'
977
+ kXMP_InDesignFile = 0x494E4444UL,
978
+ /// Adobe application file format constant: 'AEP '
979
+ kXMP_AEProjectFile = 0x41455020UL,
980
+ /// Adobe application file format constant: 'AET ', After Effects Project Template
981
+ kXMP_AEProjTemplateFile = 0x41455420UL,
982
+ /// Adobe application file format constant: 'FFX '
983
+ kXMP_AEFilterPresetFile = 0x46465820UL,
984
+ /// Adobe application file format constant: 'NCOR'
985
+ kXMP_EncoreProjectFile = 0x4E434F52UL,
986
+ /// Adobe application file format constant: 'PRPJ'
987
+ kXMP_PremiereProjectFile = 0x5052504AUL,
988
+ /// Adobe application file format constant: 'PRTL'
989
+ kXMP_PremiereTitleFile = 0x5052544CUL,
990
+ /// Adobe application file format constant: 'UCF ', Universal Container Format
991
+ kXMP_UCFFile = 0x55434620UL,
992
+
993
+ // -------
994
+ // Others.
995
+
996
+ /// Unknown file format constant: ' '
997
+ kXMP_UnknownFile = 0x20202020UL
998
+
999
+ };
1000
+
1001
+ /// Type for file format identification constants. See \c #kXMP_PDFFile and following.
1002
+ typedef XMP_Uns32 XMP_FileFormat;
1003
+
1004
+ // -------------------------------------------------------------------------------------------------
1005
+
1006
+ /// @brief Byte-order masks, do not use directly
1007
+ enum {
1008
+ kXMP_CharLittleEndianMask = 1,
1009
+ kXMP_Char16BitMask = 2,
1010
+ kXMP_Char32BitMask = 4
1011
+ };
1012
+
1013
+ /// @brief Constants to allow easy testing for 16/32 bit and big/little endian.
1014
+ enum {
1015
+ /// 8-bit
1016
+ kXMP_Char8Bit = 0,
1017
+ /// 16-bit big-endian
1018
+ kXMP_Char16BitBig = kXMP_Char16BitMask,
1019
+ /// 16-bit little-endian
1020
+ kXMP_Char16BitLittle = kXMP_Char16BitMask | kXMP_CharLittleEndianMask,
1021
+ /// 32-bit big-endian
1022
+ kXMP_Char32BitBig = kXMP_Char32BitMask,
1023
+ /// 32-bit little-endian
1024
+ kXMP_Char32BitLittle = kXMP_Char32BitMask | kXMP_CharLittleEndianMask,
1025
+ /// Variable or not-yet-known cases
1026
+ kXMP_CharUnknown = 1
1027
+ };
1028
+
1029
+ /// \name Macros to test components of the character form mask
1030
+ /// @{
1031
+ ///
1032
+ /// \def XMP_CharFormIs16Bit
1033
+ /// \brief Macro reports the encoding of a character.
1034
+ /// \param f The character to check.
1035
+ ///
1036
+ /// \def XMP_CharFormIs32Bit
1037
+ /// \brief Macro reports the encoding of a character.
1038
+ /// \param f The character to check.
1039
+ ///
1040
+ /// \def XMP_CharFormIsBigEndian
1041
+ /// \brief Macro reports the byte-order of a character.
1042
+ /// \param f The character to check.
1043
+ ///
1044
+ /// \def XMP_CharFormIsLittleEndian
1045
+ /// \brief Macro reports the byte-order of a character.
1046
+ /// \param f The character to check.
1047
+ ///
1048
+ /// \def XMP_GetCharSize
1049
+ /// \brief Macro reports the byte-size of a character.
1050
+ /// \param f The character to check.
1051
+ ///
1052
+ /// \def XMP_CharToSerializeForm
1053
+ /// \brief Macro converts \c XMP_Uns8 to \c XMP_OptionBits.
1054
+ /// \param cf The character to convert.
1055
+ ///
1056
+ /// \def XMP_CharFromSerializeForm
1057
+ /// \brief Macro converts \c XMP_OptionBits to \c XMP_Uns8.
1058
+ /// \param sf The character to convert.
1059
+ ///
1060
+ /// @}
1061
+
1062
+ #define XMP_CharFormIs16Bit(f) ( ((int)(f) & kXMP_Char16BitMask) != 0 )
1063
+ #define XMP_CharFormIs32Bit(f) ( ((int)(f) & kXMP_Char32BitMask) != 0 )
1064
+ #define XMP_CharFormIsBigEndian(f) ( ((int)(f) & kXMP_CharLittleEndianMask) == 0 )
1065
+ #define XMP_CharFormIsLittleEndian(f) ( ((int)(f) & kXMP_CharLittleEndianMask) != 0 )
1066
+ #define XMP_GetCharSize(f) ( ((int)(f)&6) == 0 ? 1 : (int)(f)&6 )
1067
+ #define XMP_CharToSerializeForm(cf) ( (XMP_OptionBits)(cf) )
1068
+ #define XMP_CharFromSerializeForm(sf) ( (XMP_Uns8)(sf) )
1069
+
1070
+ /// \def kXMPFiles_UnknownOffset
1071
+ /// \brief Constant for an unknown packet offset within a file.
1072
+ #define kXMPFiles_UnknownOffset ((XMP_Int64)-1)
1073
+
1074
+ /// \def kXMPFiles_UnknownLength
1075
+ /// \brief Constant for an unknown packet length within a file.
1076
+ #define kXMPFiles_UnknownLength ((XMP_Int32)-1)
1077
+
1078
+ /// @brief XMP packet description
1079
+ struct XMP_PacketInfo {
1080
+
1081
+ /// Packet offset in the file in bytes, -1 if unknown.
1082
+ XMP_Int64 offset;
1083
+ /// Packet length in the file in bytes, -1 if unknown.
1084
+ XMP_Int32 length;
1085
+ /// Packet padding size in bytes, zero if unknown.
1086
+ XMP_Int32 padSize; // Zero if unknown.
1087
+
1088
+ /// Character format using the values \c kXMP_Char8Bit, \c kXMP_Char16BitBig, etc.
1089
+ XMP_Uns8 charForm;
1090
+ /// True if there is a packet wrapper and the trailer says writeable by dumb packet scanners.
1091
+ XMP_Bool writeable;
1092
+ /// True if there is a packet wrapper, the "<?xpacket...>" XML processing instructions.
1093
+ XMP_Bool hasWrapper;
1094
+
1095
+ /// Padding to make the struct's size be a multiple 4.
1096
+ XMP_Uns8 pad;
1097
+
1098
+ /// Default constructor.
1099
+ XMP_PacketInfo() : offset(kXMPFiles_UnknownOffset), length(kXMPFiles_UnknownLength),
1100
+ padSize(0), charForm(0), writeable(0), hasWrapper(0), pad(0) {};
1101
+
1102
+ };
1103
+
1104
+ /// @brief Version of the XMP_PacketInfo type
1105
+ enum {
1106
+ /// Version of the XMP_PacketInfo type
1107
+ kXMP_PacketInfoVersion = 3
1108
+ };
1109
+
1110
+ // -------------------------------------------------------------------------------------------------
1111
+
1112
+ /// @brief Option bit flags for \c TXMPFiles::Initialize().
1113
+ enum {
1114
+ /// Ignore non-XMP text that uses an undefined "local" encoding.
1115
+ kXMPFiles_IgnoreLocalText = 0x0002,
1116
+ /// Combination of flags necessary for server products using XMPFiles.
1117
+ kXMPFiles_ServerMode = kXMPFiles_IgnoreLocalText
1118
+ };
1119
+
1120
+ /// @brief Option bit flags for \c TXMPFiles::GetFormatInfo().
1121
+ enum {
1122
+
1123
+ /// Can inject first-time XMP into an existing file.
1124
+ kXMPFiles_CanInjectXMP = 0x00000001,
1125
+
1126
+ /// Can expand XMP or other metadata in an existing file.
1127
+ kXMPFiles_CanExpand = 0x00000002,
1128
+
1129
+ /// Can copy one file to another, writing new metadata.
1130
+ kXMPFiles_CanRewrite = 0x00000004,
1131
+
1132
+ /// Can expand, but prefers in-place update.
1133
+ kXMPFiles_PrefersInPlace = 0x00000008,
1134
+
1135
+ /// Supports reconciliation between XMP and other forms.
1136
+ kXMPFiles_CanReconcile = 0x00000010,
1137
+
1138
+ /// Allows access to just the XMP, ignoring other forms.
1139
+ kXMPFiles_AllowsOnlyXMP = 0x00000020,
1140
+
1141
+ /// File handler returns raw XMP packet information.
1142
+ kXMPFiles_ReturnsRawPacket = 0x00000040,
1143
+
1144
+ /// The file handler does the file open and close.
1145
+ kXMPFiles_HandlerOwnsFile = 0x00000100,
1146
+
1147
+ /// The file handler allows crash-safe file updates.
1148
+ kXMPFiles_AllowsSafeUpdate = 0x00000200,
1149
+
1150
+ /// The file format needs the XMP packet to be read-only.
1151
+ kXMPFiles_NeedsReadOnlyPacket = 0x00000400,
1152
+
1153
+ /// The file handler uses a "sidecar" file for the XMP.
1154
+ kXMPFiles_UsesSidecarXMP = 0x00000800,
1155
+
1156
+ /// The format is folder oriented, for example the P2 video format.
1157
+ kXMPFiles_FolderBasedFormat = 0x00001000,
1158
+
1159
+ /// The file Handler is capable of notifying progress notifications
1160
+ kXMPFiles_CanNotifyProgress = 0x00002000,
1161
+
1162
+ /// The plugin handler is not capable for delay loading
1163
+ kXMPFiles_NeedsPreloading = 0x00004000,
1164
+
1165
+ /// The format needs file during Process XMP even if it's Read Only Operation.
1166
+ /// So that file is not closed after OpenFile operation when kXMPFiles_OpenForUpdate not passed
1167
+ kXMPFiles_NeedsLocalFileOpened = 0x00010000
1168
+ };
1169
+
1170
+ /// @brief Option bit flags for \c TXMPFiles::OpenFile().
1171
+ enum {
1172
+
1173
+ /// Open for read-only access.
1174
+ kXMPFiles_OpenForRead = 0x00000001,
1175
+
1176
+ /// Open for reading and writing.
1177
+ kXMPFiles_OpenForUpdate = 0x00000002,
1178
+
1179
+ /// Only the XMP is wanted, allows space/time optimizations.
1180
+ kXMPFiles_OpenOnlyXMP = 0x00000004,
1181
+
1182
+ /// Force use of the given handler (format), do not even verify the format.
1183
+ kXMPFiles_ForceGivenHandler = 0x00000008,
1184
+
1185
+ /// Be strict about only attempting to use the designated file handler, no fallback to other handlers.
1186
+ kXMPFiles_OpenStrictly = 0x00000010,
1187
+
1188
+ /// Require the use of a smart handler.
1189
+ kXMPFiles_OpenUseSmartHandler = 0x00000020,
1190
+
1191
+ /// Force packet scanning, do not use a smart handler.
1192
+ kXMPFiles_OpenUsePacketScanning = 0x00000040,
1193
+
1194
+ /// Only packet scan files "known" to need scanning.
1195
+ kXMPFiles_OpenLimitedScanning = 0x00000080,
1196
+
1197
+ /// Attempt to repair a file opened for update, default is to not open (throw an exception).
1198
+ kXMPFiles_OpenRepairFile = 0x00000100,
1199
+
1200
+ /// When updating a file, spend the effort necessary to optimize file layout.
1201
+ kXMPFiles_OptimizeFileLayout = 0x00000200,
1202
+
1203
+ /// When updating a PDF preserve state of document
1204
+ kXMPFiles_PreservePDFState = 0x00000400
1205
+
1206
+ };
1207
+
1208
+ /// @brief Option bit flags for \c TXMPFiles::CloseFile().
1209
+ enum {
1210
+ /// Write into a temporary file and swap for crash safety.
1211
+ kXMPFiles_UpdateSafely = 0x0001
1212
+ };
1213
+
1214
+
1215
+ // =================================================================================================
1216
+ // Error notification and Exceptions
1217
+ // =================================
1218
+
1219
+ /// \name Error notification and Exceptions
1220
+ /// @{
1221
+ ///
1222
+ /// @details From the beginning through version 5.5, XMP Tookit errors result in throwing an \c XMP_Error
1223
+ /// exception. For the most part exceptions were thrown early and thus API calls aborted as soon as
1224
+ /// an error was detected. Starting in version 5.5, support has been added for notifications of
1225
+ /// errors arising in calls to \c TXMPMeta and \c TXMPFiles functions.
1226
+ ///
1227
+ /// A client can register an error notification callback function for a \c TXMPMeta or \c TXMPFiles
1228
+ /// object. This can be done as a global default or individually to each object. The global default
1229
+ /// applies to all objects created after it is registered. Within the object there is no difference
1230
+ /// between the global default or explicitly registered callback. The callback function returns a
1231
+ /// \c bool value indicating if recovery should be attempted (true) or an exception thrown (false).
1232
+ /// If no callback is registered, a best effort at recovery and continuation will be made with an
1233
+ /// exception thrown if recovery is not possible. More details can be found in the \c TXMPMeta and
1234
+ /// \c TXMPFiles documentation.
1235
+ ///
1236
+ /// The \c XMP_Error class contains a numeric code and an English explanation. New numeric codes may
1237
+ /// be added at any time. There are typically many possible explanations for each numeric code. The
1238
+ /// explanations try to be precise about the specific circumstances causing the error.
1239
+ ///
1240
+ /// \note The explanation string is for debugging use only. It must not be shown to users in a
1241
+ /// final product. It is written for developers not users, and never localized.
1242
+
1243
+ typedef XMP_Uns8 XMP_ErrorSeverity;
1244
+
1245
+ /// @brief Severity codes for error notifications
1246
+ enum {
1247
+ /// Partial recovery and continuation is possible.
1248
+ kXMPErrSev_Recoverable = 0,
1249
+ /// Recovery is not possible, an exception will be thrown aborting the API call.
1250
+ kXMPErrSev_OperationFatal = 1,
1251
+ /// Recovery is not possible, an exception will be thrown, the file is corrupt and possibly unusable.
1252
+ kXMPErrSev_FileFatal = 2,
1253
+ /// Recovery is not possible, an exception will be thrown, the entire process should be aborted.
1254
+ kXMPErrSev_ProcessFatal = 3
1255
+ };
1256
+
1257
+ // -------------------------------------------------------------------------------------------------
1258
+ /// @brief The signature of a client-defined callback for TXMPMeta error notifications.
1259
+ ///
1260
+ /// @param context A pointer used to carry client-private context.
1261
+ ///
1262
+ /// @param severity The severity of the error, see the \c XMP_ErrorSeverity values.
1263
+ ///
1264
+ /// @param cause A numeric code for the cause of the error, from the XMP_Error exception codes.
1265
+ /// Codes used with TXMPMeta error notifications:
1266
+ /// \li \c kXMPErr_BadXML - An XML syntax error found during parsing.
1267
+ /// \li \c kXMPErr_BadRDF - A syntax or semantic parsing error in the XMP subset of RDF.
1268
+ /// \li \c kXMPErr_BadXMP - A semantic XMP data model error.
1269
+ /// \li \c kXMPErr_BadValue - An XMP value error, wrong type, out of range, etc.
1270
+ /// \li \c kXMPErr_NoMemory - A heap allocation failure.
1271
+ ///
1272
+ /// @param message An explanation of the error, for debugging use only. This should not be displayed
1273
+ /// to users in a final product.
1274
+ ///
1275
+ /// @return True if the operation should continue with a best effort attempt at recovery, false if
1276
+ /// it should be aborted with an exception thrown from the library back to the original caller.
1277
+ /// Recovery is possible only if the severity is kXMPErrSev_Recoverable, an exception will be
1278
+ /// thrown on return from the callback in all other cases.
1279
+ ///
1280
+ /// @see \c TXMPMeta::SetDefaultErrorCallback() and \c TXMPMeta::SetErrorCallback()
1281
+
1282
+ typedef bool (* XMPMeta_ErrorCallbackProc) ( void* context, XMP_ErrorSeverity severity, XMP_Int32 cause, XMP_StringPtr message );
1283
+
1284
+ // -------------------------------------------------------------------------------------------------
1285
+ /// @brief The signature of a client-defined callback for TXMPFiles error notifications.
1286
+ ///
1287
+ /// @param context A pointer used to carry client-private context.
1288
+ ///
1289
+ /// @param filePath The path for the file involved in the error.
1290
+ ///
1291
+ /// @param severity The severity of the error, see the \c XMP_ErrorSeverity values.
1292
+ ///
1293
+ /// @param cause A numeric code for the cause of the error, from the XMP_Error exception codes.
1294
+ /// Codes used with TXMPFiles error notifications:
1295
+ /// \li \c kXMPErr_NoFile - A file does not exist
1296
+ /// \li \c kXMPErr_FilePermission - A file exists but cannot be opened
1297
+ /// \li \c kXMPErr_FilePathNotAFile - A path exists which is not a file
1298
+ /// \li \c dXMPErr_RejectedFileExtension - Any Operation called on rejected file extension
1299
+ /// \li \c KXMPErr_NoFileHandler - No suitable handler is found for the file
1300
+ /// \li \c kXMPErr_DiskSpace - A file write fails due to lack of disk space
1301
+ /// \li \c kXMPErr_ReadError - A file read fails
1302
+ /// \li \c kXMPErr_WriteError - A file write fails for some other reason than space
1303
+ /// \li \c kXMPErr_BadFileFormat - A file is corrupt or ill-formed
1304
+ /// \li \c kXMPErr_BadBlockFormat - A portion of a file is corrupt or ill-formed
1305
+ /// \li \c kXMPErr_BadValue - An XMP or non-XMP metadata item has an invalid value
1306
+ /// \li \c kXMPErr_NoMemory - A heap allocation failure
1307
+ ///
1308
+ /// @param message An explanation of the error, for debugging use only. This should not be displayed
1309
+ /// to users in a final product.
1310
+ ///
1311
+ /// @return True if the operation should continue with a best effort attempt at recovery, false if
1312
+ /// it should be aborted with an exception thrown from the library back to the original caller.
1313
+ /// Recovery is possible only if the severity is kXMPErrSev_Recoverable, an exception will be
1314
+ /// thrown on return from the callback in all other cases.
1315
+ ///
1316
+ /// @see \c TXMPFiles::SetDefaultErrorCallback() and \c TXMPFiles::SetErrorCallback()
1317
+
1318
+ typedef bool (* XMPFiles_ErrorCallbackProc) ( void* context, XMP_StringPtr filePath, XMP_ErrorSeverity severity, XMP_Int32 cause, XMP_StringPtr message );
1319
+
1320
+ // -------------------------------------------------------------------------------------------------
1321
+ /// Internal: The signatures of client-side wrappers for the error notification callbacks.
1322
+
1323
+ typedef XMP_Bool (* XMPMeta_ErrorCallbackWrapper) ( XMPMeta_ErrorCallbackProc clientProc, void* context,
1324
+ XMP_ErrorSeverity severity, XMP_Int32 cause, XMP_StringPtr message );
1325
+
1326
+ typedef XMP_Bool (* XMPFiles_ErrorCallbackWrapper) ( XMPFiles_ErrorCallbackProc clientProc, void* context,
1327
+ XMP_StringPtr filePath, XMP_ErrorSeverity severity,
1328
+ XMP_Int32 cause, XMP_StringPtr message );
1329
+
1330
+ /// XMP Toolkit error, associates an error code with a descriptive error string.
1331
+ class XMP_Error {
1332
+ public:
1333
+
1334
+ /// @brief Constructor for an XMP_Error.
1335
+ ///
1336
+ /// @param _id The numeric code.
1337
+ ///
1338
+ /// @param _errMsg The descriptive string, for debugging use only. It must not be shown to users
1339
+ /// in a final product. It is written for developers, not users, and never localized.
1340
+ XMP_Error ( XMP_Int32 _id, XMP_StringPtr _errMsg ) : id(_id), errMsg(_errMsg), notified(false) {};
1341
+
1342
+ /// Retrieves the numeric code from an XMP_Error.
1343
+ inline XMP_Int32 GetID() const { return id; };
1344
+
1345
+ /// Retrieves the descriptive string from an XMP_Error.
1346
+ inline XMP_StringPtr GetErrMsg() const { return errMsg; };
1347
+
1348
+ /// Retrieves the information whether particular error is notified or not
1349
+ inline XMP_Bool IsNotified() const { return notified; }
1350
+
1351
+ /// Sets the notification status for an error
1352
+ inline void SetNotified() { notified = true; };
1353
+
1354
+ private:
1355
+ /// Exception code. See constants \c #kXMPErr_Unknown and following.
1356
+ XMP_Int32 id;
1357
+ /// Descriptive string, for debugging use only. It must not be shown to users in a final
1358
+ /// product. It is written for developers, not users, and never localized.
1359
+ XMP_StringPtr errMsg;
1360
+ /// Variable to store whether this particular error is notified to user or not
1361
+ XMP_Bool notified;
1362
+ };
1363
+
1364
+ /// @brief XMP_Error exception code constants
1365
+ enum {
1366
+
1367
+ // --------------------
1368
+ /// Generic error codes.
1369
+
1370
+ /// No error
1371
+ kXMPErr_NoError = -1,
1372
+
1373
+ /// Generic unknown error
1374
+ kXMPErr_Unknown = 0,
1375
+ /// Generic undefined error
1376
+ kXMPErr_TBD = 1,
1377
+ /// Generic unavailable error
1378
+ kXMPErr_Unavailable = 2,
1379
+ /// Generic bad object error
1380
+ kXMPErr_BadObject = 3,
1381
+ /// Generic bad parameter error
1382
+ kXMPErr_BadParam = 4,
1383
+ /// Generic bad value error
1384
+ kXMPErr_BadValue = 5,
1385
+ /// Generic assertion failure
1386
+ kXMPErr_AssertFailure = 6,
1387
+ /// Generic enforcement failure
1388
+ kXMPErr_EnforceFailure = 7,
1389
+ /// Generic unimplemented error
1390
+ kXMPErr_Unimplemented = 8,
1391
+ /// Generic internal failure
1392
+ kXMPErr_InternalFailure = 9,
1393
+ /// Generic deprecated error
1394
+ kXMPErr_Deprecated = 10,
1395
+ /// Generic external failure
1396
+ kXMPErr_ExternalFailure = 11,
1397
+ /// Generic user abort error
1398
+ kXMPErr_UserAbort = 12,
1399
+ /// Generic standard exception
1400
+ kXMPErr_StdException = 13,
1401
+ /// Generic unknown exception
1402
+ kXMPErr_UnknownException = 14,
1403
+ /// Generic out-of-memory error
1404
+ kXMPErr_NoMemory = 15,
1405
+ /// Progress reporting callback requested abort
1406
+ kXMPErr_ProgressAbort = 16,
1407
+
1408
+ // ------------------------------------
1409
+ // More specific parameter error codes.
1410
+
1411
+ /// Bad schema parameter
1412
+ kXMPErr_BadSchema = 101,
1413
+ /// Bad XPath parameter
1414
+ kXMPErr_BadXPath = 102,
1415
+ /// Bad options parameter
1416
+ kXMPErr_BadOptions = 103,
1417
+ /// Bad index parameter
1418
+ kXMPErr_BadIndex = 104,
1419
+ /// Bad iteration position
1420
+ kXMPErr_BadIterPosition = 105,
1421
+ /// XML parsing error (deprecated)
1422
+ kXMPErr_BadParse = 106,
1423
+ /// Serialization error
1424
+ kXMPErr_BadSerialize = 107,
1425
+ /// File format error
1426
+ kXMPErr_BadFileFormat = 108,
1427
+ /// No file handler found for format
1428
+ kXMPErr_NoFileHandler = 109,
1429
+ /// Data too large for JPEG file format
1430
+ kXMPErr_TooLargeForJPEG = 110,
1431
+ /// A file does not exist
1432
+ kXMPErr_NoFile = 111,
1433
+ /// A file exists but cannot be opened
1434
+ kXMPErr_FilePermission = 112,
1435
+ /// A file write failed due to lack of disk space
1436
+ kXMPErr_DiskSpace = 113,
1437
+ /// A file read failed
1438
+ kXMPErr_ReadError = 114,
1439
+ /// A file write failed for a reason other than lack of disk space
1440
+ kXMPErr_WriteError = 115,
1441
+ /// A block of a file is ill-formed, e.g. invalid IPTC-IIM in a photo
1442
+ kXMPErr_BadBlockFormat = 116,
1443
+ /// File Path is not a file
1444
+ kXMPErr_FilePathNotAFile = 117,
1445
+ /// Rejected File extension
1446
+ kXMPErr_RejectedFileExtension = 118,
1447
+
1448
+ // -----------------------------------------------
1449
+ // File format and internal structure error codes.
1450
+
1451
+ /// XML format error
1452
+ kXMPErr_BadXML = 201,
1453
+ /// RDF format error
1454
+ kXMPErr_BadRDF = 202,
1455
+ /// XMP format error
1456
+ kXMPErr_BadXMP = 203,
1457
+ /// Empty iterator
1458
+ kXMPErr_EmptyIterator = 204,
1459
+ /// Unicode error
1460
+ kXMPErr_BadUnicode = 205,
1461
+ /// TIFF format error
1462
+ kXMPErr_BadTIFF = 206,
1463
+ /// JPEG format error
1464
+ kXMPErr_BadJPEG = 207,
1465
+ /// PSD format error
1466
+ kXMPErr_BadPSD = 208,
1467
+ /// PSIR format error
1468
+ kXMPErr_BadPSIR = 209,
1469
+ /// IPTC format error
1470
+ kXMPErr_BadIPTC = 210,
1471
+ /// MPEG format error
1472
+ kXMPErr_BadMPEG = 211,
1473
+ /// HEIF format: Modify Operation is not supported for Construction Method 1 or 2
1474
+ kXMPErr_HEIFConstructionMethodNotSupported = 212,
1475
+ /// PNG format error
1476
+ kXMPErr_BadPNG = 213
1477
+
1478
+ };
1479
+
1480
+ /// @}
1481
+
1482
+ // =================================================================================================
1483
+ // Client callbacks
1484
+ // ================
1485
+
1486
+ // -------------------------------------------------------------------------------------------------
1487
+ /// \name Special purpose callback functions
1488
+ /// @{
1489
+
1490
+ /// @brief A signed 32-bit integer used as a status result for the output callback routine,
1491
+ /// \c XMP_TextOutputProc. Zero means no error, all other values except -1 are private to the callback.
1492
+ /// The callback is wrapped to prevent exceptions being thrown across DLL boundaries. Any exceptions
1493
+ /// thrown out of the callback cause a return status of -1.
1494
+
1495
+ typedef XMP_Int32 XMP_Status;
1496
+
1497
+ // -------------------------------------------------------------------------------------------------
1498
+ /// @brief The signature of a client-defined callback for text output from XMP Toolkit debugging
1499
+ /// operations.
1500
+ /// @details The callback is invoked one or more times for each line of output. The end of a line
1501
+ /// is signaled by a '\\n' character at the end of the buffer. Formatting newlines are never present
1502
+ /// in the middle of a buffer, but values of properties might contain any UTF-8 characters.
1503
+ ///
1504
+ /// @param refCon A pointer to client-defined data passed to the TextOutputProc.
1505
+ ///
1506
+ /// @param buffer A string containing one line of output.
1507
+ ///
1508
+ /// @param bufferSize The number of characters in the output buffer.
1509
+ ///
1510
+ /// @return A success/fail status value. Any failure result aborts the output.
1511
+ ///
1512
+ /// @see \c TXMPMeta::DumpObject()
1513
+
1514
+ typedef XMP_Status (* XMP_TextOutputProc) ( void * refCon,
1515
+ XMP_StringPtr buffer,
1516
+ XMP_StringLen bufferSize );
1517
+
1518
+ // -------------------------------------------------------------------------------------------------
1519
+ /// @brief The signature of a client-defined callback to check for a user request to abort a time-consuming
1520
+ /// operation within XMPFiles.
1521
+ ///
1522
+ /// @param arg A pointer to caller-defined data passed from the registration call.
1523
+ ///
1524
+ /// @return True to abort the current operation, which results in an exception being thrown.
1525
+ ///
1526
+ /// @see \c TXMPFiles::SetAbortProc()
1527
+
1528
+ typedef bool (* XMP_AbortProc) ( void * arg );
1529
+
1530
+ // -------------------------------------------------------------------------------------------------
1531
+ /// @brief The signature of a client-defined callback for progress report notifications.
1532
+ ///
1533
+ /// @param context A pointer used to carry client-private context.
1534
+ ///
1535
+ /// @param elapsedTime The time in seconds since the progress reporting started.
1536
+ ///
1537
+ /// @param fractionDone A float value estimating the amount of work already done, in the range of
1538
+ /// 0.0 to 1.0. A value of 0.0 is given if the amount is not known, this happens if there is no
1539
+ /// estimate total for the total work. The units of work are not defined, but should usually be
1540
+ /// related to the number of bytes of I/O. This will go backwards if total work estimate changes.
1541
+ ///
1542
+ /// @param secondsToGo A float value estimating the number of seconds left to complete the file
1543
+ /// operation. A value of 0.0 is given if the amount is not known, this happens if the amount of
1544
+ /// total work is unknown. This can go backwards according to throughput or if work estimate changes.
1545
+ ///
1546
+ /// @return True if the file operation should continue, false if it should be aborted with an
1547
+ /// exception being thrown from the XMPFiles library back to the original caller.
1548
+ ///
1549
+ /// @see \c TXMPFiles::SetDefaultProgressCallback() and \c TXMPFiles::SetProgressCallback()
1550
+
1551
+ typedef bool (* XMP_ProgressReportProc) ( void * context, float elapsedTime, float fractionDone, float secondsToGo );
1552
+
1553
+ // -------------------------------------------------------------------------------------------------
1554
+ /// Internal: The signature of a client-side wrapper for the progress report callback.
1555
+
1556
+ typedef XMP_Bool (* XMP_ProgressReportWrapper) ( XMP_ProgressReportProc proc, void * context,
1557
+ float elapsedTime, float fractionDone, float secondsToGo );
1558
+
1559
+ /// @}
1560
+
1561
+ // =================================================================================================
1562
+ // Stuff with no better place to be
1563
+ // ================================
1564
+
1565
+ /// XMP Toolkit version information
1566
+ typedef struct XMP_VersionInfo {
1567
+ /// The primary release number, the "1" in version "1.2.3".
1568
+ XMP_Uns8 major;
1569
+ /// The secondary release number, the "2" in version "1.2.3".
1570
+ XMP_Uns8 minor;
1571
+ /// The tertiary release number, the "3" in version "1.2.3".
1572
+ XMP_Uns8 micro;
1573
+ /// A 0/1 boolean value, true if this is a debug build.
1574
+ XMP_Bool isDebug;
1575
+ /// A rolling build number, monotonically increasing in a release.
1576
+ XMP_Uns32 build;
1577
+ /// Individual feature implementation flags.
1578
+ XMP_Uns32 flags;
1579
+ /// A comprehensive version information string.
1580
+ XMP_StringPtr message;
1581
+ } XMP_VersionInfo;
1582
+
1583
+ // =================================================================================================
1584
+
1585
+ #if __cplusplus
1586
+ } // extern "C"
1587
+ #endif
1588
+
1589
+ #include <vector>
1590
+ #endif // __XMP_Const_h__