softcover 0.6.7 → 0.6.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.pull_requests/1385766008 +0 -0
- data/.pull_requests/1385778329 +0 -0
- data/lib/softcover/builders/epub.rb +1 -1
- data/lib/softcover/builders/mobi.rb +32 -9
- data/lib/softcover/builders/pdf.rb +0 -1
- data/lib/softcover/cli.rb +5 -1
- data/lib/softcover/commands/epub_validator.rb +2 -3
- data/lib/softcover/template/gitignore +1 -0
- data/lib/softcover/template/html/stylesheets/softcover.css +15 -1
- data/lib/softcover/template/softcover.sty +2 -1
- data/lib/softcover/version.rb +1 -1
- data/softcover.gemspec +1 -1
- data/spec/builders/mobi_spec.rb +25 -28
- data/spec/builders/preview_spec.rb +25 -44
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5647cff927ffdc738c3bec013c0c729d3397a429
|
4
|
+
data.tar.gz: 1d588aa9b57576bbec00cafed17338e6b9daec4b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb8ef238014720f30ce9a72e08c49ad2ba06100b44ef92ce2034e74c09be8859c47031e394eb802b38b86550b08ff967f8ecb276c6a7ac40db9da75421c64b0b
|
7
|
+
data.tar.gz: ce8b423b371662063f4068378b7d4e5670f1a8d93cdc9621bc8dba818728602d4b04fbed5fe329899dc483a2964a867bff4e122d40a0928e24b43bc96a2f6825
|
File without changes
|
File without changes
|
@@ -373,7 +373,7 @@ module Softcover
|
|
373
373
|
%(<?xml version="1.0" encoding="UTF-8"?>
|
374
374
|
<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
|
375
375
|
<head>
|
376
|
-
<meta name="dtb:uid" content="
|
376
|
+
<meta name="dtb:uid" content="#{manifest.uuid}"/>
|
377
377
|
<meta name="dtb:depth" content="2"/>
|
378
378
|
<meta name="dtb:totalPageCount" content="0"/>
|
379
379
|
<meta name="dtb:maxPageNumber" content="0"/>
|
@@ -4,21 +4,44 @@ module Softcover
|
|
4
4
|
|
5
5
|
def build!(options={})
|
6
6
|
Softcover::Builders::Epub.new.build!(options)
|
7
|
-
filename
|
8
|
-
filename
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
# we just return the command.
|
13
|
-
if options[:quiet] || options[:silent]
|
14
|
-
silence { Softcover.test? ? command : system(command) }
|
7
|
+
filename = mobi_filename(options)
|
8
|
+
command = mobi_command(filename, options)
|
9
|
+
silent = options[:silent] || Softcover.test?
|
10
|
+
if options[:quiet] || silent
|
11
|
+
silence { system(command) }
|
15
12
|
else
|
16
|
-
|
13
|
+
system(command)
|
14
|
+
end
|
15
|
+
unless options[:kindlegen]
|
16
|
+
FileUtils.mv("ebooks/#{filename}.azw3", "ebooks/#{filename}.mobi")
|
17
|
+
puts "MOBI saved to ebooks/#{filename}.mobi" unless silent
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Returns the filename of the MOBI (preview if necessary).
|
22
|
+
def mobi_filename(options={})
|
23
|
+
options[:preview] ? manifest.filename + '-preview' : manifest.filename
|
24
|
+
end
|
25
|
+
|
26
|
+
# Returns the command for making a MOBI, based on the options.
|
27
|
+
def mobi_command(filename, options={})
|
28
|
+
if options[:kindlegen]
|
29
|
+
"#{kindlegen} ebooks/#{filename}.epub"
|
30
|
+
else
|
31
|
+
"#{calibre} ebooks/#{filename}.epub ebooks/#{filename}.azw3"
|
17
32
|
end
|
18
33
|
end
|
19
34
|
|
20
35
|
private
|
21
36
|
|
37
|
+
def calibre
|
38
|
+
filename = `which ebook-convert`.chomp
|
39
|
+
url = 'http://calibre-ebook.com/'
|
40
|
+
message = "Install Calibre (#{url}) and enable command line tools"
|
41
|
+
message += " (http://manual.calibre-ebook.com/cli/cli-index.html)"
|
42
|
+
@calibre ||= executable(filename, message)
|
43
|
+
end
|
44
|
+
|
22
45
|
def kindlegen
|
23
46
|
filename = `which kindlegen`.chomp
|
24
47
|
url = 'http://www.amazon.com/gp/feature.html?ie=UTF8&docId=1000765211'
|
@@ -37,7 +37,6 @@ module Softcover
|
|
37
37
|
|
38
38
|
polytex_filenames = manifest.pdf_chapter_filenames << book_filename
|
39
39
|
polytex_filenames.each do |filename|
|
40
|
-
puts filename unless options[:quiet] || options[:silent]
|
41
40
|
polytex = File.open(filename) { |f| f.read }
|
42
41
|
latex = Polytexnic::Pipeline.new(polytex).to_latex
|
43
42
|
if filename == book_filename
|
data/lib/softcover/cli.rb
CHANGED
@@ -6,7 +6,7 @@ module Softcover
|
|
6
6
|
|
7
7
|
map "-v" => :version
|
8
8
|
|
9
|
-
desc "version", "Return the version number"
|
9
|
+
desc "version", "Return the version number (-v for short)"
|
10
10
|
method_option :version, aliases: '-v',
|
11
11
|
desc: "Print version number", type: :boolean
|
12
12
|
def version
|
@@ -41,6 +41,10 @@ module Softcover
|
|
41
41
|
method_option :'find-overfull', aliases: '-f',
|
42
42
|
desc: "Find overfull hboxes",
|
43
43
|
type: :boolean
|
44
|
+
elsif format == 'mobi'
|
45
|
+
method_option :kindlegen, aliases: '-k',
|
46
|
+
desc: "Use kindlegen to build the MOBI",
|
47
|
+
type: :boolean
|
44
48
|
end
|
45
49
|
method_option :quiet, aliases: '-q',
|
46
50
|
desc: "Quiet output", type: :boolean
|
@@ -22,9 +22,8 @@ module Softcover
|
|
22
22
|
|
23
23
|
def epubcheck
|
24
24
|
filename = File.join(Dir.home, 'epubcheck-3.0', 'epubcheck-3.0.jar')
|
25
|
-
url = 'https://
|
26
|
-
|
27
|
-
message = "Put EpubCheck (#{url}) in your home directory"
|
25
|
+
url = 'https://github.com/IDPF/epubcheck/releases/download/v3.0/epubcheck-3.0.zip'
|
26
|
+
message = "Download EpubCheck 3.0 (#{url}) and unzip it in your home directory"
|
28
27
|
@epubcheck ||= executable(filename, message).inspect
|
29
28
|
end
|
30
29
|
end
|
@@ -18,6 +18,15 @@ body #book {
|
|
18
18
|
|
19
19
|
#book h2 {
|
20
20
|
font-size: 180%;
|
21
|
+
margin-top: 1.5em;
|
22
|
+
}
|
23
|
+
|
24
|
+
#book h3 {
|
25
|
+
margin-top: 1.5em;
|
26
|
+
}
|
27
|
+
|
28
|
+
#book h4 {
|
29
|
+
margin-top: 2em;
|
21
30
|
}
|
22
31
|
|
23
32
|
#book img.tex {
|
@@ -96,7 +105,7 @@ body #book {
|
|
96
105
|
margin-top: 0.2em;
|
97
106
|
width: 100%;
|
98
107
|
white-space: pre;
|
99
|
-
font-family: Courier, monospace;
|
108
|
+
font-family: "Courier New", Courier, monospace;
|
100
109
|
border: 1px solid #999;
|
101
110
|
background: #eee;
|
102
111
|
margin-bottom: 1em;
|
@@ -133,6 +142,11 @@ body #book {
|
|
133
142
|
margin-top: -0.4em;
|
134
143
|
}
|
135
144
|
|
145
|
+
#book .code .highlight .lineno {
|
146
|
+
color: #666;
|
147
|
+
font-weight: normal;
|
148
|
+
}
|
149
|
+
|
136
150
|
#book .filepath {
|
137
151
|
font-family: Courier, monospace;
|
138
152
|
font-size: 80%;
|
@@ -46,8 +46,9 @@
|
|
46
46
|
\definecolor{darkblue}{rgb}{0,0.18,0.45}
|
47
47
|
\definecolor{darkgreen}{rgb}{0,0.39,0}
|
48
48
|
% Bizarrely, we need to define the ALL CAPS version of DARKGREEN to account
|
49
|
-
% for some edge cases, whose nature remains
|
49
|
+
% for some edge cases, whose nature remains mysterious.
|
50
50
|
\definecolor{DARKGREEN}{rgb}{0,0.39,0}
|
51
|
+
\definecolor{hilightyellow}{rgb}{1.0,1.0,0.8}
|
51
52
|
\hypersetup{colorlinks,linkcolor=darkblue,urlcolor=blue}
|
52
53
|
|
53
54
|
% Code environments
|
data/lib/softcover/version.rb
CHANGED
data/softcover.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
19
|
gem.require_paths = ["lib"]
|
20
20
|
|
21
|
-
gem.add_dependency 'polytexnic', '~> 0.
|
21
|
+
gem.add_dependency 'polytexnic', '~> 0.6.9'
|
22
22
|
gem.add_dependency 'msgpack', '~> 0.4.2'
|
23
23
|
gem.add_dependency 'nokogiri', '~> 1.5.0'
|
24
24
|
gem.add_dependency 'thor'
|
data/spec/builders/mobi_spec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Softcover::Builders::Mobi do
|
4
|
-
|
4
|
+
describe "#build!" do
|
5
5
|
before(:all) do
|
6
6
|
generate_book
|
7
7
|
@builder = Softcover::Builders::Mobi.new
|
@@ -10,37 +10,34 @@ describe Softcover::Builders::Mobi do
|
|
10
10
|
end
|
11
11
|
after(:all) { remove_book }
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
13
|
+
it "should generate the MOBI" do
|
14
|
+
expect('ebooks/book.mobi').to exist
|
15
|
+
end
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
it { should match /ebooks\/book\.epub/ }
|
17
|
+
describe "MOBI command" do
|
18
|
+
context "default" do
|
19
|
+
let(:command) { @builder.mobi_command(@builder.mobi_filename) }
|
20
|
+
it "should use Calibre's ebook-convert" do
|
21
|
+
expect(command).to include 'ebook-convert'
|
22
|
+
end
|
25
23
|
end
|
26
|
-
end
|
27
|
-
end
|
28
24
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
25
|
+
context "kindlegen" do
|
26
|
+
let(:command) do
|
27
|
+
@builder.mobi_command(@builder.mobi_filename, kindlegen: true)
|
28
|
+
end
|
29
|
+
it "should use Amazon.com's kindlegen" do
|
30
|
+
expect(command).to include 'kindlegen'
|
31
|
+
end
|
32
|
+
end
|
37
33
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
it
|
43
|
-
|
34
|
+
context "preview" do
|
35
|
+
let(:filename) do
|
36
|
+
@builder.mobi_filename(preview: true)
|
37
|
+
end
|
38
|
+
it "should use Calibre's ebook-convert" do
|
39
|
+
expect(filename).to include 'book-preview'
|
40
|
+
end
|
44
41
|
end
|
45
42
|
end
|
46
43
|
end
|
@@ -2,59 +2,40 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Softcover::Builders::Preview do
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
before(:all) do
|
6
|
+
generate_book
|
7
|
+
@builder = Softcover::Builders::Preview.new
|
8
|
+
@builder.build!
|
9
|
+
chdir_to_book
|
10
|
+
end
|
11
|
+
after(:all) { remove_book }
|
12
|
+
|
13
|
+
describe "#build!" do
|
14
|
+
|
15
|
+
it "should build a PDF" do
|
16
|
+
expect('ebooks/book-preview.pdf').to exist
|
11
17
|
end
|
12
|
-
after(:all) { remove_book }
|
13
18
|
|
14
|
-
|
19
|
+
context "EPUB & MOBI books" do
|
20
|
+
it "should build an EPUB" do
|
21
|
+
expect('ebooks/book-preview.epub').to exist
|
22
|
+
end
|
15
23
|
|
16
|
-
it "should build
|
17
|
-
expect('ebooks/book-preview.
|
24
|
+
it "should build an EPUB" do
|
25
|
+
expect('ebooks/book-preview.mobi').to exist
|
18
26
|
end
|
19
27
|
|
20
|
-
|
21
|
-
|
22
|
-
expect('
|
28
|
+
it "should include the right chapters" do
|
29
|
+
@builder.manifest.preview_chapters.each do |ch|
|
30
|
+
expect(File.join('epub', 'OEBPS', ch.fragment_name)).to exist
|
23
31
|
end
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
it "should include the right chapters" do
|
30
|
-
@builder.manifest.preview_chapters.each do |ch|
|
31
|
-
expect(File.join('epub', 'OEBPS', ch.fragment_name)).to exist
|
32
|
-
end
|
33
|
-
nonpreview_chapters = @builder.manifest.chapters -
|
34
|
-
@builder.manifest.preview_chapters
|
35
|
-
nonpreview_chapters.each do |ch|
|
36
|
-
expect(File.join('epub', 'OEBPS', ch.fragment_name)).not_to exist
|
37
|
-
end
|
32
|
+
nonpreview_chapters = @builder.manifest.chapters -
|
33
|
+
@builder.manifest.preview_chapters
|
34
|
+
nonpreview_chapters.each do |ch|
|
35
|
+
expect(File.join('epub', 'OEBPS', ch.fragment_name)).not_to exist
|
38
36
|
end
|
39
37
|
end
|
40
38
|
end
|
41
39
|
end
|
42
|
-
|
43
|
-
context "for a Markdown book" do
|
44
|
-
before(:all) do
|
45
|
-
generate_book(markdown: true)
|
46
|
-
@builder = Softcover::Builders::Preview.new
|
47
|
-
@builder.build!
|
48
|
-
chdir_to_book
|
49
|
-
end
|
50
|
-
after(:all) { remove_book }
|
51
|
-
|
52
|
-
describe "#build!" do
|
53
|
-
|
54
|
-
it "should build a PDF" do
|
55
|
-
expect('ebooks/book-preview.pdf').to exist
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
40
|
end
|
60
41
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: softcover
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Hartl
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-11-
|
12
|
+
date: 2013-11-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: polytexnic
|
@@ -17,14 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ~>
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: 0.6.9
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - ~>
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
27
|
+
version: 0.6.9
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: msgpack
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -366,6 +366,8 @@ files:
|
|
366
366
|
- .pull_requests/1384801823
|
367
367
|
- .pull_requests/1385070261
|
368
368
|
- .pull_requests/1385518404
|
369
|
+
- .pull_requests/1385766008
|
370
|
+
- .pull_requests/1385778329
|
369
371
|
- .rspec
|
370
372
|
- .ruby-gemset
|
371
373
|
- .ruby-version
|