pubgen 0.1.3 → 0.2.0
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/.gitignore +1 -1
 - data/README.md +41 -24
 - data/Rakefile +76 -1
 - data/bin/pubgen +73 -53
 - data/lib/pubgen.rb +1 -0
 - data/lib/pubgen/container.rb +2 -0
 - data/lib/pubgen/cover_page.rb +1 -0
 - data/lib/pubgen/ncx.rb +6 -6
 - data/lib/pubgen/opf.rb +25 -24
 - data/lib/pubgen/version.rb +2 -1
 - data/lib/pubgen/yaml.rb +130 -0
 - data/pubgen.gemspec +3 -2
 - data/test/output/will_oldham.yml +42 -0
 - data/test/test_ncx.rb +0 -1
 - data/test/test_opf.rb +0 -1
 - data/test/toc_1/will_oldham.html +646 -0
 - data/test/toc_1/will_oldham.yml +85 -0
 - data/test/toc_2/couchdb.html +55 -0
 - data/test/toc_2/couchdb.yml +64 -0
 - metadata +23 -7
 
    
        data/.gitignore
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,7 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Pubgen
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            Pubgen is a command-line based epub generator.  
     | 
| 
       4 
     | 
    
         
            -
            a epub for you. 
         
     | 
| 
      
 3 
     | 
    
         
            +
            Pubgen is a command-line based epub generator. Make an epub with YAML.
         
     | 
| 
       5 
4 
     | 
    
         | 
| 
       6 
5 
     | 
    
         
             
            ## Installation
         
     | 
| 
       7 
6 
     | 
    
         | 
| 
         @@ -14,22 +13,26 @@ $ gem install pubgen 
     | 
|
| 
       14 
13 
     | 
    
         | 
| 
       15 
14 
     | 
    
         
             
            ```bash
         
     | 
| 
       16 
15 
     | 
    
         
             
            $ pubgen -h
         
     | 
| 
       17 
     | 
    
         
            -
            pubgen,  
     | 
| 
      
 16 
     | 
    
         
            +
            pubgen 0.2.0, an epub generator. (http://github.com/9beach/pubgen)
         
     | 
| 
       18 
17 
     | 
    
         | 
| 
       19 
18 
     | 
    
         
             
            Usage:
         
     | 
| 
       20 
19 
     | 
    
         
             
              pubgen <yaml file> [-o <epub file>] [-v]
         
     | 
| 
       21 
20 
     | 
    
         
             
              pubgen <yaml file> -m
         
     | 
| 
      
 21 
     | 
    
         
            +
              pubgen -t <toc file> <epub root path>
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                -o, --output  
     | 
| 
      
 23 
     | 
    
         
            +
                -o, --output EPUB_FILE           Specify output epub file path
         
     | 
| 
       24 
24 
     | 
    
         
             
                -m, --meta-file-only             Generate .opf, .ncx, mimetype, ...
         
     | 
| 
      
 25 
     | 
    
         
            +
                -t, --toc TOC_FILE EPUB_ROOT     Print YAML using TOC file
         
     | 
| 
       25 
26 
     | 
    
         
             
                -v, --verbose                    Verbose output
         
     | 
| 
       26 
27 
     | 
    
         
             
            ```
         
     | 
| 
       27 
28 
     | 
    
         | 
| 
       28 
29 
     | 
    
         
             
            ## Quick Start
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            ### Create an epub
         
     | 
| 
       29 
32 
     | 
    
         | 
| 
       30 
33 
     | 
    
         
             
            Prepare files (documents, images, style sheets, etc.) that make up the 
         
     | 
| 
       31 
     | 
    
         
            -
            publication. iBooks requires strict xhtml. [`tidy -asxhtml`] 
         
     | 
| 
       32 
     | 
    
         
            -
            (http://tidy.sourceforge.net/) will be helpful.
         
     | 
| 
      
 34 
     | 
    
         
            +
            publication. Apple's iBooks requires strict xhtml. [`tidy -asxhtml`] 
         
     | 
| 
      
 35 
     | 
    
         
            +
            (http://tidy.sourceforge.net/) will be helpful to you.
         
     | 
| 
       33 
36 
     | 
    
         | 
| 
       34 
37 
     | 
    
         
             
            ```bash
         
     | 
| 
       35 
38 
     | 
    
         
             
            $ find .
         
     | 
| 
         @@ -45,7 +48,7 @@ $ find . 
     | 
|
| 
       45 
48 
     | 
    
         
             
            ./style.css
         
     | 
| 
       46 
49 
     | 
    
         
             
            ```
         
     | 
| 
       47 
50 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
            Create the utf-8 encoded YAML file describing the publication. As  
     | 
| 
      
 51 
     | 
    
         
            +
            Create the utf-8 encoded YAML file describing the publication. As an example, 
         
     | 
| 
       49 
52 
     | 
    
         
             
            `will_oldham.yml`.
         
     | 
| 
       50 
53 
     | 
    
         | 
| 
       51 
54 
     | 
    
         
             
            ```yaml
         
     | 
| 
         @@ -71,7 +74,7 @@ metadata: 
     | 
|
| 
       71 
74 
     | 
    
         
             
            # See http://idpf.org/epub/20/spec/OPF_2.0.1_draft.htm#Section2.6
         
     | 
| 
       72 
75 
     | 
    
         
             
            #
         
     | 
| 
       73 
76 
     | 
    
         
             
            # If you provide cover-image without cover-page, pubgen automatically 
         
     | 
| 
       74 
     | 
    
         
            -
            # generate cover-page xhtml, and add it to manifest and spine
         
     | 
| 
      
 77 
     | 
    
         
            +
            # generate cover-page xhtml, and add it to manifest and spine.
         
     | 
| 
       75 
78 
     | 
    
         
             
            guide:
         
     | 
| 
       76 
79 
     | 
    
         
             
              toc-page:
         
     | 
| 
       77 
80 
     | 
    
         
             
              title-page: 
         
     | 
| 
         @@ -127,26 +130,40 @@ toc: 
     | 
|
| 
       127 
130 
     | 
    
         
             
            Run pubgen.
         
     | 
| 
       128 
131 
     | 
    
         | 
| 
       129 
132 
     | 
    
         
             
            ```bash
         
     | 
| 
       130 
     | 
    
         
            -
            $ pubgen  
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
     | 
    
         
            -
             
     | 
| 
      
 133 
     | 
    
         
            +
            $ pubgen <epub root>/will_oldham.yml -o out.epub
         
     | 
| 
      
 134 
     | 
    
         
            +
            zip > out.epub
         
     | 
| 
      
 135 
     | 
    
         
            +
            ```
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
            Done!
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
            ### Create meta files
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
            If you understand [Open Packaging Format 2.0.1] 
         
     | 
| 
      
 142 
     | 
    
         
            +
            (http://idpf.org/epub/20/spec/OPF_2.0.1_draft.htm) spec, and want to edit some 
         
     | 
| 
      
 143 
     | 
    
         
            +
            properties of the epub before packaging, you can try pubgen with 
         
     | 
| 
      
 144 
     | 
    
         
            +
            `--meta-file-only` option.
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
            ```bash
         
     | 
| 
      
 147 
     | 
    
         
            +
            $ cd <epub root>
         
     | 
| 
      
 148 
     | 
    
         
            +
            $ pubgen will_oldham.yml -m
         
     | 
| 
       140 
149 
     | 
    
         
             
            cat > META-INF/container.xml
         
     | 
| 
       141 
150 
     | 
    
         
             
            cat > mimetype
         
     | 
| 
       142 
151 
     | 
    
         
             
            cat > cover-pubgen.xhtml
         
     | 
| 
       143 
152 
     | 
    
         
             
            cat > content.opf
         
     | 
| 
       144 
153 
     | 
    
         
             
            cat > toc.ncx
         
     | 
| 
       145 
     | 
    
         
            -
             
     | 
| 
       146 
     | 
    
         
            -
             
     | 
| 
       147 
     | 
    
         
            -
            mv .pubgen-4f4a210e/pubgen.epub 'Will Oldham_ Wikipedia, the free encyclopedia.epub'
         
     | 
| 
       148 
     | 
    
         
            -
            rm -rf .pubgen-4f4a210e
         
     | 
| 
       149 
     | 
    
         
            -
            # Successfully generated 'Will Oldham_ Wikipedia, the free encyclopedia.epub'
         
     | 
| 
      
 154 
     | 
    
         
            +
            # Edit content.opf/toc.ncx, and archive epub with zip command
         
     | 
| 
      
 155 
     | 
    
         
            +
            $ zip -r ../will_oldham.epub .
         
     | 
| 
       150 
156 
     | 
    
         
             
            ```
         
     | 
| 
       151 
157 
     | 
    
         | 
| 
       152 
     | 
    
         
            -
             
     | 
| 
      
 158 
     | 
    
         
            +
            ### Generate YAML using TOC file
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
            Pubgen generates a YAML using TOC file. Pubgen-generated YAML is not complete, 
         
     | 
| 
      
 161 
     | 
    
         
            +
            but is probably quite useful.
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
            ```bash
         
     | 
| 
      
 164 
     | 
    
         
            +
            $ pubgen -t <epub root>/contents/toc.html <epub root> > out.yml
         
     | 
| 
      
 165 
     | 
    
         
            +
            $ vi out.yml # Open and complete YAML
         
     | 
| 
      
 166 
     | 
    
         
            +
            $ cp out.yml <epub root>
         
     | 
| 
      
 167 
     | 
    
         
            +
            $ pubgen <epub root>/out.yml -o out.epub
         
     | 
| 
      
 168 
     | 
    
         
            +
            zip > out.epub
         
     | 
| 
      
 169 
     | 
    
         
            +
            ```
         
     | 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -1,10 +1,85 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'rake'
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'rake/testtask'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
            task :default => [: 
     | 
| 
      
 4 
     | 
    
         
            +
            task :default => [:test_bad_options]
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
       5 
6 
     | 
    
         
             
            Rake::TestTask.new('test_units') do |t|
         
     | 
| 
       6 
7 
     | 
    
         
             
              t.libs << %w[lib test]
         
     | 
| 
       7 
8 
     | 
    
         
             
              t.pattern = 'test/test*.rb'
         
     | 
| 
       8 
9 
     | 
    
         
             
              t.warning = true
         
     | 
| 
      
 10 
     | 
    
         
            +
              # t.verbose = true
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            def sh_echo_off(cmd)
         
     | 
| 
      
 14 
     | 
    
         
            +
              %x[#{cmd}]
         
     | 
| 
      
 15 
     | 
    
         
            +
              raise "Failed: #{cmd}" unless $?.success?
         
     | 
| 
      
 16 
     | 
    
         
            +
            end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            def sh_echo_off_failure(cmd)
         
     | 
| 
      
 19 
     | 
    
         
            +
              %x[#{cmd} > /dev/null 2>&1]
         
     | 
| 
      
 20 
     | 
    
         
            +
              raise "Not failed: #{cmd}" if $?.success?
         
     | 
| 
      
 21 
     | 
    
         
            +
            end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            $tmpdir = '.rake_test'
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            task :test_bad_options => :test_toc_2 do |t|
         
     | 
| 
      
 26 
     | 
    
         
            +
              $stdout << "# task: #{t} => "
         
     | 
| 
      
 27 
     | 
    
         
            +
              sh_echo_off_failure("bin/pubgen -t x.html -o a.epub")
         
     | 
| 
      
 28 
     | 
    
         
            +
              sh_echo_off_failure("bin/pubgen -t x.html -m")
         
     | 
| 
      
 29 
     | 
    
         
            +
              sh_echo_off_failure("bin/pubgen -o x.epub -m")
         
     | 
| 
      
 30 
     | 
    
         
            +
              sh_echo_off_failure("bin/pubgen")
         
     | 
| 
      
 31 
     | 
    
         
            +
              sh_echo_off_failure("bin/pubgen -t x.html")
         
     | 
| 
      
 32 
     | 
    
         
            +
              sh_echo_off_failure("bin/pubgen -o")
         
     | 
| 
      
 33 
     | 
    
         
            +
              sh_echo_off_failure("bin/pubgen -t")
         
     | 
| 
      
 34 
     | 
    
         
            +
              puts "done!"
         
     | 
| 
      
 35 
     | 
    
         
            +
            end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            task :test_toc_2 => :test_toc_1 do |t|
         
     | 
| 
      
 38 
     | 
    
         
            +
              $stdout << "# task: #{t} => "
         
     | 
| 
      
 39 
     | 
    
         
            +
              sh_echo_off("mkdir -p #{$tmpdir}")
         
     | 
| 
      
 40 
     | 
    
         
            +
              sh_echo_off("cp test/toc_2/couchdb.html #{$tmpdir}")
         
     | 
| 
      
 41 
     | 
    
         
            +
              sh_echo_off("touch #{$tmpdir}/foreword.html #{$tmpdir}/preface.html " << 
         
     | 
| 
      
 42 
     | 
    
         
            +
                "#{$tmpdir}/why.html #{$tmpdir}/consistency.html #{$tmpdir}/tour.html " <<
         
     | 
| 
      
 43 
     | 
    
         
            +
                "#{$tmpdir}/api.html")
         
     | 
| 
      
 44 
     | 
    
         
            +
              o_yml = "#{$tmpdir}/.out.yml"
         
     | 
| 
      
 45 
     | 
    
         
            +
              sh_echo_off("bin/pubgen -t #{$tmpdir}/couchdb.html #{$tmpdir} > #{o_yml}")
         
     | 
| 
      
 46 
     | 
    
         
            +
              sh_echo_off("diff test/toc_2/couchdb.yml #{o_yml}")
         
     | 
| 
      
 47 
     | 
    
         
            +
              sh_echo_off("rm -rf #{$tmpdir}")
         
     | 
| 
      
 48 
     | 
    
         
            +
              puts "done!"
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            task :test_toc_1 => :test_output do |t|
         
     | 
| 
      
 52 
     | 
    
         
            +
              $stdout << "# task: #{t} => "
         
     | 
| 
      
 53 
     | 
    
         
            +
              sh_echo_off("mkdir -p #{$tmpdir}")
         
     | 
| 
      
 54 
     | 
    
         
            +
              o_yml = "#{$tmpdir}/.out.yml"
         
     | 
| 
      
 55 
     | 
    
         
            +
              sh_echo_off("bin/pubgen -t test/toc_1/will_oldham.html test/toc_1 > #{o_yml}")
         
     | 
| 
      
 56 
     | 
    
         
            +
              sh_echo_off("diff test/toc_1/will_oldham.yml #{o_yml}")
         
     | 
| 
      
 57 
     | 
    
         
            +
              sh_echo_off("rm -rf #{$tmpdir}")
         
     | 
| 
      
 58 
     | 
    
         
            +
              puts "done!"
         
     | 
| 
      
 59 
     | 
    
         
            +
            end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            task :test_output => :test_units do |t|
         
     | 
| 
      
 62 
     | 
    
         
            +
              $stdout << "# task: #{t} => "
         
     | 
| 
      
 63 
     | 
    
         
            +
              sh_echo_off("mkdir -p #{$tmpdir}/contents")
         
     | 
| 
      
 64 
     | 
    
         
            +
              sh_echo_off("mkdir -p #{$tmpdir}/images")
         
     | 
| 
      
 65 
     | 
    
         
            +
              sh_echo_off("cp test/output/will_oldham.yml #{$tmpdir}")
         
     | 
| 
      
 66 
     | 
    
         
            +
              sh_echo_off("touch #{$tmpdir}/contents/a.html #{$tmpdir}/contents/b.html " <<
         
     | 
| 
      
 67 
     | 
    
         
            +
                "#{$tmpdir}/images/1.jpg #{$tmpdir}/images/2.jpg " <<
         
     | 
| 
      
 68 
     | 
    
         
            +
                "#{$tmpdir}/images/3.jpg #{$tmpdir}/images/cover.jpg " <<
         
     | 
| 
      
 69 
     | 
    
         
            +
                "#{$tmpdir}/style.css")
         
     | 
| 
      
 70 
     | 
    
         
            +
              sh_echo_off("bin/pubgen #{$tmpdir}/will_oldham.yml -o #{$tmpdir}/a.epub " <<
         
     | 
| 
      
 71 
     | 
    
         
            +
                "> /dev/null")
         
     | 
| 
      
 72 
     | 
    
         
            +
              sh_echo_off("rm -rf #{$tmpdir}")
         
     | 
| 
      
 73 
     | 
    
         
            +
              puts "done!"
         
     | 
| 
      
 74 
     | 
    
         
            +
            end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
            task :build_gem do
         
     | 
| 
      
 77 
     | 
    
         
            +
              sh "gem build pubgen.gemspec"
         
     | 
| 
      
 78 
     | 
    
         
            +
            end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            task :push_gem => :build_gem do
         
     | 
| 
      
 81 
     | 
    
         
            +
              $:.push File.expand_path("../lib", __FILE__)
         
     | 
| 
      
 82 
     | 
    
         
            +
              require "pubgen/version"
         
     | 
| 
      
 83 
     | 
    
         
            +
              sh "gem push pubgen-#{Pubgen::VERSION}.gem"
         
     | 
| 
       9 
84 
     | 
    
         
             
            end
         
     | 
| 
       10 
85 
     | 
    
         | 
    
        data/bin/pubgen
    CHANGED
    
    | 
         @@ -9,63 +9,92 @@ require 'zipruby' 
     | 
|
| 
       9 
9 
     | 
    
         
             
            $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
         
     | 
| 
       10 
10 
     | 
    
         
             
            require 'pubgen'
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
      
 12 
     | 
    
         
            +
            # just for one line log
         
     | 
| 
      
 13 
     | 
    
         
            +
            def pubgen_log(log, verbose = true)
         
     | 
| 
      
 14 
     | 
    
         
            +
              $stdout << log << "\n" if verbose
         
     | 
| 
      
 15 
     | 
    
         
            +
            end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            def pubgen_err(err)
         
     | 
| 
      
 18 
     | 
    
         
            +
              $stderr << '# ' << err << "\n"
         
     | 
| 
      
 19 
     | 
    
         
            +
            end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            help = <<EOF
         
     | 
| 
      
 22 
     | 
    
         
            +
            pubgen #{Pubgen::VERSION}, an epub generator. (http://github.com/9beach/pubgen)
         
     | 
| 
       14 
23 
     | 
    
         | 
| 
       15 
24 
     | 
    
         
             
            Usage:
         
     | 
| 
       16 
25 
     | 
    
         
             
              pubgen <yaml file> [-o <epub file>] [-v]
         
     | 
| 
       17 
26 
     | 
    
         
             
              pubgen <yaml file> -m
         
     | 
| 
      
 27 
     | 
    
         
            +
              pubgen -t <toc file> <epub root path>
         
     | 
| 
       18 
28 
     | 
    
         | 
| 
       19 
29 
     | 
    
         
             
            EOF
         
     | 
| 
       20 
30 
     | 
    
         | 
| 
       21 
31 
     | 
    
         
             
            options = {}
         
     | 
| 
       22 
32 
     | 
    
         
             
            opts = OptionParser.new do |opts|
         
     | 
| 
       23 
     | 
    
         
            -
              opts.banner =  
     | 
| 
      
 33 
     | 
    
         
            +
              opts.banner = help
         
     | 
| 
       24 
34 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
              opts.on('-o', '--output  
     | 
| 
       26 
     | 
    
         
            -
                options[:epub_path] =  
     | 
| 
      
 35 
     | 
    
         
            +
              opts.on('-o', '--output EPUB_FILE', 'Specify output epub file path') do |o|
         
     | 
| 
      
 36 
     | 
    
         
            +
                options[:epub_path] = o
         
     | 
| 
       27 
37 
     | 
    
         
             
              end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                options[:meta_file_only] = m
         
     | 
| 
      
 38 
     | 
    
         
            +
              opts.on('-m', '--meta-file-only', 'Generate .opf, .ncx, mimetype, ...') do |o|
         
     | 
| 
      
 39 
     | 
    
         
            +
                options[:meta_file_only] = o
         
     | 
| 
       31 
40 
     | 
    
         
             
              end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
      
 41 
     | 
    
         
            +
              opts.on('-t', '--toc TOC_FILE EPUB_ROOT', 'Print YAML using TOC file') do |o|
         
     | 
| 
      
 42 
     | 
    
         
            +
                options[:toc_path] = o
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
              opts.on('-v', '--verbose', 'Verbose output') do |o|
         
     | 
| 
      
 45 
     | 
    
         
            +
                options[:verbose] = o
         
     | 
| 
       35 
46 
     | 
    
         
             
              end
         
     | 
| 
       36 
47 
     | 
    
         
             
            end
         
     | 
| 
       37 
48 
     | 
    
         
             
            opts.parse!(ARGV)
         
     | 
| 
       38 
49 
     | 
    
         | 
| 
       39 
50 
     | 
    
         
             
            # check options validity
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
      
 51 
     | 
    
         
            +
            option_count = 0
         
     | 
| 
      
 52 
     | 
    
         
            +
            option_count += 1 if options[:meta_file_only] == true
         
     | 
| 
      
 53 
     | 
    
         
            +
            option_count += 1 if options[:epub_path] != nil
         
     | 
| 
      
 54 
     | 
    
         
            +
            option_count += 1 if options[:toc_path] != nil
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            if option_count > 1
         
     | 
| 
      
 57 
     | 
    
         
            +
              $stderr << "pubgen: `--meta-file-only', `--output' and `--toc' " << 
         
     | 
| 
      
 58 
     | 
    
         
            +
                         "options cannot be combined\n\n" <<
         
     | 
| 
      
 59 
     | 
    
         
            +
                         "Try `pubgen -h' for more informations\n"
         
     | 
| 
       46 
60 
     | 
    
         
             
              exit 1
         
     | 
| 
       47 
61 
     | 
    
         
             
            end
         
     | 
| 
       48 
62 
     | 
    
         | 
| 
       49 
63 
     | 
    
         
             
            if ARGV.size != 1
         
     | 
| 
       50 
     | 
    
         
            -
               
     | 
| 
       51 
     | 
    
         
            -
            pubgen: specify a  
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
      
 64 
     | 
    
         
            +
              if options[:toc_path] != nil
         
     | 
| 
      
 65 
     | 
    
         
            +
                $stderr << "pubgen: specify a epub root path\n\n" << 
         
     | 
| 
      
 66 
     | 
    
         
            +
                           "Try `pubgen -h' for more informations\n"
         
     | 
| 
      
 67 
     | 
    
         
            +
              else
         
     | 
| 
      
 68 
     | 
    
         
            +
                $stderr << "pubgen: specify a yaml file\n\n" << 
         
     | 
| 
      
 69 
     | 
    
         
            +
                           "Try `pubgen -h' for more informations\n"
         
     | 
| 
      
 70 
     | 
    
         
            +
              end
         
     | 
| 
       55 
71 
     | 
    
         
             
              exit 1
         
     | 
| 
       56 
     | 
    
         
            -
            else
         
     | 
| 
       57 
     | 
    
         
            -
              options[:yaml_path] = ARGV[0]
         
     | 
| 
       58 
72 
     | 
    
         
             
            end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
         
     | 
| 
      
 74 
     | 
    
         
            +
            # `--toc' option. process it and exit
         
     | 
| 
      
 75 
     | 
    
         
            +
            if options[:toc_path] != nil
         
     | 
| 
      
 76 
     | 
    
         
            +
              options[:epub_root] = ARGV[0]
         
     | 
| 
      
 77 
     | 
    
         
            +
              begin
         
     | 
| 
      
 78 
     | 
    
         
            +
                $stdout << Pubgen::YAML.generate(options[:epub_root], options[:toc_path])
         
     | 
| 
      
 79 
     | 
    
         
            +
              rescue Exception=>e
         
     | 
| 
      
 80 
     | 
    
         
            +
                pubgen_err(e.to_s)
         
     | 
| 
      
 81 
     | 
    
         
            +
                exit 1
         
     | 
| 
      
 82 
     | 
    
         
            +
              end
         
     | 
| 
      
 83 
     | 
    
         
            +
              exit 0
         
     | 
| 
      
 84 
     | 
    
         
            +
            end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
            # now, options[:toc_path] == nil
         
     | 
| 
      
 87 
     | 
    
         
            +
            options[:yaml_path] = ARGV[0]
         
     | 
| 
       59 
88 
     | 
    
         | 
| 
       60 
89 
     | 
    
         
             
            begin
         
     | 
| 
       61 
90 
     | 
    
         
             
              yaml = YAML::load File.open(options[:yaml_path])
         
     | 
| 
       62 
91 
     | 
    
         
             
            rescue Exception=>e
         
     | 
| 
       63 
     | 
    
         
            -
              pubgen_err("While loading yaml: "  
     | 
| 
      
 92 
     | 
    
         
            +
              pubgen_err("While loading yaml: " << e.to_s)
         
     | 
| 
       64 
93 
     | 
    
         
             
              exit 1
         
     | 
| 
       65 
94 
     | 
    
         
             
            end
         
     | 
| 
       66 
95 
     | 
    
         | 
| 
       67 
96 
     | 
    
         
             
            if yaml['metadata']['title'] == nil
         
     | 
| 
       68 
     | 
    
         
            -
              pubgen_err("Failed to  
     | 
| 
      
 97 
     | 
    
         
            +
              pubgen_err("Failed to get the value of `title' attribute in: " << 
         
     | 
| 
       69 
98 
     | 
    
         
             
                         options[:yaml_path])
         
     | 
| 
       70 
99 
     | 
    
         
             
              exit 1
         
     | 
| 
       71 
100 
     | 
    
         
             
            end
         
     | 
| 
         @@ -77,15 +106,6 @@ if !options[:meta_file_only] && !options[:epub_path] 
     | 
|
| 
       77 
106 
     | 
    
         
             
            end
         
     | 
| 
       78 
107 
     | 
    
         
             
            # options done
         
     | 
| 
       79 
108 
     | 
    
         | 
| 
       80 
     | 
    
         
            -
            # just for one line log
         
     | 
| 
       81 
     | 
    
         
            -
            def pubgen_log(log, verbose = true)
         
     | 
| 
       82 
     | 
    
         
            -
              $stdout << log + "\n" if verbose
         
     | 
| 
       83 
     | 
    
         
            -
            end
         
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
            def pubgen_err(err)
         
     | 
| 
       86 
     | 
    
         
            -
              $stderr << '# ' + err + "\n"
         
     | 
| 
       87 
     | 
    
         
            -
            end
         
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
109 
     | 
    
         
             
            if yaml['metadata']['creator'] == nil
         
     | 
| 
       90 
110 
     | 
    
         
             
              yaml['metadata']['creator'] = "pubgen-#{Pubgen::VERSION}" 
         
     | 
| 
       91 
111 
     | 
    
         
             
            end
         
     | 
| 
         @@ -102,35 +122,35 @@ begin 
     | 
|
| 
       102 
122 
     | 
    
         
             
                # temporal working directory
         
     | 
| 
       103 
123 
     | 
    
         
             
                $tmpdir = ".pubgen-%08x" % Time.now.to_i 
         
     | 
| 
       104 
124 
     | 
    
         
             
                Dir.mkdir($tmpdir)
         
     | 
| 
       105 
     | 
    
         
            -
                pubgen_log("mkdir "  
     | 
| 
      
 125 
     | 
    
         
            +
                pubgen_log("mkdir " << $tmpdir, options[:verbose])
         
     | 
| 
       106 
126 
     | 
    
         | 
| 
       107 
127 
     | 
    
         
             
                # copy all the files of manifest to $tmpdir
         
     | 
| 
       108 
128 
     | 
    
         
             
                yaml['manifest'].each do |file|
         
     | 
| 
       109 
129 
     | 
    
         
             
                  if Pubgen::OPF.valid_manifest_element?(file) == false
         
     | 
| 
       110 
     | 
    
         
            -
                    raise "Invalid manifest (not in sub-directory of yaml file): "  
     | 
| 
      
 130 
     | 
    
         
            +
                    raise "Invalid manifest (not in sub-directory of yaml file): " << file
         
     | 
| 
       111 
131 
     | 
    
         
             
                  end
         
     | 
| 
       112 
     | 
    
         
            -
                  target_dir = "#{$tmpdir 
     | 
| 
      
 132 
     | 
    
         
            +
                  target_dir = "#{File.join($tmpdir, File.dirname(file))}"
         
     | 
| 
       113 
133 
     | 
    
         
             
                  FileUtils.mkdir_p(target_dir)
         
     | 
| 
       114 
     | 
    
         
            -
                  FileUtils.cp("#{File.dirname(options[:yaml_path]) 
     | 
| 
      
 134 
     | 
    
         
            +
                  FileUtils.cp("#{File.join(File.dirname(options[:yaml_path]), file)}", 
         
     | 
| 
       115 
135 
     | 
    
         
             
                               target_dir, :verbose=>options[:verbose])
         
     | 
| 
       116 
136 
     | 
    
         
             
                end
         
     | 
| 
       117 
137 
     | 
    
         | 
| 
       118 
138 
     | 
    
         
             
                # change pwd
         
     | 
| 
       119 
139 
     | 
    
         
             
                Dir.chdir($tmpdir)
         
     | 
| 
       120 
     | 
    
         
            -
                pubgen_log("cd "  
     | 
| 
      
 140 
     | 
    
         
            +
                pubgen_log("cd " << $tmpdir, options[:verbose])
         
     | 
| 
       121 
141 
     | 
    
         
             
              end
         
     | 
| 
       122 
142 
     | 
    
         | 
| 
       123 
143 
     | 
    
         
             
              # generate container.xml 
         
     | 
| 
       124 
144 
     | 
    
         
             
              # it's path is fixed (META-INF/container.xml)
         
     | 
| 
       125 
145 
     | 
    
         
             
              Dir.mkdir('META-INF') if !File::directory?('META-INF')
         
     | 
| 
       126 
     | 
    
         
            -
              container = File.new('META-INF 
     | 
| 
      
 146 
     | 
    
         
            +
              container = File.new(File.join('META-INF', 'container.xml'), 'w')
         
     | 
| 
       127 
147 
     | 
    
         
             
              container.write(Pubgen::Container.generate)
         
     | 
| 
       128 
148 
     | 
    
         
             
              container.close
         
     | 
| 
       129 
     | 
    
         
            -
              pubgen_log( 
     | 
| 
      
 149 
     | 
    
         
            +
              pubgen_log("cat > #{File.join('META-INF', 'container.xml')}",
         
     | 
| 
       130 
150 
     | 
    
         
             
                         options[:meta_file_only] || options[:verbose])
         
     | 
| 
       131 
151 
     | 
    
         | 
| 
       132 
152 
     | 
    
         
             
              # generate mimetype
         
     | 
| 
       133 
     | 
    
         
            -
              # it's path is also fixed ( 
     | 
| 
      
 153 
     | 
    
         
            +
              # it's path is also fixed (mimetype)
         
     | 
| 
       134 
154 
     | 
    
         
             
              mimetype = File.new('mimetype', 'w')
         
     | 
| 
       135 
155 
     | 
    
         
             
              mimetype.write('application/epub+zip')
         
     | 
| 
       136 
156 
     | 
    
         
             
              mimetype.close
         
     | 
| 
         @@ -143,7 +163,7 @@ begin 
     | 
|
| 
       143 
163 
     | 
    
         
             
                cover_page = File.new(COVER_PAGE_PATH, 'w')
         
     | 
| 
       144 
164 
     | 
    
         
             
                cover_page.write(Pubgen::CoverPage.generate(yaml['guide']['cover-image']))
         
     | 
| 
       145 
165 
     | 
    
         
             
                cover_page.close
         
     | 
| 
       146 
     | 
    
         
            -
                pubgen_log("cat > "  
     | 
| 
      
 166 
     | 
    
         
            +
                pubgen_log("cat > " << COVER_PAGE_PATH, 
         
     | 
| 
       147 
167 
     | 
    
         
             
                           options[:meta_file_only] || options[:verbose])
         
     | 
| 
       148 
168 
     | 
    
         | 
| 
       149 
169 
     | 
    
         
             
                # add/set it to manifest, spine, and cover-page
         
     | 
| 
         @@ -153,7 +173,7 @@ begin 
     | 
|
| 
       153 
173 
     | 
    
         
             
              end
         
     | 
| 
       154 
174 
     | 
    
         | 
| 
       155 
175 
     | 
    
         
             
              # generate uuid
         
     | 
| 
       156 
     | 
    
         
            -
              uuid = "%08x-" % Time.now.to_i  
     | 
| 
      
 176 
     | 
    
         
            +
              uuid = "%08x-" % Time.now.to_i << 
         
     | 
| 
       157 
177 
     | 
    
         
             
                        [4,4,4,12].map {|l| "%0#{l}x" % rand(1 << l*4) }.join('-')
         
     | 
| 
       158 
178 
     | 
    
         
             
              # uuid = UUID.new.generate
         
     | 
| 
       159 
179 
     | 
    
         | 
| 
         @@ -161,7 +181,7 @@ begin 
     | 
|
| 
       161 
181 
     | 
    
         
             
              opf = File.new(Pubgen::Container.opf_path, 'w')
         
     | 
| 
       162 
182 
     | 
    
         
             
              opf.write(Pubgen::OPF.generate(yaml, uuid))
         
     | 
| 
       163 
183 
     | 
    
         
             
              opf.close
         
     | 
| 
       164 
     | 
    
         
            -
              pubgen_log("cat > "  
     | 
| 
      
 184 
     | 
    
         
            +
              pubgen_log("cat > " << Pubgen::Container.opf_path, 
         
     | 
| 
       165 
185 
     | 
    
         
             
                         options[:meta_file_only] || options[:verbose])
         
     | 
| 
       166 
186 
     | 
    
         
             
              # pubgen automatically added .ncx file to opf's manifest
         
     | 
| 
       167 
187 
     | 
    
         | 
| 
         @@ -169,7 +189,7 @@ begin 
     | 
|
| 
       169 
189 
     | 
    
         
             
              ncx = File.new(Pubgen::OPF.ncx_path, 'w')
         
     | 
| 
       170 
190 
     | 
    
         
             
              ncx.write(Pubgen::NCX.generate(yaml['metadata']['title'], yaml['toc'], uuid))
         
     | 
| 
       171 
191 
     | 
    
         
             
              ncx.close
         
     | 
| 
       172 
     | 
    
         
            -
              pubgen_log("cat > "  
     | 
| 
      
 192 
     | 
    
         
            +
              pubgen_log("cat > " << Pubgen::OPF.ncx_path, 
         
     | 
| 
       173 
193 
     | 
    
         
             
                         options[:meta_file_only] || options[:verbose])
         
     | 
| 
       174 
194 
     | 
    
         | 
| 
       175 
195 
     | 
    
         
             
              # make an epub
         
     | 
| 
         @@ -187,10 +207,10 @@ begin 
     | 
|
| 
       187 
207 
     | 
    
         | 
| 
       188 
208 
     | 
    
         
             
                # mv pubgen.epub to options[:epub_path]
         
     | 
| 
       189 
209 
     | 
    
         
             
                Dir.chdir($pwd_old)
         
     | 
| 
       190 
     | 
    
         
            -
                pubgen_log("cd "  
     | 
| 
       191 
     | 
    
         
            -
                FileUtils.mv($tmpdir  
     | 
| 
       192 
     | 
    
         
            -
                pubgen_log("mv #{$tmpdir 
     | 
| 
       193 
     | 
    
         
            -
                           options[:verbose])
         
     | 
| 
      
 210 
     | 
    
         
            +
                pubgen_log("cd " << $pwd_old, options[:verbose])
         
     | 
| 
      
 211 
     | 
    
         
            +
                FileUtils.mv(File.join($tmpdir, 'pubgen.epub'), options[:epub_path])
         
     | 
| 
      
 212 
     | 
    
         
            +
                pubgen_log("mv #{File.join($tmpdir, 'pubgen.epub')} " << 
         
     | 
| 
      
 213 
     | 
    
         
            +
                           "'#{options[:epub_path]}'", options[:verbose])
         
     | 
| 
       194 
214 
     | 
    
         
             
              end
         
     | 
| 
       195 
215 
     | 
    
         
             
            rescue Exception=>e
         
     | 
| 
       196 
216 
     | 
    
         
             
              $exit_code = 1
         
     | 
| 
         @@ -199,11 +219,11 @@ ensure 
     | 
|
| 
       199 
219 
     | 
    
         
             
              # remove $tmpdir
         
     | 
| 
       200 
220 
     | 
    
         
             
              if Dir.pwd != $pwd_old
         
     | 
| 
       201 
221 
     | 
    
         
             
                Dir.chdir($pwd_old)
         
     | 
| 
       202 
     | 
    
         
            -
                pubgen_log("cd "  
     | 
| 
      
 222 
     | 
    
         
            +
                pubgen_log("cd " << $pwd_old, options[:verbose])
         
     | 
| 
       203 
223 
     | 
    
         
             
              end
         
     | 
| 
       204 
224 
     | 
    
         
             
              if File::directory?($tmpdir)
         
     | 
| 
       205 
225 
     | 
    
         
             
                FileUtils.rm_rf($tmpdir)
         
     | 
| 
       206 
     | 
    
         
            -
                pubgen_log("rm -rf "  
     | 
| 
      
 226 
     | 
    
         
            +
                pubgen_log("rm -rf " << $tmpdir, options[:verbose])
         
     | 
| 
       207 
227 
     | 
    
         
             
              end
         
     | 
| 
       208 
228 
     | 
    
         
             
            end
         
     | 
| 
       209 
229 
     | 
    
         | 
    
        data/lib/pubgen.rb
    CHANGED