fnando-kitabu 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -1,15 +1,13 @@
1
1
  Kitabu
2
2
  ======
3
3
 
4
- * [http://github.com/fnando/kitabu](http://github.com/fnando/kitabu)
4
+ * <http://fnando.github.com/kitabu.html>
5
5
 
6
6
  DESCRIPTION:
7
7
  ------------
8
8
 
9
9
  A framework for creating e-books from Markdown/Textile text markup using Ruby.
10
10
  Using the Prince PDF generator, you'll be able to get high quality PDFs.
11
- Mac users that have [Textmate](http://macromates.com) installed can have source
12
- code highlighted with his/her favorite theme.
13
11
 
14
12
  While Prince is too expensive (495USD for a single user license), the
15
13
  free version available at [http://www.princexml.com/download/](http://www.princexml.com/download/) generates
@@ -25,198 +23,17 @@ FEATURES:
25
23
  * Generate a PDF with a single rake task
26
24
  * Table of Contents automatically generated from chapter titles
27
25
 
28
- SYNOPSIS:
29
- ---------
30
-
31
- Create a new book with `kitabu mybook`. Kitabu has support for book
32
- layout and syntax highlight theme. You can specify other settings:
33
-
34
- kitabu mybook --theme=mac_classic
35
- kitabu mybook --layout=boom
36
-
37
- You can check available layouts and themes with `kitabu --help`
38
-
39
- The `kitabu` command creates a directory "mybook" with the
40
- following structure:
41
-
42
- - book
43
- - config.yml
44
- - images
45
- - output
46
- - Rakefile
47
- - templates
48
- - layout.css
49
- - layout.html
50
- - syntax.css
51
- - user.css
52
- - text
53
-
54
- The `config.yml` file holds some information about your book; so you'll always
55
- change it. This is the default generated file:
56
-
57
- title: [Your Book Title]
58
- copyright: Copyright (c) 2008 [Your Name], All Rights Reserved
59
- authors:
60
- - [Your Name]
61
- - [Other Name]
62
- subject: [Write down what your book is about]
63
- keywords: [The keywords related to your book]
64
- theme: eiffel
65
-
66
- If you're writing on a different language, the `user.css` file can override all
67
- the messages added by the `layout.css`. Examples on doing this coming soon.
68
-
69
- Now it's time to write your book. All your book content will be placed on the
70
- text directory. Kitabu requires you to separate your book into chapters.
71
- A chapter is nothing but a directory that holds lots of Markdown/Textile files.
72
- The book will be generated using every folder/file alphabetically. So be sure
73
- to use a sequential numbering as the name. Here's a sample:
74
-
75
- - text
76
- - 01_Introduction
77
- - 01\_introduction.markdown
78
- - 02\_What\_is\_Ruby\_on\_Rails
79
- - 01\_MVC.markdown
80
- - 02\_DRY.markdown
81
- - 03\_Convention\_Over\_Configuration.markdown
82
- - 03\_Installing\_Ruby\_on\_Rails
83
- - 01\_Installing.textile
84
- - 02\_Mac\_OS\_X\_instructions.textile
85
- - 03\_Windows\_instructions.markdown
86
- - 04\_Ubuntu\_Linux\_instructions.markdown
87
-
88
- If you prefer, you can add a chapter per file:
89
-
90
- - text
91
- - 01\_Introduction.markdown
92
- - 02\_What\_is\_Ruby\_on\_Rails.markdown
93
- - 03\_Installing\_Ruby\_on\_Rails.markdown
94
-
95
- Note that you can use Textile or Markdown at the same time. Just use the
96
- `.markdown` or `.textile` file extension.
97
-
98
- You'll want to see your progress eventually; it's time for you to generate
99
- the book PDF. Just run the command `rake kitabu:pdf` and your book will be
100
- created on the output directory.
101
-
102
- There are other rake tasks you can use:
103
-
104
- * `kitabu:html` - generate a html from your content
105
- * `kitabu:syntaxes` - list all available syntaxes
106
- * `kitabu:themes` - list all available themes
107
- * `kitabu:titles` - list all titles and its permalinks
108
- * `kitabu:watch` - watch `text` for any change and automatically generate html
109
-
110
- Kitabu can generate a Table of Contents (TOC) based on your h2-h6 tags. The
111
- h1 tag is discarded because it's meant to be the book title.
112
-
113
- If you need to link to a specific chapter, you can use the `kitabu:titles` rake
114
- task to know what's the permalink that you need. For example, a title
115
- `Installing Mac OS X` will have a permalink `installing-mac-os-x` and you can
116
- link to this chapter by writing
117
- `"See more on Installing Mac OS X":#installing-mac-os-x` when using
118
- Textile.
119
-
120
- To generate the TOC, you need to print a variable called `toc`, using the eRb
121
- tag `<%= toc %>`.
122
-
123
- Syntax Highlighting
124
- ===================
125
-
126
- If you're using Textile, all you need to do is use the tag `syntax.`. For
127
- example, to highlight a code added right into your text, just do something like
128
-
129
- syntax(ruby_on_rails). class User < ActiveRecord::Base
130
- validates_presence_of :login, :password, :email
131
- __
132
- validates_uniqueness_of :login, :email
133
- end
134
-
135
- To keep multiple line breaks into a single code block, add a line `__`;
136
- Kitabu will replace it when generating the HTML file.
137
-
138
- If you want to highlight a file, you need to place it into the `code`
139
- directory and call it like this:
140
-
141
- syntax(ruby_on_rails). some_file.rb
142
-
143
- You can specify the lines you want to highlight; the example below will
144
- highlight lines 10-17 from some_file.rb.
145
-
146
- syntax(ruby_on_rails 10,17). some_file.rb
147
-
148
- You can also specify named blocks to highlight. Named blocks are identified
149
- by `#begin` and `#end` marks. If some_file.rb has the following code
150
-
151
- require "rubygems"
152
- require "hpricot"
153
- require "open"
154
-
155
- # begin: get_all_h2_tags
156
- doc = Hpricot(open('http://simplesideias.com.br'))
157
- (doc/"h2").each {|h2| puts h2.inner_text }
158
- # end: get_all_h2_tags
159
-
160
- you can get the code between `get_all_h2_tags` using
161
-
162
- syntax(ruby#get_all_h2_tags). some_file.rb
163
-
164
- *Note:* Makdown uses the same syntax above. You just need to indent your code
165
- (as usual) and add the `syntax.` thing as the first line.
166
-
167
- INSTALL:
168
- --------
169
-
170
- sudo gem install fnando-kitabu --source http://gems.github.com
171
-
172
- or, if you have problem
173
-
174
- git clone git://github.com/fnando/kitabu.git
175
- cd kitabu
176
- gem build kitabu.gemspec
177
- sudo gem install kitabu
178
-
179
- To have syntax highlighting support, you need to install
180
- Oniguruma regular expression library that can be found at
181
- [http://www.geocities.jp/kosako3/oniguruma/](http://www.geocities.jp/kosako3/oniguruma/)
182
-
183
- Then, you need to install the Ultraviolet gem.
184
-
185
- sudo gem install ultraviolet
186
-
187
- TROUBLESHOOTING
188
- ---------------
189
-
190
- You might get this error (specially on Linux):
191
-
192
- require 'uv'
193
- LoadError: libonig.so.2: cannot open shared object file: No such file or directory - /usr/lib/ruby/gems/1.8/gems/oniguruma-1.1.0/lib/oregexp.so
194
-
195
- It means Ruby can’t find `libonig.so.2`. Add the path to the directory where the file is located to `/etc/ld.so.conf`:
196
-
197
- include /etc/ld.so.conf.d/*.conf
198
- include /usr/local/lib
199
-
200
- Then run:
201
-
202
- ldconfig
203
-
204
-
205
- REFERENCES:
206
- -----------
207
-
208
- - Textile: [http://hobix.com/textile/](http://hobix.com/textile/)
209
- - Markdown: [http://daringfireball.net/projects/markdown/syntax](http://daringfireball.net/projects/markdown/syntax)
26
+ Check it out <http://fnando.github.com/kitabu.html> for details.
210
27
 
211
28
  MAINTAINER
212
29
  ----------
213
30
 
214
- * Nando Vieira ([http://simplesideias.com.br](http://simplesideias.com.br))
31
+ * Nando Vieira (<http://simplesideias.com.br>)
215
32
 
216
33
  CONTRIBUTORS
217
34
  ------------
218
35
 
219
- * Arthur Zapparoli ([http://arthurgeek.net](http://arthurgeek.net))
36
+ * Arthur Zapparoli (<http://arthurgeek.net>)
220
37
 
221
38
  LICENSE:
222
39
  --------
data/Rakefile CHANGED
@@ -1,89 +1,40 @@
1
- require 'rake'
1
+ require "rake"
2
+ require "jeweler"
3
+ require File.dirname(__FILE__) + "/lib/kitabu"
2
4
 
3
- PKG_FILES = %w(Rakefile kitabu.gemspec README.markdown) + Dir["{bin,lib,templates}/**/*"]
4
-
5
- spec = Gem::Specification.new do |s|
6
- s.name = "kitabu"
7
- s.version = "0.3.3"
8
- s.summary = "A framework for creating e-books from Markdown/Textile text markup using Ruby."
9
- s.authors = ["Nando Vieira"]
10
- s.email = ["fnando.vieira@gmail.com"]
11
- s.homepage = "http://github.com/fnando/kitabu"
12
- s.description = "A framework for creating e-books from Markdown/Textile text markup using Ruby. Using the Prince PDF generator, you'll be able to get high quality PDFs. Mac users that have Textmate installed can have source code highlighted with his favorite theme."
13
- s.has_rdoc = false
14
- s.files = PKG_FILES
15
- s.bindir = "bin"
16
- s.executables = "kitabu"
5
+ JEWEL = Jeweler::Tasks.new do |gem|
6
+ gem.name = "kitabu"
7
+ gem.version = Kitabu::VERSION
8
+ gem.summary = "A framework for creating e-books from Markdown/Textile text markup using Ruby."
9
+ gem.description = <<-TXT
10
+ A framework for creating e-books from Markdown/Textile text markup using Ruby.
11
+ Using the Prince PDF generator, you'll be able to get high quality PDFs.
12
+ TXT
13
+
14
+ gem.authors = ["Nando Vieira"]
15
+ gem.email = "fnando.vieira@gmail.com"
16
+ gem.homepage = "http://fnando.github.com/kitabu.html"
17
+
18
+ gem.has_rdoc = false
19
+ gem.files = %w(Rakefile kitabu.gemspec VERSION README.markdown) + Dir["{bin,lib,templates}/**/*"]
20
+ gem.bindir = "bin"
21
+ gem.executables = "kitabu"
17
22
 
18
- # Dependencies
19
- s.add_dependency "discount"
20
- s.add_dependency "hpricot"
21
- s.add_dependency "unicode"
22
- s.add_dependency "main"
23
- s.add_dependency "ultraviolet"
23
+ gem.add_dependency "discount"
24
+ gem.add_dependency "hpricot"
25
+ gem.add_dependency "unicode"
26
+ gem.add_dependency "main"
27
+ gem.add_dependency "ultraviolet"
24
28
 
25
- # Requirements
26
- s.requirements << "Install the Oniguruma RE library"
29
+ gem.requirements << "Install the Oniguruma RE library"
27
30
  end
28
31
 
29
- namespace :gem do
30
- # Thanks to the Merb project for this code.
31
- desc "Update Github Gemspec"
32
- task :update_gemspec do
33
- skip_fields = %w(new_platform original_platform specification_version loaded required_ruby_version rubygems_version platform )
34
-
35
- result = "# WARNING : RAKE AUTO-GENERATED FILE. DO NOT MANUALLY EDIT!\n"
36
- result << "# RUN : 'rake gem:update_gemspec'\n\n"
37
- result << "Gem::Specification.new do |s|\n"
38
-
39
- spec.instance_variables.each do |ivar|
40
- value = spec.instance_variable_get(ivar)
41
- name = ivar.split("@").last
42
- next if name == "date"
43
-
44
- if name == 'version'
45
- base_file = File.join(File.dirname(__FILE__), 'lib/kitabu/base.rb')
46
- contents = File.read(base_file)
47
- contents.gsub!(/VERSION = "[\d\.]+"/sim, %(VERSION = "#{value}"))
48
- File.open(base_file, 'w+') do |f|
49
- f << contents
50
- end
51
- end
52
-
53
- next if skip_fields.include?(name) || value.nil? || value == "" || (value.respond_to?(:empty?) && value.empty?)
54
- if name == "dependencies"
55
- value.each do |d|
56
- dep, *ver = d.to_s.split(" ")
57
- result << " s.add_dependency #{dep.inspect}, #{ver.join(" ").inspect.gsub(/[()]/, "").gsub(", runtime", "")}\n"
58
- end
59
- else
60
- case value
61
- when Array
62
- value = name != "files" ? value.inspect : value.inspect.split(",").join(",\n")
63
- when FalseClass
64
- when TrueClass
65
- when Fixnum
66
- when String
67
- value = value.inspect
68
- else
69
- value = value.to_s.inspect
70
- end
71
- result << " s.#{name} = #{value}\n"
72
- end
73
- end
74
-
75
- result << "end"
76
- File.open(File.join(File.dirname(__FILE__), "#{spec.name}.gemspec"), "w"){|f| f << result}
77
- end
32
+ desc "Generate gemspec, build and install the gem"
33
+ task :package do
34
+ File.open("VERSION", "w+") {|f| f << Kitabu::VERSION.to_s }
35
+ FileUtils.cp "VERSION", File.expand_path("~/Sites/github/glue-pages/views/version/_#{JEWEL.gemspec.name}.haml")
78
36
 
79
- desc "Build gem"
80
- task :build => :update_gemspec do
81
- system "rm *.gem"
82
- system "gem build #{spec.instance_variable_get('@name')}.gemspec"
83
- end
84
-
85
- desc "Install gem"
86
- task :install => :build do
87
- system "sudo gem install #{spec.instance_variable_get('@name')}"
88
- end
89
- end
37
+ Rake::Task["gemspec"].invoke
38
+ Rake::Task["build"].invoke
39
+ Rake::Task["install"].invoke
40
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.3.4
data/kitabu.gemspec CHANGED
@@ -1,55 +1,81 @@
1
- # WARNING : RAKE AUTO-GENERATED FILE. DO NOT MANUALLY EDIT!
2
- # RUN : 'rake gem:update_gemspec'
1
+ # -*- encoding: utf-8 -*-
3
2
 
4
3
  Gem::Specification.new do |s|
5
- s.required_rubygems_version = ">= 0"
6
- s.has_rdoc = true
7
- s.email = ["fnando.vieira@gmail.com"]
8
- s.name = "kitabu"
9
- s.homepage = "http://github.com/fnando/kitabu"
10
- s.bindir = "bin"
4
+ s.name = %q{kitabu}
5
+ s.version = "0.3.4"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Nando Vieira"]
9
+ s.date = %q{2009-08-02}
10
+ s.default_executable = %q{kitabu}
11
+ s.description = %q{A framework for creating e-books from Markdown/Textile text markup using Ruby.
12
+ Using the Prince PDF generator, you'll be able to get high quality PDFs.
13
+ }
14
+ s.email = %q{fnando.vieira@gmail.com}
11
15
  s.executables = ["kitabu"]
12
- s.summary = "A framework for creating e-books from Markdown/Textile text markup using Ruby."
13
- s.requirements = ["Install the Oniguruma RE library"]
14
- s.description = "A framework for creating e-books from Markdown/Textile text markup using Ruby. Using the Prince PDF generator, you'll be able to get high quality PDFs. Mac users that have Textmate installed can have source code highlighted with his favorite theme."
15
- s.add_dependency "discount", ">= 0"
16
- s.add_dependency "hpricot", ">= 0"
17
- s.add_dependency "unicode", ">= 0"
18
- s.add_dependency "main", ">= 0"
19
- s.add_dependency "ultraviolet", ">= 0"
20
- s.version = "0.3.3"
16
+ s.extra_rdoc_files = [
17
+ "README.markdown"
18
+ ]
19
+ s.files = [
20
+ "README.markdown",
21
+ "Rakefile",
22
+ "VERSION",
23
+ "bin/kitabu",
24
+ "kitabu.gemspec",
25
+ "lib/kitabu.rb",
26
+ "lib/kitabu/base.rb",
27
+ "lib/kitabu/blackcloth.rb",
28
+ "lib/kitabu/markup.rb",
29
+ "lib/kitabu/redcloth.rb",
30
+ "lib/kitabu/tasks.rb",
31
+ "lib/kitabu/templates.rb",
32
+ "lib/kitabu/toc.rb",
33
+ "templates/Rakefile",
34
+ "templates/config.yml",
35
+ "templates/layouts/boom/layout.css",
36
+ "templates/layouts/boom/layout.html",
37
+ "templates/syntax.css",
38
+ "templates/themes/active4d.css",
39
+ "templates/themes/blackboard.css",
40
+ "templates/themes/dawn.css",
41
+ "templates/themes/eiffel.css",
42
+ "templates/themes/idle.css",
43
+ "templates/themes/iplastic.css",
44
+ "templates/themes/lazy.css",
45
+ "templates/themes/mac_classic.css",
46
+ "templates/themes/slush_poppies.css",
47
+ "templates/themes/sunburst.css",
48
+ "templates/user.css"
49
+ ]
50
+ s.homepage = %q{http://fnando.github.com/kitabu.html}
51
+ s.rdoc_options = ["--charset=UTF-8"]
21
52
  s.require_paths = ["lib"]
22
- s.files = ["Rakefile",
23
- "kitabu.gemspec",
24
- "README.markdown",
25
- "bin/kitabu",
26
- "lib/kitabu",
27
- "lib/kitabu/base.rb",
28
- "lib/kitabu/blackcloth.rb",
29
- "lib/kitabu/markup.rb",
30
- "lib/kitabu/redcloth.rb",
31
- "lib/kitabu/tasks.rb",
32
- "lib/kitabu/templates.rb",
33
- "lib/kitabu/toc.rb",
34
- "lib/kitabu.rb",
35
- "templates/config.yml",
36
- "templates/layouts",
37
- "templates/layouts/boom",
38
- "templates/layouts/boom/layout.css",
39
- "templates/layouts/boom/layout.html",
40
- "templates/Rakefile",
41
- "templates/syntax.css",
42
- "templates/themes",
43
- "templates/themes/active4d.css",
44
- "templates/themes/blackboard.css",
45
- "templates/themes/dawn.css",
46
- "templates/themes/eiffel.css",
47
- "templates/themes/idle.css",
48
- "templates/themes/iplastic.css",
49
- "templates/themes/lazy.css",
50
- "templates/themes/mac_classic.css",
51
- "templates/themes/slush_poppies.css",
52
- "templates/themes/sunburst.css",
53
- "templates/user.css"]
54
- s.authors = ["Nando Vieira"]
55
- end
53
+ s.requirements = ["Install the Oniguruma RE library"]
54
+ s.rubygems_version = %q{1.3.5}
55
+ s.summary = %q{A framework for creating e-books from Markdown/Textile text markup using Ruby.}
56
+
57
+ if s.respond_to? :specification_version then
58
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
59
+ s.specification_version = 3
60
+
61
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
62
+ s.add_runtime_dependency(%q<discount>, [">= 0"])
63
+ s.add_runtime_dependency(%q<hpricot>, [">= 0"])
64
+ s.add_runtime_dependency(%q<unicode>, [">= 0"])
65
+ s.add_runtime_dependency(%q<main>, [">= 0"])
66
+ s.add_runtime_dependency(%q<ultraviolet>, [">= 0"])
67
+ else
68
+ s.add_dependency(%q<discount>, [">= 0"])
69
+ s.add_dependency(%q<hpricot>, [">= 0"])
70
+ s.add_dependency(%q<unicode>, [">= 0"])
71
+ s.add_dependency(%q<main>, [">= 0"])
72
+ s.add_dependency(%q<ultraviolet>, [">= 0"])
73
+ end
74
+ else
75
+ s.add_dependency(%q<discount>, [">= 0"])
76
+ s.add_dependency(%q<hpricot>, [">= 0"])
77
+ s.add_dependency(%q<unicode>, [">= 0"])
78
+ s.add_dependency(%q<main>, [">= 0"])
79
+ s.add_dependency(%q<ultraviolet>, [">= 0"])
80
+ end
81
+ end
data/lib/kitabu.rb CHANGED
@@ -6,6 +6,8 @@ require "rexml/streamlistener"
6
6
  require "rexml/document"
7
7
  require "hpricot"
8
8
 
9
+ $LOAD_PATH.unshift File.dirname(__FILE__)
10
+
9
11
  require "kitabu/base"
10
12
  require "kitabu/toc"
11
13
  require "kitabu/markup"
@@ -15,3 +17,7 @@ begin
15
17
  rescue LoadError => e
16
18
  nil
17
19
  end
20
+
21
+ module Kitabu
22
+ VERSION = "0.3.4"
23
+ end
data/lib/kitabu/base.rb CHANGED
@@ -1,37 +1,37 @@
1
1
  module Kitabu
2
- VERSION = "0.3.3"
3
-
4
2
  module Base
5
3
  DEFAULT_LAYOUT = 'boom'
6
4
  DEFAULT_THEME = 'eiffel'
7
5
  DEFAULT_SYNTAX = 'plain_text'
8
6
  GEM_ROOT = File.expand_path(File.dirname(__FILE__) + "/../../")
9
7
 
10
- def self.html_path
8
+ extend self
9
+
10
+ def html_path
11
11
  KITABU_ROOT + "/output/#{app_name}.html"
12
12
  end
13
13
 
14
- def self.pdf_path
14
+ def pdf_path
15
15
  KITABU_ROOT + "/output/#{app_name}.pdf"
16
16
  end
17
17
 
18
- def self.template_path
18
+ def template_path
19
19
  KITABU_ROOT + "/templates/layout.html"
20
20
  end
21
21
 
22
- def self.config_path
22
+ def config_path
23
23
  KITABU_ROOT + "/config.yml"
24
24
  end
25
25
 
26
- def self.text_dir
26
+ def text_dir
27
27
  KITABU_ROOT + "/text"
28
28
  end
29
29
 
30
- def self.config
30
+ def config
31
31
  @config ||= YAML::load_file(config_path)
32
32
  end
33
33
 
34
- def self.parse_layout(contents)
34
+ def parse_layout(contents)
35
35
  template = File.new(template_path).read
36
36
  contents, toc = self.table_of_contents(contents)
37
37
  cfg = config.merge(:contents => contents, :toc => toc)
@@ -40,8 +40,8 @@ module Kitabu
40
40
  ERB.new(template).result env.instance_eval{ binding }
41
41
  end
42
42
 
43
- def self.table_of_contents(contents)
44
- return [contents, nil] unless Object.const_defined?('Hpricot') && Object.const_defined?('Unicode')
43
+ def table_of_contents(contents)
44
+ return [contents, nil] unless defined?('Hpricot') && defined?('Unicode')
45
45
 
46
46
  doc = Hpricot(contents)
47
47
  counter = {}
@@ -64,16 +64,16 @@ module Kitabu
64
64
  contents = doc.to_html
65
65
  io = StringIO.new(contents)
66
66
  toc = Toc.new
67
- REXML::Document.parse_stream(io, toc)
67
+ REXML::Document.parse_stream(io, toc) rescue nil
68
68
 
69
69
  [contents, toc.to_s]
70
70
  end
71
71
 
72
- def self.generate_pdf
72
+ def generate_pdf
73
73
  IO.popen('prince %s -o %s' % [html_path, pdf_path])
74
74
  end
75
75
 
76
- def self.generate_html
76
+ def generate_html
77
77
  # parsed file holder
78
78
  contents = ""
79
79
 
@@ -81,7 +81,7 @@ module Kitabu
81
81
  %w(. .. .svn .git).include?(entry) || (File.file?(entry) && entry !~ /\.(markdown|textile)$/)
82
82
  end
83
83
 
84
- raise "No markup files found! Stopping PDF generation" if entries.empty?
84
+ $stdout << "\nNo markup files found!\n" if entries.empty?
85
85
 
86
86
  # first, get all chapters; then, get all parsed markdown
87
87
  # files from this chapter and group them into a <div class="chapter"> tag
@@ -116,14 +116,14 @@ module Kitabu
116
116
  markup = Discount.new(markup_contents)
117
117
  end
118
118
  rescue Exception => e
119
- puts "Skipping #{markup_file} (#{e.message})"
119
+ $stdout << "\nSkipping #{markup_file} (#{e.message})"
120
120
  next
121
121
  end
122
122
 
123
123
  # convert the markup into html
124
124
  parsed_contents = markup.to_html
125
125
 
126
- if Object.const_defined?('Uv')
126
+ if defined?(Uv)
127
127
  if markup.respond_to?(:syntax_blocks)
128
128
  # textile
129
129
  parsed_contents.gsub!(/@syntax:([0-9]+)/m) do |m|
@@ -136,24 +136,24 @@ module Kitabu
136
136
  code = $1.gsub(/&lt;/, '<').gsub(/&gt;/, '>').gsub(/&amp;/, '&')
137
137
  code_lines = StringIO.new(code).readlines
138
138
  syntax_settings = code_lines.first
139
-
139
+
140
140
  syntax = 'plain_text'
141
-
141
+
142
142
  if syntax_settings =~ /syntax\(.*?\)\./
143
143
  code = code_lines.slice(1, code_lines.size).join
144
-
144
+
145
145
  # syntax
146
146
  m, syntax = *syntax_settings.match(/syntax\(([^ #]+).*?\)./)
147
-
147
+
148
148
  # file name
149
149
  m, source_file = *syntax_settings.match(/syntax\(.*?\)\. +(.*?)$/)
150
-
150
+
151
151
  # get line interval
152
152
  m, from_line, to_line = *syntax_settings.match(/syntax\(.*? ([0-9]+),([0-9]+)\)/)
153
-
153
+
154
154
  # get block name
155
155
  m, block_name = *syntax_settings.match(/syntax\(.*?#([0-9a-z_]+)\)/)
156
-
156
+
157
157
  code = Kitabu::Markup.content_for({
158
158
  :code => code,
159
159
  :from_line => from_line,
@@ -162,7 +162,7 @@ module Kitabu
162
162
  :source_file => source_file
163
163
  })
164
164
  end
165
-
165
+
166
166
  Kitabu::Markup.syntax(code, syntax)
167
167
  end
168
168
  end
@@ -183,53 +183,53 @@ module Kitabu
183
183
  end
184
184
  end
185
185
 
186
- def self.app_name
186
+ def app_name
187
187
  ENV['KITABU_NAME'] || 'kitabu'
188
188
  end
189
189
 
190
- def self.theme?(theme_name)
190
+ def theme?(theme_name)
191
191
  themes.include?(theme_name)
192
192
  end
193
193
 
194
- def self.syntax?(syntax_name)
194
+ def syntax?(syntax_name)
195
195
  syntaxes.include?(syntax_name)
196
196
  end
197
197
 
198
- def self.layout?(layout_name)
198
+ def layout?(layout_name)
199
199
  layouts.include?(layout_name)
200
200
  end
201
201
 
202
- def self.default_theme
202
+ def default_theme
203
203
  DEFAULT_THEME
204
204
  end
205
205
 
206
- def self.default_syntax
206
+ def default_syntax
207
207
  DEFAULT_SYNTAX
208
208
  end
209
209
 
210
- def self.default_layout
210
+ def default_layout
211
211
  DEFAULT_LAYOUT
212
212
  end
213
213
 
214
- def self.syntaxes
214
+ def syntaxes
215
215
  Uv.syntaxes
216
216
  end
217
217
 
218
- def self.layouts
218
+ def layouts
219
219
  @layouts ||= begin
220
220
  dir = File.join(GEM_ROOT, "templates/layouts")
221
221
  Dir.entries(dir).reject{|p| p =~ /^\.+$/ }.sort
222
222
  end
223
223
  end
224
224
 
225
- def self.themes
225
+ def themes
226
226
  @themes ||= begin
227
227
  filter = File.join(GEM_ROOT, "templates/themes/*.css")
228
228
  Dir[filter].collect{|path| File.basename(path).gsub(/\.css$/, '') }.sort
229
229
  end
230
230
  end
231
231
 
232
- def self.to_permalink(str)
232
+ def to_permalink(str)
233
233
  str = Unicode.normalize_KD(str).gsub(/[^\x00-\x7F]/n,'')
234
234
  str = str.gsub(/[^-_\s\w]/, ' ').downcase.squeeze(' ').tr(' ', '-')
235
235
  str = str.gsub(/-+/, '-').gsub(/^-+/, '').gsub(/-+$/, '')
@@ -41,7 +41,7 @@ class BlackCloth < RedCloth
41
41
  url = File.join(base_url, content)
42
42
  else
43
43
  url = content
44
- puts "\nYou're using `file. #{content}` but didn't set base_url in your configuration file.\n"
44
+ $stdout << "\nYou're using `file. #{content}` but didn't set base_url in your configuration file.\n"
45
45
  end
46
46
 
47
47
  %(<p class="file"><span><strong>Download</strong> <a href="#{url}">#{content}</a></span></p>)
@@ -105,7 +105,18 @@ class BlackCloth < RedCloth
105
105
  # Usage: figure(This is the caption). some_image.jpg
106
106
  def textile_figure(tag, attrs, cite, content)
107
107
  m, title = *attrs.match(/class="(.*?)"/)
108
- %(<p class="figure"><img src="../images/#{content}" alt="#{title}" /><br/><span class="caption">#{title}</span></p>)
108
+
109
+ width, height = image_size(content)
110
+
111
+ %(<p class="figure"><img style="width: #{width}px; height: #{height}px" src="../images/#{content}" alt="#{title}" /><br/><span class="caption">#{title}</span></p>)
112
+ end
113
+
114
+ def image_size(img)
115
+ puts File.expand_path(img)
116
+ output = IO.popen("file images/#{img}").read
117
+ m, width, height = *output.match(/([0-9]+) x ([0-9]+)/)
118
+
119
+ [width.to_i, height.to_i]
109
120
  end
110
121
 
111
122
  # overriding inline method
data/lib/kitabu/markup.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  module Kitabu
2
2
  module Markup
3
- def self.content_for(options)
3
+ extend self
4
+
5
+ def content_for(options)
4
6
  source_file = File.join(KITABU_ROOT, 'code', options[:source_file].to_s)
5
7
  code = options[:code]
6
8
 
@@ -44,7 +46,7 @@ module Kitabu
44
46
  code
45
47
  end
46
48
 
47
- def self.syntax(code, syntax='plain_text')
49
+ def syntax(code, syntax='plain_text')
48
50
  # get chosen theme
49
51
  theme = Kitabu::Base.config['theme']
50
52
  theme = Kitabu::Base.default_theme unless Kitabu::Base.theme?(theme)
data/lib/kitabu/tasks.rb CHANGED
@@ -36,7 +36,7 @@ namespace :kitabu do
36
36
  task :pdf => :html do
37
37
  Kitabu::Base.generate_pdf
38
38
  puts "Your PDF has been generated. Check it out the output directory!"
39
- sleep(1) && system("open #{Kitabu::Base.pdf_path}") if RUBY_PLATFORM =~ /darwin/
39
+ sleep(1) && system("open #{Kitabu::Base.pdf_path}") if RUBY_PLATFORM =~ /darwin/ && ENV["AUTO_OPEN"] == "1"
40
40
  end
41
41
 
42
42
  desc "Generate HTML from markup files"
@@ -3,14 +3,16 @@ module Kitabu
3
3
  TEMPLATES_ROOT = File.join(Kitabu::Base::GEM_ROOT, 'templates')
4
4
  DIRECTORIES = %w(text templates output)
5
5
 
6
- def self.process!(options)
6
+ extend self
7
+
8
+ def process!(options)
7
9
  directories!(options)
8
10
  bundle_css!(options)
9
11
  files!(options)
10
12
  config!(options)
11
13
  end
12
14
 
13
- def self.directories!(options)
15
+ def directories!(options)
14
16
  FileUtils.mkdir(options[:path])
15
17
 
16
18
  DIRECTORIES.each do |d|
@@ -18,14 +20,14 @@ module Kitabu
18
20
  end
19
21
  end
20
22
 
21
- def self.files!(options)
23
+ def files!(options)
22
24
  copy_file "Rakefile", "#{options[:path]}/Rakefile"
23
25
  copy_file "layouts/#{options[:layout]}/layout.css", "#{options[:path]}/templates/layout.css"
24
26
  copy_file "layouts/#{options[:layout]}/layout.html", "#{options[:path]}/templates/layout.html"
25
27
  copy_file "user.css", "#{options[:path]}/templates/user.css"
26
28
  end
27
29
 
28
- def self.config!(options)
30
+ def config!(options)
29
31
  template = File.new(File.join(TEMPLATES_ROOT, 'config.yml')).read
30
32
  env = OpenStruct.new(options)
31
33
  contents = ERB.new(template).result env.instance_eval{binding}
@@ -33,7 +35,7 @@ module Kitabu
33
35
  File.open(File.join(options[:path], 'config.yml'), 'w+') << contents
34
36
  end
35
37
 
36
- def self.bundle_css!(options)
38
+ def bundle_css!(options)
37
39
  contents = Dir["#{TEMPLATES_ROOT}/themes/*.css"].collect do |file|
38
40
  File.read(file)
39
41
  end
@@ -42,7 +44,7 @@ module Kitabu
42
44
  end
43
45
 
44
46
  private
45
- def self.copy_file(from, to)
47
+ def copy_file(from, to)
46
48
  FileUtils.cp File.join(TEMPLATES_ROOT, from), to
47
49
  end
48
50
  end
data/lib/kitabu/toc.rb CHANGED
@@ -27,11 +27,6 @@ module Kitabu
27
27
  @current_level = name.gsub!(/[^2-6]/, '').to_i
28
28
  @stack << @current_level
29
29
  @id = attrs["id"]
30
-
31
- @toc << %(<ul class="level#{@current_level}">) if @current_level > @previous_level
32
- @toc << %(</li></ul>) * (@previous_level - @current_level) if @current_level < @previous_level
33
- @toc << %(</li>) if @current_level <= @previous_level
34
- @toc << %(<li>)
35
30
  end
36
31
 
37
32
  def tag_end(name)
@@ -42,16 +37,14 @@ module Kitabu
42
37
 
43
38
  def text(str)
44
39
  return unless in_header?
45
- @toc << %(<a href="##{@id}"><span>#{str}</span></a>)
40
+ @toc << %(<div class="level#{@current_level} #{@id}"><a href="##{@id}"><span>#{str}</span></a></div>)
46
41
  end
47
42
 
48
43
  def method_missing(*args)
49
44
  end
50
45
 
51
46
  def to_s
52
- @toc + (%(</li></ul>) * (@stack.last - 1))
53
- rescue
54
- ""
47
+ @toc
55
48
  end
56
49
  end
57
50
  end
data/templates/config.yml CHANGED
@@ -1,8 +1,9 @@
1
- title: [Your Book Title]
2
- copyright: Copyright (c) <%= Time.now.year %> [Your Name], All Rights Reserved
1
+ title: "[Your Book Title]"
2
+ year: 2009
3
3
  authors:
4
- - [Your Name]
5
- - [Other Name]
6
- subject: [Write down what your book is about]
7
- keywords: [The keywords related to your book]
8
- theme: <%= theme %>
4
+ - "[Your Name]"
5
+ subject: "[Your book description]"
6
+ keywords: "[Your book keywords (comma-separated)]"
7
+ theme: idle
8
+ base_url: http://example.com
9
+ copyright: "[Your copyright info]"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fnando-kitabu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
@@ -9,8 +9,8 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-16 00:00:00 -07:00
13
- default_executable:
12
+ date: 2009-08-02 00:00:00 -07:00
13
+ default_executable: kitabu
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: discount
@@ -62,21 +62,21 @@ dependencies:
62
62
  - !ruby/object:Gem::Version
63
63
  version: "0"
64
64
  version:
65
- description: A framework for creating e-books from Markdown/Textile text markup using Ruby. Using the Prince PDF generator, you'll be able to get high quality PDFs. Mac users that have Textmate installed can have source code highlighted with his favorite theme.
66
- email:
67
- - fnando.vieira@gmail.com
65
+ description: A framework for creating e-books from Markdown/Textile text markup using Ruby. Using the Prince PDF generator, you'll be able to get high quality PDFs.
66
+ email: fnando.vieira@gmail.com
68
67
  executables:
69
68
  - kitabu
70
69
  extensions: []
71
70
 
72
- extra_rdoc_files: []
73
-
71
+ extra_rdoc_files:
72
+ - README.markdown
74
73
  files:
75
- - Rakefile
76
- - kitabu.gemspec
77
74
  - README.markdown
75
+ - Rakefile
76
+ - VERSION
78
77
  - bin/kitabu
79
- - lib/kitabu
78
+ - kitabu.gemspec
79
+ - lib/kitabu.rb
80
80
  - lib/kitabu/base.rb
81
81
  - lib/kitabu/blackcloth.rb
82
82
  - lib/kitabu/markup.rb
@@ -84,15 +84,11 @@ files:
84
84
  - lib/kitabu/tasks.rb
85
85
  - lib/kitabu/templates.rb
86
86
  - lib/kitabu/toc.rb
87
- - lib/kitabu.rb
87
+ - templates/Rakefile
88
88
  - templates/config.yml
89
- - templates/layouts
90
- - templates/layouts/boom
91
89
  - templates/layouts/boom/layout.css
92
90
  - templates/layouts/boom/layout.html
93
- - templates/Rakefile
94
91
  - templates/syntax.css
95
- - templates/themes
96
92
  - templates/themes/active4d.css
97
93
  - templates/themes/blackboard.css
98
94
  - templates/themes/dawn.css
@@ -104,11 +100,12 @@ files:
104
100
  - templates/themes/slush_poppies.css
105
101
  - templates/themes/sunburst.css
106
102
  - templates/user.css
107
- has_rdoc: true
108
- homepage: http://github.com/fnando/kitabu
103
+ has_rdoc: false
104
+ homepage: http://fnando.github.com/kitabu.html
105
+ licenses:
109
106
  post_install_message:
110
- rdoc_options: []
111
-
107
+ rdoc_options:
108
+ - --charset=UTF-8
112
109
  require_paths:
113
110
  - lib
114
111
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -126,9 +123,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
123
  requirements:
127
124
  - Install the Oniguruma RE library
128
125
  rubyforge_project:
129
- rubygems_version: 1.2.0
126
+ rubygems_version: 1.3.5
130
127
  signing_key:
131
- specification_version: 2
128
+ specification_version: 3
132
129
  summary: A framework for creating e-books from Markdown/Textile text markup using Ruby.
133
130
  test_files: []
134
131