docverter-server 1.0.1-java → 1.0.2-java

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 (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