refx-engine-p3lib 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 734b204488da6f1b29f6d6ffefe6f7f6d9b813bd
4
+ data.tar.gz: 71c183b2b724aff901725e526ba6ffd0c294e96a
5
+ SHA512:
6
+ metadata.gz: 1d88aee7d9c9e3ef6b0c186c85abc86ea8a93435395a6ce5f27a031ca43ee27f0ba642dadbe16a1493140a5cb8d58a5b489333f0e9938e758205811120693545
7
+ data.tar.gz: 3c4f0b0ca358a453edeacdc5a50e67ff2c24858c2f045b43f6fe130a6bafdc78ac0337b7b902fee8466d122b8501f73d00e8d84259eea035dd14d480fef89985
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/CHANGELOG.md ADDED
@@ -0,0 +1,4 @@
1
+ # CHANGELOG
2
+
3
+ ## 0.0.2 2015-02-11
4
+ - Add zip method
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in refx-engine-p3lib.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Pim Snel
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # Refx::Engine::P3lib
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'refx-engine-p3lib'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install refx-engine-p3lib
20
+
21
+ ## Usage
22
+
23
+ TODO: Write usage instructions here
24
+
25
+ ## Contributing
26
+
27
+ 1. Fork it ( https://github.com/[my-github-username]/refx-engine-p3lib/fork )
28
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
29
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
30
+ 4. Push to the branch (`git push origin my-new-feature`)
31
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
Binary file
@@ -0,0 +1,52 @@
1
+ # P3libImage
2
+
3
+ ## library for all helper image classes
4
+
5
+ class P3libImage
6
+
7
+ public
8
+
9
+ def self.p3imgutils_path
10
+ p3imgutils_path = File.expand_path('../../p3imgutils', __FILE__)
11
+ p p3imgutils_path
12
+ return p3imgutils_path
13
+ end
14
+
15
+ def getXYRatio(original_size,newWidth, newHeight)
16
+ return newWidth.to_f / original_size.width.to_f, newHeight.to_f / original_size.height.to_f
17
+ end
18
+
19
+ def self.resizeBitmap(img,pixWidth,pixHeight)
20
+ cmd = "#{self.p3imgutils_path}/p3scale -w#{pixWidth} -h#{pixHeight} -i '#{img}' -o '#{img}'"
21
+ P3libLogger::log("resizing cmd:",cmd)
22
+ system(cmd)
23
+ end
24
+
25
+ def self.resizeBitmapWithOutputType(imgIN,imgOUT,pixWidth,pixHeight,type)
26
+ cmd = "#{self.p3imgutils_path}/p3scale -w#{pixWidth} -h#{pixHeight} -i '#{imgIN}' -o '#{imgOUT}' -t #{type}"
27
+ P3libLogger::log("resizing with type cmd:",cmd)
28
+ system(cmd)
29
+ end
30
+
31
+ def self.resizeBitmapByWidth(img,pixWidth)
32
+ cmd = "#{self.p3imgutils_path}/p3scale -w#{pixWidth} -h0 -i '#{img}' -o '#{img}'"
33
+ P3libLogger::log("resizing cmd:",cmd)
34
+ system(cmd)
35
+ end
36
+
37
+ def self.trimAlphaFromImage(inImage,outImage)
38
+ cmd = "#{self.p3imgutils_path}/p3trimalpha -i '#{inImage}' -o '#{outImage}'"
39
+
40
+ P3libLogger::log("trimming alpha to :",outImage)
41
+ P3libLogger::log("trimming alpha using :",cmd)
42
+ system(cmd)
43
+ end
44
+
45
+ #TODO TEST
46
+ def self.convertImgToFiletype(inImage,outImage,type)
47
+ cmd = "#{self.p3imgutils_path}/p3convfiletype -i '#{inImage}' -o '#{outImage}' -t #{type}"
48
+ P3libLogger::log("convertingh #{inImage} to #{outImage} of type #{type}")
49
+ system(cmd)
50
+ end
51
+
52
+ end
@@ -0,0 +1,159 @@
1
+ # P3libIndesign
2
+
3
+ ## library with indesign class methods
4
+
5
+ class P3libIndesign
6
+
7
+ public
8
+ def self.p3imgutils_path
9
+ p3imgutils_path = File.expand_path('../../p3imgutils', __FILE__)
10
+ return p3imgutils_path
11
+ end
12
+
13
+ #### Latest export method using CoreGraphics cli app
14
+ #orig is the inbetween pdf file which us used to generate a PNG with alpha channel
15
+ def self.export_to_png(inDesignApp, doc, dest)
16
+
17
+ orig = dest+'.pdf'
18
+
19
+ # TODO make preference
20
+ native = false
21
+
22
+ # inDesigns PNG export is only available in CS6 and doesn't work well for layers (in case of embedded PSD's)
23
+ if(native && inDesignApp.to_s == "app(\"/Applications/Adobe InDesign CS6/Adobe InDesign CS6.app\")" && !dest.index('layer'))
24
+
25
+ nativeExportToPNG(inDesignApp, doc, dest)
26
+
27
+ else
28
+ P3libLogger::log('Exporting to PNG using PDF as between file','','debug')
29
+
30
+ inDesignApp.transparency_preference.blending_space.set(:to => :CMYK)
31
+ inDesignApp.PDF_export_preferences.acrobat_compatibility.set(:to => :acrobat_8)
32
+ begin
33
+
34
+ ll = P3LibIndesignlocalization.new(inDesignApp)
35
+ preset = ll.translate('[Smallest File Size]')
36
+ inDesignApp.export(doc, :format => :PDF_type, :to => MacTypes::FileURL.path(orig).hfs_path, :timeout => 0, :showing_options => false, :using => preset)
37
+ rescue Exception => e
38
+ P3libLogger::log('PNG export failed: '+ e.message, 'error')
39
+ end
40
+
41
+ P3libImage::convertImgToFiletype(orig,dest,'png')
42
+ FileUtils.rm(orig)
43
+
44
+ end
45
+ end
46
+
47
+ #### Latest export method using CoreGraphics cli app
48
+ #orig is the inbetween pdf file which us used to generate a PNG with alpha channel
49
+ # FIXME Depreciated
50
+ def self.exportToPNG(inDesignApp, doc, outputPath, orig, dest, pixWidth, pixHeight)
51
+
52
+ # TODO make preference
53
+ native = false
54
+
55
+ # inDesigns PNG export is only available in CS6 and doesn't work well for layers (in case of embedded PSD's)
56
+ if(native && inDesignApp.to_s == "app(\"/Applications/Adobe InDesign CS6/Adobe InDesign CS6.app\")" && !dest.index('layer'))
57
+
58
+ nativeExportToPNG(inDesignApp, doc, dest)
59
+
60
+ else
61
+ P3libLogger::log('Exporting to PNG using PDF as between file','','debug')
62
+
63
+ inDesignApp.transparency_preference.blending_space.set(:to => :CMYK)
64
+ inDesignApp.PDF_export_preferences.acrobat_compatibility.set(:to => :acrobat_8)
65
+ begin
66
+
67
+ ll = P3LibIndesignlocalization.new(inDesignApp)
68
+ preset = ll.translate('[Smallest File Size]')
69
+ inDesignApp.export(doc, :format => :PDF_type, :to => MacTypes::FileURL.path(orig).hfs_path, :timeout => 0, :showing_options => false, :using => preset)
70
+ rescue Exception => e
71
+ P3libLogger::log('PNG export failed: '+ e.message, 'error')
72
+ end
73
+
74
+ P3libImage::convertImgToFiletype(orig,dest,'png')
75
+ FileUtils.rm(orig)
76
+
77
+ end
78
+ end
79
+
80
+ def self.nativeExportToPNG(inDesignApp, doc, dest)
81
+
82
+ if(!dest.index('image'))
83
+
84
+ begin
85
+ inDesignApp.export(doc, :format => :PNG_format, :to => MacTypes::FileURL.path(dest).hfs_path, :timeout => 0, :showing_options => false)
86
+ rescue Exception => e
87
+ P3libLogger::log('PNG export failed: '+ e.message, 'error')
88
+ end
89
+ else
90
+ # If is type image the image could be a PSD which can't be exported using inDesign's PNG export
91
+ # Use HTML export instead (apparently Indesign can export PSD as PNG, it can't do so using the PNG export method)
92
+
93
+ # Turn preview after export off
94
+ doc.HTML_export_preference.view_document_after_export.set(:to => false)
95
+
96
+ # Some other export preferences - not tested yet
97
+ #doc.HTML_export_preference.image_conversion.set(:to => :PNG)
98
+ #doc.HTML_export_preference.image_export_resolution(:to => 150)
99
+ #doc.HTML_export_preference.CSS_export_option.set(:to => :none)
100
+ #doc.HTML_export_preference.ignore_object_conversion_settings.set(:to => false)
101
+ #doc.HTML_export_preference.level.set(:to => 6) #PNG level
102
+
103
+ # Export HTML
104
+ begin
105
+ inDesignApp.export(doc, :format => :HTML, :to => MacTypes::FileURL.path(dest+'.html').hfs_path, :timeout => 0, :showing_options => false)
106
+ rescue Exception => e
107
+ P3libLogger::log('HTML export failed: '+ e.message)
108
+ end
109
+
110
+ # Copy PNG file from the HTML's web-resources folder to destination
111
+ Dir.foreach(dest+'-web-resources/image'){|f|
112
+ if(f != '.' && f != '..')
113
+ FileUtils.cp(dest+'-web-resources/image/'+f, dest)
114
+ end
115
+ }
116
+
117
+ # Clean up - prevents folders postfixed with numbers at reindex
118
+ FileUtils.rm_rf(dest+'-web-resources/')
119
+ FileUtils.rm(dest+'.html')
120
+
121
+ end
122
+ end
123
+
124
+
125
+ def self.placeImageOnItem(item, absolute_img_src)
126
+ if(File.exists?(absolute_img_src) && File.readable?(absolute_img_src) && File.file?(absolute_img_src))
127
+
128
+
129
+ begin
130
+ P3libLogger::log("placing item normal", MacTypes::FileURL.path(absolute_img_src).to_s)
131
+ item.place(MacTypes::FileURL.path(absolute_img_src))
132
+ rescue
133
+ begin
134
+ P3libLogger::log("placing item hfs", MacTypes::FileURL.path(absolute_img_src).hfs_path.to_s)
135
+ item.place(MacTypes::FileURL.path(absolute_img_src).hfs_path)
136
+ rescue
137
+ P3libLogger::log("unable to place item", "")
138
+ end
139
+ end
140
+ else
141
+ P3libLogger::log("image file not usable", absolute_img_src)
142
+ end
143
+ end
144
+
145
+ def self.closeAllDocsNoSave(inDesignApp)
146
+ begin
147
+ inDesignApp.documents.get.each do |doc|
148
+ doc.close(:saving => :no)
149
+ P3libLogger::log("Closing all Indesign open documents:", '')
150
+ end
151
+ rescue
152
+ P3libLogger::log("unable to close all open documents", "",'error')
153
+ end
154
+
155
+ end
156
+
157
+
158
+ end
159
+
@@ -0,0 +1,55 @@
1
+ class P3LibIndesignlocalization
2
+
3
+ def initialize(inDesignApp)
4
+
5
+ @idApp = inDesignApp
6
+ @langcode = guess_langcode
7
+
8
+ create_langhash
9
+ end
10
+
11
+ public
12
+ def translate(string)
13
+
14
+ if(@langcode == 'en')
15
+ return string
16
+ else
17
+ return @langhash[@langcode][string]
18
+ end
19
+ end
20
+
21
+ def guess_langcode
22
+
23
+ # all_pdf_presets = @idApp.PDF_export_presets.name.get
24
+ # P3libLogger::log('First preset',all_pdf_presets[0])
25
+ # if all_pdf_presets.include? '[Smallest File Size]'
26
+ # 'en'
27
+ # elsif all_pdf_presets.include? '[Kleinste bestandsgrootte]'
28
+ # 'nl'
29
+ # else
30
+ # 'unknown'
31
+ # end
32
+
33
+ firstPrinterPreset = @idApp.printer_presets.name.get[0]
34
+ langcode = case firstPrinterPreset
35
+ when "[Default]" then "en"
36
+ when "[Standaard]" then "nl"
37
+ else "Unknown"
38
+ end
39
+
40
+ return langcode
41
+ end
42
+
43
+ private
44
+ def create_langhash
45
+ @langhash = Hash.new
46
+ @langhash['nl'] = Hash.new
47
+ @langhash['nl']['[Low Resolution]'] = '[Lage resolutie]'
48
+ @langhash['nl']['[Medium Resolution]'] = '[Normale resolutie]'
49
+ @langhash['nl']['[High Resolution]'] = '[Hoge resolutie]'
50
+ @langhash['nl']['[Basic Text Frame]'] = '[Basistekstkader]'
51
+ @langhash['nl']['[Basic Graphics Frame]'] = '[Basisafbeeldingskader]'
52
+ # @langhash['nl']['[Smallest File Size]'] = '[Kleinste bestandsgrootte]'
53
+ @langhash['nl']['[Smallest File Size]'] = '[Smallest File Size]'
54
+ end
55
+ end
@@ -0,0 +1,37 @@
1
+ require 'logger'
2
+
3
+ class P3libLogger
4
+ class << self
5
+
6
+ # we use the types info, error, debug, warning
7
+ def log(key, val='', type='info')
8
+
9
+ val = '' if val.nil?
10
+
11
+ logdir = File.expand_path('~')+"/Library/Logs/REFx4"
12
+ logdir2 = File.expand_path('~')+"/Library/REFx4/JobsLogs/"+$REFXjobid.to_s
13
+
14
+ logfile = logdir + '/Engines.log'
15
+ logfile2 = logdir2 + '/engine.log'
16
+
17
+ if(@logger.nil?) then
18
+ @logger = Logger.new(logfile)
19
+ @logger.level = Logger::DEBUG
20
+ end
21
+ if(@logger2.nil?) then
22
+ @logger2 = Logger.new(logfile2)
23
+ @logger2.level = Logger::DEBUG
24
+ end
25
+
26
+ if(!$debug.nil? && type=='debug')
27
+ logstring = "#{type.upcase} - #{key}#{val==''?'':': '+val}"
28
+ @logger.info Time.now.strftime("%b-%d-%Y %H:%M") +' '+ logstring
29
+ @logger2.info Time.now.strftime("%b-%d-%Y %H:%M") +' '+ logstring
30
+ elsif(type!='debug')
31
+ logstring = "#{type.upcase} - #{key}#{val==''?'':': '+val}"
32
+ @logger.info Time.now.strftime("%b-%d-%Y %H:%M") +' '+ logstring
33
+ @logger2.info Time.now.strftime("%b-%d-%Y %H:%M") +' '+ logstring
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,39 @@
1
+ # P3libUtil
2
+
3
+ ## library for all helper classes
4
+ class P3libUtil
5
+
6
+ def self.helper_newtempname(len)
7
+ chars = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a
8
+ newpass = ''
9
+ 1.upto(len) { |i| newpass << chars[rand(chars.size-1)] }
10
+ return newpass
11
+ end
12
+
13
+ # base64 decode all strings in list
14
+ def self.decode_args(args)
15
+ decoded = []
16
+ args.each do | arg |
17
+ if arg.is_a?(String)
18
+ decoded << Base64.decode64(arg)
19
+ else
20
+ decoded << arg
21
+ end
22
+ end
23
+
24
+ decoded
25
+ end
26
+
27
+ # force all strings to utf in list
28
+ def self.force_utf(args)
29
+ forced = []
30
+ args.each do | arg |
31
+ if arg.is_a?(String)
32
+ arg.force_encoding('UTF-8')
33
+ end
34
+ forced << arg
35
+ end
36
+ forced
37
+ end
38
+ end
39
+
@@ -0,0 +1,13 @@
1
+ # P3libZip create zip archived
2
+
3
+ ## library for all helper zip classes
4
+
5
+ class P3libZip
6
+ public
7
+
8
+ def self.path_to_zipfile(path,zipfilepath)
9
+ P3libLogger::log("Creating zipfile",path)
10
+ cmd = "cd '#{File.dirname(path)}' && /usr/bin/zip -r '#{zipfilepath}' '#{File.basename(path)}'"
11
+ system(cmd)
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ module Refx
2
+ module Engine
3
+ module P3lib
4
+ VERSION = "0.0.2"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,14 @@
1
+ require "refx/engine/p3lib/version"
2
+ require "refx/engine/p3lib/p3lib_logger"
3
+ require "refx/engine/p3lib/p3lib_indesign"
4
+ require "refx/engine/p3lib/p3lib_util"
5
+ require "refx/engine/p3lib/p3lib_zip"
6
+ require "refx/engine/p3lib/p3lib_image"
7
+ require 'refx/engine/p3lib/p3lib_indesignlocalization'
8
+
9
+ module Refx
10
+ module Engine
11
+ module P3lib
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'refx/engine/p3lib/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "refx-engine-p3lib"
8
+ spec.version = Refx::Engine::P3lib::VERSION
9
+ spec.authors = ["Pim Snel"]
10
+ spec.email = ["pim@lingewoud.nl"]
11
+ spec.summary = %q{P3 Library bundle for other Engines}
12
+ spec.description = %q{P3 Library bundle for other Engines}
13
+ spec.homepage = "http://www.pas3.org"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: refx-engine-p3lib
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Pim Snel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-09-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: P3 Library bundle for other Engines
42
+ email:
43
+ - pim@lingewoud.nl
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - CHANGELOG.md
50
+ - Gemfile
51
+ - LICENSE.txt
52
+ - README.md
53
+ - Rakefile
54
+ - lib/refx/engine/p3imgutils/PAS3-refx3imageutils.webloc
55
+ - lib/refx/engine/p3imgutils/p3convfiletype
56
+ - lib/refx/engine/p3imgutils/p3scale
57
+ - lib/refx/engine/p3imgutils/p3trimalpha
58
+ - lib/refx/engine/p3imgutils/pdfrasterize
59
+ - lib/refx/engine/p3lib.rb
60
+ - lib/refx/engine/p3lib/p3lib_image.rb
61
+ - lib/refx/engine/p3lib/p3lib_indesign.rb
62
+ - lib/refx/engine/p3lib/p3lib_indesignlocalization.rb
63
+ - lib/refx/engine/p3lib/p3lib_logger.rb
64
+ - lib/refx/engine/p3lib/p3lib_util.rb
65
+ - lib/refx/engine/p3lib/p3lib_zip.rb
66
+ - lib/refx/engine/p3lib/version.rb
67
+ - refx-engine-p3lib.gemspec
68
+ homepage: http://www.pas3.org
69
+ licenses:
70
+ - MIT
71
+ metadata: {}
72
+ post_install_message:
73
+ rdoc_options: []
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ requirements: []
87
+ rubyforge_project:
88
+ rubygems_version: 2.4.3
89
+ signing_key:
90
+ specification_version: 4
91
+ summary: P3 Library bundle for other Engines
92
+ test_files: []