review 1.4.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.travis.yml +1 -0
  4. data/ChangeLog +87 -0
  5. data/bin/review-check +2 -2
  6. data/bin/review-compile +15 -30
  7. data/bin/review-index +1 -1
  8. data/bin/review-init +12 -7
  9. data/bin/review-vol +9 -1
  10. data/doc/catalog.ja.md +53 -0
  11. data/doc/catalog.md +52 -0
  12. data/doc/format.ja.md +734 -0
  13. data/doc/format.md +746 -0
  14. data/doc/format_idg.ja.md +203 -0
  15. data/doc/{quickstart.rdoc → quickstart.ja.md} +138 -104
  16. data/doc/quickstart.md +252 -0
  17. data/doc/sample.yml +216 -48
  18. data/lib/epubmaker.rb +0 -1
  19. data/lib/epubmaker/content.rb +2 -2
  20. data/lib/epubmaker/epubcommon.rb +440 -0
  21. data/lib/epubmaker/epubv2.rb +8 -418
  22. data/lib/epubmaker/epubv3.rb +67 -61
  23. data/lib/epubmaker/producer.rb +60 -19
  24. data/lib/review/book.rb +1 -3
  25. data/lib/review/book/base.rb +18 -11
  26. data/lib/review/book/chapter.rb +5 -24
  27. data/lib/review/book/compilable.rb +5 -1
  28. data/lib/review/book/index.rb +48 -17
  29. data/lib/review/book/page_metric.rb +17 -8
  30. data/lib/review/book/part.rb +12 -2
  31. data/lib/review/book/volume.rb +3 -2
  32. data/lib/review/builder.rb +30 -10
  33. data/lib/review/compiler.rb +6 -4
  34. data/lib/review/configure.rb +3 -3
  35. data/lib/review/epubmaker.rb +56 -26
  36. data/lib/review/htmlbuilder.rb +33 -42
  37. data/lib/review/htmlutils.rb +12 -7
  38. data/lib/review/i18n.rb +77 -17
  39. data/lib/review/i18n.yml +80 -4
  40. data/lib/review/idgxmlbuilder.rb +27 -57
  41. data/lib/review/inaobuilder.rb +3 -3
  42. data/lib/review/latexbuilder.rb +90 -67
  43. data/lib/review/layout.tex.erb +54 -7
  44. data/lib/review/markdownbuilder.rb +21 -3
  45. data/lib/review/pdfmaker.rb +67 -38
  46. data/lib/review/sec_counter.rb +1 -1
  47. data/lib/review/tocparser.rb +9 -5
  48. data/lib/review/topbuilder.rb +6 -6
  49. data/lib/review/version.rb +1 -1
  50. data/review.gemspec +3 -1
  51. data/test/book_test_helper.rb +1 -1
  52. data/test/sample-book/README.md +2 -0
  53. data/test/sample-book/src/Rakefile +31 -0
  54. data/test/sample-book/src/_cover.html +0 -0
  55. data/test/sample-book/src/catalog.yml +10 -0
  56. data/test/sample-book/src/ch01.re +0 -0
  57. data/test/sample-book/src/ch02.re +0 -0
  58. data/test/sample-book/src/config.yml +160 -32
  59. data/test/sample-book/src/images/ch01-imgsample.jpg +0 -0
  60. data/test/sample-book/src/images/cover.jpg +0 -0
  61. data/test/sample-book/src/preface.re +0 -0
  62. data/test/sample-book/src/sty/jumoline.sty +0 -0
  63. data/test/sample-book/src/sty/reviewmacro.sty +18 -0
  64. data/test/sample-book/src/style.css +0 -0
  65. data/test/test_book.rb +25 -27
  66. data/test/test_book_chapter.rb +4 -73
  67. data/test/test_book_part.rb +5 -4
  68. data/test/test_builder.rb +3 -3
  69. data/test/test_epub3maker.rb +527 -0
  70. data/test/test_epubmaker.rb +6 -6
  71. data/test/test_htmlbuilder.rb +143 -6
  72. data/test/test_i18n.rb +95 -10
  73. data/test/test_idgxmlbuilder.rb +28 -2
  74. data/test/test_index.rb +109 -1
  75. data/test/test_latexbuilder.rb +51 -0
  76. data/test/test_markdownbuilder.rb +54 -1
  77. data/test/test_pdfmaker.rb +7 -6
  78. data/test/test_review_ext.rb +31 -0
  79. data/test/test_topbuilder.rb +3 -1
  80. metadata +46 -13
  81. data/doc/catalog.rdoc +0 -49
  82. data/doc/format.rdoc +0 -618
  83. data/doc/format_idg.rdoc +0 -180
  84. data/doc/libepubmaker/config.yml +0 -207
  85. data/lib/epubmaker/resource.rb +0 -82
  86. data/test/sample-book/src/CHAPS +0 -2
  87. data/test/sample-book/src/PREDEF +0 -1
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # = epubv3.rb -- EPUB version 3 producer.
3
3
  #
4
- # Copyright (c) 2010-2014 Kenshi Muto
4
+ # Copyright (c) 2010-2015 Kenshi Muto
5
5
  #
6
6
  # This program is free software.
7
7
  # You can distribute or modify this program under the terms of
@@ -9,56 +9,36 @@
9
9
  # For details of the GNU LGPL, see the file "COPYING".
10
10
  #
11
11
 
12
- require 'epubmaker/epubv2'
12
+ require 'epubmaker/epubcommon'
13
13
 
14
14
  module EPUBMaker
15
15
 
16
16
  # EPUBv3 is EPUB version 3 producer.
17
- class EPUBv3 < EPUBv2
18
- def opf_guide
19
- s = ""
20
- s << %Q[ <guide>\n]
21
- s << %Q[ <reference type="cover" title="#{@producer.res.v("covertitle")}" href="#{@producer.params["cover"]}"/>\n]
22
- s << %Q[ <reference type="title-page" title="#{@producer.res.v("titlepagetitle")}" href="titlepage.#{@producer.params["htmlext"]}"/>\n] unless @producer.params["titlepage"].nil?
23
- s << %Q[ <reference type="toc" title="#{@producer.res.v("toctitle")}" href="#{@producer.params["bookname"]}-toc.#{@producer.params["htmlext"]}"/>\n]
24
- s << %Q[ <reference type="colophon" title="#{@producer.res.v("colophontitle")}" href="colophon.#{@producer.params["htmlext"]}"/>\n] unless @producer.params["colophon"].nil?
25
- s << %Q[ </guide>\n]
26
- s
17
+ class EPUBv3 < EPUBCommon
18
+ # Construct object with parameter hash +params+ and message resource hash +res+.
19
+ def initialize(producer)
20
+ super
27
21
  end
28
22
 
29
- def ncx(indentarray)
30
- s = common_header
31
- s << <<EOT
32
- <title>#{@producer.res.v("toctitle")}</title>
33
- </head>
34
- <body>
35
- <nav xmlns:epub="http://www.idpf.org/2007/ops" epub:type="toc" id="toc">
36
- <h1 class="toc-title">#{@producer.res.v("toctitle")}</h1>
23
+ # Return opf file content.
24
+ def opf
25
+ s = <<EOT
26
+ <?xml version="1.0" encoding="UTF-8"?>
27
+ <package version="3.0" xmlns="http://www.idpf.org/2007/opf" unique-identifier="BookId" xml:lang="#{@producer.params["language"]}">
28
+ <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
37
29
  EOT
38
30
 
39
- if @producer.params["flattoc"].nil?
40
- s << hierarchy_ncx("ol")
41
- else
42
- s << flat_ncx("ol", @producer.params["flattocindent"])
43
- end
44
- s << <<EOT
45
- </nav>
46
- </body>
47
- </html>
48
- EOT
49
- s
50
- end
31
+ s << opf_metainfo
51
32
 
52
- # Produce EPUB file +epubfile+.
53
- # +basedir+ points the directory has contents.
54
- # +tmpdir+ defines temporary directory.
55
- def produce(epubfile, basedir, tmpdir)
56
- produce_write_common(basedir, tmpdir)
33
+ s << %Q[ </metadata>\n]
57
34
 
58
- File.open("#{tmpdir}/OEBPS/#{@producer.params["bookname"]}-toc.#{@producer.params["htmlext"]}", "w") {|f| @producer.ncx(f, @producer.params["ncxindent"]) }
35
+ s << opf_manifest
36
+ s << opf_tocx
37
+ s << opf_guide # same as ePUB2
59
38
 
60
- @producer.call_hook(@producer.params["hook_prepack"], tmpdir)
61
- export_zip(tmpdir, epubfile)
39
+ s << %Q[</package>\n]
40
+
41
+ s
62
42
  end
63
43
 
64
44
  def opf_metainfo
@@ -66,7 +46,9 @@ EOT
66
46
  %w[title language date type format source description relation coverage subject rights].each do |item|
67
47
  next if @producer.params[item].nil?
68
48
  if @producer.params[item].instance_of?(Array)
69
- s << @producer.params[item].map.with_index {|v, i| %Q[ <dc:#{item} id="#{item}-#{i}">#{CGI.escapeHTML(v.to_s)}</dc:#{item}>\n]}.join
49
+ @producer.params[item].each_with_index {|v, i|
50
+ s << %Q[ <dc:#{item} id="#{item}-#{i}">#{CGI.escapeHTML(v.to_s)}</dc:#{item}>\n]
51
+ }
70
52
  else
71
53
  s << %Q[ <dc:#{item} id="#{item}">#{CGI.escapeHTML(@producer.params[item].to_s)}</dc:#{item}>\n]
72
54
  end
@@ -134,11 +116,11 @@ EOT
134
116
  s
135
117
  end
136
118
 
137
- def opf_manifest(mathstr)
119
+ def opf_manifest
138
120
  s = ""
139
121
  s << <<EOT
140
122
  <manifest>
141
- <item properties="nav#{mathstr.empty? ? '' : ' mathml'}" id="#{@producer.params["bookname"]}-toc.#{@producer.params["htmlext"]}" href="#{@producer.params["bookname"]}-toc.#{@producer.params["htmlext"]}" media-type="application/xhtml+xml"/>
123
+ <item properties="nav" id="#{@producer.params["bookname"]}-toc.#{@producer.params["htmlext"]}" href="#{@producer.params["bookname"]}-toc.#{@producer.params["htmlext"]}" media-type="application/xhtml+xml"/>
142
124
  <item id="#{@producer.params["bookname"]}" href="#{@producer.params["cover"]}" media-type="application/xhtml+xml"/>
143
125
  EOT
144
126
 
@@ -158,7 +140,7 @@ EOT
158
140
  if item.properties.size > 0
159
141
  propstr = %Q[ properties="#{item.properties.sort.uniq.join(" ")}"]
160
142
  end
161
- s << %Q[ <item#{mathstr} id="#{item.id}" href="#{item.file}" media-type="#{item.media}"#{propstr}/>\n]
143
+ s << %Q[ <item id="#{item.id}" href="#{item.file}" media-type="#{item.media}"#{propstr}/>\n]
162
144
  end
163
145
  s << %Q[ </manifest>\n]
164
146
 
@@ -166,7 +148,7 @@ EOT
166
148
  end
167
149
 
168
150
  def opf_tocx
169
- if @producer.params["cover_linear"] && @producer.params["cover_linear"] != "no"
151
+ if @producer.params["epubmaker"]["cover_linear"] && @producer.params["epubmaker"]["cover_linear"] != "no"
170
152
  cover_linear = "yes"
171
153
  else
172
154
  cover_linear = "no"
@@ -175,7 +157,7 @@ EOT
175
157
  s = ""
176
158
  s << %Q[ <spine>\n]
177
159
  s << %Q[ <itemref idref="#{@producer.params["bookname"]}" linear="#{cover_linear}"/>\n]
178
- # s << %Q[ <itemref idref="#{@producer.params["bookname"]}-toc.#{@producer.params["htmlext"]}" />\n]
160
+ s << %Q[ <itemref idref="#{@producer.params["bookname"]}-toc.#{@producer.params["htmlext"]}" />\n] if @producer.params["toc"]
179
161
 
180
162
  @producer.contents.each do |item|
181
163
  next if item.media !~ /xhtml\+xml/ # skip non XHTML
@@ -186,26 +168,50 @@ EOT
186
168
  s
187
169
  end
188
170
 
189
- # Return opf file content.
190
- def opf
191
- mathstr = @producer.params["mathml"].nil? ? "" : %Q[ properties="mathml"]
192
- s = <<EOT
193
- <?xml version="1.0" encoding="UTF-8"?>
194
- <package version="3.0" xmlns="http://www.idpf.org/2007/opf" unique-identifier="BookId" xml:lang="#{@producer.params["language"]}">
195
- <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
196
- EOT
171
+ def opf_guide
172
+ s = ""
173
+ s << %Q[ <guide>\n]
174
+ s << %Q[ <reference type="cover" title="#{@producer.res.v("covertitle")}" href="#{@producer.params["cover"]}"/>\n]
175
+ s << %Q[ <reference type="title-page" title="#{@producer.res.v("titlepagetitle")}" href="titlepage.#{@producer.params["htmlext"]}"/>\n] unless @producer.params["titlepage"].nil?
176
+ s << %Q[ <reference type="toc" title="#{@producer.res.v("toctitle")}" href="#{@producer.params["bookname"]}-toc.#{@producer.params["htmlext"]}"/>\n]
177
+ s << %Q[ <reference type="colophon" title="#{@producer.res.v("colophontitle")}" href="colophon.#{@producer.params["htmlext"]}"/>\n] unless @producer.params["colophon"].nil?
178
+ s << %Q[ </guide>\n]
179
+ s
180
+ end
197
181
 
198
- s << opf_metainfo
182
+ def ncx(indentarray)
183
+ s = common_header
184
+ s << <<EOT
185
+ <title>#{@producer.res.v("toctitle")}</title>
186
+ </head>
187
+ <body>
188
+ <nav xmlns:epub="http://www.idpf.org/2007/ops" epub:type="toc" id="toc">
189
+ <h1 class="toc-title">#{@producer.res.v("toctitle")}</h1>
190
+ EOT
199
191
 
200
- s << %Q[ </metadata>\n]
192
+ if @producer.params["epubmaker"]["flattoc"].nil?
193
+ s << hierarchy_ncx("ol")
194
+ else
195
+ s << flat_ncx("ol", @producer.params["epubmaker"]["flattocindent"])
196
+ end
197
+ s << <<EOT
198
+ </nav>
199
+ </body>
200
+ </html>
201
+ EOT
202
+ s
203
+ end
201
204
 
202
- s << opf_manifest(mathstr)
203
- s << opf_tocx
204
- s << opf_guide # same as ePUB2
205
+ # Produce EPUB file +epubfile+.
206
+ # +basedir+ points the directory has contents.
207
+ # +tmpdir+ defines temporary directory.
208
+ def produce(epubfile, basedir, tmpdir)
209
+ produce_write_common(basedir, tmpdir)
205
210
 
206
- s << %Q[</package>\n]
211
+ File.open("#{tmpdir}/OEBPS/#{@producer.params["bookname"]}-toc.#{@producer.params["htmlext"]}", "w") {|f| @producer.ncx(f, @producer.params["epubmaker"]["ncxindent"]) }
207
212
 
208
- s
213
+ @producer.call_hook(@producer.params["epubmaker"]["hook_prepack"], tmpdir)
214
+ export_zip(tmpdir, epubfile)
209
215
  end
210
216
 
211
217
  private
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # = producer.rb -- EPUB producer.
3
3
  #
4
- # Copyright (c) 2010-2014 Kenshi Muto
4
+ # Copyright (c) 2010-2015 Kenshi Muto
5
5
  #
6
6
  # This program is free software.
7
7
  # You can distribute or modify this program under the terms of
@@ -12,10 +12,10 @@ require 'tmpdir'
12
12
  require 'fileutils'
13
13
  require 'yaml'
14
14
  require 'uuid'
15
- require 'epubmaker/resource'
16
15
  require 'epubmaker/content'
17
16
  require 'epubmaker/epubv2'
18
17
  require 'epubmaker/epubv3'
18
+ require 'review/i18n'
19
19
 
20
20
  module EPUBMaker
21
21
  # EPUBMaker produces EPUB file.
@@ -25,7 +25,7 @@ module EPUBMaker
25
25
  # Parameter hash.
26
26
  attr_accessor :params
27
27
  # Message resource object.
28
- attr_accessor :res
28
+ attr_reader :res
29
29
 
30
30
  # Take YAML +file+ and return parameter hash.
31
31
  def Producer.load(file)
@@ -47,6 +47,7 @@ module EPUBMaker
47
47
  @params = {}
48
48
  @epub = nil
49
49
  @params["epubversion"] = version unless version.nil?
50
+ @res = ReVIEW::I18n
50
51
 
51
52
  unless params.nil?
52
53
  merge_params(params)
@@ -57,7 +58,6 @@ module EPUBMaker
57
58
  def merge_params(params)
58
59
  @params = @params.merge(params)
59
60
  complement
60
- @res = EPUBMaker::Resource.new(@params)
61
61
 
62
62
  unless @params["epubversion"].nil?
63
63
  case @params["epubversion"].to_i
@@ -69,6 +69,9 @@ module EPUBMaker
69
69
  raise "Invalid EPUB version (#{@params["epubversion"]}.)"
70
70
  end
71
71
  end
72
+ if params["language"]
73
+ ReVIEW::I18n.locale = params["language"]
74
+ end
72
75
  support_legacy_maker
73
76
  end
74
77
 
@@ -191,8 +194,6 @@ module EPUBMaker
191
194
  "urnid" => "urn:uid:#{UUID.create}",
192
195
  "isbn" => nil,
193
196
  "toclevel" => 2,
194
- "flattoc" => nil,
195
- "flattocindent" => true,
196
197
  "stylesheet" => [],
197
198
  "epubversion" => 2,
198
199
  "htmlversion" => 4,
@@ -205,26 +206,66 @@ module EPUBMaker
205
206
  "originaltitlefile" => nil,
206
207
  "profile" => nil,
207
208
  "colophon" => nil,
208
- "zip_stage1" => "zip -0Xq",
209
- "zip_stage2" => "zip -Xr9Dq",
210
- "hook_beforeprocess" => nil,
211
- "hook_afterfrontmatter" => nil,
212
- "hook_afterbody" => nil,
213
- "hook_afterbackmatter" => nil,
214
- "hook_aftercopyimage" => nil,
215
- "hook_prepack" => nil,
216
- "rename_for_legacy" => nil,
209
+ "epubmaker" => {
210
+ "flattoc" => nil,
211
+ "flattocindent" => true,
212
+ "ncx_indent" => [],
213
+ "zip_stage1" => "zip -0Xq",
214
+ "zip_stage2" => "zip -Xr9Dq",
215
+ "zip_addpath" => nil,
216
+ "hook_beforeprocess" => nil,
217
+ "hook_afterfrontmatter" => nil,
218
+ "hook_afterbody" => nil,
219
+ "hook_afterbackmatter" => nil,
220
+ "hook_aftercopyimage" => nil,
221
+ "hook_prepack" => nil,
222
+ "rename_for_legacy" => nil,
223
+ "verify_target_images" => nil,
224
+ "force_include_images" => [],
225
+ "cover_linear" => nil,
226
+ },
217
227
  "imagedir" => "images",
218
228
  "fontdir" => "fonts",
219
229
  "image_ext" => %w(png gif jpg jpeg svg ttf woff otf),
220
230
  "font_ext" => %w(ttf woff otf),
221
- "verify_target_images" => nil,
222
- "force_include_images" => [],
223
- "cover_linear" => nil,
224
231
  }
225
232
 
226
233
  defaults.each_pair do |k, v|
227
- @params[k] = v if @params[k].nil?
234
+ if k == "epubmaker" && !@params[k].nil?
235
+ v.each_pair do |k2, v2|
236
+ @params[k][k2] = v2 if @params[k][k2].nil?
237
+ end
238
+ else
239
+ @params[k] = v if @params[k].nil?
240
+ end
241
+ end
242
+
243
+ deprecated_parameters = {
244
+ "ncxindent" => "epubmaker:ncxindent",
245
+ "flattoc" => "epubmaker:flattoc",
246
+ "flattocindent" => "epubmaker:flattocindent",
247
+ "hook_beforeprocess" => "epubmaker:hook_beforeprocess",
248
+ "hook_afterfrontmatter" => "epubmaker:hook_afterfrontmatter",
249
+ "hook_afterbody" => "epubmaker:hook_afterbody",
250
+ "hook_afterbackmatter" => "epubmaker:hook_afterbackmatter",
251
+ "hook_aftercopyimage" => "epubmaker:hook_aftercopyimage",
252
+ "hook_prepack" => "epubmaker:hook_prepack",
253
+ "rename_for_legacy" => "epubmaker:rename_for_legacy",
254
+ "zip_stage1" => "epubmaker:zip_stage1",
255
+ "zip_stage2" => "epubmaker:zip_stage2",
256
+ "zip_addpath" => "epubmaker:zip_addpath",
257
+ "verify_target_images" => "epubmaker:verify_target_images",
258
+ "force_include_images" => "epubmaker:force_include_images",
259
+ "cover_linear" => "epubmaker:cover_linear",
260
+ }
261
+
262
+ deprecated_parameters.each_pair do |k, v|
263
+ unless @params[k].nil?
264
+ sa = v.split(":", 2)
265
+ warn "Parameter #{k} is deprecated. Use:\n#{sa[0]}:\n #{sa[1]}: ...\n\n"
266
+ @params[sa[0]][sa[1]] = @params[k]
267
+ @params.delete(k)
268
+ end
228
269
  end
229
270
 
230
271
  @params["htmlversion"] == 5 if @params["epubversion"] >= 3
data/lib/review/book.rb CHANGED
@@ -12,8 +12,6 @@
12
12
 
13
13
  require 'review/exception'
14
14
  require 'review/extentions'
15
- require 'forwardable'
16
- require 'nkf'
17
15
 
18
16
  require 'review/book/base'
19
17
  require 'review/book/chapter'
@@ -26,7 +24,7 @@ module ReVIEW
26
24
  @default_book = nil
27
25
 
28
26
  def ReVIEW.book
29
- @default_book ||= Book::Base.load_default
27
+ @default_book ||= Book::Base.load
30
28
  end
31
29
 
32
30
  module Book
@@ -19,17 +19,11 @@ module ReVIEW
19
19
  attr_writer :config
20
20
 
21
21
  def self.load_default
22
- basedir = "."
23
- if File.file?("#{basedir}/CHAPS") ||
24
- File.file?("#{basedir}/catalog.yml")
25
- book = load(basedir)
26
- book
27
- else
28
- new(basedir)
29
- end
22
+ warn 'Book::Base.load_default() is obsoleted. Use Book::Base.load().'
23
+ load()
30
24
  end
31
25
 
32
- def self.load(dir)
26
+ def self.load(dir = ".")
33
27
  update_rubyenv dir
34
28
  new(dir)
35
29
  end
@@ -81,7 +75,13 @@ module ReVIEW
81
75
  end
82
76
 
83
77
  def page_metric
84
- config["page_metric"]
78
+ if config["page_metric"].respond_to?(:downcase) && config["page_metric"].upcase =~ /^[A-Z0-9_]+$/
79
+ ReVIEW::Book::PageMetric.const_get(config["page_metric"].upcase)
80
+ elsif config["page_metric"].kind_of?(Array) && config["page_metric"].size == 5
81
+ ReVIEW::Book::PageMetric.new(*config["page_metric"])
82
+ else
83
+ config["page_metric"]
84
+ end
85
85
  end
86
86
 
87
87
  def parts
@@ -149,7 +149,9 @@ module ReVIEW
149
149
  end
150
150
 
151
151
  def volume
152
- Volume.sum(chapters.map {|chap| chap.volume })
152
+ vol = Volume.sum(chapters.map {|chap| chap.volume })
153
+ vol.page_per_kbyte = page_metric.page_per_kbyte
154
+ vol
153
155
  end
154
156
 
155
157
  def config
@@ -161,6 +163,11 @@ module ReVIEW
161
163
  @config = param
162
164
  end
163
165
 
166
+ def load_config(filename)
167
+ new_conf = YAML.load_file(filename)
168
+ @config.merge!(new_conf)
169
+ end
170
+
164
171
  # backward compatible
165
172
  def param
166
173
  @config
@@ -12,26 +12,13 @@
12
12
  require 'review/book/compilable'
13
13
  module ReVIEW
14
14
  module Book
15
+ ROMAN = %w[0 I II III IV V VI VII VIII IX X XI XII XIII XIV XV XVI XVII XVIII XIX XX XXI XXII XXIII XXIV XXV XXVI XXVII]
16
+ ALPHA = %w[0 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]
17
+
15
18
  class Chapter
16
19
  include Compilable
17
20
 
18
- ROMAN = %w[0 I II III IV V VI VII VIII IX X XI XII XIII XIV XV XVI XVII XVIII XIX XX XXI XXII XXIII XXIV XXV XXVI XXVII]
19
- ALPHA = %w[0 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]
20
-
21
- def Chapter.intern_pathes(pathes)
22
- books = {}
23
- pathes.map {|path|
24
- basedir = File.dirname(path)
25
- book = (books[File.expand_path(basedir)] ||= Book.load(basedir))
26
- begin
27
- book.chapter(File.basename(path, '.*'))
28
- rescue KeyError
29
- raise FileNotFound, "No such chapter in your book. Check if the catalog files contain the chapter. : #{path}"
30
- end
31
- }
32
- end
33
-
34
- attr_reader :number
21
+ attr_reader :number, :book
35
22
 
36
23
  def initialize(book, number, name, path, io = nil)
37
24
  @book = book
@@ -64,12 +51,7 @@ module ReVIEW
64
51
  if on_APPENDIX?
65
52
  return "#{@number}" if @number < 1 || @number > 27
66
53
 
67
- if @book.config["appendix_format"].blank?
68
- type = "arabic"
69
- else
70
- type = @book.config["appendix_format"].downcase.strip
71
- end
72
-
54
+ type = @book.config["appendix_format"].blank? ? "arabic" : @book.config["appendix_format"].downcase.strip
73
55
  appendix = case type
74
56
  when "roman"
75
57
  ROMAN[@number]
@@ -79,7 +61,6 @@ module ReVIEW
79
61
  # nil, "arabic", etc...
80
62
  "#{@number}"
81
63
  end
82
-
83
64
  if heading
84
65
  return "#{I18n.t("appendix", appendix)}"
85
66
  else