mint 0.5.1 → 0.7.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.
Files changed (50) hide show
  1. data/Gemfile +18 -0
  2. data/README.md +3 -3
  3. data/bin/mint +27 -27
  4. data/bin/mint-epub +6 -6
  5. data/config/syntax.yaml +12 -12
  6. data/{templates → config/templates}/base/style.sass +11 -4
  7. data/config/templates/default/css/style.css +158 -0
  8. data/config/templates/default/layout.haml +8 -0
  9. data/{templates → config/templates}/default/style.sass +0 -0
  10. data/{templates/default → config/templates/protocol}/layout.haml +0 -0
  11. data/config/templates/protocol/style.sass +20 -0
  12. data/config/templates/reset.css +92 -0
  13. data/config/templates/zen/css/style.css +145 -0
  14. data/{templates/pro → config/templates/zen}/layout.haml +0 -0
  15. data/config/templates/zen/style.sass +24 -0
  16. data/features/config.feature +21 -0
  17. data/features/publish.feature +3 -3
  18. data/features/support/env.rb +9 -27
  19. data/features/templates.feature +79 -0
  20. data/lib/mint.rb +11 -11
  21. data/lib/mint/{commandline.rb → command_line.rb} +96 -80
  22. data/lib/mint/css.rb +43 -34
  23. data/lib/mint/document.rb +99 -93
  24. data/lib/mint/helpers.rb +21 -17
  25. data/lib/mint/layout.rb +1 -1
  26. data/lib/mint/mint.rb +92 -36
  27. data/lib/mint/plugin.rb +5 -5
  28. data/lib/mint/plugins/epub.rb +51 -51
  29. data/lib/mint/resource.rb +2 -2
  30. data/lib/mint/style.rb +2 -2
  31. data/lib/mint/version.rb +1 -1
  32. data/spec/command_line_spec.rb +87 -0
  33. data/spec/css_spec.rb +46 -0
  34. data/spec/document_spec.rb +38 -40
  35. data/spec/helpers_spec.rb +101 -83
  36. data/spec/layout_spec.rb +1 -1
  37. data/spec/mint_spec.rb +184 -60
  38. data/spec/plugin_spec.rb +61 -67
  39. data/spec/plugins/epub_spec.rb +47 -47
  40. data/spec/resource_spec.rb +9 -9
  41. data/spec/spec_helper.rb +20 -93
  42. data/spec/style_spec.rb +6 -8
  43. data/spec/support/fixtures/content.md +16 -0
  44. data/spec/support/fixtures/dynamic.sass +3 -0
  45. data/spec/support/fixtures/layout.haml +3 -0
  46. data/spec/support/fixtures/static.css +3 -0
  47. data/spec/support/matchers.rb +15 -0
  48. metadata +160 -70
  49. data/spec/commandline_spec.rb +0 -91
  50. data/templates/pro/style.sass +0 -0
data/lib/mint/helpers.rb CHANGED
@@ -1,12 +1,12 @@
1
- require 'pathname'
2
- require 'tempfile'
3
- require 'yaml'
4
- require 'active_support/core_ext/string/inflections'
1
+ require "pathname"
2
+ require "tempfile"
3
+ require "yaml"
4
+ require "active_support/core_ext/string/inflections"
5
5
 
6
6
  module Mint
7
7
  module Helpers
8
8
  def self.underscore(obj, opts={})
9
- namespaces = obj.to_s.split('::').map do |namespace|
9
+ namespaces = obj.to_s.split("::").map do |namespace|
10
10
  if opts[:ignore_prefix]
11
11
  namespace[0..1].downcase + namespace[2..-1]
12
12
  else
@@ -14,7 +14,7 @@ module Mint
14
14
  end
15
15
  end
16
16
 
17
- string = opts[:namespaces] ? namespaces.join('::') : namespaces.last
17
+ string = opts[:namespaces] ? namespaces.join("::") : namespaces.last
18
18
  string.underscore
19
19
  end
20
20
 
@@ -25,10 +25,10 @@ module Mint
25
25
  # @return [String] a URL-ready slug
26
26
  def self.slugize(obj)
27
27
  obj.to_s.downcase.
28
- gsub(/&/, 'and').
29
- gsub(/[\s-]+/, '-').
30
- gsub(/[^a-z0-9-]/, '').
31
- gsub(/[-]+/, '-')
28
+ gsub(/&/, "and").
29
+ gsub(/[\s-]+/, "-").
30
+ gsub(/[^a-z0-9-]/, "").
31
+ gsub(/[-]+/, "-")
32
32
  end
33
33
 
34
34
  # Transforms a potentially hyphenated String into a symbol name.
@@ -36,7 +36,7 @@ module Mint
36
36
  # @param [String, #to_s] obj an object to be turned into a symbol name
37
37
  # @return [Symbol] a symbol representation of obj
38
38
  def self.symbolize(obj)
39
- slugize(obj).gsub(/-/, '_').to_sym
39
+ slugize(obj).gsub(/-/, "_").to_sym
40
40
  end
41
41
 
42
42
  # Transforms a String or Pathname into a fully expanded Pathname.
@@ -73,9 +73,9 @@ module Mint
73
73
 
74
74
  def self.listify(list)
75
75
  if list.length > 2
76
- list[0..-2].join(', ') + ' & ' + list.last
76
+ list[0..-2].join(", ") + " & " + list.last
77
77
  else
78
- list.join(' & ')
78
+ list.join(" & ")
79
79
  end
80
80
  end
81
81
 
@@ -103,6 +103,10 @@ module Mint
103
103
  end
104
104
  end
105
105
 
106
+ def self.hashify(list1, list2)
107
+ Hash[*list1.zip(list2).flatten]
108
+ end
109
+
106
110
  # Returns the relative path to to_directory from from_directory.
107
111
  # If to_directory and from_directory have no parents in common besides
108
112
  # /, returns the absolute directory of to_directory. Assumes no symlinks.
@@ -126,11 +130,11 @@ module Mint
126
130
  # @param [Hash, #[]] new_opts a set of options to add to the Yaml file
127
131
  # @param [Pathname, #exist] file a file to read from and write to
128
132
  # @return [void]
129
- def self.update_yaml!(new_opts, file)
130
- curr_opts = file.exist? ? YAML.load_file(file) : {}
133
+ def self.update_yaml!(file, opts={})
134
+ curr_opts = File.exist?(file) ? YAML.load_file(file) : {}
131
135
 
132
- File.open file, 'w' do |f|
133
- YAML.dump(curr_opts.merge(new_opts), f)
136
+ File.open file, "w" do |f|
137
+ YAML.dump(curr_opts.merge(opts), f)
134
138
  end
135
139
  end
136
140
 
data/lib/mint/layout.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'mint/resource'
1
+ require "mint/resource"
2
2
 
3
3
  module Mint
4
4
  class Layout < Resource
data/lib/mint/mint.rb CHANGED
@@ -1,9 +1,21 @@
1
- require 'pathname'
2
- require 'fileutils'
3
- require 'yaml'
4
- require 'tilt'
1
+ require "pathname"
2
+ require "fileutils"
3
+ require "yaml"
4
+ require "tilt"
5
+
6
+ require "active_support/core_ext/hash/slice"
5
7
 
6
8
  module Mint
9
+ ROOT = (Pathname.new(__FILE__).realpath.dirname + "../..").to_s
10
+
11
+ SCOPES = {
12
+ local: Pathname.new(".mint"),
13
+ user: Pathname.new("~/.mint").expand_path,
14
+ global: Pathname.new("#{ROOT}/config").expand_path
15
+ }
16
+
17
+ SCOPE_NAMES = SCOPES.keys
18
+
7
19
  # Assume that someone using an Html template has formatted it
8
20
  # in Erb and that a Css stylesheet will pass untouched through
9
21
  # a Scss parser.
@@ -12,21 +24,17 @@ module Mint
12
24
 
13
25
  # @return [String] the Mint root path name
14
26
  def self.root
15
- (Pathname.new(__FILE__).realpath.dirname + '../..').to_s
27
+ ROOT
16
28
  end
17
29
 
18
- # Returns an array with the Mint template path. Will first look
19
- # for MINT_PATH environment variable. Otherwise will use smart defaults.
20
- # Either way, earlier/higher paths take precedence. And is considered to
21
- # be the directory for "local" config options, templates, etc.
30
+ # Returns an array with the Mint template path for the named scope
31
+ # or scopes. This path is used to lookup templates and configuration options.
22
32
  #
23
- # @param [Boolean] as_path if as_path is true, will return Pathname objects
24
- # @return [String] the Mint path as a String or Pathname
25
- def self.path(as_path=false)
26
- mint_path = ENV['MINT_PATH'] ||
27
- "#{Dir.getwd}/.mint:~/.mint:#{Mint.root}"
28
- paths = mint_path.split(':')
29
- as_path ? paths.map {|p| Pathname.new(p).expand_path } : paths
33
+ # @param [Hash] opts a list of options, including :scopes
34
+ # @return [Array] the Mint path as an Array of Pathnames
35
+ def self.path(opts={})
36
+ opts = { scopes: SCOPE_NAMES }.merge(opts)
37
+ SCOPES.slice(*opts[:scopes]).values
30
38
  end
31
39
 
32
40
  # Returns the part of Mint.path relevant to scope.
@@ -43,9 +51,9 @@ module Mint
43
51
  case Mint.path
44
52
  when Array
45
53
  index = { local: 0, user: 1, global: 2 }[scope]
46
- Mint.path(as_path)[index]
54
+ Mint.path[index]
47
55
  when Hash
48
- Mint.path(as_path)[scope]
56
+ Mint.path[scope]
49
57
  else
50
58
  nil
51
59
  end
@@ -54,16 +62,15 @@ module Mint
54
62
  # @return [Hash] key Mint directories
55
63
  def self.directories
56
64
  {
57
- templates: 'templates',
58
- config: 'config'
65
+ templates: "templates"
59
66
  }
60
67
  end
61
68
 
62
69
  # @return [Hash] key Mint files
63
70
  def self.files
64
71
  {
65
- syntax: directories[:config] + '/syntax.yaml',
66
- config: directories[:config] + '/config.yaml'
72
+ syntax: "syntax.yaml",
73
+ defaults: "defaults.yaml"
67
74
  }
68
75
  end
69
76
 
@@ -72,8 +79,8 @@ module Mint
72
79
  {
73
80
  # Do not set default `template`--will override style and
74
81
  # layout when already specified -- causes tricky bugs
75
- layout: 'default', # default layout
76
- style: 'default', # default style
82
+ layout: "default", # default layout
83
+ style: "default", # default style
77
84
  destination: nil, # do not create a subdirectory
78
85
  style_destination: nil # do not copy style to root
79
86
  }
@@ -87,18 +94,51 @@ module Mint
87
94
  # @return [Array] CSS formats, for source -> destination
88
95
  # name guessing/conversion only.
89
96
  def self.css_formats
90
- ['css', 'sass', 'scss', 'less']
97
+ ["css", "sass", "scss", "less"]
91
98
  end
92
99
 
93
- # @return [Array] the full path for each known template in the Mint path
94
- def self.templates
95
- templates_dir = Mint.directories[:templates]
100
+ # Returns a hash of all active options specified by file (for all scopes).
101
+ # That is, if you specify file as "defaults.yaml", this will return the aggregate
102
+ # of all defaults.yaml-specified options in the Mint path, where more local
103
+ # members of the path take precedence over more global ones.
104
+ #
105
+ # @param [String] file a filename pointing to a Mint configuration file
106
+ # @return [Hash] a structured set of configuration options
107
+ def self.configuration(opts={})
108
+ opts = { scopes: SCOPE_NAMES }.merge(opts)
109
+
110
+ # Merge config options from all config files on the Mint path,
111
+ # where more local options take precedence over more global
112
+ # options
113
+ configuration = Mint.path(:scopes => opts[:scopes]).
114
+ map {|p| p + Mint.files[:defaults] }.
115
+ select(&:exist?).
116
+ map {|p| YAML.load_file p }.
117
+ reverse.
118
+ reduce(Mint.default_options) {|r,p| r.merge p }
119
+
120
+ Helpers.symbolize_keys configuration
121
+ end
96
122
 
97
- Mint.path(true).
123
+ # Returns all configuration options (as specified by the aggregate
124
+ # of all config files), along with opts, where opts take precedence.
125
+ #
126
+ # @param [Hash] additional options to add to the current configuration
127
+ # @return [Hash] a structured set of configuration options with opts
128
+ # overriding any options from config files
129
+ def self.configuration_with(opts)
130
+ configuration.merge opts
131
+ end
132
+
133
+ # @return [Array] the full path for each known template in the Mint path
134
+ def self.templates(opts={})
135
+ opts = { scopes: SCOPE_NAMES }.merge(opts)
136
+ Mint.path(:scopes => opts[:scopes]).
98
137
  map {|p| p + directories[:templates] }.
99
138
  select(&:exist?).
100
139
  map {|p| p.children.select(&:directory?).map(&:to_s) }.
101
- flatten
140
+ flatten.
141
+ sort
102
142
  end
103
143
 
104
144
  # Decides whether the template specified by `name_or_file` is a real
@@ -139,14 +179,30 @@ module Mint
139
179
 
140
180
  file_name = lambda {|x| x + templates_dir + name + type.to_s }
141
181
  find_files = lambda {|x| Pathname.glob "#{x.to_s}.*" }
142
- acceptable = lambda {|x| x.to_s =~ /#{Mint.formats.join '|'}/ }
182
+ acceptable = lambda {|x| x.to_s =~ /#{Mint.formats.join "|"}/ }
143
183
 
144
- Mint.path(true).map(&file_name).map(&find_files).flatten.
184
+ Mint.path.map(&file_name).map(&find_files).flatten.
145
185
  select(&acceptable).select(&:exist?).first.tap do |template|
146
186
  raise TemplateNotFoundException unless template
147
187
  end.to_s
148
188
  end
149
189
 
190
+ def self.template_path(name, type, opts={})
191
+ defaults = {
192
+ scope: :local,
193
+ ext: { layout: "haml", style: "sass" }[type]
194
+ }
195
+ opts = defaults.merge(opts)
196
+ path = Mint.path_for_scope(opts[:scope])
197
+
198
+ case type
199
+ when :layout, :style
200
+ "#{path}/templates/#{name}/#{type}.#{opts[:ext]}"
201
+ when :all
202
+ "#{path}/templates/#{name}"
203
+ end
204
+ end
205
+
150
206
  # Checks (non-rigorously) to see if the file is somewhere on the
151
207
  # MINT_PATH
152
208
  #
@@ -156,7 +212,7 @@ module Mint
156
212
  paths = Mint.path.map {|f| File.expand_path f }
157
213
  file_path = Pathname.new(file)
158
214
  file_path.exist? and
159
- file_path.dirname.expand_path.to_s =~ /#{paths.join('|')}/
215
+ file_path.dirname.expand_path.to_s =~ /#{paths.map(&:to_s).join("|")}/
160
216
  end
161
217
 
162
218
  # Guesses an appropriate name for the resource output file based on
@@ -166,10 +222,10 @@ module Mint
166
222
  # @return [String] probably output file name
167
223
  def self.guess_name_from(name)
168
224
  name = Pathname(name).basename if name
169
- css = Mint.css_formats.join '|'
225
+ css = Mint.css_formats.join "|"
170
226
  name.to_s.
171
- gsub(/\.(#{css})$/, '.css').
172
- gsub(/(\.[^css]+)$/, '.html')
227
+ gsub(/\.(#{css})$/, ".css").
228
+ gsub(/(\.[^css]+)$/, ".html")
173
229
  end
174
230
 
175
231
  # Transforms a path into a template that will render the file specified
data/lib/mint/plugin.rb CHANGED
@@ -1,5 +1,5 @@
1
- require 'mint/document'
2
- require 'set'
1
+ require "mint/document"
2
+ require "set"
3
3
 
4
4
  module Mint
5
5
  def self.plugins
@@ -28,15 +28,15 @@ module Mint
28
28
  end
29
29
 
30
30
  def self.template_directory(plugin)
31
- Mint.root + '/plugins/templates/' + plugin.underscore
31
+ Mint.root + "/plugins/templates/" + plugin.underscore
32
32
  end
33
33
 
34
34
  def self.config_directory(plugin)
35
- Mint.root + '/plugins/config/' + plugin.underscore
35
+ Mint.root + "/plugins/config/" + plugin.underscore
36
36
  end
37
37
 
38
38
  def self.commandline_options_file(plugin)
39
- plugin.config_directory + '/syntax.yml'
39
+ plugin.config_directory + "/syntax.yml"
40
40
  end
41
41
 
42
42
  def self.commandline_name(plugin)
@@ -1,24 +1,24 @@
1
- require 'nokogiri'
2
- require 'hashie'
3
- require 'zip/zip'
4
- require 'zip/zipfilesystem'
5
- require 'active_support/core_ext/hash/deep_merge'
6
- require 'active_support/core_ext/hash/keys'
1
+ require "nokogiri"
2
+ require "hashie"
3
+ require "zip/zip"
4
+ require "zip/zipfilesystem"
5
+ require "active_support/core_ext/hash/deep_merge"
6
+ require "active_support/core_ext/hash/keys"
7
7
 
8
8
  # Note: This code is not as clean as I want it to be. It is an example
9
9
  # plugin with which I'm developing the Mint plugin system. Code cleanup
10
10
  # to follow.
11
11
 
12
12
  module Mint
13
- META_DIR = 'META-INF'
14
- CONTENT_DIR = 'OPS'
13
+ META_DIR = "META-INF"
14
+ CONTENT_DIR = "OPS"
15
15
 
16
16
  # Add chapters to document -- this is probably not a sustainable pattern
17
17
  # for all plugins, but it's useful here.
18
18
  class Document
19
19
  def chapters
20
20
  html_document = Nokogiri::HTML::Document.parse render
21
- EPub.split_on(html_document, 'h2').map &:to_s
21
+ EPub.split_on(html_document, "h2").map &:to_s
22
22
  end
23
23
  end
24
24
 
@@ -26,7 +26,7 @@ module Mint
26
26
 
27
27
  class EPub < Plugin
28
28
  def self.after_publish(document)
29
- # This check doesn't currently follow simlinks
29
+ # This check doesn't currently follow symlinks
30
30
  if document.destination_directory == Dir.getwd
31
31
  raise InvalidDocumentError
32
32
  end
@@ -40,22 +40,22 @@ module Mint
40
40
  create_chapters! chapters, :locals => metadata
41
41
 
42
42
  create! do |container|
43
- container.type = 'container'
43
+ container.type = "container"
44
44
  container.locals = locals
45
45
  end
46
46
 
47
47
  create! do |content|
48
- content.type = 'content'
48
+ content.type = "content"
49
49
  content.locals = locals
50
50
  end
51
51
 
52
52
  create! do |toc|
53
- toc.type = 'toc'
53
+ toc.type = "toc"
54
54
  toc.locals = locals
55
55
  end
56
56
 
57
57
  create! do |title|
58
- title.type = 'title'
58
+ title.type = "title"
59
59
  title.locals = locals
60
60
  end
61
61
  end
@@ -63,8 +63,8 @@ module Mint
63
63
  FileUtils.rm document.destination_file
64
64
 
65
65
  self.zip! document.destination_directory,
66
- :mimetype => 'application/epub+zip',
67
- :extension => 'epub'
66
+ :mimetype => "application/epub+zip",
67
+ :extension => "epub"
68
68
 
69
69
  FileUtils.rm_r document.destination_directory
70
70
  end
@@ -72,7 +72,7 @@ module Mint
72
72
  protected
73
73
 
74
74
  def self.split_on(document, tag_name, opts={})
75
- container_node = opts[:container] || '#container'
75
+ container_node = opts[:container] || "#container"
76
76
 
77
77
  new_document = document.dup.tap do |node|
78
78
  container = node.at container_node
@@ -86,22 +86,22 @@ module Mint
86
86
  div = nil
87
87
  container.element_children.each do |elem|
88
88
  if elem.name == tag_name
89
- div = node.create_element 'div'
90
- # div.add_class 'chapter'
89
+ div = node.create_element "div"
90
+ # div.add_class "chapter"
91
91
  elem.replace div
92
92
  end
93
93
  div << elem if div
94
94
  end
95
95
  end
96
96
 
97
- new_document.search('div div')
97
+ new_document.search("div div")
98
98
  end
99
99
 
100
100
  # This is an opinionated version of ZIP, specifically
101
101
  # tailored to ePub creation
102
102
  def self.zip!(directory, opts={})
103
103
  default_opts = {
104
- extension: 'zip',
104
+ extension: "zip",
105
105
  mimetype: nil
106
106
  }
107
107
 
@@ -112,7 +112,7 @@ module Mint
112
112
 
113
113
  Zip::ZipOutputStream.open "#{directory}.#{extension}" do |zos|
114
114
  if opts[:mimetype]
115
- zos.put_next_entry('mimetype', nil, nil, Zip::ZipEntry::STORED)
115
+ zos.put_next_entry("mimetype", nil, nil, Zip::ZipEntry::STORED)
116
116
  zos << opts[:mimetype]
117
117
  end
118
118
 
@@ -136,7 +136,7 @@ module Mint
136
136
  yield options if block_given?
137
137
  options = options.to_hash.symbolize_keys
138
138
 
139
- type = options[:type] || 'container'
139
+ type = options[:type] || "container"
140
140
  default_options =
141
141
  case type.to_sym
142
142
  when :container
@@ -156,7 +156,7 @@ module Mint
156
156
 
157
157
  def self.create_chapters!(chapters, opts={})
158
158
  opts = chapter_defaults.deep_merge(opts)
159
- template_file = EPub.template_directory + '/layouts/layout.haml'
159
+ template_file = EPub.template_directory + "/layouts/layout.haml"
160
160
  renderer = Tilt.new template_file, :ugly => true
161
161
  chapters.map do |chapter|
162
162
  renderer.render Object.new, opts[:locals].merge(:content => chapter)
@@ -172,7 +172,7 @@ module Mint
172
172
  renderer = Tilt.new template_file, :ugly => true
173
173
  content = renderer.render Object.new, opts[:locals]
174
174
 
175
- File.open(opts[:to], 'w') do |f|
175
+ File.open(opts[:to], "w") do |f|
176
176
  f << content
177
177
  end
178
178
  end
@@ -215,13 +215,13 @@ module Mint
215
215
  # def self.chapters_from(document)
216
216
  # html_text = File.read document.destination_file
217
217
  # html_document = Nokogiri::HTML::Document.parse html_text
218
- # chapter_contents = self.split_on(html_document, 'h2')
218
+ # chapter_contents = self.split_on(html_document, "h2")
219
219
  # chapter_ids = (1..chapters.length).map {|x| "chapter-#{x}" }
220
220
  # chapters = Hash[chapter_ids.zip chapter_contents]
221
221
  # end
222
222
 
223
223
  def self.create_chapter!(id, text)
224
- File.open chapter_filename(id), 'w' do |file|
224
+ File.open chapter_filename(id), "w" do |file|
225
225
  file << text
226
226
  end
227
227
  end
@@ -229,64 +229,64 @@ module Mint
229
229
  def self.chapter_defaults
230
230
  {
231
231
  locals: {
232
- title: 'Untitled'
232
+ title: "Untitled"
233
233
  }
234
234
  }
235
235
  end
236
236
 
237
237
  def self.container_defaults
238
238
  defaults = {
239
- from: 'container.haml',
239
+ from: "container.haml",
240
240
  to: "#{META_DIR}/container.xml",
241
241
  locals: {
242
- opf_file: 'OPS/content.opf'
242
+ opf_file: "OPS/content.opf"
243
243
  }
244
244
  }
245
245
  end
246
246
 
247
247
  def self.content_defaults
248
248
  defaults = {
249
- from: 'content.haml',
249
+ from: "content.haml",
250
250
  to: "#{CONTENT_DIR}/content.opf",
251
251
  locals: {
252
- title: 'Untitled',
253
- language: 'English',
254
- short_title: '',
255
- uuid: 'Unspecified',
256
- description: 'No description',
252
+ title: "Untitled",
253
+ language: "English",
254
+ short_title: "",
255
+ uuid: "Unspecified",
256
+ description: "No description",
257
257
  date: Date.today,
258
- creators: ['Anonymous'],
258
+ creators: ["Anonymous"],
259
259
  contributors: [],
260
- publisher: 'Self published',
261
- genre: 'Non-fiction',
262
- rights: 'All Rights Reserved',
263
- ncx_file: 'toc.ncx',
264
- stylesheet: 'style.css',
265
- title_file: 'title.html',
260
+ publisher: "Self published",
261
+ genre: "Non-fiction",
262
+ rights: "All Rights Reserved",
263
+ ncx_file: "toc.ncx",
264
+ stylesheet: "style.css",
265
+ title_file: "title.html",
266
266
  }
267
267
  }
268
268
  end
269
269
 
270
270
  def self.toc_defaults
271
271
  defaults = {
272
- from: 'toc.haml',
272
+ from: "toc.haml",
273
273
  to: "#{CONTENT_DIR}/toc.ncx",
274
274
  locals: {
275
- uuid: 'Unspecified',
276
- title: 'Untitled',
277
- title_file: 'title.html',
275
+ uuid: "Unspecified",
276
+ title: "Untitled",
277
+ title_file: "title.html",
278
278
  }
279
279
  }
280
280
  end
281
281
 
282
282
  def self.title_defaults
283
283
  defaults = {
284
- from: 'title.haml',
284
+ from: "title.haml",
285
285
  to: "#{CONTENT_DIR}/title.html",
286
286
  locals: {
287
- title: 'Untitled',
288
- creators: ['Anonymous'],
289
- stylesheet: 'style.css'
287
+ title: "Untitled",
288
+ creators: ["Anonymous"],
289
+ stylesheet: "style.css"
290
290
  }
291
291
  }
292
292
  end