maliq 0.0.8 → 0.0.9

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/bin/maliq CHANGED
@@ -36,7 +36,7 @@ class OptionParser
36
36
  EOS
37
37
 
38
38
  opt :liquid, "Liquid plugin path", :type => :string
39
- opt :seq, "Build consecutive filenames", :default => false
39
+ opt :seq, "Build consecutive filenames", :default => true
40
40
  opt :nav, "Create nav.xhtml(TOC)", :default => true
41
41
  opt :toc, "Set title for TOC", :default => ''
42
42
  end
@@ -2,127 +2,36 @@
2
2
  # encoding: UTF-8
3
3
  require "maliq"
4
4
  require "trollop"
5
- require "gepub"
6
5
 
7
6
  class OptionParser
8
- class << self
9
- def parse!
10
- opts = build_opts
7
+ def self.parse!
8
+ Trollop::options do
9
+ version "Maliq #{Maliq::VERSION} (c) 2012 kyoendo"
10
+ banner ~<<-EOS
11
+ Maliq is a markdown, liquid converter for EPUB's xhtml.
11
12
 
12
- files = read_files
13
- markdowns = files.values_atx(:md, :markdown)
14
- metadata = read_metadata(markdowns.first)
15
- generate(metadata, files, opts)
16
- end
17
-
18
- def build_opts
19
- Trollop::options do
20
- version "Maliq #{Maliq::VERSION} (c) 2012 kyoendo"
21
- banner ~<<-EOS
22
- Maliq is a markdown, liquid converter for EPUB's xhtml.
23
-
24
- 'maliq_gepub' command is a tool for generating a EPUB package
25
- using Gepub gem.
26
-
27
- Usage:
28
-
29
- 1. Install gepub gem(gem install gepub)
30
-
31
- 2. Set meta data required for Epub generation in Yaml Front
32
- Matter(YFM) of your markdown file.
33
-
34
- 3. Create xhtml files with 'maliq' command(see maliq -h).
13
+ 'maliq_gepub' command is a tool for generating a EPUB package
14
+ using Gepub gem.
35
15
 
36
- 4. fire up 'maliq_gepub' on the direcroty.
16
+ Usage:
37
17
 
38
- where [options] are:
39
- EOS
40
-
41
- opt :output, "Output Epub filename", :default => 'out.epub'
42
- opt :toc, "Add Table of Contents page", :default => true
43
- end
44
- end
45
-
46
- # Returns a Hash, in which filenames are grouped by extname.
47
- def read_files
48
- Dir['*', '*/*'].group_by { |f| f.ext || :_dir }.to_symkey
49
- end
50
-
51
- # Returns a Hash of metadata.
52
- def read_metadata(path)
53
- unless path
54
- abort "Must exist a markdown filename which have Yaml Front Matter."
55
- end
56
- yml, _ = Maliq::FileUtils.retrieveYFM(File.read path)
57
- return nil if yml.empty?
58
- YAML.load(yml).to_symkey
59
- end
18
+ 1. Install gepub gem(gem install gepub)
60
19
 
61
- def generate(metadata, files, opts)
62
- meta_nodes = GEPUB::Metadata::CONTENT_NODE_LIST + ["unique_identifier"]
63
- metadata.select! { |k, _| meta_nodes.include? k.to_s }
64
- csses = files.values_atx(:css)
65
- images = files.values_atx(:png, :jpg, :jpeg, :gif, :bmp, :tiff)
66
- cover_images, images = images.partition { |f| File.basename(f, '.*').match /^cover/ }
67
- xhtmls = files.values_atx(:xhtml, :html)
68
- cover_xhtml = xhtmls.delete('cover.xhtml')
20
+ 2. Set meta data required for Epub generation in Yaml Front
21
+ Matter(YFM) of your markdown file.
69
22
 
70
- # Create cover page if page not provided for a cover image.
71
- if (cover = cover_images.first) && !cover_xhtml
72
- cover_xhtml = create_cover_page(cover)
73
- end
23
+ 3. Create xhtml files with 'maliq' command(see maliq -h).
74
24
 
75
- navfile, xhtmls = pick_nav_file(xhtmls)
25
+ 4. fire up 'maliq_gepub' on the direcroty.
76
26
 
77
- heading_files = get_heading_files(navfile)
78
-
79
- xhtmls.map! { |f| xhtml_with_heading f }
80
-
81
- GEPUB::Builder.new do
82
- metadata.each { |k, v| send k, *Array(v) }
83
-
84
- resources(:workdir => '.') {
85
- csses.each { |f| file f }
86
- cover_image cover if cover
87
- images.each { |f| file(f) }
88
- ordered {
89
- if cover_xhtml
90
- file 'cover.xhtml' => cover_xhtml
91
- heading 'Cover'
92
- end
93
-
94
- nav navfile if navfile
95
-
96
- xhtmls.each do |fname, head|
97
- file fname
98
- heading head if !navfile || heading_files.include?(fname)
99
- end
100
- }
101
- }
102
- end.generate_epub(opts[:output])
103
- end
104
-
105
- def create_cover_page(cover)
106
- out = Maliq::Converter.new("![cover](#{cover})", title:'Cover').run
107
- StringIO.new(out)
108
- end
109
-
110
- def pick_nav_file(xhtmls)
111
- navs, xhtmls = xhtmls.partition { |fname| fname.match /^(nav|toc)\.x*html$/ }
112
- nav = navs.empty? ? nil : navs.first
113
- return nav, xhtmls
114
- end
115
-
116
- def get_heading_files(navfile)
117
- File.read(navfile).scan(/\w+\.xhtml(?=.*?<\/li>)/) if navfile
118
- end
27
+ where [options] are:
28
+ EOS
119
29
 
120
- def xhtml_with_heading(xhtml)
121
- heading = File.basename(xhtml, '.*').capitalize
122
- File.read(xhtml).match(/<h(?:1|2|3)>(.*?)<\/h(?:1|2|3)>/) { heading = $1 }
123
- [xhtml, heading]
30
+ opt :output, "Output Epub filename", :default => 'out.epub'
31
+ opt :toc, "Add Table of Contents page", :default => true
124
32
  end
125
33
  end
126
34
  end
127
35
 
128
- OptionParser.parse!
36
+ opts = OptionParser.parse!
37
+ Maliq::Epub.new(opts).create!
@@ -1,5 +1,5 @@
1
- require "maliq/version"
2
-
3
1
  module Maliq
4
- %w(system_extensions file_utils converter create).each { |lib| require_relative 'maliq/' + lib }
2
+ %w(version system_extensions file_utils converter create epub).each do |lib|
3
+ require_relative 'maliq/' + lib
4
+ end
5
5
  end
@@ -0,0 +1,109 @@
1
+ # encoding: UTF-8
2
+ require "gepub"
3
+
4
+ class Maliq::Epub
5
+ def initialize(opts)
6
+ @opts = opts
7
+ @output = @opts.delete(:output) || 'out.epub'
8
+ @path = opts[:path] || '.'
9
+ set_files_by_type(@path)
10
+ @metadata = read_metadata
11
+ end
12
+
13
+ def create!
14
+ # Instance variables need to be locals, because a block of,
15
+ # GEPUB::Builder.new changes its context with instance_eval.
16
+ metadata = @metadata
17
+ csses = @csses
18
+ cover_img = @cover_image
19
+ images = @images
20
+ cover_xhtml = @cover_xhtml
21
+ navfile = @navfile
22
+ heading_files = @heading_files
23
+ xhtmls = @xhtmls
24
+ path = @path
25
+
26
+ GEPUB::Builder.new do
27
+ metadata.each { |k, *v| send k, *v }
28
+
29
+ resources(:workdir => path) {
30
+ csses.each { |f| file f }
31
+ cover_image cover_img if cover_img
32
+ images.each { |f| file(f) }
33
+ ordered {
34
+ if cover_xhtml
35
+ file 'cover.xhtml' => cover_xhtml
36
+ heading 'Cover'
37
+ end
38
+
39
+ nav navfile if navfile
40
+
41
+ xhtmls.each do |fname, head|
42
+ file fname
43
+ heading head if !navfile || heading_files.include?(fname)
44
+ end
45
+ }
46
+ }
47
+ end.generate_epub(@output)
48
+ end
49
+
50
+ private
51
+ # Returns a Hash, in which filenames are grouped by extname.
52
+ def set_files_by_type(path)
53
+ files = Dir.chdir(path) { Dir["*", "*/*"].group_by { |f| f.ext || :_dir }.to_symkey }
54
+ @mds = files.values_atx(:md, :markdown)
55
+ xhtmls = files.values_atx(:xhtml, :html)
56
+ @csses = files.values_atx(:css)
57
+ images = files.values_atx(:png, :jpg, :jpeg, :gif, :bmp, :tiff)
58
+ (@cover_image, *_), @images =
59
+ images.partition { |f| File.basename(f, '.*').match /^cover/ }
60
+
61
+ @cover_xhtml =
62
+ if cover = xhtmls.delete('cover.xhtml')
63
+ cover
64
+ elsif @cover_image
65
+ # Create cover page if page not provided for a cover image.
66
+ create_cover_page(@cover_image)
67
+ end
68
+
69
+ @navfile, xhtmls = pick_nav_file(xhtmls)
70
+
71
+ @heading_files = get_heading_files(@navfile)
72
+
73
+ @xhtmls = xhtmls.map { |f| xhtml_with_heading f }
74
+ end
75
+
76
+ # Returns a Hash of metadata.
77
+ def read_metadata
78
+ path = @mds.first
79
+ unless path
80
+ abort "Must exist a markdown filename which have Yaml Front Matter."
81
+ end
82
+ yml, _ = Maliq::FileUtils.retrieveYFM(File.read path)
83
+ return nil if yml.empty?
84
+ metadata = YAML.load(yml).to_symkey
85
+
86
+ meta_nodes = GEPUB::Metadata::CONTENT_NODE_LIST + ["unique_identifier"]
87
+ metadata.select { |k, _| meta_nodes.include? k.to_s }
88
+ end
89
+
90
+ def create_cover_page(cover)
91
+ out = Maliq::Converter.new("![cover](#{cover})", title:'Cover').run
92
+ StringIO.new(out)
93
+ end
94
+
95
+ def pick_nav_file(xhtmls)
96
+ (nav, *_), xhtmls = xhtmls.partition { |fname| fname.match /^(nav|toc)\.x*html$/ }
97
+ return nav, xhtmls
98
+ end
99
+
100
+ def get_heading_files(navfile)
101
+ File.read(navfile).scan(/\w+\.xhtml(?=.*?<\/li>)/) if navfile
102
+ end
103
+
104
+ def xhtml_with_heading(xhtml)
105
+ heading = File.basename(xhtml, '.*').capitalize
106
+ File.read(xhtml).match(/<h(?:1|2|3)>(.*?)<\/h(?:1|2|3)>/) { heading = $1 }
107
+ [xhtml, heading]
108
+ end
109
+ end
@@ -1,3 +1,3 @@
1
1
  module Maliq
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maliq
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-23 00:00:00.000000000 Z
12
+ date: 2012-12-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: trollop
@@ -110,6 +110,7 @@ files:
110
110
  - lib/maliq.rb
111
111
  - lib/maliq/converter.rb
112
112
  - lib/maliq/create.rb
113
+ - lib/maliq/epub.rb
113
114
  - lib/maliq/file_utils.rb
114
115
  - lib/maliq/system_extensions.rb
115
116
  - lib/maliq/version.rb