ebps 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +3 -0
- data/InstalledFiles +36 -0
- data/LICENSE.txt +339 -0
- data/Manifest.txt +56 -0
- data/README.txt +28 -0
- data/Rakefile +28 -0
- data/SetupConfig +30 -0
- data/bin/ebps +86 -0
- data/example/config.yml +12 -0
- data/example/converter_for_firefox.rb +59 -0
- data/example/data.yml +60 -0
- data/example/example.sh +3 -0
- data/example/sample.epub +0 -0
- data/lib/ebps.rb +5 -0
- data/lib/ebps/config.rb +61 -0
- data/lib/ebps/conversion/de_fachinfo_yaml.rb +81 -0
- data/lib/ebps/conversion/epub.rb +38 -0
- data/lib/ebps/conversion/fachinfo_xml.rb +170 -0
- data/lib/ebps/conversion/fachinfo_yaml.rb +113 -0
- data/lib/ebps/conversion/import_module_sample.rb +86 -0
- data/lib/ebps/conversion/mobi_pocket.rb +30 -0
- data/lib/ebps/conversion/oebps.rb +537 -0
- data/lib/ebps/conversion/patinfo_yaml.rb +107 -0
- data/lib/ebps/data/default_cover.jpg +0 -0
- data/lib/ebps/data/stylesheet.css +16 -0
- data/lib/ebps/postprocess/bookworm.rb +16 -0
- data/lib/ebps/postprocess/copy.rb +28 -0
- data/lib/ebps/postprocess/system_call.rb +18 -0
- data/lib/ebps/preprocess/copy.rb +28 -0
- data/lib/ebps/preprocess/system_call.rb +18 -0
- data/lib/ebps/text/chapter.rb +36 -0
- data/lib/ebps/text/document.rb +36 -0
- data/lib/ebps/text/format.rb +34 -0
- data/lib/ebps/text/paragraph.rb +63 -0
- data/lib/ebps/text/picture.rb +41 -0
- data/lib/ebps/text/table.rb +65 -0
- data/lib/ebps/util/mail.rb +47 -0
- data/lib/ebps/util/smtp_tls.rb +62 -0
- data/spec/conversion/data/DF_15164_1_3.gif +0 -0
- data/spec/conversion/data/DF_15164_2_3.gif +0 -0
- data/spec/conversion/data/appendix.png +0 -0
- data/spec/conversion/data/fachinfo.xml +1151 -0
- data/spec/conversion/data/fachinfo.yaml +1214 -0
- data/spec/conversion/data/fachinfo_with_image.xml +334 -0
- data/spec/conversion/data/fachinfo_with_table.xml +1101 -0
- data/spec/conversion/data/fachinfos.de.oddb.yaml +5789 -0
- data/spec/conversion/data/images/5c/5c54d52c8132230e8c40c37a428fe761.png +0 -0
- data/spec/conversion/de_fachinfo_yaml_spec.rb +86 -0
- data/spec/conversion/epub_spec.rb +59 -0
- data/spec/conversion/fachinfo_xml_spec.rb +245 -0
- data/spec/conversion/fachinfo_yaml_spec.rb +52 -0
- data/spec/conversion/mobi_pocket_spec.rb +55 -0
- data/spec/conversion/oebps_spec.rb +555 -0
- data/spec/text/chapter_spec.rb +65 -0
- data/spec/text/document_spec.rb +78 -0
- data/spec/text/paragraph_spec.rb +77 -0
- metadata +145 -0
data/Rakefile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'hoe'
|
5
|
+
|
6
|
+
# Hoe.plugin :compiler
|
7
|
+
# Hoe.plugin :cucumberfeatures
|
8
|
+
# Hoe.plugin :gem_prelude_sucks
|
9
|
+
# Hoe.plugin :inline
|
10
|
+
# Hoe.plugin :inline
|
11
|
+
# Hoe.plugin :manifest
|
12
|
+
# Hoe.plugin :newgem
|
13
|
+
# Hoe.plugin :racc
|
14
|
+
# Hoe.plugin :rubyforge
|
15
|
+
# Hoe.plugin :rubyforge
|
16
|
+
# Hoe.plugin :website
|
17
|
+
|
18
|
+
Hoe.spec 'ebps' do
|
19
|
+
# HEY! If you fill these out in ~/.hoe_template/Rakefile.erb then
|
20
|
+
# you'll never have to touch them again!
|
21
|
+
# (delete this comment too, of course)
|
22
|
+
|
23
|
+
developer('Masaomi Hatakeyama, Zeno R.R. Davatz', 'mhatakeyama@ywesee.com, zdavatz@ywesee.com')
|
24
|
+
|
25
|
+
# self.rubyforge_name = 'ebpsx' # if different than 'ebps'
|
26
|
+
end
|
27
|
+
|
28
|
+
# vim: syntax=ruby
|
data/SetupConfig
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
---
|
2
|
+
install_prefix:
|
3
|
+
localstatedir: /var/lib
|
4
|
+
prefix: /usr
|
5
|
+
rubyprog: /usr/bin/ruby18
|
6
|
+
rubypath: /usr/bin/ruby18
|
7
|
+
siterubyverarch: /usr/lib/ruby/site_ruby/1.8/i686-linux
|
8
|
+
no_ext: false
|
9
|
+
no_ri: true
|
10
|
+
extconfopt: ""
|
11
|
+
type: site
|
12
|
+
no_doc: false
|
13
|
+
librubyverarch: /usr/lib/ruby/1.8/i686-linux
|
14
|
+
installdirs: site
|
15
|
+
no_test: true
|
16
|
+
siteruby: /usr/lib/ruby/site_ruby
|
17
|
+
root:
|
18
|
+
siterubyver: /usr/lib/ruby/site_ruby/1.8
|
19
|
+
sysconfdir: /etc
|
20
|
+
rbdir: /usr/lib/ruby/site_ruby/1.8
|
21
|
+
datadir: /usr/share
|
22
|
+
shebang: ruby
|
23
|
+
makeprog: make
|
24
|
+
librubyver: /usr/lib/ruby/1.8
|
25
|
+
mandir: /usr/share/man
|
26
|
+
libdir: /usr/lib
|
27
|
+
libruby: /usr/lib/ruby
|
28
|
+
sodir: /usr/lib/ruby/site_ruby/1.8/i686-linux
|
29
|
+
docdir: /usr/share/doc
|
30
|
+
bindir: /usr/bin
|
data/bin/ebps
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
log = []
|
4
|
+
|
5
|
+
if RUBY_VERSION < '1.9'
|
6
|
+
warning = <<-EOS
|
7
|
+
#$0 is designed to run on Ruby 1.9 and higher.
|
8
|
+
Running on Ruby #{RUBY_VERSION} may result in unexpected results or errors,
|
9
|
+
particularly in the handling of multibyte characters.
|
10
|
+
EOS
|
11
|
+
log.push "Warning: " << warning
|
12
|
+
warn warning
|
13
|
+
end
|
14
|
+
|
15
|
+
$: << File.expand_path('../lib', File.dirname(__FILE__))
|
16
|
+
|
17
|
+
require 'ebps'
|
18
|
+
require 'ebps/util/mail'
|
19
|
+
|
20
|
+
def identify_module namespace, name
|
21
|
+
module_name = name.gsub /(^|_)./ do |match| match.upcase.delete '_' end
|
22
|
+
namespace.const_get module_name
|
23
|
+
end
|
24
|
+
|
25
|
+
begin
|
26
|
+
|
27
|
+
import_from = EBPS.config.import_from
|
28
|
+
export_to = EBPS.config.export_to
|
29
|
+
require "ebps/conversion/#{import_from}"
|
30
|
+
require "ebps/conversion/#{export_to}"
|
31
|
+
|
32
|
+
EBPS.config.preprocess.each do |name, data|
|
33
|
+
require "ebps/preprocess/#{name}"
|
34
|
+
result = identify_module(EBPS::Preprocess, name).preprocess(data)
|
35
|
+
log.push sprintf('Preprocess: %s', result)
|
36
|
+
end
|
37
|
+
|
38
|
+
importer = identify_module EBPS::Conversion, import_from
|
39
|
+
exporter = identify_module EBPS::Conversion, export_to
|
40
|
+
|
41
|
+
model = []
|
42
|
+
source_path = EBPS.config.source
|
43
|
+
inputs = ""
|
44
|
+
if File.ftype(source_path) == 'directory'
|
45
|
+
inputs << "Input files for conversion:"
|
46
|
+
Dir.foreach(source_path) do |name|
|
47
|
+
path = File.join source_path, name
|
48
|
+
if File.ftype(path) == 'file'
|
49
|
+
inputs << "\n" << path
|
50
|
+
File.open(path) do |fh|
|
51
|
+
model.concat importer.import(fh, path)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
else
|
56
|
+
inputs << "Input file for conversion: " << source_path
|
57
|
+
source = File.open(source_path)
|
58
|
+
model = importer.import source, source_path
|
59
|
+
end
|
60
|
+
log.push inputs
|
61
|
+
|
62
|
+
EBPS.config.decorate.each do |path, name|
|
63
|
+
require path
|
64
|
+
decorator = identify_module(EBPS::Decorator, name)
|
65
|
+
model.each do |doc|
|
66
|
+
decorator.decorate(doc)
|
67
|
+
end
|
68
|
+
log.push sprintf('Decorate: %s.decorate', name)
|
69
|
+
end
|
70
|
+
|
71
|
+
target = EBPS.config.target
|
72
|
+
exporter.export model, target
|
73
|
+
|
74
|
+
log.push sprintf("The Ebook %s was generated and stored in %s",
|
75
|
+
File.basename(target), File.dirname(target))
|
76
|
+
|
77
|
+
EBPS.config.postprocess.each do |name, data|
|
78
|
+
require "ebps/postprocess/#{name}"
|
79
|
+
result = identify_module(EBPS::Postprocess, name).postprocess(data)
|
80
|
+
log.push sprintf('Postprocess: %s', result)
|
81
|
+
end
|
82
|
+
rescue StandardError => err
|
83
|
+
log.push err
|
84
|
+
ensure
|
85
|
+
EBPS::Util::Mail.notify log
|
86
|
+
end
|
data/example/config.yml
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
---
|
2
|
+
smtp_server: smtp_server
|
3
|
+
smtp_user: username@domain
|
4
|
+
smtp_pass: 'password'
|
5
|
+
report_to:
|
6
|
+
- email_address
|
7
|
+
source: ./data.yml
|
8
|
+
target: ./sample.epub
|
9
|
+
import_from: import_module_sample
|
10
|
+
export_to: epub
|
11
|
+
language: de
|
12
|
+
title: Firmenliste Schweiz
|
@@ -0,0 +1,59 @@
|
|
1
|
+
#!/usr/bin/env ruby19
|
2
|
+
|
3
|
+
$: << File.expand_path('../lib', File.dirname(__FILE__))
|
4
|
+
|
5
|
+
require 'ebps'
|
6
|
+
require 'ebps/util/mail'
|
7
|
+
|
8
|
+
def identify_module namespace, name
|
9
|
+
module_name = name.gsub /(^|_)./ do |match| match.upcase.delete '_' end
|
10
|
+
namespace.const_get module_name
|
11
|
+
end
|
12
|
+
|
13
|
+
begin
|
14
|
+
|
15
|
+
log = []
|
16
|
+
|
17
|
+
# Read modules
|
18
|
+
import_from = EBPS.config.import_from
|
19
|
+
export_to = EBPS.config.export_to
|
20
|
+
require "ebps/conversion/#{import_from}"
|
21
|
+
require "ebps/conversion/#{export_to}"
|
22
|
+
|
23
|
+
importer = identify_module EBPS::Conversion, import_from
|
24
|
+
exporter = identify_module EBPS::Conversion, export_to
|
25
|
+
|
26
|
+
# Import process
|
27
|
+
model = []
|
28
|
+
source_path = EBPS.config.source
|
29
|
+
inputs = ""
|
30
|
+
if File.ftype(source_path) == 'directory'
|
31
|
+
inputs << "Input files for conversion:"
|
32
|
+
Dir.foreach(source_path) do |name|
|
33
|
+
path = File.join source_path, name
|
34
|
+
if File.ftype(path) == 'file'
|
35
|
+
inputs << "\n" << path
|
36
|
+
File.open(path) do |fh|
|
37
|
+
model.concat importer.import(fh, path)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
else
|
42
|
+
inputs << "Input file for conversion: " << source_path
|
43
|
+
source = File.open(source_path)
|
44
|
+
model = importer.import source, source_path
|
45
|
+
end
|
46
|
+
log.push inputs
|
47
|
+
|
48
|
+
# Export process
|
49
|
+
target = EBPS.config.target
|
50
|
+
exporter.export model, target
|
51
|
+
|
52
|
+
log.push sprintf("The Ebook %s was generated and stored in %s",
|
53
|
+
File.basename(target), File.dirname(target))
|
54
|
+
|
55
|
+
rescue StandardError => err
|
56
|
+
log.push err
|
57
|
+
ensure
|
58
|
+
EBPS::Util::Mail.notify log
|
59
|
+
end
|
data/example/data.yml
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
--- !ywesee,2010/CompanyInfo
|
2
|
+
oid: 123456789
|
3
|
+
descriptions: !ywesee,2010/SimpleLanguage::Descriptions
|
4
|
+
de: !ywesee,2010/CompanyInfo2010
|
5
|
+
name: ywesee GmbH
|
6
|
+
short_description: !ywesee,2010/Text::Chapter
|
7
|
+
heading: ywesee - intellectual capital connected
|
8
|
+
sections: []
|
9
|
+
|
10
|
+
general_information: !ywesee,2010/Text::Chapter
|
11
|
+
heading: About ywesee GmbH
|
12
|
+
sections:
|
13
|
+
- !ywesee,2010/Text::Section
|
14
|
+
subheading: ""
|
15
|
+
paragraphs:
|
16
|
+
- !ywesee,2010/Text::Paragraph
|
17
|
+
formats:
|
18
|
+
- !ywesee,2010/Text::Format
|
19
|
+
values:
|
20
|
+
- :italic
|
21
|
+
start: 0
|
22
|
+
end: 9
|
23
|
+
- !ywesee,2010/Text::Format
|
24
|
+
values: []
|
25
|
+
|
26
|
+
start: 10
|
27
|
+
end: -1
|
28
|
+
text: "ywesee GmbH is an OpenSource Software company with a bias for OpenStandards and a dedicated focus on the HealthCare industry."
|
29
|
+
preformatted: false
|
30
|
+
- !ywesee,2010/Text::Paragraph
|
31
|
+
formats:
|
32
|
+
- !ywesee,2010/Text::Format
|
33
|
+
values:
|
34
|
+
- :italic
|
35
|
+
start: 0
|
36
|
+
end: 11
|
37
|
+
- !ywesee,2010/Text::Format
|
38
|
+
values: []
|
39
|
+
|
40
|
+
start: 12
|
41
|
+
end: -1
|
42
|
+
text: "Web site: http://www.ywesee.com"
|
43
|
+
preformatted: false
|
44
|
+
address_form: !ywesee,2010/Text::Chapter
|
45
|
+
heading: Kontakt zu ywesee
|
46
|
+
sections:
|
47
|
+
- !ywesee,2010/Text::Section
|
48
|
+
subheading: "Address"
|
49
|
+
paragraphs:
|
50
|
+
- !ywesee,2010/Text::Paragraph
|
51
|
+
formats:
|
52
|
+
- !ywesee,2010/Text::Format
|
53
|
+
values: []
|
54
|
+
|
55
|
+
start: 0
|
56
|
+
end: -1
|
57
|
+
text: "Winterthurerstrasse 52, 8006 Zürich, Schweiz."
|
58
|
+
preformatted: false
|
59
|
+
|
60
|
+
|
data/example/example.sh
ADDED
data/example/sample.epub
ADDED
Binary file
|
data/lib/ebps.rb
ADDED
data/lib/ebps/config.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'rclconf'
|
2
|
+
|
3
|
+
module EBPS
|
4
|
+
run_as = File.basename $0
|
5
|
+
default_config_files = [
|
6
|
+
"/etc/ebps/#{run_as}.yml",
|
7
|
+
'/etc/ebps/ebps.yml',
|
8
|
+
]
|
9
|
+
defaults = {
|
10
|
+
'config' => default_config_files,
|
11
|
+
'log_level' => 'INFO',
|
12
|
+
## interesting configuration values start here
|
13
|
+
'appendix' => nil,
|
14
|
+
'author' => nil,
|
15
|
+
'content_title' => nil,
|
16
|
+
'cover' => File.expand_path('data/default_cover.jpg', File.dirname(__FILE__)),
|
17
|
+
'decorate' => [],
|
18
|
+
'export_to' => nil,
|
19
|
+
'guide_index' => 'Index',
|
20
|
+
'html_index' => true,
|
21
|
+
'image_prefix' => '',
|
22
|
+
'image_suffix' => '',
|
23
|
+
'image_format' => 'gif',
|
24
|
+
'import_from' => nil,
|
25
|
+
'index_name' => 'Index',
|
26
|
+
'keep_tmpfiles' => false,
|
27
|
+
'kindlegen_args' => '-c2 -nomin -unicode',
|
28
|
+
'kindlegen_path' => 'kindlegen',
|
29
|
+
'kindle_quirks' => false,
|
30
|
+
'language' => nil,
|
31
|
+
'link_drug_brand_name' => false,
|
32
|
+
'max_depth' => 3,
|
33
|
+
'name' => 'ebps',
|
34
|
+
'preprocess' => {},
|
35
|
+
'postprocess' => {},
|
36
|
+
'report_from' => 'EBPS <ebps@ywesee.com>',
|
37
|
+
'report_subject' => 'Ebook %s finished at %s',
|
38
|
+
'report_subject_err'=> 'Ebook %s could not be completed (%s)',
|
39
|
+
'report_time_format'=> '%d.%m.%Y %H:%M:%S',
|
40
|
+
'report_to' => [],
|
41
|
+
'smtp_authtype' => :plain,
|
42
|
+
'smtp_domain' => 'ywesee.com',
|
43
|
+
'smtp_pass' => nil,
|
44
|
+
'smtp_port' => 587,
|
45
|
+
'smtp_server' => 'mail.ywesee.com',
|
46
|
+
'smtp_user' => nil,
|
47
|
+
'sort' => true,
|
48
|
+
'source' => nil,
|
49
|
+
'stylesheet' => File.expand_path('data/stylesheet.css', File.dirname(__FILE__)),
|
50
|
+
'target' => nil,
|
51
|
+
'title' => nil,
|
52
|
+
'xml_indent' => nil,
|
53
|
+
}
|
54
|
+
|
55
|
+
config = RCLConf::RCLConf.new(ARGV, defaults)
|
56
|
+
config.load(config.config)
|
57
|
+
@config = config
|
58
|
+
def self.config
|
59
|
+
@config
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'ebps/text/document'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module EBPS
|
5
|
+
YAML.add_domain_type 'de.oddb.org,2007',
|
6
|
+
'ODDB::Util::M10lDocument' do |type, val|
|
7
|
+
if descr = val['canonical']
|
8
|
+
descr[EBPS.config.language.to_sym]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
YAML.add_domain_type 'de.oddb.org,2007', 'ODDB::Text::Document' do |type, val|
|
12
|
+
doc = Text::Document.new
|
13
|
+
doc.title << val['title'].to_s.strip
|
14
|
+
val['chapters'].each do |chapter|
|
15
|
+
doc.add_chapter chapter
|
16
|
+
end
|
17
|
+
doc
|
18
|
+
end
|
19
|
+
YAML.add_domain_type 'de.oddb.org,2007', 'ODDB::Text::Chapter' do |type, val|
|
20
|
+
pars = val['paragraphs']
|
21
|
+
chp = Text::Chapter.new
|
22
|
+
if (heading = pars.first) && heading.respond_to?(:text)
|
23
|
+
pars.shift
|
24
|
+
chp.heading << heading.text
|
25
|
+
end
|
26
|
+
chp.paragraphs.concat pars
|
27
|
+
chp
|
28
|
+
end
|
29
|
+
YAML.add_domain_type 'de.oddb.org,2007', 'ODDB::Text::Paragraph' do |type, val|
|
30
|
+
fmts = val['formats']
|
31
|
+
par = if fmts.size == 1 && fmts.first.values.include?('i')
|
32
|
+
Text::Subheading.new
|
33
|
+
else
|
34
|
+
Text::Paragraph.new
|
35
|
+
end
|
36
|
+
par << val['text']
|
37
|
+
par.formats.replace fmts
|
38
|
+
par
|
39
|
+
end
|
40
|
+
YAML.add_domain_type 'de.oddb.org,2007', 'ODDB::Text::Format' do |type, val|
|
41
|
+
fmt = Text::Format.new
|
42
|
+
fmt.values = val['values']
|
43
|
+
fmt.start = val['start']
|
44
|
+
fmt.end = val['end']
|
45
|
+
fmt
|
46
|
+
end
|
47
|
+
YAML.add_domain_type 'de.oddb.org,2007', 'ODDB::Text::Table' do |type, val|
|
48
|
+
table = Text::Table.new
|
49
|
+
table.rows.replace val['rows']
|
50
|
+
table
|
51
|
+
end
|
52
|
+
YAML.add_domain_type 'de.oddb.org,2007', 'ODDB::Text::Picture' do |type, val|
|
53
|
+
path = File.join EBPS.config.image_prefix, val['path']
|
54
|
+
file = File.basename path
|
55
|
+
handle = nil
|
56
|
+
begin
|
57
|
+
handle = open path
|
58
|
+
picture = Text::Picture.new
|
59
|
+
picture << handle.read
|
60
|
+
picture
|
61
|
+
rescue StandardError => e
|
62
|
+
par = Text::Paragraph.new
|
63
|
+
par << e.message
|
64
|
+
par
|
65
|
+
end
|
66
|
+
end
|
67
|
+
module Conversion
|
68
|
+
module DeFachinfoYaml
|
69
|
+
def self.import string_or_io, path=nil
|
70
|
+
collection = {}
|
71
|
+
YAML.each_document string_or_io do |doc|
|
72
|
+
if doc
|
73
|
+
collection.store Digest::MD5.hexdigest(doc.to_s), doc
|
74
|
+
end
|
75
|
+
end
|
76
|
+
## apparently we have some nil-values here (?)
|
77
|
+
collection.values.compact
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# - encoding: utf-8
|
2
|
+
require 'builder'
|
3
|
+
require 'ebps/conversion/oebps'
|
4
|
+
require 'zip/zip'
|
5
|
+
|
6
|
+
module EBPS
|
7
|
+
module Conversion
|
8
|
+
module Epub
|
9
|
+
def self.compile_epub target, tmpdir, name
|
10
|
+
Zip::ZipOutputStream.open(target) do |zh|
|
11
|
+
zh.put_next_entry('mimetype', nil, nil, Zip::ZipEntry::STORED)
|
12
|
+
zh << 'application/epub+zip'
|
13
|
+
zh.put_next_entry('META-INF/container.xml')
|
14
|
+
zh << <<-EOS
|
15
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
16
|
+
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
|
17
|
+
<rootfiles>
|
18
|
+
<rootfile full-path="OPS/#{name}" media-type="application/oebps-package+xml"/>
|
19
|
+
</rootfiles>
|
20
|
+
</container>
|
21
|
+
EOS
|
22
|
+
Dir.foreach(tmpdir) do |entry|
|
23
|
+
path = File.join tmpdir, entry
|
24
|
+
if File.ftype(path) == 'file'
|
25
|
+
zh.put_next_entry("OPS/#{entry}")
|
26
|
+
zh << File.read(path)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
def self.export docs, target, override_tmpdir=nil
|
32
|
+
Oebps.export docs, target, override_tmpdir do |tmpdir, name|
|
33
|
+
compile_epub target, tmpdir, name
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|