libis-format 1.0.4 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (232) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +5 -1
  3. data/.travis.yml +43 -25
  4. data/README.md +2 -2
  5. data/base/Dockerfile +35 -0
  6. data/base/Dockerfile.alpine +20 -0
  7. data/base/Dockerfile.rvm +56 -0
  8. data/base/rework_path +20 -0
  9. data/docker_cfg.yml +1 -0
  10. data/lib/libis/format.rb +12 -3
  11. data/lib/libis/format/cli/convert.rb +4 -4
  12. data/lib/libis/format/config.rb +15 -10
  13. data/lib/libis/format/converter/audio_converter.rb +3 -37
  14. data/lib/libis/format/converter/base.rb +22 -8
  15. data/lib/libis/format/converter/chain.rb +3 -3
  16. data/lib/libis/format/converter/image_assembler.rb +82 -0
  17. data/lib/libis/format/converter/image_converter.rb +20 -138
  18. data/lib/libis/format/converter/image_splitter.rb +84 -0
  19. data/lib/libis/format/converter/image_watermarker.rb +261 -0
  20. data/lib/libis/format/converter/jp2_converter.rb +2 -2
  21. data/lib/libis/format/converter/office_converter.rb +2 -2
  22. data/lib/libis/format/converter/pdf_assembler.rb +66 -0
  23. data/lib/libis/format/converter/pdf_converter.rb +10 -134
  24. data/lib/libis/format/converter/pdf_metadata.rb +82 -0
  25. data/lib/libis/format/converter/pdf_optimizer.rb +67 -0
  26. data/lib/libis/format/converter/pdf_protecter.rb +147 -0
  27. data/lib/libis/format/converter/pdf_selecter.rb +83 -0
  28. data/lib/libis/format/converter/pdf_splitter.rb +70 -0
  29. data/lib/libis/format/converter/pdf_watermarker_header.rb +71 -0
  30. data/lib/libis/format/converter/pdf_watermarker_image.rb +76 -0
  31. data/lib/libis/format/converter/pdf_watermarker_text.rb +93 -0
  32. data/lib/libis/format/converter/spreadsheet_converter.rb +2 -2
  33. data/lib/libis/format/converter/video_converter.rb +1 -1
  34. data/lib/libis/format/identifier.rb +3 -3
  35. data/lib/libis/format/info.rb +27 -0
  36. data/lib/libis/format/library.rb +147 -0
  37. data/lib/libis/format/tool.rb +4 -1
  38. data/lib/libis/format/tool/droid.rb +2 -2
  39. data/lib/libis/format/tool/extension_identification.rb +4 -4
  40. data/lib/libis/format/tool/ffmpeg.rb +1 -1
  41. data/lib/libis/format/tool/fido.rb +1 -1
  42. data/lib/libis/format/tool/fop_pdf.rb +1 -1
  43. data/lib/libis/format/tool/identification_tool.rb +6 -6
  44. data/lib/libis/format/tool/office_to_pdf.rb +1 -1
  45. data/lib/libis/format/tool/pdf_merge.rb +4 -4
  46. data/lib/libis/format/tool/{pdf_copy.rb → pdf_metadata.rb} +6 -6
  47. data/lib/libis/format/tool/pdf_protect.rb +47 -0
  48. data/lib/libis/format/tool/pdf_select.rb +47 -0
  49. data/lib/libis/format/tool/pdf_split.rb +5 -5
  50. data/lib/libis/format/tool/pdf_to_pdfa.rb +1 -2
  51. data/lib/libis/format/tool/pdf_watermark.rb +47 -0
  52. data/lib/libis/format/tool/pdfa_validator.rb +3 -4
  53. data/lib/libis/format/tool/spreadsheet_to_ods.rb +2 -1
  54. data/lib/libis/format/version.rb +1 -1
  55. data/lib/libis/format/yaml_loader.rb +71 -0
  56. data/libis-format.gemspec +5 -4
  57. data/tools/PdfTool.jar +0 -0
  58. data/tools/bcpkix-jdk15on-167.jar +0 -0
  59. data/tools/bcprov-jdk15on-167.jar +0 -0
  60. data/tools/fop/build/fop.jar +0 -0
  61. data/tools/fop/conf/fop.xconf +466 -0
  62. data/tools/fop/fop +258 -0
  63. data/tools/fop/fop.bat +75 -0
  64. data/tools/fop/fop.cmd +31 -0
  65. data/tools/fop/fop.js +341 -0
  66. data/tools/fop/lib/README.txt +243 -0
  67. data/tools/fop/lib/avalon-framework-api-4.3.1.jar +0 -0
  68. data/tools/fop/lib/avalon-framework-impl-4.3.1.jar +0 -0
  69. data/tools/fop/lib/avalon-framework.LICENSE.txt +175 -0
  70. data/tools/fop/lib/avalon-framework.NOTICE.TXT +11 -0
  71. data/tools/fop/lib/batik-all-1.10.jar +0 -0
  72. data/tools/fop/lib/batik.LICENSE.txt +201 -0
  73. data/tools/fop/lib/batik.NOTICE.txt +18 -0
  74. data/tools/fop/lib/commons-io-1.3.1.jar +0 -0
  75. data/tools/fop/lib/commons-io.LICENSE.txt +203 -0
  76. data/tools/fop/lib/commons-io.NOTICE.txt +6 -0
  77. data/tools/fop/lib/commons-logging-1.0.4.jar +0 -0
  78. data/tools/fop/lib/commons-logging.LICENSE.txt +202 -0
  79. data/tools/fop/lib/commons-logging.NOTICE.txt +3 -0
  80. data/tools/fop/lib/fontbox-2.0.7.jar +0 -0
  81. data/tools/fop/lib/serializer-2.7.2.jar +0 -0
  82. data/tools/fop/lib/serializer.LICENSE.txt +201 -0
  83. data/tools/fop/lib/serializer.NOTICE.txt +15 -0
  84. data/tools/fop/lib/xalan-2.7.2.jar +0 -0
  85. data/tools/fop/lib/xalan.BCEL.LICENSE.txt +52 -0
  86. data/tools/fop/lib/xalan.LICENSE.txt +202 -0
  87. data/tools/fop/lib/xalan.NOTICE.txt +44 -0
  88. data/tools/fop/lib/xalan.regexp.LICENSE.txt +52 -0
  89. data/tools/fop/lib/xalan.runtime.LICENSE.txt +20 -0
  90. data/tools/fop/lib/xerces.LICENSE.txt +56 -0
  91. data/tools/fop/lib/xercesImpl-2.9.1.jar +0 -0
  92. data/tools/fop/lib/xercesImpl.LICENSE.txt +201 -0
  93. data/tools/fop/lib/xercesImpl.NOTICE.txt +14 -0
  94. data/tools/fop/lib/xml-apis-1.3.04.jar +0 -0
  95. data/tools/fop/lib/xml-apis-ext-1.3.04.jar +0 -0
  96. data/tools/fop/lib/xml-apis-ext.LICENSE.dom-documentation.txt +73 -0
  97. data/tools/fop/lib/xml-apis-ext.LICENSE.dom-software.txt +61 -0
  98. data/tools/fop/lib/xml-apis-ext.LICENSE.sac.html +75 -0
  99. data/tools/fop/lib/xml-apis-ext.LICENSE.txt +202 -0
  100. data/tools/fop/lib/xml-apis-ext.NOTICE.txt +16 -0
  101. data/tools/fop/lib/xml-apis-ext.README.dom.txt +56 -0
  102. data/tools/fop/lib/xml-apis.LICENSE-SAX.html +17 -0
  103. data/tools/fop/lib/xml-apis.LICENSE.DOM-documentation.html +74 -0
  104. data/tools/fop/lib/xml-apis.LICENSE.DOM-software.html +66 -0
  105. data/tools/fop/lib/xml-apis.LICENSE.txt +201 -0
  106. data/tools/fop/lib/xml-apis.NOTICE.txt +13 -0
  107. data/tools/fop/lib/xmlgraphics-commons-2.3.jar +0 -0
  108. data/tools/fop/lib/xmlgraphics-commons.LICENSE.txt +202 -0
  109. data/tools/fop/lib/xmlgraphics-commons.NOTICE.txt +5 -0
  110. data/tools/pdfbox/pdfbox-app-2.0.13.jar +0 -0
  111. data/tools/pdfbox/{pdfbox-app-1.8.10.jar → preflight-app-2.0.13.jar} +0 -0
  112. metadata +86 -246
  113. data/lib/libis/format/type_database.rb +0 -134
  114. data/lib/libis/format/type_database_impl.rb +0 -120
  115. data/spec/converter_audio_spec.rb +0 -66
  116. data/spec/converter_fop_spec.rb +0 -37
  117. data/spec/converter_image_spec.rb +0 -166
  118. data/spec/converter_office_spec.rb +0 -84
  119. data/spec/converter_pdf_spec.rb +0 -30
  120. data/spec/converter_repository_spec.rb +0 -97
  121. data/spec/converter_spreadsheet_spec.rb +0 -39
  122. data/spec/converter_video_spec.rb +0 -97
  123. data/spec/converter_xsl_spec.rb +0 -56
  124. data/spec/data/Cevennes2.bmp +0 -0
  125. data/spec/data/Cevennes2.jp2 +0 -0
  126. data/spec/data/Cevennes2.ppm +0 -22492
  127. data/spec/data/NikonRaw-CameraRaw.TIF +0 -0
  128. data/spec/data/NikonRaw-CaptureOne.tif +0 -0
  129. data/spec/data/audio/carlin_disappointed.aac +0 -0
  130. data/spec/data/audio/carlin_disappointed.ac3 +0 -0
  131. data/spec/data/audio/carlin_disappointed.aiff +0 -0
  132. data/spec/data/audio/carlin_disappointed.au +0 -0
  133. data/spec/data/audio/carlin_disappointed.flac +0 -0
  134. data/spec/data/audio/carlin_disappointed.m4a +0 -0
  135. data/spec/data/audio/carlin_disappointed.mka +0 -0
  136. data/spec/data/audio/carlin_disappointed.mp3 +0 -0
  137. data/spec/data/audio/carlin_disappointed.ogg +0 -0
  138. data/spec/data/audio/carlin_disappointed.ra +0 -0
  139. data/spec/data/audio/carlin_disappointed.voc +0 -0
  140. data/spec/data/audio/carlin_disappointed.wav +0 -0
  141. data/spec/data/audio/carlin_disappointed.wma +0 -0
  142. data/spec/data/audio/greensleeves.aac +0 -0
  143. data/spec/data/audio/greensleeves.ac3 +0 -0
  144. data/spec/data/audio/greensleeves.aiff +0 -0
  145. data/spec/data/audio/greensleeves.au +0 -0
  146. data/spec/data/audio/greensleeves.flac +0 -0
  147. data/spec/data/audio/greensleeves.m4a +0 -0
  148. data/spec/data/audio/greensleeves.mka +0 -0
  149. data/spec/data/audio/greensleeves.mp3 +0 -0
  150. data/spec/data/audio/greensleeves.ogg +0 -0
  151. data/spec/data/audio/greensleeves.ra +0 -0
  152. data/spec/data/audio/greensleeves.voc +0 -0
  153. data/spec/data/audio/greensleeves.wav +0 -0
  154. data/spec/data/audio/greensleeves.wma +0 -0
  155. data/spec/data/audio/king_nonviolence.aac +0 -0
  156. data/spec/data/audio/king_nonviolence.ac3 +0 -0
  157. data/spec/data/audio/king_nonviolence.aiff +0 -0
  158. data/spec/data/audio/king_nonviolence.au +0 -0
  159. data/spec/data/audio/king_nonviolence.flac +0 -0
  160. data/spec/data/audio/king_nonviolence.m4a +0 -0
  161. data/spec/data/audio/king_nonviolence.mka +0 -0
  162. data/spec/data/audio/king_nonviolence.mp3 +0 -0
  163. data/spec/data/audio/king_nonviolence.ogg +0 -0
  164. data/spec/data/audio/king_nonviolence.ra +0 -0
  165. data/spec/data/audio/king_nonviolence.voc +0 -0
  166. data/spec/data/audio/king_nonviolence.wav +0 -0
  167. data/spec/data/audio/king_nonviolence.wma +0 -0
  168. data/spec/data/audio/top_gun_secret.aac +0 -0
  169. data/spec/data/audio/top_gun_secret.ac3 +0 -0
  170. data/spec/data/audio/top_gun_secret.aiff +0 -0
  171. data/spec/data/audio/top_gun_secret.au +0 -0
  172. data/spec/data/audio/top_gun_secret.flac +0 -0
  173. data/spec/data/audio/top_gun_secret.m4a +0 -0
  174. data/spec/data/audio/top_gun_secret.mka +0 -0
  175. data/spec/data/audio/top_gun_secret.mp3 +0 -0
  176. data/spec/data/audio/top_gun_secret.ogg +0 -0
  177. data/spec/data/audio/top_gun_secret.ra +0 -0
  178. data/spec/data/audio/top_gun_secret.voc +0 -0
  179. data/spec/data/audio/top_gun_secret.wav +0 -0
  180. data/spec/data/audio/top_gun_secret.wma +0 -0
  181. data/spec/data/multipage.tif +0 -0
  182. data/spec/data/multipage.tif.jp2 +0 -0
  183. data/spec/data/test-ead.xml +0 -392
  184. data/spec/data/test-jpg.tif +0 -0
  185. data/spec/data/test-lzw.tif +0 -0
  186. data/spec/data/test-options.jpg +0 -0
  187. data/spec/data/test-options.png +0 -0
  188. data/spec/data/test.bmp +0 -0
  189. data/spec/data/test.doc +0 -0
  190. data/spec/data/test.docx +0 -0
  191. data/spec/data/test.gif +0 -0
  192. data/spec/data/test.jpg +0 -0
  193. data/spec/data/test.ods +0 -0
  194. data/spec/data/test.odt +0 -0
  195. data/spec/data/test.pdf +0 -0
  196. data/spec/data/test.pdf.tif +0 -0
  197. data/spec/data/test.png +0 -0
  198. data/spec/data/test.ps +0 -8631
  199. data/spec/data/test.psd +0 -0
  200. data/spec/data/test.rtf +0 -1455
  201. data/spec/data/test.tif +0 -0
  202. data/spec/data/test.txt +0 -12
  203. data/spec/data/test.xcf +0 -0
  204. data/spec/data/test.xls +0 -0
  205. data/spec/data/test.xlsx +0 -0
  206. data/spec/data/test.xml +0 -4
  207. data/spec/data/test_pdfa.pdf +0 -0
  208. data/spec/data/video/SampleVideo_1080x720_2mb.flv +0 -0
  209. data/spec/data/video/SampleVideo_1080x720_2mb.mkv +0 -0
  210. data/spec/data/video/SampleVideo_1080x720_2mb.mp4 +0 -0
  211. data/spec/data/video/SampleVideo_176x144_2mb.3gp +0 -0
  212. data/spec/data/video/SampleVideo_320x240_2mb.3gp +0 -0
  213. data/spec/data/video/SampleVideo_360x240_2mb.flv +0 -0
  214. data/spec/data/video/SampleVideo_360x240_2mb.mkv +0 -0
  215. data/spec/data/video/SampleVideo_360x240_2mb.mp4 +0 -0
  216. data/spec/data/video/copyright.png +0 -0
  217. data/spec/data/xml/134476_ead.XML +0 -1
  218. data/spec/data/xml/134476_ead.pdf +0 -0
  219. data/spec/data/xml/134476_fo.XML +0 -383
  220. data/spec/data/xml/134476_raw.XML +0 -141
  221. data/spec/data/xml/ead2fo_pdf.xsl +0 -1453
  222. data/spec/data/xml/header_nolink_pdf.xsl +0 -120
  223. data/spec/data/xml/lookupLists.xsl +0 -488
  224. data/spec/data/xml/scope_eadToHTML.xsl +0 -2376
  225. data/spec/data/xml/scope_xmlToEAD_dom.xsl +0 -952
  226. data/spec/identifier_spec.rb +0 -161
  227. data/spec/spec_helper.rb +0 -58
  228. data/spec/test_types.yml +0 -12
  229. data/spec/type_database_spec.rb +0 -140
  230. data/tools/bcpkix-jdk15on-1.49.jar +0 -0
  231. data/tools/bcprov-jdk15on-1.49.jar +0 -0
  232. data/tools/pdfbox/preflight-app-1.8.10.jar +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a96a71d90952cf5d8be62d9b82ac6fc22c4f080a
4
- data.tar.gz: 79bda271ae8b628e96c7a3d19b65884a3fe1eee0
2
+ SHA256:
3
+ metadata.gz: 7f89add0e88c5d7a136475b303e5eec4da7af65ae6469ed24487e00c900871aa
4
+ data.tar.gz: '0902a88e237a8cf7a42f0ec0ea6aac4370590649aca894853a4f5de8b12dbb1e'
5
5
  SHA512:
6
- metadata.gz: 303f4353c79d988110668ddc1c4bb5867d4e644b30d1a6f60e24da13a2f8f99703ab1b8f5afba73ed11aee0cfdd8bad6e759e857350a97d734d021fcfca31c32
7
- data.tar.gz: 612a76df7a9907900aa292e68065f3c13d1362edffa01cbf2425edb8c8f41040d17871680ad7bab430a49790da96bba323ce2706ab13dfa39494ca8795e7d639
6
+ metadata.gz: 90d3b575f8b87aca635d7b526d26ce8a899626b83950e66ed7df382b4e983cf93e3bab4526d5fdbdd268c94e158c99f9296858816f4f630a29d7a7ae89ea73e0
7
+ data.tar.gz: dfb7854cacec55c33fe6e01d3cc834eb3debe1657366c0247803b3227e84113f9f230e6809462c212c659388b576faeed038464752f959997d39a84aabe52858
data/.gitignore CHANGED
@@ -7,6 +7,7 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /spec/work/
10
+ /spec/tmp/
10
11
  /tmp/
11
12
  *.bundle
12
13
  *.so
@@ -15,4 +16,7 @@
15
16
  mkmf.log
16
17
  /.idea/
17
18
  *.pyc
18
- tools/pdf/
19
+ tools/pdf/
20
+ /test*
21
+ /*~
22
+ /*.pdf
data/.travis.yml CHANGED
@@ -1,43 +1,61 @@
1
+ dist: bionic
1
2
  language: ruby
2
- sudo: false
3
- dist: trusty
4
3
  cache: bundler
4
+ sudo: false
5
5
  rvm:
6
- - 2.1.10
7
- - 2.2.8
8
- - 2.3.5
9
- - 2.4.2
6
+ - 2.3
7
+ - 2.4
8
+ - 2.5
9
+ - 2.6
10
10
  - ruby-head
11
- - jruby-9.0.5.0
12
- - jruby-9.1.9.0
11
+ - jruby-9.1
12
+ - jruby-9.2
13
13
  - jruby-head
14
14
  jdk:
15
- - openjdk8
16
- - oraclejdk8
15
+ - openjdk10
16
+ - openjdk11
17
17
  matrix:
18
18
  exclude:
19
- - rvm: 2.1.10
20
- jdk: oraclejdk8
21
- - rvm: 2.2.8
22
- jdk: oraclejdk8
23
- - rvm: 2.3.5
24
- jdk: oraclejdk8
25
- - rvm: 2.4.2
26
- jdk: oraclejdk8
19
+ - rvm: 2.3
20
+ jdk: openjdk10
21
+ - rvm: 2.4
22
+ jdk: openjdk10
23
+ - rvm: 2.5
24
+ jdk: openjdk10
25
+ - rvm: 2.6
26
+ jdk: openjdk10
27
27
  - rvm: ruby-head
28
- jdk: oraclejdk8
28
+ jdk: openjdk10
29
29
  allow_failures:
30
30
  - rvm: ruby-head
31
31
  - rvm: jruby-head
32
32
  branches:
33
33
  only:
34
- - master
34
+ - master
35
+ - v2
35
36
  before_install:
36
- - sudo add-apt-repository ppa:mc3man/trusty-media -y
37
- - sudo apt-get update -y
38
- - sudo apt-get install -y ffmpeg gstreamer0.10-ffmpeg
39
- - sudo pip install opf-fido --upgrade --ignore-installed six
40
-
37
+ - gem update --system
38
+ - gem --version
39
+ - sudo add-apt-repository ppa:mc3man/bionic-media -y
40
+ - sudo apt-get update -y -q
41
+ - sudo apt-get install
42
+ - sudo apt-get install -y -q ffmpeg ubuntu-restricted-extras
43
+ - sudo pip install --upgrade pip
44
+ - sudo pip install --upgrade --ignore-installed opf-fido six
45
+ - sudo wget -O droid.zip -q http://www.nationalarchives.gov.uk/documents/information-management/droid-binary-6.4-bin.zip
46
+ - sudo mkdir -p /opt/droid
47
+ - sudo unzip droid.zip -d /opt/droid
48
+ - sudo chmod 755 /opt/droid/droid.sh
49
+ - sudo locale-gen "en_US.UTF-8"
50
+ - echo 'Europe/Brussels' | sudo tee /etc/timezone
51
+ - export TZ=Europe/Brussels
52
+ - sudo dpkg-reconfigure --frontend noninteractive tzdata
53
+ - date
54
+ before_script:
55
+ - export TZ=Europe/Brussels
56
+ env:
57
+ - LC_ALL=en_US.UTF-8
58
+ - LANG=en_US.UTF-8
41
59
  addons:
42
60
  apt:
43
61
  packages:
data/README.md CHANGED
@@ -26,9 +26,9 @@ Or install it yourself as:
26
26
 
27
27
  ## Usage
28
28
 
29
- ### ::Libis::Format::TypeDatabase
29
+ ### ::Libis::Format::Library
30
30
 
31
- The type database is the core of the format services. It stores information about all the known formats.
31
+ The format database is the core of the format services. It stores information about all the known formats.
32
32
 
33
33
  ### ::Libis::Format::Identifier
34
34
 
data/base/Dockerfile ADDED
@@ -0,0 +1,35 @@
1
+ FROM ubuntu:18.04
2
+ RUN apt-get -q update \
3
+ && apt-get install -q -y --no-install-recommends \
4
+ wget \
5
+ unzip \
6
+ imagemagick \
7
+ python2.7 \
8
+ python-pip \
9
+ openjdk-8-jre-headless \
10
+ libreoffice \
11
+ ghostscript
12
+
13
+ RUN apt-get clean \
14
+ && rm -rf /var/lib/apt/lists/*
15
+
16
+ RUN pip install --upgrade pip && pip install opf-fido
17
+
18
+ RUN wget -q -O droid.zip "http://www.nationalarchives.gov.uk/documents/information-management/droid-binary-6.4-bin.zip" \
19
+ && mkdir -p /opt/droid \
20
+ && unzip -d /opt/droid droid.zip \
21
+ && chmod 755 /opt/droid/droid.sh \
22
+ && rm droid.zip
23
+
24
+ RUN wget -q -O fop.tar.gz "http://www.apache.org/dyn/closer.cgi?filename=/xmlgraphics/fop/binaries/fop-2.3-bin.tar.gz&action=download" \
25
+ && mkdir -p /opt/fop \
26
+ && tar xzf fop.tar.gz -C /opt/fop --strip-components=2 \
27
+ && rm fop.tar.gz
28
+
29
+ RUN echo "8\n9\n" | apt-get install tzdata
30
+ RUN mkdir -p /teneo/format/spec
31
+ ADD ./tools /teneo/format/tools
32
+ ADD ./data /teneo/format/data
33
+ ADD ./spec/data /teneo/format/spec/data
34
+ ADD ./base/rework_path /teneo/format/rework_path
35
+ CMD /bin/bash
@@ -0,0 +1,20 @@
1
+ FROM alpine:3.8
2
+ LABEL maintainer="kris.dekeyser@libis.be"
3
+ RUN apk update -q && apk upgrade -q
4
+ RUN apk add -q python2 py-pip openjdk8-jre ffmpeg libreoffice ttf-liberation ttf-freefont ttf-opensans sox git wget unzip sudo bash curl tar imagemagick
5
+ # install fido
6
+ RUN pip install -q --upgrade pip && pip install -q opf-fido
7
+ # install droid
8
+ RUN wget -q -O droid.zip http://www.nationalarchives.gov.uk/documents/information-management/droid-binary-6.4-bin.zip \
9
+ && mkdir -p /opt/droid \
10
+ && unzip -q -d /opt/droid droid.zip \
11
+ && chmod 755 /opt/droid/droid.sh \
12
+ && rm droid.zip
13
+ # install ImageMagick
14
+ RUN apk add -q imagemagick
15
+ ADD ../tools /tools
16
+ ADD ../data /cfg
17
+ VOLUME /data
18
+ WORKDIR /data
19
+
20
+ CMD ["/bin/bash", "-l"]
@@ -0,0 +1,56 @@
1
+ ARG ubuntu_ver=latest
2
+ ARG ruby_ver=2.5.3
3
+ ARG node_ver=10.15.0
4
+
5
+ FROM ubuntu:${ubuntu_ver}
6
+ LABEL maintainer="kris.dekeyser@libis.be"
7
+
8
+ ENV RUBY_ENV=${ruby_ver}
9
+ ENV NVM_DIR=/usr/local/nvm
10
+ ENV NODE_VER=${node_ver}
11
+ ENV NODE_PATH=$NVM_DIR/v$NODE_VER/lib/node_modules
12
+ ENV NODE_PATH=$NVM_DIR/versions/node/v$NODE_VER/bin
13
+ ENV PATH "${PATH}:${NODE_PATH}:${NODE_PATH}/npm"
14
+
15
+ RUN echo $RUBY_ENV
16
+
17
+ ENV DEBIAN_FRONTEND=noninteractive
18
+ RUN apt-get update -q \
19
+ && apt-get install -y -q --no-install-recommends software-properties-common apt-utils
20
+ RUN apt-add-repository -y ppa:rael-gc/rvm \
21
+ && apt-get update -q
22
+ RUN apt-get install -y -q --no-install-recommends \
23
+ build-essential \
24
+ gnupg2 \
25
+ git \
26
+ wget \
27
+ curl \
28
+ sudo \
29
+ unzip \
30
+ openjdk-8-jre-headless
31
+
32
+ ENV BASH_ENV='/etc/profile exec bash'
33
+ SHELL ["/bin/bash", "-l", "-c"]
34
+
35
+ RUN addgroup --gid 2000 teneo \
36
+ && adduser --uid 2000 --gid 2000 --disabled-password --gecos "Teneo user" teneo \
37
+ && usermod -L -s /bin/bash teneo
38
+ RUN echo 'teneo ALL = (ALL) NOPASSWD: ALL' >> /etc/sudoers
39
+
40
+ USER teneo
41
+
42
+ RUN gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
43
+
44
+ RUN curl -sSL https://get.rvm.io | bash -s stable
45
+
46
+ RUN echo 'gem: --no-document' > ${HOME}/.gemrc
47
+ RUN echo rvm install ${ruby_ver}
48
+ RUN echo rvm use ${RUBY_ENV}@teneo --create --ruby-version --ruby-gems
49
+
50
+ # required due to bug in rubygems (https://github.com/rubygems/rubygems/issues/2483)
51
+ RUN gem install rdoc bundler
52
+ RUN gem update --no-document --system
53
+ RUN rvm info
54
+ #ADD . /home/libis/libis_format
55
+ #WORKDIR /home/libis/libis_format
56
+ #RUN bundle install && bundle exec rake spec
data/base/rework_path ADDED
@@ -0,0 +1,20 @@
1
+ #!/bin/bash
2
+
3
+ CMD=$1
4
+ shift
5
+
6
+ readarray -d ',' -t mapping <<< "$VOLUME_MAPPING"
7
+
8
+ args=("$@")
9
+ #echo "args: ${args[@]}"
10
+ for map in "${mapping[@]}"
11
+ do
12
+ map="${map//[$'\t\r\n ']}"
13
+ readarray -d '=' -t m <<< "$map"
14
+ src="${m[0]//[$'\t\r\n ']}"
15
+ tgt="${m[1]//[$'\t\r\n ']}"
16
+ # echo "$src -> $tgt"
17
+ args=("${args[@]/$src/$tgt}")
18
+ # echo "args: ${args[@]}"
19
+ done
20
+ ${CMD} "${args[@]}"
data/docker_cfg.yml ADDED
@@ -0,0 +1 @@
1
+ :fop_jar: '/tools/fop.jar'
data/lib/libis/format.rb CHANGED
@@ -3,8 +3,11 @@ require 'libis/format/version'
3
3
  module Libis
4
4
  module Format
5
5
  autoload :Config, 'libis/format/config'
6
- autoload :TypeDatabase, 'libis/format/type_database'
7
- autoload :TypeDatabaseImpl, 'libis/format/type_database_impl'
6
+
7
+ autoload :Info, 'libis/format/info'
8
+ autoload :Library, 'libis/format/library'
9
+ autoload :YamlLoader, 'libis/format/yaml_loader'
10
+
8
11
  autoload :Identifier, 'libis/format/identifier'
9
12
 
10
13
  autoload :Tool, 'libis/format/tool'
@@ -15,4 +18,10 @@ module Libis
15
18
  TOOL_DIR = File.join(ROOT_DIR, 'tools')
16
19
 
17
20
  end
18
- end
21
+ end
22
+
23
+ class Object
24
+ def blank?
25
+ respond_to?(:empty?) ? !!empty? : !self
26
+ end unless defined? :blank?
27
+ end
@@ -67,7 +67,7 @@ module Libis
67
67
  arguments that any of the targetted converters support.
68
68
 
69
69
  The source file's format will be identified by the Libis::Format::Identifier and the target file's format
70
- will be derived from the file's extension. The Libis::Format::TypeDatabase is used to relate extensions
70
+ will be derived from the file's extension. The Libis::Format::Library is used to relate extensions
71
71
  with formats.
72
72
 
73
73
  DESC
@@ -89,7 +89,7 @@ module Libis
89
89
  A source file name and target file name should be supplied. The source file should exist and be readable.
90
90
  The target file should be writable, but should not exist.
91
91
 
92
- The target file's format will be derived from the file's extension. The Libis::Format::TypeDatabase is used
92
+ The target file's format will be derived from the file's extension. The Libis::Format::Library is used
93
93
  to relate extensions with formats.
94
94
 
95
95
  DESC
@@ -265,11 +265,11 @@ module Libis
265
265
  end
266
266
 
267
267
  def extname(format)
268
- Libis::Format::TypeDatabase.type_extentions(format).first
268
+ Libis::Format::Library.get_field(format, :extensions)
269
269
  end
270
270
 
271
271
  def get_format(file_name)
272
- Libis::Format::TypeDatabase.ext_types(File.extname(file_name)).first
272
+ Libis::Format::Library.get_field_by(:extension, File.extname(file_name), :format)
273
273
  end
274
274
 
275
275
  def format_identifier(file)
@@ -1,5 +1,6 @@
1
1
  # encoding: utf-8
2
2
  require 'os'
3
+ require 'libis-tools'
3
4
 
4
5
  module Libis
5
6
  module Format
@@ -9,20 +10,23 @@ module Libis
9
10
 
10
11
  Config[:converter_chain_max_level] = 8
11
12
 
12
- Config[:java_path] = 'java'
13
- Config[:j2kdriver] = 'j2kdriver'
14
- Config[:soffice_path] = 'soffice'
15
- Config[:ghostscript_path] = 'gs'
16
- Config[:droid_path] = '/opt/droid/droid.sh'
17
- Config[:fido_path] = '/usr/local/bin/fido'
18
- Config[:fop_jar] = '/opt/fop/current/fop/build/fop.jar'
19
- Config[:ffmpeg_path] = 'ffmpeg'
13
+ Config[:java_cmd] = 'java'
14
+ Config[:j2k_cmd] = 'j2kdriver'
15
+ Config[:soffice_cmd] = 'soffice'
16
+ Config[:ghostscript_cmd] = 'gs'
17
+ Config[:droid_cmd] = '/opt/droid/droid.sh'
18
+ Config[:droid_temp_path] = '/tmp'
19
+ Config[:fido_cmd] = '/usr/local/bin/fido'
20
+ Config[:fop_jar] = File.join(Libis::Format::TOOL_DIR, 'fop', 'build', 'fop.jar')
21
+ Config[:ffmpeg_cmd] = 'ffmpeg'
20
22
  Config[:fido_formats] = [(File.join(Libis::Format::DATA_DIR, 'lias_formats.xml'))]
21
23
  Config[:pdf_tool] = File.join(Libis::Format::TOOL_DIR, 'PdfTool.jar')
24
+ Config[:preflight_jar] = File.join(Libis::Format::TOOL_DIR, 'pdfbox', 'preflight-app-2.0.13.jar')
22
25
  # noinspection RubyStringKeysInHashInspection
23
26
  Config[:xml_validations] = [['archive/ead', File.join(Libis::Format::DATA_DIR, 'ead.xsd')]]
24
- Config[:type_database] = File.join(Libis::Format::DATA_DIR, 'types.yml')
25
- Config[:raw_audio_convert_cmd] = 'sox %s -e signed -b 16 -t wav %s rate %d channels %d'
27
+ Config[:format_library_implementation] = 'Libis::Format::YamlLoader.instance'
28
+ Config[:format_library_database] = File.join(Libis::Format::DATA_DIR, 'types.yml')
29
+ Config[:raw_audio_convert_cmd] = 'sox -V1 %s -e signed -b 16 -t wav %s rate %d channels %d'
26
30
  Config[:watermark_font] = '/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf'
27
31
  Config[:timeouts] = {
28
32
  droid: 20 * 60,
@@ -32,6 +36,7 @@ module Libis
32
36
  fop: 5 * 60,
33
37
  identification_tool: 5 * 60,
34
38
  office_to_pdf: 5 * 60,
39
+ pdf_select: 5 * 60,
35
40
  pdf_copy: 5 * 60,
36
41
  pdf_merge: 5 * 60,
37
42
  pdf_optimizer: 5 * 60,
@@ -15,7 +15,7 @@ module Libis
15
15
  end
16
16
 
17
17
  def self.output_types(format = nil)
18
- return [] unless input_types.include?(format)
18
+ return [] unless format.nil? || input_types.include?(format)
19
19
  [:MP3, :FLAC, :AC3, :AAC, :WMA, :ALAC, :WAV, :AIFF, :AMR, :AU, :M4A]
20
20
  end
21
21
 
@@ -69,50 +69,16 @@ module Libis
69
69
  (@options[:preset] ||= {})[stream] = name
70
70
  end
71
71
 
72
- # def encoder(value)
73
- # @options[:encoder] = value
74
- # end
75
- #
76
- # def encoder_options(value)
77
- # @options[:encoder_options] = value
78
- # end
79
-
80
72
  def convert(source, target, _format, opts = {})
81
73
  super
82
74
 
83
75
  FileUtils.mkpath(File.dirname(target))
84
76
 
85
- if source.is_a? Array
86
-
87
- assemble_and_convert(source, target)
88
-
89
- elsif File.directory?(source)
90
-
91
- sources = Dir[File.join(source, '**', '*')].reject {|p| File.directory? p}
92
- assemble_and_convert(sources, target)
77
+ convert_file(source, target)
93
78
 
94
- else
95
-
96
- convert_file(source, target)
97
-
98
- end
99
-
100
- target
101
-
102
- end
103
-
104
- def assemble_and_convert(sources, target)
105
- Tempfile.create(%w(list .txt)) do |f|
106
- sources.each {|src| f.puts src}
107
- opts[:global] ||= []
108
- opts[:global] += %w(-f concat)
109
- f.close
110
- target = convert_file(f.to_path, target)
111
- end
112
- target
113
79
  end
114
80
 
115
- def sounds_like(file1, file2, threshold, rate, channels)
81
+ def self.sounds_like(file1, file2, threshold, rate, channels)
116
82
  rate ||= 96000
117
83
  channels ||= 2
118
84
  threshold ||= 0.85
@@ -4,7 +4,8 @@
4
4
  require 'tmpdir'
5
5
  require 'libis/tools/logger'
6
6
  require 'libis/tools/temp_file'
7
- require 'libis/format/type_database'
7
+ require 'libis/tools/extend/string'
8
+ require 'libis/format/library'
8
9
 
9
10
  require_relative 'repository'
10
11
 
@@ -22,10 +23,23 @@ module Libis
22
23
  @flags = {}
23
24
  end
24
25
 
26
+ def self.category
27
+ :converter
28
+ end
29
+
30
+ def check_file_exist(file)
31
+ unless File.exist? file
32
+ error "Cannot find file '#{file}'."
33
+ return false
34
+ end
35
+ true
36
+ end
37
+
25
38
  def convert(source, target, format, opts = {})
26
- unless File.exist? source
27
- error "Cannot find file '#{source}'."
28
- return nil
39
+ if source.is_a?(Array)
40
+ return nil unless source.map { |f| check_file_exist(f) }.reduce(:&)
41
+ else
42
+ return nil unless check_file_exist(source)
29
43
  end
30
44
  @options.merge!(opts[:options]) if opts[:options]
31
45
  @flags.merge!(opts[:flags]) if opts[:flags]
@@ -51,7 +65,7 @@ module Libis
51
65
  target
52
66
  end
53
67
 
54
- def Base.inherited( klass )
68
+ def Base.inherited(klass)
55
69
 
56
70
  Repository.register klass
57
71
 
@@ -73,12 +87,12 @@ module Libis
73
87
  end
74
88
 
75
89
  def input_mimetype?(mimetype)
76
- type_id = TypeDatabase.instance.mime_types(mimetype).first
90
+ type_id = Libis::Format::Library.get_field_by(:mimetype, mimetype, :format)
77
91
  input_type? type_id
78
92
  end
79
93
 
80
94
  def output_mimetype?(mimetype)
81
- type_id = TypeDatabase.instance.mime_types(mimetype).first
95
+ type_id = Libis::Format::Library.get_field_by(:mimetype, mimetype, :format)
82
96
  output_type? type_id
83
97
  end
84
98
 
@@ -91,7 +105,7 @@ module Libis
91
105
  end
92
106
 
93
107
  def extension?(extension)
94
- !TypeDatabase.ext_types(extension).first.nil?
108
+ !Libis::Format::Library.get_field_by(:extension, extension, :format).nil?
95
109
  end
96
110
 
97
111
  end