review 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (160) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +90 -66
  3. data/.travis.yml +1 -1
  4. data/Gemfile +0 -1
  5. data/NEWS.ja.md +82 -0
  6. data/NEWS.md +83 -0
  7. data/README.md +5 -3
  8. data/Rakefile +8 -8
  9. data/bin/review +1 -5
  10. data/bin/review-catalog-converter +22 -27
  11. data/bin/review-check +36 -43
  12. data/bin/review-checkdep +10 -15
  13. data/bin/review-compile +37 -55
  14. data/bin/review-epubmaker +4 -5
  15. data/bin/review-index +21 -29
  16. data/bin/review-init +26 -37
  17. data/bin/review-pdfmaker +0 -2
  18. data/bin/review-preproc +25 -45
  19. data/bin/review-validate +19 -18
  20. data/bin/review-vol +15 -27
  21. data/doc/config.yml.sample +5 -2
  22. data/doc/format.ja.md +20 -1
  23. data/doc/format.md +21 -5
  24. data/doc/images/review-generate.png +0 -0
  25. data/lib/epubmaker.rb +1 -3
  26. data/lib/epubmaker/content.rb +24 -27
  27. data/lib/epubmaker/epubcommon.rb +135 -148
  28. data/lib/epubmaker/epubv2.rb +39 -46
  29. data/lib/epubmaker/epubv3.rb +93 -103
  30. data/lib/epubmaker/producer.rb +138 -151
  31. data/lib/epubmaker/zip_exporter.rb +21 -26
  32. data/lib/review/book.rb +3 -6
  33. data/lib/review/book/base.rb +78 -103
  34. data/lib/review/book/chapter.rb +36 -40
  35. data/lib/review/book/compilable.rb +28 -31
  36. data/lib/review/book/image_finder.rb +6 -13
  37. data/lib/review/book/index.rb +100 -121
  38. data/lib/review/book/page_metric.rb +2 -7
  39. data/lib/review/book/part.rb +18 -20
  40. data/lib/review/book/volume.rb +9 -13
  41. data/lib/review/builder.rb +81 -116
  42. data/lib/review/catalog.rb +15 -19
  43. data/lib/review/compiler.rb +64 -83
  44. data/lib/review/configure.rb +87 -97
  45. data/lib/review/converter.rb +2 -7
  46. data/lib/review/epubbuilder.rb +1 -3
  47. data/lib/review/epubmaker.rb +213 -205
  48. data/lib/review/exception.rb +2 -4
  49. data/lib/review/extentions.rb +0 -1
  50. data/lib/review/extentions/hash.rb +2 -2
  51. data/lib/review/extentions/string.rb +5 -30
  52. data/lib/review/htmlbuilder.rb +320 -375
  53. data/lib/review/htmltoc.rb +4 -7
  54. data/lib/review/htmlutils.rb +29 -32
  55. data/lib/review/i18n.rb +33 -44
  56. data/lib/review/i18n.yml +3 -3
  57. data/lib/review/idgxmlbuilder.rb +309 -345
  58. data/lib/review/latexbuilder.rb +175 -212
  59. data/lib/review/latexindex.rb +2 -8
  60. data/lib/review/latexutils.rb +33 -43
  61. data/lib/review/lineinput.rb +1 -1
  62. data/lib/review/logger.rb +21 -0
  63. data/lib/review/makerhelper.rb +1 -4
  64. data/lib/review/markdownbuilder.rb +44 -53
  65. data/lib/review/md2inaobuilder.rb +6 -12
  66. data/lib/review/pdfmaker.rb +143 -173
  67. data/lib/review/preprocessor.rb +64 -101
  68. data/lib/review/rstbuilder.rb +126 -158
  69. data/lib/review/sec_counter.rb +18 -34
  70. data/lib/review/template.rb +4 -5
  71. data/lib/review/textbuilder.rb +2 -3
  72. data/lib/review/textutils.rb +7 -13
  73. data/lib/review/tocparser.rb +31 -56
  74. data/lib/review/tocprinter.rb +26 -52
  75. data/lib/review/topbuilder.rb +219 -247
  76. data/lib/review/unfold.rb +15 -24
  77. data/lib/review/version.rb +1 -1
  78. data/lib/review/webmaker.rb +75 -99
  79. data/lib/review/webtocprinter.rb +15 -20
  80. data/lib/review/yamlloader.rb +13 -15
  81. data/review.gemspec +20 -22
  82. data/templates/latex/layout.tex.erb +2 -2
  83. data/templates/opf/epubv2.opf.erb +7 -7
  84. data/templates/opf/epubv3.opf.erb +7 -7
  85. data/templates/web/html/layout-html5.html.erb +2 -2
  86. data/test/assets/black.eps +280 -0
  87. data/test/assets/fit.png +0 -0
  88. data/test/assets/large.gif +0 -0
  89. data/test/assets/large.jpg +0 -0
  90. data/test/assets/large.png +0 -0
  91. data/test/assets/large.svg +65 -0
  92. data/test/assets/test_template.tex +1 -1
  93. data/test/book_test_helper.rb +2 -2
  94. data/test/run_test.rb +4 -4
  95. data/test/sample-book/src/Rakefile +21 -22
  96. data/test/syntax-book/Gemfile +4 -0
  97. data/test/syntax-book/Rakefile +72 -0
  98. data/test/syntax-book/appA.re +22 -0
  99. data/test/syntax-book/bib.re +6 -0
  100. data/test/syntax-book/catalog.yml +15 -0
  101. data/test/syntax-book/ch01.re +136 -0
  102. data/test/syntax-book/ch02.re +351 -0
  103. data/test/syntax-book/ch03.re +82 -0
  104. data/test/syntax-book/config.yml +35 -0
  105. data/test/syntax-book/images/ball.png +0 -0
  106. data/test/syntax-book/images/cover.jpg +0 -0
  107. data/test/syntax-book/images/fractal.png +0 -0
  108. data/test/syntax-book/images/img3-1.png +0 -0
  109. data/test/syntax-book/images/inlineicon.jpg +0 -0
  110. data/test/syntax-book/images/logic.png +0 -0
  111. data/test/syntax-book/images/logic2.png +0 -0
  112. data/test/syntax-book/images/puzzle.jpg +0 -0
  113. data/test/syntax-book/images/table.jpg +0 -0
  114. data/test/syntax-book/part2.re +6 -0
  115. data/test/syntax-book/pre01.re +26 -0
  116. data/test/syntax-book/review-ext.rb +14 -0
  117. data/test/syntax-book/sty/jumoline.sty +310 -0
  118. data/test/syntax-book/sty/reviewmacro.sty +39 -0
  119. data/test/syntax-book/style.css +494 -0
  120. data/test/syntax-book/syntax.dic +2 -0
  121. data/test/test_book.rb +106 -111
  122. data/test/test_book_chapter.rb +21 -22
  123. data/test/test_book_part.rb +3 -5
  124. data/test/test_builder.rb +11 -22
  125. data/test/test_catalog.rb +17 -18
  126. data/test/test_catalog_converter_cmd.rb +5 -5
  127. data/test/test_compiler.rb +18 -16
  128. data/test/test_configure.rb +35 -38
  129. data/test/test_converter.rb +3 -4
  130. data/test/test_epub3maker.rb +136 -117
  131. data/test/test_epubmaker.rb +107 -114
  132. data/test/test_epubmaker_cmd.rb +2 -4
  133. data/test/test_extentions_hash.rb +32 -33
  134. data/test/test_helper.rb +9 -11
  135. data/test/test_htmlbuilder.rb +454 -420
  136. data/test/test_htmltoc.rb +8 -12
  137. data/test/test_htmlutils.rb +0 -2
  138. data/test/test_i18n.rb +159 -150
  139. data/test/test_idgxmlbuilder.rb +190 -197
  140. data/test/test_image_finder.rb +21 -22
  141. data/test/test_index.rb +24 -29
  142. data/test/test_latexbuilder.rb +274 -264
  143. data/test/test_lineinput.rb +7 -10
  144. data/test/test_location.rb +7 -7
  145. data/test/test_makerhelper.rb +13 -25
  146. data/test/test_markdownbuilder.rb +23 -26
  147. data/test/test_md2inaobuilder.rb +8 -11
  148. data/test/test_pdfmaker.rb +114 -123
  149. data/test/test_pdfmaker_cmd.rb +1 -3
  150. data/test/test_review_ext.rb +3 -5
  151. data/test/test_rstbuilder.rb +92 -97
  152. data/test/test_template.rb +3 -7
  153. data/test/test_textutils.rb +27 -27
  154. data/test/test_tocparser.rb +2 -2
  155. data/test/test_topbuilder.rb +98 -103
  156. data/test/test_webtocprinter.rb +5 -6
  157. data/test/test_yamlloader.rb +42 -42
  158. data/test/test_zip_exporter.rb +12 -18
  159. metadata +86 -9
  160. data/lib/review/ewbbuilder.rb +0 -382
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  # = epubv2.rb -- EPUB version 2 producer.
4
2
  #
5
3
  # Copyright (c) 2010-2017 Kenshi Muto and Masayoshi Takahashi
@@ -15,10 +13,9 @@ require 'cgi'
15
13
  require 'epubmaker/zip_exporter'
16
14
 
17
15
  module EPUBMaker
18
-
19
16
  # EPUBv2 is EPUB version 2 producer.
20
17
  class EPUBv2 < EPUBCommon
21
- # Construct object with parameter hash +params+ and message resource hash +res+.
18
+ # Construct object with parameter hash +config+ and message resource hash +res+.
22
19
  def initialize(producer)
23
20
  super
24
21
  end
@@ -32,43 +29,41 @@ module EPUBMaker
32
29
 
33
30
  tmplfile = File.expand_path('./opf/epubv2.opf.erb', ReVIEW::Template::TEMPLATE_DIR)
34
31
  tmpl = ReVIEW::Template.load(tmplfile)
35
- return tmpl.result(binding)
32
+ tmpl.result(binding)
36
33
  end
37
34
 
38
35
  def opf_metainfo
39
- s = ""
36
+ s = ''
40
37
  %w[title language date type format source description relation coverage subject rights].each do |item|
41
- next unless @producer.params[item]
42
- if @producer.params[item].kind_of?(Array)
43
- s << @producer.params.names_of(item).map {|i| %Q[ <dc:#{item}>#{CGI.escapeHTML(i)}</dc:#{item}>\n]}.join
38
+ next unless @producer.config[item]
39
+ if @producer.config[item].is_a?(Array)
40
+ s << @producer.config.names_of(item).map { |i| %Q( <dc:#{item}>#{CGI.escapeHTML(i)}</dc:#{item}>\n) }.join
44
41
  else
45
- s << %Q[ <dc:#{item}>#{CGI.escapeHTML(@producer.params.name_of(item))}</dc:#{item}>\n]
42
+ s << %Q( <dc:#{item}>#{CGI.escapeHTML(@producer.config.name_of(item))}</dc:#{item}>\n)
46
43
  end
47
44
  end
48
45
 
49
46
  # ID
50
- if @producer.params["isbn"].nil?
51
- s << %Q[ <dc:identifier id="BookId">#{@producer.params["urnid"]}</dc:identifier>\n]
47
+ if @producer.config['isbn'].nil?
48
+ s << %Q( <dc:identifier id="BookId">#{@producer.config['urnid']}</dc:identifier>\n)
52
49
  else
53
- s << %Q[ <dc:identifier id="BookId" opf:scheme="ISBN">#{@producer.params["isbn"]}</dc:identifier>\n]
50
+ s << %Q( <dc:identifier id="BookId" opf:scheme="ISBN">#{@producer.config['isbn']}</dc:identifier>\n)
54
51
  end
55
52
 
56
53
  # creator (should be array)
57
54
  %w[aut a-adp a-ann a-arr a-art a-asn a-aqt a-aft a-aui a-ant a-bkp a-clb a-cmm a-dsr a-edt a-ill a-lyr a-mdc a-mus a-nrt a-oth a-pht a-prt a-red a-rev a-spn a-ths a-trc a-trl].each do |role|
58
- next unless @producer.params[role]
59
- @producer.params.names_of(role).each do |v|
60
- s << %Q[ <dc:creator opf:role="#{role.sub('a-', '')}">#{CGI.escapeHTML(v)}</dc:creator>\n]
55
+ next unless @producer.config[role]
56
+ @producer.config.names_of(role).each do |v|
57
+ s << %Q( <dc:creator opf:role="#{role.sub('a-', '')}">#{CGI.escapeHTML(v)}</dc:creator>\n)
61
58
  end
62
59
  end
63
60
 
64
61
  # contributor (should be array)
65
62
  %w[adp ann arr art asn aqt aft aui ant bkp clb cmm dsr edt ill lyr mdc mus nrt oth pht prt red rev spn ths trc trl].each do |role|
66
- next unless @producer.params[role]
67
- @producer.params.names_of(role).each do |v|
68
- s << %Q[ <dc:contributor opf:role="#{role}">#{CGI.escapeHTML(v)}</dc:contributor>\n]
69
- if role == "prt"
70
- s << %Q[ <dc:publisher>#{v}</dc:publisher>\n]
71
- end
63
+ next unless @producer.config[role]
64
+ @producer.config.names_of(role).each do |v|
65
+ s << %Q( <dc:contributor opf:role="#{role}">#{CGI.escapeHTML(v)}</dc:contributor>\n)
66
+ s << %Q( <dc:publisher>#{v}</dc:publisher>\n) if role == 'prt'
72
67
  end
73
68
  end
74
69
 
@@ -76,40 +71,40 @@ module EPUBMaker
76
71
  end
77
72
 
78
73
  def opf_manifest
79
- s = ""
74
+ s = ''
80
75
  s << <<EOT
81
76
  <manifest>
82
- <item id="ncx" href="#{@producer.params["bookname"]}.ncx" media-type="application/x-dtbncx+xml"/>
83
- <item id="#{@producer.params["bookname"]}" href="#{@producer.params["cover"]}" media-type="application/xhtml+xml"/>
77
+ <item id="ncx" href="#{@producer.config['bookname']}.ncx" media-type="application/x-dtbncx+xml"/>
78
+ <item id="#{@producer.config['bookname']}" href="#{@producer.config['cover']}" media-type="application/xhtml+xml"/>
84
79
  EOT
85
80
 
86
- s << %Q[ <item id="toc" href="#{@producer.params["bookname"]}-toc.#{@producer.params["htmlext"]}" media-type="application/xhtml+xml"/>\n] if @producer.params["toc"] && @producer.params["mytoc"]
81
+ s << %Q( <item id="toc" href="#{@producer.config['bookname']}-toc.#{@producer.config['htmlext']}" media-type="application/xhtml+xml"/>\n) if @producer.config['toc'] && @producer.config['mytoc']
87
82
 
88
83
  @producer.contents.each do |item|
89
84
  next if item.file =~ /#/ # skip subgroup
90
- s << %Q[ <item id="#{item.id}" href="#{item.file}" media-type="#{item.media}"/>\n]
85
+ s << %Q( <item id="#{item.id}" href="#{item.file}" media-type="#{item.media}"/>\n)
91
86
  end
92
- s << %Q[ </manifest>\n]
87
+ s << %Q( </manifest>\n)
93
88
  s
94
89
  end
95
90
 
96
91
  def opf_tocx
97
- if @producer.params["epubmaker"]["cover_linear"] && @producer.params["epubmaker"]["cover_linear"] != "no"
98
- cover_linear = "yes"
99
- else
100
- cover_linear = "no"
101
- end
92
+ cover_linear = if @producer.config['epubmaker']['cover_linear'] && @producer.config['epubmaker']['cover_linear'] != 'no'
93
+ 'yes'
94
+ else
95
+ 'no'
96
+ end
102
97
 
103
- s = ""
104
- s << %Q[ <spine toc="ncx">\n]
105
- s << %Q[ <itemref idref="#{@producer.params["bookname"]}" linear="#{cover_linear}"/>\n]
106
- s << %Q[ <itemref idref="toc" />\n] unless @producer.params["mytoc"].nil?
98
+ s = ''
99
+ s << %Q( <spine toc="ncx">\n)
100
+ s << %Q( <itemref idref="#{@producer.config['bookname']}" linear="#{cover_linear}"/>\n)
101
+ s << %Q( <itemref idref="toc" />\n) unless @producer.config['mytoc'].nil?
107
102
 
108
103
  @producer.contents.each do |item|
109
104
  next if item.media !~ /xhtml\+xml/ # skip non XHTML
110
- s << %Q[ <itemref idref="#{item.id}"/>\n]
105
+ s << %Q( <itemref idref="#{item.id}"/>\n)
111
106
  end
112
- s << %Q[ </spine>\n]
107
+ s << %Q( </spine>\n)
113
108
  s
114
109
  end
115
110
 
@@ -120,8 +115,7 @@ EOT
120
115
  @ncx_navmap = ncx_navmap(indentarray)
121
116
 
122
117
  tmplfile = File.expand_path('./ncx/epubv2.ncx.erb', ReVIEW::Template::TEMPLATE_DIR)
123
- tmpl = ReVIEW::Template.load(tmplfile)
124
- return tmpl.result(binding)
118
+ ReVIEW::Template.load(tmplfile).result(binding)
125
119
  end
126
120
 
127
121
  # Produce EPUB file +epubfile+.
@@ -130,13 +124,12 @@ EOT
130
124
  def produce(epubfile, basedir, tmpdir)
131
125
  produce_write_common(basedir, tmpdir)
132
126
 
133
- File.open("#{tmpdir}/OEBPS/#{@producer.params["bookname"]}.ncx", "w") {|f| @producer.ncx(f, @producer.params["epubmaker"]["ncxindent"]) }
134
- File.open("#{tmpdir}/OEBPS/#{@producer.params["bookname"]}-toc.#{@producer.params["htmlext"]}", "w") {|f| @producer.mytoc(f) } unless @producer.params["mytoc"].nil?
127
+ File.open("#{tmpdir}/OEBPS/#{@producer.config['bookname']}.ncx", 'w') { |f| @producer.ncx(f, @producer.config['epubmaker']['ncxindent']) }
128
+ File.open("#{tmpdir}/OEBPS/#{@producer.config['bookname']}-toc.#{@producer.config['htmlext']}", 'w') { |f| @producer.mytoc(f) } if @producer.config['mytoc']
135
129
 
136
- @producer.call_hook(@producer.params["epubmaker"]["hook_prepack"], tmpdir)
137
- expoter = EPUBMaker::ZipExporter.new(tmpdir, @producer.params)
130
+ @producer.call_hook(@producer.config['epubmaker']['hook_prepack'], tmpdir)
131
+ expoter = EPUBMaker::ZipExporter.new(tmpdir, @producer.config)
138
132
  expoter.export_zip(epubfile)
139
133
  end
140
-
141
134
  end
142
135
  end
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  # = epubv3.rb -- EPUB version 3 producer.
4
2
  #
5
3
  # Copyright (c) 2010-2017 Kenshi Muto
@@ -14,18 +12,13 @@ require 'epubmaker/epubcommon'
14
12
  require 'epubmaker/zip_exporter'
15
13
 
16
14
  module EPUBMaker
17
-
18
15
  # EPUBv3 is EPUB version 3 producer.
19
16
  class EPUBv3 < EPUBCommon
20
- # Construct object with parameter hash +params+ and message resource hash +res+.
17
+ # Construct object with parameter hash +config+ and message resource hash +res+.
21
18
  def initialize(producer)
22
19
  super
23
20
  @opf_prefix = {}
24
- if @producer.params["opf_prefix"].present?
25
- @producer.params["opf_prefix"].each do |k, v|
26
- @opf_prefix[k] = v
27
- end
28
- end
21
+ @producer.config['opf_prefix'].each { |k, v| @opf_prefix[k] = v } if @producer.config['opf_prefix'].present?
29
22
  end
30
23
 
31
24
  # Return opf file content.
@@ -33,189 +26,186 @@ module EPUBMaker
33
26
  @opf_metainfo = opf_metainfo
34
27
  @opf_manifest = opf_manifest
35
28
  @opf_toc = opf_tocx
36
- @package_attrs = ""
29
+ @package_attrs = ''
37
30
 
38
- if !@opf_prefix.empty?
39
- prefixes_str = @opf_prefix.map{|k,v| %Q|#{k}: #{v}| }.join(" ")
40
- @package_attrs << " prefix=\"#{prefixes_str}\""
31
+ if @opf_prefix && @opf_prefix.size > 0
32
+ prefixes_str = @opf_prefix.map { |k, v| %Q(#{k}: #{v}) }.join(' ')
33
+ @package_attrs << %Q( prefix="#{prefixes_str}")
41
34
  end
42
35
 
43
36
  tmplfile = File.expand_path('./opf/epubv3.opf.erb', ReVIEW::Template::TEMPLATE_DIR)
44
- tmpl = ReVIEW::Template.load(tmplfile)
45
- return tmpl.result(binding)
37
+ ReVIEW::Template.load(tmplfile).result(binding)
46
38
  end
47
39
 
48
40
  def opf_metainfo
49
- s = ""
41
+ s = ''
50
42
  %w[title language date type format source description relation coverage subject rights].each do |item|
51
- next unless @producer.params[item]
52
- if @producer.params[item].kind_of?(Array)
53
- @producer.params[item].each_with_index do |v, i|
54
- if v.kind_of?(Hash)
55
- s << %Q[ <dc:#{item} id="#{item}-#{i}">#{CGI.escapeHTML(v["name"])}</dc:#{item}>\n]
43
+ next unless @producer.config[item]
44
+ if @producer.config[item].is_a?(Array)
45
+ @producer.config[item].each_with_index do |v, i|
46
+ if v.is_a?(Hash)
47
+ s << %Q( <dc:#{item} id="#{item}-#{i}">#{CGI.escapeHTML(v['name'])}</dc:#{item}>\n)
56
48
  v.each_pair do |name, val|
57
- next if name == "name"
58
- s << %Q[ <meta refines="##{item}-#{i}" property="#{name}">#{CGI.escapeHTML(val)}</meta>\n]
49
+ next if name == 'name'
50
+ s << %Q( <meta refines="##{item}-#{i}" property="#{name}">#{CGI.escapeHTML(val)}</meta>\n)
59
51
  end
60
52
  else
61
- s << %Q[ <dc:#{item} id="#{item}-#{i}">#{CGI.escapeHTML(v.to_s)}</dc:#{item}>\n]
53
+ s << %Q( <dc:#{item} id="#{item}-#{i}">#{CGI.escapeHTML(v.to_s)}</dc:#{item}>\n)
62
54
  end
63
55
  end
64
- elsif @producer.params[item].kind_of?(Hash)
65
- s << %Q[ <dc:#{item} id="#{item}">#{CGI.escapeHTML(@producer.params[item]["name"])}</dc:#{item}>\n]
66
- @producer.params[item].each_pair do |name, val|
67
- next if name == "name"
68
- s << %Q[ <meta refines="##{item}" property="#{name}">#{CGI.escapeHTML(val)}</meta>\n]
56
+ elsif @producer.config[item].is_a?(Hash)
57
+ s << %Q( <dc:#{item} id="#{item}">#{CGI.escapeHTML(@producer.config[item]['name'])}</dc:#{item}>\n)
58
+ @producer.config[item].each_pair do |name, val|
59
+ next if name == 'name'
60
+ s << %Q( <meta refines="##{item}" property="#{name}">#{CGI.escapeHTML(val)}</meta>\n)
69
61
  end
70
62
  else
71
- s << %Q[ <dc:#{item} id="#{item}">#{CGI.escapeHTML(@producer.params[item].to_s)}</dc:#{item}>\n]
63
+ s << %Q( <dc:#{item} id="#{item}">#{CGI.escapeHTML(@producer.config[item].to_s)}</dc:#{item}>\n)
72
64
  end
73
65
  end
74
66
 
75
- s << %Q[ <meta property="dcterms:modified">#{@producer.params["modified"]}</meta>\n]
67
+ s << %Q( <meta property="dcterms:modified">#{@producer.config['modified']}</meta>\n)
76
68
 
77
69
  # ID
78
- if @producer.params["isbn"].nil?
79
- s << %Q[ <dc:identifier id="BookId">#{@producer.params["urnid"]}</dc:identifier>\n]
70
+ if @producer.config['isbn'].nil?
71
+ s << %Q( <dc:identifier id="BookId">#{@producer.config['urnid']}</dc:identifier>\n)
80
72
  else
81
- s << %Q[ <dc:identifier id="BookId">#{@producer.params["isbn"]}</dc:identifier>\n]
73
+ s << %Q( <dc:identifier id="BookId">#{@producer.config['isbn']}</dc:identifier>\n)
82
74
  end
83
75
 
84
76
  # creator (should be array)
85
77
  %w[a-adp a-ann a-arr a-art a-asn a-aqt a-aft a-aui a-ant a-bkp a-clb a-cmm a-csl a-dsr a-edt a-ill a-lyr a-mdc a-mus a-nrt a-oth a-pht a-prt a-red a-rev a-spn a-ths a-trc a-trl aut].each do |role|
86
- next unless @producer.params[role]
87
- @producer.params[role].each_with_index do |v, i|
88
- if v.kind_of?(Hash)
89
- s << %Q[ <dc:creator id="#{role}-#{i}">#{CGI.escapeHTML(v["name"])}</dc:creator>\n]
90
- s << %Q[ <meta refines="##{role}-#{i}" property="role" scheme="marc:relators">#{role.sub('a-', '')}</meta>\n]
78
+ next unless @producer.config[role]
79
+ @producer.config[role].each_with_index do |v, i|
80
+ if v.is_a?(Hash)
81
+ s << %Q( <dc:creator id="#{role}-#{i}">#{CGI.escapeHTML(v['name'])}</dc:creator>\n)
82
+ s << %Q( <meta refines="##{role}-#{i}" property="role" scheme="marc:relators">#{role.sub('a-', '')}</meta>\n)
91
83
  v.each_pair do |name, val|
92
- next if name == "name"
93
- s << %Q[ <meta refines="##{role.sub('a-', '')}-#{i}" property="#{name}">#{CGI.escapeHTML(val)}</meta>\n]
84
+ next if name == 'name'
85
+ s << %Q( <meta refines="##{role.sub('a-', '')}-#{i}" property="#{name}">#{CGI.escapeHTML(val)}</meta>\n)
94
86
  end
95
87
  else
96
- s << %Q[ <dc:creator id="#{role}-#{i}">#{CGI.escapeHTML(v)}</dc:creator>\n]
97
- s << %Q[ <meta refines="##{role}-#{i}" property="role" scheme="marc:relators">#{role.sub('a-', '')}</meta>\n]
88
+ s << %Q( <dc:creator id="#{role}-#{i}">#{CGI.escapeHTML(v)}</dc:creator>\n)
89
+ s << %Q( <meta refines="##{role}-#{i}" property="role" scheme="marc:relators">#{role.sub('a-', '')}</meta>\n)
98
90
  end
99
91
  end
100
92
  end
101
93
 
102
94
  # contributor (should be array)
103
95
  %w[adp ann arr art asn aqt aft aui ant bkp clb cmm csl dsr edt ill lyr mdc mus nrt oth pbd pbl pht prt red rev spn ths trc trl].each do |role|
104
- next unless @producer.params[role]
105
- @producer.params[role].each_with_index do |v, i|
106
- if v.kind_of?(Hash)
107
- s << %Q[ <dc:contributor id="#{role}-#{i}">#{CGI.escapeHTML(v["name"])}</dc:contributor>\n]
108
- s << %Q[ <meta refines="##{role}-#{i}" property="role" scheme="marc:relators">#{role}</meta>\n]
96
+ next unless @producer.config[role]
97
+ @producer.config[role].each_with_index do |v, i|
98
+ if v.is_a?(Hash)
99
+ s << %Q( <dc:contributor id="#{role}-#{i}">#{CGI.escapeHTML(v['name'])}</dc:contributor>\n)
100
+ s << %Q( <meta refines="##{role}-#{i}" property="role" scheme="marc:relators">#{role}</meta>\n)
109
101
  v.each_pair do |name, val|
110
- next if name == "name"
111
- s << %Q[ <meta refines="##{role}-#{i}" property="#{name}">#{CGI.escapeHTML(val)}</meta>\n]
102
+ next if name == 'name'
103
+ s << %Q( <meta refines="##{role}-#{i}" property="#{name}">#{CGI.escapeHTML(val)}</meta>\n)
112
104
  end
113
105
  else
114
- s << %Q[ <dc:contributor id="#{role}-#{i}">#{CGI.escapeHTML(v)}</dc:contributor>\n]
115
- s << %Q[ <meta refines="##{role}-#{i}" property="role" scheme="marc:relators">#{role}</meta>\n]
106
+ s << %Q( <dc:contributor id="#{role}-#{i}">#{CGI.escapeHTML(v)}</dc:contributor>\n)
107
+ s << %Q( <meta refines="##{role}-#{i}" property="role" scheme="marc:relators">#{role}</meta>\n)
116
108
  end
117
109
 
118
- if role == "prt" || role == "pbl"
119
- if v.kind_of?(Hash)
120
- s << %Q[ <dc:publisher id="pub-#{role}-#{i}">#{CGI.escapeHTML(v["name"])}</dc:publisher>\n]
121
- s << %Q[ <meta refines="#pub-#{role}-#{i}" property="role" scheme="marc:relators">#{role}</meta>\n]
110
+ if %w[prt pbl].include?(role)
111
+ if v.is_a?(Hash)
112
+ s << %Q( <dc:publisher id="pub-#{role}-#{i}">#{CGI.escapeHTML(v['name'])}</dc:publisher>\n)
113
+ s << %Q( <meta refines="#pub-#{role}-#{i}" property="role" scheme="marc:relators">#{role}</meta>\n)
122
114
  v.each_pair do |name, val|
123
- next if name == "name"
124
- s << %Q[ <meta refines="#pub-#{role}-#{i}" property="#{name}">#{CGI.escapeHTML(val)}</meta>\n]
115
+ next if name == 'name'
116
+ s << %Q( <meta refines="#pub-#{role}-#{i}" property="#{name}">#{CGI.escapeHTML(val)}</meta>\n)
125
117
  end
126
118
  else
127
- s << %Q[ <dc:publisher id="pub-#{role}-#{i}">#{CGI.escapeHTML(v)}</dc:publisher>\n]
128
- s << %Q[ <meta refines="#pub-#{role}-#{i}" property="role" scheme="marc:relators">prt</meta>\n]
119
+ s << %Q( <dc:publisher id="pub-#{role}-#{i}">#{CGI.escapeHTML(v)}</dc:publisher>\n)
120
+ s << %Q( <meta refines="#pub-#{role}-#{i}" property="role" scheme="marc:relators">prt</meta>\n)
129
121
  end
130
122
  end
131
123
  end
132
124
  end
133
125
 
134
126
  ## add custom <meta> element
135
- if @producer.params["opf_meta"].present?
136
- @producer.params["opf_meta"].each do |k, v|
137
- s << %Q[ <meta property="#{k}">#{CGI.escapeHTML(v)}</meta>\n]
138
- end
139
- end
127
+ @producer.config['opf_meta'].each { |k, v| s << %Q( <meta property="#{k}">#{CGI.escapeHTML(v)}</meta>\n) } if @producer.config['opf_meta'].present?
140
128
 
141
129
  s
142
130
  end
143
131
 
144
132
  def opf_manifest
145
- s = ""
133
+ s = ''
146
134
  s << <<EOT
147
135
  <manifest>
148
- <item properties="nav" id="#{@producer.params["bookname"]}-toc.#{@producer.params["htmlext"]}" href="#{@producer.params["bookname"]}-toc.#{@producer.params["htmlext"]}" media-type="application/xhtml+xml"/>
149
- <item id="#{@producer.params["bookname"]}" href="#{@producer.params["cover"]}" media-type="application/xhtml+xml"/>
136
+ <item properties="nav" id="#{@producer.config['bookname']}-toc.#{@producer.config['htmlext']}" href="#{@producer.config['bookname']}-toc.#{@producer.config['htmlext']}" media-type="application/xhtml+xml"/>
137
+ <item id="#{@producer.config['bookname']}" href="#{@producer.config['cover']}" media-type="application/xhtml+xml"/>
150
138
  EOT
151
139
 
152
- if @producer.params["coverimage"]
140
+ if @producer.config['coverimage']
153
141
  @producer.contents.each do |item|
154
- if item.media.start_with?('image') && File.basename(item.file) == @producer.params["coverimage"]
155
- s << %Q[ <item properties="cover-image" id="cover-#{item.id}" href="#{item.file}" media-type="#{item.media}"/>\n]
156
- item.id = nil
157
- break
158
- end
142
+ next if !item.media.start_with?('image') || File.basename(item.file) != @producer.config['coverimage']
143
+ s << %Q( <item properties="cover-image" id="cover-#{item.id}" href="#{item.file}" media-type="#{item.media}"/>\n)
144
+ item.id = nil
145
+ break
159
146
  end
160
147
  end
161
148
 
162
149
  @producer.contents.each do |item|
163
150
  next if item.file =~ /#/ || item.id.nil? # skip subgroup, or id=nil (for cover)
164
- propstr = ""
151
+ propstr = ''
165
152
  if item.properties.size > 0
166
- propstr = %Q[ properties="#{item.properties.sort.uniq.join(" ")}"]
153
+ propstr = %Q( properties="#{item.properties.sort.uniq.join(' ')}")
167
154
  end
168
- s << %Q[ <item id="#{item.id}" href="#{item.file}" media-type="#{item.media}"#{propstr}/>\n]
155
+ s << %Q( <item id="#{item.id}" href="#{item.file}" media-type="#{item.media}"#{propstr}/>\n)
169
156
  end
170
- s << %Q[ </manifest>\n]
157
+ s << %Q( </manifest>\n)
171
158
 
172
159
  s
173
160
  end
174
161
 
175
162
  def opf_tocx
176
- if @producer.params["epubmaker"]["cover_linear"] && @producer.params["epubmaker"]["cover_linear"] != "no"
177
- cover_linear = "yes"
163
+ if @producer.config['epubmaker']['cover_linear'] && @producer.config['epubmaker']['cover_linear'] != 'no'
164
+ cover_linear = 'yes'
178
165
  else
179
- cover_linear = "no"
166
+ cover_linear = 'no'
180
167
  end
181
168
 
182
- s = ""
183
- if @producer.params["direction"]
184
- s << %Q[ <spine page-progression-direction="#{@producer.params["direction"]}">\n]
169
+ s = ''
170
+ if @producer.config['direction']
171
+ s << %Q( <spine page-progression-direction="#{@producer.config['direction']}">\n)
185
172
  else
186
- s << %Q[ <spine>\n]
173
+ s << %Q( <spine>\n)
187
174
  end
188
- s << %Q[ <itemref idref="#{@producer.params["bookname"]}" linear="#{cover_linear}"/>\n]
189
- s << %Q[ <itemref idref="#{@producer.params["bookname"]}-toc.#{@producer.params["htmlext"]}" />\n] if @producer.params["toc"]
175
+ s << %Q( <itemref idref="#{@producer.config['bookname']}" linear="#{cover_linear}"/>\n)
190
176
 
177
+ toc = nil
191
178
  @producer.contents.each do |item|
192
179
  next if item.media !~ /xhtml\+xml/ # skip non XHTML
193
- s << %Q[ <itemref idref="#{item.id}"/>\n]
180
+ if toc.nil? && item.chaptype != 'pre'
181
+ s << %Q( <itemref idref="#{@producer.config['bookname']}-toc.#{@producer.config['htmlext']}" />\n) if @producer.config['toc']
182
+ toc = true
183
+ end
184
+ s << %Q( <itemref idref="#{item.id}"/>\n)
194
185
  end
195
- s << %Q[ </spine>\n]
186
+ s << %Q( </spine>\n)
196
187
 
197
188
  s
198
189
  end
199
190
 
200
191
  def ncx(indentarray)
201
- if @producer.params["epubmaker"]["flattoc"].nil?
202
- ncx_main = hierarchy_ncx("ol")
203
- else
204
- ncx_main = flat_ncx("ol", @producer.params["epubmaker"]["flattocindent"])
205
- end
192
+ ncx_main = if @producer.config['epubmaker']['flattoc'].nil?
193
+ hierarchy_ncx('ol')
194
+ else
195
+ flat_ncx('ol', @producer.config['epubmaker']['flattocindent'])
196
+ end
206
197
 
207
198
  @body = <<EOT
208
199
  <nav xmlns:epub="http://www.idpf.org/2007/ops" epub:type="toc" id="toc">
209
- <h1 class="toc-title">#{CGI.escapeHTML(@producer.res.v("toctitle"))}</h1>
200
+ <h1 class="toc-title">#{CGI.escapeHTML(@producer.res.v('toctitle'))}</h1>
210
201
  #{ncx_main} </nav>
211
202
  EOT
212
203
 
213
- @title = CGI.escapeHTML(@producer.res.v("toctitle"))
214
- @language = @producer.params['language']
215
- @stylesheets = @producer.params["stylesheet"]
204
+ @title = CGI.escapeHTML(@producer.res.v('toctitle'))
205
+ @language = @producer.config['language']
206
+ @stylesheets = @producer.config['stylesheet']
216
207
  tmplfile = File.expand_path('./html/layout-html5.html.erb', ReVIEW::Template::TEMPLATE_DIR)
217
- tmpl = ReVIEW::Template.load(tmplfile)
218
- return tmpl.result(binding)
208
+ ReVIEW::Template.load(tmplfile).result(binding)
219
209
  end
220
210
 
221
211
  # Produce EPUB file +epubfile+.
@@ -224,10 +214,10 @@ EOT
224
214
  def produce(epubfile, basedir, tmpdir)
225
215
  produce_write_common(basedir, tmpdir)
226
216
 
227
- File.open("#{tmpdir}/OEBPS/#{@producer.params["bookname"]}-toc.#{@producer.params["htmlext"]}", "w") {|f| @producer.ncx(f, @producer.params["epubmaker"]["ncxindent"]) }
217
+ File.open("#{tmpdir}/OEBPS/#{@producer.config['bookname']}-toc.#{@producer.config['htmlext']}", 'w') { |f| @producer.ncx(f, @producer.config['epubmaker']['ncxindent']) }
228
218
 
229
- @producer.call_hook(@producer.params["epubmaker"]["hook_prepack"], tmpdir)
230
- expoter = EPUBMaker::ZipExporter.new(tmpdir, @producer.params)
219
+ @producer.call_hook(@producer.config['epubmaker']['hook_prepack'], tmpdir)
220
+ expoter = EPUBMaker::ZipExporter.new(tmpdir, @producer.config)
231
221
  expoter.export_zip(epubfile)
232
222
  end
233
223
  end