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
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b7aee0acc492647a8dba0533d35958329a0a3778b46d57788c351de5aeadfaa6
4
+ data.tar.gz: 17a5b39e71708f9d4a6ce25a24e03451fe65bf929f2a46c8d57ac4c320c9c7ff
5
+ SHA512:
6
+ metadata.gz: cdc48bafd443561d8e7b920dfa8a0c50b47f7704ec4e6bcf20c8a7258f65cb8329f8e66956e1aa38099646d26407369a78b18355b0af7b848885090168e67303
7
+ data.tar.gz: 88658e87bbae1cf9e2f2d43a4a3c73772994c44ee847c3b5523b99e8568630e1b321976d2f8e67088c557231e586ceb88ca20fa7cce88c4f9b32430bdd7a3c84
data/.idea/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ # Default ignored files
2
+ /shelf/
3
+ /workspace.xml
4
+ # Editor-based HTTP Client requests
5
+ /httpRequests/
6
+ # Datasource local storage ignored files
7
+ /dataSources/
8
+ /dataSources.local.xml
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,88 @@
1
+ AllCops:
2
+ NewCops: enable
3
+ TargetRubyVersion: 3.3
4
+ Exclude:
5
+ - 'ext/xmp_toolkit_ruby/extconf.rb'
6
+ - 'tmp/**/*'
7
+ - 'vendor/**/*'
8
+
9
+ Style/StringLiterals:
10
+ EnforcedStyle: double_quotes
11
+
12
+ Style/StringLiteralsInInterpolation:
13
+ EnforcedStyle: double_quotes
14
+
15
+ Style/Documentation:
16
+ Enabled: false
17
+
18
+ RSpec/SubjectStub:
19
+ Enabled: false
20
+
21
+ RSpec/ExampleLength:
22
+ Enabled: false
23
+
24
+ Layout/MultilineMethodCallIndentation:
25
+ Enabled: false
26
+
27
+ Layout/FirstArgumentIndentation:
28
+ Enabled: false
29
+
30
+ Layout/ClosingParenthesisIndentation:
31
+ Enabled: false
32
+
33
+ Layout/FirstHashElementIndentation:
34
+ EnforcedStyle: consistent
35
+
36
+ Layout/FirstArrayElementIndentation:
37
+ Enabled: false
38
+
39
+ Layout/MultilineOperationIndentation:
40
+ Enabled: false
41
+
42
+ Layout/BeginEndAlignment:
43
+ Enabled: false
44
+
45
+ Layout/ArrayAlignment:
46
+ Enabled: false
47
+
48
+ Layout/LineLength:
49
+ Enabled: false
50
+
51
+ Layout/LineEndStringConcatenationIndentation:
52
+ Enabled: false
53
+
54
+ RSpec/MultipleMemoizedHelpers:
55
+ Max: 10
56
+
57
+ Metrics/MethodLength:
58
+ Enabled: false
59
+
60
+ Metrics/ClassLength:
61
+ Enabled: false
62
+
63
+ Metrics/ParameterLists:
64
+ Max: 10
65
+
66
+
67
+ Gemspec/DevelopmentDependencies:
68
+ EnforcedStyle: gemspec
69
+
70
+ RSpec/InstanceVariable:
71
+ Enabled: false
72
+
73
+ RSpec/BeforeAfterAll:
74
+ Enabled: false
75
+
76
+ RSpec/SpecFilePathFormat:
77
+ Enabled: true
78
+ Exclude:
79
+ - 'spec/acceptance/**/*_spec.rb'
80
+
81
+ RSpec/DescribeClass:
82
+ Enabled: true
83
+ Exclude:
84
+ - 'spec/acceptance/**/*_spec.rb'
85
+
86
+ plugins:
87
+ - rubocop-rake
88
+ - rubocop-rspec
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ xmp-toolkit-ruby
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-3.3.4
data/AGENTS.md ADDED
@@ -0,0 +1,72 @@
1
+ # Project Agents.md Guide for OpenAI Codex
2
+
3
+ This Agents.md file provides comprehensive guidance for OpenAI Codex and other AI agents working with this codebase.
4
+
5
+ ## Project Structure for OpenAI Codex Navigation
6
+
7
+ - `/ext` - C++ extension code
8
+ - `/lib` - Ruby wrapper code
9
+ - `/spec` - Test suite
10
+ - `/bin` - CLI tools
11
+ - `/docker` - Docker configuration
12
+
13
+ ## Coding Conventions for OpenAI Codex
14
+
15
+ ### Ruby Conventions
16
+
17
+ - Follow standard Ruby style guidelines
18
+ - Use meaningful variable and method names
19
+ - Add comments for complex logic
20
+ - Use frozen_string_literal comments
21
+
22
+ ### C++ Extension Conventions
23
+
24
+ - Follow C++11 style guidelines
25
+ - Properly handle memory allocation and deallocation
26
+ - Use RAII principles for resource management
27
+ - Add error handling for SDK operations
28
+
29
+ ### General Conventions for Agents.md Implementation
30
+
31
+ - OpenAI Codex should follow the existing code style in each file
32
+ - Agents.md requires meaningful variable and function names in OpenAI Codex output
33
+ - OpenAI Codex should add comments for complex logic as guided by Agents.md
34
+
35
+ ## Testing Requirements for OpenAI Codex
36
+
37
+ - Each test file should focus on a specific module/feature
38
+ - Each `it` block should contain only one expectation
39
+ - Run tests with: `bundle exec rake clobber compile spec rubocop`
40
+
41
+ OpenAI Codex should run tests with the following commands:
42
+
43
+ ```bash
44
+ bundle exec rake clobber compile spec rubocop
45
+ ```
46
+
47
+ ## Pull Request Guidelines for OpenAI Codex
48
+
49
+ When OpenAI Codex helps create a PR, please ensure it:
50
+
51
+ 1. Includes a clear description of the changes as guided by Agents.md
52
+ 2. References any related issues that OpenAI Codex is addressing
53
+ 3. Ensures all tests pass for code generated by OpenAI Codex
54
+ 4. Includes screenshots for UI changes implemented with OpenAI Codex
55
+ 5. Keeps PRs focused on a single concern as specified in Agents.md
56
+ 6. Use conventional commit messages according to `.github/git-commit-instructions.md`.
57
+ 7. Primary Language: All commit messages, code comments, pull request descriptions, and branch names must be written in
58
+ English.
59
+
60
+ ## Programmatic Checks for OpenAI Codex
61
+
62
+ Before submitting changes generated by OpenAI Codex, run:
63
+
64
+ ```bash
65
+ bundle exec rake clobber
66
+ bundle exec rake rubocop
67
+ bundle exec rake compile
68
+ bundle exec rake spec
69
+ ```
70
+
71
+ All checks must pass before OpenAI Codex generated code can be merged. Agents.md helps ensure OpenAI Codex follows these
72
+ requirements.
data/CHANGELOG.md ADDED
@@ -0,0 +1,45 @@
1
+ <!-- generated by git-cliff start -->
2
+
3
+ # Changelog
4
+
5
+ All notable changes to this project will be documented in this file.
6
+
7
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
8
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
9
+
10
+ [unreleased]: https://github.com///compare/v0.0.1..HEAD
11
+
12
+ <!-- generated by git-cliff end -->
13
+
14
+ ## [0.0.2] - 2025-06-06
15
+
16
+ ### 🐛 Fixed
17
+
18
+ - Correct typo in XMP data override test
19
+
20
+ ### 📝 Docs
21
+
22
+ - Add macOS setup instructions for XMP Toolkit
23
+ - Document plugin path env var
24
+ - Update AGENTS.md to specify English for commits
25
+ - Add Agents.md for OpenAI Codex guidance
26
+
27
+ ### 🔄 Changed
28
+
29
+ - Merge pull request #7 from dieter-medium/enhance-changelog
30
+ - Merge pull request #6 from dieter-medium/enhance-osx-docs
31
+ - Merge pull request #4 from dieter-medium/codex/update-readme-with-xmp_toolkit_plugins_path-usage
32
+ - Merge pull request #1 from dieter-medium/codex/append-newline-to-.ruby-gemset
33
+
34
+ ### 🚀 Added
35
+
36
+ - Update permissions in main.yml
37
+ - Enhance override_xmp command functionality
38
+ - Add Dependabot configuration for Ruby dependencies
39
+
40
+ ## [0.0.1] - 2025-06-05
41
+
42
+ - Initial release
43
+
44
+ - [unreleased](https://github.com/dieter-medium/bidi2pdf/compare/v0.0.2..HEAD)
45
+ - [0.0.2](https://github.com/dieter-medium/bidi2pdf/compare/v0.0.1..v0.0.2)
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2025 Dieter S.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,287 @@
1
+ # XmpToolkitRuby
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/xmp_toolkit_ruby.svg)](https://badge.fury.io/rb/xmp_toolkit_ruby)
4
+
5
+ **XmpToolkitRuby** is a Ruby gem that provides fast, native bindings to
6
+ the [Adobe XMP Toolkit](https://github.com/adobe/XMP-Toolkit-SDK), enabling Ruby applications to **read and write XMP
7
+ metadata** in various file formats (images, PDFs, etc.).
8
+
9
+ ---
10
+
11
+ - **Full XMP read/write support**
12
+ - **Works with PNG, JPEG, TIFF, PDF, and more**
13
+ - **Command-line interface & Ruby API**
14
+ - **Works on Linux, macOS, and via Docker**
15
+
16
+ ---
17
+
18
+ ## Installation
19
+
20
+ **Recommended:** Compile natively on your target system for best performance and compatibility.
21
+ A precompiled extension may be available for some platforms.
22
+
23
+ ### 1. Get the Adobe XMP Toolkit
24
+
25
+ First, clone and prepare the Adobe XMP Toolkit SDK.
26
+
27
+ #### Linux example (adjust paths/versions as needed)
28
+
29
+ ```bash
30
+ export XMP_TOOLKIT_SDK_VERSION=2025.03
31
+
32
+ # Prerequisites
33
+ sudo apt update && sudo apt install cmake build-essential curl
34
+
35
+ # Download and extract the SDK
36
+ mkdir XMP-Toolkit-SDK
37
+ cd XMP-Toolkit-SDK
38
+ curl -LO https://github.com/adobe/XMP-Toolkit-SDK/archive/refs/tags/v${XMP_TOOLKIT_SDK_VERSION}.tar.gz
39
+ tar -xzf v${XMP_TOOLKIT_SDK_VERSION}.tar.gz --strip-components=1
40
+
41
+ # Prepare required third-party libraries
42
+ cd third-party
43
+
44
+ # zlib
45
+ cd zlib
46
+ curl -O https://zlib.net/zlib.tar.gz
47
+ tar --strip-components=1 -xzf zlib.tar.gz
48
+ cd ..
49
+
50
+ # expat
51
+ cd expat
52
+ curl -LO https://github.com/libexpat/libexpat/releases/download/R_2_5_0/expat-2.5.0.tar.gz
53
+ tar --strip-components=1 -xzf expat-2.5.0.tar.gz
54
+ cd ../..
55
+
56
+ # Build instructions
57
+ cd build
58
+ # ⚠️ Patch required: Remove `${XMP_GCC_LIBPATH}/libssp.a` from `ProductConfig.cmake` (see [this issue](https://github.com/adobe/XMP-Toolkit-SDK/issues/8))
59
+ # Optionally, disable secure settings in `shared/ToolchainGCC.cmake`:
60
+ # -set(XMP_ENABLE_SECURE_SETTINGS "ON")
61
+ # +set(XMP_ENABLE_SECURE_SETTINGS "OFF")
62
+ make
63
+ ```
64
+
65
+ #### macOS example
66
+
67
+ When you copy and paste the following commands, make sure that during the paste nothing got escaped (e.g. `{` becomes
68
+ `\{`).
69
+
70
+ ```bash
71
+ export XMP_TOOLKIT_SDK_VERSION=2025.03
72
+
73
+ xcode-select --install # Ensure Xcode command line tools are selected
74
+
75
+ # within a directory of your choice
76
+
77
+ mkdir XMP-Toolkit-SDK
78
+
79
+ cd XMP-Toolkit-SDK
80
+ curl -LO https://github.com/adobe/XMP-Toolkit-SDK/archive/refs/tags/v${XMP_TOOLKIT_SDK_VERSION}.tar.gz
81
+ tar -xzf v${XMP_TOOLKIT_SDK_VERSION}.tar.gz --strip-components=1
82
+
83
+ # Prepare required third-party libraries
84
+ cd third-party
85
+
86
+ # zlib
87
+ cd zlib
88
+ curl -O https://zlib.net/zlib.tar.gz
89
+ tar --strip-components=1 -xzf zlib.tar.gz
90
+ cd ..
91
+
92
+ # expat
93
+ cd expat
94
+ curl -LO https://github.com/libexpat/libexpat/releases/download/R_2_5_0/expat-2.5.0.tar.gz
95
+ tar --strip-components=1 -xzf expat-2.5.0.tar.gz
96
+ cd ../..
97
+
98
+ # cmake
99
+ cd tools/cmake
100
+ mkdir bin
101
+ cd bin
102
+ curl -LO https://cmake.org/files/v3.15/cmake-3.15.5-Darwin-x86_64.tar.gz
103
+ tar --strip-components=1 -xzf cmake-3.15.5-Darwin-x86_64.tar.gz
104
+ cd ../../..
105
+
106
+ cd build
107
+ ./GenerateXMPToolkitSDK_mac.sh
108
+
109
+ # choose 3 => Generate XMPToolkitSDK Static 64
110
+
111
+
112
+ cd xcode/static/universal/
113
+
114
+ # I needed to patch SDKROOT from macOS 13.1 SDK to 15.1 SDK in two places inside the Xcode project file:
115
+ #
116
+ # From:
117
+ # SDKROOT = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.1.sdk;
118
+ #
119
+ # To:
120
+ # SDKROOT = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.1.sdk;
121
+ #
122
+ # The following sed script replaces both occurrences in-place, backing up the original file with a .bak extension:
123
+ #
124
+ # Usage:
125
+ # sed -i.bak -E 's|(SDKROOT = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX)13\.1(\.sdk;)|\115.1\2|g' ./XMPToolkitSDK64.xcodeproj/project.pbxproj
126
+ #
127
+ # Explanation:
128
+ # - The regex captures the prefix and suffix around "13.1" to ensure only the SDK version number is replaced.
129
+ # - The 'g' flag ensures all matching lines (both places) are updated.
130
+
131
+
132
+ # Build Debug configuration
133
+ xcodebuild -scheme ALL_BUILD -configuration Debug build
134
+
135
+ # Build Release configuration
136
+ xcodebuild -scheme ALL_BUILD -configuration Release build
137
+
138
+ ```
139
+
140
+ **See [Adobe’s docs](https://github.com/adobe/XMP-Toolkit-SDK) for details on other platforms.**
141
+
142
+ ---
143
+
144
+ ### 2. Install the Gem
145
+
146
+ **Bundler:**
147
+
148
+ ```bash
149
+ # for linux
150
+ bundle config set --local build.xmp_toolkit_ruby "--with-xmp-lib=/path/to/XMP-Toolkit-SDK/public/libraries/i80386linux_x64/debug --with-xmp-include=/path/to/XMP-Toolkit-SDK/public/include"
151
+ # for macOS
152
+ bundle config set --local build.xmp_toolkit_ruby "--with-xmp-lib=/path/to/XMP-Toolkit-SDK/public/libraries/macintosh/universal/Debug --with-xmp-include=/path/to/XMP-Toolkit-SDK/public/include"
153
+
154
+ bundle add xmp_toolkit_ruby
155
+ ```
156
+
157
+ **Or, with plain RubyGems:**
158
+
159
+ ```bash
160
+ # for linux
161
+ gem install xmp_toolkit_ruby -- --with-xmp-lib /path/to/XMP-Toolkit-SDK/public/libraries/i80386linux_x64/debug --with-xmp-include /path/to/XMP-Toolkit-SDK/public/include
162
+ # for macOS
163
+ gem install xmp_toolkit_ruby -- --with-xmp-lib /path/to/XMP-Toolkit-SDK/public/libraries/macintosh/universal/Debug --with-xmp-include /path/to/XMP-Toolkit-SDK/public/include
164
+ ```
165
+
166
+ _Replace paths as needed for your environment._
167
+
168
+ ---
169
+
170
+ ## Precompiled Binaries and Platform Support
171
+
172
+ This gem **ships with precompiled binaries** for the native libraries `libxmpcore` and `libxmpfile` for common
173
+ platforms.
174
+
175
+ > ⚠️ **Note:**
176
+ > These precompiled binaries may **not work on your system**, especially if your OS, architecture, or C++ standard
177
+ > library differs from those used to build the binaries.
178
+ > For maximum compatibility, **it is strongly recommended to compile the native libraries yourself** on your target
179
+ > machine.
180
+
181
+ If you encounter issues or want maximum portability, please build the SDK from source using the instructions above.
182
+
183
+ **Tip:**
184
+ Check out [`docker/Dockerfile`](docker/Dockerfile) in this repository for a full working example of a native build
185
+ setup, including all dependencies and configuration flags.
186
+
187
+ ---
188
+
189
+ ## Usage
190
+
191
+ ### In Ruby
192
+
193
+ ```ruby
194
+ require "xmp_toolkit_ruby"
195
+
196
+ xmp = XmpToolkitRuby.xmp_from_file("BlueSquare.png")
197
+
198
+ pp xmp.keys
199
+ puts xmp["xmp_data"]
200
+
201
+ new_xmp = <<~XMP
202
+ <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 6.0.0">
203
+ <rdf:RDF xmlns:rdf="#{XmpToolkitRuby::Namespaces::XMP_NS_RDF}">
204
+ <rdf:Description xmlns:xmp="#{XmpToolkitRuby::Namespaces::XMP_NS_XMP}" rdf:about="">
205
+ <xmp:CreateDate>2025-06-04T20:20:40+02:00</xmp:CreateDate>
206
+ <xmp:ModifyDate>2025-06-04T20:20:40+02:00</xmp:ModifyDate>
207
+ </rdf:Description>
208
+ </rdf:RDF>
209
+ </x:xmpmeta>
210
+ XMP
211
+
212
+ XmpToolkitRuby.xmp_to_file(
213
+ "BlueSquare.png",
214
+ new_xmp,
215
+ override: true # Set to false to upsert/merge instead of replacing
216
+ )
217
+ ```
218
+
219
+ If you built the XMP Toolkit yourself or store the plugins elsewhere,
220
+ set the `XMP_TOOLKIT_PLUGINS_PATH` environment variable so the gem can
221
+ locate the PDF handler:
222
+
223
+ ```bash
224
+ export XMP_TOOLKIT_PLUGINS_PATH=/path/to/XMP-Toolkit-SDK/XMPFilesPlugins/PDF_Handler/<platform>
225
+ ```
226
+
227
+ Run your Ruby code or CLI commands in the same shell so this variable is
228
+ visible.
229
+
230
+ ---
231
+
232
+ ### CLI
233
+
234
+ The gem ships with a `xmp_toolkit_ruby` command for basic operations:
235
+
236
+ ```bash
237
+ # Print XMP metadata to stdout
238
+ xmp_toolkit_ruby print_xmp BlueSquare.png
239
+
240
+ # Print XMP metadata and save to a file
241
+ xmp_toolkit_ruby print_xmp BlueSquare.png xmp_metadata.xml
242
+
243
+ # Update XMP metadata (replace/merge)
244
+ xmp_toolkit_ruby override_xmp --override BlueSquare.png xmp_metadata.xml
245
+ ```
246
+
247
+ ---
248
+
249
+ ### Docker
250
+
251
+ You can run the CLI tool via Docker without installing any build tools:
252
+
253
+ ```bash
254
+ docker run -it --rm -v $(pwd):/workspace dieters877565/xmp-toolkit-ruby:main xmp_toolkit_ruby print_xmp /workspace/BlueSquare.png
255
+ ```
256
+
257
+ ---
258
+
259
+ ## Development
260
+
261
+ 1. **Clone the repo**
262
+ 2. `bin/setup` to install dependencies
263
+ 3. `rake spec` to run tests
264
+ 4. `bin/console` for an interactive shell
265
+
266
+ Build & install locally with:
267
+
268
+ ```bash
269
+ bundle exec rake install
270
+ ```
271
+
272
+ Release process:
273
+
274
+ - Bump the version in `lib/xmp_toolkit_ruby/version.rb`
275
+ - `bundle exec rake release` to tag, push, and publish to [rubygems.org](https://rubygems.org)
276
+
277
+ ---
278
+
279
+ ## Contributing
280
+
281
+ Bug reports and pull requests are welcome on [GitHub](https://github.com/DieterS/xmp_toolkit_ruby).
282
+
283
+ ---
284
+
285
+ ## License
286
+
287
+ This project is open source, licensed under the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ require "rubocop/rake_task"
9
+
10
+ RuboCop::RakeTask.new
11
+
12
+ require "rake/extensiontask"
13
+
14
+ desc "Build the gem including native extensions"
15
+ task build: :compile
16
+
17
+ GEMSPEC = Gem::Specification.load("xmp_toolkit_ruby.gemspec")
18
+
19
+ Rake::ExtensionTask.new("xmp_toolkit_ruby", GEMSPEC) do |ext|
20
+ ext.lib_dir = "lib/xmp_toolkit_ruby"
21
+ end
22
+
23
+ Dir.glob("tasks/*.rake").each { |r| load r }
24
+
25
+ task default: %i[clobber compile spec rubocop]