docverter-server 1.0.1-java → 1.0.2-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/.vendor_urls +2 -2
  2. data/Gemfile.lock +2 -1
  3. data/Procfile +1 -1
  4. data/README.md +4 -0
  5. data/config.ru +1 -0
  6. data/doc/api.md +15 -4
  7. data/doc/examples/php/markdown_to_pdf.php +26 -0
  8. data/doc/examples/{html_to_encrypted_pdf → shell/html_to_encrypted_pdf}/convert.sh +0 -0
  9. data/doc/examples/{html_to_encrypted_pdf → shell/html_to_encrypted_pdf}/imfeldoublepica.ttf +0 -0
  10. data/doc/examples/{html_to_encrypted_pdf → shell/html_to_encrypted_pdf}/input.html +0 -0
  11. data/doc/examples/{html_to_encrypted_pdf → shell/html_to_encrypted_pdf}/marcellus.ttf +0 -0
  12. data/doc/examples/{html_to_encrypted_pdf → shell/html_to_encrypted_pdf}/stylesheet.css +0 -0
  13. data/doc/examples/{html_to_pdf → shell/html_to_pdf}/convert.sh +0 -0
  14. data/doc/examples/{html_to_pdf → shell/html_to_pdf}/imfeldoublepica.ttf +0 -0
  15. data/doc/examples/{html_to_pdf → shell/html_to_pdf}/input.html +0 -0
  16. data/doc/examples/{html_to_pdf → shell/html_to_pdf}/marcellus.ttf +0 -0
  17. data/doc/examples/{html_to_pdf → shell/html_to_pdf}/stylesheet.css +0 -0
  18. data/doc/examples/{markdown_to_epub → shell/markdown_to_epub}/chapter1.md +0 -0
  19. data/doc/examples/{markdown_to_epub → shell/markdown_to_epub}/chapter2.md +0 -0
  20. data/doc/examples/{markdown_to_epub → shell/markdown_to_epub}/convert.sh +0 -0
  21. data/doc/examples/{markdown_to_epub → shell/markdown_to_epub}/document-open.png +0 -0
  22. data/doc/examples/{markdown_to_epub → shell/markdown_to_epub}/markdown_to_epub.epub +0 -0
  23. data/doc/examples/{markdown_to_epub → shell/markdown_to_epub}/markdown_to_epub.epub.html +0 -0
  24. data/doc/examples/{markdown_to_epub → shell/markdown_to_epub}/metadata.xml +0 -0
  25. data/doc/examples/{markdown_to_epub → shell/markdown_to_epub}/stylesheet.css +0 -0
  26. data/doc/examples/{markdown_to_epub → shell/markdown_to_epub}/title.txt +0 -0
  27. data/doc/examples/{markdown_to_mobi → shell/markdown_to_mobi}/chapter1.md +0 -0
  28. data/doc/examples/{markdown_to_mobi → shell/markdown_to_mobi}/chapter2.md +0 -0
  29. data/doc/examples/{markdown_to_mobi → shell/markdown_to_mobi}/convert.sh +0 -0
  30. data/doc/examples/{markdown_to_mobi → shell/markdown_to_mobi}/document-open.png +0 -0
  31. data/doc/examples/{markdown_to_mobi → shell/markdown_to_mobi}/metadata.xml +0 -0
  32. data/doc/examples/{markdown_to_mobi → shell/markdown_to_mobi}/stylesheet.css +0 -0
  33. data/doc/examples/{markdown_to_mobi → shell/markdown_to_mobi}/title.txt +0 -0
  34. data/doc/examples/{markdown_to_pdf → shell/markdown_to_pdf}/chapter1.md +0 -0
  35. data/doc/examples/{markdown_to_pdf → shell/markdown_to_pdf}/chapter2.md +0 -0
  36. data/doc/examples/{markdown_to_pdf → shell/markdown_to_pdf}/convert.sh +0 -0
  37. data/doc/examples/{markdown_to_pdf → shell/markdown_to_pdf}/imfeldoublepica.ttf +0 -0
  38. data/doc/examples/{markdown_to_pdf → shell/markdown_to_pdf}/manifest.yml +0 -0
  39. data/doc/examples/{markdown_to_pdf → shell/markdown_to_pdf}/marcellus.ttf +0 -0
  40. data/doc/examples/{markdown_to_pdf → shell/markdown_to_pdf}/stylesheet.css +0 -0
  41. data/docverter.gemspec +1 -0
  42. data/lib/docverter-server/app.rb +5 -0
  43. data/lib/docverter-server/error.rb +13 -0
  44. data/lib/docverter-server/error_handler.rb +23 -0
  45. data/lib/docverter-server/jars/tag_config.xml +316 -0
  46. data/lib/docverter-server/manifest.rb +3 -5
  47. data/lib/docverter-server/runner/base.rb +10 -3
  48. data/lib/docverter-server/runner/pdf.rb +2 -1
  49. data/lib/docverter-server/version.rb +1 -1
  50. data/lib/docverter-server.rb +2 -0
  51. metadata +57 -35
data/.vendor_urls CHANGED
@@ -1,3 +1,3 @@
1
1
  https://s3.amazonaws.com/docverter-binaries/calibre.tar.gz
2
- https://s3.amazonaws.com/docverter-binaries/pandoc.tar.gz
3
- https://s3.amazonaws.com/docverter-binaries/pandoc-templates.tar.gz
2
+ https://s3.amazonaws.com/docverter-binaries/pandoc-1.12.0.2.tar.gz
3
+ https://s3.amazonaws.com/docverter-binaries/pandoc-templates-1.12.0.2.tar.gz
data/Gemfile.lock CHANGED
@@ -1,10 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- docverter-server (1.0.0-java)
4
+ docverter-server (1.0.1-java)
5
5
  flying_saucer
6
6
  mime-types
7
7
  mizuno
8
+ multi_json
8
9
  rake
9
10
  sinatra
10
11
 
data/Procfile CHANGED
@@ -1 +1 @@
1
- web: mizuno -I lib -p $PORT
1
+ web: bundle exec mizuno -I lib -p $PORT
data/README.md CHANGED
@@ -29,4 +29,8 @@ more export options.
29
29
 
30
30
  ## Usage
31
31
 
32
+ ###### Ruby
32
33
  See `doc/api.md` and [Docverter Ruby](https://github.com/docverter/docverter-ruby) for usage documentation.
34
+
35
+ ###### PHP
36
+ See `doc/php/markdown_to_pdf.php` for usage documentation.
data/config.ru CHANGED
@@ -1,3 +1,4 @@
1
1
  require 'docverter-server'
2
2
 
3
+ use DocverterServer::ErrorHandler
3
4
  run DocverterServer::App.new
data/doc/api.md CHANGED
@@ -8,20 +8,31 @@ Conversions
8
8
 
9
9
  The API has one endpoint:
10
10
 
11
- POST https://api.docverter.com/v1/convert
11
+ POST http://c.docverter.com/convert
12
12
 
13
13
  The contents of your POST should be `multipart/form-data` and consist of your input file(s) and options which describe your conversion. For example:
14
14
 
15
- curl -u "your_api_key:" \
15
+ curl \
16
16
  --form input_files[]=@chapter1.md \
17
17
  --form input_files[]=@chapter2.md \
18
18
  --form input_files[]=@chapter3.md \
19
19
  --form from=markdown \
20
20
  --form to=pdf \
21
21
  --form css=stylesheet.css \
22
- --form other_files[]=@stylesheet.css
22
+ --form other_files[]=@stylesheet.css \
23
+ http://c.docverter.com/convert
24
+
25
+ You can also use [httpie](https://github.com/jkbr/httpie), another `curl`-like command line tool:
23
26
 
24
- The `examples` directory contains several examples showing off various API options.
27
+ http --form -f POST http://c.docverter.com/convert \
28
+ from=markdown \
29
+ to=html \
30
+ input_files[]@example.md \
31
+ --output out.html
32
+
33
+ The `examples` directory contains several examples showing off various API options.
34
+
35
+ *Note: At this time `wget` does not support `multipart/form-data` and so cannot be used to talk to Docverter*
25
36
 
26
37
  Full Option Reference
27
38
  =====================
@@ -0,0 +1,26 @@
1
+ <?//set POST variables
2
+ $url = 'http://c.docverter.com/convert';
3
+ $fields = array('from' => 'markdown',
4
+ 'to' => 'pdf',
5
+ 'input_files[]' => "@/".realpath('markdown.md').";type=text/x-markdown; charset=UTF-8"
6
+ );
7
+
8
+ //open connection
9
+ $ch = curl_init();
10
+
11
+ curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data"));
12
+ curl_setopt($ch, CURLOPT_URL, $url);
13
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
14
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //needed so that the $result=curl_exec() output is the file and isn't just true/false
15
+
16
+ //execute post
17
+ $result = curl_exec($ch);
18
+
19
+ //close connection
20
+ curl_close($ch);
21
+
22
+ //write to file
23
+ $fp = fopen('uploads/result.pdf', 'w'); //make sure the directory markdown.md is in and the result.pdf will go to has proper permissions
24
+ fwrite($fp, $result);
25
+ fclose($fp);
26
+ ?>
data/docverter.gemspec CHANGED
@@ -22,6 +22,7 @@ Gem::Specification.new do |gem|
22
22
  gem.add_dependency('rake')
23
23
  gem.add_dependency('mizuno')
24
24
  gem.add_dependency('flying_saucer')
25
+ gem.add_dependency('multi_json')
25
26
 
26
27
  gem.add_development_dependency("mocha")
27
28
  gem.add_development_dependency("shoulda")
@@ -2,6 +2,11 @@ require 'sinatra/base'
2
2
  require 'fileutils'
3
3
 
4
4
  class DocverterServer::App < Sinatra::Base
5
+
6
+ set :show_exceptions, false
7
+ set :dump_errors, false
8
+ set :raise_errors, true
9
+
5
10
  post '/convert' do
6
11
 
7
12
  dir = Dir.mktmpdir
@@ -0,0 +1,13 @@
1
+ module DocverterServer
2
+ class InvalidManifestError < RuntimeError
3
+ def to_s
4
+ "invalid manifest: #{super}"
5
+ end
6
+ end
7
+
8
+ class CommandError < RuntimeError
9
+ def to_s
10
+ "command error: #{super}"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ require 'multi_json'
2
+
3
+ module DocverterServer
4
+ class ErrorHandler
5
+ def initialize(app)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ begin
11
+ @app.call env
12
+ rescue => ex
13
+ env['rack.errors'].puts ex
14
+ env['rack.errors'].puts ex.backtrace.join("\n")
15
+ env['rack.errors'].flush
16
+
17
+ hash = { :error => ex.to_s }
18
+
19
+ [500, {'Content-Type' => 'application/json'}, [MultiJson.dump(hash)]]
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,316 @@
1
+ <!--
2
+ General description of a tag is in the following format:
3
+
4
+ <tag name="TAG NAME"
5
+ content="all | text | none"
6
+ section="all | head | body"
7
+ deprecated="true | false"
8
+ unique="true | false"
9
+ ignore-permitted="true | false">
10
+
11
+ <fatal-tags>LIST OF COMMA-SEPARATED TAGS</fatal-tags>
12
+ <req-enclosing-tags>LIST OF COMMA-SEPARATED TAGS</req-enclosing-tags>
13
+ <forbidden-tags>LIST OF COMMA-SEPARATED TAGS</forbidden-tags>
14
+ <allowed-children-tags>LIST OF COMMA-SEPARATED TAGS</allowed-children-tags>
15
+ <higher-level-tags>LIST OF COMMA-SEPARATED TAGS</higher-level-tags>
16
+ <close-before-copy-inside-tags>LIST OF COMMA-SEPARATED TAGS</close-before-copy-inside-tags>
17
+ <close-inside-copy-after-tags>LIST OF COMMA-SEPARATED TAGS</close-inside-copy-after-tags>
18
+ <close-before-tags>LIST OF COMMA-SEPARATED TAGS</close-before-tags>
19
+
20
+ </tag>
21
+
22
+ Explanation of dependancies:
23
+
24
+ * fatal tags - required outer tag - the tag will be ignored during parsing (will be skipped)
25
+ if this fatal tag is missing. For example, most web browsers ignore elements TD, TR, TBODY
26
+ if they are not in the context of TABLE tag.
27
+ * required enclosing tags - if there is no such, it is implicitely created. For example if TD
28
+ is out of TR - open TR is created before.
29
+ * forbidden tags - it is not allowed to occure inside - for example FORM cannot be inside
30
+ other FORM and it will be ignored during cleanup.
31
+ * allowed children tags - for example TR allowes TD and TH. If there are some dependant
32
+ allowed tags defined then cleaner ignores other tags, treating them as unallowed, unless
33
+ they are in some other relationship with this tag.
34
+ * higher level tags - for example for TR higher tags are THEAD, TBODY, TFOOT.
35
+ * close-before-copy-inside-tags - tags that must be closed and copied - for example, in
36
+ <a href="#"><div>.... tag A must be closed before DIV but copied again inside DIV.
37
+ * close-inside-copy-after-tags - tags that must be closed before closing this tag and copied
38
+ again after - for example, in <i><b>at</i> first</b> text tag B must be closed before
39
+ closing I, but it must be copied again after resulting finally in sequence:
40
+ <i><b>at</b></i&><b> first</b> text.
41
+ * close-before-tag - tags that simply must be closed before actual tag - for example TR will be closed
42
+ before open TABLE tag.
43
+ -->
44
+
45
+ <tags>
46
+ <tag name="div" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
47
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
48
+ <close-before-tags>p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
49
+ </tag>
50
+ <tag name="bookmark" content="all" section="head" deprecated="false" unique="false" ignore-permitted="false"/>
51
+ <tag name="bookmarks" content="all" section="head" deprecated="false" unique="false" ignore-permitted="false"/>
52
+ <tag name="span" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
53
+ <tag name="meta" content="none" section="head" deprecated="false" unique="false" ignore-permitted="false"/>
54
+ <tag name="link" content="none" section="head" deprecated="false" unique="false" ignore-permitted="false"/>
55
+ <tag name="title" content="text" section="head" deprecated="false" unique="true" ignore-permitted="false"/>
56
+ <tag name="style" content="text" section="head" deprecated="false" unique="false" ignore-permitted="false"/>
57
+ <tag name="bgsound" content="none" section="head" deprecated="false" unique="false" ignore-permitted="false"/>
58
+ <tag name="h1" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
59
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
60
+ <close-before-tags>h1,h2,h3,h4,h5,h6,p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
61
+ </tag>
62
+ <tag name="h2" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
63
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
64
+ <close-before-tags>h1,h2,h3,h4,h5,h6,p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
65
+ </tag>
66
+ <tag name="h3" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
67
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
68
+ <close-before-tags>h1,h2,h3,h4,h5,h6,p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
69
+ </tag>
70
+ <tag name="h4" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
71
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
72
+ <close-before-tags>h1,h2,h3,h4,h5,h6,p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
73
+ </tag>
74
+ <tag name="h5" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
75
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
76
+ <close-before-tags>h1,h2,h3,h4,h5,h6,p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
77
+ </tag>
78
+ <tag name="h6" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
79
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
80
+ <close-before-tags>h1,h2,h3,h4,h5,h6,p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
81
+ </tag>
82
+ <tag name="p" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
83
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
84
+ <close-before-tags>p,p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
85
+ </tag>
86
+ <tag name="strong" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
87
+ <tag name="em" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
88
+ <tag name="abbr" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
89
+ <tag name="acronym" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
90
+ <tag name="address" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
91
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
92
+ <close-before-tags>p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
93
+ </tag>
94
+ <tag name="bdo" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
95
+ <tag name="blockquote" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
96
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
97
+ <close-before-tags>p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
98
+ </tag>
99
+ <tag name="cite" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
100
+ <tag name="q" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
101
+ <tag name="code" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
102
+ <tag name="ins" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
103
+ <tag name="del" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
104
+ <tag name="dfn" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
105
+ <tag name="kbd" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
106
+ <tag name="pre" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
107
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
108
+ <close-before-tags>p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
109
+ </tag>
110
+ <tag name="samp" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
111
+ <tag name="listing" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
112
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
113
+ <close-before-tags>p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
114
+ </tag>
115
+ <tag name="var" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
116
+ <tag name="br" content="none" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
117
+ <tag name="wbr" content="none" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
118
+ <tag name="nobr" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
119
+ <close-before-tags>nobr</close-before-tags>
120
+ </tag>
121
+ <tag name="xmp" content="text" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
122
+ <tag name="a" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
123
+ <close-before-tags>a</close-before-tags>
124
+ </tag>
125
+ <tag name="base" content="none" section="head" deprecated="false" unique="false" ignore-permitted="false"/>
126
+ <tag name="img" content="none" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
127
+ <tag name="area" content="none" section="body" deprecated="false" unique="false" ignore-permitted="false">
128
+ <fatal-tags>map</fatal-tags>
129
+ <close-before-tags>area</close-before-tags>
130
+ </tag>
131
+ <tag name="map" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
132
+ <close-before-tags>map</close-before-tags>
133
+ </tag>
134
+ <tag name="object" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
135
+ <tag name="param" content="none" section="body" deprecated="false" unique="false" ignore-permitted="false">
136
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
137
+ <close-before-tags>p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
138
+ </tag>
139
+ <tag name="applet" content="all" section="body" deprecated="true" unique="false" ignore-permitted="false"/>
140
+ <tag name="xml" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
141
+ <tag name="ul" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
142
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
143
+ <close-before-tags>p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
144
+ </tag>
145
+ <tag name="ol" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
146
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
147
+ <close-before-tags>p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
148
+ </tag>
149
+ <tag name="li" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
150
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
151
+ <close-before-tags>li,p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
152
+ </tag>
153
+ <tag name="dl" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
154
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
155
+ <close-before-tags>p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
156
+ </tag>
157
+ <tag name="dt" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
158
+ <close-before-tags>dt,dd</close-before-tags>
159
+ </tag>
160
+ <tag name="dd" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
161
+ <close-before-tags>dt,dd</close-before-tags>
162
+ </tag>
163
+ <tag name="menu" content="all" section="body" deprecated="true" unique="false" ignore-permitted="false">
164
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
165
+ <close-before-tags>p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
166
+ </tag>
167
+ <tag name="dir" content="all" section="body" deprecated="true" unique="false" ignore-permitted="false">
168
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
169
+ <close-before-tags>p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
170
+ </tag>
171
+ <tag name="table" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
172
+ <allowed-children-tags>tr,tbody,thead,tfoot,colgroup,col,form,caption,tr</allowed-children-tags>
173
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
174
+ <close-before-tags>tr,thead,tbody,tfoot,caption,colgroup,table,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param</close-before-tags>
175
+ </tag>
176
+ <tag name="tr" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
177
+ <fatal-tags>table</fatal-tags>
178
+ <req-enclosing-tags>tbody</req-enclosing-tags>
179
+ <allowed-children-tags>td,th</allowed-children-tags>
180
+ <higher-level-tags>thead,tfoot</higher-level-tags>
181
+ <close-before-tags>tr,td,th,caption,colgroup</close-before-tags>
182
+ </tag>
183
+ <tag name="td" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
184
+ <fatal-tags>table</fatal-tags>
185
+ <req-enclosing-tags>tr</req-enclosing-tags>
186
+ <close-before-tags>td,th,caption,colgroup</close-before-tags>
187
+ </tag>
188
+ <tag name="th" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
189
+ <fatal-tags>table</fatal-tags>
190
+ <req-enclosing-tags>tr</req-enclosing-tags>
191
+ <close-before-tags>td,th,caption,colgroup</close-before-tags>
192
+ </tag>
193
+ <tag name="tbody" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
194
+ <fatal-tags>table</fatal-tags>
195
+ <allowed-children-tags>tr,form</allowed-children-tags>
196
+ <close-before-tags>td,th,tr,tbody,thead,tfoot,caption,colgroup</close-before-tags>
197
+ </tag>
198
+ <tag name="thead" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
199
+ <fatal-tags>table</fatal-tags>
200
+ <allowed-children-tags>tr,form</allowed-children-tags>
201
+ <close-before-tags>td,th,tr,tbody,thead,tfoot,caption,colgroup</close-before-tags>
202
+ </tag>
203
+ <tag name="tfoot" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
204
+ <fatal-tags>table</fatal-tags>
205
+ <allowed-children-tags>tr,form</allowed-children-tags>
206
+ <close-before-tags>td,th,tr,tbody,thead,tfoot,caption,colgroup</close-before-tags>
207
+ </tag>
208
+ <tag name="col" content="none" section="body" deprecated="false" unique="false" ignore-permitted="false">
209
+ <fatal-tags>table</fatal-tags>
210
+ </tag>
211
+ <tag name="colgroup" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
212
+ <fatal-tags>table</fatal-tags>
213
+ <allowed-children-tags>col</allowed-children-tags>
214
+ <close-before-tags>td,th,tr,tbody,thead,tfoot,caption,colgroup</close-before-tags>
215
+ </tag>
216
+ <tag name="caption" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
217
+ <fatal-tags>table</fatal-tags>
218
+ <close-before-tags>td,th,tr,tbody,thead,tfoot,caption,colgroup</close-before-tags>
219
+ </tag>
220
+ <tag name="form" content="all" section="body" deprecated="false" unique="false" ignore-permitted="true">
221
+ <forbidden-tags>form</forbidden-tags>
222
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
223
+ <close-before-tags>option,optgroup,textarea,select,fieldset,p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
224
+ </tag>
225
+ <tag name="input" content="none" section="body" deprecated="false" unique="false" ignore-permitted="false">
226
+ <close-before-tags>select,optgroup,option</close-before-tags>
227
+ </tag>
228
+ <tag name="textarea" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
229
+ <close-before-tags>select,optgroup,option</close-before-tags>
230
+ </tag>
231
+ <tag name="select" content="all" section="body" deprecated="false" unique="false" ignore-permitted="true">
232
+ <allowed-children-tags>option,optgroup</allowed-children-tags>
233
+ <close-before-tags>option,optgroup,select</close-before-tags>
234
+ </tag>
235
+ <tag name="option" content="text" section="body" deprecated="false" unique="false" ignore-permitted="true">
236
+ <fatal-tags>select</fatal-tags>
237
+ <close-before-tags>option</close-before-tags>
238
+ </tag>
239
+ <tag name="optgroup" content="all" section="body" deprecated="false" unique="false" ignore-permitted="true">
240
+ <fatal-tags>select</fatal-tags>
241
+ <allowed-children-tags>option</allowed-children-tags>
242
+ <close-before-tags>optgroup</close-before-tags>
243
+ </tag>
244
+ <tag name="button" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
245
+ <close-before-tags>select,optgroup,option</close-before-tags>
246
+ </tag>
247
+ <tag name="label" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
248
+ <tag name="fieldset" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
249
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
250
+ <close-before-tags>p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
251
+ </tag>
252
+ <tag name="legend" content="text" section="body" deprecated="false" unique="false" ignore-permitted="false">
253
+ <req-enclosing-tags>fieldset</req-enclosing-tags>
254
+ <close-before-tags>legend</close-before-tags>
255
+ </tag>
256
+ <tag name="isindex" content="none" section="body" deprecated="true" unique="false" ignore-permitted="false">
257
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
258
+ <close-before-tags>p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
259
+ </tag>
260
+ <tag name="script" content="all" section="all" deprecated="false" unique="false" ignore-permitted="false"/>
261
+ <tag name="noscript" content="all" section="all" deprecated="false" unique="false" ignore-permitted="false"/>
262
+ <tag name="b" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
263
+ <close-inside-copy-after-tags>u,i,tt,sub,sup,big,small,strike,blink,s</close-inside-copy-after-tags>
264
+ </tag>
265
+ <tag name="i" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
266
+ <close-inside-copy-after-tags>b,u,tt,sub,sup,big,small,strike,blink,s</close-inside-copy-after-tags>
267
+ </tag>
268
+ <tag name="u" content="all" section="body" deprecated="true" unique="false" ignore-permitted="false">
269
+ <close-inside-copy-after-tags>b,i,tt,sub,sup,big,small,strike,blink,s</close-inside-copy-after-tags>
270
+ </tag>
271
+ <tag name="tt" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
272
+ <close-inside-copy-after-tags>b,u,i,sub,sup,big,small,strike,blink,s</close-inside-copy-after-tags>
273
+ </tag>
274
+ <tag name="sub" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
275
+ <close-inside-copy-after-tags>b,u,i,tt,sup,big,small,strike,blink,s</close-inside-copy-after-tags>
276
+ </tag>
277
+ <tag name="sup" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
278
+ <close-inside-copy-after-tags>b,u,i,tt,sub,big,small,strike,blink,s</close-inside-copy-after-tags>
279
+ </tag>
280
+ <tag name="big" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
281
+ <close-inside-copy-after-tags>b,u,i,tt,sub,sup,small,strike,blink,s</close-inside-copy-after-tags>
282
+ </tag>
283
+ <tag name="small" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
284
+ <close-inside-copy-after-tags>b,u,i,tt,sub,sup,big,strike,blink,s</close-inside-copy-after-tags>
285
+ </tag>
286
+ <tag name="strike" content="all" section="body" deprecated="true" unique="false" ignore-permitted="false">
287
+ <close-inside-copy-after-tags>b,u,i,tt,sub,sup,big,small,blink,s</close-inside-copy-after-tags>
288
+ </tag>
289
+ <tag name="blink" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
290
+ <close-inside-copy-after-tags>b,u,i,tt,sub,sup,big,small,strike,s</close-inside-copy-after-tags>
291
+ </tag>
292
+ <tag name="marquee" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false">
293
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
294
+ <close-before-tags>p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
295
+ </tag>
296
+ <tag name="s" content="all" section="body" deprecated="true" unique="false" ignore-permitted="false">
297
+ <close-inside-copy-after-tags>b,u,i,tt,sub,sup,big,small,strike,blink</close-inside-copy-after-tags>
298
+ </tag>
299
+ <tag name="hr" content="none" section="body" deprecated="false" unique="false" ignore-permitted="false">
300
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
301
+ <close-before-tags>p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
302
+ </tag>
303
+ <tag name="font" content="all" section="body" deprecated="true" unique="false" ignore-permitted="false"/>
304
+ <tag name="basefont" content="none" section="body" deprecated="true" unique="false" ignore-permitted="false"/>
305
+ <tag name="center" content="all" section="body" deprecated="true" unique="false" ignore-permitted="false">
306
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
307
+ <close-before-tags>p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
308
+ </tag>
309
+ <tag name="comment" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
310
+ <tag name="server" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
311
+ <tag name="iframe" content="all" section="body" deprecated="false" unique="false" ignore-permitted="false"/>
312
+ <tag name="embed" content="none" section="body" deprecated="false" unique="false" ignore-permitted="false">
313
+ <close-before-copy-inside-tags>a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font</close-before-copy-inside-tags>
314
+ <close-before-tags>p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml</close-before-tags>
315
+ </tag>
316
+ </tags>
@@ -2,8 +2,6 @@ require 'yaml'
2
2
 
3
3
  class DocverterServer::Manifest
4
4
 
5
- class InvalidManifestError < RuntimeError; end
6
-
7
5
  def pdf
8
6
  @pdf
9
7
  end
@@ -67,12 +65,12 @@ class DocverterServer::Manifest
67
65
 
68
66
  options.each do |k,v|
69
67
 
70
- raise NameError.new("Invalid option: #{k}") unless k.match(/^[a-z0-9-]+/)
68
+ raise InvalidManifestError.new("Invalid option: #{k}") unless k.match(/^[a-z0-9-]+/)
71
69
 
72
70
  option_key = k.to_s.gsub('_', '-')
73
71
  [v].flatten.each do |option_val|
74
- raise RuntimeError.new("Invalid option value: #{option_val}") unless option_val.to_s.match(/^[a-zA-Z0-9._-]+/)
75
- if option_val.is_a?(TrueClass)
72
+ raise InvalidManifestError.new("Invalid option value: #{option_val}") unless option_val.to_s.match(/^[a-zA-Z0-9._-]+/)
73
+ if option_val.is_a?(TrueClass) || option_val == 'true'
76
74
  command_options << "--#{option_key}"
77
75
  else
78
76
  command_options << "--#{option_key}=#{option_val}"
@@ -1,3 +1,6 @@
1
+ require 'open3'
2
+ require 'shellwords'
3
+
1
4
  module DocverterServer
2
5
  module Runner
3
6
  class Base
@@ -18,11 +21,15 @@ module DocverterServer
18
21
  end
19
22
 
20
23
  def run_command(options)
21
- output = IO.popen(options) do |f|
22
- f.read
24
+ p options
25
+ output = ""
26
+ cmd = Shellwords.join(options) + " 2>&1"
27
+ p cmd
28
+ IO.popen(cmd) do |io|
29
+ output = io.read
23
30
  end
24
31
  if $?.exitstatus != 0
25
- raise output
32
+ raise DocverterServer::CommandError.new(output)
26
33
  end
27
34
  end
28
35
 
@@ -7,6 +7,7 @@ require File.expand_path('../../jars/bcprov-ext-jdk15-1.43.jar', __FILE__)
7
7
  java_import org.xhtmlrenderer.pdf.ITextRenderer
8
8
  java_import org.xhtmlrenderer.pdf.ITextUserAgent
9
9
  java_import org.htmlcleaner.HtmlCleaner
10
+ java_import org.htmlcleaner.ConfigFileTagProvider
10
11
  java_import org.htmlcleaner.DomSerializer
11
12
  java_import com.lowagie.text.pdf.PdfReader
12
13
  java_import com.lowagie.text.pdf.PdfStamper
@@ -15,7 +16,7 @@ java_import com.lowagie.text.pdf.PdfEncryption
15
16
  class DocverterServer::Runner::PDF < DocverterServer::Runner::Base
16
17
 
17
18
  def create_java_dom(html)
18
- cleaner = HtmlCleaner.new
19
+ cleaner = HtmlCleaner.new(ConfigFileTagProvider.new(java.io.File.new(File.expand_path('../../jars/tag_config.xml', __FILE__))))
19
20
  props = cleaner.get_properties
20
21
  props.setTranslateSpecialEntities(true)
21
22
  props.setAdvancedXmlEscape(true)
@@ -1,3 +1,3 @@
1
1
  module DocverterServer
2
- VERSION = '1.0.1'
2
+ VERSION = '1.0.2'
3
3
  end
@@ -1,6 +1,7 @@
1
1
  module DocverterServer; end
2
2
 
3
3
  require 'docverter-server/version'
4
+ require 'docverter-server/error'
4
5
  require 'docverter-server/conversion_types'
5
6
  require 'docverter-server/manifest'
6
7
  require 'docverter-server/runner/base'
@@ -9,3 +10,4 @@ require 'docverter-server/runner/calibre'
9
10
  require 'docverter-server/runner/pdf'
10
11
  require 'docverter-server/conversion'
11
12
  require 'docverter-server/app'
13
+ require 'docverter-server/error_handler'
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: docverter-server
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.0.1
5
+ version: 1.0.2
6
6
  platform: java
7
7
  authors:
8
8
  - Pete Keen
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-15 00:00:00.000000000 Z
12
+ date: 2013-10-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mime-types
@@ -101,6 +101,24 @@ dependencies:
101
101
  none: false
102
102
  prerelease: false
103
103
  type: :runtime
104
+ - !ruby/object:Gem::Dependency
105
+ name: multi_json
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: !binary |-
111
+ MA==
112
+ none: false
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: !binary |-
118
+ MA==
119
+ none: false
120
+ prerelease: false
121
+ type: :runtime
104
122
  - !ruby/object:Gem::Dependency
105
123
  name: mocha
106
124
  version_requirements: !ruby/object:Gem::Requirement
@@ -155,46 +173,50 @@ files:
155
173
  - Rakefile
156
174
  - config.ru
157
175
  - doc/api.md
158
- - doc/examples/html_to_encrypted_pdf/convert.sh
159
- - doc/examples/html_to_encrypted_pdf/imfeldoublepica.ttf
160
- - doc/examples/html_to_encrypted_pdf/input.html
161
- - doc/examples/html_to_encrypted_pdf/marcellus.ttf
162
- - doc/examples/html_to_encrypted_pdf/stylesheet.css
163
- - doc/examples/html_to_pdf/convert.sh
164
- - doc/examples/html_to_pdf/imfeldoublepica.ttf
165
- - doc/examples/html_to_pdf/input.html
166
- - doc/examples/html_to_pdf/marcellus.ttf
167
- - doc/examples/html_to_pdf/stylesheet.css
168
- - doc/examples/markdown_to_epub/chapter1.md
169
- - doc/examples/markdown_to_epub/chapter2.md
170
- - doc/examples/markdown_to_epub/convert.sh
171
- - doc/examples/markdown_to_epub/document-open.png
172
- - doc/examples/markdown_to_epub/markdown_to_epub.epub
173
- - doc/examples/markdown_to_epub/markdown_to_epub.epub.html
174
- - doc/examples/markdown_to_epub/metadata.xml
175
- - doc/examples/markdown_to_epub/stylesheet.css
176
- - doc/examples/markdown_to_epub/title.txt
177
- - doc/examples/markdown_to_mobi/chapter1.md
178
- - doc/examples/markdown_to_mobi/chapter2.md
179
- - doc/examples/markdown_to_mobi/convert.sh
180
- - doc/examples/markdown_to_mobi/document-open.png
181
- - doc/examples/markdown_to_mobi/metadata.xml
182
- - doc/examples/markdown_to_mobi/stylesheet.css
183
- - doc/examples/markdown_to_mobi/title.txt
184
- - doc/examples/markdown_to_pdf/chapter1.md
185
- - doc/examples/markdown_to_pdf/chapter2.md
186
- - doc/examples/markdown_to_pdf/convert.sh
187
- - doc/examples/markdown_to_pdf/imfeldoublepica.ttf
188
- - doc/examples/markdown_to_pdf/manifest.yml
189
- - doc/examples/markdown_to_pdf/marcellus.ttf
190
- - doc/examples/markdown_to_pdf/stylesheet.css
176
+ - doc/examples/php/markdown_to_pdf.php
177
+ - doc/examples/shell/html_to_encrypted_pdf/convert.sh
178
+ - doc/examples/shell/html_to_encrypted_pdf/imfeldoublepica.ttf
179
+ - doc/examples/shell/html_to_encrypted_pdf/input.html
180
+ - doc/examples/shell/html_to_encrypted_pdf/marcellus.ttf
181
+ - doc/examples/shell/html_to_encrypted_pdf/stylesheet.css
182
+ - doc/examples/shell/html_to_pdf/convert.sh
183
+ - doc/examples/shell/html_to_pdf/imfeldoublepica.ttf
184
+ - doc/examples/shell/html_to_pdf/input.html
185
+ - doc/examples/shell/html_to_pdf/marcellus.ttf
186
+ - doc/examples/shell/html_to_pdf/stylesheet.css
187
+ - doc/examples/shell/markdown_to_epub/chapter1.md
188
+ - doc/examples/shell/markdown_to_epub/chapter2.md
189
+ - doc/examples/shell/markdown_to_epub/convert.sh
190
+ - doc/examples/shell/markdown_to_epub/document-open.png
191
+ - doc/examples/shell/markdown_to_epub/markdown_to_epub.epub
192
+ - doc/examples/shell/markdown_to_epub/markdown_to_epub.epub.html
193
+ - doc/examples/shell/markdown_to_epub/metadata.xml
194
+ - doc/examples/shell/markdown_to_epub/stylesheet.css
195
+ - doc/examples/shell/markdown_to_epub/title.txt
196
+ - doc/examples/shell/markdown_to_mobi/chapter1.md
197
+ - doc/examples/shell/markdown_to_mobi/chapter2.md
198
+ - doc/examples/shell/markdown_to_mobi/convert.sh
199
+ - doc/examples/shell/markdown_to_mobi/document-open.png
200
+ - doc/examples/shell/markdown_to_mobi/metadata.xml
201
+ - doc/examples/shell/markdown_to_mobi/stylesheet.css
202
+ - doc/examples/shell/markdown_to_mobi/title.txt
203
+ - doc/examples/shell/markdown_to_pdf/chapter1.md
204
+ - doc/examples/shell/markdown_to_pdf/chapter2.md
205
+ - doc/examples/shell/markdown_to_pdf/convert.sh
206
+ - doc/examples/shell/markdown_to_pdf/imfeldoublepica.ttf
207
+ - doc/examples/shell/markdown_to_pdf/manifest.yml
208
+ - doc/examples/shell/markdown_to_pdf/marcellus.ttf
209
+ - doc/examples/shell/markdown_to_pdf/stylesheet.css
191
210
  - docverter.gemspec
192
211
  - lib/docverter-server.rb
193
212
  - lib/docverter-server/app.rb
194
213
  - lib/docverter-server/conversion.rb
195
214
  - lib/docverter-server/conversion_types.rb
215
+ - lib/docverter-server/error.rb
216
+ - lib/docverter-server/error_handler.rb
196
217
  - lib/docverter-server/jars/bcprov-ext-jdk15-1.43.jar
197
218
  - lib/docverter-server/jars/htmlcleaner-2.2.jar
219
+ - lib/docverter-server/jars/tag_config.xml
198
220
  - lib/docverter-server/manifest.rb
199
221
  - lib/docverter-server/runner/base.rb
200
222
  - lib/docverter-server/runner/calibre.rb