jekyll-epub 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,71 @@
1
+ require 'rake'
2
+ require 'rake/tasklib'
3
+ require 'jekyll/epub'
4
+
5
+ module Jekyll
6
+ class Epub
7
+ class Tasks < ::Rake::TaskLib
8
+ def initialize( &block )
9
+ @_web = { "port" => 4000 }
10
+ @_epub = {}
11
+
12
+ instance_eval( &block ) if block
13
+
14
+ @web_override = Jekyll.configuration( @_web )
15
+ @epub_override = @_epub
16
+
17
+ define_tasks
18
+ end
19
+
20
+ def epub( key, value )
21
+ @_epub["epub"][key.to_s] = value
22
+ end
23
+
24
+ def web( key, value )
25
+ @_web[key.to_s] = value
26
+ end
27
+
28
+ private
29
+
30
+ def define_tasks
31
+ desc "Build epub"
32
+ task :epub do
33
+ Jekyll::Epub.new().create( @epub_override )
34
+ end
35
+
36
+ desc "Build site"
37
+ task :site do
38
+ source = @web_override['source']
39
+ destination = @web_override['destination']
40
+ site = Jekyll::Site.new(@web_override)
41
+
42
+ puts "Building site: #{source} -> #{destination}"
43
+ site.process
44
+ puts "Successfully generated site: #{source} -> #{destination}"
45
+ end
46
+
47
+ desc "Serve site on localhost with port #{@web_override["serve_port"]}"
48
+ task :serve do
49
+ require 'webrick'
50
+
51
+ FileUtils.mkdir_p( @web_override['destination'] )
52
+
53
+ mime_types = WEBrick::HTTPUtils::DefaultMimeTypes
54
+ mime_types.store 'js', 'application/javascript'
55
+
56
+ s = WEBrick::HTTPServer.new(
57
+ :Port => @web_override['server_port'],
58
+ :DocumentRoot => @web_override['destination'],
59
+ :MimeTypes => mime_types
60
+ )
61
+ t = Thread.new {
62
+ s.start
63
+ }
64
+
65
+ trap("INT") { s.shutdown }
66
+ t.join()
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0"?>
2
+ <container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
3
+ <rootfiles>
4
+ <rootfile full-path="content.opf" media-type="application/oebps-package+xml"/>
5
+ </rootfiles>
6
+ </container>
@@ -0,0 +1,59 @@
1
+ <?xml version="1.0"?>
2
+ <package xmlns="http://www.idpf.org/2007/opf" unique-identifier="dcidid" version="2.0">
3
+ <metadata xmlns:dc="http://purl.org/dc/elements/1.1/"
4
+ xmlns:dcterms="http://purl.org/dc/terms/"
5
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6
+ xmlns:opf="http://www.idpf.org/2007/opf">
7
+
8
+ <!-- required -->
9
+ <dc:title>{{epub.title}}</dc:title>
10
+ <dc:language xsi:type="dcterms:RFC3066">{{epub.lang}}</dc:language>
11
+ <dc:identifier id="dcidid" opf:scheme="URI">{{epub.identifier}}</dc:identifier>
12
+
13
+ <!-- optionals -->
14
+ <dc:subject>{{epub.subject}}</dc:subject>
15
+ <dc:description>{{epub.description}}</dc:description>
16
+ <dc:relation>{{epub.relation}}</dc:relation>
17
+ <dc:creator>{{epub.creator}}</dc:creator>
18
+ <dc:contributor>{{epub.contributor}}</dc:contributor>
19
+ <dc:publisher>{{epub.publisher}}</dc:publisher>
20
+ <dc:date xsi:type="dcterms:W3CDTF">{{epub.date}}</dc:date>
21
+ <dc:rights>{{epub.rights}}</dc:rights>
22
+ <dc:type>{{epub.type}}</dc:type>
23
+ <dc:format>{{epub.format}}</dc:format>
24
+ <dc:source>{{epub.source}}</dc:source>
25
+ <dc:coverage>{{epub.coverage}}</dc:coverage>
26
+
27
+ <!-- Cover -->
28
+ {% if epub.cover %}
29
+ <meta name="cover" content="cover-image"/>
30
+ {% endif %}
31
+ </metadata>
32
+
33
+ <manifest>
34
+ <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
35
+ <item id="pt" href="page-template.xpgt" media-type="application/vnd.adobe-page-template+xml" />
36
+ {% if epub.cover %}
37
+ <item id="cover" href="cover.xhtml" media-type="application/xhtml+xml"/>
38
+ <item id="cover-image" href="{{epub.cover.image}}" media-type="{{epub.cover.mime}}"/>
39
+ {% endif %}
40
+ {% for file in files %}
41
+ <item id="{{file.id}}" href="{{file.url}}" media-type="{{file.mime}}" />
42
+ {% endfor %}
43
+ </manifest>
44
+
45
+ <spine toc="ncx">
46
+ {% if epub.cover %}
47
+ <itemref idref="cover" linear="no"/>
48
+ {% endif %}
49
+ {% for file in files %}{% if file.mime == "application/xhtml+xml" %}
50
+ <itemref idref="{{file.id}}" />
51
+ {% endif %}{% endfor %}
52
+ </spine>
53
+
54
+ {% if epub.cover %}
55
+ <guide>
56
+ <reference type="cover" title="Cover" href="cover.xhtml"/>
57
+ </guide>
58
+ {% endif %}
59
+ </package>
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="UTF-8" ?>
2
+ <!DOCTYPE html PUBLIC
3
+ "-//W3C//DTD XHTML 1.1//EN"
4
+ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
5
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
6
+ <head>
7
+ <title>{{epub.title}}</title>
8
+ <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
9
+ </head>
10
+ <body>
11
+ <div>
12
+ <img src="{{epub.cover.image}}" alt="Jekyll-epub/Cover" title="Jekyll-epub/Cover" />
13
+ </div>
14
+ </body>
15
+ </html>
@@ -0,0 +1 @@
1
+ application/epub+zip
@@ -0,0 +1,49 @@
1
+ <ade:template xmlns="http://www.w3.org/1999/xhtml" xmlns:ade="http://ns.adobe.com/2006/ade"
2
+ xmlns:fo="http://www.w3.org/1999/XSL/Format">
3
+
4
+ <fo:layout-master-set>
5
+ <fo:simple-page-master master-name="single_column">
6
+ <fo:region-body margin-bottom="3pt" margin-top="0.5em" margin-left="3pt" margin-right="3pt"/>
7
+ </fo:simple-page-master>
8
+
9
+ <fo:simple-page-master master-name="single_column_head">
10
+ <fo:region-before extent="8.3em"/>
11
+ <fo:region-body margin-bottom="3pt" margin-top="6em" margin-left="3pt" margin-right="3pt"/>
12
+ </fo:simple-page-master>
13
+
14
+ <fo:simple-page-master master-name="two_column" margin-bottom="0.5em" margin-top="0.5em" margin-left="0.5em" margin-right="0.5em">
15
+ <fo:region-body column-count="2" column-gap="10pt"/>
16
+ </fo:simple-page-master>
17
+
18
+ <fo:simple-page-master master-name="two_column_head" margin-bottom="0.5em" margin-left="0.5em" margin-right="0.5em">
19
+ <fo:region-before extent="8.3em"/>
20
+ <fo:region-body column-count="2" margin-top="6em" column-gap="10pt"/>
21
+ </fo:simple-page-master>
22
+
23
+ <fo:simple-page-master master-name="three_column" margin-bottom="0.5em" margin-top="0.5em" margin-left="0.5em" margin-right="0.5em">
24
+ <fo:region-body column-count="3" column-gap="10pt"/>
25
+ </fo:simple-page-master>
26
+
27
+ <fo:simple-page-master master-name="three_column_head" margin-bottom="0.5em" margin-top="0.5em" margin-left="0.5em" margin-right="0.5em">
28
+ <fo:region-before extent="8.3em"/>
29
+ <fo:region-body column-count="3" margin-top="6em" column-gap="10pt"/>
30
+ </fo:simple-page-master>
31
+
32
+ <fo:page-sequence-master>
33
+ <fo:repeatable-page-master-alternatives>
34
+ <fo:conditional-page-master-reference master-reference="three_column_head" page-position="first" ade:min-page-width="80em"/>
35
+ <fo:conditional-page-master-reference master-reference="three_column" ade:min-page-width="80em"/>
36
+ <fo:conditional-page-master-reference master-reference="two_column_head" page-position="first" ade:min-page-width="50em"/>
37
+ <fo:conditional-page-master-reference master-reference="two_column" ade:min-page-width="50em"/>
38
+ <fo:conditional-page-master-reference master-reference="single_column_head" page-position="first" />
39
+ <fo:conditional-page-master-reference master-reference="single_column"/>
40
+ </fo:repeatable-page-master-alternatives>
41
+ </fo:page-sequence-master>
42
+
43
+ </fo:layout-master-set>
44
+
45
+ <ade:style>
46
+ <ade:styling-rule selector=".title_box" display="adobe-other-region" adobe-region="xsl-region-before"/>
47
+ </ade:style>
48
+
49
+ </ade:template>
@@ -0,0 +1,29 @@
1
+ <?xml version="1.0"?>
2
+ <!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN"
3
+ "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
4
+
5
+ <ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
6
+
7
+ <head>
8
+ <meta name="dtb:uid" content="{{epub.identifier}}"/>
9
+ <meta name="dtb:depth" content="1"/>
10
+ <meta name="dtb:totalPageCount" content="0"/>
11
+ <meta name="dtb:maxPageNumber" content="0"/>
12
+ </head>
13
+
14
+ <docTitle>
15
+ <text>Epub Format Construction Guide</text>
16
+ </docTitle>
17
+
18
+ <navMap>
19
+ {% for file in files %}{% if file.mime == "application/xhtml+xml" %}
20
+ <navPoint id="navPoint-{{file.order}}" playOrder="{{file.order}}">
21
+ <navLabel>
22
+ <text>{{file.title}}</text>
23
+ </navLabel>
24
+ <content src="{{file.url}}"/>
25
+ </navPoint>
26
+ {% endif %}{% endfor %}
27
+ </navMap>
28
+
29
+ </ncx>
@@ -0,0 +1,36 @@
1
+ module Jekyll
2
+ class EpubBlock < Liquid::Block
3
+ include Liquid::StandardFilters
4
+
5
+ def initialize(tag_name, markup, tokens)
6
+ super
7
+ end
8
+
9
+ def render(context)
10
+ if context.registers[:site].config["epub"]
11
+ super
12
+ else
13
+ ""
14
+ end
15
+ end
16
+ end
17
+
18
+ class NoEpubBlock < Liquid::Block
19
+ include Liquid::StandardFilters
20
+
21
+ def initialize(tag_name, markup, tokens)
22
+ super
23
+ end
24
+
25
+ def render(context)
26
+ if context.registers[:site].config["epub"]
27
+ ""
28
+ else
29
+ super
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ Liquid::Template.register_tag('epub', Jekyll::EpubBlock)
36
+ Liquid::Template.register_tag('noepub', Jekyll::NoEpubBlock)
data/test/helper.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'jekyll-epub'
8
+
9
+ class Test::Unit::TestCase
10
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestJekyllEpub < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,133 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-epub
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Gregoire Lejeune
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-04-27 00:00:00 +02:00
18
+ default_executable: jekyll_epub
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: mime-types
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :runtime
31
+ version_requirements: *id001
32
+ - !ruby/object:Gem::Dependency
33
+ name: uuid
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ segments:
40
+ - 0
41
+ version: "0"
42
+ type: :runtime
43
+ version_requirements: *id002
44
+ - !ruby/object:Gem::Dependency
45
+ name: jekyll
46
+ prerelease: false
47
+ requirement: &id003 !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ segments:
52
+ - 0
53
+ version: "0"
54
+ type: :runtime
55
+ version_requirements: *id003
56
+ - !ruby/object:Gem::Dependency
57
+ name: shoulda
58
+ prerelease: false
59
+ requirement: &id004 !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ type: :development
67
+ version_requirements: *id004
68
+ description: Create an eBook (epub) of your Jekyll blog
69
+ email: gregoire.lejeune@free.fr
70
+ executables:
71
+ - jekyll_epub
72
+ extensions: []
73
+
74
+ extra_rdoc_files:
75
+ - LICENSE
76
+ - README.rdoc
77
+ files:
78
+ - .document
79
+ - .gitignore
80
+ - LICENSE
81
+ - README.rdoc
82
+ - Rakefile
83
+ - VERSION
84
+ - bin/jekyll_epub
85
+ - jekyll-epub.gemspec
86
+ - lib/jekyll/epub.rb
87
+ - lib/jekyll/epub/dtd/xhtml-lat1.ent
88
+ - lib/jekyll/epub/dtd/xhtml-special.ent
89
+ - lib/jekyll/epub/dtd/xhtml-symbol.ent
90
+ - lib/jekyll/epub/dtd/xhtml1-strict.dtd
91
+ - lib/jekyll/epub/tasks.rb
92
+ - lib/jekyll/epub/templates/META-INF/container.xml
93
+ - lib/jekyll/epub/templates/content.opf
94
+ - lib/jekyll/epub/templates/cover.xhtml
95
+ - lib/jekyll/epub/templates/mimetype
96
+ - lib/jekyll/epub/templates/page-template.xpgt
97
+ - lib/jekyll/epub/templates/toc.ncx
98
+ - lib/jekyll/tags/epub.rb
99
+ - test/helper.rb
100
+ - test/test_jekyll-epub.rb
101
+ has_rdoc: true
102
+ homepage: http://github.com/glejeune/jekyll-epub
103
+ licenses: []
104
+
105
+ post_install_message:
106
+ rdoc_options:
107
+ - --charset=UTF-8
108
+ require_paths:
109
+ - lib
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ segments:
115
+ - 0
116
+ version: "0"
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ segments:
122
+ - 0
123
+ version: "0"
124
+ requirements: []
125
+
126
+ rubyforge_project:
127
+ rubygems_version: 1.3.6
128
+ signing_key:
129
+ specification_version: 3
130
+ summary: Create an eBook (epub) of your Jekyll blog
131
+ test_files:
132
+ - test/helper.rb
133
+ - test/test_jekyll-epub.rb