muplin 0.0.1

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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in muplin.gemspec
4
+ gemspec
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+ require 'rubygems'
5
+ require 'muplin'
6
+
7
+
8
+ Version = Muplin::VERSION
9
+ DEFAULT_OUTPUT = 'muplined.pdf'
10
+
11
+
12
+ def usage
13
+ <<"EOS"
14
+ Muplin is a MUriyari Pdf outLINer. https://github.com/pokutuna/muplin
15
+ Usage: muplin <source.pdf> <outline(.yaml|.json)> [options]
16
+ EOS
17
+ end
18
+
19
+ def load_outline(file)
20
+ ext = File.extname(file)
21
+ if ext == '.yaml'
22
+ require 'yaml'
23
+ YAML.load_file(file)
24
+ elsif ext == '.json'
25
+ require 'json'
26
+ JSON.parse(File.open(file).read)
27
+ else
28
+ puts usage
29
+ raise 'outline must be yaml or json'
30
+ end
31
+ end
32
+
33
+
34
+ OPTS = {}
35
+ OptionParser.new(usage) { |opt|
36
+ opt.on('-o', '--output=FILE', "write pdf to FILE. default: ./#{DEFAULT_OUTPUT}") { |v| OPTS[:o] = v}
37
+ opt.on('--overwrite', 'overwrite to <source.pdf>') { |v| OPTS[:overwrite] = v}
38
+ opt.parse!(ARGV)
39
+ }
40
+
41
+ puts usage if ARGV.size < 2
42
+ src_file, outline_file = ARGV
43
+
44
+ OPTS[:o] = src_file if OPTS[:overwrite]
45
+ Muplin.exec(src_file, load_outline(outline_file), OPTS[:o] || DEFAULT_OUTPUT)
@@ -0,0 +1,15 @@
1
+ require 'prawn'
2
+ require "muplin/version"
3
+ require 'muplin/outliner'
4
+
5
+ module Muplin
6
+
7
+ def self.exec(src_file, outline, dest_file)
8
+ doc = Muplin::Outliner.new(src_file)
9
+ doc.clear_outlines
10
+ raise ArgumentError 'invalid outline' unless doc.instance_eval { sections? outline }
11
+ doc.define_outline(outline)
12
+ doc.render_file(dest_file)
13
+ end
14
+
15
+ end
@@ -0,0 +1,50 @@
1
+ class Muplin::Outliner
2
+
3
+ def initialize(filename)
4
+ @pdf = Prawn::Document.new(:template => filename)
5
+ end
6
+
7
+
8
+ public
9
+ def clear_outlines
10
+ @pdf.state.store.root.data[:Outlines] = nil
11
+ end
12
+
13
+ def define_outline(outlines, parent = nil)
14
+ outlines.each do |item|
15
+ if a_section?(item)
16
+ add_section(item, parent)
17
+ @last_label = item['label']
18
+ elsif sections?(item)
19
+ define_outline(item, @last_label)
20
+ else
21
+ raise ArgumentError, item.inspect
22
+ end
23
+ end
24
+ end
25
+
26
+ def render_file(filename)
27
+ @pdf.render_file(filename)
28
+ end
29
+
30
+
31
+ private
32
+ def a_section?(item)
33
+ Hash === item and item.has_key?('label') and item.has_key?('page')
34
+ end
35
+
36
+ def sections?(item)
37
+ Array === item
38
+ end
39
+
40
+ def add_section(section, parent)
41
+ if parent.nil?
42
+ @pdf.outline.section section['label'], :destination => section['page']
43
+ else
44
+ @pdf.outline.add_subsection_to(parent) {
45
+ @pdf.outline.page :title => section['label'], :destination => section['page']
46
+ }
47
+ end
48
+ end
49
+
50
+ end
@@ -0,0 +1,3 @@
1
+ module Muplin
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "muplin/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "muplin"
7
+ s.version = Muplin::VERSION
8
+ s.authors = ["pokutuna"]
9
+ s.email = ["popopopopokutuna@gmail.com"]
10
+ s.homepage = "https://github.com/pokutuna/muplin"
11
+ s.summary = %q{A pure-ruby application to add (toc|outline) to a PDF file irresponsibly}
12
+ s.description = %q{Muplin is abbrev of MUriyari(irresponsibly force) Pdf outLINer. Muplin adds outlines that consist from pairs of label and page number to a PDF file. see also https://github.com/pokutuna/muplin}
13
+
14
+ s.rubyforge_project = "muplin"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ s.add_runtime_dependency(%q<prawn>, ["~> 0.12.0"])
24
+ end
metadata ADDED
@@ -0,0 +1,67 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: muplin
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - pokutuna
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-10-19 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: prawn
16
+ requirement: &70230386848600 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.12.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70230386848600
25
+ description: Muplin is abbrev of MUriyari(irresponsibly force) Pdf outLINer. Muplin
26
+ adds outlines that consist from pairs of label and page number to a PDF file. see
27
+ also https://github.com/pokutuna/muplin
28
+ email:
29
+ - popopopopokutuna@gmail.com
30
+ executables:
31
+ - muplin
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - .gitignore
36
+ - Gemfile
37
+ - Rakefile
38
+ - bin/muplin
39
+ - lib/muplin.rb
40
+ - lib/muplin/outliner.rb
41
+ - lib/muplin/version.rb
42
+ - muplin.gemspec
43
+ homepage: https://github.com/pokutuna/muplin
44
+ licenses: []
45
+ post_install_message:
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ requirements: []
62
+ rubyforge_project: muplin
63
+ rubygems_version: 1.8.10
64
+ signing_key:
65
+ specification_version: 3
66
+ summary: A pure-ruby application to add (toc|outline) to a PDF file irresponsibly
67
+ test_files: []