hybook 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest.txt +5 -0
- data/README.md +95 -7
- data/Rakefile +1 -2
- data/lib/hybook/std/album.rb +55 -0
- data/lib/hybook/type/album.rb +57 -0
- data/lib/hybook/type/picture.rb +17 -0
- data/lib/hybook/type/section.rb +17 -0
- data/lib/hybook/version.rb +1 -1
- data/lib/hybook.rb +29 -0
- data/templates/album.md +9 -0
- metadata +14 -8
data/Manifest.txt
CHANGED
data/README.md
CHANGED
@@ -1,26 +1,114 @@
|
|
1
|
-
# hybook
|
1
|
+
# hybook - Hyper Book (H8)
|
2
2
|
|
3
3
|
hybook gem - hypertext book generator
|
4
4
|
|
5
|
-
* home :: [github.com/
|
6
|
-
* bugs :: [github.com/
|
5
|
+
* home :: [github.com/hybook/hybook](https://github.com/hybook/hybook)
|
6
|
+
* bugs :: [github.com/hybook/hybook/issues](https://github.com/hybook/hybook/issues)
|
7
7
|
* gem :: [rubygems.org/gems/hybook](https://rubygems.org/gems/hybook)
|
8
8
|
* rdoc :: [rubydoc.info/gems/hybook](http://rubydoc.info/gems/hybook)
|
9
9
|
|
10
|
+
|
10
11
|
## Usage
|
11
12
|
|
12
|
-
|
13
|
+
Hyper Book (H8) generates pages from plain text wiki-style templates
|
14
|
+
for a hypertext book in two versions,
|
15
|
+
that is, a single-page version and a multi-page version.
|
16
|
+
|
17
|
+
|
18
|
+
## Goals
|
19
|
+
|
20
|
+
- Hyper Book offers book models / structs
|
21
|
+
(e.g. Book, Part, Chapter, Appendix)
|
22
|
+
and types
|
23
|
+
(Album, Slide Show, etc.).
|
24
|
+
|
25
|
+
- Hyper Book offers template packs and plugins.
|
26
|
+
|
27
|
+
- Hyper Book offers a template pack and plugin manager
|
28
|
+
(e.g. `hybook install almanac`, `hybook install table`, etc.).
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
## Non-Goals
|
33
|
+
|
34
|
+
- Hyper Book is **NOT** a static site generator / server.
|
35
|
+
=> Use your static site generator of choice (e.g. Jekyll and friends)
|
36
|
+
to convert the generated pages into a complete hypertext book or web site.
|
37
|
+
|
38
|
+
- Hyper Book is **NOT** a HTML to PDF converter.
|
39
|
+
=> Use your HTML to PDF converter of choice (e.g. print ot PDF, `wkhtmltopdf`, etc.).
|
40
|
+
|
41
|
+
- Hyper Book is **NOT** a EPUB generator or checker.
|
42
|
+
=> Use your EPUB generator or checker of choice.
|
43
|
+
|
44
|
+
- Hyper Book is **NOT** a MOBI generator.
|
45
|
+
=> Use your MOBI generator of choice (e.g. `kindlegen`, etc.).
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
## Building Blocks
|
50
|
+
|
51
|
+
- [`textutils` gem](https://github.com/rubylibs/textutils) -- Text filters n helpers
|
52
|
+
- [`markdown` gem](https://github.com/rubylibs/markdown) -- Markdown helpers
|
53
|
+
- [`pakman` gem](https://github.com/rubylibs/pakman) -- Template Pack(age) manager
|
54
|
+
- [`props` gem](https://github.com/rubylibs/props) -- Setting Hierachies (Commandline, User, Home, Defaults, etc.)
|
55
|
+
|
56
|
+
|
57
|
+
<!-- more -->
|
58
|
+
|
59
|
+
- Jekyll -- static site generator
|
60
|
+
- `kramdown` -- Markdown converter
|
61
|
+
|
62
|
+
|
63
|
+
## Hypertext Markup (HTML) to PDF Conversion Options
|
64
|
+
|
65
|
+
- Use Google Chrome (Print to PDF)
|
66
|
+
- `wkhtmltopdf`
|
67
|
+
- `phantom.js` Renderer
|
68
|
+
|
69
|
+
|
70
|
+
## Real World Book Examples
|
71
|
+
|
72
|
+
- [The Free World Football Almanac](https://github.com/openfootball/book)
|
73
|
+
- [The Free World Beer Book](https://github.com/openbeer/book)
|
74
|
+
- [The Free World Fact Book](https://github.com/openmundi/book)
|
75
|
+
|
13
76
|
|
14
77
|
## Alternatives
|
15
78
|
|
16
|
-
###
|
79
|
+
### EPUB, MOBI (Kindle) Book Generator
|
17
80
|
|
18
|
-
|
19
|
-
- [Bookshop](https://github.com/blueheadpublishing/bookshop)
|
81
|
+
#### Ruby
|
20
82
|
|
83
|
+
- [kitabu gem](https://github.com/fnando/kitabu) - EPUB, MOBI, PDF
|
84
|
+
- [bookshop gem](https://github.com/blueheadpublishing/bookshop) - EPUB, MOBI, PDF
|
85
|
+
- [eeepub, eeepub-with-cover-support ](https://github.com/jugyo/eeepub) - by jugyo
|
86
|
+
- [git-scribe](https://github.com/schacon/git-scribe) - by Scott Chacon (aka schacon)
|
87
|
+
- [review](https://github.com/kmuto/review) - by Kenshi Muto (aka kmuto)
|
88
|
+
- [gepub](https://github.com/skoji/gepub) - by Satoshi Kojima (aka skoji)
|
89
|
+
- [peregrin](https://github.com/joseph/peregrin) - by Joseph Pearson
|
90
|
+
|
91
|
+
<!-- experimental
|
92
|
+
-->
|
93
|
+
|
94
|
+
- [bookie gem](https://github.com/sandal/bookie) - by Gregory Brown (aka sandal); experimental
|
95
|
+
- [penny](https://github.com/peterc/penny) - by Peter Cooper (aka peterc); experimental
|
96
|
+
- [eeepub3](https://github.com/bubaz/eeepub3) - by Sergey (aka bubaz)
|
97
|
+
|
98
|
+
|
99
|
+
#### Haskell
|
100
|
+
|
101
|
+
- [Pandoc](http://johnmacfarlane.net/pandoc)
|
21
102
|
|
22
103
|
|
23
104
|
## License
|
24
105
|
|
25
106
|
The `hybook` scripts are dedicated to the public domain.
|
26
107
|
Use it as you please with no restrictions whatsoever.
|
108
|
+
|
109
|
+
|
110
|
+
## Questions? Comments?
|
111
|
+
|
112
|
+
Send them along to the
|
113
|
+
[Free Web Slide Show Alternatives (S5, S6, S9, Slidy And Friends) Forum/Mailing List](http://groups.google.com/group/webslideshow).
|
114
|
+
Thanks!
|
data/Rakefile
CHANGED
@@ -5,7 +5,7 @@ Hoe.spec 'hybook' do
|
|
5
5
|
|
6
6
|
self.version = HyBook::VERSION
|
7
7
|
|
8
|
-
self.summary = 'hybook - hypertext
|
8
|
+
self.summary = 'hybook - hypertext book generator'
|
9
9
|
self.description = summary
|
10
10
|
|
11
11
|
self.urls = ['https://github.com/hybook/hybook']
|
@@ -23,5 +23,4 @@ Hoe.spec 'hybook' do
|
|
23
23
|
:required_ruby_version => '>= 1.9.2'
|
24
24
|
}
|
25
25
|
|
26
|
-
|
27
26
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module HyBook
|
4
|
+
module AlbumHelper
|
5
|
+
|
6
|
+
def render_pictures( pics, opts )
|
7
|
+
buf = ''
|
8
|
+
buf << 'I ' # NOTE: cannot use | used by markdown for tables (or just escape???)
|
9
|
+
pics.each do |pic|
|
10
|
+
buf << render_picture( pic, opts )
|
11
|
+
buf << ' I '
|
12
|
+
end
|
13
|
+
buf
|
14
|
+
end
|
15
|
+
|
16
|
+
def render_picture( pic, opts )
|
17
|
+
|
18
|
+
## FIX: add pics_root or assets_root or similar as opt !!!!!!!
|
19
|
+
## do NOT hard code
|
20
|
+
|
21
|
+
size = opts[:size]
|
22
|
+
## puts "[picture] size=#{size}" # NOTE: opts[:size] required for now!!!
|
23
|
+
|
24
|
+
extname = File.extname( pic.path )
|
25
|
+
basename_in = File.basename( pic.path, extname ) # NB: remove extname (that is, suffix e.g. .png,.jpg,.gif etc.)
|
26
|
+
|
27
|
+
# strip leading 1-west- (optional for organizing logos)
|
28
|
+
# e.g. 3-west-austrias becomes austrias
|
29
|
+
basename_out = basename_in.gsub( /[0-9a-z]+-/, '' )
|
30
|
+
|
31
|
+
## puts "path: #{path}, basename_in: #{basename_in}, basename_out: #{basename_out}, extname: #{extname}"
|
32
|
+
|
33
|
+
path = "vendor/assets/images/logos/#{size}x#{size}/#{basename_out}.png"
|
34
|
+
|
35
|
+
buf = ''
|
36
|
+
buf << "_#{pic.title}_{: .key} "
|
37
|
+
buf << "![#{pic.title}](#{path})"
|
38
|
+
buf
|
39
|
+
end
|
40
|
+
|
41
|
+
def render_album( album, opts )
|
42
|
+
###
|
43
|
+
## TODO/FIX:
|
44
|
+
## use TextUtils::PageTemplate.read( path ).render( binding ) - one line
|
45
|
+
|
46
|
+
tmpl = File.read_utf8( "#{HyBook.templates_path}/album.md" )
|
47
|
+
TextUtils::PageTemplate.new( tmpl ).render( binding )
|
48
|
+
end
|
49
|
+
|
50
|
+
end # module AblumHelper
|
51
|
+
|
52
|
+
|
53
|
+
# make helpers available as class methods for now e.g. HyBook.render_album etc.
|
54
|
+
extend AlbumHelper
|
55
|
+
end # module HyBook
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module HyBook
|
4
|
+
|
5
|
+
|
6
|
+
class Album
|
7
|
+
attr_accessor :title
|
8
|
+
attr_accessor :sections
|
9
|
+
|
10
|
+
def initialize( title )
|
11
|
+
@title = title
|
12
|
+
@sections = [] # sections (for pictures)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.create_from_folder( root, opts={} )
|
16
|
+
dirs = Dir[ "#{root}/**/" ] ## get all folders n subfolder
|
17
|
+
## pp dirs
|
18
|
+
|
19
|
+
title = opts[:title ] || 'Untitled'
|
20
|
+
|
21
|
+
album = Album.new( title )
|
22
|
+
|
23
|
+
dirs.each do |dir|
|
24
|
+
section_title = dir[ root.length+1..-2 ] # cut off ROOT_DIR plus leading and trailing /
|
25
|
+
files = Dir[ "#{dir}/*.{png,gif,jpg}" ]
|
26
|
+
|
27
|
+
## fix: use logger
|
28
|
+
puts "dir: #{dir}, title: #{section_title}, files: #{files.size}"
|
29
|
+
next if files.size == 0 # skip if no image files in folder
|
30
|
+
|
31
|
+
section = Section.new( section_title )
|
32
|
+
album.sections << section
|
33
|
+
|
34
|
+
## puts "files:"
|
35
|
+
## pp files
|
36
|
+
|
37
|
+
files.each do |filename|
|
38
|
+
extname = File.extname( filename )
|
39
|
+
basename = File.basename( filename, extname ) # NB: remove extname (that is, suffix e.g. .png,.jpg,.gif etc.)
|
40
|
+
|
41
|
+
picture_title = basename # use basename
|
42
|
+
picture_path = filename # TODO/FIX: strip off leading root path ?? why? why not???
|
43
|
+
### rename path to source or src or file or filename - why? why not??
|
44
|
+
|
45
|
+
|
46
|
+
picture = Picture.new( picture_title, picture_path )
|
47
|
+
section.pictures << picture
|
48
|
+
end
|
49
|
+
end
|
50
|
+
album # return album struct
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
end # class Album
|
55
|
+
|
56
|
+
|
57
|
+
end # module HyBook
|
data/lib/hybook/version.rb
CHANGED
data/lib/hybook.rb
CHANGED
@@ -1,7 +1,30 @@
|
|
1
1
|
|
2
|
+
############
|
3
|
+
# stdlibs
|
4
|
+
|
5
|
+
require 'pp'
|
6
|
+
|
7
|
+
|
8
|
+
###################
|
9
|
+
# 3rd party libs
|
10
|
+
|
11
|
+
require 'textutils'
|
12
|
+
|
13
|
+
|
14
|
+
####################3
|
15
|
+
# our own code
|
2
16
|
|
3
17
|
require 'hybook/version' # let it always go first
|
4
18
|
|
19
|
+
require 'hybook/type/album'
|
20
|
+
require 'hybook/type/picture'
|
21
|
+
require 'hybook/type/section'
|
22
|
+
|
23
|
+
##############################################
|
24
|
+
# builtin std helpers, renderers n builders
|
25
|
+
|
26
|
+
require 'hybook/std/album'
|
27
|
+
|
5
28
|
|
6
29
|
module HyBook
|
7
30
|
|
@@ -12,9 +35,15 @@ module HyBook
|
|
12
35
|
def self.root
|
13
36
|
"#{File.expand_path( File.dirname(File.dirname(__FILE__)) )}"
|
14
37
|
end
|
38
|
+
|
39
|
+
def self.templates_path
|
40
|
+
"#{root}/templates"
|
41
|
+
end
|
15
42
|
|
16
43
|
end # module HyBook
|
17
44
|
|
18
45
|
|
19
46
|
puts HyBook.banner # say hello
|
47
|
+
puts "[hybook] root: #{HyBook.root}"
|
48
|
+
puts "[hybook] templates_path: #{HyBook.templates_path}"
|
20
49
|
|
data/templates/album.md
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hybook
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-02-
|
12
|
+
date: 2014-02-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdoc
|
16
|
-
requirement: &
|
16
|
+
requirement: &21453732 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '4.0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *21453732
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: hoe
|
27
|
-
requirement: &
|
27
|
+
requirement: &21453348 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,8 +32,8 @@ dependencies:
|
|
32
32
|
version: '3.7'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
-
description: hybook - hypertext
|
35
|
+
version_requirements: *21453348
|
36
|
+
description: hybook - hypertext book generator
|
37
37
|
email: webslideshow@googlegroups.com
|
38
38
|
executables: []
|
39
39
|
extensions: []
|
@@ -41,13 +41,19 @@ extra_rdoc_files:
|
|
41
41
|
- History.md
|
42
42
|
- Manifest.txt
|
43
43
|
- README.md
|
44
|
+
- templates/album.md
|
44
45
|
files:
|
45
46
|
- History.md
|
46
47
|
- Manifest.txt
|
47
48
|
- README.md
|
48
49
|
- Rakefile
|
49
50
|
- lib/hybook.rb
|
51
|
+
- lib/hybook/std/album.rb
|
52
|
+
- lib/hybook/type/album.rb
|
53
|
+
- lib/hybook/type/picture.rb
|
54
|
+
- lib/hybook/type/section.rb
|
50
55
|
- lib/hybook/version.rb
|
56
|
+
- templates/album.md
|
51
57
|
homepage: https://github.com/hybook/hybook
|
52
58
|
licenses:
|
53
59
|
- Public Domain
|
@@ -74,5 +80,5 @@ rubyforge_project: hybook
|
|
74
80
|
rubygems_version: 1.8.16
|
75
81
|
signing_key:
|
76
82
|
specification_version: 3
|
77
|
-
summary: hybook - hypertext
|
83
|
+
summary: hybook - hypertext book generator
|
78
84
|
test_files: []
|